Criar etiqueta no Delphi FastReport - Pulando etiquetas
https://anaprogramadorajunior.blogspot.com.br/2015/12/criar-etiqueta-no-fastreport.html
Vamos falar de impressão de etiquetas, impressão escolhendo a quantidade de etiquetas a serem impressas e a quantidade a ser pulada (Digamos que já foi utilizada as 4 primeiras etiquetas)
O nosso problema seria algo semelhante a um usuário utilizou algumas etiquetas da folha, e precisamos "pular" esses espaços, para não precisar reimprimir em uma nova folha.
Vou utilizar um TClientDataSet "cdsProdutos" para pegar os produtos ( Pré cadastrados ) mas vocês fazem as devidas conexões de banco de dados!
Já o TClientDataSet "CDSEtiquetas" irá precisar ser um TClientDataSet mesmo para jogarmos nossa informação a ser impressa nele!
Vamos precisar de:
- 2 - TClientDataSet
- 3 - TBitBtn
- 1 - TfrxReport
- 1 - TfrxDBDataset
- 1 - TDataSource
- 1 - TDBGrid
- 1 - TEdit
- 1 - TLabel
Vamos renomear os 3 botões
Um botão com "Imprimir", outro com "Visualizar" e o ultimo com "Fechar";
Renomeie os TClientDataSet como "cdsProdutos" e o outro como "cdsEtiquetas";
Na tabela cdsEtiquetas crie os campos
- DESCRICAO - tipo = Varchar(100)
- CODBARRAS - Tipo = Varchar(25)
Na tabela cdsProdutos crie os campos
- DESCRICAO - tipo = Varchar(100)
- CODBARRAS - Tipo = Varchar(25)
- QUANTIDADE - Tipo = Integer
O campo "Inicio com etiquetas em branco" irá determinar a quantidade de etiquetas que iremos pular no começo.
Vincule ao TDBGrid a tabela cdsProdutos que contem o campo "Quantidade".
Adicione os campo ao TDBGrid bloqueia a edição em todos campo exceto o da "Quantidade";
De um duplo clique sobre o TDBGrid Abrira uma tela com os campo que estão adicionados em tela, selecione todos exceto o "Quantidade" e nas propriedades marque "ReadOnly" como "True"
Agora vamos ao código:
1º Passo: Vamos criar a procedure EtiquetasEmBranco, será importante para criar etiquetas em branco no inicio (As já utilizadas)
procedure TFSistema.EtiquetasEmBranco;
var
li: Integer;
begin
for li := 0 to StrToInt(edEmBranco.Text) - 1 do begin
cdsEtiquetas.Append;
cdsEtiquetas.Post;
end;
end;
Aqui fazemos um laço de repetição For para criar a quantidade de registro de acordo com a quantidade digitada no campo de "Inicio com etiquetas em branco"
2º Passo: Criaremos a procedure CriarOuLimpar para criar o nosso cliente ou limpar em caso de reimpressão sem sair da tela.
procedure TFSistema.CriarOuLimpar;
begin
if cdsEtiquetas.Active then
cdsEtiquetas.EmptyDataSet
else
cdsProdutos.CreateDataSet;
end;
3º Passo: Já no botão "Visualizar" vem a magica vamos utilizar nossas procedures e fazer a visualização da nossa etiqueta:
procedure TFSistema.btnVisualizarClick(Sender: TObject);
begin
if cdsEtiquetas.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
CriarOuLimpar;
EtiquetasEmBranco;
PreencherOsProdutos;
frxTable.DataSet := cdsEtiquetas; {Joga a tabela de etiquetas para o relaório}
if Sender = btnVisualizar then
frxReport.ShowReport
else begin
frxReport.PrepareReport;
frxReport.Print;
end;
end;
end;
4º Passo: E coloque o mesmo evento para o botão "Imprimir" não é necessário replicar o código e só colocar o mesmo evento no botão
Desculpe a demora, eu tinha feito algo parecido, o código ficou assim:
ResponderExcluirif dsEtiqueta.IsEmpty then
begin
Application.MessageBox('Nenhum dado foi retornado! Verifique os parâmetros de impressão','Erro',mb_Ok+mb_IconError);
end
else
begin
cdsRel.Close;
cdsRel.CreateDataSet;
while not dsEtiqueta.Eof do
begin
for i:=1 to j do {j é a quantidade}
begin
cdsRel.Insert;
cdsRelCC_COD.AsString:= dsEtiquetaCC_COD.AsString; {codigo do produto}
cdsRelCC_DESC.AsString:= dsEtiquetaCC_DESC.AsString; {descricao do produto}
cdsRel.Post;
end;
dsEtiqueta.Next;
end;
relEtiqueta.PrepareReport();
relEtiqueta.ShowReport();
end;
Então utilizei dois datasets, enquanto a quantidade for menor ou igual ao que o usuário digitar o dsEtiqueta irá inserir as informações no cdsRel, e o cdsRel passa as informações para o relatório.
Muito obrigado pela ajuda! Seu blog é show!
Obrigada!! :D
ExcluirBoa tarde Ana Paula Novello, foi mostrado um exemplo nesse tópico com etiquetas que a pessoa escolhe a quantidade que vai ficar em branco, eu queria que a cada vez que imprimisse ela pulava uma linha, como faço isso, eu fiz assim mais não esta dando certo!
ResponderExcluirprocedure TFm_livros.EtiquetasEmBranco;
var
li,cont: Integer;
begin
for li := 0 to cont -1 do
begin
dm.cdsEtiquetas.Append;
dm.cdsEtiquetas.Post;
cont:=cont+1;
end;
end;
Bom dia Diogo! Não seria pular a quantidade de etiquetas que completa a linha?
ResponderExcluirEx: Se a linha tem 4 etiquetas então se pula as 4 etiquetas ou em caso de etiqueta em rolo que é uma por linha?