Descargar diseño aqui.
-- Function: adempiere.rep_balance_general(numeric, numeric, character, character)
-- DROP FUNCTION adempiere.rep_balance_general(numeric, numeric, character, character);
CREATE OR REPLACE FUNCTION adempiere.rep_balance_general(
IN id_compania numeric,
IN id_periodo numeric,
IN es_cierre_contable character,
IN es_periodo_ajuste character)
RETURNS TABLE(nombre_compania character varying, id_tipo_cuenta character, tipo_cuenta character varying, id_naturaleza character, id_cuenta_mayor numeric, cod_cuenta_mayor numeric, cuenta_mayor character varying, id_cuenta_padre numeric, cod_cuenta_padre numeric, cuenta_padre character varying, id_cuenta_contable numeric, cod_cuenta_contable character varying, cuenta_contable character varying, id_etiqueta numeric, etiqueta character varying, orden integer, id_titulo numeric, titulo character varying, id_subtitulo numeric, subtitulo character varying, pre_titulo character varying, pre_subtitulo character varying, saldo numeric, total_balance numeric, fecha_ini date, fecha_fin date) AS
$BODY$
declare
nombre_compania_x varchar(255);
p_movimientos_totales boolean;
p_tipo_periodo char;
p_num_periodo numeric(10,0);
finicial date;
ffinal date;
v_periodo numeric(10,0);
begin
nombre_compania_x =
(
select c.name from ad_client c
where c.ad_client_id = id_compania
);
-- Obtener el tipo de periodo (estandar o ajuste) y el consecutivo de periodo
select
p.periodtype,
p.periodno,
p.startdate,
p.enddate
into
p_tipo_periodo,
p_num_periodo,
finicial,
ffinal
from c_period p
where p.c_period_id = id_periodo;
v_periodo =
(
select
p.c_period_id
from c_period p
where p.periodno =
case
when es_cierre_contable = 'Y' then
p_num_periodo - 1
else
p_num_periodo
end
);
drop table if exists tmp_cuentas_balance;
create temporary table tmp_cuentas_balance as
select
u.accounttype as id_tipo_cuenta_x,
case u.accounttype
when 'A' then 'ACTIVO'
when 'L' then 'PASIVO Y PATRIMONIO'
when 'O' then 'PASIVO Y PATRIMONIO'
when 'E' then 'PASIVO Y PATRIMONIO'
else ''
end::varchar as tipo_cuenta_x,
u.nat as id_naturaleza_x,
u.ctamayor_id as id_cuenta_mayor_x,
u.ctmayor_value as cod_cuenta_mayor_x,
u.ctmayor_name as cuenta_mayor_x,
u.parent_id as id_cuenta_padre_x,
u.parent_value as cod_cuenta_padre_x,
u.parent_name as cuenta_padre_x,
u.c_elementvalue_id as id_cuenta_contable_x,
u.value as cod_cuenta_contable_x,
u.name as cuenta_contable_x,
bg.nic_balance_grupo_id as id_etiqueta_x,
bg.name as etiqueta_x,
bc.orden as orden_x,
bt.nic_balance_titulo_id as id_titulo_x,
bt.name as titulo_x,
bs.nic_balance_subtitulo_id as id_subtitulo_x,
bs.name as subtitulo_x,
bt.prefijo as pre_titulo_x,
bs.prefijo as pre_subtitulo_x
from usr_v_vcc u
join nic_balance_cuentas bc
on u.parent_id = bc.account_id
join nic_balance_titulo bt
on bc.nic_balance_titulo_id = bt.nic_balance_titulo_id
join nic_balance_subtitulo bs
on bc.nic_balance_subtitulo_id = bs.nic_balance_subtitulo_id
join nic_balance_grupo bg
on bc.nic_balance_grupo_id = bg.nic_balance_grupo_id
where u.c_elementvalue_id in
(
-- select bc.account_id from nic_balance_cuentas bc
select distinct sf.id_cuenta from nic_saldos_finales sf
) and u.accounttype in ('A', 'L', 'O', 'E')
and u.nat in ('D', 'C');
drop table if exists tmp_saldos_balance;
create temporary table tmp_saldos_balance as
select
sf.tipo_cuenta as tipo_cuenta_x,
sf.id_cuenta as id_cuenta_contable_x,
sf.id_periodo as id_periodo_x,
sf.tipo_periodo as tipo_periodo_x,
sf.num_periodo as num_periodo_x,
sf.es_cierre_contable as es_cierre_contable_x,
sf.es_periodo_ajuste as es_periodo_ajuste_x,
coalesce(sf.debito_final, 0.00) - coalesce(sf.credito_final, 0.00) as dc_x,
coalesce(sf.credito_final, 0.00) - coalesce(sf.debito_final, 0.00) as cd_x
from nic_saldos_finales sf
where sf.ad_client_id = id_compania
and sf.tipo_periodo in ('S', 'A')
and sf.es_cierre_contable = 'N'
and sf.id_cuenta in
(
select cc.id_cuenta_contable_x from tmp_cuentas_balance cc
)
and sf.num_periodo <= p_num_periodo
union all
select
sf.tipo_cuenta as tipo_cuenta_x,
sf.id_cuenta as id_cuenta_contable_x,
sf.id_periodo as id_periodo_x,
sf.tipo_periodo as tipo_periodo_x,
sf.num_periodo as num_periodo_x,
sf.es_cierre_contable as es_cierre_contable_x,
sf.es_periodo_ajuste as es_periodo_ajuste_x,
coalesce(sf.debito_final, 0.00) - coalesce(sf.credito_final, 0.00) as dc_x,
coalesce(sf.credito_final, 0.00) - coalesce(sf.debito_final, 0.00) as cd_x
from nic_saldos_finales sf
where sf.ad_client_id = id_compania
and sf.tipo_periodo in ('S', 'A')
and sf.es_cierre_contable = 'Y'
and sf.id_cuenta in
(
select cc.id_cuenta_contable_x from tmp_cuentas_balance cc
)
and sf.num_periodo <= p_num_periodo;
drop table if exists tmp_balance_general;
create temporary table tmp_balance_general as
select
cc.id_tipo_cuenta_x,
cc.tipo_cuenta_x,
cc.id_naturaleza_x,
cc.id_cuenta_mayor_x,
cc.cod_cuenta_mayor_x,
cc.cuenta_mayor_x,
cc.id_cuenta_padre_x,
cc.cod_cuenta_padre_x,
cc.cuenta_padre_x,
cc.id_cuenta_contable_x,
cc.cod_cuenta_contable_x,
cc.cuenta_contable_x,
cc.id_etiqueta_x,
cc.etiqueta_x,
cc.orden_x,
cc.id_titulo_x,
cc.titulo_x,
cc.id_subtitulo_x,
cc.subtitulo_x,
cc.pre_titulo_x,
cc.pre_subtitulo_x,
coalesce(case cc.id_tipo_cuenta_x
when 'A' then
case cc.id_naturaleza_x
when 'D' then
(select sum(sb.dc_x) from tmp_saldos_balance sb
where sb.id_cuenta_contable_x = cc.id_cuenta_contable_x)
when 'C' then
(select sum(sb.dc_x) from tmp_saldos_balance sb
where sb.id_cuenta_contable_x = cc.id_cuenta_contable_x)
else
0.00
end
else
case cc.id_naturaleza_x
when 'D' then
(select sum(sb.cd_x) from tmp_saldos_balance sb
where sb.id_cuenta_contable_x = cc.id_cuenta_contable_x)
when 'C' then
(select sum(sb.cd_x) from tmp_saldos_balance sb
where sb.id_cuenta_contable_x = cc.id_cuenta_contable_x)
else
0.00
end
end, 0.00) as saldo_x
from tmp_cuentas_balance cc;
drop table if exists tmp_balance_ultimate;
create temporary table tmp_balance_ultimate as
select
t.id_tipo_cuenta_x,
t.tipo_cuenta_x,
t.id_naturaleza_x,
t.id_cuenta_mayor_x,
t.cod_cuenta_mayor_x,
t.cuenta_mayor_x,
t.id_cuenta_padre_x,
t.cod_cuenta_padre_x,
t.cuenta_padre_x,
t.id_cuenta_contable_x,
t.cod_cuenta_contable_x,
t.cuenta_contable_x,
t.id_etiqueta_x,
t.etiqueta_x,
t.orden_x,
t.id_titulo_x,
t.titulo_x,
t.id_subtitulo_x,
t.subtitulo_x,
t.pre_titulo_x,
t.pre_subtitulo_x,
sum(t.saldo_x) as saldo_x,
(select sum(t2.saldo_x) from tmp_balance_general t2) as total_balance_x
from tmp_balance_general t
group by
t.id_tipo_cuenta_x,
t.tipo_cuenta_x,
t.id_naturaleza_x,
t.id_cuenta_mayor_x,
t.cod_cuenta_mayor_x,
t.cuenta_mayor_x,
t.id_cuenta_padre_x,
t.cod_cuenta_padre_x,
t.cuenta_padre_x,
t.id_cuenta_contable_x,
t.cod_cuenta_contable_x,
t.cuenta_contable_x,
t.id_etiqueta_x,
t.etiqueta_x,
t.orden_x,
t.id_titulo_x,
t.titulo_x,
t.id_subtitulo_x,
t.subtitulo_x,
t.pre_titulo_x,
t.pre_subtitulo_x
union all
select
null as id_tipo_cuenta_x,
'PASIVO Y PATRIMONIO' as tipo_cuenta_x,
'C' as id_naturaleza_x,
null as id_cuenta_mayor_x,
'30100000' as cod_cuenta_mayor_x,
'CAPITAL SOCIAL' as cuenta_mayor_x,
null as id_cuenta_padre_x,
null as cod_cuenta_padre_x,
'Utilidad o Perdida Acumulada' as cuenta_padre_x,
null as id_cuenta_contable_x,
null as cod_cuenta_contable_x,
null as cuenta_contable_x,
null as id_etiqueta_x,
'Súper Avit o Déficit del Período' as etiqueta_x,
100 as orden_x,
1000002 as id_titulo_x,
'PATRIMONIO' as titulo_x,
1000004 as id_subtitulo_x,
'UTILIDAD O PERDIDA' as subtitulo_x,
'TOTAL' as pre_titulo_x,
'TOTAL' as pre_subtitulo_x,
coalesce((select sum(er.saldo_acum) from rep_estado_resultado(id_compania, id_periodo, es_cierre_contable, es_periodo_ajuste) er), 0.00) as saldo_x,
0.00 as total_balance_x;
return query
(
select
nombre_compania_x,
t.id_tipo_cuenta_x,
t.tipo_cuenta_x,
t.id_naturaleza_x,
t.id_cuenta_mayor_x,
t.cod_cuenta_mayor_x,
t.cuenta_mayor_x,
t.id_cuenta_padre_x,
t.cod_cuenta_padre_x,
t.cuenta_padre_x,
t.id_cuenta_contable_x,
t.cod_cuenta_contable_x,
t.cuenta_contable_x,
t.id_etiqueta_x,
t.etiqueta_x,
t.orden_x,
t.id_titulo_x,
t.titulo_x,
t.id_subtitulo_x,
t.subtitulo_x,
t.pre_titulo_x,
t.pre_subtitulo_x,
t.saldo_x,
t.total_balance_x,
finicial as fecha_ini_x,
case
when es_cierre_contable = 'Y' then
(extract(year from ffinal)::varchar || '1231')::date
when es_periodo_ajuste = 'Y' then
(extract(year from ffinal)::varchar || '1231')::date
else ffinal
end as fecha_fin_x
from tmp_balance_ultimate t
where abs(t.saldo_x) > 0
order by
t.orden_x,
t.cuenta_padre_x,
t.cuenta_mayor_x,
t.etiqueta_x,
t.cod_cuenta_contable_x asc
);
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
No hay comentarios:
Publicar un comentario