git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES/tags/1.8.0@17 c93665c3-c93d-084d-9b98-7d5f4a9c3376
303 lines
7.7 KiB
SQL
303 lines
7.7 KiB
SQL
DROP VIEW V_INVENTARIO;
|
|
DROP VIEW V_INVENTARIO_AUX;
|
|
DROP VIEW V_INV_RESERVAS;
|
|
DROP VIEW V_INV_ENTRADAS_PENDIENTES;
|
|
DROP VIEW V_INV_STOCK;
|
|
DROP VIEW V_INV_STOCK_AUX;
|
|
DROP VIEW V_INV_SALIDAS;
|
|
DROP VIEW V_INV_SALIDAS_AUX;
|
|
DROP VIEW V_INV_SALIDAS_MOV;
|
|
DROP VIEW V_INV_SALIDAS_ALB;
|
|
DROP VIEW V_INV_ENTRADAS;
|
|
DROP VIEW V_INV_ENTRADAS_AUX;
|
|
DROP VIEW V_INV_ENTRADAS_MOV;
|
|
DROP VIEW V_INV_ENTRADAS_ALB;
|
|
DROP TABLE MOVIMIENTOS;
|
|
|
|
|
|
|
|
/* Tabla en la que guardaremos las salidas, entradas de articulos en los distintos almacenes (regularizaciones)*/
|
|
/* El campo tipo tendra una E (para entradas) y una S (para salidas)*/
|
|
|
|
CREATE TABLE MOVIMIENTOS (
|
|
ID TIPO_ID NOT NULL,
|
|
ID_ALMACEN TIPO_ID,
|
|
ID_ARTICULO TIPO_ID,
|
|
FECHA_MOVIMIENTO DATE,
|
|
TIPO VARCHAR(1),
|
|
CANTIDAD INTEGER,
|
|
CAUSA TIPO_CONCEPTO
|
|
);
|
|
ALTER TABLE MOVIMIENTOS ADD CONSTRAINT PK_MOVIMIENTOS PRIMARY KEY (ID);
|
|
ALTER TABLE MOVIMIENTOS ADD CONSTRAINT FK_MOVIMIENTOS FOREIGN KEY (ID_ARTICULO) REFERENCES ARTICULOS (ID);
|
|
ALTER TABLE MOVIMIENTOS ADD CONSTRAINT FK_MOVIMIENTOS2 FOREIGN KEY (ID_ALMACEN) REFERENCES ALMACENES (ID);
|
|
CREATE INDEX MOVIMIENTOS_IDX1 ON MOVIMIENTOS (TIPO);
|
|
|
|
|
|
|
|
/*Todas las entradas de articulos a partir de los albaranes de proveedor*/
|
|
/*No tendremos en cuenta los albaranes que no tengan un almacén destino, es decir que no se contabilizarán*/
|
|
/*aquellos albaranes que se manden directamente al cliente*/
|
|
|
|
CREATE VIEW V_INV_ENTRADAS_ALB(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
|
|
FROM V_ALB_PROV_DETALLES
|
|
WHERE (ID_ALMACEN IS NOT NULL)
|
|
GROUP BY ID_ALMACEN, ID_ARTICULO;
|
|
|
|
|
|
|
|
/*Todas las entradas de articulos a partir de los movimientos libres realizados por el usuario*/
|
|
|
|
CREATE VIEW V_INV_ENTRADAS_MOV(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
|
|
FROM MOVIMIENTOS
|
|
WHERE TIPO = 'E'
|
|
GROUP BY ID_ALMACEN, ID_ARTICULO;
|
|
|
|
|
|
|
|
/*Al igual que en las vistas de articulos de pedido de proveedor y cliente, es mucho más rápido y mejor para este*/
|
|
/*caso una unión y luego una agrupación que un FULL OUTER JOIN*/
|
|
|
|
CREATE VIEW V_INV_ENTRADAS_AUX(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD
|
|
FROM V_INV_ENTRADAS_ALB
|
|
UNION
|
|
SELECT ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD
|
|
FROM V_INV_ENTRADAS_MOV;
|
|
|
|
|
|
/*Todas las entradas en almacen, bien por albarán o por movimiento libre, a partir de la vista auxiliar anterior*/
|
|
|
|
CREATE VIEW V_INV_ENTRADAS(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
SUM(CANTIDAD) as CANTIDAD
|
|
FROM V_INV_ENTRADAS_AUX
|
|
|
|
GROUP BY ID_ALMACEN,
|
|
ID_ARTICULO;
|
|
|
|
|
|
|
|
/*Todas las salidas de articulos a partir de los albaranes de cliente*/
|
|
/*No tendremos en cuenta los albaranes que no tengan un almacén origen, es decir que no se contabilizarán*/
|
|
/*aquellos albaranes que se manden directamente al cliente sin pasar por almacén*/
|
|
/*Serán salidas en el momento que el albarán este enviado o servido, si esta pendiente estará reservado*/
|
|
|
|
CREATE VIEW V_INV_SALIDAS_ALB(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
|
|
FROM V_ALB_CLI_DETALLES
|
|
WHERE (ID_ALMACEN IS NOT NULL)
|
|
AND (SITUACION in ('ENVIADO', 'SERVIDO'))
|
|
GROUP BY ID_ALMACEN, ID_ARTICULO;
|
|
|
|
|
|
|
|
/*Todas las salidas de articulos a partir de los movimientos libres realizados por el usuario*/
|
|
|
|
CREATE VIEW V_INV_SALIDAS_MOV(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
|
|
FROM MOVIMIENTOS
|
|
WHERE TIPO = 'S'
|
|
GROUP BY ID_ALMACEN, ID_ARTICULO;
|
|
|
|
|
|
|
|
/*Al igual que en las vistas de articulos de pedido de proveedor y cliente, es mucho más rápido y mejor para este*/
|
|
/*caso una unión y luego una agrupación que un FULL OUTER JOIN*/
|
|
|
|
CREATE VIEW V_INV_SALIDAS_AUX(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD
|
|
FROM V_INV_SALIDAS_ALB
|
|
UNION
|
|
SELECT ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD
|
|
FROM V_INV_SALIDAS_MOV;
|
|
|
|
|
|
|
|
/*Todas las salidas de almacen, bien por albarán o por movimiento libre, a partir de la vista auxiliar anterior*/
|
|
|
|
CREATE VIEW V_INV_SALIDAS(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
SUM(CANTIDAD) as CANTIDAD
|
|
FROM V_INV_SALIDAS_AUX
|
|
|
|
GROUP BY ID_ALMACEN,
|
|
ID_ARTICULO;
|
|
|
|
|
|
|
|
/*Al igual que en las vistas de articulos de pedido de proveedor y cliente, es mucho más rápido y mejor para este*/
|
|
/*caso una unión y luego una agrupación que un FULL OUTER JOIN*/
|
|
|
|
CREATE VIEW V_INV_STOCK_AUX(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD_ENTRADA,
|
|
CANTIDAD_SALIDA)
|
|
AS
|
|
SELECT ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD as CANTIDAD_ENTRADA,
|
|
0 as CANTIDAD_SALIDA
|
|
FROM V_INV_ENTRADAS
|
|
UNION
|
|
SELECT ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
0 as CANTIDAD_ENTRADA,
|
|
CANTIDAD as CANTIDAD_SALIDA
|
|
FROM V_INV_SALIDAS;
|
|
|
|
|
|
/* Stock actual por articulo y almacén, calculado a partir de la vista auxiliar anterior*/
|
|
|
|
CREATE VIEW V_INV_STOCK(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
(SUM(CANTIDAD_ENTRADA) - SUM(CANTIDAD_SALIDA)) as CANTIDAD
|
|
FROM V_INV_STOCK_AUX
|
|
GROUP BY ID_ALMACEN,
|
|
ID_ARTICULO;
|
|
|
|
|
|
/*Todos los articulos pedidos a proveedor y que todavía no he recibido, y que tienen un almacén destino*/
|
|
|
|
CREATE VIEW V_INV_ENTRADAS_PENDIENTES(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD_PENDIENTE)
|
|
FROM V_PED_PROV_ARTICULOS
|
|
WHERE (ID_ALMACEN IS NOT NULL)
|
|
GROUP BY ID_ALMACEN, ID_ARTICULO;
|
|
|
|
|
|
|
|
/*Todos los articulos reservados en almacén para algún albarán (Pendiente))*/
|
|
|
|
CREATE VIEW V_INV_RESERVAS(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
CANTIDAD)
|
|
AS
|
|
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
|
|
FROM V_ALB_CLI_DETALLES
|
|
WHERE (ID_ALMACEN IS NOT NULL)
|
|
AND (SITUACION = 'PENDIENTE')
|
|
GROUP BY ID_ALMACEN, ID_ARTICULO;
|
|
|
|
|
|
/*Tomamos la misma filosofia que en los casos anteriores ya que los tiempos se reducen, que es una barbaridad*/
|
|
|
|
CREATE VIEW V_INVENTARIO_AUX(
|
|
ID_ALMACEN,
|
|
ID_ARTICULO,
|
|
STOCK,
|
|
RESERVA,
|
|
PENDIENTE_RECEPCION)
|
|
AS
|
|
SELECT ID_ALMACEN, ID_ARTICULO, CANTIDAD as STOCK, 0 as PENDIENTES, 0 as RESERVADAS
|
|
FROM V_INV_STOCK
|
|
UNION
|
|
SELECT ID_ALMACEN, ID_ARTICULO, 0 as STOCK, CANTIDAD as PENDIENTES, 0 AS RESERVADAS
|
|
FROM V_INV_ENTRADAS_PENDIENTES
|
|
UNION
|
|
SELECT ID_ALMACEN, ID_ARTICULO, 0 as STOCK, 0 as PENDIENTES, CANTIDAD AS RESERVADAS
|
|
FROM V_INV_RESERVAS;
|
|
|
|
|
|
|
|
/*Vista de inventario final OPTIMIZADISIMAAAA*/
|
|
|
|
CREATE VIEW V_INVENTARIO(
|
|
ID_ALMACEN,
|
|
ID_EMPRESA,
|
|
NOMBRE,
|
|
ID_ARTICULO,
|
|
REFERENCIA,
|
|
FAMILIA,
|
|
DESCRIPCION,
|
|
REFERENCIA_PROV,
|
|
STOCK,
|
|
RESERVA,
|
|
PENDIENTE_RECEPCION)
|
|
AS
|
|
SELECT ID_ALMACEN,
|
|
ALMACENES.ID_EMPRESA,
|
|
ALMACENES.NOMBRE,
|
|
ID_ARTICULO,
|
|
ARTICULOS.REFERENCIA,
|
|
ARTICULOS.FAMILIA,
|
|
ARTICULOS.DESCRIPCION,
|
|
ARTICULOS.REFERENCIA_PROV,
|
|
SUM(STOCK) as STOCK,
|
|
SUM(RESERVA) as RESERVA,
|
|
SUM(PENDIENTE_RECEPCION) as PENDIENTE_RECEPCION
|
|
|
|
FROM V_INVENTARIO_AUX
|
|
LEFT JOIN ARTICULOS
|
|
ON (ARTICULOS.ID = V_INVENTARIO_AUX.ID_ARTICULO)
|
|
LEFT JOIN ALMACENES
|
|
ON (ALMACENES.ID = V_INVENTARIO_AUX.ID_ALMACEN)
|
|
|
|
GROUP BY ID_ALMACEN,
|
|
ALMACENES.ID_EMPRESA,
|
|
ALMACENES.NOMBRE,
|
|
ID_ARTICULO,
|
|
ARTICULOS.REFERENCIA,
|
|
ARTICULOS.FAMILIA,
|
|
ARTICULOS.DESCRIPCION,
|
|
ARTICULOS.REFERENCIA_PROV;
|
|
|
|
|