PDA

Ver la Versión Completa : Como Usar Master / Detail?


negrokau
10-07-2013, 15:24:31
Hola amigos... disculpen las molestias... tengo un inconveniente con unos detalles en el quick report, (ejemplo: tengo una factura con muchos detalles)... estuve buscando y lei mucho sobre master / detail que es lo que necesito, pero no lo puedo hacer funcionar, o no se si lo estoy haciendo bien, les agradeceria si me dan una ayuda de como funciona... uso delphi 7, quick report y query... gracias por su tiempo... un abrazo...

ElDioni
10-07-2013, 16:52:02
Hola,

no aclaras muy bien lo que has intentado hacer, donde tienes los inconvenientes.

De todas formas te pongo este enlace donde puede que te aclare algo de lo que necesitas.

http://www.clubdelphi.com/foros/showthread.php?t=49605

Saludos.

negrokau
10-07-2013, 17:04:19
gracias por contestar, la verdad, no me sale nada de lo que hago, es por eso que le pido el favor de enseñarme lo basico desde el comienzo de un master /detail... tengo 2 query, query1 para la cabecera y query2 los detalle... no logro hacer que me muestres la cabecera y debajo los detalles de esa cabecera, me muestra todos los detalles en la cabecera como tambien en los detalles...

ecfisa
10-07-2013, 17:33:51
Hola negrokau.

En este enlace: Master-detail relationships (http://delphi.about.com/od/database/l/aa071001a.htm), está explicado con detalle.

Por otro lado, ¿ Que motor de bd y que componentes estas usando ?

Saludos. :)

negrokau
10-07-2013, 18:00:44
gracias ecfisa, interbase como motor, delphi 7, quick report y query

ecfisa
10-07-2013, 18:02:47
Hola.
gracias ecfisa, interbase como motor, delphi 7, quick report y query
Correcto, ¿ El componente query es TIBQuery ?

Saludos. :)

negrokau
10-07-2013, 18:25:18
si, TIBQUERY....

ecfisa
10-07-2013, 18:30:39
Hola.

Ajusta las siguientes propiedades de los IBQuerys (reemplazando por los nombres de tus tablas y campos):

IBQueryMaster:

Database <- IBDatabase
SQL.Text <- 'SELECT * FROM TABLA_MASTER';
Transaction <- IBTransaction


IBQueryDetail:

Database <- IBDatabase
SQL.Text <- 'SELECT * FROM TABLA_DETALLE WHERE MASTER_ID = :ID';
DataSource <- dsMaster (DataSource asociado a IBQueryMaster)
Transaction <- IBTransaction


MASTER_ID = Nombre del campo referencia en TABLA_DETALLE
:ID = Nombre del campo clave en TABLA_MASTER


Saludos. :)

negrokau
12-07-2013, 21:56:46
y en los QRsubdetail como los configuro?

ecfisa
12-07-2013, 23:07:56
y en los QRsubdetail como los configuro?
Hola negrokau.

Revisa en este enlace: Quick Reports Tutorial (http://delphi.about.com/library/bluc/text/uc051701a.htm), buscá por: Sorting & Grouping.


Saludos. :)

negrokau
15-07-2013, 01:30:55
sabes, les comento que no puedo hacer funcionar el master / detail
para que esten mas informados sobre mi consulta es sobre el movimiento de gruas de una fecha a otra.

-uso 2 subdetail, subdetail1 para la cabecera y subdetail2 para el detalle.
-tambien 2 query, query1 para la cabecera y query2 para el detalle.

en el sql de query1 (cabecera) pongo la siguiente consulta:

select * from ORDEN_SALIDA WHERE ESTADO<>'ANULADO' AND GRUA2=:CON AND FECHA_LLEGADA between :FECHA1 AND :FECHA2 ORDER BY FECHA_LLEGADA


en el sql de query2 (detalle) pongo la siguiente consulta:

select * from DET_ORDEN_SALIDA WHERE COD_DET=:CON


-en el dataset del subdetail1 le asigno el query1 de la cabecera y en el dataset del subdetail2 le asigno el query2 del detalle.
-en la propiedad master del subdetail2 le asigno el subdetail1.
-en el evento afterprint del subdetail1 le asigno los parametros del query2


procedure TF_REPORTES.QRSubDetail1AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
begin
Query2.Close;
Query2.Params[0].Value:=Q_ORDENES1.FieldValues['COD_ORDEN'];
Query2.Open;
End;


-en el la propiedad dataset del reporte le asigno el query1 y en el evento StartPage asigno los parametros del query1.


procedure TF_REPORTES.QuickRep1StartPage(Sender: TCustomQuickRep);
begin
Query1.Close;
Query1.Params[0].Value:=F_REP_ORDEN.DBLookupComboBox1.Text;
Query1.Params[1].Value:=F_REP_ORDEN.MASKEDIT1.Text;
Query1.Params[2].Value:=F_REP_ORDEN.MASKEDIT2.Text;
Query1.Open;
end;


mi problema es que en el reporte genera las paginas sin parar....
me darian un consejo amigos.... xq ya intente todo lo que me indicaron pero hasta aca llegue...

negrokau
15-07-2013, 15:59:10
ya lo solucione, solo tenia que asignar los parametros del query1 en el boton imprmir del formulario y ahi ya deja de generar paginas de mas en el reporte.... espero que le sirva a otros...