Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Unir trabajos de impresión (https://www.clubdelphi.com/foros/showthread.php?t=20364)

mlara 13-04-2005 19:29:36

Unir trabajos de impresión
 
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

Solución!!!
 
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:


Código Delphi [-]
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:


Código Delphi [-]
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:


Código Delphi [-]
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:
Código:

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.


La franja horaria es GMT +2. Ahora son las 02:06:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi