jueves, 23 de febrero de 2012

Validar cuentas contables de los productos


/*

    Este script SQL ayuda a los contadores a validar con mayor facilidad
    las cuentas contables asignadas a cada producto

*/

-- Tabla temporal para los productos

drop table if exists tmp_productos;

-- Tablas temporales para las cuentas contables de un producto

drop table if exists tmp_inventario_producto;
drop table if exists tmp_ajustar_costo;
drop table if exists tmp_cogs_producto;
drop table if exists tmp_variacion_precio;
drop table if exists tmp_variancia_costo;
drop table if exists tmp_descuento_recibido;
drop table if exists tmp_ingresos_producto;
drop table if exists tmp_costos_producto;

-- Tabla temporal para mostrar el resultado

drop table if exists tmp_contabilidad_productos;

-- Total de productos ubicados por almacenes

select
    l.m_locator_id cod_ubicacion,
    l.value ubicacion,
    w.m_warehouse_id cod_almacen,
    w.name almacen,
    p.*
into tmp_productos
from m_product p
    join m_locator l
    on p.m_locator_id = l.m_locator_id
    join m_warehouse w
    on l.m_warehouse_id = w.m_warehouse_id
where p.ad_client_id = 1000000;

/******************************************************************************/

-- Cuentas contables que deben tener los productos

-- Inventario de Producto

select
    ev.c_elementvalue_id id_cuenta,
    ev.value codigo_cuenta,
    ev.name nombre_cuenta,
    p.*
into tmp_inventario_producto
from tmp_productos p
    join m_product_acct pc
    on p.m_product_id = pc.m_product_id
    join c_validcombination vc
    on pc.p_asset_acct = vc.c_validcombination_id
    join c_elementvalue ev
    on vc.account_id = ev.c_elementvalue_id
where ev.ad_client_id = 1000000;

-- Ajustar Costo

select
    ev.c_elementvalue_id id_cuenta,
    ev.value codigo_cuenta,
    ev.name nombre_cuenta,
    p.*
into tmp_ajustar_costo
from tmp_productos p
    join m_product_acct pc
    on p.m_product_id = pc.m_product_id
    join c_validcombination vc
    on pc.p_costadjustment_acct = vc.c_validcombination_id
    join c_elementvalue ev
    on vc.account_id = ev.c_elementvalue_id
where ev.ad_client_id = 1000000;

-- COGS del Producto

select
    ev.c_elementvalue_id id_cuenta,
    ev.value codigo_cuenta,
    ev.name nombre_cuenta,
    p.*
into tmp_cogs_producto
from tmp_productos p
    join m_product_acct pc
    on p.m_product_id = pc.m_product_id
    join c_validcombination vc
    on pc.p_cogs_acct = vc.c_validcombination_id
    join c_elementvalue ev
    on vc.account_id = ev.c_elementvalue_id
where ev.ad_client_id = 1000000;

-- Variacion Precio de OC

select
    ev.c_elementvalue_id id_cuenta,
    ev.value codigo_cuenta,
    ev.name nombre_cuenta,
    p.*
into tmp_variacion_precio
from tmp_productos p
    join m_product_acct pc
    on p.m_product_id = pc.m_product_id
    join c_validcombination vc
    on pc.p_purchasepricevariance_acct = vc.c_validcombination_id
    join c_elementvalue ev
    on vc.account_id = ev.c_elementvalue_id
where ev.ad_client_id = 1000000;

-- Variancia Costo Promedio

select
    ev.c_elementvalue_id id_cuenta,
    ev.value codigo_cuenta,
    ev.name nombre_cuenta,
    p.*
into tmp_variancia_costo
from tmp_productos p
    join m_product_acct pc
    on p.m_product_id = pc.m_product_id
    join c_validcombination vc
    on pc.p_averagecostvariance_acct = vc.c_validcombination_id
    join c_elementvalue ev
    on vc.account_id = ev.c_elementvalue_id
where ev.ad_client_id = 1000000;

-- Descuento Comercial Recibido

select
    ev.c_elementvalue_id id_cuenta,
    ev.value codigo_cuenta,
    ev.name nombre_cuenta,
    p.*
into tmp_descuento_recibido
from tmp_productos p
    join m_product_acct pc
    on p.m_product_id = pc.m_product_id
    join c_validcombination vc
    on pc.p_tradediscountrec_acct = vc.c_validcombination_id
    join c_elementvalue ev
    on vc.account_id = ev.c_elementvalue_id
where ev.ad_client_id = 1000000;

-- Ingresos Producto

select
    ev.c_elementvalue_id id_cuenta,
    ev.value codigo_cuenta,
    ev.name nombre_cuenta,
    p.*
into tmp_ingresos_producto
from tmp_productos p
    join m_product_acct pc
    on p.m_product_id = pc.m_product_id
    join c_validcombination vc
    on pc.p_revenue_acct = vc.c_validcombination_id
    join c_elementvalue ev
    on vc.account_id = ev.c_elementvalue_id
where ev.ad_client_id = 1000000;

-- Costos o Gastos Producto

-- NOTA: Esta cuenta contable solamente aplica para los productos terminados para la venta

select
    ev.c_elementvalue_id id_cuenta,
    ev.value codigo_cuenta,
    ev.name nombre_cuenta,
    p.*
into tmp_costos_producto
from tmp_productos p
    join m_product_acct pc
    on p.m_product_id = pc.m_product_id
    join c_validcombination vc
    on pc.p_expense_acct = vc.c_validcombination_id
    join c_elementvalue ev
    on vc.account_id = ev.c_elementvalue_id
where ev.ad_client_id = 1000000;

/******************************************************************************/

select
    p.almacen almacen,
    p.value codigo_producto,
    p.name nombre_producto,
    coalesce((select t.codigo_cuenta from tmp_inventario_producto t
    where t.m_product_id = p.m_product_id), null) cod_inventario_producto,
    coalesce((select t.nombre_cuenta from tmp_inventario_producto t
    where t.m_product_id = p.m_product_id), null) inventario_producto,
    coalesce((select t.codigo_cuenta from tmp_ajustar_costo t
    where t.m_product_id = p.m_product_id), null) cod_ajustar_costo,
    coalesce((select t.nombre_cuenta from tmp_ajustar_costo t
    where t.m_product_id = p.m_product_id), null) ajustar_costo,
    coalesce((select t.codigo_cuenta from tmp_cogs_producto t
    where t.m_product_id = p.m_product_id), null) cod_cogs_producto,
    coalesce((select t.nombre_cuenta from tmp_cogs_producto t
    where t.m_product_id = p.m_product_id), null) cogs_producto,
    coalesce((select t.codigo_cuenta from tmp_variacion_precio t
    where t.m_product_id = p.m_product_id), null) cod_variacion_precio,
    coalesce((select t.nombre_cuenta from tmp_variacion_precio t
    where t.m_product_id = p.m_product_id), null) variacion_precio,
    coalesce((select t.codigo_cuenta from tmp_variancia_costo t
    where t.m_product_id = p.m_product_id), null) cod_variancia_costo,
    coalesce((select t.nombre_cuenta from tmp_variancia_costo t
    where t.m_product_id = p.m_product_id), null) variancia_costo,
    coalesce((select t.codigo_cuenta from tmp_descuento_recibido t
    where t.m_product_id = p.m_product_id), null) cod_descuento_recibido,
    coalesce((select t.nombre_cuenta from tmp_descuento_recibido t
    where t.m_product_id = p.m_product_id), null) descuento_recibido,
    coalesce((select t.codigo_cuenta from tmp_ingresos_producto t
    where t.m_product_id = p.m_product_id), null) cod_ingresos_producto,
    coalesce((select t.nombre_cuenta from tmp_ingresos_producto t
    where t.m_product_id = p.m_product_id), null) ingresos_producto,
    coalesce((select t.codigo_cuenta from tmp_costos_producto t
    where t.m_product_id = p.m_product_id), null) cod_costos_producto,
    coalesce((select t.nombre_cuenta from tmp_costos_producto t
    where t.m_product_id = p.m_product_id), null) costos_producto
into tmp_contabilidad_productos
from tmp_productos p
order by
    p.almacen,
    p.name;

select cp.* from tmp_contabilidad_productos cp;

No hay comentarios:

Publicar un comentario