Criar etiqueta e definindo quantidades a serem impressas no Delphi FastReport


Esse post irei fazer será um adicional de um antigo post.
Vamos supor que queremos imprimir uma folha de etiquetas mas tem algumas destas etiquetas que queremos que seja impressão mais de uma quantidade.
Para isso vamos utilizar um TClientDataSet para selecionar os produtos e as quantidades de cada etiqueta por produto, e outro TClientDataSet para receber as informações de acordo com as quantidades informadas no TClientDataSet anterior;

Vamos baixar o exemplo do post anterior e fazer nossas alterações em cima dele, no TForm vamos colocar mais um TClientDataSet com os campos que iremos imprimir na nossa etiqueta, e um TDBGrid,
e acrescentar o campo QUANTIDADE do tipo Integer no TClientDataSet já existe.


Lembramos de sempre colocar padrão para carregar 1 quantidade, senão não irá apresentar informação alguma do produto. Vamos duplicar o TClientDataSet com as informações que vamos exibir na etiqueta.

Depois disso criaremos uma Procedure com o nome de CarregarInformacoes;
procedure TFSistema.CarregarInformacoes;
var
  i: Integer;
begin
  CdsBarras.EmptyDataSet;
  CDSEtiquetas_Teste.First;
  while not CDSEtiquetas_Teste.Eof do begin
    for I := 0 to CDSEtiquetas_TesteQUANTIDADE.Value - 1 do begin
      CdsBarras.append;
      CdsBarrasDESCRICAO.Value := CDSEtiquetas_TesteDESCRICAO.Value;
      CdsBarrasCODBARRAS.Value := CDSEtiquetas_TesteCODBARRAS.Value;
      CdsBarras.Post;
    end;
    CDSEtiquetas_Teste.Next;
  end;
end;
Essa Procedure faremos um while para passar em todos os registros da tabela, e na linha de baixo um for para cadastrar a quantidade de etiquetas que informamos no TDBGrid.

O Botão de impressão da etiqueta vai ficar assim:
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
    CarregarInformacoes; {Nossa procedure}
    frxTable.DataSet := CdsBarras; {Joga a tabela de etiquetas que criamos nova}
    if Sender = btnVisualizar then
      frxReport.ShowReport
    else begin
      frxReport.PrepareReport;
      frxReport.Print;
    end;
  end;
end;
Percebe que coloquei no DataSet a tabela que criei depois a CdsBarras, e a procedure acima da linha onde e colocado o FrxTable.DataSet.

Vamos testar oque fizemos: 


Espero ter acendido uma pequena luz no final do túnel de como fazer um documento com três tabelas.

0 comentários:

Postar um comentário