
Ayuda con tabla master detalle
#1
Escrito 08 noviembre 2011 - 12:48
yo quiero tener una tabla donde un registro tenga varios registro relacionado, me explico:
tengo tres tablas llamadas:
- Factura
- Cliente
- Articulos
tengo los campos en factura:
id Factura
No factura
id Cliente
id Articulos
en los campos de cliente:
id cliente
nombre
apellido
en los capos de articulos:
id articulos
nombre
cantidad
precio unit
precio total.
la relacion puse 1:M: Id articulos de articulos con el Id articulos de Factura.
y id cliente del cliente con id cliente de factura
Ahora yo quiero que un factura tenga varios articulos en un solo registro de factura.
estuve mirando la posibilidad de crear master detalle, pero la verdad morí en el intento, por tal razon vengo a pedirle ayuda.
#2
Escrito 08 noviembre 2011 - 01:07
Hola amigo en esta ocación necesito una ayuda con este problemita que tengo:
yo quiero tener una tabla donde un registro tenga varios registro relacionado, me explico:
tengo tres tablas llamadas:
- Factura
- Cliente
- Articulos
tengo los campos en factura:
id Factura
No factura
id Cliente
id Articulos
en los campos de cliente:
id cliente
nombre
apellido
en los capos de articulos:
id articulos
nombre
cantidad
precio unit
precio total.
la relacion puse 1:M: Id articulos de articulos con el Id articulos de Factura.
y id cliente del cliente con id cliente de factura
Ahora yo quiero que un factura tenga varios articulos en un solo registro de factura.
estuve mirando la posibilidad de crear master detalle, pero la verdad morí en el intento, por tal razon vengo a pedirle ayuda.
Si bien entiendo los clientes tienen facturas y las facturas articulos vendidos, por lo que tienes que modificar un poco tus tablas
la tabla de clientes esta bien
en los campos de cliente:
id cliente
nombre
apellido
pero la tabla de facturas no, debe de quedar
campos en factura:
id Factura
No factura
id Cliente (llave foranea)
pues aqui no necesitas el id_articulo
La tabla de articulos vendidos, necesitas el id_factura, para saber a que venta pertenecen
en los capos de articulos:
id articulos
nombre
cantidad
precio unit
precio total.
id_factura (llave foranea)

Tambien necesitaras una tabla para el catalogo de articulos
id_articulo
descripcion
precio_unit
A partir de aqui es relativamente facil hacer maestro detalle...
Saludos
#3
Escrito 08 noviembre 2011 - 01:22
#4
Escrito 08 noviembre 2011 - 01:41
cuando hablas de catalogo para la tabla no entiendo aque te refiere, es una tabla a parte? o como funcionaria esa tabla si es una tabla
Es una tabla donde deberás tener tus artículos con un id_articulo único (así como la de clientes), este tipo de tablas se les llama comunmente catálogos...
Esta tabla es distinta a la que tienes como artículos, la cual según te entiendo debería ser nombrada como 'artículos_vendidos' o 'detalle_art', pues son el detalle de una factura.

Saludos
PD no se de donde sacaste 'catálogos de tabla'.
#5
Escrito 08 noviembre 2011 - 01:50
#6
Escrito 08 noviembre 2011 - 02:07
ok yo tengo una tabla asi donde pongo los productos, otra cosa como hago para que estos datos aparescan en la tabla de articulos, con consulta llevando los datos unos edits y luego guardandolo en la tabla articulos. eso es que creo que debo hacer. que piensa?
Efectivamente estas en lo correcto, primero consultas de tus productos, seleccionas el articulo (el cual te da id,nombre y precio), permites que la cantidad en un edit sea modificable e insertas un registro nuevo en tu tabla articulos...
Saludos
#7
Escrito 08 noviembre 2011 - 02:29
#8
Escrito 08 noviembre 2011 - 02:47
entonces en el campo de la tabla articulos de la llave foranea ID_factura que que tendra ese campo a la hora de insertar los datos la tablas articulos. tengo tendido que ahy guardara el numero id de fatura. pero mi pregunta es lo guardaria automaticamente o yo tengo que hacer algun truco o jugada ahy?
Para el momento que estes insertando los artículos, debiste haber creado primero la factura, insertando un registro en la tabla de facturas y guardando en una variable el id_factura creada.
Así para que cada uno de los artículos insertados cuenten con el id_factura.
Una de las maneras de hacer facturas que utilizo lleva este proceso:
-Primero se selecciona el cliente al cual quieres hacer una factura (obtienes el id_cliente)
-Crea una factura con el id_cliente (la BD te debe de dar un secuencial de la tabla de facturas) y obtienes el id_factura
-Abres una ventana para llenar el detalle de la factura
-Vas llenando tu detalle de artículos vendidos y los insertas con el id_factura
-Finalmente muestras tu factura terminada lista para imprimir o mandar por correo, generar factura electrónica etc, etc
Este es un solo tipo de proceso pero existen multitud de ellos y dependen de la forma en que se realiza la venta, el comercio o empresa, inclusive la DB que estes usando, la forma en que obtienes los secuenciales, etc.
Saludos
#9
Escrito 08 noviembre 2011 - 03:22
#10
Escrito 08 noviembre 2011 - 08:40
#11
Escrito 08 noviembre 2011 - 08:57
una pregunta amigos el catalogo debe llevar una relaccion con los articulos?
Totalmente... te pongo un ejemplo con datos de lo que te menciona el amigo Cron:
Tabla Catalogo Articulos
Id_Articulo Nombre_Articulo Precio_Unitario
---------------------------------------------------------------
Art001 Shampoo 12.75
Art002 Crema humectante 34.50
Art003 Pasta dental 9.89
Art004 Jabón de manos 3.15
Tabla Detalle de Factura
Id_Factura Id_Articulo Cantidad Precio_Unitario Precio_Total
--------------------------------------------------------------------------------------------
Factura1 Art004 2 3.15 6.30
Factura1 Art001 10 12.75 127.50
Factura2 Art003 1 9.89 9.89
... y así sucesivamente, si te das cuenta amigo, el catálogo de artículos es el universo (hablando de conjuntos) de todos los artículos que pueden ser facturados, y el detalle de la factura, hace referencia a la tabla de catálogo pero únicamente de aquellos artículos que serán incluidos para cierta factura....
Espero te quede un poco más claro, si no, no dudes en continuar preguntando


Saludox !

#12
Escrito 09 noviembre 2011 - 08:42
#13
Escrito 09 noviembre 2011 - 08:55
select * from CatalogoArticulos order by id_articulo
Una vez que el usuario seleccione el artículo que anda buscando, tendrás que hacer otra consulta similar pero ahora trayéndote la información de ese artículo en particular...
select nombre_articulo, precio_unitario from CatalogoArticulos where id_articulo = 'XXXX'
Saludox !

#14
Escrito 09 noviembre 2011 - 10:23
no se si sea asi como debe estar eso, perdón por la ignorancia.
#15
Escrito 09 noviembre 2011 - 10:35

Saludox !

#16
Escrito 09 noviembre 2011 - 12:45
sera que yo tengo que guardar los datos de facturas primero para asi tener el codigo y luego proceder con los calogos?
#17
Escrito 09 noviembre 2011 - 05:18
Siempre, y porque así funciona la integridad referencial, para almacenar un registro en una tabla esclava o detalle se requiere que exista un registro con la correspondiente clave primaria en la tabla maestra.
No se puede guardar un detalle suelto, necesariamente ha de contar con un valor en la clave foránea que haga referencia a la clave primaria de la tabla a la que está referenciando.
Para el caso de una relación (M:M) naturalmente, para guardar en la tabla intermedia debe existir un registro en cada maestra.
Y en general, dada n tablas maestras para una tabla detalle, se requiere que exista n registros, uno por cada una de las tablas, para luego proceder con el detalle.
De allí en más, cualquier otro orden de cómo ha de guardarse la información es más una cuestión de diseño: organización, presentación y de lo que realmente se necesite en la aplicación.
Saludos,
#18
Escrito 14 noviembre 2011 - 08:37
ADOQUERY3.SQL.Text:='SELECT sum( [PRECIO TOTAL] + [COSTO TOTAL] + TOTAL ) AS suma from productos, materiales, servicios WHERE Id_facturacion LIKE ''%'+Edit29.Text+'%'''; ADOQUERY3.Active:=TRUE;
Bueno me explico:
Yo tengo una tabla llamada facturacion, y otras tres que son las Detalle llamadas productos, materiales, servicios.
pero tengo un problema que los datos me aparecen solo cuando tengo los tres registro en cada tabla, si una de la tabla detalle no tiene registro no me muestra nada en el edit precio total.
#19
Escrito 15 noviembre 2011 - 09:57
¿ Estas seguro que tu query funciona ?
ADOQUERY3.SQL.Text := ' SELECT sum( [PRECIO TOTAL] + [COSTO TOTAL] + TOTAL ) AS suma, ' + ' materiales, servicios FROM productos ' + ' WHERE Id_facturacion LIKE ''%'+Edit29.Text+'%''';
Por otro lado
[PRECIO TOTAL] y [COSTO TOTAL] ¿ son campos de tu base de datos ?
Salud OS
#20
Escrito 15 noviembre 2011 - 11:39
[PRECIO TOTAL] y [COSTO TOTAL] ¿ son campos de tu base de datos ?
son dos columnas de dos tablas diferentes