PDA

Ver la Versión Completa : Qreport, composite y cambios en qrlabel


Walterio
18-09-2012, 13:11:25
Hola gente.
Estoy usando Delphi 6 y QReport.
Lo que quiero hacer es lo siguiente:
Tengo un reporte que ocupa media página A4 de la cual necesito hacer cuatro copias del reporte, es decir, dos copias del reporte en una hoja, por lo que tendría dos hojas con cuatro copias del reporte.Hasta ahi todo sale bien, el problema es que necesito poner al pié de cada reporte, un qrlabel, o lo que sea necesario con la leyenda, "Original","Copia", "Duplicado" y "Triplicado".
El problema es que con el composite, no puedo "tocar" previamente cada reporte antes de agregarlo al composite, ¿se entiende?.
No estoy en la oficina en este momento como para adjuntar el código donde hago el composite, pero creo que es claro lo que necesito y la pregunta es cómo hacerlo, pero si es necesario, adjunto mi código.

Desde ya, muchas gracias.

MartinS
18-09-2012, 16:01:26
Hola Walterio: No tengo idea cuales son los Qreport que estas usando pero suponiendo que es uno solo que se repite cuatro veces podrias hacer asi:

Defini una variable (yo lo puse copia).
Aqui le asignas el valor a la variable

procedure TForm2.FormCreate(Sender: TObject);
begin
Copia := 1;
end;


Aqui se agregan el mismo Qreport (QuickRep1) una y otra vez... Ojo no se si usas solo uno repetido o varios

procedure TForm2.QRCompositeReport1AddReports(Sender: TObject);
begin
QRCompositeReport1.Reports.Add(QuickRep1);
QRCompositeReport1.Reports.Add(QuickRep1);
QRCompositeReport1.Reports.Add(QuickRep1);
QRCompositeReport1.Reports.Add(QuickRep1);
end;


Antes de imprimir (Evento del Qreport), en este caso como es por QrComposite, antes de enviar al composite, miro el valor de copia y le asigno el texto correspondiente al Qrlabel

procedure TForm2.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
case Copia of
1: QRLabel1.Caption := 'Original';
2: QRLabel1.Caption := 'Copia';
3: QRLabel1.Caption := 'Duplicado';
4: QRLabel1.Caption := 'Triplicado';
end;
end;


Despues que lo envio (Siempre del Qreport) incremento el valor de la variable copia

procedure TForm2.QuickRep1AfterPrint(Sender: TObject);
begin
Inc(Copia);
end;


Saludos.-

PD: No se si es la mejor forma de hacerlo pero hice una pequeña prueba y mas o menos se adapta a lo que solicitas de acuerdo a mi imaginacion... :p:p Espero que te sirva y si no con mas datos veremos que podemos hacer.- ^\||/

Walterio
18-09-2012, 16:42:09
Muchas gracias MartinS por la respuesta.
Tu ejemplo me solucionó el problema (no sé porqué no se me pasó por la cabeza usar el BeforePrint, era simple).
Efectivamente, como suponés, son cuatro copias de un mismo reporte que me entran dos por página.
El único cambio que tuve que hacer es poner el Inc(Copia) después del Case del BeforePrint :



case nCopias of
1: lblTipoCopia.Caption := 'Original';
2: lblTipoCopia.Caption := 'Duplicado';
3: lblTipoCopia.Caption := 'Triplicado';
4: lblTipoCopia.Caption := 'Cuadruplicado';
end;

Inc(nCopias);



ya que en el AfterPrint (quién sabe el porqué) no se ejecuta.

Al imprimir sale todo bien, pero me pareció ver que en el Preview no funciona como deberia ya que me mostró las 4 etiquetas iguales.
Pruebo nuevamente y comento, pero al menos las impresiones resultaron exitosas.

Nuevamente, muchísimas gracias.

Saludos.

MartinS
18-09-2012, 17:13:33
Hola nuevamente:
lo acabo de probar poniendo el incremento despues del case y funciona igual. El unico detalle es que la banda donde tengo la etiqueta que te muestra los resultados es del tipo summary (no se si tendra algo que ver) y la variable copia la asigno cuando se crea el formulario que soporta al Qreport.-

Saludos

Edito: Leo con detenimiento tu mensaje y dice que esta solucionado así que no tomes en cuenta lo que escribí arriba :D :D . Suerte!!

Walterio
18-09-2012, 17:24:58
Hola MartinS.
La famosa etiqueta yo la tengo en una banda del tipo child de la banda del tipo summary que la uso como pié del reporte, habría que probarlo, pero está funcionando perfectamente.De todas formas, lo pruebo según me decís así me saco la duda, pero ya está funcionando correctamente.

Mil gracias nuevamente.

Saludos.