Ver Mensaje Individual
  #4 (permalink)  
Antiguo 31/05/2013, 12:38
Gedeon
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 20 años, 9 meses
Puntos: 3
Respuesta: Vista de compras y articulos

vale, ya veo que por donde yo iba no estaba bien, pero aún así tengo algunas cosas que objetar.

El punto 1 dice esto
Cita:
1.- El monto total de cada una de las compras y esto se haría a través del precio * cantidad de cada uno de los artículos de la compra; osea la relación es: una compra tiene muchos artículos (una relación de uno a muchos) y de los artículos es de donde obtengo el monto total de la comp
El monto total de la compra efectivamente es la suma del monto de compra de cada uno de los artículos, pero el error es que esa cantidad es un dato de la factura. Comprendo que no te interesa una gestión de facturas propiamente dicha, pero la tabla donde almacenas eso es una tabla de facturas en la que además de campos que no te interesan como cliente, fecha y número de factura debería estar el monto total de la factura y la forma de pago.

Y si consideramos que es primera tabla es de facturas, la segunda es el detalle de facturas y aquí lo que tienes es una relación de los artículos que están incluidos en esa factura con sus precios correspondientes y cualquier otro dato que necesites.

Si además quieres que se hagan varios pagos por factura (por ejemplo mensualmente) entonces necesitas también una tabla de pagos. Mas o menos sería esto

tabla facturas

id (key principal), ImporteTotal, FormaDePago,ImportePagado, ImportePendiente... [etc]
donde etc son campos que en un caso real deberían estar como numero de factura, fecha, id_cliente, etc pero que ahora no te interesan.

Tabla detalle

id (key principal), idArticulo,cantidad,precio,Importe,IdFactura
El idfactura sería la FK del id de facturas y lo utilizarías para relacionar facturas con detalle uno a muchos. Importe es cantidad * precio

tabla pagos
id (key principal), fecha, importe,IdFactura
El IdFActura sería la FK del id de facturas y lo utilizarías para relacionar facturas con pagos uno a muchos.

De esta forma en facturas, Importe es la suma de los (muchos) importes de detalle y pagado es la suma de los (muchos) importes de pagos. Lo que le queda por pagar sería ImporteTotal-ImportePagado.

Creo que esto se aproxima mas a lo que buscas.

La forma de calcular el ImporteTotal, lo pagado y lo pendiente sería
Código:
update facturas F 
   set Importetotal=(   select (sum(Importe) as I from Detalle 
                                where IdFactura=F.id),
   set ImportePagado=(   select (sum(Importe) as J from Pagos 
                                where IdFactura=F.id),
   set ImportePendiente=ImporteTotal-ImportePagado
   where factura='xxx'
donde xxx sería la factura que quieres calcular su importe y lo pagado.

Para sacar la factura con sus importes y articulos
[CODE]select F.x,D.* from factura F
inner join Detalle D on D.IdFactura=F.Id
where Factura='xxx'{/CODE]

Y para sacar los pagos de la factura sería así
[CODE]select F.*,P.* from factura F
inner join Pagos P on P.IdFactura=F.Id
where Factura='xxx'{/CODE]

Última edición por Gedeon; 31/05/2013 a las 12:48