Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

Bom dia pessoal,

A algum tempo, temos notado que na impressão das vias do comprovante do TEF nos clientes existe um pequeno atraso na impressão do mesmo, ou seja, quando comparamos com alguns outros frentes de caixa, a impressão parece ser feita de maneira contínua, mais fluída, enquanto que no nosso caso, o ECF aparenta imprimir por partes. Ontem, em um cliente o processo de impressão da via do TEF estava demorando em média duas vezes mais o tempo do processo de venda dos produtos. Estamos tentando analisar, o que poderia estar ocorrendo. No nosso source efetuamos deste modo o processamento do vinculado:

procedure TdmVendaECF.TEFComandaECFImprimeVia(TipoRelatorio    : TACBrTEFDTipoRelatorio;
                                              Via              : Integer;
                                              ImagemComprovante: TStringList;
                                              var RetornoECF   : Integer);
case TipoRelatorio of
        trGerencial: begin
                       ...
                     end;
        trVinculado: begin
                       ecf.AcbrEcf.LinhaCupomVinculado(ImagemComprovante.Text);
                     end;
end;

Analisando o método ACBrECF.LinhaCupomVinculado vimos a seguinte implementação padrão:

  if MaxLinhasBuffer < 1 then
  begin
    ...
  end
  else
   begin
     Texto  := '' ;
     Buffer := DecodificarTagsFormatacao( Linha );
     Buffer := AjustaLinhas(Buffer, Colunas) ;

     SL     := TStringList.Create ;
     try
        SL.Text := Buffer ;

        For Lin := 0 to SL.Count - 1 do
        begin
           Texto := Texto + SL[Lin] + sLineBreak;
           if (Lin mod MaxLinhasBuffer) = 0 then
           begin
              ComandoLOG := 'LinhaCupomVinculado( '+Texto+' )';
              fsECF.LinhaCupomVinculado( Texto ) ;
              Texto := '' ;
           end ;
        end ;

        if Texto <> '' then
        begin
           ComandoLOG := 'LinhaCupomVinculado( '+Texto+' )';
           fsECF.LinhaCupomVinculado( Texto ) ;
        end ;
     finally
        SL.Free ;
     end ;
   end ;

Ou seja, pelo que pudemos perceber, recebeu a imagem do comprovante como entrada e em seguida é realizado alguns tratamentos e adicionada para a variável Buffer, em seguida esta variável é associada para um stringlist SL que é percorrido inteiramente, imprimindo linha a linha(posições da mesma).  Fizemos uma alteração para teste no seguinte sentido:

  if MaxLinhasBuffer < 1 then
  begin
    ...
  end
  else
  begin
    Texto  := '' ;
    Buffer := DecodificarTagsFormatacao( Linha );
    Buffer := AjustaLinhas(Buffer, Colunas) ;

    fsECF.LinhaCupomVinculado( Buffer ) ;
  end ;

E obtivemos que na implementação original, foi impresso em média 2,234 s e no teste com o source acima em média 1,341 s isto para cada via, ou seja, no total, ficou 4,468 s e 2,682 s.

Estamos utilizando uma Daruma FS700(MACH 1) e o Sitef Demo 6.1.0.23

Gostaríamos da opinião de vocês no seguinte sentido: Existe um modo de agilizar este procedimento de impressão sem ser a alteração acima? O modo padrão implementado acima utilizando uma stringlist,  ele seria mais seguro? Haveria algum motivo específico? 

Desde já agradeço.

 

  • Fundadores
  • Solution
Postado

O código é intencional... nas antigas homologações de TEF não era permitido imprimir mais do que três linhas por vez, para garantir que a aplicação estava considerando o retorno do ECF a cada buffer enviado...

Se você quer imprimir tudo de uma vez, apenas faça:

 ACBrECF1.MaxLinhasBuffer := 0

 

  • Curtir 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.

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