PDA

Ver la Versión Completa : Unir trabajos de impresión


mlara
13-04-2005, 19:29:36
Hola... Sucede que tengo una aplicación que genera reportes con Quick Report y con Rave Reports.

Con Rave Reports puedo ejecutar un método (NewPage) tal que me permite unir varios trabajos de impresión en uno sólo.

No he podido hacer esto mismo con Quick Report ni utilizando el TCompositeReport, por lo que mi aplicación genera múltiples trabajos de impresión. Esto es bueno y malo al mismo tiempo, pero no voy a discutirlo aquí.

Entonces de acuerdo a lo anterior, tengo dos opciones:

1. Hallo la forma de unir los trabajos de impresión con Quick Report, ó
2. Teniendo los trabajos en el administrador de impresión busco la forma de unirlos para que se conviertan en uno sólo (esto tendría que hacerlo desde mi aplicación). Aquí he visto que las aplicaciones generan archivos SPL y SHD generalmente en C:\WINDOWS\system32\spool\PRINTERS.

Hasta ahora no he podido realizar ninguna de estas opciones.

Como siempre agradezco mucho a quienes me puedan colaborar en este asunto, y ojalá con las dos opciones.

mlara
14-04-2005, 05:51:49
Jajajaj... casi que no, y así de fácil. Les cuento: pude dar solución al punto uno. Aquí está:

Tengo una forma con un Edit, un Button, y el QRCompositeReport, y por otro lado un reporte muy simple con una banda tipo rbTitle y un QRLabel sobre la misma.

Aquí está la forma:



type
TfMaestro = class(TForm)
Edit1: TEdit;
Button1: TButton;
QRCompositeReport1: TQRCompositeReport;
procedure BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
procedure QRCompositeReport1AddReports(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

, y aquí el reporte:



type
TrUno = class(TQuickRep)
QRBand1: TQRBand;
QRLabel1: TQRLabel;
private

public

end;

Ahora, en el Edit1 simplemente escribo el número de reportes que quiero imprimir (en este ejemplo hasta 10 máximo). El programa creará ese mismo número de instancias y las mostrará en el CompositeReport en páginas diferentes. Para Imprimir sólo doy click en el Button1. Aquí está el código:



procedure TfMaestro.BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
Sender.NewPage;
end;

procedure TfMaestro.QRCompositeReport1AddReports(Sender: TObject);
var
I: Integer;
rUno: array [1..10] of TrUno;
begin
for I := 1 to StrToInt(Edit1.Text) do begin
rUno[I] := TrUno.Create(fMaestro);
rUno[I].QRLabel1.Caption := rUno[I].QRLabel1.Caption+' '+IntToStr(I);
rUno[I].Name := 'rUno'+IntToStr(I);
if I > 1 then begin
rUno[I].BeforePrint := BeforePrint;
rUno[I].Units := MM;
rUno[I].Page.TopMargin := 100;
end;
QRCompositeReport1.Reports.Add(rUno[I]);
end;
end;

procedure TfMaestro.Button1Click(Sender: TObject);
var
I: Integer;
begin
QRCompositeReport1.Preview;
// Libera reportes
I := 1;
while FindComponent('rUno'+IntToStr(I)) <> nil do begin
FindComponent('rUno'+IntToStr(I)).Free;
Inc(I);
end;
end;

Y listo!

Me he dado cuenta de que algunas personas han preguntado precisamente cómo hacer esto, así que espero les sirva.

Ahora, alguien podría colaborarme con el punto dos? Podría ser muy útil.

Gracias.

ContraVeneno
31-05-2005, 23:44:18
Grax, yo tenía el mismo problema

y esto me ayudo mucho

Tengo la información en dos consultas distintas, no puedo usar JOIN porque no me funciona de esa manera, así que lo que hice fue hace un reporte por cada consulta y luego utilizar el QRCompositeReport para unirlos en uno solo... y eso fuelo que solucionó mi problema. Creo que mi problema era menos complejo, solo tuve que hacer lo siguiente:

procedure TFrmInicial.QRCompositeReport1AddReports(Sender: TObject);
begin
inherited;
with QRCompositeReport1.Reports do
begin
Add(QR1); //QR son mis reportes por separado, cada uno con su detalle
Add(QR2);
end;
end;


al final solo mandas llamar a qrcompositereport1.Preview;
y lixto...

Grax, me pusiste en el camino correcto.