Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Tive que mudar essa procedure (a inteção foi tratar abertura da tampa por vááárias vezes seguidas):

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 ;

  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 );

                                       [color=#FF0000]GerencialAberto:=false;  //alterado por lucas belkys[/color]

                                    end;

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

                    end;


                    if EstadoECF <> 'L' then

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

                 end;


                 GerencialAberto := False ;

                 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 ) ;

                        [color=#FF0000]I := 0 ; //alterado por lucas belkys[/color]

                        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 );


                [color=#FF0000] if ImagemComprovante.Count=0 //alterado por lucas belkys

                 then ImpressaoOk := True ;[/color]


              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 ;

          except

          end;


          DeleteFile( ArqBackup ) ;

       end ;


       BloquearMouseTeclado( False );

     end ;


     if not ImpressaoOk then

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

  end;

Postado

Parabens

Amigo vc poderia colocar aqui todos .PAS alterados do ACBrTEFD ? E informar quais procedures foram alteradas do componente?

Seria de grande ajuda! Obrigado!

Postado

Parabens

Amigo vc poderia colocar aqui todos .PAS alterados do ACBrTEFD ? E informar quais procedures foram alteradas do componente?

Seria de grande ajuda! Obrigado!

na verdade não precisei mudar nada. eu me precipitei ao postar esse código. na verdade eu exclui a pasta ACBR do meu PC, que estava toda mexida, e fiz o download novamente, e ficou tudo beleza.

Postado

Oi lucasbelkys,

Parabéns pela sua homologação...

Desculpa só retornar hoje... Sabe sabe me dizer se as alterações propostas acima, são realmente necessárias ?

Obrigado.

Seguinte, não sei se essa modificação foi necessária, é necessário que vc entenda o que eu fiz. Mas homologuei com o código como tá abaixo:

procedure TACBrTEFDClass.ImprimirRelatorio;

Var

I,J : 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 ;

TempoInicio := now ;

J := 0 ;

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' : begin

ComandarECF( opeFechaVinculado );

Inc(J); //tentativas de impressao //alterado por lucas belkys

end;

'G','R' : begin

ComandarECF( opeFechaGerencial );

GerencialAberto:=false; //alterado por lucas belkys

end;

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

end;

if EstadoECF <> 'L' then

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

end;

GerencialAberto := False ;

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 ) ;

if J>0 //se ja houve tentativas anteriores zera o contador "I".

then I := 0 ; //alterado por lucas belkys

GerencialAberto := True;

end

else begin

if I <> 1

then ComandarECF( opePulaLinhas ) ;

DoExibeMsg( opmDestaqueVia, 'Destaque a 1ª 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 ;

except

end;

DeleteFile( ArqBackup ) ;

end ;

BloquearMouseTeclado( False );

end ;

if not ImpressaoOk then

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

end;

end;

  • Este tópico foi criado há 4990 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.