Ver Mensaje Individual
  #8  
Antiguo 21-04-2007
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Reputación: 18
rolandoj Va por buen camino
Smile Si se puede; pero, mejor ...

Hola,
Si se puede usar QuickReport para tener un reporte con varios TDataSet. Personalmente lo he hecho con reportes de hasta 12 tablas, donde el detalle de cada una era muy diferente. Te podría explicar como hacerlo; pero es muy complicado y hace tiempo aprendí que metodológicamente no se debe hacer.
Me explico:
Para efectos de portabilidad, en nuestro reporte no deberíamos tener enlaces (sea directamente sobre componentes de impresión tales como TQRDBText, o en código) a componentes de Bases de Datos.
La metodología que desarrollé, y que me ha permitido en forma super rápida adecuar, entre otros, reportes Cliente Servidor al modelo Web consiste, en su esquema más sencillo, en lo siguiente:
1. Se coloca una banda detalle y sobre esta se agregan en cadena bandas hijas por cada tipo de línea que necesite el reporte. Sobre esas bandas se colocan componentes QuickReport que no usen accesos a TDataSet (componentes que no sean TDBxxx }
2. Cada posible tipo de línea se representa en una unidad separada mediante clases que desciendan de una clase Base que incluya una propiedad que identifique el tipo de línea. Lógicamente, las clases descientes tendrán propiedades de texto correspondientes a los datos de cada tipo de línea.
3. El reporte se arma en un módulo de datos separado y se guarda en una lista. Cada línea de esa lista es un objeto de alguna de las clases mencionadas antes.
4. En el caso de programas convencionales, esa lista se pasa directamente como parámetro al reporte. En el caso Web, la lista incluye una propiedad, llamemosla AsWebText que permita representar todo el reporte como líneas de texto separado por tabuladores y enviarlo en una comunicación Web. El cliente recibe el texto, recompone la lista y la pasa como parámetro al reporte.
5. Usando el evento OnNeedData se recorre toda la lista y con un Case en cada línea de la lista se selecciona cual de las bandas hijas se imprimirá
6. Finalmente, en cada banda hija, en el evento BeforePrint, se llenan los campos de la banda, con los datos del objeto de la lista que le corresponda.
En líneas generales, ese es el esquema. Hay situaciones especiales que pueden requerir variaciones, tales como encriptación de datos
A primera vista, esta metodología puede parecer más complicada que los tradicionales TDBxx, ya que requiere más trabajo; pero, por amplia experiencia te puedo asegurar que quita de encima muchísimos dolores de cabeza al volver muy legibles los reportes y suministrar una independencia que permite migrar en custión de muy pocos días grandes trabajos que de lo contrario podrían requerir meses de recodificación.
Responder Con Cita