Gracias por responder guillotmarc, creo que no explique lo suficiente.
El problema que tengo que resolver es el siguiente:
Estoy desarrollando una aplicación que maneja el control de inventarios de una empresa, resulta que el sistema debe costear las existencias de inventario utilizando el método del promedio ponderado.
Básicamente, las transacciones son entradas y salidas del almacén donde está la mercancia, para esto he tratado de resolver el problema usando una
tabla para las facturas de ventas (Salidas del almacén) y devoluciones de facturas de venta (Entrada del almacén)
y otra tabla para los documentos que tiene que ver con las compras de mencancía, estos son Entradas de almacén (Entradas del almacén)
y Devoluciones de compra (Salidas del almacén).
Para realizar el cálculo del costo promedio los transacciones se realizan así:
Código:
Fecha detalle |Entradas |Salidas |saldos |costo unit
cant|costo cant|costo cant| costo
-----------------------------------------------------------------------
20/10/03 "compra" 10 150,0000 0 0 10 150,000 15,000
21/10/03 "compra" 40 600,000 0 0 50 750,000 15,000
22/10/03 "venta " 0 0 30 450,000 20 300,000 15,000
23/10/03 "dev.comp" (5) (75,000) 0 0 15 225,000 15,000
22/10/03 "dev.venta" 0 0 (2) (30,000) 17 255,000 15,000
1.
En entradas: se registra la cantidad y el costo total de la compra o devolución de compra.
2.
En salidas: se registra la cantidad de mercancia vendida; y en la columna del costo el resultado de multiplicar la cantidad por el costo unitario del renglón anterior.
3.
En saldos: para obtener los valores de esta columna, a los valores del saldo anterior se le adicionan las entradas o se les disminuyen las salidas.
4.
Costo unitario: para obtener el costo unitario se toma la columna de saldo anterior y se divide el costo total entre la cantidad total de cada renglón.
El costo total varia siempre que se compra mercancía a precio diferente; cuando se registra la salida se mantiene el último costo unitario.
Las estructuras de las tablas de ventas y compras lucen más o menos así:
Código SQL
[-]
VENTA_DET
-------------
ID_ITEM
CANTIDAD
COSTO
TOTAL
COMPRA_DET
------------
ID_ITEM
CANTIDAD
COSTO
TOTAL
Lo que desea realizar con la vista es hacer el cálculo del costo promedio de forma automática,
debido a que si por algún motivo uno de los registros correspondiente a entradas es retirado no tenga que recorrer toda la tabla para recalcular el costo unitario y mucho menos el saldo.
Código SQL
[-]
CREATE VIEW ITEM_INVENTARIO_INFO
(
FECHA ID_ITEM,
CANTIDAD_ENTRADA,
COSTO_ENTRADA,
CANTIDAD_SALIDA,
COSTO_SALIDA,
CANTIDAD_SALDO,
COSTO_SALDO,
COSTO_UNITARIO) AS
SELECT C.FECHA,CD.ID_ITEM,CD.CANTIDAD,CD.COSTO,0.0,0.0,0.0,0.0,0.0
FROM COMPRA C INNER JOIN COMPRA_DET CD ON
(C.ID_EMPRESA=CD.ID_EMPRESA AND C.ID_SUCURSAL=CD.ID_SUCURSAL AND
C.ID_TIPO_DOC = CD.ID_TIPO_DOC AND C.NUMERO = CD.NUMERO)
UNION
SELECT C.FECHA,CD.ID_ITEM,0.0,0.0,CD.CANTIDAD,CD.COSTO,0.0,0.0,0.0
FROM VENTA C INNER JOIN VENTA_DET CD ON
(C.ID_EMPRESA=CD.ID_EMPRESA AND C.ID_SUCURSAL=CD.ID_SUCURSAL AND
C.ID_TIPO_DOC = CD.ID_TIPO_DOC AND C.NUMERO = CD.NUMERO);
Hasta ahora no conozco una forma de hacer una consulta SQL que me permita obtener el valor del costo unitario.
Por esta razon envio algunos campo de la vista en cero y posteriormente con el trigger deseaba poder modificar dichos campos.
Si no es posible hacer esto de que forma podría obtener este resultado?
Cómo hago para que me queden bien organizados los valores que tiene forma de tabla como en el ejemplo de arriba, la verdad intenté de varias formas y no logre que quedará organizado.
Saludos