Ir para conteúdo
  • Cadastre-se

dev botao

Fluxo do pagamento com TEF (usando ACBrECF+ACBrTEFD)


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

Recommended Posts

  • Moderadores

Não estou conseguindo realizar o fluxo completo de uma transação TEF usando o ACBrECF1 + ACBrTEFD + CliSiTef

bStatusTransacao := ACBrTEFD1.CRT(VlrFormaPagto,
                                  FormatFloat('00',CodFormapagto),
                                  Frm_ECFPrincipal.ACBrECF1.NumCOO);

              if bStatusTransacao then
                begin
                  bEnviouTEF := True;
                  Inc(IndiceTransacaoTef);
                  if not(Frm_ECFPrincipal.ACBrTEFD1.AutoFinalizarCupom) then
                  begin
                    Frm_ECFPrincipal.mmProcesso.Lines.Add('Pagamento [' + sCRTCHQ + ']' + FormatFloat('#,###,##0.00',VlrFormaPagto) +
                                                          '][NSU:'+Frm_ECFPrincipal.ACBrTEFD1.RespostasPendentes[IndiceTransacaoTef].NSU +
                                                          '][Rede:'+Frm_ECFPrincipal.ACBrTEFD1.RespostasPendentes[IndiceTransacaoTef].Rede+ ']');
                    Frm_ECFPrincipal.ACBrTEFD1.FinalizarCupom( False );  { False não desbloqueia o MouseTeclado }
                    Frm_ECFPrincipal.ACBrTEFD1.ImprimirTransacoesPendentes;
                  end;

sendo VlrFormaPagto = 0.01, CodFormaPagto = 03 = Cartão de Crédito (uma única forma de pagamento usando cartão. O valor do cupom de venda é 0.01)

Consigo chegar até a mensagem TRANSACAO OK. E no log, o comprovante está correto. 

Porém, logo em seguida, vem a mensagem Transação Não Efetuada. Favor Reter o Cupom. 

O componente está configurado para AutoFinalizarCupom = False. Mas já tentei também = True e não funcionou.

Creio que seja a falta do comando ACBrTEFD1.CNF, mas em que momento usar o comando? 
 

Link para o comentário
Compartilhar em outros sites

  • Consultores
14 horas atrás, Gr@c@ disse:

Creio que seja a falta do comando ACBrTEFD1.CNF, mas em que momento usar o comando? 

O comando CNF é chamado automaticamente. Ele é chamado dentro do ConfirmarTransacoesPendentes, que é chamado dentro do ImprimirTransacoesPendentes.

TACBrTEFD.ImprimirTransacoesPendentes -> ConfirmarTransacoesPendentes -> CNF.

Mas ele só é chamado se a impressão ocorrer corretamente. Veja o finally do método TACBrTEFD.ImprimirTransacoesPendentes perto da linha 1141 do arquivo ACBrTEFD.pas

Você pode debugar esse método, a saber ImprimirTransacoesPendentes,  e avaliar o que está acontecendo para obter mais informações.

  • Curtir 1

[]'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

  • Moderadores

Debugando o aplicativo, verifiquei que ocorre um erro nesse momento:

function TACBrTEFD.ECFPagamento(Indice: String; Valor: Double): Integer;
Var
   Erro : String ;
begin
  fTefClass.GravaLog( fTefClass.Name +' ECFPagamento: Indice: '+
    Indice + ' Valor: '+FormatFloat('0.00',Valor) ) ;

  Result := -1 ;  // -1 = Não tratado
  OnComandaECFPagamento( Indice, Valor, Result ) ;----------------------> a excessão ocorre aqui

  if Result < 1 then
  begin
     if Result = 0 then
        Erro := 'Erro ao executar "OnComandaECFPagamento"'
     else
        Erro := '"OnComandaECFPagamento" não tratada' ;

     fTefClass.GravaLog(Erro);

     raise EACBrTEFDECF.Create( ACBrStr( Erro ) )
  end;
end;

 

e o evento ACBrTEFD1ComandaECFPagamento está assim. Sendo que o valor do cupom é 0,01 e o valor da forma de pagamento em cartão de crédito é 0,01

procedure TFrm_ECFPrincipal.ACBrTEFD1ComandaECFPagamento(IndiceECF: String;
  Valor: Double; var RetornoECF: Integer);
var
   Est : TACBrECFEstado ;
begin
  try
     mmprocesso.Lines.Add( 'ComandaECFPagamento, IndiceECF: '+IndiceECF+
        ' Valor: '+FormatFloat('0.00',Valor) );
     Est := ACBrECF1.Estado;
     if Est = estNaoFiscal then
        ACBrECF1.EfetuaPagamentoNaoFiscal(IndiceECF, Valor)
     else
        ACBrECF1.EfetuaPagamento(IndiceECF, Valor);
     RetornoECF := 1 ;
  except
     RetornoECF := 0 ;
  end;
end;

o erro de exceção e o log do tef estão em anexoSem título.png

CliSiTef.log

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Novos testes e ainda não consegui detectar o erro. o fato é que está sendo enviado um comando de cancelartransaçoespendentes. 

Segue anexo o log de um cupom de 2,00 com pagamento em cartão de crédito de 2,00. Não ocorre a impressão do comprovante e a transação é cancelada.

A mensagem final é    CACBrTEFD_CliSiTef_TransacaoNaoEfetuadaReterCupom =     'Transação não efetuada.'+sLineBreak+'Favor reter o Cupom'  que está na unit ACBrTEFDCliSiTef. 

 

CliSiTef.log

Link para o comentário
Compartilhar em outros sites

  • Consultores

A mensagem de erro parece de AV por acessar um objeto que não existe, ou não foi instanciado. ('access violation at 0x00000000: read of address 0x00000000').

 

6 horas atrás, Gr@c@ disse:

OnComandaECFPagamento( Indice, Valor, Result ) ;----------------------> a excessão ocorre aqui

Em qual linha exatamente do método OnComandaECFPagamento ocorre a exception?

Editado por EMBarbosa
  • Curtir 1

[]'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
20 horas atrás, Gr@c@ disse:

Eu havia colocado o evento OnComandaECFPagamento, porém devo ter mexido e retirado ele por engano do componente. O evento estava apenas no fonte e não estava setado no componente.

Que bom que resolveu. Obrigado pelo retorno.

[]'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á 2611 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.

The popup will be closed in 10 segundos...