Ver Mensaje Individual
  #4  
Antiguo 07-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Reputación: 21
santiago14 Va por buen camino
Wink

Después de tanto luchar, ¡llegamos a buen puerto!
Encontré la manera de hacerlo, lo cuento:

1) Generamos los .qrp, uno por cada informe independiente que tengo
2) Los guardamos en disco, cada uno con nombre. reporte0.qrp, reporte1.qrp, ... reporteN.qrp
3) Los levantamos y juntamos en un solo .qrp
4) Lo mostramos usando TQRPHandler de la unit QRExtra

¿Cómo hacemos el paso 3?
Resulta que hace algún tiempo la gente de qusoft armó una pequeña unidad llamada "QRQRP", que no es mas que un .pas común y lo puso en un archivo llamado QR3RNGD4.ZIP, lo podemos encontrar en: http://www.quickreport.co.uk/webinfo...?WebInfoID=620
Este .zip tiene, entre otras cosas, un .pas (qrqrp.pas) donde encontramos un procedimiento llamado "combineQRP" que hace el trabajo. De igual manera, analizando un poco el procedimiento no lo hace de la manera convencional, usa TStream y otras cositas... pero eso es tema de debate posterior.
Para facilitar la cosa, subí a este post el .zip: QR3RNGD4.ZIP

En definitiva, el código quedaría así:

Código Delphi [-]
procedure TFrmBuscarPesajes.componer_informe_completo(una_pagina_por_animal:Boolean);
var
  i:Integer;
  caravana_particular:TStringList;
  reportes_previosQRP:TStringList;
  //directorio_actual:string;
  h:TQRPHandler;
begin
  with Application, DataModule1 do
  begin
 //Código que no viene al caso, son las llamadas a sql's y voy armando los informes particulares
 
  end;
//Caravanas particulares para los informes particulares de los animales
  caravana_particular:=TStringList.Create;
  caravana_particular.Add('');
//Creamos el espacio para guardar las direcciones donde se guardan los .qrp
  reportes_previosQRP:=TStringList.Create;
//Creamos la estructura del directorio para guardar los archivos
  Crear_directorio('reportes');
  for i:=0 to (nros_caravana.Count - 1) do
  begin
  //Más sql's   

  //Me manda el reporte combinado a un archivo .qrp
    QRCompositeReport1.Prepare;
    TQuickRep(QRCompositeReport1.Reports.Items[0]).Printer.Save('reportes\Reporte' + IntToStr(i) + '.QRP');

    reportes_previosQRP.Add('reportes\Reporte' + IntToStr(i) + '.QRP');
  end;
//¡¡Aquí el gran truco!!
//El primer parámetro es donde se guarda el .qrp consolidado
  CombineQRP('reportes\Historia_clinica.qrp', reportes_previosQRP);
//Lo vemos en el preview
  h:=TQRPHandler.Create;
  with h do
  begin
    FQuickrep.PreviewHeight:=700;
    FQuickrep.PreviewWidth:=1050;
    FQuickrep.PrevInitialZoom:=qrZoom100;
    Filename:='reportes\Historia_clinica.qrp';
    Preview;
    Free;
  end;
end;

Con esto resolví el dilema, mi cliente contento y las vaquitas preocupadas porque las probabilidades de ir al asador aumentan.

Saludos.
Archivos Adjuntos
Tipo de Archivo: zip QR3RNGD4.ZIP (15,6 KB, 6 visitas)
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita