Ir para conteúdo
  • Cadastre-se

Nemi vieira

Membros
  • Total de ítens

    10
  • Registro em

  • Última visita

Nemi vieira's Achievements

Rookie

Rookie (2/14)

  • Collaborator Rare
  • First Post
  • Conversation Starter
  • Week One Done
  • One Month Later

Recent Badges

0

Reputação

  1. essa foi a outra forma de resolver o problema, foi que eu fiz, sobre as alterações no ACBrBoleto seria para nao pegar essas alterçoes feita pelo usuário, claro tem que ver os pros e contra
  2. Atualizei o componente e problema voltou, depois de alguns testes localizei fonte do problema O problema foi ocasionado por essa função SetRoundMode(rmUp); tive problemas com arrendamento quando a segunda casa decimal era 5 o sistema não arredondava para cima então incrementei essa função SetRoundMode(rmUp) resolveu meu problema de arredondamento mas como o componente ACBBoleto faz uso da função round na função TACBrBancoBrasil.MontarCodigoBarras ele faz o arredondamento errado x.4201 para x.423 quanto que na verdade deveria fica x.42 fonte Rotinas de arredondamento: Round, RoundTo, SimpleRoundTo, SetRoundMode e GetRoundMode (devmedia.com.br) Uma das soluções para manter a compatibilidade foi essa na função TACBrBancoBrasil.MontarCodigoBarras //Salva o modo de arredondamento utilizado pelo o usuário, caso não seja o modo default do delphi ModeRoundUser:=GetRoundMode(); Try //seta o modo default para evitar arredondamento errado tipo de "0.4201" para "0.423" SetRoundMode(rmNearest); CodigoBarras := IntToStrZero(Banco.Numero, 3) + '9' + FatorVencimento + IntToStrZero(Round(ACBrTitulo.ValorDocumento * 100), 10) + IfThen((Length(AConvenio) = 7), '000000', '') + ANossoNumero + IfThen((Length(AConvenio) < 7), PadLeft(OnlyNumber(Cedente.Agencia), 4, '0'), '') + IfThen((Length(AConvenio) < 7), IntToStrZero(StrToIntDef(OnlyNumber(Cedente.Conta),0),8), '') + ACBrTitulo.Carteira; Finally //Restabelece o arredondamento do usuário SetRoundMode(ModeRoundUser); end ACBrBancoABCBrasil.pas
  3. se eu usar o AsCurrency do field ele devolver o valor 36.4201, depois que vi isso alterei no componente e deu certo, vou realizar alguns testes para confirmar
  4. se eu usar o as AsCurrency do field ele devolver o valor 36.4201
  5. Alterei o Currency pro double e problema resolvido
  6. ValorTitulo:=MyRoundDOS(DataSet.FieldByName('bol_valor').AsFloat,2) ValorTitulo=36.42 passo duas casa fixa nao sei como ele pega as 4 casas
  7. unit ACBrBoletoW_Credisis; interface Uses Classes, SysUtils, DateUtils, ACBrBoletoWS, pcnConversao, pcnGerador, ACBrBoletoConversao, Soap.InvokeRegistry, << erro delphi 7 Soap.SOAPHTTPClient, << erro delphi 7 System.Types, << erro delphi 7 ACBrValidador, ACBrBoleto; Corrigido na At revision: 23636
  8. Estou com um problema com arredondamento no valor do boleto na remessa Estou enviando um boleto ao banco do brasil com valor 36.42, mas por algum motivo está indo na remessa com um centavo a mais. ValorTitulo=36.42 Quando o processo chega na função MontarCodigoBarras do arquivo ACBrBancoBrasil.pas o valor do titulo é alterado para 36.4201 e ao passa na linha IntToStrZero(Round(ACBrTitulo.ValorDocumento * 100), 10) ele devolve o valor arredondado para 36.43 CodigoBarras = 0019881600000036430000002851442210020579117 Não sei onde ele localizou o valor 36.4201 por não tem em lugar algum esse valor com decimais 4201 mesmo assim não deveria arredonda para cima At revision: 23636
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.