PDA

Ver la Versión Completa : Ordenar relacion Master/Detail por otro campo!!


arieliten
23-06-2005, 06:57:50
Hola, estoy usando Delpgi 6 e Interbase 6 para mi aplicación y me he encontrado con el siguiente problema. Tengo 3 Tablas (IBTable) definidas como sigue:
1) Tabla Marcas (Id_Marca, Nombre, PideEnvase)
2) Tabla Productos (Id_Producto, Marca, Descripcion)
3) Tabla Productos_Detalle (Producto, Envase, Pr_Ctdo, Pr_CtaCte)
Con colores les marco que esas tablas estan vinculadas con un Foreign Key en esos campos.
Bueno, este diseño de tablas es para los productos de una pintureria donde almacenamos por ejemplo las distintas marcas de pinturas, luego los distintos productos y finalmente los precios de esos productos para cada envase en el que viene (1 lt, 4 lts, 10 lts, etc).
El problema es que quiero hacer un reporte (usando QReport) usando el método de relación Master/Detail y no logro que los productos me salgan ordenados por el envase.
Es decir, he logrado obtener un reporte agrupado por marcas primero y luego por articulos de esa marca con los distintos envases y precios en los que se encuentra ese articulo. Pero éste ultimo no aparece ordenado sino que aparece por ejemplo:

Colorama
Azul Metalizado
Envase Pr.Ctdo Pr.Cta.Cte
10 11,50 12,75
4 10,00 10,50
1 8,00 8,99
20 14,95 16,00
0,50 5,10 5,90


Como vemos aquí, puedo hacer que me aparezcan todos los productos de la marca Colorama por ejemplo, el "azul metalizado", pero a la hora de ordenarlos, quisiera que aparecieran ordenados por el tipo de envase desde el más pequeño al más grande y no en forma aleatoria como aparecen.
¿Es posible hacer algo así?
Creo que el problema está en que el indice activo para la tabla "Productos_Detalle" es el de Producto (ya que lo vincula a la tabla de ese nombre por su relacion Master/Detail) entonces no puedo activar otro indice (por ejemplo, envase) para que se ordenen.
Quise tratar de hacer esta relacion master detail pero más a mano y usando IBQuerys para filtrar y mostrar lo que yo quisiera pero me he encontrado que no puedo hacer relaciones Master/Detail con los Querys ya que no tengo la propiedad "Master Source" en ellos.

Bueno espero que hayan entendido un poco mi problema y que me puedan ayudar. Saludos.

Lepe
23-06-2005, 11:23:07
Con tablas planas si he conseguido hacerlo, con IB no lo he probado, pero intentalo:

Qryproductos:
select * from productos
order by idproducto

Añade un Datasource para esta consulta y llámale DTSqryProductos

QryProductos_Detalle:
En el object Inspector QryProductos_Detalle.Datasource := DTSqryProductos
Con esto cogerá los datos desde qryProductos.


select * from productos_detalle
where producto = :idproducto
order by Envase Asc;


En principio, como el parámetro que tiene qryProductos_Detalle tiene el mismo nombre que el campo de QryProductos, las 2 consultas quedan en relación Maestro-Detalle.

Repito, no sé si va a funcionar, pero menos dan las piedras.

Un saludo y suerte.

jachguate
23-06-2005, 17:11:43
Podes basarte en la propiedad IndexFieldNames, con al cadena 'Producto;Envase'.

Para que la relación maestro/detalle se mantenga es necesario que el orden inicie por producto, luego podes añadir tantos campos como te interese ordenar en el reporte.

Hasta luego.

;)

arieliten
24-06-2005, 14:54:21
Ok :D, muchas gracias por la ayuda muchachos!! :cool: