Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como relacionar varias tablas a un dbgrid? (https://www.clubdelphi.com/foros/showthread.php?t=57960)

Pollo2004 03-07-2008 12:08:24

Como relacionar varias tablas a un dbgrid?
 
Hola! Creo q lo q pregunto no es posible pero la idea si, el tema es como.
Voy a ver si me puedo explicar.
Ej: Quisiera hacer un formulario de factura, en el cual el encabezado de la factura lo saco de un tabla CLIENTES, ahora empieza el problema, en algo (lo mas parecido q encontre a una factura estandar es un DBGRID, por lo menos visualmente) quiero cargar los datos del producto (q estan en una tabla llamada PRODUCTOS), poner la cantidad vendidad y q empiece a calcular, sub-total total y todo eso (y a esto quisiera guardarlo en una tabla de DETALLEDEFACTURA), y con estos datos, las relaciones y demas ir armando una tabla q se llama FACTURA!

Con los DBedit no tendria problemas, el tema es q uno nunca sabe cuanto puede vender y entonces usar dbedit seria un problema xq estria limitado a las ventas q yo le ponga en el diseño.

Gracias y un abrazo para toda la comunidad del foro!!!

tcp_ip_es 03-07-2008 12:25:24

Fijate que ahora estoy yo con un aplicativo para facturación y me cuesta entender lo que dices !!! :D

Te cuento como plantearía yo el diseño de datos (con los pocos datos que me has dado :) ) de esta forma; crearia las siguientes tablas:
  • Productos
  • Clientes
  • Facturas
  • Detalle Facturas

Lógicamente entre ellas definiría las claves foraneas para preservar la integridad referencial.

En la tabla Facturas iría la cabecera de tu factura, es decir, datos como Numero Factura, Cliente, Fecha, Importe Total....
y en la tabla Detalle Facturas metería las lineas de detalle que conforman tu factura (Numero linea, Producto, Cantidad, Moneda, Importe)

Con estas dos tablas crearía una relación maestro-detalle por el campo Numero de Factura, para luego según vas pasando de un registro a otro en la tabla Facturas, se te van seleccionando las lineas de detalle que contiene esa factura. Para mostrar los datos puedes utilizar dbcontrols o dbgrid a tu gusto.... incluso también puedes definir el maestro detalle de Clientes-Facturas para segun vas pasando por cada cliente vas viendo sus facturas y a su vez las lineas de detalle de estas...

No se yo lo veo sencillo :D

Saludos, Tony

Pollo2004 03-07-2008 12:39:14

Gracias!!!
 
Claaaaaro...eso es lo q queria, tal vez mi error esta en el diseño de las tablas.
Luego lo pruebo y te cuento!!! Gracias!

Pollo2004 05-07-2008 07:05:48

Otra vez!!!
 
Eh probado lo q tu me dice y esta bien, pero no es lo q yo queria, veamos si te lo puedo explicar de forma clara:
1) Yo tengo las mismas tablas q vos me mencionabas
2) Tengo un form en el cual tengo q usar las cuatros tablas, y otras cosas mas con las cuales voy a poder calcular, el total del importe a pagar y todo lo q haya q calcular.
Yo lo q busco es q poder relacionar, en algo parecido a un dbgrid (mas q nada por el formato muy parecido al de una factura en papel), las tres tablas (producto, factura y detalle), armar ese debegrid con los datos q salen de las tablas y a su vez poder ingresar la cantidad de productos q se venden para ir calculando los totales.
Espero ser un poco mas claro esta vez....Gracias por sus respeustas.

Fenareth 05-07-2008 13:38:14

Hola !

La opción que te da tcp_ip_es es bastante cercana (si no es que totalmente) a lo que pides...

En tu form define un área de "encabezado" usando tal vez TEdits o TDBEdits, como tu lo prefieras... ahí puedes designar todos los campos que irán guardados en tu Tabla de Facturas...

Aquí mismo ligas la tabla de Clientes, ¿cómo?, pues muy sencillo... si sales (o das Enter) de un TEdit donde haz colocado un valor que identifica a un Cliente, realiza una búsqueda en su tabla para traer sus datos por ejemplo de Nombre de la Empresa, Domicilio, Ciudad, País o que se yo qué más desees desplegar...

Para el caso del Detalle de la factura es cuando entra el DBGrid que mencionas... aquí puedes usar además de la Tabla de Detalle, la de Productos haciendo algo similar que en el caso de Clientes... si introduces algún código de producto, realiza una búsqueda en la tabla de Productos y trae información de ahí...

Espero que te sea de utilidad y mándanos más avances de lo que que ya hayas realizado (una imágen de tu formulario ya "armado" sería muy buena opción)... :)

Saludos,

Pollo2004 05-07-2008 16:00:42

Ok, pero sigo igual!!!
 
Gracias Fenareth por tu respuesta, el encabezado de la factura no hay drama, el problema esta, en q no se como en un mismo dbgrid usar dos tablas, en caso de q no se pueda hacer de este modo como lo harian ustedes?

Lo q yo intento hacer es algo parecido a esto:

Id Item Cod producto Cantidad Detalle Precio Unitario Precio
*** **** ** ********* $** $***

Asi quisiera q me quedara el DbGrid, por una cuestion visual, comodidad y por q nunca me va a quedar chica la factura, simpre voy a poder seguir agragando ventas (registros).
El problema es q los datos Id item, Cantidad y Precio los voy a almacenar en la tabla Detalle (otra cosita, la cantidad la voy a ingresar por teclado, se puede en el dbgrid), los datos Cod producto, detalle y precio unitario los voy a buscar en la tabla Productos y para terminar el Precio o el total, fecha y Num de factura de la factura lo voy a guardar en la tabla FACTURA.

Por ahi mi idea es mala, yo con DbEdits y Dbtext ya lo hice pero siempre voy a tener un limite de productos en mi factura, cosa q no quiero!

Gracias y perdon por todas las molestias!!!

Fenareth 05-07-2008 16:09:07

Pero es que entonces si veo que en tu explicación resuelves bien lo que necesitas, no sé porqué deseas ligar dos tablas al DBGrid... sigo sin comprender cuál es la idea o más bien, la intención que tienes de hacer eso ?...

Para qué ligar otra Tabla además de la de Detalle en el DBGrid ?, no lo entiendo porque en realidad no es necesario... :confused:

Creo que tu idea va porque aparte del código del producto (introducido por el usuario) te preguntas cómo jalará el DBGrid el resto de datos de ese producto contenidos en la Tabla de Productos, es así ?

Pollo2004 05-07-2008 18:30:00

Lo q yo quiero es NO tener un tope a la hora de poner productos en la factura, ese es mi problema! de ahi empiezan salir el resto.

megaredoxk 05-07-2008 22:01:17

tu tienes la razó Pollo2004
 
Pollo2004: Asi quisiera q me quedara el DbGrid, por una cuestion visual, comodidad.....:confused: tu mismo lo dices.

por q te complicas, si haciendo un DBGrid para los productos no vas a limitar la factura...al contrario..puedes ingresar cuantos miles de registros quieras, puedes hacer lo siguiente en el DBGrid.

Cod producto Cantidad Precio Unitario Subtotal ------tabla producto

y en una Label calculas el total con descuentos y todo-----tabla detalle

cliente, dir, tel-----tabla cliente

espero te sirva;)

tcp_ip_es 07-07-2008 09:21:49

Te voy a mostrar una imagen de lo que yo he hecho para que lo veas más claro, espero que hagas lo mismo con tu formulario y lo cuelgues aqui y asi lo vemos todos....

http://img58.imageshack.us/my.php?im...delhpi2ul0.jpg

En tu tabla facturas y por cada linea de detalle has de meter el código de producto, cantidad y precio, aunque tu tengas otra tabla maestra con productos. Luego en el dbgrid puedes mostrar lo que quieras, de hecho puedes hacer un tfield en tu tabla facturas que sea maestro-detalle con tu tabla productos con lo que tu en el dbgrid puedes ver el detalle del producto pero lo que estas grabando en el detalle factura es el código.....

Espero que esta vez si que nos hayas entendido ;)

Saludos, Tony y VIVA NADAL Y LA MADRE QUE LO PARIÓ :D

Paulao 07-07-2008 16:39:47

Mira hay dos formas de hacer esto: Una JOIN con las tablas y cargar en el Grid lo que tu quieres o usar un TcxGrid de la Developer Express. El TcxGrid es pago, unos 1000 Euros toda la suit. Lo que vi en su link, es una JOIN.


La franja horaria es GMT +2. Ahora son las 09:17:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi