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:
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