DROP VIEW V_INF_VENTAS_ALB_ARTICULOS; DROP VIEW V_INF_VENTAS_ARTICULOS; DROP VIEW V_INF_ULTVEN_PORCLIENTE; DROP VIEW V_INF_ULTVEN_PORARTICULO; DROP VIEW V_INF_FEC_ULTVEN_PORCLIENTE; DROP VIEW V_INF_FEC_ULTVEN_PORARTICULO; DROP VIEW V_INF_ULTCOM_PORARTICULO; DROP VIEW V_INF_ULTCOM; DROP VIEW V_INF_FEC_ULTCOM; /* **********************************************************************/ /* INFORMES *************************************************************/ /* **********************************************************************/ CREATE VIEW V_INF_FEC_ULTCOM( ID_EMPRESA, ID_ARTICULO, FECHA) AS select facturas_proveedor.ID_EMPRESA, facturas_proveedor_detalles.ID_ARTICULO, max(facturas_proveedor.FECHA_FACTURA) from facturas_proveedor_detalles left join facturas_proveedor on (facturas_proveedor.id = facturas_proveedor_detalles.id_factura) WHERE (ID_ARTICULO IS NOT NULL) AND (ID_ARTICULO > 0) and (facturas_proveedor_detalles.cantidad > 0) group by facturas_proveedor.ID_EMPRESA, facturas_proveedor_detalles.ID_ARTICULO ; CREATE VIEW V_INF_ULTCOM( ID_EMPRESA, ID_ARTICULO, FECHA, IMPORTE_UNIDAD_COMPRA, IMPORTE_NETO_COMPRA, IMPORTE_PORTE_COMPRA) AS select id_empresa, id_articulo, fecha_factura, sum(IMPORTE_UNIDAD_COMPRA) as importe_unidad, sum(IMPORTE_NETO_COMPRA) as importe_neto_compra, sum(IMPORTE_PORTE_COMPRA) as importe_porte_compra from ( /*Se hace agrupación de articulos de los detalles de la factura por si se compra el mismo articulo en distintas lineas con distinto precio por ello se hace la media*/ select facturas_proveedor.id_empresa, facturas_proveedor_detalles.ID_ARTICULO, 0 as ult_com, facturas_proveedor.fecha_factura, avg(facturas_proveedor_detalles.IMPORTE_UNIDAD) as IMPORTE_UNIDAD_COMPRA, avg(facturas_proveedor_detalles.IMPORTE_UNIDAD - (facturas_proveedor_detalles.IMPORTE_UNIDAD * (facturas_proveedor_detalles.DESCUENTO / 100))) AS IMPORTE_NETO_COMPRA, avg(facturas_proveedor_detalles.IMPORTE_PORTE) as IMPORTE_PORTE_COMPRA from facturas_proveedor_detalles left outer join facturas_proveedor on (facturas_proveedor.id = facturas_proveedor_detalles.id_factura) WHERE (facturas_proveedor_detalles.ID_ARTICULO IS NOT NULL) AND (facturas_proveedor_detalles.ID_ARTICULO > 0) /*Quitamos conceptos libres*/ and (facturas_proveedor_detalles.cantidad > 0) /*Quitamos los abonos*/ group by 1,2,3,4 union /*Se hace la unión con la vista de fecha de ultima compra de cada articulo y empresa poniendo un parametro a 1 para cuando se agrupen saber que es la última compra*/ /*todo articulo tendrá ultima compra ya que tiramos de facturas de proveedor*/ select v_inf_fec_ultcom.id_empresa, v_inf_fec_ultcom.id_articulo, 1, v_inf_fec_ultcom.fecha, 0,0,0 from v_inf_fec_ultcom ) /*finalmente se hace la grupacion de la unión y se suma para el tema del parametro de ultima compra, quitamos las compras de articulos con parametro 0 ya que son compras antiguas*/ group by 1,2,3 having (sum(ult_com)=1); CREATE VIEW V_INF_ULTCOM_PORARTICULO( ID_EMPRESA, ID_ARTICULO, IMPORTE_UNIDAD_COMPRA, IMPORTE_NETO_COMPRA, IMPORTE_PORTE_COMPRA) AS select v_inf_ultcom.id_empresa, articulos.id, coalesce(v_inf_ultcom.importe_unidad_compra, articulos.precio_coste), coalesce(v_inf_ultcom.importe_neto_compra, articulos.precio_neto), coalesce(v_inf_ultcom.importe_porte_compra, articulos.precio_porte) from articulos left join v_inf_ultcom on /*((v_inf_ultcom.id_empresa = articulos.id_empresa) and*/ (v_inf_ultcom.id_articulo = articulos.id) ; CREATE VIEW V_INF_FEC_ULTVEN_PORARTICULO( ID_EMPRESA, ID_ARTICULO, FECHA) AS select facturas_cliente.ID_EMPRESA, facturas_cliente_detalles.ID_ARTICULO, max(facturas_cliente.FECHA_FACTURA) from facturas_cliente_detalles left join facturas_cliente on (facturas_cliente.id = facturas_cliente_detalles.id_factura) WHERE (ID_ARTICULO IS NOT NULL) AND (ID_ARTICULO > 0) and (facturas_cliente_detalles.cantidad > 0) group by facturas_cliente.ID_EMPRESA, facturas_cliente_detalles.ID_ARTICULO ; CREATE VIEW V_INF_FEC_ULTVEN_PORCLIENTE( ID_EMPRESA, ID_CLIENTE, ID_ARTICULO, FECHA) AS select facturas_cliente.ID_EMPRESA, facturas_cliente.ID_CLIENTE, facturas_cliente_detalles.ID_ARTICULO, max(facturas_cliente.FECHA_FACTURA) from facturas_cliente_detalles left join facturas_cliente on (facturas_cliente.id = facturas_cliente_detalles.id_factura) WHERE (ID_ARTICULO IS NOT NULL) AND (ID_ARTICULO > 0) and (facturas_cliente_detalles.cantidad > 0) group by facturas_cliente.ID_EMPRESA, facturas_cliente.ID_CLIENTE, facturas_cliente_detalles.ID_ARTICULO ; CREATE VIEW V_INF_ULTVEN_PORARTICULO( ID_EMPRESA, ID_ARTICULO, IMPORTE_UNIDAD_VENTA, IMPORTE_NETO_VENTA, IMPORTE_PORTE_VENTA) AS select facturas_cliente.id_empresa, facturas_cliente_detalles.ID_ARTICULO, avg(facturas_cliente_detalles.IMPORTE_UNIDAD) as IMPORTE_UNIDAD_VENTA, avg(facturas_cliente_detalles.IMPORTE_UNIDAD - (facturas_cliente_detalles.IMPORTE_UNIDAD * (facturas_cliente_detalles.DESCUENTO / 100))) AS IMPORTE_NETO_VENTA, avg(facturas_cliente_detalles.IMPORTE_PORTE) as IMPORTE_PORTE_VENTA from facturas_cliente_detalles inner join facturas_cliente on (facturas_cliente.id = facturas_cliente_detalles.id_factura) inner join v_inf_fec_ultven_PORARTICULO on (v_inf_fec_ultven_PORARTICULO.id_empresa = facturas_cliente.id_empresa) and (v_inf_fec_ultven_PORARTICULO.id_articulo = facturas_cliente_detalles.id_articulo) WHERE (facturas_cliente_detalles.ID_ARTICULO IS NOT NULL) AND (facturas_cliente_detalles.ID_ARTICULO > 0) /*Quitamos conceptos libres*/ and (facturas_cliente_detalles.cantidad > 0) /*Quitamos los abonos*/ and (facturas_cliente.FECHA_FACTURA = v_inf_fec_ultven_PORARTICULO.fecha) /*nos quedamos con las ultimas compras*/ group by 1, 2 ; CREATE VIEW V_INF_ULTVEN_PORCLIENTE( ID_EMPRESA, ID_CLIENTE, ID_ARTICULO, IMPORTE_UNIDAD_VENTA, IMPORTE_NETO_VENTA, IMPORTE_PORTE_VENTA) AS select facturas_cliente.id_empresa, facturas_cliente.id_cliente, facturas_cliente_detalles.ID_ARTICULO, avg(facturas_cliente_detalles.IMPORTE_UNIDAD) as IMPORTE_UNIDAD_VENTA, avg(facturas_cliente_detalles.IMPORTE_UNIDAD - (facturas_cliente_detalles.IMPORTE_UNIDAD * (facturas_cliente_detalles.DESCUENTO / 100))) AS IMPORTE_NETO_VENTA, avg(facturas_cliente_detalles.IMPORTE_PORTE) as IMPORTE_PORTE_VENTA from facturas_cliente_detalles inner join facturas_cliente on (facturas_cliente.id = facturas_cliente_detalles.id_factura) inner join v_inf_fec_ultven_porcliente on (v_inf_fec_ultven_porcliente.id_empresa = facturas_cliente.id_empresa) and (v_inf_fec_ultven_porcliente.id_cliente = facturas_cliente.id_cliente) and (v_inf_fec_ultven_porcliente.id_articulo = facturas_cliente_detalles.id_articulo) WHERE (facturas_cliente_detalles.ID_ARTICULO IS NOT NULL) AND (facturas_cliente_detalles.ID_ARTICULO > 0) /*Quitamos conceptos libres*/ and (facturas_cliente_detalles.cantidad > 0) /*Quitamos los abonos*/ and (facturas_cliente.FECHA_FACTURA = v_inf_fec_ultven_porcliente.fecha) /*nos quedamos con las ultimas compras*/ group by 1, 2, 3 ; /* Al igual que en Varela tendremos esta vista para hacer todos los informes que queramos de ventas, ya que estará desglosado por artículo */ CREATE VIEW V_INF_VENTAS_ARTICULOS( ID_FACTURA, ID_EMPRESA, REFERENCIA_FACTURA, FECHA_FACTURA, IMPORTE_TOTAL_FACTURA, ID_COMISION_FACTURA, ID_ARTICULO, FAMILIA, REFERENCIA, REFERENCIA_PROV, DESCRIPCION, COMISIONABLE, INVENTARIABLE, IMPORTE_UNIDAD_COSTE, DESCUENTO_PROVEEDOR_COSTE, IMPORTE_NETO_COSTE, IMPORTE_PORTE_COSTE, CANTIDAD, IMPORTE_UNIDAD_VENTA, DESCUENTO_CLIENTE_VENTA, IMPORTE_NETO_VENTA, IMPORTE_PORTE_VENTA, IMPORTE_TOTAL_VENTA, NIF_CIF_PROVEEDOR, NOMBRE_PROVEEDOR, CALLE_PROVEEDOR, POBLACION_PROVEEDOR, PROVINCIA_PROVEEDOR, NIF_CIF_CLIENTE, NOMBRE_CLIENTE, NOMBRE_COMERCIAL_CLIENTE, CALLE_CLIENTE, POBLACION_CLIENTE, PROVINCIA_CLIENTE, NIF_CIF_AGENTE, NOMBRE_AGENTE, CALLE_AGENTE, POBLACION_AGENTE, PROVINCIA_AGENTE, COMISION_AGENTE, IMPORTE_COMISION_AGENTE) AS select FACTURAS_CLIENTE.ID, FACTURAS_CLIENTE.ID_EMPRESA, FACTURAS_CLIENTE.REFERENCIA, FACTURAS_CLIENTE.FECHA_FACTURA, FACTURAS_CLIENTE.IMPORTE_TOTAL, FACTURAS_CLIENTE.ID_COMISION_LIQUIDADA, FACTURAS_CLIENTE_DETALLES.ID_ARTICULO, ARTICULOS.FAMILIA, ARTICULOS.REFERENCIA, ARTICULOS.REFERENCIA_PROV, ARTICULOS.DESCRIPCION, ARTICULOS.COMISIONABLE, ARTICULOS.INVENTARIABLE, ARTICULOS.PRECIO_COSTE, ARTICULOS.DESCUENTO, ARTICULOS.PRECIO_NETO, ARTICULOS.PRECIO_PORTE, FACTURAS_CLIENTE_DETALLES.CANTIDAD, FACTURAS_CLIENTE_DETALLES.IMPORTE_UNIDAD as importe_unidad_venta, FACTURAS_CLIENTE_DETALLES.DESCUENTO, case when FACTURAS_CLIENTE_DETALLES.CANTIDAD < 0 then /*En caso de ser un abono el importe neto venta debe ser negativo para que los informes no salgan falseados*/ (-1)*(FACTURAS_CLIENTE_DETALLES.IMPORTE_UNIDAD - (FACTURAS_CLIENTE_DETALLES.IMPORTE_UNIDAD * (FACTURAS_CLIENTE_DETALLES.DESCUENTO/100))) else FACTURAS_CLIENTE_DETALLES.IMPORTE_UNIDAD - (FACTURAS_CLIENTE_DETALLES.IMPORTE_UNIDAD * (FACTURAS_CLIENTE_DETALLES.DESCUENTO/100)) end as importe_neto_venta, FACTURAS_CLIENTE_DETALLES.IMPORTE_PORTE as importe_porte_venta, FACTURAS_CLIENTE_DETALLES.IMPORTE_TOTAL, PROVEEDORES.NIF_CIF, PROVEEDORES.NOMBRE, PROVEEDORES.CALLE, PROVEEDORES.POBLACION, PROVEEDORES.PROVINCIA, CLIENTES.NIF_CIF, CLIENTES.NOMBRE, CLIENTES_DATOS.NOMBRE_COMERCIAL, CLIENTES.CALLE, CLIENTES.POBLACION, CLIENTES.PROVINCIA, AGENTES.NIF_CIF, AGENTES.NOMBRE, AGENTES.CALLE, AGENTES.POBLACION, AGENTES.PROVINCIA, COALESCE(AGENTES_COMISIONES.COMISION, 0) AS COMISION, (CASE COALESCE(AGENTES_COMISIONES.COMISION, 0) WHEN 0 THEN 0 ELSE ((FACTURAS_CLIENTE_DETALLES.IMPORTE_TOTAL * AGENTES_COMISIONES.COMISION)/100) END) as IMPORTE_COMISION from FACTURAS_CLIENTE_DETALLES left join ARTICULOS on (ARTICULOS.ID = FACTURAS_CLIENTE_DETALLES.ID_ARTICULO) left join CONTACTOS PROVEEDORES on (PROVEEDORES.ID = ARTICULOS.ID_PROVEEDOR) left join FACTURAS_CLIENTE on (FACTURAS_CLIENTE.ID = FACTURAS_CLIENTE_DETALLES.ID_FACTURA) left join CONTACTOS CLIENTES on (CLIENTES.ID = FACTURAS_CLIENTE.ID_CLIENTE) left join CLIENTES_DATOS on (CLIENTES_DATOS.ID_CLIENTE = CLIENTES.ID) left join CONTACTOS AGENTES on (AGENTES.ID = CLIENTES_DATOS.ID_AGENTE) left join AGENTES_COMISIONES on ((AGENTES_COMISIONES.ID_AGENTE = AGENTES.ID) and (AGENTES_COMISIONES.ID_PROVEEDOR = PROVEEDORES.ID)) where (FACTURAS_CLIENTE_DETALLES.ID_ARTICULO is not null) and (FACTURAS_CLIENTE_DETALLES.ID_ARTICULO > 0) /*Quitamos conceptos libres*/ /*and (FACTURAS_CLIENTE_DETALLES.cantidad > 0) Quitamos los abonos*/ and (ARTICULOS.INVENTARIABLE = 1); CREATE VIEW V_INF_VENTAS_ALB_ARTICULOS( ID_ALBARAN, ID_EMPRESA, REFERENCIA_ALBARAN, FECHA_ALBARAN, IMPORTE_TOTAL_ALBARAN, ID_ARTICULO, FAMILIA, REFERENCIA, REFERENCIA_PROV, DESCRIPCION, COMISIONABLE, INVENTARIABLE, IMPORTE_UNIDAD_COSTE, DESCUENTO_PROVEEDOR_COSTE, IMPORTE_NETO_COSTE, IMPORTE_PORTE_COSTE, CANTIDAD, IMPORTE_UNIDAD_VENTA, DESCUENTO_CLIENTE_VENTA, IMPORTE_NETO_VENTA, IMPORTE_PORTE_VENTA, IMPORTE_TOTAL_VENTA, NIF_CIF_PROVEEDOR, NOMBRE_PROVEEDOR, CALLE_PROVEEDOR, POBLACION_PROVEEDOR, PROVINCIA_PROVEEDOR, NIF_CIF_CLIENTE, NOMBRE_CLIENTE, NOMBRE_COMERCIAL_CLIENTE, CALLE_CLIENTE, POBLACION_CLIENTE, PROVINCIA_CLIENTE, NIF_CIF_AGENTE, NOMBRE_AGENTE, CALLE_AGENTE, POBLACION_AGENTE, PROVINCIA_AGENTE, COMISION_AGENTE, IMPORTE_COMISION_AGENTE) AS select albaranes_cliente.ID, albaranes_cliente.ID_EMPRESA, albaranes_cliente.REFERENCIA, albaranes_cliente.FECHA_ALBARAN, albaranes_cliente.IMPORTE_TOTAL, ALBARANES_CLIENTE_DETALLES.ID_ARTICULO, ARTICULOS.FAMILIA, ARTICULOS.REFERENCIA, ARTICULOS.REFERENCIA_PROV, ARTICULOS.DESCRIPCION, ARTICULOS.COMISIONABLE, ARTICULOS.INVENTARIABLE, ARTICULOS.PRECIO_COSTE, ARTICULOS.DESCUENTO, ARTICULOS.PRECIO_NETO, ARTICULOS.PRECIO_PORTE, ALBARANES_CLIENTE_DETALLES.CANTIDAD, ALBARANES_CLIENTE_DETALLES.IMPORTE_UNIDAD as importe_unidad_venta, ALBARANES_CLIENTE_DETALLES.DESCUENTO, case when ALBARANES_CLIENTE_DETALLES.CANTIDAD < 0 then /*En caso de ser un abono el importe neto venta debe ser negativo para que los informes no salgan falseados*/ (-1)*(ALBARANES_CLIENTE_DETALLES.IMPORTE_UNIDAD - (ALBARANES_CLIENTE_DETALLES.IMPORTE_UNIDAD * (ALBARANES_CLIENTE_DETALLES.DESCUENTO/100))) else ALBARANES_CLIENTE_DETALLES.IMPORTE_UNIDAD - (ALBARANES_CLIENTE_DETALLES.IMPORTE_UNIDAD * (ALBARANES_CLIENTE_DETALLES.DESCUENTO/100)) end as importe_neto_venta, ALBARANES_CLIENTE_DETALLES.IMPORTE_PORTE as importe_porte_venta, ALBARANES_CLIENTE_DETALLES.IMPORTE_TOTAL, PROVEEDORES.NIF_CIF, PROVEEDORES.NOMBRE, PROVEEDORES.CALLE, PROVEEDORES.POBLACION, PROVEEDORES.PROVINCIA, CLIENTES.NIF_CIF, CLIENTES.NOMBRE, CLIENTES_DATOS.NOMBRE_COMERCIAL, CLIENTES.CALLE, CLIENTES.POBLACION, CLIENTES.PROVINCIA, AGENTES.NIF_CIF, AGENTES.NOMBRE, AGENTES.CALLE, AGENTES.POBLACION, AGENTES.PROVINCIA, COALESCE(AGENTES_COMISIONES.COMISION, 0) AS COMISION, (CASE COALESCE(AGENTES_COMISIONES.COMISION, 0) WHEN 0 THEN 0 ELSE ((ALBARANES_CLIENTE_DETALLES.IMPORTE_TOTAL * AGENTES_COMISIONES.COMISION)/100) END) as IMPORTE_COMISION from ALBARANES_CLIENTE_DETALLES left join ARTICULOS on (ARTICULOS.ID = ALBARANES_CLIENTE_DETALLES.ID_ARTICULO) left join CONTACTOS PROVEEDORES on (PROVEEDORES.ID = ARTICULOS.ID_PROVEEDOR) left join ALBARANES_CLIENTE on (ALBARANES_CLIENTE.ID = ALBARANES_CLIENTE_DETALLES.ID_ALBARAN) left join CONTACTOS CLIENTES on (CLIENTES.ID = ALBARANES_CLIENTE.ID_CLIENTE) left join CLIENTES_DATOS on (CLIENTES_DATOS.ID_CLIENTE = CLIENTES.ID) left join CONTACTOS AGENTES on (AGENTES.ID = CLIENTES_DATOS.ID_AGENTE) left join AGENTES_COMISIONES on ((AGENTES_COMISIONES.ID_AGENTE = AGENTES.ID) and (AGENTES_COMISIONES.ID_PROVEEDOR = PROVEEDORES.ID)) where (ALBARANES_CLIENTE_DETALLES.ID_ARTICULO is not null) and (ALBARANES_CLIENTE_DETALLES.ID_ARTICULO > 0) /*Quitamos conceptos libres*/ /*and (FACTURAS_CLIENTE_DETALLES.cantidad > 0) Quitamos los abonos*/ and (ARTICULOS.INVENTARIABLE = 1) ; CREATE VIEW V_ETIQUETAS_ART_ALB( ID, ID_ALBARAN, REFERENCIA_ALBARAN, FECHA_PREVISTA_ENVIO, REFERENCIA_CLIENTE, POSICION, TIPO_DETALLE, REFERENCIA, CONCEPTO, CANTIDAD, IMPORTE_UNIDAD, DESCUENTO, IMPORTE_TOTAL, REFERENCIA_PROVEEDOR) AS SELECT DET.ID, DET.ID_ALBARAN, ALBARANES_CLIENTE.REFERENCIA, ALBARANES_CLIENTE.FECHA_PREVISTA_ENVIO, ALBARANES_CLIENTE.REFERENCIA_CLIENTE, DET.POSICION, DET.TIPO_DETALLE, ARTICULOS.REFERENCIA, F_RTFTOTEXT(DET.CONCEPTO) as CONCEPTO, DET.CANTIDAD, DET.IMPORTE_UNIDAD, DET.DESCUENTO, DET.IMPORTE_TOTAL, ARTICULOS.REFERENCIA_PROV as REFERENCIA_PROVEEDOR FROM ALBARANES_CLIENTE_DETALLES DET LEFT OUTER JOIN ALBARANES_CLIENTE ON (DET.ID_ALBARAN = ALBARANES_CLIENTE.ID) LEFT OUTER JOIN ARTICULOS ON (DET.ID_ARTICULO = ARTICULOS.ID) ORDER BY DET.ID_ALBARAN, DET.POSICION ;