Fórum Etiquetas com writeln #355348
13/03/2008
0
Eu estou tentando imprimir etiquetas para formulário contínuo, tentei no QReport, mas eu configuro tudo certinho, tamanho da DetailBand e o tamanho da página, mas se eu mando imprimir um número maior que 48 etiquetas, (cada página das etiquetas tem 24 etiquetas, duas colunas de 12)na última ele corta as duas últimas linhas da última etiqueta, eu estou utilizando um código assim
Gostaria que as etiquetas ficassem assim
Que com os dados ficaria assim
Aí iria para a próxima etiqueta, então, seria mais ou menos isso, imprimir dados em duas colunas, só que a Query teria que ter um Next quando for para a segunda coluna,e outro quando fosse passar para a linha de baixo,mas não estou sabendo como fazer isso.
Writeln(Extr, ´Nome: ´ +zquery1.fields[0].asstring ); Writeln(Extr, ´End: ´ +Zquery1.fields[1].asstring); Writeln(Extr, ´CEP.: ´ +Zquery1.Fields[2].AsString); Writeln(Extr, ´TEL: ´ +ZQuery1.Fields[3].AsString);
Gostaria que as etiquetas ficassem assim
Nome--------------------------------------| Nome---------------------------------
End---------------------------------------- | End-----------------------------------
CEP----------------------------------------|TEL------------------------------------
Que com os dados ficaria assim
Cliente1-------------------------------------Cliente2
Rua um--------------------------------------Rua dois
89400----------------------------------------89400
Aí iria para a próxima etiqueta, então, seria mais ou menos isso, imprimir dados em duas colunas, só que a Query teria que ter um Next quando for para a segunda coluna,e outro quando fosse passar para a linha de baixo,mas não estou sabendo como fazer isso.
Taraciuk
Curtir tópico
+ 0
Responder
Posts
14/03/2008
Wanderok
Ao clicar em ´IMPRIMIR ETIQUETAS´, faça os seguintes passos:
1) Crie uma tabela temporária com o layout desejado:
ETIQUETA_TEMP
ETEMP_CLIENTE1
ETEMP_ENDERECO1
ETEMP_CEP1
ETEMP_TEL1
ETEMP_CLIENTE2
ETEMP_ENDERECO2
ETEMP_CEP2
ETEMP_TEL2
2) agora faz assim:
query1.open; // seus dados para etiqueta já filtrados como deseja
while not query1.eof do
begin
// pegar os dados da primeira etiqueta da linha
vCLIENTE1 := zquery1.fields[0].asstring;
vENDERECO1 := Zquery1.fields[1].asstring;
vCEP1 := Zquery1.Fields[2].AsString;
vTEL1 := ZQuery1.Fields[3].AsString;
// ir para o prox cliente
query1.next;
if not query1.eof then
begin
vCLIENTE2 := zquery1.fields[0].asstring;
vENDERECO2 := Zquery1.fields[1].asstring;
vCEP2 := Zquery1.Fields[2].AsString;
vTEL2 := ZQuery1.Fields[3].AsString;
end
else
begin
vCLIENTE2 := ´´;
vENDERECO2 := ´´;
vCEP2 := ´´;
vTEL2 := ´´;
end;
// inserir os dados da primeira etiqueta da linha
INSERT INTO ETIQUETA_TEMP....
// primeira etiqueta da linha do formulario
ETEMP_CLIENTE1 := vCLIENTE1;
ETEMP_ENDERECO1 := vENDERECO1;
ETEMP_CEP1 := vCEP1;
ETEMP_TEL1 := vTEL1;
// segunda etiqueta da linha do formulario
ETEMP_CLIENTE2 := vCLIENTE2;
ETEMP_ENDERECO2 := vENDERECO2;
ETEMP_CEP2 := vCEP2;
ETEMP_TEL2 := vTEL2;
// proximo cliente (observe q pego 2 em 2 clientes)
query1.next;
endo;
// neste ponto tenho uma tabela temporaria com 2 clientes por linha,
// o que é exatamente o formato do seu formulario de etiquetas
// agora basta ler sequencialmente os registros da tab temp e imprimir
query1 (SELECT * FROM ETIQUETA_TEMP)
while not query1.eof
begin
// 1a linha das 2 etiquetas
write(´lpt1´,ETEMP_CLIENTE1);
write(´lpt1´,´ ´ ); // espaco entre colunas de etiqueta
writeln(´lpt1´, ETEMP_CLIENTE2);
// 2a linha das 2 etiquetas
write(´lpt1´,ETEMP_ENDERECO1);
write(´lpt1´,´ ´ ); // espaco entre colunas de etiqueta
writeln(´lpt1´, ETEMP_ENDERECO2);
// 3a linha das 2 etiquetas
write(´lpt1´,ETEMP_CEP1);
write(´lpt1´,´ ´ ); // espaco entre colunas de etiqueta
writeln(´lpt1´, ETEMP_CEP2);
// 4a linha das 2 etiquetas
write(´lpt1´,ETEMP_TEL1);
write(´lpt1´,´ ´ ); // espaco entre colunas de etiqueta
writeln(´lpt1´, ETEMP_TEL2);
query1.next;
end;
QUERY1.CLOSE;
// PRONTO - ETIQUETAS IMPRESSAS - 2 POR LINHA DO FORMULARIO
// SE FOREM 03, 04 OU 05 ETIQUETAS POR LINHA DO FORMULARIO,
// O PROCESSO É IDENTICO.
Qualquer coisa é só dizer.
Abraco.
Wander
(wanderok@msn.com)
1) Crie uma tabela temporária com o layout desejado:
ETIQUETA_TEMP
ETEMP_CLIENTE1
ETEMP_ENDERECO1
ETEMP_CEP1
ETEMP_TEL1
ETEMP_CLIENTE2
ETEMP_ENDERECO2
ETEMP_CEP2
ETEMP_TEL2
2) agora faz assim:
query1.open; // seus dados para etiqueta já filtrados como deseja
while not query1.eof do
begin
// pegar os dados da primeira etiqueta da linha
vCLIENTE1 := zquery1.fields[0].asstring;
vENDERECO1 := Zquery1.fields[1].asstring;
vCEP1 := Zquery1.Fields[2].AsString;
vTEL1 := ZQuery1.Fields[3].AsString;
// ir para o prox cliente
query1.next;
if not query1.eof then
begin
vCLIENTE2 := zquery1.fields[0].asstring;
vENDERECO2 := Zquery1.fields[1].asstring;
vCEP2 := Zquery1.Fields[2].AsString;
vTEL2 := ZQuery1.Fields[3].AsString;
end
else
begin
vCLIENTE2 := ´´;
vENDERECO2 := ´´;
vCEP2 := ´´;
vTEL2 := ´´;
end;
// inserir os dados da primeira etiqueta da linha
INSERT INTO ETIQUETA_TEMP....
// primeira etiqueta da linha do formulario
ETEMP_CLIENTE1 := vCLIENTE1;
ETEMP_ENDERECO1 := vENDERECO1;
ETEMP_CEP1 := vCEP1;
ETEMP_TEL1 := vTEL1;
// segunda etiqueta da linha do formulario
ETEMP_CLIENTE2 := vCLIENTE2;
ETEMP_ENDERECO2 := vENDERECO2;
ETEMP_CEP2 := vCEP2;
ETEMP_TEL2 := vTEL2;
// proximo cliente (observe q pego 2 em 2 clientes)
query1.next;
endo;
// neste ponto tenho uma tabela temporaria com 2 clientes por linha,
// o que é exatamente o formato do seu formulario de etiquetas
// agora basta ler sequencialmente os registros da tab temp e imprimir
query1 (SELECT * FROM ETIQUETA_TEMP)
while not query1.eof
begin
// 1a linha das 2 etiquetas
write(´lpt1´,ETEMP_CLIENTE1);
write(´lpt1´,´ ´ ); // espaco entre colunas de etiqueta
writeln(´lpt1´, ETEMP_CLIENTE2);
// 2a linha das 2 etiquetas
write(´lpt1´,ETEMP_ENDERECO1);
write(´lpt1´,´ ´ ); // espaco entre colunas de etiqueta
writeln(´lpt1´, ETEMP_ENDERECO2);
// 3a linha das 2 etiquetas
write(´lpt1´,ETEMP_CEP1);
write(´lpt1´,´ ´ ); // espaco entre colunas de etiqueta
writeln(´lpt1´, ETEMP_CEP2);
// 4a linha das 2 etiquetas
write(´lpt1´,ETEMP_TEL1);
write(´lpt1´,´ ´ ); // espaco entre colunas de etiqueta
writeln(´lpt1´, ETEMP_TEL2);
query1.next;
end;
QUERY1.CLOSE;
// PRONTO - ETIQUETAS IMPRESSAS - 2 POR LINHA DO FORMULARIO
// SE FOREM 03, 04 OU 05 ETIQUETAS POR LINHA DO FORMULARIO,
// O PROCESSO É IDENTICO.
Qualquer coisa é só dizer.
Abraco.
Wander
(wanderok@msn.com)
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)