PDA

Ver la Versión Completa : QReport problema con QRBand de tipo Page Footer


Gabo
03-08-2007, 14:09:39
Hola a todos, otra vez!

He comenzado a hacer algunos reportes con QReport (aclaro que programo en C++ Builder, pero me parecio que este era el mejor lugar para poner la pregunta) y me tope con un problema al intentar hacer un maestro-detalle...

Según he leído en guías y ayudas, debo usar las QRBand de tipo rbDetail y rbSubDetail, pero al intentar poner la QRBand de tipo rbPageFooter, esta se coloca entre el detalle y el subdetalle y no me deja moverla de posición. :confused: ¿Alguien sabe porqué?

Gracias a todos de antemano:)

ContraVeneno
03-08-2007, 16:19:25
¿para que utilizas la subdetail?

eduarcol
03-08-2007, 16:33:41
Acabo de probar y me quedo bien, estas seguro que la configuracion del BandType es correcta???

Gabo
03-08-2007, 16:44:08
¿para que utilizas la subdetail?

Gracias por tu respuesta... Pensaba que ahí se ponía el detalle... :D pero la guía que estaba consultando estaba bastante errada.

Me descargué la ayuda oficial del sitio www.qusoft.com (http://www.clubdelphi.com/foros/www.qusoft.com) y ahí dice que en realidad hay que usar el control QRSubDetail, en vez del QRBand de tipo rbSubDetail. ¿Estoy en lo cierto? Lo probaré ahora...


Ah! Lo de que me desordenaba las bandas... El control TQuickRep tiene una propiedad Bands para especificar las bandas, aunque sólo dispones de 6. Si agregas un QRBand de tipo distinto a alguna de esas 6, la pone al final...

Claro que a raíz de esto no entiendo que función cumple una QRBand de cualquiera de los otros tipos :confused:

Gabo
03-08-2007, 16:46:30
Acabo de probar y me quedo bien, estas seguro que la configuracion del BandType es correcta???

Parece que es por mezclar las bandas de la propiedad Bands del TQuickRep con un QRBand de tipo SubDetail..

eduarcol
03-08-2007, 17:00:30
a mi en la paleta de componentes me aparece un TqrSubDetail aparte de la qrBand, esa fue la que utilize y me funciono

Gabo
03-08-2007, 17:26:28
a mi en la paleta de componentes me aparece un TqrSubDetail aparte de la qrBand, esa fue la que utilize y me funciono


Sí, la verdad es que estaba bien equivocado con lo de la QrBand de tipo rbSubDetail.

He hecho lo siguiente:

1.- El control TQuickRep tiene una banda Detail y la propiedad Dataset tiene la consulta a la tabla que hace de maestra (IBQuery1).

2.- Agregué un TQRSubDetail, cuyo DataSet tiene la consulta a la tabla que hace de detalle (IBQuery2). La propiedad Master tiene el QuickRep1.

Con eso, me genera la iteración de los registros de la tabla detalle por cada registro de la tabla maestra.

El tema, claro es que yo necesito que me muestre en detalle sólo los registros relacionados al registro maestro.

eduarcol
03-08-2007, 17:49:46
si entendi no te esta trabajando bien, ahora en el afterscroll del maestro, programa para que se filtre por lo que tengas en el maestro

Gabo
03-08-2007, 18:21:00
Vale, lo probaré y ya te cuento...

Gabo
06-08-2007, 11:33:40
Hola, de nuevo,

perdón por no responder antes, pero no tengo internet en casa :(, asi que el fin de semana no pude escribir nada. Eso sí, aproveche para leerme el apartado de reportes de "La cara oculta..."

No termino de entenderlo todavía. Tanto el manual de Qusoft como el libro ya citado te explican que es tan fácil como que:

1.- Al componente TQuickRep le asignes en su propiedad DataSet la primera tabla (yo uso un IBQuery, pero supongo que es lo mismo).
2.- Al Componente TQRSubDetail le asignes en su propiedad DataSet la segunda tabla.
3.- Al componente TQRSubDetail le asignes en su propiedad Master el control TQuickRep y listo.

Pero lo único que se obtiene es que por cada registro de la tabla 1 te muestre todos los registros de la tabla 2.

si entendi no te esta trabajando bien, ahora en el afterscroll del maestro, programa para que se filtre por lo que tengas en el maestro

He probado esto también de la siguiente forma:

1.- A la sentencia SQL del IBQuery2 le he colocado que reciba como parámetro el codigo de su registro maestro.

2.- En el evento AfterScroll del IBQuery1 (maestro) le asigno al parámetro el codigo del registro maestro.

Lo que logro con esto, es que me muestre para todos los registros de la tabla maestra, los registros de la tabla detalle que corresponden al primer registro de la tabla maestra. Es como que el AfterScroll se quedara pegado en el primer registro...

¿Alguna idea sobre que estoy haciendo mal?
Gracias por las respuestas que ya me han dado y también por las sugerencias que me puedan dar.

eduarcol
06-08-2007, 14:00:40
q posibilidades hay que para el reporte en lugar de utilizar ibQuery utilizes ibTable, asi puedes jugar con la propiedad mastersource es la solucion a lo qe buscas

Gabo
06-08-2007, 16:02:37
Todas las posibilidades.... :rolleyes:

Lo voy a probar, ya que creo que de la otra manera no capta la relación de las tablas.

eduarcol
06-08-2007, 16:10:01
prueba y cualquier cosa avisas

Gabo
06-08-2007, 18:50:13
Ha costado pero ha salido...

Aquí les detallo los pasos que he seguido para lograrlo:

1.- Inserté el objeto TQuickRep en el formulario. En mi caso, he puesto en True las propiedades Bands-HasDetail, Bands-HasPageFooter y Bands-HasPageHeader, asi que tenía tres bandas el reporte.

2.- Inserté un componente IBTable al que le indiqué las propiedades Database, TableName e IndexName (apuntando al tabla maestra).

3.- Luego, inserté un componente TQRGroup y uno TQRBand para crear un grupo. El primero de estos componentes, que hace de encabezado del grupo, tiene una propiedad llamada FooterBand para indicarle la banda que hace de pie del grupo, en éste caso la TQRBand.

4.- Inserté un TDataSource cuya propiedad Dataset la enlacé con el componente IBTable.

5.- Inserté un nuevo IBTable para la tabla detalle. Le indiqué las propiedades Database, TableName como en el caso anterior, pero no el IndexName. Además, la propiedad MasterSource la enlacé al DataSource y en las propiedades IndexFieldNames y MasterFields puse el campo que hace de clave primaria en la tabla maestra. La Propiedad StoreDefs no supe en qué momento cambió a True, pero estaba en True en vez de False como en el IBTable de la tabla maestra.

6.- Inserté un componente TQRSubDetail con la propiedad Dataset enlazada al IBTable de la tabla detalle.

7.- Finalmente, inserté los TQRLabel para las etiquetas y los TQRDBText para los datos, que se enlazan a los datos mediante la propiedad Dataset para indicar el IBTable respectivo y la propiedad DataField para el campo de la tabla. Por supuesto, los datos del maestro se colocan en la banda de tipo rbDetail, mientras que los del detalle en la TQRSubDetail.

¡¡¡Gracias a eduarcol y a ContraVeneno por la ayuda prestada!!!
Me han servido mucho para aclarar las ideas y conceptos que estaba confundiendo...:)