Ir para conteúdo
  • Cadastre-se

dev botao

Derrubar aplicação antes de retirar cartão


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 1587 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

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

  • Moderadores
Postado
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
 

 

Postado (editado)

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

Editado por daniel_paixao
escrevei Cancelar onde seria Cancela

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

www.controleautomacao.com.br

  • Fundadores
Postado

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.

Postado (editado)

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.

Editado por daniel_paixao

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

www.controleautomacao.com.br

  • Fundadores
  • Solution
Postado

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

  • Curtir 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.

Postado

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

  • Fundadores
Postado
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...

  • Curtir 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.

×
×
  • 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.