terça-feira, 4 de janeiro de 2011

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

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