Ir para conteúdo
  • Cadastre-se

dev botao

CRT de valor 0,35 no Delphi não está passando nem no DEMO


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

Recommended Posts

  • Consultores

Pelo que me parece isso só acontece na versão do Delphi, e não se você compilar ele em Lazarus.

Passos para reproduzir:


    Iniciar o DEMO do ACBrTEFD
    Configurar o ECF (no meu caso Emulador 2100 da Bematech)
    Inicializar ECF
    Deixar Múltiplos cartões desabilitado
    Inicializar Gerenciador Padrão (se ainda não foi feito)
    Abrir cupom e vender um item de 0,35
    Chamar CRT de 0,35

Retorno:

Multiplos Cartões não habilitado.

Valor da Operação TEF deve ser igual ao Saldo a Pagar

O erro acontece na função TACBrTEFDClass.VerificarTransacaoPagamento. Na seguinte verificação (linha 2363 do arquivoTACBrTEFDClass.pas):

    if (not MultiplosCartoes) and (Valor 
       raise Exception.Create(
ACBrStr( 'Multiplos Cartões não habilitado.' + sLineBreak +
'Valor da Operação TEF deve ser igual ao Saldo a Pagar' ) );
[/code]

O motivo é que o valor de SaldoAPagar vem de SubTotalECF que é do tipo [i]Extended[/i], mas SaldoAPagar é [i]Double[/i]. Por isso o valor que fica armazenado em SaldoAPagar é realmente diferente de Valor.

A solução pra esse tipo de comparação é usar a função CompareValue da unit Math. Mas ela não parece retornar o valor correto no Lazarus. Então a solução mais rápida foi adicionar um [b]RoundTo(SaldoAPagar,-2)[/b] antes de comparar as duas variáveis.

Gostaria que alguém pudesse confirmar o erro e se isso não afeta o funcionamento no lazarus. Em anexo a unit alterada.

ACBrTEFDClass.pas

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Consultores

Talvez a melhor solução seja usar a rotina CompareValue especificando o delta.

    if (not MultiplosCartoes) and (CompareValue(Valor, SaldoAPagar, 0.01) = LessThanValue) then
raise Exception.Create(
ACBrStr( 'Multiplos Cartões não habilitado.' + sLineBreak +
'Valor da Operação TEF deve ser igual ao Saldo a Pagar' ) );[/code]

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Elton,

Acho que o RoundTo deve resolver a parada...

O que achei estranho... é que a Funçao "SubTotalECF" também é do tipo Double

function TACBrTEFD.SubTotalECF : Double;
Assim como o parâmetro de Entrada "Valor" que tb é Double Talvez seja isso... No final da Função ACBrTEFD.SubTotalECF existe um SimpleRoundTo
   SaldoAPagar := SimpleRoundTo( SaldoAPagar, -2);     // por Rodrigo Baltazar

Se mudar para RoundTo não resolve ?

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.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Também achei isso muito estranho pois no Delphi dá erro mas no Lazarus não deu nos meus testes aqui...

Daí criei um aplicativo tentando reproduzir a mesma coisa por fora da unit ACBrTEFDClass.pas, mas também não consegui.

Vou testar a sua sugestão agora...

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Consultores

Olá Daniel,

Resolve sim. Mudar de SimpleRoundTo para RoundTo resolveu o problema.

EDIT:Quer que eu suba a alteração?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Consultores

Feito. Revisão 3271

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

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