Jump to content

dev botao

Derrubar aplicação antes de retirar cartão


Daniel Paixão-Cascavel
Go to solution Solved by Daniel Simoes,
  • Este tópico foi criado há 1540 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Galera, na minha pré-homologação do Sitef dll, levantou-se uma questão que o Homologador meio que deixou passar mas, amanhã é a homologação e estou com receio de isso voltar e me incomodar. A situação é a seguinte: Inicio uma venda, insiro o cartão, faço a transação e, quando o sistema pedir pra retirar o cartão da leitora, eu derrubo a aplicação simulando uma queda de energia. Quando eu inicio a aplicação novamente tento cancelar as transações pendentes, o ACBr simplesmente não acha essa transação. Já debuguei de tudo quanto é jeito e, realmente ele não consegue cancelar essa transação. Na pré passou porque, pelo que entendi, quando eu inicio uma nova transação, o Sitef simplesmente cancela a ultima transação que ficou pendente pro mesmo cartão. Teste isso no TEFDemoNF e no TEFDemo e também observei o mesmo comportamento. Pergunto: É assim mesmo? Não te um método que eu possa chamar pra verificar se alguma transação ficou pendente e mandar um Cancelar? Sempre grato pela atenção de vocês, abraço!

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link to comment
Share on other sites

  • Moderadores
1 hora atrás, daniel_paixao disse:

Galera, na minha pré-homologação do Sitef dll, levantou-se uma questão que o Homologador meio que deixou passar mas, amanhã é a homologação e estou com receio de isso voltar e me incomodar. A situação é a seguinte: Inicio uma venda, insiro o cartão, faço a transação e, quando o sistema pedir pra retirar o cartão da leitora, eu derrubo a aplicação simulando uma queda de energia. Quando eu inicio a aplicação novamente tento cancelar as transações pendentes, o ACBr simplesmente não acha essa transação. Já debuguei de tudo quanto é jeito e, realmente ele não consegue cancelar essa transação. Na pré passou porque, pelo que entendi, quando eu inicio uma nova transação, o Sitef simplesmente cancela a ultima transação que ficou pendente pro mesmo cartão. Teste isso no TEFDemoNF e no TEFDemo e também observei o mesmo comportamento. Pergunto: É assim mesmo? Não te um método que eu possa chamar pra verificar se alguma transação ficou pendente e mandar um Cancelar? Sempre grato pela atenção de vocês, abraço!

Isso dai não remete ao que já discutimos em um tópico sobre tu criar um arquivo quando começar a fazer as vendas com tef e dai se ela existir ainda quando iniciar a aplicação ele manda o cancelamento?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Link to comment
Share on other sites

Não Juliomar, o post antigo meu era sobre o caso de se ter vendas aprovadas, em que eu ja havia retirado o cartão e estava começando a imprimir. Este caso é o seguinte: 

Inicio uma transação, passo o cartão normal, digito a senha e, quando aparece a mensagem: RETIRE O CARTAO DA LEITORA, eu derrubo a aplicação. Quando eu re-abro a aplicação e chamo o Ativar do TEF, na classe ACBrTEFDCliSiTef.pas, na linha 405, ele chama o VerificarTransacoesPendentesClass, que está na classe ACBrTEFDClass. Mais especificamente na linha 1050 da ACBrTEFDClass, ele chama o metodo CancelarTransacoesPendentesClass se o estado da impressora estiver V,P,N ou O, ou seja, se, se o cupom estiver aberto ou em pagamento. Acontece que, se você debugar, vera que o método CancelarTransacoesPendentesClass não identifica nenhuma transação pendente no TEF, mesmo que ela esteja pendente (neste caso especifico de derrubar a aplicacao antes de retirar o cartao), logo, se eu fizer um controle no meu sistema pra, quando reiniciar o sistema, verificar se existe transacao pendente e cancelar, tecnicamente eu deveria chamar o CancelarTransacoesPendentesClass, e então, ele faria o mesmo percurso e não funcionaria. Quando acontece isso, se eu chamar outra transação TEF (Venda ou ADM), o proprio Sitef cancela a venda que ficou pendente mas, seria interessante se o ACBr conseguisse identificar essa transação pendente no Ativar, e ele mesmo cancelasse ela, ou se o metodo CancelarTransacoesPendentesClass identificasse essa transsação. Entendeu??

Edited by daniel_paixao
escrevei Cancelar onde seria Cancela

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link to comment
Share on other sites

  • Fundadores

Mas o ACBr faz isso.. ele verifica se existem arquivos de Backup, em sua pasta (subdiretório TEF)... e se houver, ele irá Confirmar ou Cancelar as transações, conforme o seu retorno como Estado do ECF...

Isso ocorre em "TACBrTEFDClass.VerificarTransacoesPendentesClass"

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

 

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 to comment
Share on other sites

Sim Daniel, deveria fazer. Ele executa os procedimentos que você citou ai encima, exatamente como estão mas, no método CAncelarTransacoesPendentesClass, na linha 1564 da ACBrTEFClass,  o "ArquivosVerficar.Count" é sempre "0"(zero). Como já te disse em um post anterior meu, eu só posto aqui depois de muito debugar e bater cabeça. Posso estar equivocado mas, sou um equivocado com convicção de que fiz a lição de casa..rsss. 

ATENÇÃO! O problema só acontece quando eu "derrubo" a aplicação antes de retirar o cartão. Se eu "derrubar" depois de retirar o cartão, ele funciona direitinho.

Edited by daniel_paixao

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link to comment
Share on other sites

  • Fundadores
  • Solution

Provavelmente você está derrubando a aplicação, antes da criação do arquivo de Backup, que ocorre em: TACBrTEFDCliSiTef.ProcessarRespostaPagamento,  onde é chamado: "CopiarResposta",  onde ocorre a criação do arquivo de Backup

Mas nesse caso.. se a DLL do TEF ainda não devolveu nenhuma resposta para o ACBrTEFD (pois ela ainda está no fluxo)... Como o componente poderia saber que a transação existe ??

  • Like 1
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 to comment
Share on other sites

Exatamente isso que eu imaginava pois, debugando, eu vi que, antes de retirar o cartão, não existe tratamento pra arquivo de Backup. Então vou ter que deixar assim mesmo e tentar passar na homologação (Assim como passou na Pré) dessa forma. Uma pergunta: E como será que ele consegue cancelar essa transação quando eu faço a próxima chamada de "CRT", será que a própria DLL tem um tratamento pra isso?

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link to comment
Share on other sites

  • Fundadores
20 minutos atrás, daniel_paixao disse:

E como será que ele consegue cancelar essa transação quando eu faço a próxima chamada de "CRT", será que a própria DLL tem um tratamento pra isso?

Provavelmente sim... ela deve criar um controle interno, no inicio da Transação...

  • Like 1
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 to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...
The popup will be closed in 10 seconds...