Business - Automação Comercial
Cancelando a transação TEF
Após implementarmos as nossas rotinas de cupom fiscal e transações TEF, chegou a hora de conhecermos como realizar um cancelamento da transação.
por Andre SchikovskiApós implementarmos as nossas rotinas de cupom fiscal e transações TEF, chegou a hora de conhecermos como realizar um cancelamento da transação. Esta operação também é uma das exigidas no roteiro de implementação do TEF fornecido pelas empresas homologadoras, por isso vamos conhecê-la.
Então, em nosso formulário vamos adicionar um botão com o texto "CANCELAR TRANSAÇÃO TEF" e o name "btncancelartransacoestef", conforme ilustrado abaixo:
Conforme a edição 34 do Flash Tip, na nossa rotina de impressão dos comprovantes TEF criamos um objeto público chamado "minhacolecao" e nele armazenamos toda a coleção de transações efetuadas. Isso se fez necessário, pois ao final da impressão e confirmação das transações usamos o método "ClearTransacoes" que faz a limpeza das transações realizadas, preparando a classe TEF para as novas transações.
Recordando a rotina...
- em C#
public
partial class frmtef : Form |
- em VB.NET
Public
Class frmtef " CRIAÇÃO DA VARIÁVEL MINHACOLECAO PARA RECEBER OS CONTADORES DE " TRANSAÇÕES EXECUTADAS. Public minhacolecao As Transacoes (...) |
Então, antes do início da impressão dos comprovantes do TEF, esse objeto é populado com as transações realizadas, conforme podemos ver nas imagens abaixo, retiradas na execução do cancelamento.
- em C#
- em VB.NET
O objeto "minhacolecao" possui 2 comprovantes gravados, indicando que nossa transação TEF é de múltiplos cartões.
Agora que sabemos como o objeto "minhacolecao" é declarado e utilizado, vamos analisar nosso código do cancelamento:
- em C#
private void btncancelartransacaotef_Click(object
sender, EventArgs e) |
- em VB.NET
Private
Sub btncancelartransacoestef_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs)
Handles btncancelartransacoestef.Click Dim conta As Integer Try For conta = 1 To minhacolecao.Count() Try Dim cancelamentotef As SolicitacaoCancelamento = BematechFiscal.TEF.CriarSolicitacaoCancelamento(minhacolecao(conta - 1)) Dim minhatransacaocancelamento As Transacao = BematechFiscal.TEF.CancelarTransacao(cancelamentotef) If (minhatransacaocancelamento.Status = "0") Then Try BematechFiscal.TEF.TravarTeclado(True) BematechFiscal.TEF.Imprimir(BematechFiscal.TEF.Transacoes(0), True) Catch BematechFiscal.TEF.TravarTeclado(False) If MessageBox.Show("Impressora não responde. Tentar imprimir novamente?", "Atenção", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) = Windows.Forms.DialogResult.Yes Then BematechFiscal.TEF.Imprimir(BematechFiscal.TEF.Transacoes(0), True) BematechFiscal.TEF.TravarTeclado(True) Else End End If End Try Else MessageBox.Show(minhatransacaocancelamento.TextoOperador) End End If BematechFiscal.TEF.TravarTeclado(False) Catch MensagemErro As FiscalException MsgBox("MensagemErro: " + MensagemErro.Message) End Try Dim cancelamentoconfirmacao As SolicitacaoConfirmacao = BematechFiscal.TEF.CriarSolicitacaoConfirmacao() BematechFiscal.TEF.ConfirmarTransacao(cancelamentoconfirmacao) BematechFiscal.TEF.TravarTeclado(False) Next BematechFiscal.TEF.ClearTransacoes() Catch MensagemErro As FiscalException MsgBox("MensagemErro: " + MensagemErro.Message) End Try End Sub |
Esta rotina de cancelamento irá acionar o módulo administrativo da bandeira (nos testes usamos a bandeira American Express). Na janela da bandeira que será exibida, informamos a senha e após confirmá-la o arquivo INTPOS.001 é criado com o texto do cancelamento. Nossa rotina irá fazer a impressão dos comprovantes de cancelamento e também a confirmação dos mesmos.
Em nosso código temos um contador (conta), usado para percorrer as transações. Neste caso específico, enquanto o valor do contador não se igualar ao "Count" do objeto "minhacolecao", significa que ainda existem comprovantes pendentes para o cancelamento.
O próximo passo é a criação de dois objetos: o primeiro do tipo SolicitacaoCancelamento (objeto cancelamentotef), e o segundo do tipo Transacao (objeto minhatransacaocancelamento) que será responsável pelo envio da transação ao GP (Gerenciado Padrão).
Em seguida, montamos a rotina de impressão dos comprovantes de cancelamento. Podemos verificar a semelhança entre esta impressão com as do comprovante vinculado após a venda, onde é necessário inicialmente travar o teclado para a impressão. Note também que dentro da estrutura "try/catch", estamos tratando a reimpressão dos comprovantes, caso ocorra algum erro (ex: queda de energia).
No caso de uma transação de múltiplos cartões, após a impressão do primeiro comprovante de cancelamento, precisamos confirmar essa transação através da classe SolicitacaoConfirmacao com o objeto criado "cancelamentoconfirmacao".
Após a impressão do primeiro comprovante, o laço "While True" ainda terá um comprovante pendente, e um novo processo de impressão irá ocorrer.
Ao final da impressão de todos os comprovantes de cancelamento, destravamos o teclado e executamos o método "ClearTransacoes" que vai limpar todas as transações de cancelamento realizadas.
- DarumaFramework.SO no LinuxAutomação Comercial
- Palavra de status da impressora na DarumaFrameworkAutomação Comercial
- TEF – Comprovante de Crédito ou DébitoAutomação Comercial
- Comunicar com equipamentos Daruma em linguagens 16bits e DOSAutomação Comercial
- Verificando Redução Z nas Impressoras DarumaAutomação Comercial