expsigladb.Procedure.spg_singolo_conto.prc Maven / Gradle / Ivy
CREATE OR REPLACE PROCEDURE SPG_SINGOLO_CONTO
--
-- Date: 18/07/2006
-- Version: 1.7
--
-- Per stampa situazione singolo conto
--
--
-- History:
--
-- Date: 05/01/2004
-- Version: 1.0
-- Creazione
--
-- Date: 21/01/2004
-- Version: 1.1
-- Estrazione cd_terzo del doc cont
--
-- Date: 23/01/2004
-- Version: 1.2
-- Ottimizzazione
--
-- Date: 26/01/2004
-- Version: 1.3
-- Fix ricerca documenti contabili del solo cds
-- (oss: visibilit? doc cont sul cds, indipendente dall'uo di scrivania)
--
-- Date: 27/01/2004
-- Version: 1.4
-- Fix estrazione obb/acr, man/rev di competenza o residuo in funzione
-- del saldo selezionato
--
-- Date: 28/01/2004
-- Version: 1.5
-- Fix calcolo saldo 1210 non associati a sospesi
-- (con ottimizzazione query: non uso vista V_LETTERA_PAGAM_ESTERO_DOC e
-- vista V_DOC_AMM_OBB)
--
-- Date: 01/03/2004
-- Version: 1.6
-- Modificato importo mandato (errore n. 776)
-- Aggiunta colonna in pannello accertamenti/obbligazioni relativa
-- all'importo non associato a doc contabile (richiesta n. 778)
--
-- Date: 18/07/2006
-- Version: 1.7
-- Gestione Impegni/Accertamenti Residui:
-- aggiornata la funzione per tener conto anche del campo Esercizio Originale Impegno/Accertamento
--
-- Body:
--
(aIdRpt in number) is
aId number;
i number := 0;
aVf voce_f%rowtype;
aIm1210noSosp number;
aTot number := 0;
aKey varchar2(100);
aImporto number := 0;
aCdTipoDocCont varchar2(10);
begin
select IBMSEQ00_CR_PACKAGE.nextval into aId from dual;
for aVoce in (select * from v_stm_paramin_sing_conto
where id_report = aIdRpt) loop
i := i + 1;
aKey := aVoce.cd_cds||aVoce.esercizio||aVoce.ti_appartenenza||aVoce.ti_gestione||aVoce.cd_voce||aVoce.ti_competenza_residuo;
select * into aVf
from voce_f
where esercizio = aVoce.esercizio
and ti_appartenenza = aVoce.ti_appartenenza
and ti_gestione = aVoce.ti_gestione
and cd_voce = aVoce.cd_voce;
for aSaldo in
(select ESERCIZIO,
decode(TI_GESTIONE,
'S', CNRUTL001.GETCDSFROMCDR(cd_centro_responsabilita),
'E', CNRCTB020.getCDCDSENTE(ESERCIZIO)) CD_CDS,
TI_APPARTENENZA,
TI_GESTIONE,
CD_ELEMENTO_VOCE,
CD_VOCE,
decode(esercizio, esercizio_res, 'C', 'R') TI_COMPETENZA_RESIDUO,
sum(IM_STANZ_INIZIALE_A1) IM_STANZ_INIZIALE_A1,
sum(VARIAZIONI_PIU) VARIAZIONI_PIU,
sum(VARIAZIONI_MENO) VARIAZIONI_MENO,
sum(IM_OBBL_ACC_COMP) IM_OBBL_ACC_COMP,
sum(IM_OBBL_RES_IMP) IM_OBBL_RES_IMP,
sum(IM_OBBL_RES_PRO) IM_OBBL_RES_PRO,
sum(VAR_PIU_OBBL_RES_PRO) VAR_PIU_OBBL_RES_PRO,
sum(VAR_MENO_OBBL_RES_PRO) VAR_MENO_OBBL_RES_PRO,
sum(IM_STANZ_RES_IMPROPRIO) IM_STANZ_RES_IMPROPRIO,
sum(VAR_PIU_STANZ_RES_IMP) VAR_PIU_STANZ_RES_IMP,
sum(VAR_MENO_STANZ_RES_IMP) VAR_MENO_STANZ_RES_IMP,
sum(IM_MANDATI_REVERSALI_PRO) IM_MANDATI_REVERSALI_PRO,
sum(IM_MANDATI_REVERSALI_IMP) IM_MANDATI_REVERSALI_IMP,
sum(IM_PAGAMENTI_INCASSI) IM_PAGAMENTI_INCASSI
from voce_f_saldi_cdr_linea
where esercizio = aVoce.esercizio
and ti_appartenenza = aVoce.ti_appartenenza
and ti_gestione = aVoce.ti_gestione
and cd_voce = aVoce.cd_voce
and ((CNRUTL001.GETCDSFROMCDR(cd_centro_responsabilita) = aVoce.cd_cds AND TI_GESTIONE = 'S') OR
(CNRCTB020.getCDCDSENTE(ESERCIZIO) = aVoce.cd_cds AND TI_GESTIONE = 'E'))
and ((esercizio = esercizio_res and aVoce.TI_COMPETENZA_RESIDUO = 'C') OR
(esercizio > esercizio_res and aVoce.TI_COMPETENZA_RESIDUO = 'R'))
group by ESERCIZIO, CNRUTL001.GETCDSFROMCDR(cd_centro_responsabilita), TI_APPARTENENZA, TI_GESTIONE, CD_ELEMENTO_VOCE, CD_VOCE,
decode(esercizio, esercizio_res, 'C', 'R')
UNION ALL
-- SOLO PARTITE DI GIRO SPESA ISTITUTI
select obb.esercizio,
obb.cd_cds,
obb.TI_APPARTENENZA,
obb.TI_GESTIONE,
obb.CD_ELEMENTO_VOCE,
obbsv.CD_VOCE,
decode(obb.esercizio, obb.esercizio_originale, 'C', 'R') TI_COMPETENZA_RESIDUO,
0 IM_STANZ_INIZIALE_A1,
0 VARIAZIONI_PIU,
0 VARIAZIONI_MENO,
nvl(sum(decode(obb.esercizio, obb.esercizio_originale, obbsv.im_voce, 0)), 0) IM_OBBL_ACC_COMP,
0 IM_OBBL_RES_IMP,
nvl(sum(decode(obb.esercizio, obb.esercizio_originale, 0, obbsv.im_voce)), 0) IM_OBBL_RES_PRO,
0 VAR_PIU_OBBL_RES_PRO,
0 VAR_MENO_OBBL_RES_PRO,
0 IM_STANZ_RES_IMPROPRIO,
0 VAR_PIU_STANZ_RES_IMP,
0 VAR_MENO_STANZ_RES_IMP,
sum(CNRUTL002.IM_MANDATI_PER_IMPEGNO (OBBSV.CD_CDS, OBBSV.ESERCIZIO, OBBSV.ESERCIZIO_ORIGINALE, OBBSV.PG_OBBLIGAZIONE, NULL)),
0 IM_MANDATI_REVERSALI_IMP,
0 IM_PAGAMENTI_INCASSI
from obbligazione obb, obbligazione_scad_voce obbsv, obbligazione_scadenzario obbs
where obbsv.esercizio = aVoce.esercizio
and obbsv.ti_appartenenza = aVoce.ti_appartenenza
and obbsv.ti_gestione = aVoce.ti_gestione
and obbsv.cd_voce = aVoce.cd_voce
and obb.fl_pgiro = 'Y'
and obbsv.ti_appartenenza = 'D'
and OBB.PG_OBBLIGAZIONE > 0
and obb.stato_obbligazione <> 'S' -- escludo obbligazioni stornate
and obb.cd_cds = aVoce.cd_cds
and obbs.cd_cds = obb.cd_cds
and obbs.esercizio = obb.esercizio
and obbs.esercizio_originale = obb.esercizio_originale
and obbs.pg_obbligazione = obb.pg_obbligazione
and obbs.cd_cds = obbsv.cd_cds
and obbs.esercizio = obbsv.esercizio
and obbs.esercizio_originale = obbsv.esercizio_originale
and obbs.pg_obbligazione = obbsv.pg_obbligazione
and obbs.pg_obbligazione_scadenzario = obbsv.pg_obbligazione_scadenzario
and ((obb.esercizio = obb.esercizio_originale and aVoce.TI_COMPETENZA_RESIDUO = 'C') OR
(obb.esercizio > obb.esercizio_originale and aVoce.TI_COMPETENZA_RESIDUO = 'R'))
group by obb.ESERCIZIO, obb.cd_cds, obb.TI_APPARTENENZA, obb.TI_GESTIONE, CD_ELEMENTO_VOCE, CD_VOCE,
decode(obb.esercizio, obb.esercizio_originale, 'C', 'R')) LOOP
-- inserimento record di tipo A (info generali sul capitolo)
-- calcolo del saldo 1210 non associati a sospesi (solo per spese)
if aSaldo.ti_gestione = 'S' then
if aSaldo.TI_COMPETENZA_RESIDUO = 'C' then
select nvl(sum(totale),0) into aIm1210noSosp
from (select nvl(sum(obbsv.im_voce),0) totale
from lettera_pagam_estero lett
,documento_generico dg
,documento_generico_riga dgr
,obbligazione_scad_voce obbsv
,obbligazione obb
where lett.CD_CDS = dg.CD_CDS
and lett.ESERCIZIO = dg.ESERCIZIO_LETTERA
and lett.CD_UNITA_ORGANIZZATIVA = dg.CD_UNITA_ORGANIZZATIVA
and lett.PG_lettera = dg.PG_LETTERA
and dg.cd_cds = dgr.cd_cds
and dg.cd_unita_organizzativa = dgr.cd_unita_organizzativa
and dg.esercizio = dgr.esercizio
and dg.cd_tipo_documento_amm = dgr.cd_tipo_documento_amm
and dg.pg_documento_generico = dgr.pg_documento_generico
and obbsv.CD_CDS = dgr.cd_cds_obbligazione
and obbsv.ESERCIZIO = dgr.ESERCIZIO_OBBLIGAZIONE
and obbsv.ESERCIZIO_ORIGINALE = dgr.ESERCIZIO_ORI_OBBLIGAZIONE
and obbsv.PG_OBBLIGAZIONE = dgr.PG_OBBLIGAZIONE
and obbsv.PG_OBBLIGAZIONE_SCADENZARIO = dgr.PG_OBBLIGAZIONE_SCADENZARIO
and obbsv.ESERCIZIO = aVf.esercizio
and obbsv.TI_APPARTENENZA = aVf.ti_appartenenza
and obbsv.TI_GESTIONE = aVf.ti_gestione
and obbsv.CD_VOCE = aVf.cd_voce
and obb.cd_cds = obbsv.cd_cds
and obb.esercizio = obbsv.esercizio
and obb.esercizio_originale = obbsv.esercizio_originale
and obb.pg_obbligazione = obbsv.pg_obbligazione
and obb.cd_tipo_documento_cont <> 'IMP_RES'
union all
select nvl(sum(obbsv.im_voce),0) totale
from lettera_pagam_estero lett
,fattura_passiva fp
,fattura_passiva_riga fpr
,obbligazione_scad_voce obbsv
,obbligazione obb
where lett.CD_CDS = fp.CD_CDS
and lett.ESERCIZIO = fp.ESERCIZIO_LETTERA
and lett.CD_UNITA_ORGANIZZATIVA = fp.CD_UNITA_ORGANIZZATIVA
and lett.PG_lettera = fp.PG_LETTERA
and fp.cd_cds = fpr.cd_cds
and fp.cd_unita_organizzativa = fpr.cd_unita_organizzativa
and fp.esercizio = fpr.esercizio
and fp.pg_fattura_passiva = fpr.pg_fattura_passiva
and obbsv.CD_CDS = fpr.cd_cds_obbligazione
and obbsv.ESERCIZIO = fpr.ESERCIZIO_OBBLIGAZIONE
and obbsv.ESERCIZIO_ORIGINALE = fpr.ESERCIZIO_ORI_OBBLIGAZIONE
and obbsv.PG_OBBLIGAZIONE = fpr.PG_OBBLIGAZIONE
and obbsv.PG_OBBLIGAZIONE_SCADENZARIO = fpr.PG_OBBLIGAZIONE_SCADENZARIO
and obbsv.ESERCIZIO = aVf.esercizio
and obbsv.TI_APPARTENENZA = aVf.ti_appartenenza
and obbsv.TI_GESTIONE = aVf.ti_gestione
and obbsv.CD_VOCE = aVf.cd_voce
and obb.cd_cds = obbsv.cd_cds
and obb.esercizio = obbsv.esercizio
and obb.esercizio_originale = obbsv.esercizio_originale
and obb.pg_obbligazione = obbsv.pg_obbligazione
and obb.cd_tipo_documento_cont <> 'IMP_RES'
);
else -- residuo
select nvl(sum(totale),0) into aIm1210noSosp
from (select nvl(sum(obbsv.im_voce),0) totale
from lettera_pagam_estero lett
,documento_generico dg
,documento_generico_riga dgr
,obbligazione_scad_voce obbsv
,obbligazione obb
where lett.CD_CDS = dg.CD_CDS
and lett.ESERCIZIO = dg.ESERCIZIO_LETTERA
and lett.CD_UNITA_ORGANIZZATIVA = dg.CD_UNITA_ORGANIZZATIVA
and lett.PG_lettera = dg.PG_LETTERA
and dg.cd_cds = dgr.cd_cds
and dg.cd_unita_organizzativa = dgr.cd_unita_organizzativa
and dg.esercizio = dgr.esercizio
and dg.cd_tipo_documento_amm = dgr.cd_tipo_documento_amm
and dg.pg_documento_generico = dgr.pg_documento_generico
and obbsv.CD_CDS = dgr.cd_cds_obbligazione
and obbsv.ESERCIZIO = dgr.ESERCIZIO_OBBLIGAZIONE
and obbsv.ESERCIZIO_ORIGINALE = dgr.ESERCIZIO_ORI_OBBLIGAZIONE
and obbsv.PG_OBBLIGAZIONE = dgr.PG_OBBLIGAZIONE
and obbsv.PG_OBBLIGAZIONE_SCADENZARIO = dgr.PG_OBBLIGAZIONE_SCADENZARIO
and obbsv.ESERCIZIO = aVf.esercizio
and obbsv.TI_APPARTENENZA = aVf.ti_appartenenza
and obbsv.TI_GESTIONE = aVf.ti_gestione
and obbsv.CD_VOCE = aVf.cd_voce
and obb.cd_cds = obbsv.cd_cds
and obb.esercizio = obbsv.esercizio
and obb.esercizio_originale = obbsv.esercizio_originale
and obb.pg_obbligazione = obbsv.pg_obbligazione
and obb.cd_tipo_documento_cont = 'IMP_RES'
union all
select nvl(sum(obbsv.im_voce),0) totale
from lettera_pagam_estero lett
,fattura_passiva fp
,fattura_passiva_riga fpr
,obbligazione_scad_voce obbsv
,obbligazione obb
where lett.CD_CDS = fp.CD_CDS
and lett.ESERCIZIO = fp.ESERCIZIO_LETTERA
and lett.CD_UNITA_ORGANIZZATIVA = fp.CD_UNITA_ORGANIZZATIVA
and lett.PG_lettera = fp.PG_LETTERA
and fp.cd_cds = fpr.cd_cds
and fp.cd_unita_organizzativa = fpr.cd_unita_organizzativa
and fp.esercizio = fpr.esercizio
and fp.pg_fattura_passiva = fpr.pg_fattura_passiva
and obbsv.CD_CDS = fpr.cd_cds_obbligazione
and obbsv.ESERCIZIO = fpr.ESERCIZIO_OBBLIGAZIONE
and obbsv.ESERCIZIO_ORIGINALE = fpr.ESERCIZIO_ORI_OBBLIGAZIONE
and obbsv.PG_OBBLIGAZIONE = fpr.PG_OBBLIGAZIONE
and obbsv.PG_OBBLIGAZIONE_SCADENZARIO = fpr.PG_OBBLIGAZIONE_SCADENZARIO
and obbsv.ESERCIZIO = aVf.esercizio
and obbsv.TI_APPARTENENZA = aVf.ti_appartenenza
and obbsv.TI_GESTIONE = aVf.ti_gestione
and obbsv.CD_VOCE = aVf.cd_voce
and obb.cd_cds = obbsv.cd_cds
and obb.esercizio = obbsv.esercizio
and obb.esercizio_originale = obbsv.esercizio_originale
and obb.pg_obbligazione = obbsv.pg_obbligazione
and obb.cd_tipo_documento_cont = 'IMP_RES'
);
end if; -- fine distinzione comp/res
else -- entrate> non sono associate a 1210
aIm1210noSosp := 0;
end if;
insert into VPG_SINGOLO_CONTO (ID,
CHIAVE,
TIPO,
SEQUENZA,
ESERCIZIO,
CD_CDS,
TI_APPARTENENZA,
TI_GESTIONE,
CD_ELEMENTO_VOCE,
DS_ELEMENTO_VOCE,
CD_VOCE,
TI_COMPETENZA_RESIDUO,
DS_CDS,
DS_VOCE,
IM_STANZ_INIZIALE_A1,
VARIAZIONI_PIU,
VARIAZIONI_MENO,
IM_STANZ_ATTUALE,
IM_OBBLIG_IMP_ACR, -- IMPEGNATO A COMPETENZA / RES PRO ASSESTATO
IM_OBBL_RES_IMP, -- impegnato residuo IMPROPRIO
VAR_PIU_OBBL_RES_PRO,
VAR_MENO_OBBL_RES_PRO,
IM_MANDATI_REVERSALI,
IM_MANDATI_REVERSALI_IMP,
IM_PAGAMENTI_INCASSI,
IM_1210_NO_SOSPESI)
select aId
,aKey
,'A'
,i
,aSaldo.esercizio
,aSaldo.cd_cds
,aSaldo.ti_appartenenza
,aSaldo.ti_gestione
,aSaldo.cd_elemento_voce
,(select ds_elemento_voce from elemento_voce where esercizio = aSaldo.esercizio and ti_appartenenza = aSaldo.ti_appartenenza and
ti_gestione = aSaldo.ti_gestione and cd_elemento_voce = aSaldo.cd_elemento_voce)
,aSaldo.cd_voce
,aSaldo.ti_competenza_residuo
,uo.DS_UNITA_ORGANIZZATIVA
,aVf.ds_voce
,decode(aSaldo.ti_competenza_residuo, 'C', aSaldo.IM_STANZ_INIZIALE_A1, 'R', aSaldo.IM_STANZ_RES_IMPROPRIO) -- STANZ. INIZIALE
,decode(aSaldo.ti_competenza_residuo, 'C', aSaldo.VARIAZIONI_PIU, 'R', aSaldo.VAR_PIU_STANZ_RES_IMP) -- VAR PIU'
,decode(aSaldo.ti_competenza_residuo, 'C', aSaldo.VARIAZIONI_MENO, 'R', aSaldo.VAR_MENO_STANZ_RES_IMP) -- VAR MENO
,decode(aSaldo.ti_competenza_residuo,
'C', aSaldo.IM_STANZ_INIZIALE_A1 + aSaldo.VARIAZIONI_PIU - aSaldo.VARIAZIONI_MENO,
'R', aSaldo.IM_STANZ_RES_IMPROPRIO + aSaldo.VAR_PIU_STANZ_RES_IMP - aSaldo.VAR_MENO_STANZ_RES_IMP) -- ASSESTATO
,decode(aSaldo.ti_competenza_residuo,
'C', aSaldo.IM_OBBL_ACC_COMP,
'R', aSaldo.IM_OBBL_RES_PRO) -- RESIDUO PROPRIO INIZIALE
,decode(aSaldo.ti_competenza_residuo,
'C', 0,
'R', aSaldo.IM_OBBL_RES_IMP) -- impegnato residuo IMPROPRIO
,aSaldo.VAR_PIU_OBBL_RES_PRO -- VAR PIU' RES PRO
,aSaldo.VAR_MENO_OBBL_RES_PRO -- VAR MENO RES PRO
,aSaldo.IM_MANDATI_REVERSALI_PRO -- tot pagato COMP / RESIDUO PROPRIO
,decode(aSaldo.ti_competenza_residuo,
'C', 0,
'R', aSaldo.IM_MANDATI_REVERSALI_IMP) -- PAGATO RESIDUO IMPROPRIO
,aSaldo.IM_PAGAMENTI_INCASSI
,aIm1210noSosp
from unita_organizzativa uo
where uo.CD_UNITA_ORGANIZZATIVA = aSaldo.cd_cds
and uo.FL_CDS = 'Y';
-- FINE inserimento record di tipo A (info generali sul capitolo)
-- inserimento record tipo B (variazioni di bilancio, VARIAZIONI AI PIANI DI GESTIONE, VARIAZIONI ALLO STANZIAMENTO RESIDUO)
for aVarBil in (-- variazioni al bilanci di servizio
select VB.esercizio, VB.cd_cds, VB.TI_APPARTENENZA, vbd.TI_GESTIONE, vbd.cd_voce,
aSaldo.TI_COMPETENZA_RESIDUO,
vb.PG_VARIAZIONE,
'Var. Bil. Serv. '||VB.DS_VARIAZIONE DS_VARIAZIONE,
sum(im_variazione) IM_VARIAZIONE
from var_bilancio_det vbd, var_bilancio vb
where VB.cd_cds = aSaldo.cd_cds
and VB.esercizio = aSaldo.esercizio
and VB.ti_appartenenza = aSaldo.ti_appartenenza
and vbd.ti_gestione = aSaldo.ti_gestione
and vbd.cd_voce = aSaldo.cd_voce
and vb.cd_cds = vbd.cd_cds
and vb.esercizio = vbd.esercizio
and vb.ti_appartenenza = vbd.ti_appartenenza
and vb.pg_variazione = vbd.pg_variazione
and vb.stato = 'D'
and ((vb.esercizio = vb.esercizio_importi AND aSaldo.ti_competenza_residuo = 'C') OR
(vb.esercizio > vb.esercizio_importi AND aSaldo.ti_competenza_residuo = 'R')) -- SIA PER COMPETENZA CHE PER RESIDUI
group by VB.esercizio, VB.cd_cds, VB.TI_APPARTENENZA, TI_GESTIONE, cd_voce, decode(vb.esercizio, vb.esercizio_importi, 'C', 'R'),
VB.PG_VARIAZIONE, 'Var. Bil. Serv. '||VB.DS_VARIAZIONE
union all
-- variazioni al PDG
Select t.esercizio, CNRUTL001.GETCDSFROMCDR(D.CD_CDR_ASSEGNATARIO), d.TI_APPARTENENZA, d.TI_GESTIONE,
cnrctb053.getVoce_FdaEV (t.Esercizio, d.TI_APPARTENENZA, d.TI_GESTIONE, d.CD_ELEMENTO_VOCE, d.cd_cdr_assegnatario, d.CD_LINEA_ATTIVITA),
'C', t.PG_VARIAZIONE_PDG, 'Var. Pdg. '||DS_VARIAZIONE,
Sum(Nvl(IM_SPESE_GEST_DECENTRATA_INT, 0)+
Nvl(IM_SPESE_GEST_DECENTRATA_EST, 0)+
Nvl(IM_SPESE_GEST_ACCENTRATA_INT, 0)+
Nvl(IM_SPESE_GEST_ACCENTRATA_EST, 0))
From PDG_VARIAZIONE T, PDG_VARIAZIONE_RIGA_GEST D
Where CNRUTL001.GETCDSFROMCDR(D.CD_CDR_ASSEGNATARIO) = aSaldo.cd_cds and
D.ESERCIZIO = aSaldo.esercizio And
D.TI_APPARTENENZA = aSaldo.ti_appartenenza And
D.TI_GESTIONE = aSaldo.ti_gestione And
cnrctb053.getVoce_FdaEV (t.Esercizio, d.TI_APPARTENENZA, d.TI_GESTIONE,
d.CD_ELEMENTO_VOCE, d.cd_cdr_assegnatario, d.CD_LINEA_ATTIVITA) = aSaldo.cd_voce and
T.ESERCIZIO = D.ESERCIZIO And
T.PG_VARIAZIONE_PDG = D.PG_VARIAZIONE_PDG And
T.STATO In ('APP', 'APF') And
CATEGORIA_DETTAGLIO != 'SCR' and
aSaldo.ti_competenza_residuo = 'C' -- solo per competenza
group by t.esercizio, CNRUTL001.GETCDSFROMCDR(D.CD_CDR_ASSEGNATARIO), d.TI_APPARTENENZA, d.TI_GESTIONE,
cnrctb053.getVoce_FdaEV (t.Esercizio, d.TI_APPARTENENZA, d.TI_GESTIONE, d.CD_ELEMENTO_VOCE, d.cd_cdr_assegnatario, d.CD_LINEA_ATTIVITA),
'C', t.PG_VARIAZIONE_PDG, 'Var. Pdg. '||DS_VARIAZIONE
UNION ALL
-- variazioni allo stanziamento residuo
Select VT.esercizio, CNRUTL001.GETCDSFROMCDR(VR.CD_CDR) CD_CDS, TI_APPARTENENZA, TI_GESTIONE,
cd_voce, 'R',
VT.PG_VARIAZIONE, 'Var. Stanz. Res. '||DS_VARIAZIONE, sum(im_variazione)
From VAR_STANZ_RES_RIGA VR, VAR_STANZ_RES VT
Where CNRUTL001.GETCDSFROMCDR(vr.CD_CDR) = aSaldo.cd_cds AND
VR.ESERCIZIO = aSaldo.esercizio And
VR.ESERCIZIO_VOCE = aSaldo.esercizio And
VR.TI_APPARTENENZA = aSaldo.ti_appartenenza AND
VR.TI_GESTIONE = aSaldo.ti_gestione AND
VR.CD_VOCE = aSaldo.cd_voce And
VT.ESERCIZIO = VR.ESERCIZIO And
VT.PG_VARIAZIONE = VR.PG_VARIAZIONE And
VT.STATO = 'APP' and
aVoce.ti_competenza_residuo = 'R' -- solo per RESIDUI
group by VT.esercizio, CNRUTL001.GETCDSFROMCDR(vr.CD_CDR), TI_APPARTENENZA, TI_GESTIONE,
cd_voce, 'R', VT.PG_VARIAZIONE, 'Var. Stanz. Res. '||DS_VARIAZIONE) loop
i := i + 1;
insert into VPG_SINGOLO_CONTO (ID,
CHIAVE,
TIPO,
SEQUENZA,
ESERCIZIO,
CD_CDS,
TI_APPARTENENZA,
TI_GESTIONE,
CD_ELEMENTO_VOCE,
DS_ELEMENTO_VOCE,
CD_VOCE,
TI_COMPETENZA_RESIDUO,
PG_VARIAZIONE,
DS_VARIAZIONE,
IM_VARIAZIONE)
VALUES (aId
,aKey
,'B'
,i
,aSaldo.esercizio
,aSaldo.cd_cds
,aSaldo.ti_appartenenza
,aSaldo.ti_gestione
,aSaldo.cd_elemento_voce
,(select ds_elemento_voce from elemento_voce where esercizio = aSaldo.esercizio and ti_appartenenza = aSaldo.ti_appartenenza and
ti_gestione = aSaldo.ti_gestione and cd_elemento_voce = aSaldo.cd_elemento_voce)
,aSaldo.cd_voce
,aSaldo.ti_competenza_residuo
,aVarBil.pg_variazione
,Substr(aVarBil.ds_variazione,1,500)
,aVarBil.im_variazione);
end loop;
-- FINE -- inserimento record tipo B (variazioni di bilancio, VARIAZIONI AI PIANI DI GESTIONE, VARIAZIONI ALLO STANZIAMENTO RESIDUO)
-- inserimento record tipo C (obbligazioni/accertamenti)
if aVoce.ti_gestione = 'S' then
-- spese >>> obbligazioni, impegni
for aObb in (select obb.cd_cds,
obb.esercizio,
obb.esercizio_originale,
obb.pg_obbligazione,
obb.dt_registrazione,
obb.cd_terzo,
obb.DS_OBBLIGAZIONE,
obb.fl_pgiro,
nvl(sum(obbsv.im_voce), 0) aTot,
decode(sum(obbs.im_associato_doc_contabile), 0, 0, sum(obbsv.im_voce)) im_voce_doc_cont
from obbligazione obb,
obbligazione_scad_voce obbsv,
obbligazione_scadenzario obbs
where obbsv.cd_cds = obb.cd_cds
and obbsv.esercizio = obb.esercizio
and obbsv.esercizio_originale = obb.esercizio_originale
and obbsv.pg_obbligazione = obb.pg_obbligazione
and obbsv.esercizio = aVf.esercizio
and obbsv.ti_appartenenza = aVf.ti_appartenenza
and obbsv.ti_gestione = aVf.ti_gestione
and obbsv.cd_voce = aVf.cd_voce
and obb.stato_obbligazione <> 'S' -- escludo obbligazioni stornate
and ((obb.fl_pgiro = 'Y' and obb.cd_cds = aVoce.cd_cds) OR
(obb.fl_pgiro = 'N' and obb.cd_cds = aSaldo.cd_cds))
and obbs.cd_cds = obbsv.cd_cds
and obbs.esercizio = obbsv.esercizio
and obbs.esercizio_originale = obbsv.esercizio_originale
and obbs.pg_obbligazione = obbsv.pg_obbligazione
and obbs.pg_obbligazione_scadenzario = obbsv.pg_obbligazione_scadenzario
AND OBB.PG_OBBLIGAZIONE > 0
and ((obb.esercizio = obb.esercizio_originale and aSaldo.ti_competenza_residuo = 'C') OR
(obb.esercizio > obb.esercizio_originale and aSaldo.ti_competenza_residuo = 'R'))
group by obb.cd_cds, obb.esercizio, obb.esercizio_originale, obb.pg_obbligazione, obb.dt_registrazione, obb.cd_terzo, obb.DS_OBBLIGAZIONE,
obb.fl_pgiro
order by obb.esercizio_originale, obb.pg_obbligazione) loop
i := i + 1;
-- oss: per impegni residui, ho 1! scadenza ed 1!scad_voce
-- quindi l'importo associato a doc cont sulla voce ? pari
-- all'importo associato a doc cont della scadenza
insert into VPG_SINGOLO_CONTO (ID,
CHIAVE,
TIPO,
SEQUENZA,
ESERCIZIO,
CD_CDS,
TI_APPARTENENZA,
TI_GESTIONE,
CD_ELEMENTO_VOCE,
DS_ELEMENTO_VOCE,
CD_VOCE,
TI_COMPETENZA_RESIDUO,
DT_REGISTRAZIONE,
ESERCIZIO_ORI_OBB_ACR,
PG_OBB_ACR,
FL_ANNOTAZIONE,
CD_TERZO,
DENOMINAZIONE_SEDE,
DS_OBB_ACR,
IM_VOCE,
IM_VOCE_NO_DOCCONT)
select aId
,aKey
,'C'
,i
,aSaldo.esercizio
--aSaldo.cd_cds
,decode(aObb.fl_pgiro, 'Y', aObb.cd_cds, aSaldo.cd_cds)
,aSaldo.ti_appartenenza
,aSaldo.ti_gestione
,aSaldo.cd_elemento_voce
,(select ds_elemento_voce from elemento_voce where esercizio = aSaldo.esercizio and ti_appartenenza = aSaldo.ti_appartenenza and
ti_gestione = aSaldo.ti_gestione and cd_elemento_voce = aSaldo.cd_elemento_voce)
,aSaldo.cd_voce
,aSaldo.ti_competenza_residuo
,aObb.dt_registrazione
,aObb.esercizio_originale
,aObb.pg_obbligazione
,decode(aObb.fl_pgiro,'Y','SI','NO')
,aObb.cd_terzo
,t.denominazione_sede
,aObb.ds_obbligazione
,aObb.aTot
,aObb.aTot - aObb.im_voce_doc_cont
from terzo t
where t.cd_terzo = aObb.cd_terzo;
end loop; -- fine loop impegni COMPETENZA/RESIDUI
else
-- entrate >>> accertamenti competenza e residui
for aAcc in (select acc.cd_cds,
acc.esercizio,
acc.esercizio_originale,
acc.pg_accertamento,
acc.dt_registrazione,
acc.fl_pgiro,
acc.cd_terzo,
acc.ds_accertamento,
acc.im_accertamento,
acc.im_accertamento - sum(accs.im_associato_doc_contabile) im_no_doc_cont
from accertamento acc
,accertamento_scadenzario accs
where acc.cd_cds = aSaldo.cd_cds
and acc.esercizio = aVf.esercizio
and acc.ti_appartenenza = aVf.ti_appartenenza
and acc.ti_gestione = aVf.ti_gestione
and acc.cd_voce = aVf.cd_voce
and accs.cd_cds = acc.cd_cds
and accs.esercizio = acc.esercizio
and accs.esercizio_originale = acc.esercizio_originale
and accs.pg_accertamento = acc.pg_accertamento
and ((acc.esercizio = acc.esercizio_originale and aSaldo.ti_competenza_residuo = 'C') OR
(acc.esercizio > acc.esercizio_originale and aSaldo.ti_competenza_residuo = 'R'))
group by acc.cd_cds,
acc.esercizio,
acc.esercizio_originale,
acc.pg_accertamento,
acc.dt_registrazione,
acc.fl_pgiro,
acc.cd_terzo,
acc.ds_accertamento,
acc.im_accertamento
order by acc.esercizio_originale, acc.pg_accertamento) loop
i := i + 1;
insert into VPG_SINGOLO_CONTO (ID,
CHIAVE,
TIPO,
SEQUENZA,
ESERCIZIO,
CD_CDS,
TI_APPARTENENZA,
TI_GESTIONE,
CD_ELEMENTO_VOCE,
DS_ELEMENTO_VOCE,
CD_VOCE,
TI_COMPETENZA_RESIDUO,
DT_REGISTRAZIONE,
ESERCIZIO_ORI_OBB_ACR,
PG_OBB_ACR,
FL_ANNOTAZIONE,
CD_TERZO,
DENOMINAZIONE_SEDE,
DS_OBB_ACR,
IM_VOCE,
IM_VOCE_NO_DOCCONT)
select aId
,aKey
,'C'
,i
,aSaldo.esercizio
,aSaldo.cd_cds
,aSaldo.ti_appartenenza
,aSaldo.ti_gestione
,aSaldo.cd_elemento_voce
,(select ds_elemento_voce from elemento_voce where esercizio = aSaldo.esercizio and ti_appartenenza = aSaldo.ti_appartenenza and
ti_gestione = aSaldo.ti_gestione and cd_elemento_voce = aSaldo.cd_elemento_voce)
,aSaldo.cd_voce
,aSaldo.ti_competenza_residuo
,aAcc.dt_registrazione
,aAcc.esercizio_originale
,aAcc.pg_accertamento
,decode(aAcc.fl_pgiro,'Y','SI','NO')
,aAcc.cd_terzo
,t.denominazione_sede
,aAcc.ds_accertamento
,aAcc.im_accertamento
,aAcc.im_no_doc_cont
from terzo t
where t.cd_terzo = aAcc.cd_terzo;
end loop; -- fine loop accertamenti residui
end if; -- fine distinzione entrata/spesa
-- FINE inserimento record tipo C (obbligazioni/accertamenti)
-- inserimento record tipo D (mandati/reversali)
if aVoce.ti_gestione = 'S' then
-- spese >>> mandati
for aDett in (select man.cd_cds,
man.esercizio,
man.pg_mandato,
man.ds_mandato,
aSaldo.ti_competenza_residuo,
man.dt_emissione,
decode(man.stato,'E','NO','SI') pagato,
mriga.esercizio_obbligazione,
mriga.esercizio_ori_obbligazione,
mriga.pg_obbligazione,
mriga.pg_obbligazione_scadenzario,
mriga.cd_terzo,
mriga.ds_mandato_riga,
obbsv.cd_voce,
DECODE(NVL(SUM(obbs.IM_SCADENZA),0),0,0,(SUM(obbsv.IM_VOCE)/SUM(obbs.IM_SCADENZA) )*SUM(MRIGA.IM_MANDATO_RIGA)) im_voce
--sum(obbsv.im_voce) im_voce
from mandato man,
mandato_riga mriga,
OBBLIGAZIONE_SCADENZARIO OBBS,
obbligazione_scad_voce obbsv
where man.cd_cds = mriga.cd_cds
and man.esercizio = mriga.esercizio
and man.pg_mandato = mriga.pg_mandato
And obbs.ESERCIZIO = mriga.ESERCIZIO
-- 27.02.2008 AGGIUNTA PER RADDOPPIAMENTO IMPORTO DOVUTO A RIGHE DI MANDATO CON FATTURE E NOTE
AND obbs.ESERCIZIO_ORIGINALE = mriga.ESERCIZIO_ORI_OBBLIGAZIONE
AND obbs.PG_OBBLIGAZIONE = mriga.PG_OBBLIGAZIONE
AND obbs.PG_OBBLIGAZIONE_SCADENZARIO = mriga.PG_OBBLIGAZIONE_SCADENZARIO
AND obbsv.CD_CDS = obbs.CD_CDS
AND obbsv.ESERCIZIO = obbs.ESERCIZIO
AND obbsv.ESERCIZIO_ORIGINALE = obbs.ESERCIZIO_ORIGINALE
AND obbsv.PG_OBBLIGAZIONE = obbs.PG_OBBLIGAZIONE
AND obbsv.PG_OBBLIGAZIONE_SCADENZARIO = obbs.PG_OBBLIGAZIONE_SCADENZARIO
-- 27.02.2008 fin qui
and man.stato <> 'A'
and man.cd_cds = aSaldo.cd_cds
and obbsv.cd_cds = mriga.cd_cds
and obbsv.esercizio = mriga.esercizio_obbligazione
and obbsv.esercizio_originale = mriga.esercizio_ori_obbligazione
and obbsv.pg_obbligazione = mriga.pg_obbligazione
and obbsv.pg_obbligazione_scadenzario = mriga.pg_obbligazione_scadenzario
and obbsv.esercizio = aVf.esercizio
and obbsv.ti_appartenenza = aVf.ti_appartenenza
and obbsv.ti_gestione = aVf.ti_gestione
and obbsv.cd_voce = aVf.cd_voce
and ((obbsv.esercizio = obbsv.esercizio_originale and aSaldo.ti_competenza_residuo = 'C') OR
(obbsv.esercizio > obbsv.esercizio_originale and aSaldo.ti_competenza_residuo = 'R'))
group by man.cd_cds,
man.esercizio,
man.pg_mandato,
man.ds_mandato,
aSaldo.ti_competenza_residuo,
man.dt_emissione,
decode(man.stato,'E','NO','SI'),
mriga.esercizio_obbligazione,
mriga.esercizio_ori_obbligazione,
mriga.pg_obbligazione,
mriga.pg_obbligazione_scadenzario,
mriga.cd_terzo,
mriga.ds_mandato_riga,
obbsv.cd_voce
order by man.cd_cds,
man.esercizio,
man.pg_mandato) loop
i := i + 1;
select cd_tipo_documento_cont into aCdTipoDocCont
from obbligazione
where cd_cds = aDett.cd_cds
and esercizio = aDett.esercizio_obbligazione
and esercizio_originale = aDett.esercizio_ori_obbligazione
and pg_obbligazione = aDett.pg_obbligazione;
-- se il mandato ? emesso su doc cont a consumo, l'importo visualizzato
-- deve essere im_mandato_riga, altrimenti aDett.im_voce
-- (vd. segnalazione 776)
if aCdTipoDocCont in ('IMP','IMP_RES') then
select nvl(sum(im_mandato_riga),0) into aImporto
from mandato_riga
where cd_cds = aDett.cd_cds
and esercizio = aDett.esercizio
and pg_mandato = aDett.pg_mandato
and esercizio_obbligazione = aDett.esercizio_obbligazione
and esercizio_ori_obbligazione = aDett.esercizio_ori_obbligazione
and pg_obbligazione = aDett.pg_obbligazione
and pg_obbligazione_scadenzario = aDett.pg_obbligazione_scadenzario;
else
aImporto := aDett.im_voce;
end if;
insert into VPG_SINGOLO_CONTO (ID,
CHIAVE,
TIPO,
SEQUENZA,
ESERCIZIO,
CD_CDS,
TI_APPARTENENZA,
TI_GESTIONE,
CD_ELEMENTO_VOCE,
DS_ELEMENTO_VOCE,
CD_VOCE,
TI_COMPETENZA_RESIDUO,
PG_MAN_REV,
DT_EMISSIONE,
FL_PAGATO,
CD_TERZO,
DENOMINAZIONE_SEDE,
DS_MAN_REV,
DS_MAN_REV_RIGA,
ESERCIZIO_ORI_OBB_ACR,
PG_OBB_ACR,
PG_OBB_ACR_SCADENZARIO,
IM_VOCE
)
select aId
,aKey
,'D'
,i
,aSaldo.esercizio
,aSaldo.cd_cds
,aSaldo.ti_appartenenza
,aSaldo.ti_gestione
,aSaldo.cd_elemento_voce
,(select ds_elemento_voce from elemento_voce where esercizio = aSaldo.esercizio and ti_appartenenza = aSaldo.ti_appartenenza and
ti_gestione = aSaldo.ti_gestione and cd_elemento_voce = aSaldo.cd_elemento_voce)
,aSaldo.cd_voce
,aSaldo.ti_competenza_residuo
,aDett.pg_mandato
,aDett.dt_emissione
,aDett.pagato
,aDett.cd_terzo
,t.denominazione_sede
,aDett.ds_mandato
,aDett.ds_mandato_riga
,aDett.esercizio_ori_obbligazione
,aDett.pg_obbligazione
,aDett.pg_obbligazione_scadenzario
,aImporto
from terzo t
where t.cd_terzo = aDett.cd_terzo;
end loop;
else
-- entrate >>> reversali
for aDett in (select rev.cd_cds,
rev.esercizio,
rev.pg_reversale,
decode(rev.stato,'E','NO','SI') incassata,
rev.dt_emissione,
aSaldo.ti_competenza_residuo,
rev.ds_reversale,
rriga.cd_terzo,
rriga.ds_reversale_riga,
rriga.esercizio_accertamento,
rriga.esercizio_ori_accertamento,
rriga.pg_accertamento,
rriga.pg_accertamento_scadenzario,
acc.cd_voce,
RRIGA.IM_REVERSALE_RIGA
from reversale rev,
reversale_riga rriga,
accertamento acc
where rriga.cd_cds = rev.cd_cds
and rriga.esercizio = rev.esercizio
and rriga.pg_reversale = rev.pg_reversale
and rev.stato <> 'A'
and rev.cd_cds = aSaldo.cd_cds
and acc.cd_cds = rriga.cd_cds
and acc.esercizio = rriga.esercizio_accertamento
and acc.esercizio_originale = rriga.esercizio_ori_accertamento
and acc.pg_accertamento = rriga.pg_accertamento
and acc.esercizio = aVf.esercizio
and acc.TI_APPARTENENZA = aVf.ti_appartenenza
and acc.TI_GESTIONE = aVf.ti_gestione
and acc.cd_voce = aVf.cd_voce
and ((acc.esercizio = acc.esercizio_originale and aSaldo.ti_competenza_residuo = 'C') OR
(acc.esercizio > acc.esercizio_originale and aSaldo.ti_competenza_residuo = 'R'))
order by rev.cd_cds, rev.esercizio, rev.pg_reversale) loop
i := i + 1;
insert into VPG_SINGOLO_CONTO (ID,
CHIAVE,
TIPO,
SEQUENZA,
ESERCIZIO,
CD_CDS,
TI_APPARTENENZA,
TI_GESTIONE,
CD_ELEMENTO_VOCE,
DS_ELEMENTO_VOCE,
CD_VOCE,
TI_COMPETENZA_RESIDUO,
PG_MAN_REV,
DT_EMISSIONE,
FL_PAGATO,
CD_TERZO,
DENOMINAZIONE_SEDE,
DS_MAN_REV,
DS_MAN_REV_RIGA,
ESERCIZIO_ORI_OBB_ACR,
PG_OBB_ACR,
PG_OBB_ACR_SCADENZARIO,
IM_VOCE
)
select aId
,aKey
,'D'
,i
,aSaldo.esercizio
,aSaldo.cd_cds
,aSaldo.ti_appartenenza
,aSaldo.ti_gestione
,aSaldo.cd_elemento_voce
,(select ds_elemento_voce from elemento_voce where esercizio = aSaldo.esercizio and ti_appartenenza = aSaldo.ti_appartenenza and
ti_gestione = aSaldo.ti_gestione and cd_elemento_voce = aSaldo.cd_elemento_voce)
,aSaldo.cd_voce
,aSaldo.ti_competenza_residuo
,aDett.pg_reversale
,aDett.dt_emissione
,aDett.incassata
,aDett.cd_terzo
,t.denominazione_sede
,aDett.ds_reversale
,aDett.ds_reversale_riga
,aDett.esercizio_ori_accertamento
,aDett.pg_accertamento
,aDett.pg_accertamento_scadenzario
,aDett.im_REVERSALE_RIGA
from terzo t
where t.cd_terzo = aDett.cd_terzo;
end loop;
end if; -- fine distinzione mandati/reversali
-- FINE inserimento record tipo D (mandati/reversali)
END LOOP; -- DEI SALDI
end loop; -- DELLA VOCE
-- eliminazione record in v_stm_paramin_sing_conto
delete v_stm_paramin_sing_conto
where id_report = aIdRpt;
end;
/
© 2015 - 2024 Weber Informatics LLC | Privacy Policy