Bematech Software Partners

 
  • jan 02 2006

    Transferência Eletrônica de Fundos (T.E.F.) – Discado – Passo 7/10

    Tratando a situação de falta de comunicação com o ECF

    Neste passo, vamos desenvolver as rotinas de tratamento de erro de comunicação com a impressora, onde estaremos utilizando parte das rotinas anteriores (funções ImprimeTEF e ImprimeGerencial), apenas destacando as implementações do tratamento.


    - Exemplo em Delphi

    procedure TfrmPrincipal.cmdVendaCupomTEFClick(Sender: TObject);
    var cCodigoProduto, cDescricaoProduto, cAliquota, cTipoQtde,
        cQtde, cTipoDesconto, cValorItem, cValorDesconto,
        cAcrescimoDesconto, cTipoAcrescimoDesconto,
        cValorAcrescimoDesconto, cFormaPGTO, cMSGPromocional,
        cValorPago, cNumeroCupom, cSaltaLinha: string;
        iTEF: integer;
        cIdentificacao: TDateTime;
    begin
       // Abre Cupom Fiscal, Vende o Item e Fecha Cupom Fiscal
       iRetorno := Bematech_FI_AbreCupom( pchar( ” ) );
       if ( VerificaRetornoFuncaoImpressora( iRetorno ) ) then
          begin cCodigoProduto := ’1234567890123′;
                cDescricaoProduto := ‘Teste de Venda de Item…’;
                cAliquota := ‘II’; cTipoQtde := ‘I’; cQtde := ’1′;
                cValorItem := ’1,00′; cTipoDesconto := ‘%’;
                cValorDesconto := ’00,00′;
                iRetorno := Bematech_FI_VendeItem( pchar( cCodigoProduto ),
                   pchar( cDescricaoProduto ), pchar( cAliquota ),
                   pchar( cTipoQtde ), pchar( cQtde ), 2, pchar( cValorItem ),
                   pchar( cTipoDesconto ), pchar( cValorDesconto ) );
                if ( VerificaRetornoFuncaoImpressora( iRetorno ) ) then
                   begin
                      cAcrescimoDesconto := ‘A’;
                      cTipoAcrescimoDesconto := ‘%’;
                      cValorAcrescimoDesconto := ’00,00′;
                      iRetorno := Bematech_FI_IniciaFechamentoCupom(
                         pchar( cAcrescimoDesconto ),
                         pchar( cTipoAcrescimoDesconto ),
                         pchar( cValorAcrescimoDesconto ) );
                      if ( VerificaRetornoFuncaoImpressora( iRetorno ) ) then
                         begin
                            cFormaPGTO := ‘Cartao Credito’;
                            cValorPago := ’1,00′;
                            SetLength( cNumeroCupom, 6 );
                            iRetorno := Bematech_FI_NumeroCupom( cNumeroCupom );
                            VerificaRetornoFuncaoImpressora( iRetorno );
                            cIdentificacao := Time;
                            iTEF := RealizaTransacao( cIdentificacao,
                               cNumeroCupom, FormatFloat( cValorPago, 0 ) );
                            if ( iTEF = 1 ) then
                               begin iRetorno := Bematech_FI_EfetuaFormaPagamento(
                                  pchar( cFormaPGTO ), pchar( cValorPago ) );
                               if ( VerificaRetornoFuncaoImpressora( iRetorno ) )
                                  then
                                  begin
                                     cMSGPromocional := ‘Obrigado, volte sempre !!!’;
                                     iRetorno := Bematech_FI_TerminaFechamentoCupom(
                                        pchar( cMSGPromocional ) );
                                     VerificaRetornoFuncaoImpressora( iRetorno );
                                     if not ( ImprimeTransacao( cFormaPGTO,
                                        cValorPago, cNumeroCupom,
                                        cIdentificacao ) ) then
                                        NaoConfirmaTransacao
                                     else
                                        ConfirmaTransacao;
                                  end;
                               end;
                            if ( iTEF = -1 ) then
                               Application.MessageBox(
                               ‘Gerencial Padrão não está ativo !’, ‘Atenção’,
                               MB_IconError + MB_OK );
                   &nbs
    p;        // Se a transação não for aprovada, deve-se permitir
                            // a escolha de outra forma de pagamento. Neste caso,
                            // está sendo utilizado "Dinheiro" como exemplo.
                            if ( iTEF = -2 ) or ( iTEF = 0 ) then
                               begin
                                  cFormaPGTO := ‘Dinheiro’;
                                  iRetorno := Bematech_FI_EfetuaFormaPagamento(
                                  pchar( cFormaPGTO ), pchar( cValorPago ) );
                                  if ( VerificaRetornoFuncaoImpressora( iRetorno ) )
                                  then
                                     begin
                                        cMSGPromocional :=
                                           ‘Obrigado, volte sempre !!!’;
                                        iRetorno :=
                                           Bematech_FI_TerminaFechamentoCupom(
                                           pchar( cMSGPromocional ) );
                                           VerificaRetornoFuncaoImpressora(
                                              iRetorno );
                                     end;
                               end;
                         end;
                   end;
          end;
    end;

    ////////////////////////////////////////////////////////////////////////////////
    // Função: ImprimeTransacao
    // Objetivo: Realiza a impressão da Transação TEF
    // Parâmetros: string para a Forma de Pagamento
    //             string para a Valor da Forma de Pagamento
    //             string para o Número do Cupom Fiscal (COO)
    //             TDateTime para identificar o número da transação
    // Retorno: True para OK ou False para não OK
    //////////////////////////////////////////////////////////////////////////////// function ImprimeTransacao( cFormaPGTO: string; cValorPago: string; cCOO: string;
       cIdentificacao: TDateTime ): boolean;
    var cLinhaArquivo, cLinha, cSaltaLinha, cConteudo: string; cMensagem: TForm;
        cArquivo : TextFile; iVezes : integer;
    begin
       // Bloqueia o teclado e o mouse para a impressão do TEF
       iRetorno := Bematech_FI_IniciaModoTEF();
       result := true;
       if FileExists( ‘IMPRIME.TXT’) then
          begin
             iRetorno := Bematech_FI_AbreComprovanteNaoFiscalVinculado( pchar(
                cFormaPGTO ), pchar( cValorPago ), pchar( cCOO ) );
             VerificaRetornoFuncaoImpressora( iRetorno )
          end;
          AssignFile( cArquivo, ‘IMPRIME.TXT’ );
          begin
             Reset( cArquivo );
             cConteudo := ”;
             cLinha := ”;
             while not EOF( cArquivo ) do
                begin
                   ReadLn( cArquivo, cLinha );
                   cConteudo := cConteudo + cLinha + #13 + #10;
                   iRetorno := Bematech_FI_UsaComprovanteNaoFiscalVinculado( pchar(
                      cLinha ) + #13 );

                   // Aqui é feito o tratamento de erro de comunicação com a
                   // impressora (desligamento da impressora durante a impressão do
                   // comprovante).

                   if not ( VerificaRetornoFuncaoImpressora( iRetorno ) ) then
                      begin
                         iRetorno := Bematech_FI_FinalizaModoTEF();
                         if ( Application.MessageBox( ‘A impressora não responde!’ +
                            #13 + ‘Deseja imprimir novamente?’, ‘Atenção’,
                            MB_IconInformation + MB_YESNO ) = IDYES ) then
                         begin
                            CloseFile( cArquivo );
                            iRetorno:=Bematech_FI_FechaComprovanteNaoFiscalVinculado;
                            if ( ImprimeGerencial = 1 ) then
                               begin
       &nb
    sp;                          result := true; exit;
                               end
                            else
                               begin
                                  result := false; exit;
                               end;
                         end
                         else
                         begin
                         CloseFile( cArquivo );
                         iRetorno := Bematech_FI_FechaComprovanteNaoFiscalVinculado;
                         result := false; exit;
                         end;
                      end
                   else
                      if EOF( cArquivo ) then
                         begin
                            .
                            .
                            .

    ////////////////////////////////////////////////////////////////////////////////
    // Função: ImprimeGerencial
    // Objetivo: Imprimir através do Relatório Gerencial a transação efetuada.
    // Retorno: 1 para OK ou diferente de 1 para não OK
    ////////////////////////////////////////////////////////////////////////////////
    function ImprimeGerencial: integer;
    var cConteudo, cLinha, cSaltaLinha, cLinhaArquivo: string;
        cArquivo : TextFile;
        iTentativas, iVezes: integer;
        cMensagem : TForm;
        bTransacao: boolean;
    begin
       if FileExists( ‘IMPRIME.TXT’) then
          DeleteFile( ‘IMPRIME.TXT’ );

       result := 1;
       for iTentativas := 1 to 7 do
          begin
             .
             .
             .
       // Bloqueia o teclado e o mouse para a impressão do TEF
       iRetorno := Bematech_FI_IniciaModoTEF();
       if FileExists( ‘IMPRIME.TXT’) then
          begin
            AssignFile( cArquivo, ‘IMPRIME.TXT’ );
            Reset( cArquivo );
            cConteudo := ”;
            cLinha := ”;
            while not EOF( cArquivo ) do
              begin
                ReadLn( cArquivo, cLinha );
                cConteudo := cConteudo + cLinha + #13 + #10;
                iRetorno := Bematech_FI_RelatorioGerencial( pchar( cLinha )
                  + #13 );

                // Aqui é feito o tratamento de erro de comunicação com a impressora
                // (desligamento da impressora durante a impressão do comprovante).

                if not ( VerificaRetornoFuncaoImpressora( iRetorno ) ) then
                  begin
                    iRetorno := Bematech_FI_FinalizaModoTEF();
                    if ( Application.MessageBox( ‘A impressora não responde!’ +
                      #13 + ‘Deseja imprimir novamente?’, ‘Atenção’,
                      MB_IconInformation + MB_YESNO ) = IDYES ) then
                      begin
                        CloseFile( cArquivo );
                        iRetorno := Bematech_FI_FechaRelatorioGerencial;
                        ImprimeGerencial;
                        exit;
                      end
                    else
                      begin
                        CloseFile( cArquivo );
                        iRetorno := Bematech_FI_FechaRelatorioGerencial;
                        result := 0;
                        exit;
                      end;
                  end;
                  .
                  .
                  .

    - Exemplo em Visual Basic

    Private Sub cmdVendaTEF_Click()
      
    Dim cIdentificacao As String, cNumeroCupom As String, cValorPago As String
       Dim cFormaPGTO As String
       ‘ Abre Cupom Fiscal, Vende o Item e Fecha Cupom Fiscal
       iRetorno = Bematech_FI_AbreCupom("")
       If (VerificaRetornoFuncaoImpressora(iRetorno)) Then
          iRetorno = Bematech_FI_VendeItem("1234567890123", _
            "Teste de Venda de Item…", _
            "II", "I", "1", 2, "1,00", "%", "00,00")
          If (VerificaRetornoFuncaoImpressora(iRetorno)) Then
             iRetorno = Bematech_FI_IniciaFechamentoCupom("A", "%", "00,00")
             If (VerificaRetornoFuncaoImpressora(iRetorno)) Then
                cFormaPGTO = "Cartao Credito"
                cValorPago = "100"
                cNumeroCupom = Space(6)
                iRetorno = Bematech_FI_NumeroCupom(cNumeroCupom)
                VerificaRetornoFuncaoImpressora (iRetorno)
                cIdentificacao = Time()
                iTEF = RealizaTransacao(cIdentificacao, cNumeroCupom, cValorPago)
                If (iTEF = 1) Then
                   iRetorno = Bematech_FI_EfetuaFormaPagamento(cFormaPGTO, _
                      cValorPago)
                   If (VerificaRetornoFuncaoImpressora(iRetorno)) Then
                      cMSGPromocional = "Obrigado, volte sempre !!!"
                      iRetorno = Bematech_FI_TerminaFechamentoCupom(cMSGPromocional)
                      VerificaRetornoFuncaoImpressora (iRetorno)
                      If (ImprimeTransacao(cFormaPGTO, cValorPago, cNumeroCupom, _
                         cIdentificacao)) Then
                         ConfirmaTransacao
                      Else
                         NaoConfirmaTransacao
                      End If
                   End If
                End If
                If (iTEF = -1) Then
                  MsgBox "Gerencial Padrão não está ativo !", vbOKOnly + _
                    vbInformation, "Atenção"
                End If
                ’ Se a transação não for aprovada, deve-se permitir a escolha de
                ‘ outra forma de pagamento. Neste caso, está sendo utilizado
                ‘ "Dinheiro" como exemplo
                If (iTEF = -2) Or (iTEF = 0) Then
                   cFormaPGTO = "Dinheiro"
                   iRetorno = Bematech_FI_EfetuaFormaPagamento(cFormaPGTO, _
                      cValorPago)
                   If (VerificaRetornoFuncaoImpressora(iRetorno)) Then
                      cMSGPromocional = "Obrigado, volte sempre !!!" + Chr(13)
                      iRetorno = Bematech_FI_TerminaFechamentoCupom(cMSGPromocional)
                      VerificaRetornoFuncaoImpressora (iRetorno)
                   End If
                End If
             End If
          End If
       End If
    End Sub

    ‘ Função: ImprimeTransacao
    ‘ Objetivo: Realiza a impressão da Transação TEF
    ‘ Parâmetros: string para a Forma de Pagamento
    ‘             string para a Valor da Forma de Pagamento
    ‘             string para o Número do Cupom Fiscal (COO)
    ‘             TDateTime para identificar o número da transação
    ‘ Retorno: True para OK ou False para não OK
    Function ImprimeTransacao(cFormaPGTO As String, cValorPago As String, _
       cCOO As String, cIdentificacao As String) As Integer
       Dim cLinhaArquivo As String
       Dim cLinha As String
       Dim cSaltaLinha As String
       Dim cConteudo As String
       Dim iVezes As Integer
       Dim iImprimeTransacao As Integer
       iImprimeTransacao = 1

       ‘ Bloqueia o teclado e o mouse para a impressão do TEF
       iRetorno = Bematech_FI_IniciaModoTEF()
       cArquivoTemp = Dir(App.Path & "\IMPRIME.TXT")
       If cArquivoTemp <> "" Then
          iRetorno = Bematech_FI_AbreComprovanteNaoFiscalVinculado(cFormaPGTO, _
             cValorPago, cCOO)
          VerificaRetornoFuncaoImpressora (iRetorno)
       End If
       Open App.Path & "\IMPRIME.TXT" For Input As #1
       cConteudo = ""
       cLinha = ""
       Do While Not EOF(1)
          Line Input
    #1, cLinha
          cConteudo = cConteudo + cLinha + Chr(13) + Chr(10)
          iRetorno = Bematech_FI_UsaComprovanteNaoFiscalVinculado(cLinha + Chr(13))

          ‘ Aqui é feito o tratamento de erro de comunicação com a impressora
          ‘ (desligamento da impressora durante a impressão do comprovante).

          If Not (VerificaRetornoFuncaoImpressora(iRetorno)) Then
             iRetorno = Bematech_FI_FinalizaModoTEF()
             If MsgBox("A impressora não responde." & Chr(13) & _
                "Deseja imprimir novamente ?", vbQuestion + vbYesNo, _
                "Atenção") = vbYes Then
                Close #1
                iRetorno = Bematech_FI_FechaComprovanteNaoFiscalVinculado()
                If (ImprimeGerencial) Then
                   ImprimeTransacao = iImprimeTransacao
                   Exit Function
                Else
                   iImprimeTransacao = 0
                   ImprimeTransacao = iImprimeTransacao
                   Exit Function
                End If
             Else
                Close #1
                iRetorno = Bematech_FI_FechaComprovanteNaoFiscalVinculado()
                iImprimeTransacao = 0
                ImprimeTransacao = iImprimeTransacao
                Exit Function
             End If
          Else
             If EOF(1) Then
                .
                .
                .

    ‘ Função: ImprimeGerencial
    ‘ Objetivo: Imprimir através do Relatório Gerencial a transação efetuada.
    ‘ Retorno: 1 para OK ou diferente de 1 para não OK
    Function ImprimeGerencial() As Integer
       Dim cConteudo As String, cLinha As String, cSaltaLinha As String, _
           cLinhaArquivo As String
       Dim iTentativas As Integer, iVezes As Integer, _
           iImprimeGerencial As Integer
       Dim bTransacao As Boolean
       cArquivoTemp = Dir(App.Path & "\IMPRIME.TXT")
       If cArquivoTemp <> "" Then
          Kill App.Path & "\IMPRIME.TXT"
       End If
       iImprimeGerencial = 1
       For iTentativas = 1 To 7
           .
           .
           .
       ’ Bloqueia o teclado e o mouse para a impressão do TEF
       iRetorno = Bematech_FI_IniciaModoTEF()
       cArquivoTemp = Dir(App.Path & "\IMPRIME.TXT")
       If cArquivoTemp <> "" Then
          Open App.Path & "\IMPRIME.TXT" For Input As #1
          cConteudo = ""
          cLinha = ""
          Do While Not EOF(1)
             Line Input #1, cLinha
             cConteudo = cConteudo + cLinha + Chr(13) + Chr(10)
             iRetorno = Bematech_FI_RelatorioGerencial(cLinha + Chr(13))

             ‘ Aqui é feito o tratamento de erro de comunicação com a impressora
             ‘ (desligamento da impressora durante a impressão do comprovante).

             If Not (VerificaRetornoFuncaoImpressora(iRetorno)) Then
                iRetorno = Bematech_FI_FinalizaModoTEF()
                If MsgBox("A impressora não responde." & Chr(13) & _
                  "Deseja imprimir novamente ?", vbQuestion + vbYesNo, _
                  "Atenção") = vbYes Then
                  Close #1
                  iRetorno = Bematech_FI_FechaRelatorioGerencial()
                  ImprimeGerencial
                  ImprimeGerencial = iImprimeGerencial
                  Exit Function
                Else
                  Close #1
                  iRetorno = Bematech_FI_FechaRelatorioGerencial()
                  iImprimeGerencial = 0
                  ImprimeGerencial = iImprimeGerencial
                  Exit Function
                End If
             End If
             .
             .
             .

    Boas implementações!

    Related posts:

    1. Identifique seu Cliente através de um Código de Barras Você já imaginou poder identificar seu cliente através de um...
    2. Bematech FlashTip – 22a. Edição – Criando menus e trabalhando com funções de teclado e entrada de dados Caro parceiro, Na edição passada, preparamos todo o ambiente de...
    3. Edição 65 – Códigos de Barras no ECF Caro parceiro, Nesta edição de nosso Flash Tip, vamos conhecer...
    4. Edição 77 – Imprimindo Códigos de Barras na Impressora Não Fiscal Caro Partner e Desenvolvedor, Nesta edição de nosso Flash Tip,...
    5. Edição 99 – Programando os Relatórios do PAF-ECF Caro Partner e Desenvolvedor de Software, A Bematech criou no...

     

Nenhum Comentário

Deixe um comentário