Jump to content

Problemas para impressão EscPos na impressora Sweda SI-300 e SAT Sweda


Andrade.
Go to solution Solved by marcelo_sp,
  • Este tópico foi criado há 2344 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia pessoal,

Estou tendo um problema para impressão do do extrato SAT quando o mesmo está com muitos itens na vendam o extrato fica desfigurado e não imprime o QRCode, o cenário é: Impressora Sweda SL300, SAT Sweda, utilizo EscPos para impressão com modelo Epson selecionado e imprime perfeito para cupons pequenos, mas cupons grande (mais de 80 itens) não vai. Segue imagens em anexo para vocês verem.

 

 

IMG_5169.jpeg

Link to comment
Share on other sites

Daniel bom dia ,

Efetuado os testes para Sweda SI-300S EscPos , a mesma atropela a impressão quando enviado vários itens como mencionado acima pelo colega Ovídio .

A solução foi LinhasBuffer = 10 mas só isso não resolveu , coloquei um Speel(200) no final da procedure como segue abaixo , resolvido o problema , o interessante seria um Sleep como propriedade do componente para que não afetasse outros modelos , oque acha ? Não subi a Unit ACBrPosPrinter.pas por se tratar apenas de uma linha inserida .

 

procedure TACBrPosPrinter.Imprimir(AString: AnsiString; PulaLinha: Boolean;
  DecodificarTags: Boolean; CodificarPagina: Boolean; Copias: Integer);
var
  i : Integer;
  StrToPrint: AnsiString;
begin
  if not (ControlePorta or FDevice.Ativo) then
    raise EPosPrinterException.Create('Não está Ativo');

  StrToPrint := '';
  if FBuffer.Count > 0 then
  begin
    For i := 0 to FBuffer.Count-1 do
      StrToPrint := StrToPrint + FBuffer + CRLF;
  end;
  FBuffer.Clear;

  StrToPrint := StrToPrint + AString;

  GravarLog('Imprimir, Copias:' + IntToStr(Copias)+
            ', DecodificarTags:'+IfThen(DecodificarTags,'SIM','NAO')+
            ', TraduzirTags:'+IfThen(TraduzirTags,'SIM','NAO') );
  GravarLog( StrToPrint );

  if CodificarPagina then
    StrToPrint := CodificarPaginaDeCodigo(StrToPrint);

  //DEBUG
  //WriteLog('c:\temp\teste2.txt', StrToPrint, True);

  if DecodificarTags then
    StrToPrint := FTagProcessor.DecodificarTagsFormatacao(StrToPrint);

  if PulaLinha then
    StrToPrint := StrToPrint + CRLF;

  //DEBUG
  //WriteLog('c:\temp\teste3.txt', StrToPrint, True);

  For i := 1 to Copias do
    EnviarStringDevice(StrToPrint);

  sleep(200) ; // ===>>> Retardar para Sweda SI-300S
end;

 

... Obrigado Daniel 

 

 

Link to comment
Share on other sites

17 minutos atrás, marcelo_sp disse:

Daniel bom dia ,

Efetuado os testes para Sweda SI-300S EscPos , a mesma atropela a impressão quando enviado vários itens como mencionado acima pelo colega Ovídio .

A solução foi LinhasBuffer = 10 mas só isso não resolveu , coloquei um Speel(200) no final da procedure como segue abaixo , resolvido o problema , o interessante seria um Sleep como propriedade do componente para que não afetasse outros modelos , oque acha ? Não subi a Unit ACBrPosPrinter.pas por se tratar apenas de uma linha inserida .

 

procedure TACBrPosPrinter.Imprimir(AString: AnsiString; PulaLinha: Boolean;
  DecodificarTags: Boolean; CodificarPagina: Boolean; Copias: Integer);
var
  i : Integer;
  StrToPrint: AnsiString;
begin
  if not (ControlePorta or FDevice.Ativo) then
    raise EPosPrinterException.Create('Não está Ativo');

  StrToPrint := '';
  if FBuffer.Count > 0 then
  begin
    For i := 0 to FBuffer.Count-1 do
      StrToPrint := StrToPrint + FBuffer + CRLF;
  end;
  FBuffer.Clear;

  StrToPrint := StrToPrint + AString;

  GravarLog('Imprimir, Copias:' + IntToStr(Copias)+
            ', DecodificarTags:'+IfThen(DecodificarTags,'SIM','NAO')+
            ', TraduzirTags:'+IfThen(TraduzirTags,'SIM','NAO') );
  GravarLog( StrToPrint );

  if CodificarPagina then
    StrToPrint := CodificarPaginaDeCodigo(StrToPrint);

  //DEBUG
  //WriteLog('c:\temp\teste2.txt', StrToPrint, True);

  if DecodificarTags then
    StrToPrint := FTagProcessor.DecodificarTagsFormatacao(StrToPrint);

  if PulaLinha then
    StrToPrint := StrToPrint + CRLF;

  //DEBUG
  //WriteLog('c:\temp\teste3.txt', StrToPrint, True);

  For i := 1 to Copias do
    EnviarStringDevice(StrToPrint);

  sleep(200) ; // ===>>> Retardar para Sweda SI-300S
end;

 

... Obrigado Daniel 

 

 

 

Bom dia Marcelo e Daniel,

Testei aqui como o Marcelo mencionou e funcionou perfeitamente, até aumentei um pouco o buffer pra 15 para não segurar tanto a impressão e tudo ocorreu normalmente.

Excelente,  obrigado pela ajuda.

 

Daniel, tem como Commitar isso no SVN? obrigado.

Edited by Ovídio Andrade Palheta
Link to comment
Share on other sites

  • Consultores

Não seria melhor entender o motivo de com o sleep funcionar e daí programar para resolver isso?

  • Like 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • Fundadores

Não acho boa ideia inserir Sleeps no código...

Isso penaliza outras marcas ou dispositivos onde o problema não ocorre

Ainda não tive tempo de analisar o caso...

Em ACBrDevice há uma propriedade chamada: IntervaloAposComando ( ou algo assim )

  • Like 3
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.

Link to comment
Share on other sites

  • Solution

Verdade sua Daniel , não tinha atentado ACBrDevice , ou seja ,  ACBrPosPrinter.Device.SendBytesInterval faz o mesmo que o Sleep acima mencionado , deu certíssimo ! Acabei de testar com 500 itens e foi perfeito !!!

Obrigado pela dica , vc é o cara !

 

 

  • Like 2
Link to comment
Share on other sites

  • Fundadores

Apliquei modificações em ACBrDevice, para permitir Ler/Gravar mais facilmente esses parâmetros:

-- ACBrDevice --
[+] Adicionado os valores de SendBytesCount e SendBytesInterval em:
"DeviceToString" e "SetParamsString" (por: DSA)

 

  • Like 2
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.

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.