Bematech Software Partners

 
  • mai 27 2009

    Edição 36 – Cancelando a transação TEF

    Caro Parceiro,

    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. 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:

    frm_cancelamento

    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
    {
    // CRIAÇÃO DA VARIÁVEL MINHACOLECAO PARA RECEBER OS CONTADORES DE
    // TRANSAÇÕES EXECUTADAS.

    Transacoes minhacolecao;
    (…)

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

    minhacolecao_csharp

    - em VB.NET

    minhacolecao_vb

    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)
    {
      for (int conta = 0; conta < minhacolecao.Count; conta++)
      {
        while (true)
        {
          try
          {
            SolicitacaoCancelamento cancelamentotef = BematechFiscal.TEF.CriarSolicitacaoCancelamento(minhacolecao[conta]);
            Transacao minhatransacaocancelamento = BematechFiscal.TEF.CancelarTransacao(cancelamentotef);
            if (minhatransacaocancelamento.Status == “0″)
            {
              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) == DialogResult.Yes)
                {
                  BematechFiscal.TEF.Imprimir(BematechFiscal.TEF.Transacoes[conta], true);
                  BematechFiscal.TEF.TravarTeclado(false);
                }
                else
                {
                  break;
                }
              }
            }
            else
            {
              MessageBox.Show(minhatransacaocancelamento.TextoOperador);
            }
            BematechFiscal.TEF.TravarTeclado(false);
            break;
          }
          catch (TEFException MensagemErro)
          {
            MessageBox.Show(“MensagemErro: ” + MensagemErro.Message);
          }
          catch (FiscalException MensagemErro)
          {
            MessageBox.Show(“MensagemErro: ” + MensagemErro.Message);
          }
        }
        SolicitacaoConfirmacao cancelamentoconfirmacao = BematechFiscal.TEF.CriarSolicitacaoConfirmacao();
        BematechFiscal.TEF.ConfirmarTransacao(cancelamentoconfirmacao);
      }
      BematechFiscal.TEF.TravarTeclado(false);
      BematechFiscal.TEF.ClearTransacoes();
    }

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

    Próxima edição:

    Nesta edição, concluímos a implementação dos métodos relacionados à impressão de cupom fiscal e comprovantes não fiscais (comprovante de crédito e débito).

    Na próxima edição do “Flash-Tip Classe TEF”, vamos acionar o módulo administrativo (ADM) das bandeiras pelo Gerenciador Padrão.

    Não perca!

    Até lá e boas implementações!

    Related posts:

    1. Edição 42 – Explorando a Classe TEF Caro Parceiro, Ao longo desse mini-curso sobre nossa ferramenta Bematech...
    2. Transferência Eletrônica de Fundos (T.E.F.) – Discado – Passo 9/10 Realizando operações administrativas Neste passo, estaremos realizando algumas operações administrativas...
    3. 27ª Edição – Conhecendo o Microterminal FIT Básico Bematech Caro Parceiro, Estamos iniciando uma nova sequência de Flash-Tips no...
    4. Edição 68 – Comunicando com o ECF na USB Caro Partner e Desenvolvedor, Atualmente, a maioria dos computadores disponíveis...
    5. Edição 85 – Verificando se há Redução Z pendente Caro Partner e Desenvolvedor Bematech, Nesta edição de nosso Flash...

     

Nenhum Comentário

Deixe um comentário