Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado
Boa tarde a todos.
Preciso imprimir várias etiquetas com três colunas. No código exemplo abaixo, quando executo o método imprimir, na primeira execução ele imprime as três etiquetas, mas na próxima linha o método imprimir simplesmente não executa. 
Neste exemplo apenas para facilitar o entendimento, não estou usando looping. Estou utilizando DelphiXE, impressora Bematech LB-1000, foi instalado o driver do fabricante.
 
Se alguém tiver uma idéia que possa ser, agradeço a atenção.
 
with ACBrETQ1 do
  begin
     DPI            := dpi203;
     Modelo      := etqEpl2 ;
     Porta         := \\localhost\LB-1000;
     LimparMemoria := True;
 
       Ativar ;
       ImprimirTexto(orNormal, 1, 1, 1, 10, 25, 'Etiqueta 1');
       ImprimirBarras(orNormal, 'E30', '2', '2', 87, 25, '7898237690230', 70, becSIM);
 
       ImprimirTexto(orNormal, 1, 1, 1, 10, 375, 'Etiqueta 2');
       ImprimirBarras(orNormal, 'E30', '2', '2', 87, 375, '7898237690230', 70, becSIM);
 
       ImprimirTexto(orNormal, 1, 1, 1, 10, 750, 'Etiqueta 3');
       ImprimirBarras(orNormal, 'E30', '2', '2', 87, 750, '7898237690230', 70, becSIM);
 
       imprimir(1,600);      
      
       ImprimirTexto(orNormal, 1, 1, 1, 10, 25, 'Etiqueta 4');
       ImprimirBarras(orNormal, 'E30', '2', '2', 87, 25, '7898237690230', 70, becSIM);
 
       ImprimirTexto(orNormal, 1, 1, 1, 10, 375, 'Etiqueta 5');
       ImprimirBarras(orNormal, 'E30', '2', '2', 87, 375, '7898237690230', 70, becSIM);
 
       ImprimirTexto(orNormal, 1, 1, 1, 10, 750, 'Etiqueta 6');
       ImprimirBarras(orNormal, 'E30', '2', '2', 87, 750, '7898237690230', 70, becSIM);
 
       imprimir(1,600);       
      
       ImprimirTexto(orNormal, 1, 1, 1, 10, 25, 'Etiqueta 7');
       ImprimirBarras(orNormal, 'E30', '2', '2', 87, 25, '7898237690230', 70, becSIM);
 
       ImprimirTexto(orNormal, 1, 1, 1, 10, 375, 'Etiqueta 8');
       ImprimirBarras(orNormal, 'E30', '2', '2', 87, 375, '7898237690230', 70, becSIM);
 
       ImprimirTexto(orNormal, 1, 1, 1, 10, 750, 'Etiqueta 9');
       ImprimirBarras(orNormal, 'E30', '2', '2', 87, 750, '7898237690230', 70, becSIM);
 
 
       imprimir(1,600);     
     
 
      Desativar;
 
  end ;
  • Membros Pro
Postado

//amigo vc tem que fazer um laço...

//nao sei se vai lhe ajudar segue abaixo o codigo que uso no meu sistema.

 

  vNomeProduto := '';
  vComplemento := '';

 if vCompatilhamento <> '' then
 begin
    CdsProduto.First;
    while not CdsProduto.Eof do
    begin
      AtivarACBrETQ;

      vNomeProduto := Copy(CdsProdutonome.Text, 1,19);

      if CdsProdutoComplemento.Text = '' then
      begin
       vComplemento := Copy(DTModule.QrEmpresanomeFantasia.Text, 1,12) + ' R$'+ FormatFloat('#.00', CdsProdutovalor.Value);
      end;

      if CdsProdutoComplemento.Text <> '' then
      begin
       vComplemento := Copy(CdsProdutoComplemento.Text, 1,12) + ' R$'+ FormatFloat('#.00', CdsProdutovalor.Value);
      end;

      with ACBrETQ do
      begin
         if Modelo = etqPpla then
          begin
            ImprimirTexto(orNormal, 2, 1, 2, 150, 35, vNomeProduto);
            ImprimirTexto(orNormal, 2, 1, 1, 120, 35, vComplemento);
            ImprimirBarras(orNormal, 'F', '2', '2', 20, 35, Copy(CdsProdutocodigobarra.Text,1,12), 70);

              CdsProduto.Next;
              vNomeProduto := Copy(CdsProdutonome.Text, 1,20);
              if CdsProdutoComplemento.Text = '' then
              begin
               vComplemento := Copy(DTModule.QrEmpresanomeFantasia.Text, 1,12) + ' R$'+ FormatFloat('#.00', CdsProdutovalor.Value);
              end;

              if CdsProdutoComplemento.Text <> '' then
              begin
               vComplemento := Copy(CdsProdutoComplemento.Text, 1,12) + ' R$'+ FormatFloat('#.00', CdsProdutovalor.Value);
              end;

            ImprimirTexto(orNormal, 2, 1, 2, 150, 380, vNomeProduto);
            ImprimirTexto(orNormal, 2, 1, 1, 120, 380, vComplemento);
            ImprimirBarras(orNormal, 'F', '2', '2', 20, 380, CdsProdutocodigobarra.Text, 70);

              CdsProduto.Next;
              vNomeProduto := Copy(CdsProdutonome.Text, 1,20);
              if CdsProdutoComplemento.Text = '' then
              begin
               vComplemento := Copy(DTModule.QrEmpresanomeFantasia.Text, 1,12) + ' R$'+ FormatFloat('#.00', CdsProdutovalor.Value);
              end;

              if CdsProdutoComplemento.Text <> '' then
              begin
               vComplemento := Copy(CdsProdutoComplemento.Text, 1,12) + ' R$'+ FormatFloat('#.00', CdsProdutovalor.Value);
              end;

            ImprimirTexto(orNormal, 2, 1, 2, 150, 730, vNomeProduto);
            ImprimirTexto(orNormal, 2, 1, 1, 120, 730, vComplemento);
            ImprimirBarras(orNormal, 'F', '2', '2', 20, 730, CdsProdutocodigobarra.Text, 70);
          end
         else
          begin
            ImprimirTexto(orNormal, 2, 1, 3, 15, 55, vNomeProduto);
            ImprimirTexto(orNormal, 2, 1, 1, 80, 55, vComplemento);
            ImprimirBarras(orNormal, 'E30', '2', '2', 120, 55, CdsProdutocodigobarra.Text, 080, becSIM);

            ImprimirTexto(orNormal, 2, 1, 3, 15, 365, vNomeProduto);
            ImprimirTexto(orNormal, 2, 1, 1, 80, 365, vComplemento);
            ImprimirBarras(orNormal, 'E30', '2', '2', 120, 365, CdsProdutocodigobarra.Text, 080, becSIM);

            ImprimirTexto(orNormal, 2, 1, 3, 15, 670, vNomeProduto);
            ImprimirTexto(orNormal, 2, 1, 1, 80, 670, vComplemento);
            ImprimirBarras(orNormal, 'E30', '2', '2', 120, 670, CdsProdutocodigobarra.Text, 080, becSIM);
          end;

         Imprimir(1, StrToInt(vAvanco));
         Desativar;
         end;
       CdsProduto.Next;
      end;

Postado
FRANCISCO908, obrigado pela atenção. Como eu disse no meu exemplo, para facilitar o entendimento não usei looping (laço),   porém no projeto eu estou utilizando. O problema é que quando executa a primeira o comando imprimir, saem as três etiquetas, porém quando passa pelo próximo simplesmente o comando não executa e não dá erro. Mesmo Ativando e desativando após a impressão. 
Postado

Bom dia a todos.

Consegui resolver o meu problema.

Sugiro aos administradores e moderadores que façam uma correção no ACBrETQ, no método:

 

FinalizarEtiqueta.

incluir a linha ,  fpEtqInicializada := False; logo após a linha fpEtqFinalizada := True;
 
Pois quando se usa o método imprimir, na primeira chamada ao ser executado o método IniciarEtiqueta, este seta a propriedade  fpEtqInicializada para true, assim nas próximas execuções do método imprimir,
quando chega no método IniciarEtiqueta a propriedade fpEtqInicializada  já está setada como true, então não se inicia a etiqueta novamente e os comandos não são mais enviados para a impressora.
 
Espero ter contribuído um pouquinho.
E sou grato por terem desenvolvido esta suíte de componentes. 
 
 
 
Postado

Olá Juliomar, na verdade o que notei é que toda vez que usamos o método imprimir, se existir mais etiquetas para impressão, deve-se se chamar o método IniciarEtiqueta.

Então a minha sugestão de correção do componente é para retrocompatibilidade, pois após uma atualização dos componentes, os sistemas que estão apenas chamando o método imprimir terão este problema que tive. 

Obrigado pela atenção.

Postado

Ok Waldir Paim.

Da forma que você fez também funcionará. Então fica a critério dos administradores do projeto ACBr decidir qual é a melhor forma de alteração.

Obrigado pela colaboração.

  • Fundadores
Postado

 

Bom dia a todos.

Consegui resolver o meu problema.

Sugiro aos administradores e moderadores que façam uma correção no ACBrETQ, no método:

 

FinalizarEtiqueta.

incluir a linha ,  fpEtqInicializada := False; logo após a linha fpEtqFinalizada := True;
 
Pois quando se usa o método imprimir, na primeira chamada ao ser executado o método IniciarEtiqueta, este seta a propriedade  fpEtqInicializada para true, assim nas próximas execuções do método imprimir,
quando chega no método IniciarEtiqueta a propriedade fpEtqInicializada  já está setada como true, então não se inicia a etiqueta novamente e os comandos não são mais enviados para a impressora.
 
Espero ter contribuído um pouquinho.
E sou grato por terem desenvolvido esta suíte de componentes. 

 

A correção efetuada pelo Donizete está correta... 

 

A modificação proposta pelo Valdir, poderia causar efeitos colaterais para quem usa os métodos IniciarEtiqueta  e FinalizarEtiqueta..

 

A correção já está no SVN... obrigado a todos pela ajuda...

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

  • 1 mês depois ...
Postado (editado)

A correção efetuada pelo Donizete está correta... 

 

A modificação proposta pelo Valdir, poderia causar efeitos colaterais para quem usa os métodos IniciarEtiqueta  e FinalizarEtiqueta..

 

A correção já está no SVN... obrigado a todos pela ajuda...

A função TACBrETQPpla.FinalizarEtiqueta  seta fpEtqInicializada := False; 

quando iniciar a próxima etiqueta   IniciarEtiqueta => TACBrETQPpla.IniciarEtiqueta  tem uma parte do código  ( 

  if not EtqInicializada then
    ListaCmd.Insert(0, Cmd)        //Se Etiqueta não foi iniciada, comandos incluídos no início
  else
    ListaCmd.Add(Cmd);             //Se Etiqueta foi iniciada, comandos são concatenados    

) que coloca os comandos de abertura da etiqueta todos no inicio da lista de comandos devido a variável que foi setada false na finalização da etiqueta anterior.

 

No exemplo etqteste quando clico no botão "bloco de etiquetas" só sai uma.

 

Contornei o problema usando a função  IniciarEtiqueta  2 vezes antes de cada etiqueta; tenho uma Argox os214plus  a principio não reclamou dos comandos extras mas provavelmente vai ficar reduzido o numero de etiquetas q posso imprimir de uma só vez.

 

*tenho os fontes do svn revisao 8264.

Editado por andre380
  • 3 meses depois ...
Postado

A solução sugerida pelo DonizeteFalcon, não funcionou aqui, na realidade causou um problema no que estava funcionando perfeitamente, pelo menos aqui pra mim... :mrgreen:

 

Estou utilizando um zebra GC420t

 

Eu mando imprimir utilizando o iniciarEtiqueta e o finalizarEtiqueta, porém faço da seguinte forma:

While .... do
begin
  IniciarEtiqueta;
  envio uma certa qtde de etiquetas ( 50 por exemplo); ...
  FinalizarEtiqueta
end;

Imprimir;

Com a solução sugerida e implementada no componente, quando mando imprimir está duplicando a qtde de etiquetas impressas, se mando 2 está sendo impresso 4.

 

Gostaria de sugerir uma alteração, que pelo menos nos meus testes não daria problema pra quem usa ou nao o IniciarEtiqueta e o FinalizarEtiqueta

 

1 - Na procedure IniciarEtiqueta remover a linha

 fpEtqFinalizada   := False;

2 - No FinalizarEtiqueta remover a linha:

fpEtqInicializada := False;

3 - Na procedure Imprimir adicionar as linhas:

 fpEtqFinalizada := False;
 fpEtqInicializada := False;

Gostaria que avaliassem a sugestão e a possibilidade de implementação.

 

Obrigado.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Postado

Coloquei o sistema para salvar os comando em txt, acho que mais fácil para explicar.

 

Estou simulando a impressão de etiquetas em duas colunas, dei uma reduzida na qtde de etiquetas pra simplicar, no caso aqui eu inicio a etiqueta passo dois produtos e finalizo, depois inicio passo mais dois produtos e finalizo, e assim sucessivamente,

 

Antes da alteração no componente o sistema montava os comandos assim:

D10
N
R0,0
ZB
A4,120,0,2,1,1,N,"0000000000017"
A4,136,0,3,1,1,N,"SPRAY PROPOLIS 01"
A480,120,0,2,1,1,N,"0000000000024"
A480,136,0,3,1,1,N,"KAIX GUARD PAPEL 20X21,5 CM FLOR PINK C/25"
P1
D10
N
R0,0
ZB
A4,120,0,2,1,1,N,"0000000000031"
A4,136,0,3,1,1,N,"ACHOC. LIQ. CHOCOMIL 200ML UN."
A480,120,0,2,1,1,N,"0000000000048"
A480,136,0,3,1,1,N,"KAIX GUARD PAPEL 20X21,5 CM FLOR LILAS C/25"
P1

Após a atualização do componente os comandos estão ficando assim:

D10
N
R0,0
ZB
D10
N
R0,0
ZB
D10
N
R0,0
ZB
A4,120,0,2,1,1,N,"0000000000017"
A4,136,0,3,1,1,N,"SPRAY PROPOLIS 01"
A480,120,0,2,1,1,N,"0000000000024"
A480,136,0,3,1,1,N,"KAIX GUARD PAPEL 20X21,5 CM FLOR PINK C/25"
P1
A4,120,0,2,1,1,N,"0000000000031"
A4,136,0,3,1,1,N,"ACHOC. LIQ. CHOCOMIL 200ML UN."
A480,120,0,2,1,1,N,"0000000000048"
A480,136,0,3,1,1,N,"KAIX GUARD PAPEL 20X21,5 CM FLOR LILAS C/25"
P1
P1

E gerando dessa forma, pelo menos aqui pra mim, está dando problema na impressão, usando esse exemplo aqui sairia impresso +- 8 etiquetas, as vezes dobra, as vezes sai menos, mas de qualquer forma está saindo sempre a mais do que o necessário, acho que pode ser os P1 que fica no final.

 

Com a minha sugestão, vai ficar assim quando utilizar o InciaEtiqueta e o FinalizaEtiqueta:

D10
N
R0,0
ZB
A4,120,0,2,1,1,N,"0000000000017"
A4,136,0,3,1,1,N,"SPRAY PROPOLIS 01"
A480,120,0,2,1,1,N,"0000000000024"
A480,136,0,3,1,1,N,"KAIX GUARD PAPEL 20X21,5 CM FLOR PINK C/25"
P1
D10
N
R0,0
ZB
A4,120,0,2,1,1,N,"0000000000031"
A4,136,0,3,1,1,N,"ACHOC. LIQ. CHOCOMIL 200ML UN."
A480,120,0,2,1,1,N,"0000000000048"
A480,136,0,3,1,1,N,"KAIX GUARD PAPEL 20X21,5 CM FLOR LILAS C/25"
P1

*Vai ficar igual ao primeiro caso onde estava funcionando normalmente.

 

Se não utiliza o IniciarEtiqueta e FinalizarEtiqueta a impressão fica normal.

 

Com a minha sugestão vai ser possível, manter tudo funcionando, para quem usa o Iniciar/FinalizarEtiqueta e pra quem não usa.

 

Espero ter conseguido exemplificar o problema.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

  • Fundadores
Postado

Analisei o problema junto com o Elias...

 

A solução proposta, iria quebrar o código de quem não usa os métodos: "IniciarEtiqueta" e "FinalizarEtiqueta"... porém acredito que tenhamos achado uma maneira de ambos os métodos coexistirem...

 

A alteração já está no SVN

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

Daniel, verifiquei aqui as alterações, confesso que não concordei totalmente com a forma que ficou, pois se eu utilizo o IniciarEtiqueta e o FinalizarEtiqueta, quando eu mando imprimir os mesmo são chamados novamente passando os comandos para a impressora, que é onde eu estava tendo problemas, infelizmente estou sem a impressora aqui nesse momento pra testar pra ver se resolveu, assim que pegar a impressora novamente vou testar pra ver,de momento vou manter as minhas alterações.

 

Sobre a minha alteração poderia me explicar, por favor, em qual ponto ela "iria quebrar o código de quem não usa os métodos: "IniciarEtiqueta" e "FinalizarEtiqueta"", pois eu havia testado aqui utilizando o Iniciar/FinalizarEtiqueta e sem utilizar eles e funcionou, pode ser que eu tenha esquecido de alguma situação... :oops: .

 

Desde já agradeço a atenção!

 

 

 

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

  • Fundadores
Postado

Você não precisa do equipamento para testar... Você pode repetir os mesmos testes anteriores.. e comprovar pelo Arquivo gerado se os comandos enviados estão na ordem correta...

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

Isso sim Daniel, eu já fiz isso e verifiquei que ficou como deveria ser, o que estou pensando é nos comandos de Iniciar e Finalizar que estão sendo enviados sem necessidade quando mando imprimir, no arquivo de texto sempre vai dar certo.

 

Como disse anteriormente aqui pra mim deu erro da outra vez, então quero ver esse ajustes funcionando na impressora, apenas quero garantir que vai continuar funcionando e evitar mandar o sistema com erro para um cliente, acredito que é uma preocupação que qualquer programador teria nessa situação

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Postado

Bom Dia!

 

Verifiquei aqui os ajustes realizados, ainda estou sem a impressora, mas pelos arquivos txt vi que está gerando os comando na sequencia correta.

 

Obrigado pela atenção e alterações realizadas!

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

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