Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 5053 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Pessoal, vou homologar meu PDV com TEF (Cielo/Amex/Redecard) na semana que vem. Este PDV é simples, sem pgto com multiplos cartões, tudo testado e re-testado com o ACbrTEFD. Mas como é a primeira vez que vou fazer isso gostaria de umas dicas de quem já foi:

1) Vou levar uma CPU com Fax Modem Off-Board, um PinPad Ingenico 3070, ECF Bematech MP2100. A dúvida maior está com a Fax Modem, eles vão testar lá? Visto que nos testes não tem como usar ela.

2) Como usei o ACbrTEFD, estudei bem os fontes e sei que ele funciona muito bem. Gostaria de saber se eles costumam pedir alterações, na hora da certificação.

3) Alguma dica de "última hora" antes de eu ir? :lol:

Abraços e obrigado.

Postado

É isso mesmo Daniel, o segredo é estudar bem os fontes do ACBrTefd. Passei na homologação do TEF Discado, sem problemas! Fiz só uma pequena alteração nos fontes, pois foi preciso. Depois com calma eu vou colocar aqui. Abraços.

Postado

Segue a pequena alteração no AcbrTefDClass que eu fiz:


procedure TACBrTEFDClass.ImprimirRelatorio;

Var

  I : Integer;

  TempoInicio : TDateTime ;

  ImpressaoOk, RemoverMsg, GerencialAberto : Boolean ;

  Est : AnsiChar ;

  ArqBackup : String ;

  ImagemComprovante : TStringList ;

begin

  VerificarIniciouRequisicao;


  if Resp.QtdLinhasComprovante < 1 then

     exit ;


  GravaLog( Name +' ImprimirRelatorio: '+Req.Header );


  CopiarResposta ;


  ImpressaoOk     := False ;

  RemoverMsg      := False ;

  GerencialAberto := False ;

  TempoInicio     := now ;


  with TACBrTEFD( Owner ) do

  begin

     try

        BloquearMouseTeclado( True );


        while not ImpressaoOk do

        begin

           try

              try

                 Est := EstadoECF;


                 if Est <> 'L' then

                 begin

                    { Fecha Vinculado ou Gerencial ou Cupom, se ficou algum aberto por Desligamento }

                    case Est of

                      'C'      : ComandarECF( opeFechaVinculado );

                      'G', 'R' :

                      begin

                        ComandarECF( opeFechaGerencial );

                        // Alterado por Rafael Sartori

                        // para que em caso de falta de papel ou queda de luz na ecf ele

                        // feche o cupom e abra novamente depois para imprimir tudo novamente

                        GerencialAberto := False;

                        //

                      end;

                      'V', 'P' : ComandarECF( opeCancelaCupom );

                    end;


                    if EstadoECF <> 'L' then

                       raise EACBrTEFDECF.Create( ACBrStr('ECF não está LIVRE') ) ;

                 end;


                 TempoInicio := now ;

                 if Self.Resp.TextoEspecialOperador <> '' then

                 begin

                    RemoverMsg := True ;

                    DoExibeMsg( opmExibirMsgOperador, Self.Resp.TextoEspecialOperador ) ;

                 end;


                 if Self.Resp.TextoEspecialCliente <> '' then

                 begin

                    RemoverMsg := True ;

                    DoExibeMsg( opmExibirMsgCliente, Self.Resp.TextoEspecialCliente ) ;

                 end;


                 I := 1 ;

                 while I <= self.NumVias do

                 begin

                   if I = 1 then

                      ImagemComprovante := Self.Resp.ImagemComprovante1aVia

                   else

                      ImagemComprovante := Self.Resp.ImagemComprovante2aVia ;


                   if ImagemComprovante.Count > 0 then

                   begin

                     if not GerencialAberto then

                      begin

                        ComandarECF( opeAbreGerencial ) ;

                        GerencialAberto := True;

                      end

                     else

                      begin

                        if I <> 1 then

                           ComandarECF( opePulaLinhas ) ;

                        DoExibeMsg( opmDestaqueVia, 'Destaque a '+IntToStr(I)+'ª Via') ;

                      end ;


                     ECFImprimeVia( trGerencial, I, ImagemComprovante  )

                   end ;


                   Inc( I ) ;

                 end;


                 if GerencialAberto then

                    ComandarECF( opeFechaGerencial );


                 ImpressaoOk := True ;


              finally

                 { Removendo a mensagem do Operador }

                 if RemoverMsg then

                 begin

                    { Verifica se Mensagem Ficou pelo menos por 5 segundos }

                    if ImpressaoOk then

                    begin

                       while SecondsBetween(now,TempoInicio) < 5 do

                       begin

                          Sleep(EsperaSleep) ;

                          Application.ProcessMessages;

                       end;

                    end;


                    DoExibeMsg( opmRemoverMsgOperador, '' ) ;

                    DoExibeMsg( opmRemoverMsgCliente, '' ) ;

                 end;

              end;


           except

              on EACBrTEFDECF do ImpressaoOk := False ;

              else

                 raise ;

           end;


           if not ImpressaoOk then

           begin

             if DoExibeMsg( opmYesNo, 'Impressora não responde'+sLineBreak+

                                      'Tentar novamente ?') <> mrYes then

                break ;

           end;

        end;

     finally

       { Enviando CNF ou NCN e apagando Arquivo de Backup }

       ArqBackup := Resp.ArqBackup ;

       while FileExists( ArqBackup ) do

       begin

          try

             if ImpressaoOk then

                self.CNF

             else

                self.NCN ;


             DeleteFile( ArqBackup ) ;


          except

          end;

       end ;


       BloquearMouseTeclado( False );

     end ;


     if not ImpressaoOk then

     begin

        // Alterado por Rafael Sartori

        // Tento ao menos fechar o relatorio se a ECF estiver ligada..

        Est := EstadoECF;

        case Est of

            'G', 'R' : ComandarECF( opeFechaGerencial )

        end;

        //

        raise EACBrTEFDECF.Create( ACBrStr('Impressão de Relatório Falhou' ) ) ;

     end;

  end;

end;

  • Fundadores
Postado

Oi Rafael,

Obrigado pela contribuição....

- Em relação a primeira modificação... Atualmente o fonte de TEFDClass já está ligeiramente diferente, e foi alterado pelo mesmo motivo...

- Em relação a segunda modificação, que tenta fechar o relatório em caso de Falha, tenho receio de que ela quase nunca funcione... Veja:

Se o relatório falhou, é porque o ECF se encontra em condição de Erro... primeiro devemos dar um aviso ao usuário, que deverá tentar corrigir a situação de erro, e dai sim, temos condições de tentar imprimir algo mais (fechar o relatório)...

Vale lembrar que o TEFD sempre verifica o estado do ECF antes de iniciar a Impressão de qualquer Relatório Gerencial ou Vinculado, fechando os relatórios anteriores se necessário...

O que você acha ? Essa alteração foi mesmo necessária ? Ela foi um pre-requisito para a sua homologação ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Olá Daniel, eu já estou a algum tempo sem atualizar os fontes do ACBR, por causa da Homologação, mas se o fonte já foi alterado pelo mesmo motivo que eu citei, sem problemas!

Quanto a segunda mudança no fonte, nao foi pré-requisito para homologar, na verdade era só uma garantia que se o erro fosse por falta de papel por ex. ele ia fechar. Acho que nem precisaria alterar o fonte neste ponto mesmo.

Abraços!

  • Este tópico foi criado há 5053 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.