Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

Boa tarde galera do fórum, tudo bom?

 

Estamos com um problema aqui na empresa com o componente ACBrCHQ.

 

Estamos com uma DP-20, Bematech e estamos com um problema em que a impressora de cheque imprime a frente do cheque novamente após imprimir o  verso.

 

Peço para imprimir a frente , ela imprime e quando peço para imprimir o verso, ela imprime o verso e logo em seguida imprime a frente de novo.

 

Alguém pode dar uma ajuda?

 

Atc,

William

Postado

Juliomar, percebi que o erro ocorre no DestravaCheque, ao enviar o comando : fpDevice.EnviaString( #27 + #176 );

 

Ele termina de imprimir o verso e logo em seguida re-imprime o conteúdo da frente do cheque....

Postado

Juliomar, segundo o manual da bematech :

 

"Impressão no Verso do Documento
Pode-se utilizar todos os comandos descritos no manual do usuário DP-10. Antes da impressão travar o 
documento (ESC w 1) e destravar após a impressão (ESC w 0)."
 
O componente ACBrCHQ faz isso, da seguinte forma :
 
procedure TACBrCHQClass.ImprimirVerso(AStringList: TStrings);
Var A : Integer ;
begin
  TravarCheque ;

  For A := 0 to AStringList.Count - 1 do
     ImprimirLinha( StringOfChar(' ',10) + TiraAcentos( AStringList[A] ) );

  DestravarCheque ;
end;
 
Seguindo o processo :
 
procedure TACBrCHQBematech.TravarCheque;
begin
  fpDevice.EnviaString( #27 + #177 );
//  fpDevice.EnviaString( #27 + #119 + #1 ) ;
  Sleep(100);
end;
procedure TACBrCHQClass.ImprimirLinha( AString : AnsiString );
begin
  fpDevice.EnviaString( AString + #13 + #10 );  { Adciona CR + LF }
  Sleep(100);
end;
procedure TACBrCHQBematech.DestravarCheque;
begin
  fpDevice.EnviaString( #27 + #176 );
//  fpDevice.EnviaString( #27 + #119 + #0 ) ;
  Sleep(100);
end;

No momento em que é enviado o (#27 + #176) ele destrava o cheque e imprime o conteúdo da frente do cheque no verso....Bizarro!

 

Eu não consegui encontrar o manual de comandos para porta serial da DP-20, pois gostaria de realizar alguns testes também. Você tem o manual para que possa me enviar?

Postado

Juliomar, eu consegui resolver aqui. 

 

Estava na minha cara hehehe...

 

Seguinte, eu tive que criar um Override para o ImprimeVerso na Bematech, ok? Criei uma variavel FImprimeVerso, pois o problema estava no Travar e Destravar.

 

Para imprimir o cheque na parte da frente, o comando deve seguir este formato, como está no fonte !

 

Travar :

fpDevice.EnviaString( #27 + #177 );

Destravar : 

fpDevice.EnviaString( #27 + #176 );

Com a mudança ficou assim :

 

1) Dei Override no ImprimirVerso.

procedure TACBrCHQBematech.ImprimirVerso(AStringList : TStrings);
var
  A : integer;
begin
  FImprimeVerso := True;

  TravarCheque ;

  For A := 0 to AStringList.Count - 1 do
     ImprimirLinha( StringOfChar(' ',10) + TiraAcentos( AStringList[A] ) );

  DestravarCheque ;
end;

2) Dentro do Travar e Destravar , faço o teste se está imprimindo o verso ou a parte da frente :

procedure TACBrCHQBematech.TravarCheque;
begin
  if FImprimeVerso then
    fpDevice.EnviaString( #27 + #119 + #1 )
  else
    fpDevice.EnviaString( #27 + #177 );
  Sleep(100);
end;

procedure TACBrCHQBematech.DestravarCheque;
begin
  if FImprimeVerso then
    fpDevice.EnviaString( #27 + #119 + #0 )
  else
    fpDevice.EnviaString( #27 + #176 );
  Sleep(100);
end;

3) Finalmente no ImprimirCheque, a parte normal, da frente, seto para False a flag FImprimeVerso

procedure TACBrCHQBematech.ImprimirCheque;
Var ValStr, DataStr : String ;
begin
  if not fpDevice.EmLinha( 3 ) then  { Impressora está em-linha ? }
    raise Exception.Create(ACBrStr('A impressora de Cheques '+fpModeloStr+
                           ' não está pronta.')) ;
  FImprimeVerso := False;

  TravarCheque ;

......

O "Xis" da questão está na parte de travar e destravar mesmo, já estava comentado na Unit, eu apenas "organizei".

  • 1 ano depois...
  • Este tópico foi criado há 3475 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.