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; 
            . 
             . 
             . 
Nenhum comentário:
Postar um comentário