Ir para conteúdo
  • Cadastre-se

Nemi vieira

Membros
  • Total de ítens

    10
  • Registro em

  • Última visita

Posts postados por Nemi vieira

  1. 16 minutos atrás, BigWings disse:

    É preciso cuidado ao usar esse modificador, ele afeta os cálculos globalmente, inclusive a impressão do boleto sai errada com o Fortes Report.

    Não vejo necessidade de você alterar o fonte do ACBrBoleto, basta isolar a chamada ao SetRoundMode dentro de uma rotina do seu código, sempre voltando ao modo anterior.

    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

     

    Screenshot_8.png

     

    ACBrBancoABCBrasil.pas

  3. 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

  4. 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

  5. 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

    Screenshot_1.png

    Screenshot_2.png

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

The popup will be closed in 10 segundos...