Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

  • Membros Pro
Postado

Olá a todos,

Gostaria de compartilhar mais um pequeno caso que localizei na unit: ACBrECFVirtual, exatamente no método: EfetuaPagamento.

O método estava programado da seguinte forma:

function TACBrECFVirtualClassCupom.EfetuaPagamento(AValor: Currency;
  AObservacao: String; APosFPG: Integer): TACBrECFVirtualClassPagamentoCupom;
begin
  Result := fpPagamentosCupom.New;

  with Result do
  begin
    PosFPG     := APosFPG ;
    ValorPago  := fpECFVirtualClasse.RoundECF(AValor);
    Observacao := AObservacao ;

    fpTotalPago := fpTotalPago + max(ValorPago, 0);
  end;
end;

Esse método fpECFVirtualClasse.RoundECF utiliza a property fpArredondaItemMFD, e a mesma está igual a False no meu caso. Ou seja, o sistema irá truncar o valor os valores. (Essa propriedade precisa ficar False, pois os produtos nesse caso precisam ser truncados na venda)

Ex: Enviei um pagamento de 78,22, o método que efetua o TruncTo retornava 78,21;

Pensando nisso esse Valor não deveria ser formatado, pois o mesmo já vem com seu valor respectivamente correto, pois no método: EfetuaPagamento da unit: ACBrECF (TACBrECF.EfetuaPagamento) já faz a devida formatação do campo, enviando assim corretamente para unit: ACBrECFVirtual;

Meu método ficou da seguinte forma:

function TACBrECFVirtualClassCupom.EfetuaPagamento(AValor: Currency;
  AObservacao: String; APosFPG: Integer): TACBrECFVirtualClassPagamentoCupom;
begin
  Result := fpPagamentosCupom.New;

  with Result do
  begin
    PosFPG     := APosFPG ;
    ValorPago  := AValor; //fpECFVirtualClasse.RoundECF(AValor);
    Observacao := AObservacao ;

    fpTotalPago := fpTotalPago + max(ValorPago, 0);
  end;
end;

Não consegui pensar em outra solução ou encontrar algo que mudasse esse calculo.

Peço por gentileza que desconsidere a sugestão caso exista outra.

Agradeço a todos pela ajuda desde já.

ACBrECFVirtual.pas

Atenciosamente,

 

 Assinatura.png

  • Fundadores
Postado

Não compreendo... TruncTo(78.22, -2) nunca poderia retornar 78,21...

Sugiro você testar a UnitTeste do projeto "ACBrComumTesteCase", para testar o método: TruncTo

Introduzi o seguinte teste nela... que rodou sem problemas...


procedure TruncToTest.As199Double;
var
  VValor: Double;
begin
  VValor := 1 * 78.22;
  CheckEquals(78.22, TruncTo( VValor, 2 ), 0.001);
end;  

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Membros Pro
Postado

Boa tarde Daniel,

Primeiramente obrigado pelo retorno.

Também não compreendo, mas nos testes feitos o TruncTo estava sempre retornando 0,01 centavos a menos do que foi passado para ele.

Não sei se pode ser a versão do Delphi utilizada pois a minha versão é o Delphi 7.

Testamos se era algo relacionado ao SetRoundMode, pois já tivemos problemas relacionados em formatação, mas mesmo passando para o SetRoundMode(rmNearest) o calculo fica incorreto.

Você acha necessário ter a formatação desse valor, já que o mesmo já está vindo formatado corretamente da unit:  ACBrECF.

Mais uma vez obrigado pela atenção.

 

Atenciosamente,

 

 Assinatura.png

  • Fundadores
Postado

Sim, pois como o valor é informado de fora... ele pode não vir formatado corretamente em 2 casas

Use os testes Unitários do ACBr, e verifique porque você tem esse resultado estranho com "TruncTo"

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Este tópico foi criado há 2838 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.