PDA

Ver la Versión Completa : QuickReport, 4 copias de un listado con distintos pies


Jose Manuel
19-11-2006, 18:04:01
Hola estoy trabajando con D6 y QuickReport 3.6.2. Mi problema es que quiero imprimir 4 copias de un formulario de una hoja, pero en cada una de ellas debe cambiar el pie:

Por ejemplo

1º copia label1.caption := 'Ejemplar para el INTERESADO';
2º copia label1.caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO A REMITIR ';
3º copia label1.caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO';
4º copia label1.caption := 'Ejemplar a CONSERVAR POR LA OFICINA GESTORA';

El usuario previsuliza el listado, y si está conforme pulsa imprimir, entonces la impresora lanza 4 copias.

¿Hay alguna forma de decirle que en cada una de las copias, cambie el texto de un label o debo lanzar 4 veces el listado y previsualizarlo 4 veces?

El proceso sería parecido a cuando se imprime la "declaración de la renta" y cada copia se identifica a quien va dirigida.

Un saludo a todos.
Jose Manuel García

ElKurgan
19-11-2006, 23:11:34
Si la etiqueta que quieres cambiar se llama, por ejemplo, qrLabel1, debes hacer lo siguiente:

1.- Añadir la unit "pptypes" en la clausula uses del Informe.
2.- Poner la propiedad PrinterSetup.Collation := True;
3.- Poner la propiedad PrinterSetup.Copies := 4;
4.- Poner la propiedad PassSetting := psTwoPass;
5.- Crear una variable privada (por ejemplo, FCopia) de tipo Integer; en el
evento BeforePrinter la inicializamos a cero.
6.- En el evento OnSTartPage escribimos esta sentencia:
with MiReport do // o como se llame el informe...
If SecondPass and (AbsolutePageNo = 1) then Inc(FCopia);
7.- Finalmente, en el evento OnPrint escribimos lo siguiente:

case FCopia of
1: qrLabel1.Caption := 'Ejemplar para el INTERESADO';
1: qrLabel1.Caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO A REMITIR ';
1: qrLabel1.Caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO';
1: qrLabel1.Caption :='Ejemplar a CONSERVAR POR LA OFICINA GESTORA';
end;


Espero que te sirva.
Un saludo;

ElKurgan
19-11-2006, 23:30:44
¡ARGH!
Nada de lo dicho antes vale para nada... Me parece que este truco era para
el ReportBuilder y no para el Quick Report...

Pido mil perdones por la metedura de pata

Lepe
20-11-2006, 14:39:57
En el evento BeforePrint de ese qrLabel, puedes modificarlo a voluntad y cambiar el texto.


procedure .... Label1BeforePrint(....);

begin
case label1.tag of:
0: Text := 'Ejemplar para el INTERESADO';
1: Text := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO A REMITIR ';
2: Text := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO';
3: Text := 'Ejemplar a CONSERVAR POR LA OFICINA GESTORA';
end;
label1.tag := label1.tag + 1;


Ignoro como funciona cuando se le da a "imprimir varias copias" igual hace una sola imagen de lo que se va a imprimir y después envía 4 copias de esa imagen. Si funciona así, no te sirve "mi idea", quizás tengas que usar otra cosa, por ejemplo:


qrListado.PreviewModal;
for i:= 1 to 4 do
qrListado.Print; // se envía 4 veces a imprimir.


Edito: Pues no leí el primer mensaje de ElKurgan, pero la idea es la misma en QuickReports.

Saludos y suerte

Jose Manuel
20-11-2006, 18:58:48
Gracias por las ideas, el proceso funciona bien cuando imprimimos sin visualizar el listado, pero si elegimos visualizar el listado, surgen los siguientes problemas:
1º El usuario puede optar por no imprimir
2º Si pulsa imprimir, sale una copia o las que hayamos seleccionados pero todas iguales,
3º Si despues del Print_autoliq.QR_autoliq.PreviewModal; pongo algo, siempre se ejecutará despues de que el usuario cierre el listado, y tal vez el usuario no lo sepa o se le olvide.

Lo ideal, sería capturar la pulsación de la tecla IMPRIMIR cuando estamos previsualizando este listado, y ejecutarlo como cuando se imprime directamente.

Muchas gracias por vuestra ayuda, veré si soy capaz de hacer esto

Un saludo a todos
Jose Manuel


mensaje:='Quieres pre-visualizar el listado antes de imprimirlo (SN)';
Button := Application.MessageBox(pChar(mensaje), 'Seleccionar opción', MB_YESNOCANCEL +
mb_DefButton1);

if Button = IDYES then
begin
Print_autoliq.QR_autoliq.PreviewModal;
// Si pulsamos IMPRIMIR, Deberiamos capturar la llamada y
// ejecutarla como cuando se imprime directamente.
end;

if Button = IDNO then // no previsualiza e imprime directamente
begin
case impr_liq_copias.itemindex of
-1,0: begin {en el combobox se ha selecionado todas las copias}
nCopias:=4;
Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := 0;
end;
1: begin {en el combobox se ha selecionado la 1º copia}
nCopias:=1;
Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := 0;
end;
2: begin {en el combobox se ha selecionado la 2º copia}
nCopias:=1;
Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := 1;
end;
3: begin {en el combobox se ha selecionado la 3º copia}
nCopias:=1;
Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := 2;
end;
4: begin {en el combobox se ha selecionado la 4º copia}
nCopias:=1;
Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := 3;
end;
end;
for i:= 1 to nCopias do
begin
case Print_autoliq.QR_autoliq.QRLabelEjemplar.tag of
0: Print_autoliq.QR_autoliq.QRLabelEjemplar.caption := 'Ejemplar para el INTERESADO';
1: Print_autoliq.QR_autoliq.QRLabelEjemplar.caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO A REMITIR ';
2: Print_autoliq.QR_autoliq.QRLabelEjemplar.caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO';
3: Print_autoliq.QR_autoliq.QRLabelEjemplar.caption := 'Ejemplar a CONSERVAR POR LA OFICINA GESTORA';
end;
Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := Print_autoliq.QR_autoliq.QRLabelEjemplar.tag + 1;
Print_autoliq.QR_autoliq.Print; // se imprime el nº de copias seleccionado.
end;
end;