Se añade procedimiento almacenado para cierre y apertura de ejercicios

git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES2/trunk@391 f4e31baf-9722-1c47-927c-6f952f962d4b
This commit is contained in:
roberto 2009-02-03 16:21:13 +00:00
parent d4163548f0
commit 0a73f1cdff

View File

@ -382,6 +382,91 @@ BEGIN
END^
CREATE PROCEDURE PROC_CIERRE_APERTURA (
id_ejercicio_cierre integer,
id_ejercicio_apertura integer)
as
declare variable id_subcuenta_apertura integer;
declare variable id_subcuenta_cierre integer;
declare variable ref_subcuenta varchar(255);
declare variable subcuenta varchar(255);
declare variable num_orden integer;
declare variable diferencia numeric(11,2);
declare variable estado_ejercicio_cierre varchar(255);
declare variable estado_ejercicio_apertura varchar(255);
declare variable nombre_ejercicio_cierre varchar(255);
declare variable nombre_ejercicio_apertura varchar(255);
declare variable id_asiento_cierre integer;
declare variable id_asiento_apertura integer;
declare variable id_apunte_apertura integer;
declare variable id_apunte_cierre integer;
begin
/*Seleccionamos el ejercicio de cierre*/
select ESTADO, NOMBRE, GEN_ID(gen_cont_asientos_id, 1)
from cont_ejercicios
where id = :id_ejercicio_cierre
into :estado_ejercicio_cierre, :nombre_ejercicio_cierre, :id_asiento_cierre;
/*Seleccionamos el ejercicio de apertura*/
select ESTADO, NOMBRE, GEN_ID(gen_cont_asientos_id, 1)
from cont_ejercicios
where id = :id_ejercicio_apertura
into :estado_ejercicio_apertura, :nombre_ejercicio_apertura, :id_asiento_apertura;
/*Si los ejercicios no estan abiertos no hacemos nada*/
if ((estado_ejercicio_cierre = 'ABIERTO') and (estado_ejercicio_apertura = 'ABIERTO')) then
begin
/* Añadimos asiento de cierre*/
insert into CONT_ASIENTOS (ID, FECHA_ASIENTO, TIPO)
values (:id_asiento_cierre, current_date, 'x');
/* Añadimos asiento de apertura*/
insert into CONT_ASIENTOS (ID, FECHA_ASIENTO, TIPO)
values (:id_asiento_apertura, current_date, 'a');
num_orden = 1;
/* Para cada cuenta descuadrada se inserta un apunte de cierre asociado al asiento creado anteriormente*/
for select ID_SUBCUENTA, REF_SUBCUENTA, SUBCUENTA, SUM(COALESCE(DEBE,0))-SUM(COALESCE(HABER,0)) as DIFERENCIA,
GEN_ID(gen_cont_apuntes_id, 1), GEN_ID(gen_cont_apuntes_id, 1)
from v_cont_diario where (ID_EJERCICIO = :ID_EJERCICIO_CIERRE)
group by 1, 2, 3
having (SUM(COALESCE(DEBE,0))-SUM(COALESCE(HABER,0))) <> 0
into :id_subcuenta_cierre, :ref_subcuenta, :subcuenta, :diferencia, :id_apunte_cierre, :id_apunte_apertura do
begin
/*Buscamos la subcuenta equibalente en el ejericio de apertura*/
select ID from cont_subcuentas
where REF_SUBCUENTA = :ref_subcuenta
and DESCRIPCION = :subcuenta
and ID_EJERCICIO = :id_ejercicio_apertura
into :id_subcuenta_apertura;
if (diferencia > 0) then
begin
/*APUNTE DE CIERRE*/
insert into CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, CONCEPTO, HABER)
values (:id_apunte_cierre, :id_asiento_cierre, :id_subcuenta_cierre, :num_orden, 'Asiento de cierre ' || :nombre_ejercicio_cierre, :diferencia);
/*APUNTE DE APERTURA*/
insert into CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, CONCEPTO, DEBE)
values (:id_apunte_apertura, :id_asiento_apertura, :id_subcuenta_apertura, :num_orden, 'Asiento de apertura ' || :nombre_ejercicio_apertura, :diferencia);
end
else
begin
/*APUNTE DE CIERRE*/
insert into CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, CONCEPTO, DEBE)
values (:id_apunte_cierre, :id_asiento_cierre, :id_subcuenta_cierre, :num_orden, 'Asiento de cierre ' || :nombre_ejercicio_cierre, (:diferencia)*-1);
/*APUNTE DE APERTURA*/
insert into CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, CONCEPTO, HABER)
values (:id_apunte_apertura, :id_asiento_apertura, :id_subcuenta_apertura, :num_orden, 'Asiento de apertura ' || :nombre_ejercicio_apertura, (:diferencia)*-1);
end
num_orden = num_orden + 1;
end
end
suspend;
end^
SET TERM ; ^