Nesta parte, 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 e, em anexo, seguirão os códigos completos destas  duas funções, em Delphi e Visual Basic. 
 
 
- 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 ); 
 
                      // 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 
 
                            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; 
 
            . 
 
             . 
 
             .