Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question QRComposite de QRComposites

Buenas, tengo un dilema.

Tengo una lista de animales, digamos: a1, a2, a3, ... an
Cada uno de esos animales tiene una serie de informes particulares, tienen un informe de pesajes, otro de vacunas, otro de enfermedades. Todos ellos en QReport's diferentes.

En un momento dado tengo que mostrar una lista con "el informe completo" (historia clínica completa) que consiste en la unión de los informes particulares. Hasta aquí la cosa va bien. El informe combinado lo hago con un QRComposite. Muestro la vista previa e imprimo sin problemas.

Resulta que ahora necesito que me salga (aquí quiero hacer una vista previa también) una unión de los informes completos de una sola vez, esto es: a1 (pesajes, vacunas, enfermedades), a continuación a2 (pesajes, vacunas, enfermedades), a continuación a3 (pesajes, vacunas, enfermedades), ... . En la vista previa debo ver un solo informe con estos informes uno abajo del otro y que tengan la numeración de hojas de manera continua.

Esto es particularmente importante puesto que la cantidad de animales es muy elevada y no es operativo imprimir la "historia clínica completa" de a una por vez.

Lo primero que se me ocurre es hacer una composición de composiciones o como se lo llame, pero no he dado con la forma correcta. ¿Cómo puede resolverse este tema?

Espero que se haya entendido, gracias.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #2  
Antiguo 02-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Si no es posible hacerlo con una composición de QRComposite's. ¿Alguna otra opción?
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #3  
Antiguo 04-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question

Con algo de tozudez he podido avanzar algo, lo cuento:
Pude mandar cada "historia clínica" seleccionada a un archivo .qrp, eso lo he logrado de la siguiente manera:

Código Delphi [-]
  for i:=0 to (nros_caravana.Count - 1) do
  begin
 //.... código que no viene al caso

    QRCompositeReport1.Prepare; //Esto ejecuta el OnAdd que levanta los informes particulares, anda bien.
    TQuickRep(QRCompositeReport1.Reports.Items[0]).Printer.Save('reportes\Reporte' +   IntToStr(i) + '.QRP');
  end;
  qrcmpstrprtJuegosCompletos.Preview;

Con esto puedo guardar masivamente todas las "historias", lo que no he podido hacer ha sido levantarlas y mostrarlas en el preview, que es la última línea del código.

En el OnAdd de qrcmpstrprtJuegosCompletos:

Código Delphi [-]
procedure TFrmBuscarPesajes.qrcmpstrprtJuegosCompletosAddReports(
  Sender: TObject);
var
  i:Integer;
  r:TQuickRep;
begin
  r:=TQuickRep.Create(nil);
  r.QRPrinter:=TQRPrinter.Create(r);
  with qrcmpstrprtJuegosCompletos.Reports do
  begin
  //Tenemos que recuperar los archivos .qrp que guardamos por ahí
    for i:=0 to (nros_caravana.Count - 1) do
    begin
      r.QRPrinter.Load('reportes\Reporte' + IntToStr(i) + '.QRP');
      Add(r);
    end;
  end;
end;

El código anterior no me da error pero al aparecer la ventana de vista previa no se ve nada, aparece vacía. Para colmo si lo intento nuevamente me dice que el "último .qrp está siendo usado por otro procedimiento y no se puede tocar"

Los avances han sido buenos pero me falta la frutilla del postre que sería poder levantar los .qrp y armar el informe completo.

¿Alguien tiene sugerencias?

Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #4  
Antiguo 07-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 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
  #5  
Antiguo 07-06-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por santiago14 Ver Mensaje
Con esto resolví el dilema, mi cliente contento y las vaquitas preocupadas porque las probabilidades de ir al asador aumentan.
Muchas gracias, Santiago.

No siempre se tiene la fortuna de que algún colega esté en el lugar indicado, en el momento indicado y con la respuesta indicada para ayudar a otro. Y es cuando toca esforzar la investigación hasta llegar a un buen puerto.

Pero darse tiempo de compartir la solución encontrada con el resto de la comunidad es algo que pocas veces ocurre, y por ello mi agradecimiento. Has puesto un gran ejemplo.

Saludos.
Responder Con Cita
  #6  
Antiguo 07-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Thumbs up

Por favor, gracias a todos Uds. y al foro, que tantas veces me ha ayudado.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #7  
Antiguo 07-06-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Podrían hacerse muchas sugerencias para tu código, pero creo que una de las más importantes sería no olvidarse de destruir los objetos que creas. Y hacer esto usando bloques Try..Finally (con el Create justo antes del Try y el Free dentro de Finally).

Saludos.

Al.
Responder Con Cita
  #8  
Antiguo 08-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Thumbs up

Cita:
Empezado por Al González Ver Mensaje
Podrían hacerse muchas sugerencias para tu código, pero creo que una de las más importantes sería no olvidarse de destruir los objetos que creas. Y hacer esto usando bloques Try..Finally (con el Create justo antes del Try y el Free dentro de Finally).

Saludos.

Al.
Es verdad. Ahora que ya tengo la cosa resuelta, le he hecho esa y varias otras cosas que optimizaron un poco el código final.
Gracias Al por las recomendaciones.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como detectar si se imprime un documento con QuickReport y QRComposite?? smacli Impresión 0 30-01-2006 21:35:54


La franja horaria es GMT +2. Ahora son las 16:05:23.


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
Copyright 1996-2007 Club Delphi