Criar etiqueta no Delphi FastReport


Vamos utilizar dentro do fr3:
  • 1 - BarCode
  • 1 - MasterData;
  • 1 - TFrxMemoView


Ajustar as propriedades ColumnsGap, Columns, ColumnsWidth de acordo com o tamanho das etiquetas que vocês irão necessitar

No BarCode tem que ser definido o BarType, e os campos de conexão com o banco de dados;
Normalmente no OnBeforePrint eu utilizo esse código ( Para não exibir o código de barras caso esteja em branco para não aparecer um código invalido ).
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
  BarCode2.Visible :=  <> '';
end;

Vamos criar um TForm nele vamos colocar
  • 3 - TBitBtn;
  • 1 - TClientDataSet; ( Ou no caso de vocês uma tabela de conexão com o banco de dados )
  • 1 - TfrxReport;
  • 1 - TfrxDBDataset;
  • 1 - TfrxBarCodeObject;
Vamos colocar em tela assim

Agora vamos criar um função para verificar se o arquivo .fr3 existe
function TFSistema.Ler_Arquivo(AArquivo: String): Boolean;
var
  lCaminho: String;
begin
  lCaminho := ExtractFilePath(Application.ExeName) + 'Relatórios\' + AArquivo;
  Result := FileExists(lCaminho);
  if Result then
    frxReport.LoadFromFile(lCaminho)
  else Exception.Create('A pasta relatórios não pôde ser criada!' + SlineBreaK +
     'Verifique as permissões de acesso com o Administrador da rede!');
end;

No evento de OnClick do botão Visualizar colocar o código abaixo e acrescenta o mesmo evento no do imprimir;
procedure TFSistema.btnVisualizarClick(Sender: TObject);
begin
  if CDSEtiquetas_Teste.IsEmpty then begin
    Application.MessageBox(Pchar('Seleção sem registros'), Pchar(Caption), MB_ICONINFORMATION + MB_OK + MB_DEFBUTTON1 + MB_SYSTEMMODAL);
    Exit;
  end;
  if Ler_Arquivo('Etiquetas_6x16.fr3') then begin
    frxTable.DataSet := CDSEtiquetas_Teste; {Joga a tabela de etiquetas para o relaório}
    if Sender = btnVisualizar then
      frxReport.ShowReport
    else begin
      frxReport.PrepareReport;
      frxReport.Print;
    end;
  end;
end;

Resultado da impressão 

42 comentários:

  1. bom dia.
    como eu faço para começar a imprimir da segunda etiqueta em diante, levando em consideração que a primeira já foi impressa

    ResponderExcluir
    Respostas
    1. Imprimir as etiquetas lado a lado? E pela propriedade "Columns" do MasterData. Se não for isso fala ai.

      Excluir
  2. Como posso passar o número para o relatório para ser gerado o código de barras, sem ser pelo dataset ?

    ResponderExcluir
    Respostas
    1. Sem ser por DataSet acredito que não a como, pois outra forma seria por variável e assim todas etiquetas ficariam com o mesmo código de barras. Se descobrir outro modo escreve aqui.

      Excluir
  3. como faço pra alterar o tipo de código de barras (EAN 13, etc...) em tempo de código antes da impressão...

    ResponderExcluir
    Respostas
    1. Na parte do código do .Fr3 coloque o código entre o "Begin" e o "end" um isso utilize uma variável ou um combo antes de exibir o relatório para pedir qual o tipo dele ex:
      ( Se não der para compreender direito avisa ai faço um post sobre isso )
      begin
      case of
      0 : BarCode2.BARTYPE := bcCode_2_5_industrial;
      1 : BarCode2.BARTYPE := bcCode_2_5_interleaved;
      2 : BarCode2.BARTYPE := bcCode_2_5_matrix;
      3 : BarCode2.BARTYPE := bcCode128A;
      4 : BarCode2.BARTYPE := bcCode128B;
      5 : BarCode2.BARTYPE := bcCode128C;
      6 : BarCode2.BARTYPE := bcCode39;
      7 : BarCode2.BARTYPE := bcCode39Extended;
      8 : BarCode2.BARTYPE := bcCode93;
      9 : BarCode2.BARTYPE := bcCode93Extended;
      10 : BarCode2.BARTYPE := bcCodeCodabar;
      11 : BarCode2.BARTYPE := bcCodeEAN128A;
      12 : BarCode2.BARTYPE := bcCodeEAN128B;
      13 : BarCode2.BARTYPE := bcCodeEAN128C;
      14 : BarCode2.BARTYPE := bcCodeEAN13;
      15 : BarCode2.BARTYPE := bcCodeEAN8;
      16 : BarCode2.BARTYPE := bcCodeMSI;
      17 : BarCode2.BARTYPE := bcCodePostNet;
      18 : BarCode2.BARTYPE := bcCodeUPC_A;
      19 : BarCode2.BARTYPE := bcCodeUPC_E0;
      20 : BarCode2.BARTYPE := bcCodeUPC_E1;
      21 : BarCode2.BARTYPE := bcCodeUPC_Supp2;
      22 : BarCode2.BARTYPE := bcCodeUPC_Supp5;
      end;

      Excluir
    2. De uma olhada nesse artigo http://anaprogramadorajunior.blogspot.com.br/2016/08/criar-etiqueta-no-fastreport_7.html
      Responda la se ajudou :)

      Excluir
  4. Excelente Artigo me ajudou muito! mas tenho uma dúvida.
    Como eu faria para imprimir de acordo com a quantidade que o usuário deseja?
    Por exemplo: 3 etiquetas do produto x

    ResponderExcluir
    Respostas
    1. Para ajudar melhor criei um exemplo no post
      http://anaprogramadorajunior.blogspot.com.br/2016/08/criar-etiqueta-no-fastreport.html
      Escreve la se ajudou

      Excluir
  5. Eu tenho problemas na segunda etiqueta em diante. No preview parede que vai da super certo. A etiqueta da fábricante tem 1 cm de margem nas quatro partes. Alterar a margem a direita e esquerda. Até aí tudo bem. Só que a margem ao topo de 1cm, tudo que faço nada da certo. Se coloco 1 cm a primeira linha da etiqueta fica ótimo. Porem a segunda linha não sai no local certo. Uso modelo desta estiqueta https://www.prontoprint.com.br/tag-em-papel-mod-jtc249-2500-tags-com-38-x-50mm

    Era como se eu precisasse de mais um espaço pra descer pra segunda linha

    ResponderExcluir
    Respostas
    1. Oie! Não sai no local certo? Não e o espaçamento entre as etiquetas? Se o espaço entre elas estiver errado ou ate mesmo o tamanho da etiqueta em si na próxima linha tende a ir mais para cima ou para baixo! Tem como enviar uma imagem de como esta saindo na segunda linha?

      Excluir
  6. Gilson Heleno - SPMICRO17 de janeiro de 2020 às 10:59

    Boa tarde! Parabens pelo artigo. Fiz um alteração no projeto para etiquetas com 3 colunas para imprimir em uma impressora de Gondola a ELGIN L42 na porta USB e quando mando a impressão sai em branco as etiquetas. Tem idéia do que pode ser? Agora se enviar de outro computador pela rede com a impressora compartilhada dá certo. Isso só acontece se a impressão for pelo micro onde a impressora está fisicamente instalada.

    ResponderExcluir
    Respostas
    1. Boa tarde! Tentou verificar se os drives da impressora estão corretos? Ou tentar reinstalar?

      Excluir
    2. Gilson Heleno - SPMICRO20 de janeiro de 2020 às 06:39

      Consegui imprimir alterando a propriedade Endlessheight para true mas só sai a primeira fileira de etiquetas. tipo são 5 fileiras e só imprime a primeira. o que pode ser?

      Excluir
    3. A banda que estão os dados das etiquetas estão vinculados a um DataSet?(Tarja laranja). Verifica como estão as configurações de pagina do seu documento. Talvez tem contem alguma propriedade invalida. Pois a propriedade "Endlessheight" serve para para ser uma "altura sem fim "

      Excluir
    4. Gilson Heleno - SPMICRO20 de janeiro de 2020 às 09:25

      Na verdade está imprimindo a ultima fileira e não a primeira. Depois que percebi.

      Excluir
  7. Olá boa tarde! como faz para mudar a cor do código de barras?

    ResponderExcluir
  8. olá qual a propriedade que deixa o textbox1 lado a lado? ou é na banda?

    ResponderExcluir
  9. Tenho relatório, mais mande imprimir as 3 colunas a elgin L42 empura etiquetas em branco

    ResponderExcluir
    Respostas
    1. Se mandar a margem ou tamanho da etiqueta errado ele pode pular as etiquetas, tenta diminuir o tamanho dela

      Excluir
  10. Cara que informação preciosa, parabéns amigo você é o mestre dos magos só que melhor que não desaparece quando agente precisa.

    ResponderExcluir
    Respostas
    1. Desculpa Ana Paula, eu muito idiota acabei sendo machista, só porque não vi o seu nome digitei AMIGO e você é uma AMIGA, deve ter sido motivado pela pequena quantidade de moças desenvolvedoras, mas nada justifica meu machismo, mesmo que sem intenção, mais uma vez me desculpe.

      Excluir
    2. Bom dia! kkkk Coisas que acontecem em uma área de maioria masculina

      Excluir
  11. Olá Ana. Estou precisando de uma ajuda. Então, como faço pra selecionar o produto em um DBGrid1 e mandar pra outra DBGrid2 e desta DBGrid2 gerar as etiquetas?

    ResponderExcluir
    Respostas
    1. Boa tarde! Cria faz dois clientDataSet um com todos os produtos e outro em branco, coloca uma botão que quando adionar no segundo clientDataSet apaga do outro.

      Excluir
  12. Olá, Ana! Montei uma etiqueta seguindo seus tutoriais, só que estou com um problema. Quando vou fazer a impressão das etiquetas (etiqueta térmica duas colunas) as duas primeiras etiquetas saem corretas, mas as etiquetas da sequência saem fora das etiquetas como vc pode ver nessa foto - https://prnt.sc/1ao0qgv

    Poderia me dar uma dica de onde estou errando?

    ResponderExcluir
    Respostas
    1. Bom dia! Isso e margem tenta aumentar um pouco o tamanho da etiqueta ou as margens superior

      Excluir
    2. Bom dia, Ana! Muito obrigado por sua resposta. Vou tentar aumentar a margem e se não funcionar o tamanho da etiqueta,

      Excluir
    3. Boa tarde, Ana! Fui alterando as margens e consegui fazer funcionar, o problema é que se eu coloco 20 etiquetas imprime corretamente, mas se ultrapassar as 20 o conteúdo começa a ser impresso fora da etiqueta.

      Excluir
    4. Sempre que ocorre isso e problema de margem, por so ocorrer depois da 20º etiqueta provavel que seja a minima coisa que esta fora, talves uma margem superior que esteja milimeto errada

      Excluir
    5. Mais uma vez obrigado! Estou fazendo os testes reduzindo a margem pouco a pouco pra ver se dá certo, pq pelo que notei quando chega na etiqueta 21/22 ela começa a imprimir mais embaixo e vai assim até a impressão ficar em duas etiquetas.

      Excluir
  13. Muito obrigado! Ajudou muito este seu exemplo.

    ResponderExcluir
  14. olá!
    uma perguntinha como faço para poder gera a quantidade da mesma etiqueta?
    por exemplo: tenho um produto "MEIA" e dela que só gere 10 etiquetas do mesmo produto. como faço isso?

    ResponderExcluir
    Respostas
    1. Ola boa tarde! De uma olhada nesse post que tem uma dica de como pode ser feito
      https://anaprogramadorajunior.blogspot.com/2021/10/criar-etiqueta-e-definindo-quantidades.html

      Excluir
  15. Parabéns pelo blog. Suas postagens ajudam muito. Sucesso na sua vida! Até mais

    ResponderExcluir