PDA

Ver la Versión Completa : Quick Report Utilizando Varios Dataset


HubelSB
21-03-2007, 23:05:21
Buenas me veo en la necesidad de Crear Informes pero dentro de una pagina hay varias secciones, donde requiero para cada seccion un DATASET Diferente, lo malo de la pagina de QuickReport es que admite un solo DATASET, y no puedo utilizar Relaciones Maestro detalles por que son DATASET muy Diferentes, cada QRDBtext tiene la posibilidad de escoger entre los dataset disponibles, pero en la PREVIEW, solo se carga un registro, mi informe deberia quedar mas o menos asi:


INFORME DE ACTIVIDADES EMPRESA


(+) INGRESOS (*) LISTADO MOROSOS
Movimiento Monto Cliente Deuda
------------- -------- -------- -------
Pago clientes 1000.00 Antonio 5.00
Pago Fleteros 200.00 luis 17.00
Pago Mensuales 2000.00 Julio 5.01
Paredes Juli 6.5
Eduardo 10.0
Antero 5.0
jose Luis 50.2
--------- -----
58.6

CONTEO DE VALORES

VALOR MONTO
------ -------
Efectivo 100.00
Monedas 5.00
ME 60.20
Cheques1 5.00
Cheques2 5.00
------
175.00



TRANSFERENCIA DE VALORES

FECHA CUENTA_ORIGEN CUENTA_DESTINO
----- ---------------- ----------------
15/02 Luis Figueredo Mario Alcantara
17/02 Antonio Rua Jose Quinoñez
15/11 Felipe Iganiuca Luis Antonio






(*) y Debe llenar solo una pagina o siguientes, asi que el composite Report, no ayuda, como pueden ver Tengo 4 DataSET, OTRA COSA ES COMO LE DOY FORMATO A LOS NUMERO PARA QUE SALGAN 1250.00 y no 1250, agradece su ayuda de antemano HubelSolis@Hotmail.com

Caral
21-03-2007, 23:11:25
Hola HubelSB
Con respecto a la consulta yo la haria con un query y enlazo la informacion que necesite asi solo tengo un dataset sin problemas.
Con repecta al numero el QRDBtext en el inspector de objetos en mask pones #,##0.00
Con esto solucionas el problema.
Saludos

HubelSB
21-03-2007, 23:14:57
No me entiendes Bien, cada DATASET es parte de una TABLA y estas no estan enlazadas, ni siquiera tienen el mismo numero de registros, el informe casi logra la apariencia de una hoja de una revista con diferentes seccciones.

Caral
21-03-2007, 23:26:01
Hola pues creo que si entendi bien.
Tienes varias tablas, estas las quieres imprimir y el qreport solo permite un dataset, es correcto?
Si es asi, sigo con la misma sugerencia o quizas hacer un PREVIEW en el que se enlacen las tablas.
Saludos

ContraVeneno
22-03-2007, 01:05:58
Consulta la ayuda de delphi y busca aquí en los foros sobre:
CompositeReport (http://delphi.about.com/library/bluc/text/uc051701h.htm)

HubelSB
22-03-2007, 01:34:18
Es posible juntarlos en una sola PAGINA, la documentacion refiere a una union de informe pero solo junta paginas de todos los reportes, es decir solo hace hojas consecutivas

ContraVeneno
22-03-2007, 03:05:24
No entiendo a que te refieres con una página.
¿Todo tiene que estar en una sola página?

El CompositeReport, une varios reportes haciéndolos parecer como uno solo, el usuario ni se entera de que son varios reportes.

No los pone en hojas separadas, no pone un PageHeader por cada reporte que agregues.

En fin, en realidad no entiendo bien a que te reiferes con que tiene que ser una sola hoja.

rolandoj
21-04-2007, 19:06:51
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.

luisgutierrezb
21-04-2007, 19:20:10
El composite Report te junta todo y va expandiendo las hojas segun se necesite, si cada reporte tiene 5 renglones y son 4 reportes te va a caber todo en una sola hoja, lo que si es que no puedes acomodar dentro de la hoja el reporte en cierta posicion, a lo mejor otra opcion de reporteo, o el printer.canvas no se raja jeje

jmoran
23-04-2007, 12:18:06
Hola, a mi se me ha dado ese caso varias veces y lo soluciono de las siguiente forma:
- El dataset principal del reporte es una query que solo me devuelve un registro, la banda detail la uso para poner títulos o datos del reporte.
- Añado un subdetail por cada tabla que quiero mostrar, configurando cada groupheader y foooter con nombre de columna y totales personalizados.
- En una banda summary al final pongo los totales de todo el reporte, sumatorios de cada tabla o lo que quiera.

Espero te sirva.

Monchi
23-04-2007, 17:55:42
Yo hago tal cual como dice jmoran y no tuve ningun problema hasta ahora, pongo mas de 6 subdetalles en algun que otro reporte, y anda muy bien. Solo hay que encontrarle la vuelta pero una vez que lo haces, anda bien.
Saludos!