Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2186 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde.

Estou com um problema chato com erros de centavos nos boletos.

Por exemplo: Valor do título: 591,67

No código de barras, gera 59166

Na imagem em anexo dá pra ver que o componente foi alimentado com 591,67

mas ao converter  com   IntToStrZero(Trunc(ACBrTitulo.ValorDocumento * 100), 10)

retorna 59166

Já tentei tudo o que está ao meu alcance.

Testei todas as funções de arredondamento e nenhuma resolveu.

A unica solução foi converter para string, remover o ponto decimal e preencher os zeros a esquerda com:

       ValorStr:=FloatToStr(ACBrTitulo.ValorDocumento);
       ValorStr:=StringReplace(ValorStr , ',' , '' , [rfreplaceall]);
       ValorStr:=PadLeft(ValorStr,10,'0');

       CodigoBarras := IntToStr( Numero ) +
                       '9' +
                       FatorVencimento +
                       ValorStr +
                         // IntToStrZero(Trunc(ACBrTitulo.ValorDocumento * 100), 10) +    <<<<==== desta forma dá erro nos centavos
                       ANossoNumero +
                       aAgenciaCC +
                       '000';

Nenhum de vocês teve problema deste tipo ?

Vou ter que ficar atento sempre que o ACBrBoleto for atualizado, e refazer esta alteração para não voltar o problema.

 

[]´s

Edson.

ErroCodigBarras.jpg

  • 2 semanas depois ...
  • Administradores
Postado

Boa tarde.

Conseguiu identificar o problema?

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Postado (editado)

Boa noite Juliana.

Desconfio que o meu problema deve ser algo citado em outro tópico:

No meu caso, o valor gravado no banco de dados por exemplo: 123,45 (Campo Decimal 12,2)

Quando recupero o valor de um TField, vem como 123,4501

Fiz uma alteração nos fontes do ACBrBoleto, vou anexar para vocês analisarem se pode ser incluído no repositório.

Criei uma função utilizando o FloatToStrF, que foi a única forma de eliminar os dois últimos dígitos "fantasmas", pois com Round e suas variações não funcionou

function FormatarValorComZeros(Valor: Double; Tamanho: Integer): String;
var ValorStr: String;
begin
  ValorStr:=FloatToStrF(Valor,ffFixed,10,2);
  ValorStr:=StringReplace(ValorStr,',','',[rfreplaceall]);
  ValorStr:=PadLeft(ValorStr,Tamanho,'0');
  Result:=ValorStr;
end;

 

Na função MontarCodigoBarras, alterei

de      IntToStrZero(Round(ACBrTitulo.ValorDocumento * 100), 10) 

para  FormatarValorComZeros(ACBrTitulo.ValorDocumento,10)

 

[]´s

Edson.

ACBrBoleto.rar

Editado por Edson.pol
  • 1 mês depois ...
Postado

Bom dia Juliana !

Sobre o post acima, seria possível implementar no ACBrBoleto ?

Pesquisando sobre o problema, vi que alguma DLL carregada (provavelmente para assinar XML) está afetando o comportamento do ponto flutuante.

Não consegui detectar qual delas é a "culpada", mas achei uma solução.

 

criar uma variável global:

Saved8087CW: Word;

 

no evendo OnCreate do formuário principal:

    Saved8087CW:=Default8087CW;

 

No evento OnCreate do formulário onde está havendo problema com cálculo (decimais)

    System.Set8087CW(Saved8087CW);

 

Os comandos "round" são afetados pelo problema do ponto flutuante, mas a função abaixo funciona corretamente (o FloatToStrF não é afetado pelo problema)

function FormatarValorComZeros(Valor: Double; Tamanho: Integer): String;
var ValorStr: String;
begin
  ValorStr:=FloatToStrF(Valor,ffFixed,10,2);
  ValorStr:=StringReplace(ValorStr,',','',[rfreplaceall]);
  ValorStr:=PadLeft(ValorStr,Tamanho,'0');
  Result:=ValorStr;
end;

 

 

[]´s

Edson.

  • Administradores
Postado

Boa tarde.

Adicionei sua sugestão a fila de análise,  obrigada.

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 2186 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.