Ir para conteúdo
  • Cadastre-se

dev botao

Tacbrtefdclisitef.inicializar E Cancelartransacoespendentesclass


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

Recommended Posts

Olá, 

Implementei o evento "OnDepoisCancelarTransacoes" do ACBrTEFD, para fazer a manutenção das transações no meu banco de dados depois que elas são canceladas... até aqui tudo certo, quando chamo o "TACBrTEFD.CancelarTransacoesPendentes", as transações pendentes são canceladas e consigo manipular os dados no meu banco...

 

Porém, ao chamar o TACBrTEFDCliSiTef.Inicializar, no final do método existe a seguinte condição:

  // Cupom Ficou aberto ?? Se SIM, Cancele tudo... //
  if (Est in ['V','P','N','O']) then
     CancelarTransacoesPendentesClass
  else
     // NAO, Cupom Fechado, Pode confirmar e Mandar aviso para re-imprimir //
     ConfirmarESolicitarImpressaoTransacoesPendentes ; 

Note que quando o "if" é satisfeito, por exemplo Est = 'O', será chamado o método CancelarTransacoesPendentesClass

E quando as transações são canceladas direto pelo CancelarTransacoesPendentesClass, o evento OnDepoisCancelarTransacoes não é disparado...

 

Seria uma sugestão?

Subistituir o "CancelarTransacoesPendentesClass" por "TACBrTEFD(Owner).CancelarTransacoesPendentes"?

Assim o evento OnDepoisCancelarTransacoes seria disparado....

 

 

Outro caso, dentro do evento CancelarTransacoesPendentesClass, quando tenho mais de uma transação para o mesmo Cupom (Multiplos Cartoes) e

envio um TACBrTEFD.CancelarTransacoesPendentes, o evento "OnAntesCancelarTransacao" esta sendo disparado apenas uma vez...

Nesse caso, como tenho 2 transações pendentes, teria que disparar 2 vezes?

 

 

Ou, estou implementando os eventos de manutenção no meu banco de dados no lugar errado?

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Quando fui testar, percebi que esta alteração talvez gere um impacto indesejado, se mudarmos de CancelarTransacoesPendentesClass para TACBrTEFD(Owner).CancelarTransacoesPendentes, pq em CancelarTransacoesPendentes é realizado um loop na lista de TEF habilitados, podendo assim Cancelar Transações de outros TEF que não seja o da SiTef. E talvez ocorra de existir transações ao mesmo tempo em SiTef, Pay&Go e outros...

Sera que a melhor forma não é chamar o evento "OnDepoisCancelarTransacoes" após processar o "TACBrTEFDClass.CancelarTransacoesPendentesClass"?

Deixando dessa maneira, ou algo do genero:

              with TACBrTEFD(Owner) do
              begin
                 if Assigned( OnDepoisCancelarTransacoes ) then
                 try
                    OnDepoisCancelarTransacoes( RespostasPendentes ) ;
                 except
                    { Nao deixa interromper }
                 end;
              end; 

Já o caso de CancelarTransacoesPendentesClass estar chamando o evento "OnAntesCancelarTransacao" apenas uma vez, existe a validação:

JaCancelado := (Resp.DocumentoVinculado = DocumentoVinculado) ;

Como o SiTef cancela todas as transações vinculados com o documento, entendo que esta validação esteja certa, porém quebrou o fluxo do  OnAntesCancelarTransacao, já que a segunda transação cancelada não irá disparar o evento, pq na validação acima é retornado True.

 

Por enquanto ainda não alterei nada no ACBr, mas resolvi a questão ajusta a minha implementação para o evento OnAntesCancelarTransacao, deixando dessa maneira:

Resposta Pendente é CRT?

  Percorre minha lista de pagamento;

    Pagamento é Cartao?

      Pagamento.DocVinculado = RespostaPendente.DocVinculado?

        Excluir Pagamento;

 

A principio assim está funcionando, sem mexer no ACBr, porém estou correndo risco do NCN não dar certo, e eu perder o histórico do pagamento, pois já foi deletado do banco...

 

O que vc acha Daniel, da questão de chamar o "OnDepoisCancelarTransacoes" após processar o "TACBrTEFDClass.CancelarTransacoesPendentesClass"? 

Link para o comentário
Compartilhar em outros sites

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