-
Total de ítens
10 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por Nemi vieira
-
-
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
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 -
3 horas atrás, BigWings disse:
Eu diria pra você fazer o inverso, trocar Double e AsFloat por Currency e AsCurrency.
Não tem motivo pra um campo de valor monetário precisar de ponto flutuante.
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
-
3 horas atrás, Victor H. Gonzales - Panda disse:
tudo indica que sua variável é float;
altere para decimal por exemplo
se eu usar o as AsCurrency do field ele devolver o valor 36.4201
-
-
-
var ValorTitulo:Double;
-
-
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 7ACBrValidador,
ACBrBoleto;Corrigido na At revision: 23636
-
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
Valor do titulo arredondado na remessa errado
em ACBrBoleto
Postado
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