--3800 --3801 -- 20161103 DROP INDEX CFBILPRE118PFIN; CREATE OR REPLACE PACKAGE BODY pkcontstampa AS ------------------ Funzioni di utilità per le stampe WEB ------------------ /*************************************************************************** * Funzioni per la gestione della tabella fnVWPrnCFCapitoliPegGestLkp * ***************************************************************************/ -- Autore: D. Lustri (9/5/2000) FUNCTION fnVWPrnCFCapitoliPegGestLkp ( lEser IN pkType.tyStringa%type, -- VWPrnCFCapitoliPegGest lCodCdr IN pkType.tyStringa%type, -- VWPrnCFCapitoliPegGest lApp IN pkType.tyStringa%type, -- VWPrnCFCapitoliPegGest lNPage IN OUT pkType.tyStringa%type, -- Numero di pagina richiesto ERRDIAG OUT pkType.tyStringa%type, -- Messaggio di errore lTCap OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegGest lTArt OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegGest lTDesAnagrCap OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegGest lTUEB OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegGest lTStanzini OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegGest lTAttuale OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegGest lTImpAcc OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegGest lTObiettivo OUT pkType.tyTStringa, lTPercObiet OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegfnVWGest lTIdCap OUT pkType.tyTStringa ) RETURN NUMERIC IS -- VWPrnCFCapitoliPegfnVWGest rowVWPrnCFCapitoliPegGest VWPrnCFCapitoliPegGest%rowType; lNRecMax number(9); ReturnError number(6); nRiga number(9) := 0; nRet number(9); bRet boolean; lTotStanzIni VWPrnCFCapitoliPegGest.StanzIni%type := 0; lTotAttuale VWPrnCFCapitoliPegGest.Attuale%type := 0; lTotImpAcc VWPrnCFCapitoliPegGest.ImpAcc%type := 0; lTotObiettivo VWPrnCFCapitoliPegGest.Obiettivo%type := 0; lPercTot pkType.tyStringa%type := 0; CURSOR curVWPrnCFCapitoliPegGest IS SELECT * FROM VWPrnCFCapitoliPegGest WHERE Eser = lEser AND CodCdR = lCodCdR AND App = lApp ORDER BY CodCdR, Cap, Art; BEGIN nRet := pkUtility.fnClcNRecMax( 'fnVWPrnCFCapitoliPegGestLkp', lNPage, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; END IF; lNRecMax := nRet; IF lEser IS NULL OR lCodCdr IS NULL OR lApp IS NULL OR lApp NOT IN ('S', 'E' ) THEN RETURN pkUtility.fnError( '5pkContStampa.fnVWPrnCFCapitoliPegGestLkp', -262, ERRDIAG ); END IF; OPEN curVWPrnCFCapitoliPegGest; LOOP FETCH curVWPrnCFCapitoliPegGest INTO rowVWPrnCFCapitoliPegGest; EXIT WHEN curVWPrnCFCapitoliPegGest%NOTFOUND; IF ( curVWPrnCFCapitoliPegGest%ROWCOUNT ) BETWEEN ( ( lNPage - 1 ) * lNRecMax + 1 ) AND ( lNPage * lNRecMax ) THEN nRiga := curVWPrnCFCapitoliPegGest%ROWCOUNT - ( lNPage - 1 ) * lNRecMax; lTIdCap( nRiga ) := rowVWPrnCFCapitoliPegGest.Id; lTCap( nRiga ) := rowVWPrnCFCapitoliPegGest.Cap; lTArt( nRiga ) := rowVWPrnCFCapitoliPegGest.Art; lTDesAnagrCap( nRiga ) := rowVWPrnCFCapitoliPegGest.DesAnagrCap; lTUEB( nRiga ) := rowVWPrnCFCapitoliPegGest.UEB; lTStanzini( nRiga ) := translate( translate( translate( to_char(rowVWPrnCFCapitoliPegGest.Stanzini,'99,999,999,999.99'),'.','*'),',','.'),'*',','); lTAttuale( nRiga ) := translate( translate( translate( to_char(rowVWPrnCFCapitoliPegGest.Attuale,'99,999,999,999.99'),'.','*'),',','.'),'*',','); lTImpAcc( nRiga ) := translate( translate( translate( to_char(rowVWPrnCFCapitoliPegGest.ImpAcc,'99,999,999,999.99'),'.','*'),',','.'),'*',','); lTObiettivo( nRiga ) := translate( translate( translate( to_char(rowVWPrnCFCapitoliPegGest.Obiettivo,'99,999,999,999.99'),'.','*'),',','.'),'*',','); IF NVL( rowVWPrnCFCapitoliPegGest.Attuale, 0 ) = 0 THEN lTPercObiet( nRiga ) := '-' ; ELSE lTPercObiet( nRiga ) := ROUND( NVL( ( rowVWPrnCFCapitoliPegGest.Obiettivo*100/rowVWPrnCFCapitoliPegGest.Attuale ),0),0)||'%' ; END IF; lTotStanzini := lTotStanzini + rowVWPrnCFCapitoliPegGest.Stanzini; lTotAttuale := lTotAttuale + rowVWPrnCFCapitoliPegGest.Attuale; lTotImpAcc := lTotImpAcc + rowVWPrnCFCapitoliPegGest.ImpAcc; lTotObiettivo := lTotObiettivo + rowVWPrnCFCapitoliPegGest.Obiettivo; END IF; END LOOP; lTIdCap( nRiga + 1 ) := ''; lTCap( nRiga + 1 ) := ''; lTArt( nRiga + 1 ) := ''; lTDesAnagrCap( nRiga + 1 ) := ''; lTUEB( nRiga + 1 ) := ''; lTStanzini( nRiga + 1 ) := TRANSLATE( TRANSLATE( TRANSLATE( to_char( lTotStanzIni , '99,999,999,999.99' ),'.','*'),',','.'),'*',','); lTAttuale( nRiga + 1) := TRANSLATE( TRANSLATE( TRANSLATE( to_char( lTotAttuale, '99,999,999,999.99' ),'.','*'),',','.'),'*',','); lTImpAcc( nRiga + 1 ) := TRANSLATE( TRANSLATE( TRANSLATE( to_char( lTotImpAcc, '99,999,999,999.99' ),'.','*'),',','.'),'*',','); lTObiettivo( nRiga + 1 ) := TRANSLATE( TRANSLATE( TRANSLATE( to_char( lTotObiettivo, '99,999,999,999.99' ),'.','*'),',','.'),'*',','); IF curVWPrnCFCapitoliPegGest%ROWCOUNT <> 0 THEN IF ROUND ( NVL( lTotAttuale, 0 ),0 ) = 0 THEN lTPercObiet( nRiga + 1 ) := '-' ; ELSE lTPercObiet( nRiga + 1 ) := ROUND( NVL( lTotObiettivo*100/ lTotAttuale, 0 ),0 )||'%'; END IF; END IF; lNPage := CEIL( curVWPrnCFCapitoliPegGest%ROWCOUNT / lNRecMax ) || '/' || curVWPrnCFCapitoliPegGest%ROWCOUNT; IF curVWPrnCFCapitoliPegGest%ROWCOUNT = 0 THEN RAISE NO_DATA_FOUND; END IF; CLOSE curVWPrnCFCapitoliPegGest; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN IF curVWPrnCFCapitoliPegGest%ISOPEN THEN CLOSE curVWPrnCFCapitoliPegGest; END IF; ROLLBACK; RETURN pkUtility.fnError( '5pkContStampa.fnVWPrnCFCapitoliPegGestLkp', SQLCODE, ERRDIAG ); END fnVWPrnCFCapitoliPegGestLkp; /************************************************************************** * Funzioni per la gestione della tabella fnVWPrnCFCapitoliPegAutLkp * **************************************************************************/ -- Autore: D. Lustri (9/5/2000) FUNCTION fnVWPrnCFCapitoliPegAutLkp ( lEser IN pkType.tyStringa%type, -- VWPrnCFCapitoliPegAut lCodCdr IN pkType.tyStringa%type, -- VWPrnCFCapitoliPegAut lApp IN pkType.tyStringa%type, -- VWPrnCFCapitoliPegAut lNPage IN OUT pkType.tyStringa%type, -- numero di pagina richiesta ERRDIAG OUT pkType.tyStringa%type, -- messaggio d'errore lTCap OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegAut lTDesAnagrCap OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegAut lTUEB OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegAut lTStanzini OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegAut lTAttuale OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegAut lTImpAcc OUT pkType.tyTStringa, -- VWPrnCFCapitoliPegAut lTObiettivo OUT pkType.tyTStringa, lTPercObiet OUT pkType.tyTStringa ) RETURN NUMERIC IS -- VWPrnCFCapitoliPegAut rowVWPrnCFCapitoliPegAut VWPrnCFCapitoliPegAut%rowType; lNRecMax number(9); ReturnError number(6); nRiga number(9):= 0; nRet number(9); bRet boolean; lTotStanzini VWPrnCFCapitoliPegAut.SumStanzini%type := 0; lTotAttuale VWPrnCFCapitoliPegAut.SumAttuale%type := 0; lTotImpAcc VWPrnCFCapitoliPegAut.SumImpAcc%type := 0; lTotObiettivo VWPrnCFCapitoliPegAut.SumObiettivo%type := 0; lPercTot pkType.tyStringa%type := 0; CURSOR curVWPrnCFCapitoliPegAut IS SELECT * FROM VWPrnCFCapitoliPegAut WHERE Eser = lEser AND CodCdR = lCodCdR AND App = lApp ORDER BY CodCdR, Cap; BEGIN nRet := pkUtility.fnClcNRecMax( 'fnVWPrnCFCapitoliPegGestLkp', lNPage, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; END IF; lNRecMax := nRet; IF lEser IS NULL OR lCodCdr IS NULL OR lApp IS NULL OR lApp NOT IN ('S', 'E' ) THEN RETURN pkUtility.fnError( '5pkContStampa.fnVWPrnCFCapitoliPegAutLkp', -262, ERRDIAG ); END IF; /* SELECT TRANSLATE ( to_char ( SUM ( SumStanzini ) , '99,999,999,999' ) , ',' , '.' ), TRANSLATE ( to_char ( SUM ( SumAttuale ) , '99,999,999,999' ) , ',' , '.' ), TRANSLATE ( to_char ( SUM ( SumImpAcc ) , '99,999,999,999' ) , ',' , '.' ), TRANSLATE ( to_char ( SUM ( SumObiettivo) , '99,999,999,999' ) , ',' , '.' ), (SUM ( SumObiettivo))*100/(SUM ( SumAttuale )) INTO lTotStanzini, lTotAttuale, lTotImpAcc, lTotObiettivo, lPercTot FROM VWPrnCFCapitoliPegAut WHERE ( ( Eser = lEser ) AND ( CodCdR = lCodCdR ) AND ( App = lApp ) ) GROUP BY CodCdR, App; */ OPEN curVWPrnCFCapitoliPegAut; LOOP FETCH curVWPrnCFCapitoliPegAut INTO rowVWPrnCFCapitoliPegAut; EXIT WHEN curVWPrnCFCapitoliPegAut%NOTFOUND; IF ( curVWPrnCFCapitoliPegAut%ROWCOUNT ) BETWEEN ( ( lNPage - 1 ) * lNRecMax + 1 ) AND ( lNPage * lNRecMax ) THEN nRiga := curVWPrnCFCapitoliPegAut%ROWCOUNT - ( lNPage - 1 ) * lNRecMax; lTCap( nRiga ) := rowVWPrnCFCapitoliPegAut.Cap; lTDesAnagrCap( nRiga ) := rowVWPrnCFCapitoliPegAut.DesAnagrCap; lTUEB( nRiga ) := rowVWPrnCFCapitoliPegAut.UEB; lTStanzini( nRiga ) := translate(translate(translate(to_char(rowVWPrnCFCapitoliPegAut.SumStanzini,'99,999,999,999.99'),'.','*'),',','.'),'*',','); lTAttuale( nRiga ) := translate(translate(translate(to_char(rowVWPrnCFCapitoliPegAut.SumAttuale,'99,999,999,999.99'),'.','*'),',','.'),'*',','); lTImpAcc( nRiga ) := translate(translate(translate(to_char(rowVWPrnCFCapitoliPegAut.SumImpAcc,'99,999,999,999.99'),'.','*'),',','.'),'*',','); lTObiettivo( nRiga ) := translate(translate(translate(to_char(rowVWPrnCFCapitoliPegAut.SumObiettivo,'99,999,999,999.99'),'.','*'),',','.'),'*',','); IF NVL( rowVWPrnCFCapitoliPegAut.SumAttuale, 0 ) = 0 THEN lTPercObiet( nRiga ) := '-'; ELSE lTPercObiet( nRiga ) := (ROUND(NVL((rowVWPrnCFCapitoliPegAut.SumObiettivo*100/rowVWPrnCFCapitoliPegAut.SumAttuale ),0),0)||'%'); END IF; lTotStanzini := lTotStanzini + rowVWPrnCFCapitoliPegAut.SumStanzini; lTotAttuale := lTotAttuale + rowVWPrnCFCapitoliPegAut.SumAttuale; lTotImpAcc := lTotImpAcc + rowVWPrnCFCapitoliPegAut.SumImpAcc; lTotObiettivo := lTotObiettivo + rowVWPrnCFCapitoliPegAut.SumObiettivo; END IF; END LOOP; lTCap( nRiga + 1 ) := ''; lTDesAnagrCap( nRiga + 1 ) := ''; lTUEB( nRiga + 1 ) := ''; lTStanzini( nRiga + 1 ) := TRANSLATE( TRANSLATE( TRANSLATE( to_char ( lTotStanzIni , '99,999,999,999.99' ),'.','*'),',','.'),'*',','); lTAttuale( nRiga + 1) := TRANSLATE( TRANSLATE( TRANSLATE( to_char ( lTotAttuale, '99,999,999,999.99' ),'.','*'),',','.'),'*',','); lTImpAcc( nRiga + 1 ) := TRANSLATE( TRANSLATE( TRANSLATE( to_char ( lTotImpAcc, '99,999,999,999.99' ),'.','*'),',','.'),'*',','); lTObiettivo( nRiga + 1 ) := TRANSLATE( TRANSLATE( TRANSLATE( to_char ( lTotObiettivo, '99,999,999,999.99' ),'.','*'),',','.'),'*',','); IF curVWPrnCFCapitoliPegAut%ROWCOUNT <> 0 THEN IF NVL( lTotAttuale, 0 ) = 0 THEN lTPercObiet( nRiga + 1 ) := '-'; ELSE lTPercObiet( nRiga + 1 ) := ( ROUND( NVL( lTotObiettivo*100/ lTotAttuale,0 ),0 )||'%' ); END IF; END IF; lNPage := CEIL( curVWPrnCFCapitoliPegAut%ROWCOUNT / lNRecMax ) || '/' || curVWPrnCFCapitoliPegAut%ROWCOUNT; IF curVWPrnCFCapitoliPegAut%ROWCOUNT = 0 THEN RAISE NO_DATA_FOUND; END IF; CLOSE curVWPrnCFCapitoliPegAut; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN IF curVWPrnCFCapitoliPegAut%ISOPEN THEN CLOSE curVWPrnCFCapitoliPegAut; END IF; ROLLBACK; RETURN pkUtility.fnError( '5pkContStampa.fnVWPrnCFCapitoliPegAutLkp', SQLCODE, ERRDIAG ); END fnVWPrnCFCapitoliPegAutLkp; /************************************************************************** * Funzione di servizio per il Cambio Esercizio * **************************************************************************/ -- Autore: Torlone M. B. (05/07/2000) FUNCTION fnCambioEser ( lCodSes IN pkType.tyStringa%type, -- codice della sessione utente ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore nRet number(9); BEGIN ERRDIAG := ' '; UPDATE CFOpzioni SET Opzione = '' WHERE DesOpzione IN ( 'DTADUPPEGPREV', 'DTADUPPEGPLUR1', 'DTADUPPEGPLUR2', 'DTACONFPEGPREV', 'DTACONFPEGPLUR1', 'DTACONFPEGPLUR2', 'DTAGENBILPREV', 'DTAGENBILPLUR' ); -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFOpzioni', 'U', 'Cambio Esercizio', NULL, NULL, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFOpzioni', 'U', 'Il Cambio Esercizio ha dato l''errore: ' || SQLCODE, NULL, NULL, NULL, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( 'pkContStampa.fnCambioEser', SQLCODE, ERRDIAG ); END fnCambioEser; /************************************************************************** * Funzione per la stampa PEGPerCDC * **************************************************************************/ -- Autore: Torelli Roberto (20/07/2000) -- Al nome CodCdR corrisponde il NumCdR !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FUNCTION fnVwPRNPEGPerCDC ( lEser IN pkType.tyStringa%type, -- Esercizio lCdCIni IN pkType.tyStringa%type, -- Codice Centro di Costo Iniziale lCdCFin IN pkType.tyStringa%type, -- Codice Centro di Costo Finale lApp IN pkType.tyStringa%type, -- Appartenenza E, S o NULL lCodSes IN pkType.tyStringa%type, -- codice della sessione utente lFlEserPrec IN pkType.tyStringa%type, -- 'S' = stampa con esercizio precedente Name OUT pkType.tyStringa%type, -- Nome della vista creata ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS K number; nCur1 integer; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sCODSTPDLGS118 CFOPZIONI.opzione%TYPE; BEGIN Name := ' '; ERRDIAG := ' '; IF lCodSes = 0 OR lCodSes IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(46, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNPEGPerCDC', -499, ERRDIAG ); ELSE IF lEser IS NULL OR lCdCIni IS NULL OR lCdCFin IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(47, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNPEGPerCDC', -499, ERRDIAG ); END IF; END IF; -- seleziono l'Opzione necessarie SELECT MAX( Opzione ) INTO sCODSTPDLGS118 FROM CFOpzioni WHERE DesOpzione = 'CODSTPDLGS118'; nCur1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGPerCDC' || lCodSes || ' AS ' || 'SELECT CFPEGPerCDC.IdCapitolo||CFPEGPerCDC.CodCdC Id, ' || 'CFPEGPerCDC.IdCapitolo, CFPEGPerCDC.CodCdC, ' || ' CFCentriDiCostoRicavo.DesCdC || ''' || sSeparat || ''' || CFCentriDiCostoRicavo.DesCdC__1 || ''' || sSeparat || ''' || CFCentriDiCostoRicavo.DesCdC__2 || ''' || sSeparat || ''' || CFCentriDiCostoRicavo.DesCdC__3 DesCdC, '|| 'CFResponsabili.CodResp, '|| 'CFCentriResponsabilitaCap.CodResp CodRespCap, '|| -- CodResp del capitolo 'CFResponsabili.DesResp, ' || 'CFDesCentriResp.NumCdR CodCdR, ' || -- CFDesCentriResp.DesCdR DesCdR__0, ' CFDesCentriResp.DesCdR || ''' || sSeparat || ''' || CFDesCentriResp.DesCdR__1 || ''' || sSeparat || ''' || CFDesCentriResp.DesCdR__2 || ''' || sSeparat || ''' || CFDesCentriResp.DesCdR__3 DesCdR, ' || 'CFCapitoliPEG.Eser, CFCapitoliPEG.App, ' || 'DECODE(' || '''' || sCODSTPDLGS118 || '''' || ', ''N'', CFCapitoliPEG.UEB, CFCapitoliPEG.UEB118 ) UEB, '|| ' CFCapitoliPEG.Cap, CFCapitoliPEG.Art, ' || ' CFAnagraficaCapitoli.DesAnagrCap || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__1 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__2 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__3 DesAnagrCap, ' || 'CFPEGPerCDC.ImpSta, ' || 'CFPEGPerCDC.AssestAnnPrec, '|| 'NVL( (CFPEGPerCDC.ImpSta + CFPEGPerCDC.ImpVarAum - CFPEGPerCDC.ImpVarDim), 0 ) Attuale, ' || ' NVL( ( SELECT SUM( CFDettAccertamenti.Impini + pkViewForm.fnTotVar( CFDettAccertamenti.IdAcc, NumDettAcc ) ) FROM CFAccertamenti, CFDettAccertamenti WHERE CFAccertamenti.IdCapitolo = CFPEGPerCDC.IdCapitolo AND CFAccertamenti.IdAcc = CFDettAccertamenti.IdAcc AND CFDettAccertamenti.CodCdC = CFPEGPerCDC.CodCdC ), 0 ) + NVL( ( SELECT SUM( CFDettImpegni.Impini + pkViewForm.fnTotStorImp ( CFDettImpegni.IdImp, NumDettImp ) ) FROM CFImpegni, CFDettImpegni WHERE CFImpegni.IdCapitolo = CFPEGPerCDC.IdCapitolo AND CFImpegni.IdImp = CFDettImpegni.IdImp AND CFDettImpegni.CodCdC = CFPEGPerCDC.CodCdC ), 0 ) AccImp, ' || '( CFPEGPerCDC.ImpSta + CFPEGPerCDC.ImpVarAum - CFPEGPerCDC.ImpVarDim - NVL( ( SELECT SUM( CFDettAccertamenti.Impini + pkViewForm.fnTotVar( CFDettAccertamenti.IdAcc, NumDettAcc ) ) FROM CFAccertamenti, CFDettAccertamenti WHERE CFAccertamenti.IdCapitolo = CFPEGPerCDC.IdCapitolo AND CFAccertamenti.IdAcc = CFDettAccertamenti.IdAcc AND CFDettAccertamenti.CodCdC = CFPEGPerCDC.CodCdC ), 0 ) - NVL( ( SELECT SUM( CFDettImpegni.Impini + pkViewForm.fnTotStorImp ( CFDettImpegni.IdImp, NumDettImp ) ) FROM CFImpegni, CFDettImpegni WHERE CFImpegni.IdCapitolo = CFPEGPerCDC.IdCapitolo AND CFImpegni.IdImp = CFDettImpegni.IdImp AND CFDettImpegni.CodCdC = CFPEGPerCDC.CodCdC ), 0 ) ) Disponibilità, ' || ' FlCopFplur, '|| ' NVL( ( SELECT SUM( pkViewForm.fnTotDettRev( CFDettAccertamenti.IdAcc, CFDettAccertamenti.NumDettAcc ) - pkViewForm.fnStorRevTot ( CFDettAccertamenti.IdAcc, NumDettAcc )) FROM CFAccertamenti, CFDettAccertamenti WHERE CFAccertamenti.IdCapitolo = CFPEGPerCDC.IdCapitolo AND CFAccertamenti.IdAcc = CFDettAccertamenti.IdAcc AND CFDettAccertamenti.CodCdC = CFPEGPerCDC.CodCdC ), 0 ) + NVL( ( SELECT SUM( pkViewForm.fnTotDettMand( CFDettImpegni.IdImp, CFDettImpegni.NumDettImp ) - pkViewForm.fnStorMandTot ( CFDettImpegni.IdImp, NumDettImp )) FROM CFImpegni, CFDettImpegni WHERE CFImpegni.IdCapitolo = CFPEGPerCDC.IdCapitolo AND CFImpegni.IdImp = CFDettImpegni.IdImp AND CFDettImpegni.CodCdC = CFPEGPerCDC.CodCdC ), 0 ) RevMand, ' || ' NVL( ( SELECT SUM( CFDettAccertamenti.Impini ) + SUM( pkViewForm.fnTotVar( CFDettAccertamenti.IdAcc, NumDettAcc )) - SUM( pkViewForm.fnTotDettRev( CFDettAccertamenti.IdAcc, CFDettAccertamenti.NumDettAcc ) ) + SUM( pkViewForm.fnStorRevTot ( CFDettAccertamenti.IdAcc, NumDettAcc )) FROM CFAccertamenti, CFDettAccertamenti WHERE CFAccertamenti.IdCapitolo = CFPEGPerCDC.IdCapitolo AND CFAccertamenti.IdAcc = CFDettAccertamenti.IdAcc AND CFDettAccertamenti.CodCdC = CFPEGPerCDC.CodCdC ), 0 ) + NVL( ( SELECT SUM( CFDettImpegni.Impini ) + SUM( pkViewForm.fnTotStorImp ( CFDettImpegni.IdImp, NumDettImp ) ) - SUM( pkViewForm.fnTotDettMand( CFDettImpegni.IdImp, CFDettImpegni.NumDettImp ) ) + SUM( pkViewForm.fnStorMandTot( CFDettImpegni.IdImp, NumDettImp )) FROM CFImpegni, CFDettImpegni WHERE CFImpegni.IdCapitolo = CFPEGPerCDC.IdCapitolo AND CFImpegni.IdImp = CFDettImpegni.IdImp AND CFDettImpegni.CodCdC = CFPEGPerCDC.CodCdC ), 0 ) DispRevMand ' || 'FROM CFCapitoliPEG, CFCentriDiCostoRicavo, CFCentriResponsabilita, CFResponsabili, ' || 'CFCentriResponsabilita CFCentriResponsabilitaCap, '|| 'CFPEGPerCDC, CFAnagraficaCapitoli, CFDesCentriResp ' || 'WHERE CFPEGPerCDC.CodCdC = CFCentriDiCostoRicavo.CodCdC AND ' || 'CFPEGPerCDC.IdCapitolo = CFCapitoliPEG.IdCapitolo AND ' || 'CFCapitoliPEG.CodCdR = CFCentriResponsabilitaCap.CodCdR AND '||-- ricerca resposabile del capitolo 'CFCentriDiCostoRicavo.CodResp = CFResponsabili.CodResp AND ' || 'CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND ' || 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND ' || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND ' || 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND ' || 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND ' || '( CFPEGPerCDC.CodCdC BETWEEN ' || lCdCIni || ' AND ' || lCdCFin ||' ) AND ' || '( CFCapitoliPEG.App = ' || '''' || UPPER(lApp) || '''' || ' OR ' || '''' || UPPER(lApp) || '''' || ' IS NULL ) AND ' || '( CFCapitoliPEG.Eser = ' || lEser || ' OR ( CFCapitoliPEG.Eser = ' || TO_NUMBER( lEser - 2 ) || ' AND '''|| lFlEserPrec ||''' = ''S'' ) ) ', dbms_sql.v7 ); K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.close_CURSOR( nCur1 ); INSERT INTO CFContrView VALUES ( 'vwPRNPEGPerCDC'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; Name := 'vwPRNPEGPerCDC' || lCodSes; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF DBMS_SQL.IS_OPEN( nCur1 ) THEN DBMS_SQL.CLOSE_CURSOR( nCur1 ); END IF; RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNPEGPerCDC', SQLCODE, ERRDIAG ); END fnVwPRNPEGPerCDC; /************************************************************************** * Funzione per il riempimento della tabella CFStpPEGCDCPrec * * relativa alla stampa del PEG per CDC con anno precedente * **************************************************************************/ -- Autore: Torelli Roberto (27/06/2000) FUNCTION fnCFStpPEGCDCPrec ( lEser IN pkType.tyStringa%type, lCdCIni IN pkType.tyStringa%type, -- Codice Centro di Costo Iniziale lCdCFin IN pkType.tyStringa%type, -- Codice Centro di Costo Finale lApp IN pkType.tyStringa%type, -- Appartenenza E, S o NULL lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE tyRec IS RECORD ( Id number(13), IdCapitolo number(9), CodCdC number(4), DesCdC__0 varchar2(255), DesCdC__1 varchar2(255), DesCdC__2 varchar2(255), DesCdC__3 varchar2(255), DesCdC varchar2(2000), CodResp number(4), CodRespCap number(4), DesResp varchar2(255), CodCdR number(4), DesCdR__0 varchar2(255), DesCdR__1 varchar2(255), DesCdR__2 varchar2(255), DesCdR__3 varchar2(255), DesCdR varchar2(2000), Eser number(4), App varchar2(1), UEB number(7), Cap number(8), Art number(3), DesAnagrCap__0 varchar2(255), DesAnagrCap__1 varchar2(255), DesAnagrCap__2 varchar2(255), DesAnagrCap__3 varchar2(255), DesAnagrCap varchar2(2000), ImpSta number(16,2), Attuale number(16,2), AssestAnnPrec number(16,2), AccImp number(16,2), AttualePrec number(16,2), Disponibilita number(16,2), FlCopFPlur VARCHAR2(1) ); rowvwPRNPEGPerCDC tyRec; NameView pkType.tyStringa%type; nRet number(9); K Integer; nCur1 integer; lTimeStamp CFStpPEGCDCPrec.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento lTDesCdC pkType.tyTStringa; lTDesCdR pkType.tyTStringa; lTDesAnagrCap pkType.tyTStringa; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; nLast NUMBER(9); BEGIN ERRDIAG := ' '; DELETE CFStpPEGCDCPrec; nRet := fnVwPRNPEGPerCDC( lEser, lCdCIni, lCdCFin, lApp, lCodSes, 'S', NameView, ERRDIAG ); nCur1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( nCur1 , 'SELECT * ' || 'FROM ' || NameView || ' ORDER BY Eser DESC', dbms_sql.v7 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 1, rowvwPRNPEGPerCDC.Id ); DBMS_SQL.DEFINE_COLUMN( nCur1, 2, rowvwPRNPEGPerCDC.IdCapitolo ); DBMS_SQL.DEFINE_COLUMN( nCur1, 3, rowvwPRNPEGPerCDC.CodCdC ); DBMS_SQL.DEFINE_COLUMN( nCur1, 4, rowvwPRNPEGPerCDC.DesCdC, 2000 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 5, rowvwPRNPEGPerCDC.CodResp ); DBMS_SQL.DEFINE_COLUMN( nCur1, 6, rowvwPRNPEGPerCDC.CodRespCap ); DBMS_SQL.DEFINE_COLUMN( nCur1, 7, rowvwPRNPEGPerCDC.DesResp, 255 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 8, rowvwPRNPEGPerCDC.CodCdR ); DBMS_SQL.DEFINE_COLUMN( nCur1, 9, rowvwPRNPEGPerCDC.DesCdR, 2000 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 10, rowvwPRNPEGPerCDC.Eser ); DBMS_SQL.DEFINE_COLUMN( nCur1, 11, rowvwPRNPEGPerCDC.App, 1 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 12, rowvwPRNPEGPerCDC.UEB ); DBMS_SQL.DEFINE_COLUMN( nCur1, 13, rowvwPRNPEGPerCDC.Cap ); DBMS_SQL.DEFINE_COLUMN( nCur1, 14, rowvwPRNPEGPerCDC.Art ); DBMS_SQL.DEFINE_COLUMN( nCur1, 15, rowvwPRNPEGPerCDC.DesAnagrCap, 2000 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 16, rowvwPRNPEGPerCDC.ImpSta ); DBMS_SQL.DEFINE_COLUMN( nCur1, 17, rowvwPRNPEGPerCDC.AssestAnnPrec ); DBMS_SQL.DEFINE_COLUMN( nCur1, 18, rowvwPRNPEGPerCDC.Attuale ); DBMS_SQL.DEFINE_COLUMN( nCur1, 19, rowvwPRNPEGPerCDC.AccImp ); DBMS_SQL.DEFINE_COLUMN( nCur1, 20, rowvwPRNPEGPerCDC.Disponibilita ); DBMS_SQL.DEFINE_COLUMN( nCur1, 21, rowvwPRNPEGPerCDC.FlCopFPlur,1 ); K := DBMS_SQL.EXECUTE( nCur1 ); LOOP IF DBMS_SQL.FETCH_ROWS( nCur1 ) > 0 THEN DBMS_SQL.COLUMN_VALUE( nCur1, 1, rowvwPRNPEGPerCDC.Id ); DBMS_SQL.COLUMN_VALUE( nCur1, 2, rowvwPRNPEGPerCDC.IdCapitolo ); DBMS_SQL.COLUMN_VALUE( nCur1, 3, rowvwPRNPEGPerCDC.CodCdC ); DBMS_SQL.COLUMN_VALUE( nCur1, 4, rowvwPRNPEGPerCDC.DesCdC ); DBMS_SQL.COLUMN_VALUE( nCur1, 5, rowvwPRNPEGPerCDC.CodResp ); DBMS_SQL.COLUMN_VALUE( nCur1, 6, rowvwPRNPEGPerCDC.CodRespCap ); DBMS_SQL.COLUMN_VALUE( nCur1, 7, rowvwPRNPEGPerCDC.DesResp ); DBMS_SQL.COLUMN_VALUE( nCur1, 8, rowvwPRNPEGPerCDC.CodCdR ); DBMS_SQL.COLUMN_VALUE( nCur1, 9, rowvwPRNPEGPerCDC.DesCdR ); DBMS_SQL.COLUMN_VALUE( nCur1, 10, rowvwPRNPEGPerCDC.Eser ); DBMS_SQL.COLUMN_VALUE( nCur1, 11, rowvwPRNPEGPerCDC.App ); DBMS_SQL.COLUMN_VALUE( nCur1, 12, rowvwPRNPEGPerCDC.UEB ); DBMS_SQL.COLUMN_VALUE( nCur1, 13, rowvwPRNPEGPerCDC.Cap ); DBMS_SQL.COLUMN_VALUE( nCur1, 14, rowvwPRNPEGPerCDC.Art ); DBMS_SQL.COLUMN_VALUE( nCur1, 15, rowvwPRNPEGPerCDC.DesAnagrCap ); DBMS_SQL.COLUMN_VALUE( nCur1, 16, rowvwPRNPEGPerCDC.ImpSta ); DBMS_SQL.COLUMN_VALUE( nCur1, 17, rowvwPRNPEGPerCDC.AssestAnnPrec ); DBMS_SQL.COLUMN_VALUE( nCur1, 18, rowvwPRNPEGPerCDC.Attuale ); DBMS_SQL.COLUMN_VALUE( nCur1, 19, rowvwPRNPEGPerCDC.AccImp ); DBMS_SQL.COLUMN_VALUE( nCur1, 20, rowvwPRNPEGPerCDC.Disponibilita ); DBMS_SQL.COLUMN_VALUE( nCur1, 21, rowvwPRNPEGPerCDC.FlCopFPlur ); IF rowvwPRNPEGPerCDC.Eser = lEser THEN -- Split delle descrizioni nelle 4 lingue: ------------------------- -- Split di DesCdC: nRet := pkUtility.fnrealsplit(rowvwPRNPEGPerCDC.DesCdC,sSeparat,'',nLast,ERRDIAG,lTDesCdC); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Inizializzo le posizioni rimanenti: FOR J In (nLast + 1)..4 LOOP lTDesCdC(J) := NULL; END LOOP; -- Split di DesCdR: nRet := pkUtility.fnrealsplit(rowvwPRNPEGPerCDC.DesCdR,sSeparat,'',nLast,ERRDIAG,lTDesCdR); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Inizializzo le posizioni rimanenti: FOR J In (nLast + 1)..4 LOOP lTDesCdR(J) := NULL; END LOOP; -- Split di DesAnagrCap: nRet := pkUtility.fnrealsplit(rowvwPRNPEGPerCDC.DesAnagrCap,sSeparat,'',nLast,ERRDIAG,lTDesAnagrCap); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Inizializzo le posizioni rimanenti: FOR J In (nLast + 1)..4 LOOP lTDesAnagrCap(J) := NULL; END LOOP; -------------------------------------------------------------------- INSERT INTO CFStpPEGCDCPrec( Id, IdCapitolo, CodCdC, DesCdC, DesCdC__1, DesCdC__2, DesCdC__3, CodResp, CodRespCap, DesResp, CodCdR, DesCdR, DesCdR__1, DesCdR__2, DesCdR__3, Eser, App, UEB, Cap, Art, DesAnagrCap, DesAnagrCap__1, DesAnagrCap__2, DesAnagrCap__3, ImpSta, Attuale, Disponibilita, FlCopFPlur, CodSes, TmsLock ) VALUES ( rowvwPRNPEGPerCDC.Id, rowvwPRNPEGPerCDC.IdCapitolo, rowvwPRNPEGPerCDC.CodCdC, lTDesCdC(1), lTDesCdC(2), lTDesCdC(3), lTDesCdC(4), rowvwPRNPEGPerCDC.CodResp, rowvwPRNPEGPerCDC.CodRespCap, rowvwPRNPEGPerCDC.DesResp, rowvwPRNPEGPerCDC.CodCdR, lTDesCdR(1), lTDesCdR(2), lTDesCdR(3), lTDesCdR(4), rowvwPRNPEGPerCDC.Eser, rowvwPRNPEGPerCDC.App, rowvwPRNPEGPerCDC.UEB, rowvwPRNPEGPerCDC.Cap, rowvwPRNPEGPerCDC.Art, lTDesAnagrCap(1), lTDesAnagrCap(2), lTDesAnagrCap(3), lTDesAnagrCap(4), rowvwPRNPEGPerCDC.Attuale, rowvwPRNPEGPerCDC.AssestAnnPrec, rowvwPRNPEGPerCDC.Disponibilita, rowvwPRNPEGPerCDC.FlCopFPlur, 0, lTimeStamp ); ELSE UPDATE CFStpPEGCDCPrec SET AttualePrec = NVL( rowvwPRNPEGPerCDC.AccImp, 0 ) --NVL( rowvwPRNPEGPerCDC.AttualePrec, 0 ) WHERE rowvwPRNPEGPerCDC.UEB = UEB AND rowvwPRNPEGPerCDC.App = App AND rowvwPRNPEGPerCDC.Cap = Cap AND rowvwPRNPEGPerCDC.Art = Art AND rowvwPRNPEGPerCDC.CodCdC = CodCdC AND rowvwPRNPEGPerCDC.CodCdR = CodCdR AND rowvwPRNPEGPerCDC.FlCopFPlur = FlCopFPlur; END IF; ELSE EXIT; END IF; END LOOP; DBMS_SQL.CLOSE_CURSOR( nCur1 ); UPDATE CFStpPEGCDCPrec SET AttualePrec = 0 WHERE AttualePrec IS NULL; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN IF DBMS_SQL.IS_OPEN( nCur1 ) THEN DBMS_SQL.CLOSE_CURSOR( nCur1 ); END IF; ROLLBACK; RETURN pkUtility.fnError( '1pkContStampa.fnCFStpPEGCDCPrec', SQLCODE, ERRDIAG ); END fnCFStpPEGCDCPrec; /************************************************************************** * Funzione per la stampa del PEG * **************************************************************************/ -- Autore: Torelli Roberto (21/07/2000) -- Al nome CodCdR corrisponde il NumCdR !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FUNCTION fnVwPRNPEG ( lEser IN pkType.tyStringa%type, -- Esercizio lApp IN pkType.tyStringa%type, -- Appartenenza E, S o NULL per entrambi lCodCdRMin IN pkType.tyStringa%type, -- Codice Centro di Responsabilità Minimo lCodCdRMax IN pkType.tyStringa%type, -- Codice Centro di Responsabilità Massimo lCodSes IN pkType.tyStringa%type, -- codice della sessione utente NameSpesa OUT pkType.tyStringa%type, -- Nome della vista di Spesa creata NameEntrata OUT pkType.tyStringa%type, -- Nome della vista dell'Entrata creata ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS K number; nCur1 integer; MinCodCdR number(4) := NULL; MaxCodCdR number(4) := NULL; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sCODSTPDLGS118 CFOPZIONI.opzione%TYPE; BEGIN NameSpesa := ' '; NameEntrata := ' '; ERRDIAG := ' '; IF lCodSes = 0 OR lCodSes IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(46, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNPEG', -499, ERRDIAG ); ELSE IF lEser IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(47, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNPEG', -499, ERRDIAG ); END IF; END IF; IF lCodCdRMin IS NULL AND lCodCdRMax IS NULL THEN SELECT NVL( MIN( NumCdR ), 0 ), NVL( MAX( NumCdR ), 0 ) INTO MinCodCdR, MaxCodCdR FROM CFCentriResponsabilita; END IF; -- seleziono l'Opzione necessarie SELECT MAX( Opzione ) INTO sCODSTPDLGS118 FROM CFOpzioni WHERE DesOpzione = 'CODSTPDLGS118'; --------------------------- Entrata: UEB-UEB118 (Titolo) -------------------------------- IF UPPER( lApp ) = 'E' OR lApp IS NULL THEN nCur1 := DBMS_SQL.OPEN_CURSOR; IF sCODSTPDLGS118 = 'N' THEN -- UEB (Titolo) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGTitoliE' || lCodSes || ' AS ' || 'SELECT CodTit id, MAX( Eser ) Eser, MAX( App ) App, CodTit, ' || 'SUM( StanzIni ) StanzIniTit, SUM( ImpCassa ) ImpCassaTit ' || 'FROM CFCapitoliPEG ' || 'WHERE App = ''E'' AND ' || 'Eser = ' || lEser || ' GROUP BY CodTit', dbms_sql.v7 ); ELSE -- UEB118 (Titolo) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGTitoliE' || lCodSes || ' AS ' || 'SELECT Codice1 id, MAX( Eser ) Eser, MAX( CFCapitoliPEG.App ) App, Codice1 CodTit, ' || 'SUM( StanzIni ) StanzIniTit, SUM( ImpCassa ) ImpCassaTit ' || 'FROM CFCapitoliPEG, VWFRMCFAnagraficaUEB118 ' || 'WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND CFCapitoliPEG.App = ''E'' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY Codice1', dbms_sql.v7 ); END IF; K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.close_CURSOR( nCur1 ); INSERT INTO CFContrView VALUES ( 'vwPRNPEGTitoliE'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; END IF; --------------------------- Spesa: UEB(Titolo) - UEB118(Missione) -------------------------------- IF UPPER( lApp ) = 'S' OR lApp IS NULL THEN nCur1 := DBMS_SQL.OPEN_CURSOR; IF sCODSTPDLGS118 = 'N' THEN -- UEB (Titolo) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGTitoliS' || lCodSes || ' AS ' || 'SELECT CodTit id, MAX( Eser ) Eser, MAX( App ) App, CodTit, ' || 'SUM( StanzIni ) StanzIniTit, SUM( ImpCassa ) ImpCassaTit ' || 'FROM CFCapitoliPEG ' || 'WHERE App = ''S'' AND ' || 'Eser = ' || lEser || ' GROUP BY CodTit', dbms_sql.v7 ); ELSE -- UEB118(Missione) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGTitoliS' || lCodSes || ' AS ' || 'SELECT Codice1 id, MAX( Eser ) Eser, MAX( CFCapitoliPEG.App ) App, Codice1 CodTit, ' || 'SUM( StanzIni ) StanzIniTit, SUM( ImpCassa ) ImpCassaTit ' || 'FROM CFCapitoliPEG, VWFRMCFAnagraficaUEB118 ' || 'WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND CFCapitoliPEG.App = ''S'' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY Codice1', dbms_sql.v7 ); END IF; K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.close_CURSOR( nCur1 ); INSERT INTO CFContrView VALUES ( 'vwPRNPEGTitoliS'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; END IF; --------------------------- Entrata: UEB(Categoria) - UEB118(Tipologia)------------------------------------ IF UPPER( lApp ) = 'E' OR lApp IS NULL THEN nCur1 := DBMS_SQL.OPEN_CURSOR; IF sCODSTPDLGS118 = 'N' THEN -- UEB (Categoria) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGCatE' || lCodSes || ' AS ' || 'SELECT CodTit id, CodTit, CodCat, ' || 'SUM( StanzIni ) StanzIniCat, SUM( ImpCassa ) ImpCassaCat ' || 'FROM CFCapitoliPEG ' || 'WHERE App = ''E'' AND ' || 'Eser = ' || lEser || ' GROUP BY CodTit, CodCat', dbms_sql.v7 ); ELSE -- UEB118(Tipologia) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGCatE' || lCodSes || ' AS ' || 'SELECT Codice1 id, Codice1 CodTit, Codice2 CodCat, ' || 'SUM( StanzIni ) StanzIniCat, SUM( ImpCassa ) ImpCassaCat ' || 'FROM CFCapitoliPEG, VWFRMCFAnagraficaUEB118 ' || 'WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND CFCapitoliPEG.App = ''E'' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY Codice1, Codice2', dbms_sql.v7 ); END IF; K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.close_CURSOR( nCur1 ); INSERT INTO CFContrView VALUES ( 'vwPRNPEGCatE'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; END IF; --------------------------- Spesa: UEB(Funzione) - UEB118(Programma) -------------------------------------- IF UPPER( lApp ) = 'S' OR lApp IS NULL THEN nCur1 := DBMS_SQL.OPEN_CURSOR; IF sCODSTPDLGS118 = 'N' THEN -- UEB (Funzione) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGCatS' || lCodSes || ' AS ' || 'SELECT CodTit id, CodTit, CodFnz, ' || 'SUM( StanzIni ) StanzIniFnz, SUM( ImpCassa ) ImpCassaFnz ' || 'FROM CFCapitoliPEG ' || 'WHERE App = ''S'' AND ' || 'Eser = ' || lEser || ' GROUP BY CodTit, CodFnz', dbms_sql.v7 ); ELSE -- UEB118(Programma) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGCatS' || lCodSes || ' AS ' || 'SELECT Codice1 id, Codice1 CodTit, Codice2 CodFnz, ' || 'SUM( StanzIni ) StanzIniFnz, SUM( ImpCassa ) ImpCassaFnz ' || 'FROM CFCapitoliPEG, VWFRMCFAnagraficaUEB118 ' || 'WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND CFCapitoliPEG.App = ''S'' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY Codice1, Codice2', dbms_sql.v7 ); END IF; K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.close_CURSOR( nCur1 ); INSERT INTO CFContrView VALUES ( 'vwPRNPEGCatS'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; END IF; --------------------------- Spesa: UEB(Servizio) - UEB118(Titolo) -------------------------------------- IF UPPER( lApp ) = 'S' OR lApp IS NULL THEN nCur1 := DBMS_SQL.OPEN_CURSOR; IF sCODSTPDLGS118 = 'N' THEN -- UEB (Servizio) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGSerS' || lCodSes || ' AS ' || 'SELECT CodTit id, CodTit, CodFnz, CodSer, ' || 'SUM( StanzIni ) StanzIniSer, SUM( ImpCassa ) ImpCassaSer ' || 'FROM CFCapitoliPEG ' || 'WHERE App = ''S'' AND ' || 'Eser = ' || lEser || ' GROUP BY CodTit, CodFnz, CodSer', dbms_sql.v7 ); ELSE -- UEB118 (Titolo) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGSerS' || lCodSes || ' AS ' || 'SELECT Codice1 id, Codice1 CodTit, Codice2 CodFnz, Codice3 CodSer, ' || 'SUM( StanzIni ) StanzIniSer, SUM( ImpCassa ) ImpCassaSer ' || 'FROM CFCapitoliPEG, VWFRMCFAnagraficaUEB118 ' || 'WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND CFCapitoliPEG.App = ''S'' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY Codice1, Codice2, Codice3', dbms_sql.v7 ); END IF; K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.close_CURSOR( nCur1 ); INSERT INTO CFContrView VALUES ( 'vwPRNPEGSerS'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; END IF; --------------------------- Entrata: UEB(Risorsa) - UEB118(Categoria) ---------------------------------- IF UPPER( lApp ) = 'E' OR lApp IS NULL THEN nCur1 := DBMS_SQL.OPEN_CURSOR; IF sCODSTPDLGS118 = 'N' THEN -- UEB (Risorsa) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGUEBE' || lCodSes || ' AS ' || 'SELECT MAX( CFCapitoliPEG.CodTit ) id, ' || 'MAX( CFCapitoliPEG.CodTit ) CodTit, ' || ' MAX( DesTit ) || ''' || sSeparat || ''' ||MAX( DesTit__1 ) || ''' || sSeparat || ''' || MAX( DesTit__2 ) || ''' || sSeparat || ''' ||MAX( DesTit__3 ) DesTit, '|| 'MAX( CFAnagraficaUEB.ServContoTerzi ) ServContoTerzi, ' || 'MAX( CFCapitoliPEG.CodCat ) CodCat, ' || 'MAX( DesCat ) || ''' || sSeparat || ''' ||MAX( DesCat__1 ) || ''' || sSeparat || ''' || MAX( DesCat__2 ) || ''' || sSeparat || ''' ||MAX( DesCat__3 ) DesCat, '|| 'MAX( CFCapitoliPEG.CodRis ) CodRis, ' || 'MAX( DesRis ) || ''' || sSeparat || ''' ||MAX( DesRis__1 ) || ''' || sSeparat || ''' || MAX( DesRis__2 ) || ''' || sSeparat || ''' ||MAX( DesRis__3 ) DesRis, '|| 'CFCapitoliPEG.UEB, CFCapitoliPEG.Cap, ' || ' MAX( CFAnagraficaCapitoli.DesAnagrCap ) || ''' || sSeparat || ''' ||MAX( CFAnagraficaCapitoli.DesAnagrCap__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__2 ) || ''' || sSeparat || ''' ||MAX( CFAnagraficaCapitoli.DesAnagrCap__3 ) DesAnagrCap, '|| 'MAX( CFDesCentriResp.NumCdr ) CodCDR, ' || ' MAX( CFDesCentriResp.DesCdr ) || ''' || sSeparat || ''' ||MAX( CFDesCentriResp.DesCdr__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdr__1 ) || ''' || sSeparat || ''' ||MAX( CFDesCentriResp.DesCdr__1 ) DesCdr, '|| 'MAX( CFCapitoliPEG.FlUnaTantum ) FlUnaTantum, ' || 'DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) CodVoce, CFCapitoliPEG.Art, ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| 'SUM( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) CassaAtt, '|| 'SUM( NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) ) Accertato, '|| 'SUM( StanzIni ) StanzIniRis, SUM( ImpCassa ) ImpCassaRis ' || 'FROM CFCapitoliPEG, CFAnagraficaUEB, CFAnagraficaCapitoli, CFCentriResponsabilita, CFDesCentriResp ' || 'WHERE CFCapitoliPEG.CodTit = CFAnagraficaUEB.CodTit AND ' || 'CFCapitoliPEG.CodCat = CFAnagraficaUEB.CodCat AND ' || 'CFCapitoliPEG.CodRis = CFAnagraficaUEB.CodRis AND ' || 'CFCapitoliPEG.App = CFAnagraficaUEB.App AND ' || 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND ' || 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND ' || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND ' || 'CFCapitoliPEG.CodCDR = CFCentriResponsabilita.CodCDR AND ' || 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| 'CFCapitoliPEG.App = ''E'' AND ' || 'CFDesCentriResp.NumCdR BETWEEN ' || lCodCdRMin || MinCodCdR ||' AND '|| lCodCdRMax || MaxCodCdR || ' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY CFCapitoliPEG.UEB, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, ' || 'CFCapitoliPEG.CodVoce, CFCapitoliPEG.CodCDR', dbms_sql.v7 ); ELSE -- UEB118 (Categoria) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGUEBE' || lCodSes || ' AS ' || 'SELECT MAX( Codice1 ) id, ' || 'MAX( Codice1 ) CodTit, MAX( Des1 ) DesTit, '|| ' ''N'' ServContoTerzi, ' || 'MAX( Codice2 ) CodCat, MAX( Des2 ) DesCat, '|| 'MAX( Codice3 ) CodRis, MAX( Des3 ) DesRis, '|| 'VWFRMCFAnagraficaUEB118.UEB118 UEB, CFCapitoliPEG.Cap, ' || ' MAX( CFAnagraficaCapitoli.DesAnagrCap ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__3 ) DesAnagrCap, '|| 'MAX( CFDesCentriResp.NumCdr ) CodCDR, ' || ' MAX( CFDesCentriResp.DesCdr ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdr__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdr__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdr__1 ) DesCdr, '|| 'MAX( CFCapitoliPEG.FlUnaTantum ) FlUnaTantum, ' || ' '' '' CodVoce, CFCapitoliPEG.Art, ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| 'SUM( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) CassaAtt, '|| 'SUM( NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) ) Accertato, '|| 'SUM( StanzIni ) StanzIniRis, SUM( ImpCassa ) ImpCassaRis ' || 'FROM CFCapitoliPEG, VWFRMCFAnagraficaUEB118, CFAnagraficaCapitoli, CFCentriResponsabilita, CFDesCentriResp ' || 'WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND '|| 'VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND '|| 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND ' || 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND ' || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND ' || 'CFCapitoliPEG.CodCDR = CFCentriResponsabilita.CodCDR AND ' || 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| 'CFCapitoliPEG.App = ''E'' AND ' || 'CFDesCentriResp.NumCdR BETWEEN ' || lCodCdRMin || MinCodCdR ||' AND '|| lCodCdRMax || MaxCodCdR || ' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY VWFRMCFAnagraficaUEB118.UEB118, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, CFCapitoliPEG.CodCDR', dbms_sql.v7 ); END IF; K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.close_CURSOR( nCur1 ); INSERT INTO CFContrView (NAMEVIEW, CODSES, DATACREAZ) VALUES ( 'vwPRNPEGUEBE'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; END IF; --------------------------- Spesa: UEB(Intervento) - UEB118(Macroaggregato) ---------------------------------- IF UPPER( lApp ) = 'S' OR lApp IS NULL THEN nCur1 := DBMS_SQL.OPEN_CURSOR; IF sCODSTPDLGS118 = 'N' THEN -- UEB (Intervento) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGUEBS' || lCodSes || ' AS ' || 'SELECT MAX( CFCapitoliPEG.CodTit ) id, ' || 'MAX( CFCapitoliPEG.CodTit ) CodTit, ' || ' MAX( DesTit ) || ''' || sSeparat || ''' || MAX( DesTit__1 ) || ''' || sSeparat || ''' || MAX( DesTit__2 ) || ''' || sSeparat || ''' || MAX( DesTit__3 ) DesTit, '|| 'MAX( CFAnagraficaUEB.ServContoTerzi ) ServContoTerzi, ' || 'MAX( CFCapitoliPEG.CodFnz ) CodFnz, ' || ' MAX( DesFnz ) || ''' || sSeparat || ''' || MAX( DesFnz__1 ) || ''' || sSeparat || ''' || MAX( DesFnz__2 ) || ''' || sSeparat || ''' || MAX( DesFnz__3 ) DesFnz, '|| 'MAX( CFCapitoliPEG.CodSer ) CodSer, ' || ' MAX( DesSer ) || ''' || sSeparat || ''' ||MAX( DesSer__1 ) || ''' || sSeparat || ''' || MAX( DesSer__2 ) || ''' || sSeparat || ''' ||MAX( DesSer__3 ) DesSer, '|| 'MAX( CFCapitoliPEG.CodInt ) CodInt, ' || ' MAX( CFAnagraficaUEB.DesInt ) || ''' || sSeparat || ''' ||MAX( CFAnagraficaUEB.DesInt__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesInt__2 ) || ''' || sSeparat || ''' ||MAX( CFAnagraficaUEB.DesInt__3 ) DesInt, '|| 'CFCapitoliPEG.UEB, CFCapitoliPEG.Cap, ' || ' MAX( DECODE( CFCapitoliPEG.flcopfplur,''S'', ''Cop. FPV-''||DesAnagrCap, DesAnagrCap ) ) || ''' || sSeparat || ''' ||MAX( CFAnagraficaCapitoli.DesAnagrCap__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__2 ) || ''' || sSeparat || ''' ||MAX( CFAnagraficaCapitoli.DesAnagrCap__3 ) DesAnagrCap, '|| 'MAX( CFDesCentriResp.NumCdR ) CodCDR, ' || ' MAX( CFDesCentriResp.DesCdr ) || ''' || sSeparat || ''' ||MAX( CFDesCentriResp.DesCdr__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdr__2 ) || ''' || sSeparat || ''' ||MAX( CFDesCentriResp.DesCdr__3 ) DesCdr, '|| 'CFCapitoliPEG.Art, ' || 'MAX( CFCapitoliPEG.FlUnaTantum ) FlUnaTantum, ' || 'DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) CodVoce, ' || 'MAX( vwFRMCFVociEcSpese.DesVoce ) DesVoce, '|| 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| 'SUM( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) CassaAtt, '|| 'SUM( NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) ) Impegnato, '|| 'SUM( StanzIni ) StanzIniInt, SUM( ImpCassa ) ImpCassaInt ' || 'FROM CFCapitoliPEG, CFAnagraficaUEB, CFAnagraficaCapitoli, CFCentriResponsabilita, ' || 'vwFRMCFVociEcSpese, CFDesCentriResp ' || 'WHERE CFCapitoliPEG.CodTit = CFAnagraficaUEB.CodTit AND ' || 'CFCapitoliPEG.CodFnz = CFAnagraficaUEB.CodFnz AND ' || 'CFCapitoliPEG.CodSer = CFAnagraficaUEB.CodSer AND ' || 'CFCapitoliPEG.CodInt = CFAnagraficaUEB.CodInt AND ' || 'CFCapitoliPEG.App = CFAnagraficaUEB.App AND ' || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND ' || 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND ' || 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND ' || 'CFCapitoliPEG.CodCDR = CFCentriResponsabilita.CodCDR AND ' || 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| 'CFCapitoliPEG.CodTit = vwFRMCFVociEcSpese.CodTit AND ' || 'CFCapitoliPEG.CodInt = vwFRMCFVociEcSpese.CodInt AND ' || 'CFCapitoliPEG.CodVoce = vwFRMCFVociEcSpese.CodVoceEsteso AND ' || 'CFCapitoliPEG.App = ''S'' AND ' || 'CFDesCentriResp.NumCdR BETWEEN ' || lCodCdRMin || MinCodCdR ||' AND '|| lCodCdRMax || MaxCodCdR || ' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY CFCapitoliPEG.UEB, CFCapitoliPEG.Cap, ' || 'CFCapitoliPEG.Art, CFCapitoliPEG.CodVoce, CFCapitoliPEG.CodCDR, CFCapitoliPEG.flcopfplur', dbms_sql.v7 ); ELSE -- UEB118 (Macroaggregato) DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGUEBS' || lCodSes || ' AS ' || 'SELECT MAX( Codice1 ) id, ' || 'MAX( Codice1 ) CodTit, MAX( Des1 ) DesTit, '|| ' ''N'' ServContoTerzi, ' || 'MAX( Codice2 ) CodFnz, MAX( Des2 ) DesFnz, '|| 'MAX( Codice3 ) CodSer, MAX( Des3 ) DesSer, '|| 'MAX( Codice4 ) CodInt, MAX( Des4 ) DesInt, '|| 'VWFRMCFAnagraficaUEB118.UEB118 UEB, CFCapitoliPEG.Cap, ' || ' MAX( DECODE( CFCapitoliPEG.flcopfplur,''S'', ''Cop. FPV-''||DesAnagrCap, DesAnagrCap ) ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__3 ) DesAnagrCap, '|| 'MAX( CFDesCentriResp.NumCdr ) CodCDR, ' || ' MAX( CFDesCentriResp.DesCdr ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdr__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdr__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdr__1 ) DesCdr, '|| 'CFCapitoliPEG.Art, ' || 'MAX( CFCapitoliPEG.FlUnaTantum ) FlUnaTantum, ' || ' '' '' CodVoce, '' '' DesVoce, '|| 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| 'SUM( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) CassaAtt, '|| 'SUM( NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) ) Impegnato, '|| 'SUM( StanzIni ) StanzIniInt, SUM( ImpCassa ) ImpCassaInt ' || 'FROM CFCapitoliPEG, VWFRMCFAnagraficaUEB118, CFAnagraficaCapitoli, CFCentriResponsabilita, CFDesCentriResp ' || 'WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND '|| 'VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND '|| 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND ' || 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND ' || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND ' || 'CFCapitoliPEG.CodCDR = CFCentriResponsabilita.CodCDR AND ' || 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| 'CFCapitoliPEG.App = ''S'' AND ' || 'CFDesCentriResp.NumCdR BETWEEN ' || lCodCdRMin || MinCodCdR ||' AND '|| lCodCdRMax || MaxCodCdR || ' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY VWFRMCFAnagraficaUEB118.UEB118, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, CFCapitoliPEG.CodCDR, CFCapitoliPEG.flcopfplur', dbms_sql.v7 ); END IF; K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.close_CURSOR( nCur1 ); INSERT INTO CFContrView VALUES ( 'vwPRNPEGUEBS'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; END IF; --------------------------- Vista PEG completa -------------------------------------- IF UPPER( lApp ) = 'E' OR lApp IS NULL THEN nCur1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGE'||lCodSes||' AS ' || 'SELECT vwPRNPEGTitoliE'||lCodSes||'.id, ' || 'vwPRNPEGTitoliE'||lCodSes||'.Eser, vwPRNPEGTitoliE'||lCodSes|| '.App, ' || 'vwPRNPEGTitoliE'||lCodSes||'.CodTit, ' || 'vwPRNPEGUEBE'||lCodSes||'.DesTit, '|| 'vwPRNPEGUEBE'||lCodSes||'.ServContoTerzi, ' || 'vwPRNPEGTitoliE'||lCodSes||'.StanzIniTit, ' || 'vwPRNPEGTitoliE'||lCodSes||'.ImpCassaTit, ' || 'vwPRNPEGCatE'||lCodSes||'.CodCat, ' || 'vwPRNPEGUEBE'||lCodSes||'.DesCat, '|| 'vwPRNPEGCatE'||lCodSes||'.StanzIniCat, ' || 'vwPRNPEGCatE'||lCodSes||'.ImpCassaCat, ' || 'vwPRNPEGUEBE'||lCodSes||'.CodRis, ' || 'vwPRNPEGUEBE'||lCodSes||'.DesRis, '|| 'vwPRNPEGUEBE'||lCodSes||'.UEB, vwPRNPEGUEBE'||lCodSes||'.Cap, ' || 'vwPRNPEGUEBE'||lCodSes||'.CodCdR, ' || 'vwPRNPEGUEBE'||lCodSes||'.DesCdR, '|| 'vwPRNPEGUEBE'||lCodSes||'.Art, ' || 'vwPRNPEGUEBE'||lCodSes||'.DesAnagrCap, '|| 'vwPRNPEGUEBE'||lCodSes||'.FlUnaTantum, '|| 'vwPRNPEGUEBE'||lCodSes||'.Attuale, ' || 'vwPRNPEGUEBE'||lCodSes||'.CassaAtt, ' || 'vwPRNPEGUEBE'||lCodSes||'.Attuale - vwPRNPEGUEBE'||lCodSes||'.Accertato DisponibAcc, ' || 'vwPRNPEGUEBE'||lCodSes||'.StanzIniRis, ' || 'vwPRNPEGUEBE'||lCodSes||'.ImpCassaRis, ' || 'vwPRNPEGUEBE'||lCodSes||'.CodVoce ' || 'FROM vwPRNPEGUEBE'||lCodSes||', vwPRNPEGCatE'||lCodSes|| ', vwPRNPEGTitoliE'||lCodSes|| ' WHERE vwPRNPEGTitoliE'||lCodSes||'.id = vwPRNPEGCatE'||lCodSes||'.id AND ' || 'vwPRNPEGCatE'||lCodSes||'.id = vwPRNPEGUEBE'||lCodSes||'.id AND ' || 'vwPRNPEGCatE'||lCodSes||'.CodCat = vwPRNPEGUEBE'||lCodSes||'.CodCat', dbms_sql.v7 ); K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.close_CURSOR( nCur1 ); INSERT INTO CFContrView VALUES ( 'vwPRNPEGE'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; END IF; IF UPPER( lApp ) = 'S' OR lApp IS NULL THEN nCur1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW vwPRNPEGS'||lCodSes||' AS ' || 'SELECT vwPRNPEGTitoliS'||lCodSes||'.id, ' || 'vwPRNPEGTitoliS'||lCodSes||'.Eser, vwPRNPEGTitoliS'||lCodSes||'.App, ' || 'vwPRNPEGTitoliS'||lCodSes||'.CodTit, ' || 'vwPRNPEGUEBS'||lCodSes||'.DesTit, '|| 'vwPRNPEGUEBS'||lCodSes||'.ServContoTerzi, ' || 'vwPRNPEGTitoliS'||lCodSes||'.StanzIniTit, ' || 'vwPRNPEGTitoliS'||lCodSes||'.ImpCassaTit, ' || 'vwPRNPEGCatS'||lCodSes||'.CodFnz, ' || 'vwPRNPEGUEBS'||lCodSes||'.DesFnz, '|| 'vwPRNPEGCatS'||lCodSes||'.StanzIniFnz, ' || 'vwPRNPEGCatS'||lCodSes||'.ImpCassaFnz, ' || 'vwPRNPEGSerS'||lCodSes||'.CodSer, ' || 'vwPRNPEGUEBS'||lCodSes||'.DesSer, '|| 'vwPRNPEGSerS'||lCodSes||'.StanzIniSer, ' || 'vwPRNPEGSerS'||lCodSes||'.ImpCassaSer, ' || 'vwPRNPEGUEBS'||lCodSes||'.CodInt, ' || 'vwPRNPEGUEBS'||lCodSes||'.DesInt, '|| 'vwPRNPEGUEBS'||lCodSes||'.UEB, vwPRNPEGUEBS'||lCodSes||'.Cap, ' || 'vwPRNPEGUEBS'||lCodSes||'.CodCdR, ' || 'vwPRNPEGUEBS'||lCodSes||'.DesCdR, '|| 'vwPRNPEGUEBS'||lCodSes||'.Art, ' || 'vwPRNPEGUEBS'||lCodSes||'.DesAnagrCap, '|| 'vwPRNPEGUEBS'||lCodSes||'.CodVoce, ' || 'vwPRNPEGUEBS'||lCodSes||'.DesVoce, '|| 'vwPRNPEGUEBS'||lCodSes||'.FlUnaTantum, '|| 'vwPRNPEGUEBS'||lCodSes||'.Attuale, ' || 'vwPRNPEGUEBS'||lCodSes||'.CassaAtt, ' || 'vwPRNPEGUEBS'||lCodSes||'.Attuale - vwPRNPEGUEBS'||lCodSes||'.Impegnato DisponibImp, ' || 'vwPRNPEGUEBS'||lCodSes||'.StanzIniInt, ' || 'vwPRNPEGUEBS'||lCodSes||'.ImpCassaInt ' || 'FROM vwPRNPEGUEBS'||lCodSes||', vwPRNPEGSerS'||lCodSes||', vwPRNPEGCatS'||lCodSes||', vwPRNPEGTitoliS'||lCodSes|| ' WHERE vwPRNPEGTitoliS'||lCodSes||'.id = vwPRNPEGCatS'||lCodSes||'.id AND ' || 'vwPRNPEGCatS'||lCodSes||'.id = vwPRNPEGSerS'||lCodSes||'.id AND ' || 'vwPRNPEGCatS'||lCodSes||'.CodFnz = vwPRNPEGSerS'||lCodSes||'.CodFnz AND ' || 'vwPRNPEGSerS'||lCodSes||'.id = vwPRNPEGUEBS'||lCodSes||'.id AND ' || 'vwPRNPEGSerS'||lCodSes||'.CodFnz = vwPRNPEGUEBS'||lCodSes||'.CodFnz AND ' || 'vwPRNPEGSerS'||lCodSes||'.CodSer = vwPRNPEGUEBS'||lCodSes||'.CodSer', dbms_sql.v7 ); K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.close_CURSOR( nCur1 ); INSERT INTO CFContrView VALUES ( 'vwPRNPEGS'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; END IF; NameSpesa := 'vwPRNPEGS' || lCodSes; NameEntrata := 'vwPRNPEGE' || lCodSes; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF DBMS_SQL.IS_OPEN( nCur1 ) THEN DBMS_SQL.CLOSE_CURSOR( nCur1 ); END IF; RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNPEG', SQLCODE, ERRDIAG ); END fnVwPRNPEG; FUNCTION fnVWPRNSaldiCodMec ( lEser IN pkType.tyStringa%type, -- Esercizio lApp IN pkType.tyStringa%type, -- Appartenenza E, S lCodTitIn IN pkType.tyStringa%type, -- Codice Titolo Iniziale -- Entrata/Spesa lCodTitFin IN pkType.tyStringa%type, -- Codice Titolo Finale -- Entrata/Spesa lCodCatFnzIn IN pkType.tyStringa%type, -- Codice Categoria Iniziale -- Entrata/Spesa lCodCatFnzFin IN pkType.tyStringa%type, -- Codice Categoria Finale -- Entrata/Spesa lCodRisSerIn IN pkType.tyStringa%type, -- Codice Risorsa Iniziale -- Entrata/Spesa lCodRisSerFin IN pkType.tyStringa%type, -- Codice Risorsa Finale -- Entrata/Spesa lCodIntIn IN pkType.tyStringa%type, -- Codice Intervento Iniziale -- Spesa lCodIntFin IN pkType.tyStringa%type, -- Codice Intervento Finale -- Spesa lFlStampa IN pkType.tyStringa%type, -- 1 solo per UEB 2 per IdCapitolo lFlVar IN pkType.tyStringa%type, -- 1 con variazioni 2 senza variazioni lFlResidui IN pkType.tyStringa%type, -- S con residui N altrimenti solo competenza (come il vecchio) lCodSes IN pkType.tyStringa%type, -- Codice della sessione utente lNameViewS OUT pkType.tyStringa%type, -- Nome della vista di Spesa creata lNameViewE OUT pkType.tyStringa%type, -- Nome della vista di Entrate creata ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS curId integer; nCurId integer; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sWhereClause pkType.tyStringa%type ; lTimeStamp CFSaldiCodMec.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; sCODSTPDLGS118 CFOPZIONI.opzione%TYPE; BEGIN lNameViewS := ' '; lNameViewE := ' '; ERRDIAG := ' '; IF lCodSes = 0 OR lCodSes IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(46, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNSaldiCodMec', -499, ERRDIAG ); ELSE IF lEser IS NULL OR lApp IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(47, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNSaldiCodMec', -499, ERRDIAG ); END IF; END IF; IF lFlStampa NOT IN ( 1, 2 ) OR lFlResidui IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(52, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNSaldiCodMec', -499, ERRDIAG ); END IF ; IF lFlVar NOT IN ( 1, 2 ) THEN ERRDIAG := pkUtilityCont.fnerroripers(52, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNSaldiCodMec', -499, ERRDIAG ); END IF ; -- seleziono l'Opzione necessarie SELECT MAX( Opzione ) INTO sCODSTPDLGS118 FROM CFOpzioni WHERE DesOpzione = 'CODSTPDLGS118'; -- cancellazione di dati eventualmente già presenti per lo stesso Codice Sessione DELETE CFSaldiCodMec WHERE CodSes = lCodSes; sWhereClause := ''; IF lCodTitIn IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodTit >= ' || lCodTitIn || ' AND '; END IF; IF lCodTitFin IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodTit <= ' || lCodTitFin || ' AND '; END IF; IF lApp = 'E' THEN IF lCodCatFnzIn IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodCat >= ' || lCodCatFnzIn || ' AND '; END IF; IF lCodCatFnzFin IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodCat <= ' || lCodCatFnzFin || ' AND '; END IF; IF lCodRisSerIn IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodRis >= ' || lCodRisSerIn || ' AND '; END IF; IF lCodRisSerFin IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodRis <= ' || lCodRisSerFin || ' AND '; END IF; ELSIF lApp = 'S' THEN IF lCodCatFnzIn IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodFnz >= ' || lCodCatFnzIn || ' AND '; END IF; IF lCodCatFnzFin IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodFnz <= ' || lCodCatFnzFin || ' AND '; END IF; IF lCodRisSerIn IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodSer >= ' || lCodRisSerIn || ' AND '; END IF; IF lCodRisSerFin IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodSer <= ' || lCodRisSerFin || ' AND '; END IF; IF lCodIntIn IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodInt >= ' || lCodIntIn || ' AND '; END IF; IF lCodIntFin IS NOT NULL THEN sWhereClause := sWhereClause || 'CFCapitoliPEG.CodInt <= ' || lCodIntFin || ' AND '; END IF; END IF; IF UPPER( lFlStampa ) = 1 THEN IF UPPER( lApp ) = 'S' THEN curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, StanzIni, Variazioni, Attuale, Impegnato, Accertato, DispAtt, MandEmessi, RevEmesse, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || 'SELECT '|| lEser ||'||''S''||CFCapitoliPEG.UEB Id, ' || lEser ||' Eser, CFCapitoliPEG.UEB, '|| 'MAX( '''||sCODSTPDLGS118||''' ) DLGS118, '|| ' NULL, NULL, NULL, NULL, NULL, NULL, ' || 'MAX( CFCapitoliPEG.CodTit ) CodTit, ' || ' MAX( CFAnagraficaUEB.DesTit ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__3 ) DesTit, '|| 'MAX( CFAnagraficaUEB.ServContoTerzi ) ServContoTerzi, NULL, NULL, NULL, NULL, ' || 'MAX( CFCapitoliPEG.CodFnz ) CodFnz, ' || ' MAX( CFAnagraficaUEB.DesFnz ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesFnz__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesFnz__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesFnz__3 ) DesFnz, '|| 'MAX( CFCapitoliPEG.CodSer ) CodSer, ' || 'MAX( CFAnagraficaUEB.DesSer ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesSer__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesSer__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesSer__3 ) DesSer, '|| 'MAX( CFCapitoliPEG.CodInt ) CodInt, ' || ' MAX( CFAnagraficaUEB.DesInt ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesInt__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesInt__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesInt__3 ) DesInt, '|| 'SUM( CFCapitoliPEG.StanzIni ) StanzIni, ' || -- aggiungo le variazioni non contabilizzate ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Variazioni, ' || ' DECODE('||lFlVar||', 2, 0,NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| 'SUM( NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) ) Impegnato, 0 Accertato, '|| 'DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim - NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) ) DispAtt, '|| -- Stanz. Attuale - Impegnato ' SUM( NVL( pkViewForm.fnTotMandatiCap( IdCapitolo ), 0 ) ) MandEmessi, 0 RevEmesse, '|| 'SUM( NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) ) - '|| 'SUM( NVL( pkViewForm.fnTotMandatiCap( IdCapitolo ), 0 ) ) DispMand, 0 DispRev, '|| 'SUM( CFCapitoliPEG.ImpCassa ) ImpCassa, '|| -- aggiungo le variazioni non contabilizzate ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0)) + ' || 'SUM( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) VarCassa, ' || ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0)) + ' || 'SUM( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM CFAnagraficaUEB, CFCapitoliPEG ' || 'WHERE CFCapitoliPEG.App = ''S'' AND ' || 'CFCapitoliPEG.App = CFAnagraficaUEB.App AND ' || 'CFCapitoliPEG.UEB = CFAnagraficaUEB.UEB AND ' ||sWhereClause || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY CFCapitoliPEG.UEB', dbms_sql.v7 ); nCurId := DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); COMMIT; END IF; IF UPPER( lApp ) = 'E' THEN curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( CurId, 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, StanzIni, Variazioni, Attuale, Impegnato, Accertato, DispAtt, MandEmessi, RevEmesse, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || 'SELECT '|| lEser ||'||''E''||CFCapitoliPEG.UEB Id, ' || lEser ||' Eser, CFCapitoliPEG.UEB, '|| 'MAX( '''||sCODSTPDLGS118||''' ) DLGS118, '|| 'NULL, NULL, NULL, NULL, NULL, NULL, ' || 'MAX( CFCapitoliPEG.CodTit ) CodTit, ' || ' MAX( CFAnagraficaUEB.DesTit ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__3 ) DesTit, '|| 'MAX( CFAnagraficaUEB.ServContoTerzi ) ServContoTerzi, '|| 'MAX( CFCapitoliPEG.CodCat ) CodCat, ' || ' MAX( CFAnagraficaUEB.DesCat ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesCat__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesCat__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesCat__3 ) DesCat, '|| 'MAX( CFCapitoliPEG.CodRis ) CodRis, ' || ' MAX( CFAnagraficaUEB.DesRis ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesRis__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesRis__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesRis__3 ) DesRis, NULL, NULL, NULL, NULL, NULL, NULL, '|| 'SUM( CFCapitoliPEG.StanzIni ) StanzIni, '|| ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Variazioni, '|| ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| ' 0 Impegnato, SUM( NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) ) Accertato, '|| ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim '|| ' - NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) ) DispAtt, ' || -- Stanz. Attuale - Accertato ' 0 MandEmessi, SUM( NVL( pkViewForm.fnTotReversaliCap( IdCapitolo ), 0 ) ) RevEmesse, '|| ' 0 DispMand, SUM( NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) ) - '|| ' SUM( NVL( pkViewForm.fnTotReversaliCap( IdCapitolo ), 0 ) ) DispRev, '|| 'SUM( CFCapitoliPEG.ImpCassa ) ImpCassa, '|| -- aggiungo le variazioni non contabilizzate ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0)) + ' || 'SUM( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) VarCassa, ' || ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0)) + ' || 'SUM( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM CFAnagraficaUEB, CFCapitoliPEG '|| 'WHERE CFCapitoliPEG.App = ''E'' AND '|| 'CFCapitoliPEG.App = CFAnagraficaUEB.App AND '|| 'CFCapitoliPEG.UEB = CFAnagraficaUEB.UEB AND '||sWhereClause || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY CFCapitoliPEG.UEB', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); END IF; ELSIF UPPER( lFlStampa ) = 2 THEN IF UPPER( lApp ) = 'S' THEN IF UPPER( lFlResidui ) = 'S' THEN curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId, 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, FlCopFPlur, StanzIni, Variazioni, Attuale, Impegnato, Accertato, MandEmessi, RevEmesse, DispAtt, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || ' SELECT TO_CHAR( CFCapitoliPEG.IdCapitolo ) Id,'|| ' CFCapitoliPEG.Eser, CFCapitoliPEG.UEB, '|| ' '''||sCODSTPDLGS118||''' DLGS118, '|| ' DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) CodVoce, '|| ' CFCapitoliPEG.Cap, CFCapitoliPEG.Art, ' || ' DECODE( ''' || sSeparat || ''', NULL, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__1 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__2 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__3 ) CdR, '|| ' CFResponsabili.CodResp||'' ''|| CFResponsabili.DesResp Resp, '|| ' CFAnagraficaCapitoli.DesAnagrCap || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__1 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__2 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__3 DesAnagrCap, '|| ' CFCapitoliPEG.CodTit, '|| ' CFAnagraficaUEB.DesTit || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__3 DesTit, '|| ' CFAnagraficaUEB.ServContoTerzi, NULL, NULL, NULL, NULL, '|| ' CFCapitoliPEG.CodFnz, ' || ' CFAnagraficaUEB.DesFnz || ''' || sSeparat || ''' || CFAnagraficaUEB.DesFnz__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesFnz__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesFnz__3 DesFnz, '|| ' CFCapitoliPEG.CodSer, ' || ' CFAnagraficaUEB.DesSer || ''' || sSeparat || ''' || CFAnagraficaUEB.DesSer__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesSer__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesSer__3 DesSer, '|| ' CFCapitoliPEG.CodInt, ' || ' CFAnagraficaUEB.DesInt || ''' || sSeparat || ''' || CFAnagraficaUEB.DesInt__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesInt__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesInt__3 DesInt, FlCopFPlur, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', CFCapitoliPEG.StanzIni,'|| ' NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) StanzIni, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim, 0 ) Variazioni, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim, '|| ' NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) Attuale, '|| ' DECODE( CFCapitoliPEG.Eser, '||lEser||', NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )-NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) Impegnato, 0 Accertato, '|| -- ' DECODE( CFCapitoliPEG.Eser, '||lEser||', NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ), NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )) Impegnato, 0 Accertato, '|| -- ' DECODE( CFCapitoliPEG.Eser, '||lEser||', NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) MandEmessi, 0 RevEmesse, '|| -- ' NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ) MandEmessi, 0 RevEmesse, '|| ' NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )-NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) MandEmessi, 0 RevEmesse, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' ( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) '|| ' - NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), 0 ) DispAtt, '|| -- ' - NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ), 0 ) DispAtt, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ) - NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), '|| -- ' DECODE( CFCapitoliPEG.eser, '||lEser||', NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) - NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), '|| ' NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ) - NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )) DispMand, 0 DispRev, '|| 'DECODE( CFCapitoliPEG.eser, '||lEser||', CFCapitoliPEG.ImpCassa, 0 ) ImpCassa, '|| -- aggiungo le variazioni non contabilizzate 'DECODE( CFCapitoliPEG.eser, '||lEser||', '|| ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) ) + ' || '( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ), 0 ) VarCassa, ' || 'DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL( ( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ), 0 ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM CFAnagraficaUEB, CFCapitoliPEG, CFCentriResponsabilita, '|| ' CFDesCentriResp, CFResponsabili, CFAnagraficaCapitoli '|| ' WHERE CFCapitoliPEG.App = ''S'' '|| ' AND CFCapitoliPEG.App = CFAnagraficaUEB.App '|| ' AND CFCapitoliPEG.UEB = CFAnagraficaUEB.UEB '|| ' AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App '|| ' AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap '|| ' AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art '|| ' AND CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR '|| ' AND CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR '|| ' AND CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '||sWhereClause || ' ( ( CFCapitoliPEG.Eser < '||lEser||' AND '|| ' NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - '|| ' NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) > 0 ) OR '|| ' CFCapitoliPEG.Eser = ' || lEser ||')', dbms_sql.v7 ); nCurId := DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); ELSE curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, FlCopFPlur, StanzIni, Variazioni, Attuale, Impegnato, Accertato, MandEmessi, RevEmesse, DispAtt, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || ' SELECT TO_CHAR( CFCapitoliPEG.IdCapitolo ) Id'|| ' , '|| lEser ||' Eser , CFCapitoliPEG.UEB, '|| ' '''||sCODSTPDLGS118||''' DLGS118, '|| ' DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) CodVoce '|| ' , CFCapitoliPEG.Cap, CFCapitoliPEG.Art, ' || ' DECODE( ''' || sSeparat || ''', NULL, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__1 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__2 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__3 ) CdR, '|| ' CFResponsabili.CodResp||'' ''|| CFResponsabili.DesResp Resp'|| ', CFAnagraficaCapitoli.DesAnagrCap || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__1 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__2 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__3 DesAnagrCap, '|| ' CFCapitoliPEG.CodTit '|| ', CFAnagraficaUEB.DesTit || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__3 DesTit, '|| ' CFAnagraficaUEB.ServContoTerzi '|| ' , NULL, NULL, NULL, NULL, CFCapitoliPEG.CodFnz, ' || ' CFAnagraficaUEB.DesFnz || ''' || sSeparat || ''' || CFAnagraficaUEB.DesFnz__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesFnz__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesFnz__3 DesFnz '|| ' , CFCapitoliPEG.CodSer, ' || ' CFAnagraficaUEB.DesSer || ''' || sSeparat || ''' || CFAnagraficaUEB.DesSer__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesSer__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesSer__3 DesSer '|| ' , CFCapitoliPEG.CodInt, ' || ' CFAnagraficaUEB.DesInt || ''' || sSeparat || ''' || CFAnagraficaUEB.DesInt__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesInt__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesInt__3 DesInt, FlCopFPlur '|| ' , CFCapitoliPEG.StanzIni '|| ' , DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim Variazioni '|| ' , DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim Attuale '|| ' , NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) Impegnato '|| ' , 0 Accertato, NVL( pkViewForm.fnTotMandatiCap( IdCapitolo ), 0 ) MandEmessi '|| ' , 0 RevEmesse, DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' ( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) '|| ' - NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) DispAtt, '|| 'NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) - '|| 'NVL( pkViewForm.fnTotMandatiCap( IdCapitolo ), 0 ) DispMand, 0 DispRev, '|| ' CFCapitoliPEG.ImpCassa , '|| -- aggiungo le variazioni non contabilizzate ' DECODE('||lFlVar||', 2, 0, NVL( ( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) VarCassa, ' || ' DECODE('||lFlVar||', 2, 0, NVL( ( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM CFAnagraficaUEB, CFCapitoliPEG, CFCentriResponsabilita '|| ' , CFDesCentriResp, CFResponsabili, CFAnagraficaCapitoli '|| ' WHERE CFCapitoliPEG.App = ''S'' '|| ' AND CFCapitoliPEG.App = CFAnagraficaUEB.App '|| ' AND CFCapitoliPEG.UEB = CFAnagraficaUEB.UEB '|| ' AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App '|| ' AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap '|| ' AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art '|| ' AND CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR '|| ' AND CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR '|| ' AND CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '||sWhereClause || ' CFCapitoliPEG.Eser = ' || lEser, dbms_sql.v7 ); nCurId := DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); END IF; END IF; IF UPPER( lApp ) = 'E' THEN IF UPPER( lFlResidui ) = 'S' THEN curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( CurId, 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, StanzIni, Variazioni, Attuale, Impegnato, Accertato, MandEmessi, RevEmesse, DispAtt, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || ' SELECT TO_CHAR( CFCapitoliPEG.Idcapitolo ) Id'|| ' , CFCapitoliPEG.Eser, CFCapitoliPEG.UEB, '|| ' '''||sCODSTPDLGS118||''' DLGS118, '|| ' DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) CodVoce '|| ' , CFCapitoliPEG.Cap, CFCapitoliPEG.Art, ' || ' DECODE( ''' || sSeparat || ''', NULL, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__1 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__2 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__3 ) CdR, '|| ' CFResponsabili.CodResp||'' ''|| CFResponsabili.DesResp Resp'|| ', CFAnagraficaCapitoli.DesAnagrCap || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__1 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__2 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__3 DesAnagrCap, '|| ' CFCapitoliPEG.CodTit '|| ', CFAnagraficaUEB.DesTit || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__3 DesTit, '|| ' CFAnagraficaUEB.ServContoTerzi '|| ' , CFCapitoliPEG.CodCat, ' || ' CFAnagraficaUEB.DesCat || ''' || sSeparat || ''' || CFAnagraficaUEB.DesCat__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesCat__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesCat__3 DesCat '|| ' , CFCapitoliPEG.CodRis, ' || ' CFAnagraficaUEB.DesRis || ''' || sSeparat || ''' || CFAnagraficaUEB.DesRis__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesRis__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesRis__3 DesRis, NULL, NULL, NULL, NULL, NULL, NULL, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', CFCapitoliPEG.StanzIni, '|| ' NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) StanzIni '|| ' , DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim, 0 ) Variazioni '|| ' , DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim, '|| ' NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) Attuale '|| -- ' , 0 Impegnato, DECODE( CFCapitoliPEG.Eser, '||lEser||',NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ), NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )) Accertato '|| ' , 0 Impegnato, DECODE( CFCapitoliPEG.Eser, '||lEser||',NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )-NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) Accertato '|| -- ' , 0 MandEmessi, DECODE( CFCapitoliPEG.Eser, '||lEser||', NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) RevEmesse '|| -- ' , 0 MandEmessi, NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ) RevEmesse '|| ' , 0 MandEmessi, NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )-NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) RevEmesse '|| ' , DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' ( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) '|| ' - NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), 0 ) DispAtt, 0 DispMand, '|| -- ' - NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ), 0 ) DispAtt, 0 DispMand, '|| -- ' DECODE( CFCapitoliPEG.eser, '||lEser||', NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) - NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ) - NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), '|| ' NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ) - NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )) DispRev, '|| 'DECODE( CFCapitoliPEG.eser, '||lEser||', CFCapitoliPEG.ImpCassa, 0 ) ImpCassa, '|| -- aggiungo le variazioni non contabilizzate 'DECODE( CFCapitoliPEG.eser, '||lEser||', '|| ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) ) + ' || '( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ), 0 ) VarCassa, ' || 'DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL( ( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ), 0 ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM CFAnagraficaUEB, CFCapitoliPEG, CFCentriResponsabilita '|| ' , CFDesCentriResp, CFResponsabili, CFAnagraficaCapitoli '|| ' WHERE CFCapitoliPEG.App = ''E'' '|| ' AND CFCapitoliPEG.App = CFAnagraficaUEB.App '|| ' AND CFCapitoliPEG.UEB = CFAnagraficaUEB.UEB '|| ' AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App '|| ' AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap '|| ' AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art '|| ' AND CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR '|| ' AND CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR '|| ' AND CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '||sWhereClause || ' ( ( CFCapitoliPEG.Eser < '||lEser||' AND '|| '( ( ( NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - '|| ' NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) ) > 0 ) OR '|| '( NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||to_char(lEser+1)||''' ), 0 ) - '|| ' NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) > 0 ) ) ) OR '|| 'CFCapitoliPEG.Eser = ' || lEser ||')', -- ' CFCapitoliPEG.Eser <= '||lEser, dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); ELSE curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( CurId, 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, StanzIni, Variazioni, Attuale, Impegnato, Accertato, MandEmessi, RevEmesse, DispAtt, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || ' SELECT TO_CHAR( CFCapitoliPEG.Idcapitolo ) Id'|| ' , '|| lEser ||' Eser, CFCapitoliPEG.UEB, '|| ' '''||sCODSTPDLGS118||''' DLGS118, '|| ' DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) CodVoce '|| ' , CFCapitoliPEG.Cap, CFCapitoliPEG.Art, ' || ' CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__1 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__2 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__3 CdR '|| ' , CFResponsabili.CodResp||'' ''|| CFResponsabili.DesResp Resp'|| ', CFAnagraficaCapitoli.DesAnagrCap || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__1 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__2 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__3 DesAnagrCap, '|| ' CFCapitoliPEG.CodTit '|| ', CFAnagraficaUEB.DesTit || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesTit__3 DesTit, '|| ' CFAnagraficaUEB.ServContoTerzi '|| ' , CFCapitoliPEG.CodCat, ' || ' CFAnagraficaUEB.DesCat || ''' || sSeparat || ''' || CFAnagraficaUEB.DesCat__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesCat__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesCat__3 DesCat '|| ' , CFCapitoliPEG.CodRis, ' || ' CFAnagraficaUEB.DesRis || ''' || sSeparat || ''' || CFAnagraficaUEB.DesRis__1 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesRis__2 || ''' || sSeparat || ''' || CFAnagraficaUEB.DesRis__3 DesRis '|| ' , NULL, NULL, NULL, NULL, NULL, NULL, CFCapitoliPEG.StanzIni '|| ' , DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim Variazioni '|| ' , DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim Attuale '|| ' , 0 Impegnato, NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) Accertato '|| ' , 0 MandEmessi, NVL( pkViewForm.fnTotReversaliCap( IdCapitolo ), 0 ) RevEmesse '|| ' , DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' ( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) '|| ' - NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) DispAtt, 0 DispMand, '|| 'NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) - '|| ' NVL( pkViewForm.fnTotReversaliCap( IdCapitolo ), 0 ) DispRev, '|| ' CFCapitoliPEG.ImpCassa , '|| -- aggiungo le variazioni non contabilizzate ' DECODE('||lFlVar||', 2, 0, NVL( ( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) VarCassa, ' || ' DECODE('||lFlVar||', 2, 0, NVL( ( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM CFAnagraficaUEB, CFCapitoliPEG, CFCentriResponsabilita '|| ' , CFDesCentriResp, CFResponsabili, CFAnagraficaCapitoli '|| ' WHERE CFCapitoliPEG.App = ''E'' '|| ' AND CFCapitoliPEG.App = CFAnagraficaUEB.App '|| ' AND CFCapitoliPEG.UEB = CFAnagraficaUEB.UEB '|| ' AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App '|| ' AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap '|| ' AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art '|| ' AND CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR '|| ' AND CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR '|| ' AND CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '||sWhereClause || 'CFCapitoliPEG.Eser = ' || lEser, dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); END IF; END IF; END IF; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF DBMS_SQL.IS_OPEN( CurId ) THEN DBMS_SQL.CLOSE_CURSOR( CurId ); END IF; RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNSaldiCodMec', SQLCODE, ERRDIAG ); END fnVWPRNSaldiCodMec ; /************************************************************************** * Funzione per la stampa del Codice Meccanografico per D.lgs 118/2011 * **************************************************************************/ -- Autore: Bottiglia Katiuscia, 15/04/2014. FUNCTION fnVWPRNSaldiCodMec118 ( lEser IN pkType.tyStringa%type, -- Esercizio lApp IN pkType.tyStringa%type, -- Appartenenza E, S lCodTitIn IN pkType.tyStringa%type, -- Codice1 Iniziale -- Entrata(Titolo)/Spesa(Missione) lCodTitFin IN pkType.tyStringa%type, -- Codice1 Finale -- Entrata(Titolo)/Spesa(Missione) lCodCatFnzIn IN pkType.tyStringa%type, -- Codice2 Iniziale -- Entrata(Tipologia)/Spesa(Programma) lCodCatFnzFin IN pkType.tyStringa%type, -- Codice2 Finale -- Entrata(Tipologia)/Spesa(Programma) lCodRisSerIn IN pkType.tyStringa%type, -- Codice3 Iniziale -- Entrata(Categoria)/Spesa(Titolo) lCodRisSerFin IN pkType.tyStringa%type, -- Codice3 Finale -- Entrata(Categoria)/Spesa(Titolo) lCodIntIn IN pkType.tyStringa%type, -- Codice4 Iniziale -- Spesa(Macroaggregato) lCodIntFin IN pkType.tyStringa%type, -- Codice4 Finale -- Spesa(Macroaggregato) lFlStampa IN pkType.tyStringa%type, -- 1 solo per UEB 2 per IdCapitolo lFlVar IN pkType.tyStringa%type, -- 1 con variazioni 2 senza variazioni lFlResidui IN pkType.tyStringa%type, -- S con residui 'N' altrimenti solo competenza (come il vecchio) lCodSes IN pkType.tyStringa%type, -- Codice della sessione utente lNameViewS OUT pkType.tyStringa%type, -- Nome della vista di Spesa creata lNameViewE OUT pkType.tyStringa%type, -- Nome della vista di Entrate creata ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS curId integer; nCurId integer; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sWhereClause pkType.tyStringa%type ; lTimeStamp CFSaldiCodMec.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; sCODSTPDLGS118 CFOPZIONI.opzione%TYPE; FlAnnoPlur varchar2(1) := 'N'; BEGIN lNameViewS := ' '; lNameViewE := ' '; ERRDIAG := ' '; IF lCodSes = 0 OR lCodSes IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(46, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNSaldiCodMec118', -499, ERRDIAG ); ELSE IF lEser IS NULL OR lApp IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(47, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNSaldiCodMec118', -499, ERRDIAG ); END IF; END IF; IF lFlStampa NOT IN ( 1, 2 ) OR lFlResidui IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(52, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNSaldiCodMec118', -499, ERRDIAG ); END IF ; IF lFlVar NOT IN ( 1, 2 ) THEN ERRDIAG := pkUtilityCont.fnerroripers(52, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNSaldiCodMec118', -499, ERRDIAG ); END IF ; -- seleziono l'Opzione necessarie SELECT MAX( Opzione ) INTO sCODSTPDLGS118 FROM CFOpzioni WHERE DesOpzione = 'CODSTPDLGS118'; SELECT DECODE(SIGN(Opzione-lEser), -1 , 'S', 'N') INTO FlAnnoPlur FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- cancellazione di dati eventualmente già presenti per lo stesso Codice Sessione DELETE CFSaldiCodMec WHERE CodSes = lCodSes; sWhereClause := ''; -- SPESA(Missione) IF lCodTitIn IS NOT NULL THEN sWhereClause := sWhereClause || 'VWFRMCFAnagraficaUEB118.Codice1 >= ' || lCodTitIn || ' AND '; END IF; IF lCodTitFin IS NOT NULL THEN sWhereClause := sWhereClause || 'VWFRMCFAnagraficaUEB118.Codice1 <= ' || lCodTitFin || ' AND '; END IF; IF lCodCatFnzIn IS NOT NULL THEN sWhereClause := sWhereClause || 'VWFRMCFAnagraficaUEB118.Codice2 >= ' || lCodCatFnzIn || ' AND '; END IF; IF lCodCatFnzFin IS NOT NULL THEN sWhereClause := sWhereClause || 'VWFRMCFAnagraficaUEB118.Codice2 <= ' || lCodCatFnzFin || ' AND '; END IF; IF lCodRisSerIn IS NOT NULL THEN sWhereClause := sWhereClause || 'VWFRMCFAnagraficaUEB118.Codice3 >= ' || lCodRisSerIn || ' AND '; END IF; IF lCodRisSerFin IS NOT NULL THEN sWhereClause := sWhereClause || 'VWFRMCFAnagraficaUEB118.Codice3 <= ' || lCodRisSerFin || ' AND '; END IF; IF ( lApp = 'S' ) THEN IF lCodIntIn IS NOT NULL THEN sWhereClause := sWhereClause || 'VWFRMCFAnagraficaUEB118.Codice4 >= ' || lCodIntIn || ' AND '; END IF; IF lCodIntFin IS NOT NULL THEN sWhereClause := sWhereClause || 'VWFRMCFAnagraficaUEB118.Codice4 <= ' || lCodIntFin || ' AND '; END IF; END IF; IF UPPER( lFlStampa ) = 1 THEN IF UPPER( lApp ) = 'S' THEN curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, StanzIni, Variazioni, Attuale, Impegnato, Accertato, DispAtt, MandEmessi, RevEmesse, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || 'SELECT '|| lEser ||'||''S''||CFCapitoliPEG.UEB118 Id, CFCapitoliPEG.Eser, CFCapitoliPEG.UEB118 UEB, '|| 'MAX( '''||sCODSTPDLGS118||''' ) DLGS118, NULL, NULL, NULL, NULL, NULL, NULL, ' || 'MAX( VWFRMCFAnagraficaUEB118.Codice1 ) CodTit, MAX( VWFRMCFAnagraficaUEB118.Des1 ) DesTit, '|| ' ''N'' ServContoTerzi, NULL, NULL, NULL, NULL, ' || 'MAX( VWFRMCFAnagraficaUEB118.Codice2 ) CodFnz, MAX( VWFRMCFAnagraficaUEB118.Des2 ) DesFnz, '|| 'MAX( VWFRMCFAnagraficaUEB118.Codice3 ) CodSer, MAX( VWFRMCFAnagraficaUEB118.Des3 ) DesSer, '|| 'MAX( VWFRMCFAnagraficaUEB118.Codice4 ) CodInt, MAX( VWFRMCFAnagraficaUEB118.Des4 ) DesInt, '|| --'SUM( CFCapitoliPEG.StanzIni ) StanzIni, ' || 'DECODE( '''|| FlAnnoPlur ||''', ''S'', ( SUM( NVL( CFCapitoliPEG.AssestAnnPlur, 0 ) ) - -- AssestAnnPlur sommate tutte le variazioni già deliberate o approvate SUM( NVL( ( SELECT SUM( CFVarBil.VarAum - CFVarBil.VarDim ) -- Var al Bilancio: si sottraggono tutte le variazioni approvate non provvisorie FROM CFVarBil WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFVarBil.DtaDelibera IS NOT NULL AND FLProvv = ''N'' ), 0 ) ) ), SUM( CFCapitoliPEG.StanzIni ) ) StanzIni, ' || -- aggiungo le variazioni non contabilizzate /* ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Variazioni, ' || */ 'DECODE( '''|| FlAnnoPlur ||''', ''S'', DECODE('||lFlVar||', 2, -- solo variazioni esecutive NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND CFVARBIL.DtaDelibera IS NOT NULL AND FLProvv = ''N'' )), 0), NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) -- tutte FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' )), 0) ), '|| ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) ) Variazioni, ' || /*' DECODE('||lFlVar||', 2, 0,NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| */ 'DECODE( '''|| FlAnnoPlur ||''', ''S'', SUM(CFCapitoliPEG.AssestAnnPlur) + DECODE('||lFlVar||', 2, 0,NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' AND CFVARBIL.NumDelibera IS NULL )), 0) ), ' || ' DECODE('||lFlVar||', 2, 0,NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) ) Attuale, '|| 'SUM( NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) ) Impegnato, 0 Accertato, '|| 'DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL AND FLProvv = ''N'')), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( DECODE( '''|| FlAnnoPlur ||''', ''S'', CFCapitoliPEG.AssestAnnPlur, CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) - NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) ) DispAtt, '|| -- Stanz. Attuale - Impegnato 'SUM( NVL( pkViewForm.fnTotMandatiCap( IdCapitolo ), 0 ) ) MandEmessi, 0 RevEmesse, '|| 'SUM( NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) ) - '|| 'SUM( NVL( pkViewForm.fnTotMandatiCap( IdCapitolo ), 0 ) ) DispMand, 0 DispRev, '|| 'SUM( CFCapitoliPEG.ImpCassa ) ImpCassa, '|| -- aggiungo le variazioni non contabilizzate ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0)) + ' || 'SUM( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) VarCassa, ' || ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0)) + ' || 'SUM( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM VWFRMCFAnagraficaUEB118, CFCapitoliPEG ' || 'WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND '|| 'VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND '||sWhereClause || 'CFCapitoliPEG.App = ''S'' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY CFCapitoliPEG.Eser, CFCapitoliPEG.UEB118', dbms_sql.v7 ); nCurId := DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); COMMIT; END IF; IF UPPER( lApp ) = 'E' THEN curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( CurId, 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, StanzIni, Variazioni, Attuale, Impegnato, Accertato, DispAtt, MandEmessi, RevEmesse, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || 'SELECT '|| lEser ||'||''E''||CFCapitoliPEG.UEB118 Id, CFCapitoliPEG.Eser, CFCapitoliPEG.UEB118 UEB, '|| 'MAX( '''||sCODSTPDLGS118||''' ) DLGS118, NULL, NULL, NULL, NULL, NULL, NULL, ' || 'MAX( VWFRMCFAnagraficaUEB118.Codice1 ) CodTit, MAX( VWFRMCFAnagraficaUEB118.Des1 ) DesTit, '|| ' ''N'' ServContoTerzi, '|| 'MAX( VWFRMCFAnagraficaUEB118.Codice2 ) CodCat, MAX( VWFRMCFAnagraficaUEB118.Des2 ) DesCat, '|| 'MAX( VWFRMCFAnagraficaUEB118.Codice3 ) CodRis, MAX( VWFRMCFAnagraficaUEB118.Des3 ) DesRis, '|| 'NULL, NULL, NULL, NULL, NULL, NULL, '|| --'SUM( CFCapitoliPEG.StanzIni ) StanzIni, '|| 'DECODE( '''|| FlAnnoPlur ||''', ''S'', ( SUM( NVL( CFCapitoliPEG.AssestAnnPlur, 0 ) ) - -- AssestAnnPlur sommate tutte le variazioni già deliberate o approvate SUM( NVL( ( SELECT SUM( CFVarBil.VarAum - CFVarBil.VarDim ) -- Var al Bilancio: si sottraggono tutte le variazioni approvate non provvisorie FROM CFVarBil WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFVarBil.DtaDelibera IS NOT NULL AND FLProvv = ''N'' ), 0 ) ) ), SUM( CFCapitoliPEG.StanzIni ) ) StanzIni, ' || /* ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Variazioni, '|| */ 'DECODE( '''|| FlAnnoPlur ||''', ''S'', DECODE('||lFlVar||', 2, -- solo variazioni esecutive NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND CFVARBIL.DtaDelibera IS NOT NULL AND FLProvv = ''N'' )), 0), NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) -- tutte FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' )), 0) ), '|| ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) ) Variazioni, ' || /* ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| */ 'DECODE( '''|| FlAnnoPlur ||''', ''S'', SUM(CFCapitoliPEG.AssestAnnPlur) + DECODE('||lFlVar||', 2, 0,NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' AND CFVARBIL.NumDelibera IS NULL )), 0) ), ' || ' DECODE('||lFlVar||', 2, 0,NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) ) Attuale, '|| ' 0 Impegnato, SUM( NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) ) Accertato, '|| ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0) + ' || ' NVL(SUM(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL )), 0 )) + ' || 'SUM( DECODE( '''|| FlAnnoPlur ||''', ''S'', CFCapitoliPEG.AssestAnnPlur, CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) - NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) ) DispAtt, ' || -- Stanz. Attuale - Accertato ' 0 MandEmessi, SUM( NVL( pkViewForm.fnTotReversaliCap( IdCapitolo ), 0 ) ) RevEmesse, '|| ' 0 DispMand, SUM( NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) ) - '|| ' SUM( NVL( pkViewForm.fnTotReversaliCap( IdCapitolo ), 0 ) ) DispRev, '|| 'SUM( CFCapitoliPEG.ImpCassa ) ImpCassa, '|| -- aggiungo le variazioni non contabilizzate ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0)) + ' || 'SUM( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) VarCassa, ' || ' DECODE('||lFlVar||', 2, 0, NVL(SUM(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL )), 0)) + ' || 'SUM( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM VWFRMCFAnagraficaUEB118, CFCapitoliPEG '|| ' WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND '|| 'VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND '||sWhereClause || 'CFCapitoliPEG.App = ''E'' AND '|| 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY CFCapitoliPEG.Eser, CFCapitoliPEG.UEB118', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); END IF; ELSIF UPPER( lFlStampa ) = 2 THEN IF UPPER( lApp ) = 'S' THEN IF UPPER( lFlResidui ) = 'S' THEN curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId, 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, FlCopFPlur, StanzIni, Variazioni, Attuale, Impegnato, Accertato, MandEmessi, RevEmesse, DispAtt, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || ' SELECT TO_CHAR( CFCapitoliPEG.IdCapitolo ) Id, CFCapitoliPEG.Eser, CFCapitoliPEG.UEB118 UEB, '|| ' '''||sCODSTPDLGS118||''' DLGS118, '|| ' NULL CodVoce, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, ' || ' DECODE( ''' || sSeparat || ''', NULL, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__1 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__2 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__3 ) CdR, '|| ' CFResponsabili.CodResp||'' ''|| CFResponsabili.DesResp Resp, '|| ' CFAnagraficaCapitoli.DesAnagrCap || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__1 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__2 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__3 DesAnagrCap, '|| ' VWFRMCFAnagraficaUEB118.Codice1 CodTit, VWFRMCFAnagraficaUEB118.Des1 DesTit, '|| ' ''N'' ServContoTerzi, NULL, NULL, NULL, NULL, '|| ' VWFRMCFAnagraficaUEB118.Codice2 CodFnz, VWFRMCFAnagraficaUEB118.Des2 DesFnz, '|| ' VWFRMCFAnagraficaUEB118.Codice3 CodSer, VWFRMCFAnagraficaUEB118.Des3 DesSer, '|| ' VWFRMCFAnagraficaUEB118.Codice4 CodInt, VWFRMCFAnagraficaUEB118.Des4 DesInt, FlCopFPlur, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser|| --', CFCapitoliPEG.StanzIni,'|| ', DECODE( '''|| FlAnnoPlur ||''', ''S'', ( CFCapitoliPEG.AssestAnnPlur - -- AssestAnnPlur sommate tutte le variazioni già deliberate o approvate NVL( ( SELECT SUM( CFVarBil.VarAum - CFVarBil.VarDim ) -- Var al Bilancio: si sottraggono tutte le variazioni approvate non provvisorie FROM CFVarBil WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFVarBil.DtaDelibera IS NOT NULL AND FLProvv = ''N'' ), 0 ) ), CFCapitoliPEG.StanzIni ), ' || ' NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) StanzIni, '|| /* ' DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim, 0 ) Variazioni, '|| */ 'DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE( '''|| FlAnnoPlur ||''', ''S'', DECODE('||lFlVar||', 2, -- solo variazioni esecutive NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND CFVARBIL.DtaDelibera IS NOT NULL AND FLProvv = ''N'' ), 0), NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) -- tutte FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' ), 0) ), '|| ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ), 0 ) Variazioni, ' || /* ' DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim, '|| ' NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) Attuale, '|| */ ' DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE( '''|| FlAnnoPlur ||''', ''S'', CFCapitoliPEG.AssestAnnPlur + DECODE('||lFlVar||', 2, 0,NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' AND CFVARBIL.NumDelibera IS NULL ), 0) ), ' || 'DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ), '|| ' NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) Attuale, '|| ' DECODE( CFCapitoliPEG.Eser, '||lEser||', NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )-NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) Impegnato, 0 Accertato, '|| ' NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )-NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) MandEmessi, 0 RevEmesse, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || --' ( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) '|| ' DECODE( '''|| FlAnnoPlur ||''', ''S'', CFCapitoliPEG.AssestAnnPlur, CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) - NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), 0 ) DispAtt, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ) - NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), '|| ' NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ) - NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )) DispMand, 0 DispRev, '|| 'DECODE( CFCapitoliPEG.eser, '||lEser||', CFCapitoliPEG.ImpCassa, 0 ) ImpCassa, '|| -- aggiungo le variazioni non contabilizzate 'DECODE( CFCapitoliPEG.eser, '||lEser||', '|| ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) ) + ' || '( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ), 0 ) VarCassa, ' || 'DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL( ( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ), 0 ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM VWFRMCFAnagraficaUEB118, CFCapitoliPEG, CFCentriResponsabilita, CFDesCentriResp, CFResponsabili, CFAnagraficaCapitoli '|| ' WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND '|| 'VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND '||sWhereClause || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND '|| 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND '|| 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND '|| 'CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND '|| 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| 'CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '|| ' ( ( CFCapitoliPEG.Eser < '||lEser||' AND '|| ' NVL( pkViewForm.fnResImpSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - '|| ' NVL( pkViewForm.fnResMandSaldiCodMeccS( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) > 0 ) OR '|| ' CFCapitoliPEG.App = ''S'' AND '|| ' CFCapitoliPEG.Eser = ' || lEser ||')', dbms_sql.v7 ); nCurId := DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); ELSE -- IF UPPER( lFlResidui ) = 'N' THEN curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, FlCopFPlur, StanzIni, Variazioni, Attuale, Impegnato, Accertato, MandEmessi, RevEmesse, DispAtt, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || ' SELECT TO_CHAR( CFCapitoliPEG.IdCapitolo ) Id, CFCapitoliPEG.Eser, CFCapitoliPEG.UEB118 UEB, '|| ' '''||sCODSTPDLGS118||''' DLGS118, '|| ' NULL CodVoce, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, ' || ' DECODE( ''' || sSeparat || ''', NULL, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__1 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__2 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__3 ) CdR, '|| ' CFResponsabili.CodResp||'' ''|| CFResponsabili.DesResp Resp, '|| ' CFAnagraficaCapitoli.DesAnagrCap || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__1 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__2 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__3 DesAnagrCap, '|| ' VWFRMCFAnagraficaUEB118.Codice1 CodTit, VWFRMCFAnagraficaUEB118.Des1 DesTit, '|| ' ''N'' ServContoTerzi, NULL, NULL, NULL, NULL, '|| 'VWFRMCFAnagraficaUEB118.Codice2 CodFnz, VWFRMCFAnagraficaUEB118.Des2 DesFnz, '|| ' VWFRMCFAnagraficaUEB118.Codice3 CodSer, VWFRMCFAnagraficaUEB118.Des3 DesSer, '|| ' VWFRMCFAnagraficaUEB118.Codice4 CodInt, VWFRMCFAnagraficaUEB118.Des4 DesInt, FlCopFPlur, '|| --' CFCapitoliPEG.StanzIni, '|| 'DECODE( '''|| FlAnnoPlur ||''', ''S'', ( CFCapitoliPEG.AssestAnnPlur - -- AssestAnnPlur sommate tutte le variazioni già deliberate o approvate NVL( ( SELECT SUM( CFVarBil.VarAum - CFVarBil.VarDim ) -- Var al Bilancio: si sottraggono tutte le variazioni approvate non provvisorie FROM CFVarBil WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFVarBil.DtaDelibera IS NOT NULL AND FLProvv = ''N'' ), 0 ) ) , CFCapitoliPEG.StanzIni ) StanzIni, ' || /* ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim Variazioni, '|| */ 'DECODE( '''|| FlAnnoPlur ||''', ''S'', DECODE('||lFlVar||', 2, -- solo variazioni esecutive NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND CFVARBIL.DtaDelibera IS NOT NULL AND FLProvv = ''N'' ), 0), NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) -- tutte FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' ), 0) ), '|| ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Variazioni, '|| 'DECODE( '''|| FlAnnoPlur ||''', ''S'', CFCapitoliPEG.AssestAnnPlur + DECODE('||lFlVar||', 2, 0,NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' AND CFVARBIL.NumDelibera IS NULL ), 0) ), ' || ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| ' NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) Impegnato, '|| ' 0 Accertato, NVL( pkViewForm.fnTotMandatiCap( IdCapitolo ), 0 ) MandEmessi, '|| ' 0 RevEmesse, DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || --' ( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) '|| ' DECODE( '''|| FlAnnoPlur ||''', ''S'', CFCapitoliPEG.AssestAnnPlur, CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) - NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) DispAtt, '|| 'NVL( pkViewForm.fnTotImpegniCap( IdCapitolo ), 0 ) - '|| 'NVL( pkViewForm.fnTotMandatiCap( IdCapitolo ), 0 ) DispMand, 0 DispRev, '|| 'CFCapitoliPEG.ImpCassa , '|| -- aggiungo le variazioni non contabilizzate ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) VarCassa, ' || ' DECODE('||lFlVar||', 2, 0, NVL( ( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM VWFRMCFAnagraficaUEB118, CFCapitoliPEG, CFCentriResponsabilita, CFDesCentriResp, CFResponsabili, CFAnagraficaCapitoli '|| ' WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND '|| 'VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND '||sWhereClause || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND '|| 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND '|| 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND '|| 'CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND '|| 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| 'CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '|| 'CFCapitoliPEG.App = ''S'' AND '|| 'CFCapitoliPEG.Eser = ' || lEser, dbms_sql.v7 ); nCurId := DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); END IF; END IF; IF UPPER( lApp ) = 'E' THEN IF UPPER( lFlResidui ) = 'S' THEN curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( CurId, 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, StanzIni, Variazioni, Attuale, Impegnato, Accertato, MandEmessi, RevEmesse, DispAtt, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || ' SELECT TO_CHAR( CFCapitoliPEG.Idcapitolo ) Id, CFCapitoliPEG.Eser, CFCapitoliPEG.UEB118 UEB, '|| ' '''||sCODSTPDLGS118||''' DLGS118, '|| ' NULL CodVoce, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, ' || ' DECODE( ''' || sSeparat || ''', NULL, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR, CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__1 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__2 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__3 ) CdR, '|| ' CFResponsabili.CodResp||'' ''|| CFResponsabili.DesResp Resp, '|| ' CFAnagraficaCapitoli.DesAnagrCap || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__1 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__2 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__3 DesAnagrCap, '|| ' VWFRMCFAnagraficaUEB118.Codice1 CodTit, VWFRMCFAnagraficaUEB118.Des1 DesTit, '|| ' ''N'' ServContoTerzi, '|| ' VWFRMCFAnagraficaUEB118.Codice2 CodCat, VWFRMCFAnagraficaUEB118.Des2 DesCat, '|| ' VWFRMCFAnagraficaUEB118.Codice3 CodRis, VWFRMCFAnagraficaUEB118.Des3 DesRis, NULL, NULL, NULL, NULL, NULL, NULL, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser|| --', CFCapitoliPEG.StanzIni,'|| ', DECODE( '''|| FlAnnoPlur ||''', ''S'', ( CFCapitoliPEG.AssestAnnPlur - -- AssestAnnPlur sommate tutte le variazioni già deliberate o approvate NVL( ( SELECT SUM( CFVarBil.VarAum - CFVarBil.VarDim ) -- Var al Bilancio: si sottraggono tutte le variazioni approvate non provvisorie FROM CFVarBil WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFVarBil.DtaDelibera IS NOT NULL AND FLProvv = ''N'' ), 0 ) ), CFCapitoliPEG.StanzIni ), ' || ' NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) StanzIni, '|| 'DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE( '''|| FlAnnoPlur ||''', ''S'', DECODE('||lFlVar||', 2, -- solo variazioni esecutive NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND CFVARBIL.DtaDelibera IS NOT NULL AND FLProvv = ''N'' ), 0), NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) -- tutte FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' ), 0) ), '|| ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ), 0 ) Variazioni, ' || ' DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE( '''|| FlAnnoPlur ||''', ''S'', CFCapitoliPEG.AssestAnnPlur + DECODE('||lFlVar||', 2, 0,NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' AND CFVARBIL.NumDelibera IS NULL ), 0) ), ' || 'DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ), '|| ' NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) Attuale, '|| ' 0 Impegnato, DECODE( CFCapitoliPEG.Eser, '||lEser||',NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )-NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 )) Accertato, '|| ' 0 MandEmessi, NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )-NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) RevEmesse, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || --' ( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) '|| ' DECODE( '''|| FlAnnoPlur ||''', ''S'', CFCapitoliPEG.AssestAnnPlur, CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) - NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), 0 ) DispAtt, 0 DispMand, '|| ' DECODE( CFCapitoliPEG.eser, '||lEser||', NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ) - NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ), '|| ' NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 ) - NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||TO_CHAR(lEser+1)||''' ), 0 )) DispRev, '|| 'DECODE( CFCapitoliPEG.eser, '||lEser||', CFCapitoliPEG.ImpCassa, 0 ) ImpCassa, '|| -- aggiungo le variazioni non contabilizzate 'DECODE( CFCapitoliPEG.eser, '||lEser||', '|| ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) ) + ' || '( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ), 0 ) VarCassa, ' || 'DECODE( CFCapitoliPEG.eser, '||lEser||', DECODE('||lFlVar||', 2, 0, NVL( ( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ), 0 ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM VWFRMCFAnagraficaUEB118, CFCapitoliPEG, CFCentriResponsabilita, CFDesCentriResp, CFResponsabili, CFAnagraficaCapitoli '|| ' WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND '|| 'VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND '||sWhereClause || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND '|| 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND '|| 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND '|| 'CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND '|| 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| 'CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '|| ' CFCapitoliPEG.App = ''E'' AND '|| ' ( ( CFCapitoliPEG.Eser < '||lEser||' AND '|| '( ( ( NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) - '|| ' NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) ) > 0 ) OR '|| '( NVL( pkViewForm.fnResAccSaldiCodMeccE( IdCapitolo, ''01/01/'||to_char(lEser+1)||''' ), 0 ) - '|| ' NVL( pkViewForm.fnResRevSaldiCodMeccE( IdCapitolo, ''01/01/'||lEser||''' ), 0 ) > 0 ) ) ) OR '|| 'CFCapitoliPEG.Eser = ' || lEser ||')', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); ELSE curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( CurId, 'INSERT INTO CFSaldiCodMec ( Id, Eser, UEB, FLDLGS118, CodVoce, Cap, Art, CdR, Resp, DesAnagrCap, CodTit, DesTit, ServContoTerzi, CodCat, DesCat, CodRis, DesRis, CodFnz, DesFnz, CodSer, DesSer, CodInt, DesInt, StanzIni, Variazioni, Attuale, Impegnato, Accertato, MandEmessi, RevEmesse, DispAtt, DispMand, DispRev, ImpCassa, VarCassa, ImpCassaAtt, CodSes, TmsLock ) ' || ' SELECT TO_CHAR( CFCapitoliPEG.Idcapitolo ) Id, CFCapitoliPEG.Eser, CFCapitoliPEG.UEB118 UEB, '|| ' '''||sCODSTPDLGS118||''' DLGS118, '|| ' NULL CodVoce, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, ' || ' CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__1 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__2 || ''' || sSeparat || ''' || CFDesCentriResp.NumCdR||'' ''|| CFDesCentriResp.DesCdR__3 CdR, '|| ' CFResponsabili.CodResp||'' ''|| CFResponsabili.DesResp Resp, '|| ' CFAnagraficaCapitoli.DesAnagrCap || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__1 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__2 || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__3 DesAnagrCap, '|| ' VWFRMCFAnagraficaUEB118.Codice1 CodTit, VWFRMCFAnagraficaUEB118.Des1 DesTit, '|| ' ''N'' ServContoTerzi, '|| ' VWFRMCFAnagraficaUEB118.Codice2 CodCat, VWFRMCFAnagraficaUEB118.Des2 DesCat, '|| ' VWFRMCFAnagraficaUEB118.Codice3 CodRis, VWFRMCFAnagraficaUEB118.Des3 DesRis, '|| ' NULL, NULL, NULL, NULL, NULL, NULL, '|| 'DECODE( '''|| FlAnnoPlur ||''', ''S'', ( CFCapitoliPEG.AssestAnnPlur - -- AssestAnnPlur sommate tutte le variazioni già deliberate o approvate NVL( ( SELECT SUM( CFVarBil.VarAum - CFVarBil.VarDim ) -- Var al Bilancio: si sottraggono tutte le variazioni approvate non provvisorie FROM CFVarBil WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFVarBil.DtaDelibera IS NOT NULL AND FLProvv = ''N'' ), 0 ) ) , CFCapitoliPEG.StanzIni ) StanzIni, ' || 'DECODE( '''|| FlAnnoPlur ||''', ''S'', DECODE('||lFlVar||', 2, -- solo variazioni esecutive NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND CFVARBIL.DtaDelibera IS NOT NULL AND FLProvv = ''N'' ), 0), NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) -- tutte FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' ), 0) ), '|| ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Variazioni, '|| 'DECODE( '''|| FlAnnoPlur ||''', ''S'', CFCapitoliPEG.AssestAnnPlur + DECODE('||lFlVar||', 2, 0,NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) FROM CFVARBIL WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND FLProvv = ''N'' AND CFVARBIL.NumDelibera IS NULL ), 0) ), ' || ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || ' CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| ' 0 Impegnato, NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) Accertato, '|| ' 0 MandEmessi, NVL( pkViewForm.fnTotReversaliCap( IdCapitolo ), 0 ) RevEmesse, '|| ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAum - CFVARBIL.VarDim ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0) + ' || ' NVL(( SELECT SUM( CFVARPEG.VarAum - CFVARPEG.VarDim ) ' || ' FROM CFVARPEG ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarPEG.IdCapitolo AND ' || ' CFVARPEG.NumDelibera IS NULL ), 0 )) + ' || --' ( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) '|| ' DECODE( '''|| FlAnnoPlur ||''', ''S'', CFCapitoliPEG.AssestAnnPlur, CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) - NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) DispAtt, 0 DispMand, '|| 'NVL( pkViewForm.fnTotAccertamentiCap( IdCapitolo ), 0 ) - '|| ' NVL( pkViewForm.fnTotReversaliCap( IdCapitolo ), 0 ) DispRev, '|| 'CFCapitoliPEG.ImpCassa , '|| -- aggiungo le variazioni non contabilizzate ' DECODE('||lFlVar||', 2, 0, NVL(( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) VarCassa, ' || ' DECODE('||lFlVar||', 2, 0, NVL( ( SELECT SUM( CFVARBIL.VarAumCas - CFVARBIL.VarDimCas ) ' || ' FROM CFVARBIL ' || ' WHERE CFCapitoliPEG.IdCapitolo = CFVarBil.IdCapitolo AND ' || ' CFVARBIL.NumDelibera IS NULL ), 0)) + ' || '( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) ImpCassaAtt, '|| lCodSes || ', ' || lTimeStamp || ' FROM VWFRMCFAnagraficaUEB118, CFCapitoliPEG, CFCentriResponsabilita, CFDesCentriResp, CFResponsabili, CFAnagraficaCapitoli '|| ' WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND '|| 'VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND '||sWhereClause || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND '|| 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND '|| 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND '|| 'CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND '|| 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| 'CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '|| 'CFCapitoliPEG.App = ''E'' AND '|| 'CFCapitoliPEG.Eser = ' || lEser, dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); END IF; END IF; END IF; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF DBMS_SQL.IS_OPEN( CurId ) THEN DBMS_SQL.CLOSE_CURSOR( CurId ); END IF; RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNSaldiCodMec118', SQLCODE, ERRDIAG ); END fnVWPRNSaldiCodMec118 ; /************************************************************************** * Funzione per la stampa del P.E.G. per C/Responsabile * **************************************************************************/ -- Autore: Sabatini ( viste di Torelli ) 24/07/00 FUNCTION fnVwPRNPEGPerCdR ( lEser IN pkType.tyStringa%type, lCodCdRMin IN pkType.tyStringa%type, lCodCdRMax IN pkType.tyStringa%type, lCodRespMin IN pkType.tyStringa%type, lCodRespMax IN pkType.tyStringa%type, lFlStampa IN pkType.tyStringa%type, -- G = Gestionale, A = Autorizzatorio lCodSes IN pkType.tyStringa%type, lNameView OUT pkType.tyStringa%type, -- Nome della vista di Spesa creata ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS curId integer; nCurId integer; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sCODSTPDLGS118 CFOPZIONI.opzione%TYPE; nAnnoAppBil CFOPZIONI.opzione%TYPE; BEGIN lNameView := ' '; ERRDIAG := ' '; IF lCodSes = 0 OR lCodSes IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(46, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNPEGPerCdR', -499, ERRDIAG ); ELSE IF lEser IS NULL OR lCodCdRMin IS NULL OR lCodCdRMax IS NULL OR lCodRespMin IS NULL OR lCodRespMax IS NULL OR lFlStampa IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(47, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNPEGPerCdR', -499, ERRDIAG ); END IF; END IF; -- seleziono l'Opzione necessarie SELECT MAX( DLGS118.Opzione ), MAX( AABil.Opzione ) INTO sCODSTPDLGS118, nAnnoAppBil FROM CFOpzioni DLGS118, CFOpzioni AABil WHERE DLGS118.DesOpzione = 'CODSTPDLGS118' AND AABil.DesOpZione = 'ANNOAPPBIL'; curId:=DBMS_SQL.OPEN_CURSOR; IF UPPER( lFlStampa ) = 'G' THEN -- stampa con tutti gli articoli ( Gestionale ) DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNCFCapPEGGest'|| lCodSes || ' AS ' || ' SELECT MAX( '''||sCODSTPDLGS118||''' ) DLGS118, '|| ' CFCapitoliPEG.IDCapitolo Id, MAX( CFCapitoliPEG.Eser ) Eser, '|| ' MAX( CFCapitoliPEG.App ) App, MAX( CFCapitoliPEG.Cap ) Cap, '|| ' MAX( CFAnagraficaCapitoli.DesAnagrCap ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaCapitoli.DesAnagrCap__3 ) DesAnagrCap, '|| --' MAX( CFCapitoliPEG.Art ) Art, MAX( CFCapitoliPEG.UEB ) UEB, '|| ' MAX( CFCapitoliPEG.Art ) Art, MAX( DECODE( '''||sCODSTPDLGS118||''', ''S'', CFCapitoliPEG.UEB118, CFCapitoliPEG.UEB ) ) UEB, '|| ' MAX( CFCapitoliPEG.FLCopFPlur ) FLCopFPlur, '|| ' MAX( CFCapitoliPEG.StanzIni ) StanzIni, '|| -- ' MAX( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| ' MAX( DECODE( SIGN('|| lEser ||'-'|| nAnnoAppBil ||'), 1, CFCapitoliPeg.AssestAnnPlur, CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) ) Attuale, '|| ' MAX( CFCapitoliPEG.ImpCassa) ImpCassa ,'|| ' MAX( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) ImpCassaAtt, '|| -- TESTATE Impegno (Spesa), Accertamento (Entrata) '( NVL( SUM( CFImpegni.ImpIni ), 0 ) + '|| 'NVL( SUM( CFAccertamenti.ImpIni ), 0 ) ) ImpAcc, '|| '( MAX( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) - '|| 'NVL( SUM( CFImpegni.ImpIni ), 0 ) - '|| 'NVL( SUM( CFAccertamenti.ImpIni ), 0 ) ) Obiettivo, '|| ' MAX( CFCapitoliPEG.CodSes ) CodSes, MAX( CFCapitoliPEG.TmsLock ) TmsLock, '|| ' MAX( CFDesCentriResp.NumCdR ) CodCdR, ' || ' MAX( CFDesCentriResp.DesCdR ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__2 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__3 ) DesCdR, '|| ' MAX( CFCentriResponsabilita.CodResp ) CodResp, MAX( CFResponsabili.DesResp ) DesResp '|| ' FROM CFAccertamenti, CFImpegni, CFAnagraficaCapitoli, '|| 'CFResponsabili, CFCentriResponsabilita, CFDesCentriResp, CFCapitoliPEG '|| ' WHERE CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND '|| ' CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '|| ' CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| ' CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND '|| ' CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND '|| ' CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND '|| ' CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo(+) AND '|| -- join CFImpegni ' CFCapitoliPEG.IdCapitolo = CFAccertamenti.IdCapitolo(+) AND '|| -- join CFAccertamenti ' CFCentriResponsabilita.NumCdR BETWEEN ' || lCodCdRMin || ' AND ' || lCodCdRMax || ' AND ' || ' CFResponsabili.CodResp BETWEEN ' || lCodRespMin ||' AND ' || lCodRespMax || ' AND ' || ' CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY CFCapitoliPEG.IdCapitolo ', dbms_sql.v7 ); INSERT INTO CFContrView VALUES ( 'vwPRNCFCapPEGGest'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); lNameView := 'vwPRNCFCapPEGGest'||lCodSes; ELSE -- raggruppato per capitoli ( Autorizzatorio ) IF sCODSTPDLGS118 = 'S' THEN -- dlgs 118 DBMS_SQL.PARSE( CurId, 'CREATE OR REPLACE VIEW vwPRNCFCapPEGAut' || lCodSes ||' AS ' || ' SELECT ''S'' DLGS118, '|| ' CFCapitoliPEG.Eser||CFCapitoliPEG.App||CFCapitoliPEG.Cap||CFCapitoliPEG.UEB118||CFCapitoliPEG.CodCdR id, '|| ' CFCapitoliPEG.Eser, CFCapitoliPEG.App, CFCapitoliPEG.Cap, '|| ' DECODE( CFCapitoliPEG.App, ''S'', MAX(Des4), MAX(Des3) ) DesAnagrCap, '|| ' CFCapitoliPEG.UEB118 UEB, MAX( CFCapitoliPEG.FLCopFPlur ) FLCopFPlur, '|| ' SUM( CFCapitoliPEG.StanzIni ) SUMStanzIni, '|| -- ' SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) SUMAttuale, '|| ' DECODE( SIGN('|| lEser ||'-'|| nAnnoAppBil ||'), 1, SUM(CFCapitoliPeg.AssestAnnPlur), SUM(CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim) ) SUMAttuale, '|| ' SUM( CFCapitoliPEG.ImpCassa) SUMImpCassa ,'|| ' SUM( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) SUMImpCassaAtt, '|| -- Testata Impegno o Accertamento in base all'Appartenenza ' SUM( pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) SUMImpAcc, '|| '( SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) - '|| 'SUM( pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) ) SUMObiettivo, '|| ' MAX( CFDesCentriResp.NumCdR ) CodCdR, '|| ' MAX( CFDesCentriResp.DesCdR ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__2 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__3 ) DesCdR, '|| ' MAX( CFResponsabili.CodResp) CodResp, MAX( CFResponsabili.DesResp ) DesResp '|| 'FROM CFCapitoliPEG, CFCentriResponsabilita, CFDesCentriResp, CFResponsabili, '|| 'VWFRMCFAnagraficaUEB118 '|| 'WHERE CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND '|| 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| 'CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '|| 'CFCapitoliPEG.App = VWFRMCFAnagraficaUEB118.App AND '|| 'CFCapitoliPEG.UEB118 = VWFRMCFAnagraficaUEB118.UEB118 AND '|| 'CFCentriResponsabilita.NumCdR BETWEEN ' || lCodCdRMin || ' AND ' || lCodCdRMax || ' AND ' || 'CFResponsabili.CodResp BETWEEN ' || lCodRespMin ||' AND ' || lCodRespMax || ' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY CFCapitoliPEG.Eser, CFCapitoliPEG.App, CFCapitoliPEG.UEB118, '|| 'CFCapitoliPEG.Cap, CFCapitoliPEG.CodCdR', dbms_sql.v7 ); ELSE -- NON dlgs 118 DBMS_SQL.PARSE( CurId, 'CREATE OR REPLACE VIEW vwPRNCFCapPEGAut' || lCodSes ||' AS ' || ' SELECT ''N'' DLGS118, '|| ' CFCapitoliPEG.Eser||CFCapitoliPEG.App||CFCapitoliPEG.Cap||CFCapitoliPEG.UEB||CFCapitoliPEG.CodCdR id, '|| ' CFCapitoliPEG.Eser, CFCapitoliPEG.App, CFCapitoliPEG.Cap, '|| ' DECODE( CFCapitoliPEG.App, ''S'', '|| 'MAX( DesInt ) || ''' || sSeparat || '''||MAX( DesInt__1 )||''' ||sSeparat||'''|| MAX( DesInt__2 ) || ''' || sSeparat || ''' ||MAX( DesInt__3 ), '|| 'MAX( DesRis ) || '''|| sSeparat ||'''||MAX( DesRis__1 )||''' ||sSeparat||'''|| MAX( DesRis__2 ) ||''' || sSeparat || ''' ||MAX( DesRis__3 ) ) DesAnagrCap, '|| ' CFCapitoliPEG.UEB, MAX( CFCapitoliPEG.FLCopFPlur ) FLCopFPlur, '|| --' CFCapitoliPEG.UEB, MAX( CFCapitoliPEG.CodTit ) CodTit, '|| ' SUM( CFCapitoliPEG.StanzIni ) SUMStanzIni, '|| -- ' SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) SUMAttuale, '|| ' DECODE( SIGN('|| lEser ||'-'|| nAnnoAppBil ||'), 1, SUM(CFCapitoliPeg.AssestAnnPlur), SUM(CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim) ) SUMAttuale, '|| ' SUM( CFCapitoliPEG.ImpCassa) SUMImpCassa ,'|| ' SUM( CFCapitoliPEG.ImpCassa + CFCapitoliPEG.VarAumCas - CFCapitoliPEG.VarDimCas ) SUMImpCassaAtt, '|| -- Testata Impegno o Accertamento in base all'Appartenenza ' SUM( pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) SUMImpAcc, '|| '( SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) - '|| 'SUM( pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) ) SUMObiettivo, '|| ' MAX( CFDesCentriResp.NumCdR ) CodCdR, '|| ' MAX( CFDesCentriResp.DesCdR ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__2 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__3 ) DesCdR, '|| ' MAX( CFResponsabili.CodResp) CodResp, MAX( CFResponsabili.DesResp ) DesResp '|| 'FROM CFCapitoliPEG, CFCentriResponsabilita, CFDesCentriResp, CFResponsabili, '|| 'CFAnagraficaUEB '|| 'WHERE CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND '|| 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND '|| 'CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND '|| 'CFCapitoliPEG.App = CFAnagraficaUEB.App AND '|| 'CFCapitoliPEG.UEB = CFAnagraficaUEB.UEB AND '|| 'CFCentriResponsabilita.NumCdR BETWEEN ' || lCodCdRMin || ' AND ' || lCodCdRMax || ' AND ' || 'CFResponsabili.CodResp BETWEEN ' || lCodRespMin ||' AND ' || lCodRespMax || ' AND ' || 'CFCapitoliPEG.Eser = ' || lEser || ' GROUP BY CFCapitoliPEG.Eser, CFCapitoliPEG.App, CFCapitoliPEG.UEB, '|| 'CFCapitoliPEG.Cap, CFCapitoliPEG.CodCdR', dbms_sql.v7 ); END IF; INSERT INTO CFContrView VALUES ( 'vwPRNCFCapPEGAut'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); lNameView := 'vwPRNCFCapPEGAut'||lCodSes; END IF; nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF DBMS_SQL.IS_OPEN( CurId ) THEN DBMS_SQL.CLOSE_CURSOR( CurId ); END IF; RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNPEGPerCdR', SQLCODE, ERRDIAG ); END fnVwPRNPEGPerCdR; /************************************************************************** * Funzione per la stampa per la Predisposizione del PEG * **************************************************************************/ -- Autore: Torelli Roberto (24/07/2000) FUNCTION fnVWPRNPredPEG ( lEser IN pkType.tyStringa%type, lFlStampa IN pkType.tyStringa%type, -- flag del tipo di stampa: 0=senza espl.,1=esplos. CdC, 2=esplos. PRG lCodCdRMin IN pkType.tyStringa%type, lCodCdRMax IN pkType.tyStringa%type, lCodRespMin IN pkType.tyStringa%type, lCodRespMax IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, lNameView OUT pkType.tyStringa%type, -- Nome della vista Creata ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS curId integer; nCurId integer; nEser integer; -- filtro anno prededente richisto da Sante sSeparat varchar2(10) := pkUtilityCont.fnselseparat; sCODSTPDLGS118 CFOPZIONI.opzione%TYPE; sSelectClause varchar2(2500); sFromClause varchar2(50); sWhereClause varchar2(250); BEGIN lNameView := ' '; ERRDIAG := ' '; IF lCodSes = 0 OR lCodSes IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(46, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNPredPEG', -499, ERRDIAG ); ELSE IF lEser IS NULL OR lCodCdRMin IS NULL OR lCodCdRMax IS NULL OR lCodRespMin IS NULL OR lCodRespMax IS NULL OR lFlStampa IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(47, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNPredPEG', -499, ERRDIAG ); END IF; END IF; -- seleziono l'Opzione necessarie SELECT MAX( Opzione ) INTO sCODSTPDLGS118 FROM CFOpzioni WHERE DesOpzione = 'CODSTPDLGS118'; IF ( sCODSTPDLGS118 = 'N' ) THEN -- GETIONE UEB sSelectClause := ' CFCapitoliPEG.UEB UEB, ''N'' CODSTPDLGS118, CFAnagraficaUEB.CodTit||'' - ''||CFAnagraficaUEB.DesTit || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || CFAnagraficaUEB.CodTit||'' - ''||CFAnagraficaUEB.DesTit__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesTit, CFAnagraficaUEB.ServContoTerzi ServContoTerzi, CFAnagraficaUEB.CodCat||'' - ''||CFAnagraficaUEB.DesCat || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || CFAnagraficaUEB.CodCat||'' - ''||CFAnagraficaUEB.DesCat__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesCat, CFAnagraficaUEB.CodRis||'' - ''||CFAnagraficaUEB.DesRis || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || CFAnagraficaUEB.CodRis||'' - ''||CFAnagraficaUEB.DesRis__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesRis, CFAnagraficaUEB.CodFnz||'' - ''||CFAnagraficaUEB.DesFnz || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || CFAnagraficaUEB.CodFnz||'' - ''||CFAnagraficaUEB.DesFnz__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesFnz, CFAnagraficaUEB.CodSer||'' - ''||CFAnagraficaUEB.DesSer || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || CFAnagraficaUEB.CodSer||'' - ''||CFAnagraficaUEB.DesSer__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesSer, CFAnagraficaUEB.CodInt||'' - ''||CFAnagraficaUEB.DesInt || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || CFAnagraficaUEB.CodInt||'' - ''||CFAnagraficaUEB.DesInt__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesInt, '; sFromClause := ' CFAnagraficaUEB '; sWhereClause := ' CFAnagraficaUEB.App = CFCapitoliPEG.App AND ' || ' CFAnagraficaUEB.UEB = CFCapitoliPEG.UEB AND '; ELSE -- GESTIONE UEB118 sSelectClause := ' CFCapitoliPEG.UEB118 UEB, ''S'' CODSTPDLGS118, VWFRMCFAnagraficaUEB118.Codice1||'' - ''||VWFRMCFAnagraficaUEB118.Des1__0 || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || VWFRMCFAnagraficaUEB118.Codice1||'' - ''||VWFRMCFAnagraficaUEB118.Des1__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesTit, ''N'' ServContoTerzi, VWFRMCFAnagraficaUEB118.Codice2||'' - ''||VWFRMCFAnagraficaUEB118.Des2__0 || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || VWFRMCFAnagraficaUEB118.Codice2||'' - ''||VWFRMCFAnagraficaUEB118.Des2__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesCat, VWFRMCFAnagraficaUEB118.Codice3||'' - ''||VWFRMCFAnagraficaUEB118.Des3__0 || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || VWFRMCFAnagraficaUEB118.Codice3||'' - ''||VWFRMCFAnagraficaUEB118.Des3__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesRis, VWFRMCFAnagraficaUEB118.Codice2||'' - ''||VWFRMCFAnagraficaUEB118.Des2__0 || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || VWFRMCFAnagraficaUEB118.Codice2||'' - ''||VWFRMCFAnagraficaUEB118.Des2__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesFnz, VWFRMCFAnagraficaUEB118.Codice3||'' - ''||VWFRMCFAnagraficaUEB118.Des3__0 || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || VWFRMCFAnagraficaUEB118.Codice3||'' - ''||VWFRMCFAnagraficaUEB118.Des3__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesSer, VWFRMCFAnagraficaUEB118.Codice4||'' - ''||VWFRMCFAnagraficaUEB118.Des4__0 || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || ''' || VWFRMCFAnagraficaUEB118.Codice4||'' - ''||VWFRMCFAnagraficaUEB118.Des4__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' ) DesInt,'; sFromClause := ' VWFRMCFAnagraficaUEB118 '; sWhereClause := ' VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App AND '|| ' VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118 AND '; END IF; nEser := lEser; IF lFlStampa = 0 THEN curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNGest'||lCodSes ||' AS ' || ' SELECT CFCapitoliPEG.IdCapitolo Id, CFCapitoliPEG.Memo || ''' || sSeparat || ''' || ''' || sSeparat || ''' || ''' || sSeparat || ''' Memo, CFCapitoliPEG.Eser Eser, CFCapitoliPEG.App App, CFCapitoliPEG.Cap Cap, '|| ' CFAnagraficaCapitoli.DesAnagrCap || ''' || sSeparat || ''' || CFAnagraficaCapitoli.DesAnagrCap__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' DesAnagrCap, CFCapitoliPEG.Art Art, DECODE(CFCapitoliPEG.FLCopFPlur, ''S'', ''Cop.FPV'', null) FLCopFPlur, '|| sSelectClause|| 'CFDesCentriResp.NumCdR NumCdR, CFDesCentriResp.DesCdR || ''' || sSeparat || ''' || CFDesCentriResp.DesCdR__1 || ''' || sSeparat || ''' ||''' || sSeparat || ''' DesCdR, CFResponsabili.CodResp CodResp, CFResponsabili.DesResp DesResp, CFCapitoliPEG.AssestAnnPlur Attuale, CFCapitoliPEG.Proposta Proposta, CFCapitoliPEG.StanzIni StanzIni, NVL( ( SELECT NVL(a.StanzIni,0) FROM CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' || lCodRespMin ||' AND '|| lCodRespMax || ' AND ' || ' CFCentriResponsabilita.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax || ' AND ' || ' CFCapitoliPEG.Eser = (a.Eser + 1 )AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR ), 0 ) StanzIniPrec, CFCapitoliPEG.Proposta - CFCapitoliPEG.StanzIni Differenza, CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim Variazioni, NVL( ( SELECT NVL(a.VarAum - a.VarDim, 0 ) FROM CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' || lCodRespMin ||' AND '|| lCodRespMax || ' AND ' || ' CFCentriResponsabilita.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax || ' AND ' || ' CFCapitoliPEG.Eser = (a.Eser + 1 )AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR ), 0 ) VariazioniPrec, pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ImpAcc, pkViewForm.fnTotImpAcc ( ( SELECT a.idcapitolo FROM CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' || lCodRespMin ||' AND '|| lCodRespMax || ' AND ' || ' CFCentriResponsabilita.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax || ' AND ' || ' CFCapitoliPEG.Eser = (a.Eser + 1 )AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR )) ImpAccPrec, pkViewForm.fnTotMandatiCap( CFCapitoliPEG.IdCapitolo ) + pkViewForm.fnTotReversaliCap( CFCapitoliPEG.IdCapitolo ) MandRev, pkViewForm.fnTotMandatiCap( ( SELECT a.idcapitolo FROM CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' || lCodRespMin ||' AND '|| lCodRespMax || ' AND ' || ' CFCentriResponsabilita.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax || ' AND ' || ' CFCapitoliPEG.Eser = (a.Eser + 1 )AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR ) ) + pkViewForm.fnTotReversaliCap( ( SELECT a.idcapitolo FROM CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' || lCodRespMin ||' AND '|| lCodRespMax || ' AND ' || ' CFCentriResponsabilita.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax || ' AND ' || ' CFCapitoliPEG.Eser = (a.Eser + 1 )AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR ) ) MandRevPrec FROM CFCapitoliPEG, CFCentriResponsabilita, CFResponsabili, CFAnagraficaCapitoli, CFDesCentriResp, '||sFromClause|| 'WHERE CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND '|| sWhereClause|| ' CFCentriResponsabilita.CodResp BETWEEN ' || lCodRespMin ||' AND '|| lCodRespMax || ' AND ' || ' CFCentriResponsabilita.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax || ' AND ' || ' CFCapitoliPEG.Eser = ' || nEser , dbms_sql.v7 ); nCurId := DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNGest'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; lNameView := 'vwPRNGest'||lCodSes; ELSIF lFlStampa = 1 THEN CurId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNGestEsplosaCDC'||lCodSes ||' AS ' || 'SELECT CFPEGPerCDC.IdCapitolo||''§''||CFPEGPerCDC.CodCdC Id, ' || ' CFCapitoliPEG.Memo ||''' || sSeparat || '''|| ''' || sSeparat || '''|| ''' || sSeparat || ''' Memo, '|| ' CFCapitoliPEG.Eser Eser, CFCapitoliPEG.App App, CFCapitoliPEG.Cap Cap, ' || -- MAX( CFAnagraficaCapitoli.DesAnagrCap ) DesAnagrCap__0, ' CFAnagraficaCapitoli.DesAnagrCap ||''' || sSeparat || '''|| CFAnagraficaCapitoli.DesAnagrCap__1 ||''' || sSeparat || '''|| ''' || sSeparat || ''' DesAnagrCap, ' || ' CFCapitoliPEG.Art Art, DECODE(CFCapitoliPEG.FLCopFPlur, ''S'', ''Cop.FPV'', null) FLCopFPlur, '|| sSelectClause|| ' CFDesCentriResp.NumCdR NumCdR, ' || ' CFDesCentriResp.DesCdR ||''' || sSeparat || '''|| CFDesCentriResp.DesCdR__1 ||''' || sSeparat || '''|| ''' || sSeparat || ''' DesCdR, ' || ' CFResponsabili.CodResp CodResp, CFResponsabili.DesResp DesResp, ' || 'CFPEGPerCDC.CodCdC, ' || 'CFCentridiCostoRicavo.DesCdC ||''' || sSeparat || '''|| CFCentridiCostoRicavo.DesCdC__1 ||''' || sSeparat || '''|| ''' || sSeparat || ''' DesCdC, ' || ' CFPEGPerCDC.AssestAnnPlur Attuale, ' || ' CFPEGPerCDC.ImpSta Stanzini, ' || ' NVL(( SELECT NVL(b.Impsta,0) FROM CFPEGPerCdC b,CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' ||lCodRespMin||' AND '||lCodRespMax|| ' AND CFCentriResponsabilita.NumCdR BETWEEN ' ||lCodCdRMin ||' AND '||lCodCdRMax|| ' AND CFCapitoliPEG.Eser = (a.Eser + 1 ) AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR AND a.idcapitolo = b.idcapitolo AND b.codcdc = cfpegpercdc.codcdc ),0) StanzIniPrec, '|| ' CFPEGPerCDC.ImpVarAum - CFPEGPerCDC.ImpVarDim Variazioni, ' || ' NVL(( SELECT NVL(b.ImpVarAum,0) - NVL(b.ImpVarDim,0) FROM CFPEGPerCdC b,CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' ||lCodRespMin||' AND '||lCodRespMax|| ' AND CFCentriResponsabilita.NumCdR BETWEEN ' ||lCodCdRMin ||' AND '||lCodCdRMax|| ' AND CFCapitoliPEG.Eser = (a.Eser + 1 ) AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR AND a.idcapitolo = b.idcapitolo AND b.codcdc = cfpegpercdc.codcdc ),0) VariazioniPrec, '|| ' pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ImpAcc, ' || ' pkViewForm.fnTotImpAcc(( SELECT b.idcapitolo FROM CFPEGPerCdC b,CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' ||lCodRespMin||' AND '||lCodRespMax|| ' AND CFCentriResponsabilita.NumCdR BETWEEN ' ||lCodCdRMin ||' AND '||lCodCdRMax|| ' AND CFCapitoliPEG.Eser = (a.Eser + 1 ) AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR AND a.idcapitolo = b.idcapitolo AND b.codcdc = cfpegpercdc.codcdc )) ImpAccPrec, ' || ' pkViewForm.fnTotMandatiCap( CFCapitoliPEG.IdCapitolo ) + '|| ' pkViewForm.fnTotReversaliCap( CFCapitoliPEG.IdCapitolo ) MandRev, '|| ' pkViewForm.fnTotMandatiCap( ( SELECT b.idcapitolo FROM CFPEGPerCdC b,CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' ||lCodRespMin||' AND '||lCodRespMax|| ' AND CFCentriResponsabilita.NumCdR BETWEEN ' ||lCodCdRMin ||' AND '||lCodCdRMax|| ' AND CFCapitoliPEG.Eser = (a.Eser + 1 ) AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR AND a.idcapitolo = b.idcapitolo AND b.codcdc = cfpegpercdc.codcdc ) ) + '|| ' pkViewForm.fnTotReversaliCap( ( SELECT b.idcapitolo FROM CFPEGPerCdC b,CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' ||lCodRespMin||' AND '||lCodRespMax|| ' AND CFCentriResponsabilita.NumCdR BETWEEN ' ||lCodCdRMin ||' AND '||lCodCdRMax|| ' AND CFCapitoliPEG.Eser = (a.Eser + 1 ) AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR AND a.idcapitolo = b.idcapitolo AND b.codcdc = cfpegpercdc.codcdc ) ) MandRevPrec '|| ' FROM CFCapitoliPEG, CFCentriResponsabilita, CFResponsabili, CFDesCentriResp, ' || 'CFAnagraficaCapitoli, CFCentridiCostoRicavo, CFPEGPerCDC, '||sFromClause|| ' WHERE CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND ' || -- join CFCentriResponsabilita 'CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND ' || 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND ' || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND ' || 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND ' || 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND ' || sWhereClause|| 'CFCapitoliPEG.IdCapitolo = CFPEGPerCDC.IdCapitolo AND ' || 'CFPEGPerCDC.CodCdC = CFCentridiCostoRicavo.CodCdC AND ' || 'CFResponsabili.CodResp BETWEEN ' || lCodRespMin ||' AND '|| lCodRespMax || ' AND ' || 'CFDesCentriResp.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax || ' AND ' || 'CFCapitoliPEG.Eser = ' || nEser, dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNGestEsplosaCDC'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; lNameView := 'vwPRNGestEsplosaCDC'||lCodSes; ELSIF lFlStampa = 2 THEN CurId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNGestEsplosaPRG'||lCodSes ||' AS ' || ' SELECT CFPEGPerProgrammi.IdCapitolo||''§''||CFPEGPerProgrammi.IdProgetto Id, ' || ' CFCapitoliPEG.Memo ||''' || sSeparat || '''|| ''' || sSeparat || '''|| ''' || sSeparat || ''' Memo, '|| ' CFCapitoliPEG.Eser Eser, CFCapitoliPEG.App App, CFCapitoliPEG.Cap Cap, ' || ' CFAnagraficaCapitoli.DesAnagrCap ||''' || sSeparat || '''|| CFAnagraficaCapitoli.DesAnagrCap__1 ||''' || sSeparat || '''|| ''' || sSeparat || ''' DesAnagrCap, ' || ' CFCapitoliPEG.Art Art, DECODE(CFCapitoliPEG.FLCopFPlur, ''S'', ''Cop.FPV'', null) FLCopFPlur, '|| sSelectClause|| ' CFDesCentriResp.NumCdR NumCdR, ' || -- MAX( CFDesCentriResp.DesCdR ) DesCdR__0, ' CFDesCentriResp.DesCdR ||''' || sSeparat || '''|| CFDesCentriResp.DesCdR__1 ||''' || sSeparat || '''|| ''' || sSeparat || ''' DesCdR, ' || ' CFResponsabili.CodResp CodResp, CFResponsabili.DesResp DesResp, ' || ' CFProgrammi.NumPgm NumPgm, ' || ' CFProgrammi.NomPgm || ''' || sSeparat || ''' || CFProgrammi.NomPgm__1 || ''' || sSeparat || ''' || ''' || sSeparat || ''' NomPgm, ' || ' 0 Attuale, ' || ' CFPEGPerProgrammi.Stanzini Stanzini, ' || ' NVL(( SELECT NVL(b.StanzIni,0) FROM CFPEGPerProgrammi b,CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' ||lCodRespMin||' AND '||lCodRespMax|| ' AND CFCentriResponsabilita.NumCdR BETWEEN ' ||lCodCdRMin ||' AND '||lCodCdRMax|| ' AND CFCapitoliPEG.Eser = (a.Eser + 1 ) AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR AND a.idcapitolo = b.idcapitolo AND b.IdProgetto = cfpegperProgrammi.IdProgetto ),0) StanzIniPrec, '|| ' CFPEGPerProgrammi.VarAum - CFPEGPerProgrammi.VarDim Variazioni, ' || ' NVL(( SELECT NVL(b.VarAum,0) - NVL(b.VarDim,0) FROM CFPEGPerProgrammi b,CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' ||lCodRespMin||' AND '||lCodRespMax|| ' AND CFCentriResponsabilita.NumCdR BETWEEN ' ||lCodCdRMin ||' AND '||lCodCdRMax|| ' AND CFCapitoliPEG.Eser = (a.Eser + 1 ) AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR AND a.idcapitolo = b.idcapitolo AND b.IdProgetto = cfpegperProgrammi.IdProgetto ),0) VariazioniPrec, '|| ' pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ImpAcc, ' || ' pkViewForm.fnTotImpAcc(( SELECT b.idcapitolo FROM CFPEGPerProgrammi b,CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' ||lCodRespMin||' AND '||lCodRespMax|| ' AND CFCentriResponsabilita.NumCdR BETWEEN ' ||lCodCdRMin ||' AND '||lCodCdRMax|| ' AND CFCapitoliPEG.Eser = (a.Eser + 1 ) AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR AND a.idcapitolo = b.idcapitolo AND b.IdProgetto = cfpegperProgrammi.IdProgetto )) ImpAccPrec, ' || ' pkViewForm.fnTotMandatiCap( CFCapitoliPEG.IdCapitolo ) + '|| ' pkViewForm.fnTotReversaliCap( CFCapitoliPEG.IdCapitolo ) MandRev, '|| ' pkViewForm.fnTotMandatiCap( ( SELECT b.idcapitolo FROM CFPEGPerProgrammi b,CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' ||lCodRespMin||' AND '||lCodRespMax|| ' AND CFCentriResponsabilita.NumCdR BETWEEN ' ||lCodCdRMin ||' AND '||lCodCdRMax|| ' AND CFCapitoliPEG.Eser = (a.Eser + 1 ) AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR AND a.idcapitolo = b.idcapitolo AND b.IdProgetto = cfpegperProgrammi.IdProgetto ) ) + '|| ' pkViewForm.fnTotReversaliCap( ( SELECT b.idcapitolo FROM CFPEGPerProgrammi b,CFCapitoliPEG a, CFCentriResponsabilita WHERE a.CodCdR = CFCentriResponsabilita.CodCdR AND CFCentriResponsabilita.CodResp BETWEEN ' ||lCodRespMin||' AND '||lCodRespMax|| ' AND CFCentriResponsabilita.NumCdR BETWEEN ' ||lCodCdRMin ||' AND '||lCodCdRMax|| ' AND CFCapitoliPEG.Eser = (a.Eser + 1 ) AND CFCapitoliPEG.App = a.App AND CFCapitoliPEG.Ueb = a.Ueb AND CFCapitoliPEG.FlCopFPlur = a.FlCopFPlur AND DECODE( SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ), NULL, CFCapitoliPEG.CodVoce, SUBSTR( CFCapitoliPEG.CodVoce, 4, 2 ) ) = DECODE( SUBSTR( a.CodVoce, 4, 2 ), NULL, CodVoce, SUBSTR( a.CodVoce, 4, 2 ) ) AND CFCapitoliPEG.Cap = a.Cap AND CFCapitoliPEG.Art = a.Art AND CFCapitoliPEG.CodCdR = a.CodCdR AND a.idcapitolo = b.idcapitolo AND b.IdProgetto = cfpegperProgrammi.IdProgetto ) ) MandRevPrec '|| ' FROM CFCapitoliPEG, CFCentriResponsabilita, CFResponsabili, CFDesCentriResp, ' || 'CFAnagraficaCapitoli, CFPEGPerProgrammi, CFProgetti, CFProgrammi, '||sFromClause|| ' WHERE CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND ' || -- join CFCentriResponsabilita 'CFCentriResponsabilita.CodResp = CFResponsabili.CodResp AND ' || 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND ' || 'CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND ' || 'CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND ' || 'CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND ' || sWhereClause|| 'CFCapitoliPEG.IdCapitolo = CFPEGPerProgrammi.IdCapitolo AND ' || 'CFPEGPerProgrammi.IdProgetto = CFProgetti.IdProgetto AND ' || 'CFProgetti.IdProgramma = CFProgrammi.IdProgramma AND ' || 'CFResponsabili.CodResp BETWEEN ' || lCodRespMin ||' AND '|| lCodRespMax || ' AND ' || 'CFDesCentriResp.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax || ' AND ' || 'CFCapitoliPEG.Eser = ' || nEser, dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNGestEsplosaPRG'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); lNameView := 'vwPRNGestEsplosaPRG'||lCodSes; END IF; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF DBMS_SQL.IS_OPEN( CurId ) THEN DBMS_SQL.CLOSE_CURSOR( CurId ); END IF; RETURN pkUtility.fnError( 'pkContStampa.fnVWPRNPredPEG', SQLCODE, ERRDIAG ); END fnVWPRNPredPEG; /************************************************************************** * Funzione per il riempimento della tabella CFStampaPROPrec * * relativa alla stampa del PRO con anno precedente * **************************************************************************/ -- Autore: Torelli Roberto (14/06/2000) FUNCTION fnCFStampaPROPrec ( lEser IN pkType.tyStringa%type, lCodCdRMin IN pkType.tyStringa%type, -- Codice Centro di Responsabilità Minimo lCodCdRMax IN pkType.tyStringa%type, -- Codice Centro di Responsabilità Massimo lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE tyRec IS RECORD ( Id varchar2(100), Eser number(4), App varchar2(1), CodCdR number(4), MaxDesCdR varchar2(2000), MaxCodTit number(4), MAXDesTit varchar2(2000), ServContoTerzi varchar2(1), CodCatFnz number(4), DesCatFnz varchar2(2000), CodSerRis number(4), DesSerRis varchar2(2000), MaxCodInt number(4), MAXDesInt varchar2(2000), SUMStanzIni number(15,2), Attuale number(16,2), SUMImpAcc number(16,2), Obiettivo number(16,2), SUMProposta number(16,2), TotSuCodBil number(16,2) ); rowvwPRNCFCapitoliPEGUEB tyRec; NameView pkType.tyStringa%type; nRet number(9); K Integer; nCur1 integer; lTimeStamp CFCentriDiCostoRicavo.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento lTMaxDesCdR pkType.tyTStringa; lTMAXDesTit pkType.tyTStringa; lTDesCatFnz pkType.tyTStringa; lTDesSerRis pkType.tyTStringa; lTMAXDesInt pkType.tyTStringa; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; nLast NUMBER(9); BEGIN ERRDIAG := ' '; DELETE CFStampaPROPrec; nRet := fnVwPrnCfCapitoliPegUEB( lEser, lCodCdRMin, lCodCdRMax, lCodSes, 'S', NameView, ERRDIAG ); nCur1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( nCur1 , 'SELECT * ' || 'FROM ' || NameView || ' ORDER BY Eser DESC', dbms_sql.v7 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 1, rowvwPRNCFCapitoliPEGUEB.Id, 100 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 2, rowvwPRNCFCapitoliPEGUEB.Eser ); DBMS_SQL.DEFINE_COLUMN( nCur1, 3, rowvwPRNCFCapitoliPEGUEB.App, 1 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 4, rowvwPRNCFCapitoliPEGUEB.CodCdR ); DBMS_SQL.DEFINE_COLUMN( nCur1, 5, rowvwPRNCFCapitoliPEGUEB.MaxDesCdR, 2000 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 6, rowvwPRNCFCapitoliPEGUEB.MaxCodTit ); DBMS_SQL.DEFINE_COLUMN( nCur1, 7, rowvwPRNCFCapitoliPEGUEB.MAXDesTit, 2000 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 8, rowvwPRNCFCapitoliPEGUEB.ServContoTerzi, 1 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 9, rowvwPRNCFCapitoliPEGUEB.CodCatFnz ); DBMS_SQL.DEFINE_COLUMN( nCur1, 10, rowvwPRNCFCapitoliPEGUEB.DesCatFnz, 2000 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 11, rowvwPRNCFCapitoliPEGUEB.CodSerRis ); DBMS_SQL.DEFINE_COLUMN( nCur1, 12, rowvwPRNCFCapitoliPEGUEB.DesSerRis, 2000 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 13, rowvwPRNCFCapitoliPEGUEB.MaxCodInt ); DBMS_SQL.DEFINE_COLUMN( nCur1, 14, rowvwPRNCFCapitoliPEGUEB.MAXDesInt, 2000 ); DBMS_SQL.DEFINE_COLUMN( nCur1, 15, rowvwPRNCFCapitoliPEGUEB.SUMStanzIni ); DBMS_SQL.DEFINE_COLUMN( nCur1, 16, rowvwPRNCFCapitoliPEGUEB.Attuale ); DBMS_SQL.DEFINE_COLUMN( nCur1, 17, rowvwPRNCFCapitoliPEGUEB.SUMImpAcc ); DBMS_SQL.DEFINE_COLUMN( nCur1, 18, rowvwPRNCFCapitoliPEGUEB.Obiettivo ); DBMS_SQL.DEFINE_COLUMN( nCur1, 19, rowvwPRNCFCapitoliPEGUEB.SUMProposta ); DBMS_SQL.DEFINE_COLUMN( nCur1, 20, rowvwPRNCFCapitoliPEGUEB.TotSuCodBil ); K := DBMS_SQL.EXECUTE( nCur1 ); LOOP IF DBMS_SQL.FETCH_ROWS( nCur1 ) > 0 THEN DBMS_SQL.COLUMN_VALUE( nCur1, 1, rowvwPRNCFCapitoliPEGUEB.Id ); DBMS_SQL.COLUMN_VALUE( nCur1, 2, rowvwPRNCFCapitoliPEGUEB.Eser ); DBMS_SQL.COLUMN_VALUE( nCur1, 3, rowvwPRNCFCapitoliPEGUEB.App ); DBMS_SQL.COLUMN_VALUE( nCur1, 4, rowvwPRNCFCapitoliPEGUEB.CodCdR ); DBMS_SQL.COLUMN_VALUE( nCur1, 5, rowvwPRNCFCapitoliPEGUEB.MaxDesCdR ); DBMS_SQL.COLUMN_VALUE( nCur1, 6, rowvwPRNCFCapitoliPEGUEB.MaxCodTit ); DBMS_SQL.COLUMN_VALUE( nCur1, 7, rowvwPRNCFCapitoliPEGUEB.MAXDesTit ); DBMS_SQL.COLUMN_VALUE( nCur1, 8, rowvwPRNCFCapitoliPEGUEB.ServContoTerzi ); DBMS_SQL.COLUMN_VALUE( nCur1, 9, rowvwPRNCFCapitoliPEGUEB.CodCatFnz ); DBMS_SQL.COLUMN_VALUE( nCur1, 10, rowvwPRNCFCapitoliPEGUEB.DesCatFnz ); DBMS_SQL.COLUMN_VALUE( nCur1, 11, rowvwPRNCFCapitoliPEGUEB.CodSerRis ); DBMS_SQL.COLUMN_VALUE( nCur1, 12, rowvwPRNCFCapitoliPEGUEB.DesSerRis ); DBMS_SQL.COLUMN_VALUE( nCur1, 13, rowvwPRNCFCapitoliPEGUEB.MaxCodInt ); DBMS_SQL.COLUMN_VALUE( nCur1, 14, rowvwPRNCFCapitoliPEGUEB.MAXDesInt ); DBMS_SQL.COLUMN_VALUE( nCur1, 15, rowvwPRNCFCapitoliPEGUEB.SUMStanzIni ); DBMS_SQL.COLUMN_VALUE( nCur1, 16, rowvwPRNCFCapitoliPEGUEB.Attuale ); DBMS_SQL.COLUMN_VALUE( nCur1, 17, rowvwPRNCFCapitoliPEGUEB.SUMImpAcc ); DBMS_SQL.COLUMN_VALUE( nCur1, 18, rowvwPRNCFCapitoliPEGUEB.Obiettivo ); DBMS_SQL.COLUMN_VALUE( nCur1, 19, rowvwPRNCFCapitoliPEGUEB.SUMProposta ); DBMS_SQL.COLUMN_VALUE( nCur1, 20, rowvwPRNCFCapitoliPEGUEB.TotSuCodBil ); IF rowvwPRNCFCapitoliPEGUEB.Eser = lEser THEN -- Split delle descrizioni nelle 4 lingue: ------------------------- -- Split di MaxDesCdR: nRet := pkUtility.fnrealsplit(rowvwPRNCFCapitoliPEGUEB.MaxDesCdR,sSeparat,'',nLast,ERRDIAG,lTMaxDesCdR); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Inizializzo le posizioni rimanenti: FOR J In (nLast + 1)..4 LOOP lTMaxDesCdR(J) := NULL; END LOOP; -- Split di MAXDesTit: nRet := pkUtility.fnrealsplit(rowvwPRNCFCapitoliPEGUEB.MAXDesTit,sSeparat,'',nLast,ERRDIAG,lTMAXDesTit); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Inizializzo le posizioni rimanenti: FOR J In (nLast + 1)..4 LOOP lTMAXDesTit(J) := NULL; END LOOP; -- Split di DesCatFnz: nRet := pkUtility.fnrealsplit(rowvwPRNCFCapitoliPEGUEB.DesCatFnz,sSeparat,'',nLast,ERRDIAG,lTDesCatFnz); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Inizializzo le posizioni rimanenti: FOR J In (nLast + 1)..4 LOOP lTDesCatFnz(J) := NULL; END LOOP; -- Split di DesSerRis: nRet := pkUtility.fnrealsplit(rowvwPRNCFCapitoliPEGUEB.DesSerRis,sSeparat,'',nLast,ERRDIAG,lTDesSerRis); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Inizializzo le posizioni rimanenti: FOR J In (nLast + 1)..4 LOOP lTDesSerRis(J) := NULL; END LOOP; -- Split di MAXDesInt: nRet := pkUtility.fnrealsplit(rowvwPRNCFCapitoliPEGUEB.MAXDesInt,sSeparat,'',nLast,ERRDIAG,lTMAXDesInt); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Inizializzo le posizioni rimanenti: FOR J In (nLast + 1)..4 LOOP lTMAXDesInt(J) := NULL; END LOOP; -------------------------------------------------------------------- INSERT INTO CFStampaPROPrec( ID, Eser, App, CodCdR, MAXDesCdR, MAXDesCdR__1, MAXDesCdR__2, MAXDesCdR__3, MAXCodTit, DesTit, DesTit__1, DesTit__2, DesTit__3, ServContoTerzi, CodCatFnz, DesCatFnz, DesCatFnz__1, DesCatFnz__2, DesCatFnz__3, CodSerRis, DesSerRis, DesSerRis__1, DesSerRis__2, DesSerRis__3, MAXCodInt, DesInt, DesInt__1, DesInt__2, DesInt__3, StanzIni, Attuale, ImpAcc, Obiettivo, Proposta, TotSuCodBil, CodSes, TmsLock ) VALUES( rowvwPRNCFCapitoliPEGUEB.Id, rowvwPRNCFCapitoliPEGUEB.Eser, rowvwPRNCFCapitoliPEGUEB.App, rowvwPRNCFCapitoliPEGUEB.CodCdR, lTMaxDesCdR(1), lTMaxDesCdR(2), lTMaxDesCdR(3), lTMaxDesCdR(4), rowvwPRNCFCapitoliPEGUEB.MAXCodTit, lTMAXDesTit(1), lTMAXDesTit(2), lTMAXDesTit(3), lTMAXDesTit(4), rowvwPRNCFCapitoliPEGUEB.ServContoTerzi, rowvwPRNCFCapitoliPEGUEB.CodCatFnz, lTDesCatFnz(1), lTDesCatFnz(2), lTDesCatFnz(3), lTDesCatFnz(4), rowvwPRNCFCapitoliPEGUEB.CodSerRis, lTDesSerRis(1), lTDesSerRis(2), lTDesSerRis(3), lTDesSerRis(4), rowvwPRNCFCapitoliPEGUEB.MAXCodInt, lTMAXDesInt(1), lTMAXDesInt(2), lTMAXDesInt(3), lTMAXDesInt(4), rowvwPRNCFCapitoliPEGUEB.SUMStanzIni, rowvwPRNCFCapitoliPEGUEB.Attuale, rowvwPRNCFCapitoliPEGUEB.SUMImpAcc, rowvwPRNCFCapitoliPEGUEB.Obiettivo, rowvwPRNCFCapitoliPEGUEB.SUMProposta, rowvwPRNCFCapitoliPEGUEB.TotSuCodBil, 0, lTimeStamp ); ELSE UPDATE CFStampaPROPrec SET StanzIniPrec = rowvwPRNCFCapitoliPEGUEB.SUMStanzIni, ImpAccPrec = rowvwPRNCFCapitoliPEGUEB.SUMImpAcc WHERE rowvwPRNCFCapitoliPEGUEB.id = SUBSTR( id, 1, length( id ) - 4 )||( lEser - 1 ); END IF; ELSE EXIT; END IF; END LOOP; DBMS_SQL.CLOSE_CURSOR( nCur1 ); UPDATE CFStampaPROPrec SET StanzIniPrec = 0, ImpAccPrec = 0 WHERE StanzIniPrec IS NULL AND ImpAccPrec IS NULL; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN IF DBMS_SQL.IS_OPEN( nCur1 ) THEN DBMS_SQL.CLOSE_CURSOR( nCur1 ); END IF; ROLLBACK; RETURN pkUtility.fnError( '1pkContStampa.CFStampaPROPrecIns', SQLCODE, ERRDIAG ); END fnCFStampaPROPrec; /************************************************************************* * Funzione per la stampa P.R.O. * * Piano di Attribuzione Risorse e obiettivi * *************************************************************************/ -- Autore: Sabatini -- Al nome CodCdR corrisponde il NumCdR !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FUNCTION fnVwPrnCfCapitoliPegUEB ( lEser IN pkType.tyStringa%type, lCodCdRMin IN pkType.tyStringa%type, -- Codice Centro di Responsabilità Minimo lCodCdRMax IN pkType.tyStringa%type, -- Codice Centro di Responsabilità Massimo lCodSes IN pkType.tyStringa%type, lFlEserPrec IN pkType.tyStringa%type, -- 'S'=stampa con esercizio precedente lNameView OUT pkType.tyStringa%type, -- nome della vista ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS curId integer; nCurId integer; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sCODSTPDLGS118 CFOPZIONI.opzione%TYPE; BEGIN lNameView := ' '; ERRDIAG := ' '; IF lCodSes = 0 OR lCodSes IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(46, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPrnCfCapitoliPegUEB', -499, ERRDIAG ); ELSE IF lEser IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(47, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPrnCfCapitoliPegUEB', -499, ERRDIAG ); END IF; END IF; -- seleziono l'Opzione necessarie SELECT MAX( Opzione ) INTO sCODSTPDLGS118 FROM CFOpzioni WHERE DesOpzione = 'CODSTPDLGS118'; IF sCODSTPDLGS118 = 'N' THEN -- UEB curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNCFCapPEGUEB1E'||lCodSes || ' AS ' || 'SELECT CFCapitoliPEG.UEB||CFCapitoliPEG.CodCdR||CFCapitoliPEG.Eser Id, ' || 'CFCapitoliPEG.Eser, CFCapitoliPEG.UEB, ' || 'MAX( CFDesCentriResp.NumCdr ) CodCdR, ' || 'MAX( CFDesCentriResp.DesCdR ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__2 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__3 ) MAXDesCdR, '|| 'MAX( CFAnagraficaUEB.CodTit ) MAXCodTit, ' || 'MAX( CFAnagraficaUEB.DesTit ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__3 ) MAXDesTit, ' || 'MAX( CFAnagraficaUEB.ServContoTerzi ) ServContoTerzi, ' || 'MAX( CFAnagraficaUEB.CodCat ) MAXCodCat, ' || 'MAX( CFAnagraficaUEB.DesCat ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesCat__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesCat__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesCat__3 ) MAXDesCat, ' || 'MAX( CFAnagraficaUEB.CodRis ) MAXCodRis, ' || 'MAX( CFAnagraficaUEB.DesRis ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesRis__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesRis__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesRis__3 ) MAXDesRisorsa, '|| 'SUM( CFCapitoliPEG.StanzIni ) SUMStanzIni, ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, ' || 'SUM( pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) SUMImpAcc, ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ' || '- pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) Obiettivo, ' || 'SUM( CFCapitoliPEG.Proposta ) SUMProposta ' || 'FROM CFCentriResponsabilita, CFAnagraficaUEB, CFCapitoliPEG, CFDesCentriResp ' || 'WHERE CFCapitoliPEG.App = ''E'' AND ' || 'CFCapitoliPEG.App = CFAnagraficaUEB.App AND ' || 'CFCapitoliPEG.UEB = CFAnagraficaUEB.UEB AND ' || 'CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND ' || 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND ' || 'CFDesCentriResp.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax ||' AND ' || '( CFCapitoliPEG.Eser = ' || lEser || ' OR ( CFCapitoliPEG.Eser = ' || TO_NUMBER( lEser - 1 ) || ' AND '''|| lFlEserPrec ||''' = ''S'' ) ) '|| 'GROUP BY CFCapitoliPEG.UEB, CFCapitoliPEG.CodCdR, CFCapitoliPEG.Eser', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNCFCapPEGUEB1E'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; --------------------------------------- curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNCFCapPEGUEB1S'||lCodSes || ' AS ' || 'SELECT CFCapitoliPEG.UEB||CFCapitoliPEG.CodCdR||CFCapitoliPEG.Eser Id, ' || 'CFCapitoliPEG.Eser, CFCapitoliPEG.UEB, ' || 'MAX( CFDesCentriResp.NumCdR ) CodCdR, ' || 'MAX( CFDesCentriResp.DesCdR ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__2 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__3 ) MAXDesCdR, ' || 'MAX( CFAnagraficaUEB.CodTit ) MAXCodTit, ' || 'MAX( CFAnagraficaUEB.DesTit ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesTit__3 ) MAXDesTit, '|| 'MAX( CFAnagraficaUEB.ServContoTerzi ) ServContoTerzi, ' || 'MAX( CFAnagraficaUEB.CodFnz ) MAXCodFnz, ' || 'MAX( CFAnagraficaUEB.DesFnz ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesFnz__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesFnz__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesFnz__3 ) MAXDesCat, '|| 'MAX( CFAnagraficaUEB.CodSer ) MAXCodSer, ' || 'MAX( CFAnagraficaUEB.DesSer ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesSer__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesSer__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesSer__3 ) MAXDesSer, ' || 'MAX( CFAnagraficaUEB.CodInt ) MAXCodInt, ' || 'MAX( CFAnagraficaUEB.DesInt ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesInt__1 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesInt__2 ) || ''' || sSeparat || ''' || MAX( CFAnagraficaUEB.DesInt__3 ) MAXDesInt, '|| 'SUM( CFCapitoliPEG.StanzIni ) SUMStanzIni, ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| 'SUM( pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) SUMImpAcc, ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ' || '- pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) Obiettivo, ' || 'SUM( CFCapitoliPEG.Proposta ) SUMProposta ' || 'FROM CFCentriResponsabilita, CFAnagraficaUEB, CFCapitoliPEG, CFDesCentriResp '|| 'WHERE CFCapitoliPEG.App = ''S'' AND '|| 'CFCapitoliPEG.App = CFAnagraficaUEB.App AND '|| 'CFCapitoliPEG.UEB = CFAnagraficaUEB.UEB AND '|| 'CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND '|| 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND ' || 'CFDesCentriResp.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax ||' AND ' || '( CFCapitoliPEG.Eser = ' || lEser || ' OR ( CFCapitoliPEG.Eser = ' || TO_NUMBER( lEser - 1 ) || ' AND '''|| lFlEserPrec ||''' = ''S'' ) ) '|| ' GROUP BY CFCapitoliPEG.UEB, CFCapitoliPEG.CodCdR, CFCapitoliPEG.Eser', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNCFCapPEGUEB1S'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; ----------------------------------------- curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNCFCapPEGUEB2'||lCodSes ||' AS '|| 'SELECT Eser||App||UEB Id, '|| 'Eser, App, UEB, ' || 'SUM( StanzIni ) TotSuCodBil '|| 'FROM CFCapitoliPEG '|| 'WHERE Eser = ' || lEser || ' OR ( Eser = ' || TO_NUMBER( lEser - 1 ) || ' AND '''|| lFlEserPrec ||''' = ''S'' ) '|| 'GROUP BY Eser, App, UEB', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNCFCapPEGUEB2'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; --------------------------------------- ELSE -- UEB118 curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNCFCapPEGUEB1E'||lCodSes || ' AS ' || 'SELECT CFCapitoliPEG.UEB118||CFCapitoliPEG.CodCdR||CFCapitoliPEG.Eser Id, ' || 'CFCapitoliPEG.Eser, CFCapitoliPEG.UEB118 UEB, ' || 'MAX( CFDesCentriResp.NumCdr ) CodCdR, ' || 'MAX( CFDesCentriResp.DesCdR ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__2 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__3 ) MAXDesCdR, '|| 'MAX( VWFRMCFAnagraficaUEB118.Codice1 ) MAXCodTit, ' || 'MAX( VWFRMCFAnagraficaUEB118.Des1 ) MAXDesTit, ' || ' ''N'' ServContoTerzi, ' || 'MAX( VWFRMCFAnagraficaUEB118.Codice2 ) MAXCodCat, ' || 'MAX( VWFRMCFAnagraficaUEB118.Des2 ) MAXDesCat, ' || 'MAX( VWFRMCFAnagraficaUEB118.Codice3 ) MAXCodRis, ' || 'MAX( VWFRMCFAnagraficaUEB118.Des3 ) MAXDesRisorsa, '|| 'SUM( CFCapitoliPEG.StanzIni ) SUMStanzIni, ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, ' || 'SUM( pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) SUMImpAcc, ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ' || '- pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) Obiettivo, ' || 'SUM( CFCapitoliPEG.Proposta ) SUMProposta ' || 'FROM CFCentriResponsabilita, VWFRMCFAnagraficaUEB118, CFCapitoliPEG, CFDesCentriResp ' || 'WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND '|| 'VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND '|| 'CFCapitoliPEG.App = ''E'' AND ' || 'CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND ' || 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND ' || 'CFDesCentriResp.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax ||' AND ' || '( CFCapitoliPEG.Eser = ' || lEser || ' OR ( CFCapitoliPEG.Eser = ' || TO_NUMBER( lEser - 1 ) || ' AND '''|| lFlEserPrec ||''' = ''S'' ) ) '|| 'GROUP BY CFCapitoliPEG.UEB118, CFCapitoliPEG.CodCdR, CFCapitoliPEG.Eser', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNCFCapPEGUEB1E'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; --------------------------------------- curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNCFCapPEGUEB1S'||lCodSes || ' AS ' || 'SELECT CFCapitoliPEG.UEB118||CFCapitoliPEG.CodCdR||CFCapitoliPEG.Eser Id, ' || 'CFCapitoliPEG.Eser, CFCapitoliPEG.UEB118 UEB, ' || 'MAX( CFDesCentriResp.NumCdR ) CodCdR, ' || 'MAX( CFDesCentriResp.DesCdR ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__1 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__2 ) || ''' || sSeparat || ''' || MAX( CFDesCentriResp.DesCdR__3 ) MAXDesCdR, ' || 'MAX( VWFRMCFAnagraficaUEB118.Codice1 ) MAXCodTit, ' || 'MAX( VWFRMCFAnagraficaUEB118.Des1 ) MAXDesTit, '|| ' ''N'' ServContoTerzi, ' || 'MAX( VWFRMCFAnagraficaUEB118.Codice2 ) MAXCodFnz, ' || 'MAX( VWFRMCFAnagraficaUEB118.Des2 ) MAXDesCat, '|| 'MAX( VWFRMCFAnagraficaUEB118.Codice3 ) MAXCodSer, ' || 'MAX( VWFRMCFAnagraficaUEB118.Des3 ) MAXDesSer, ' || 'MAX( VWFRMCFAnagraficaUEB118.Codice4 ) MAXCodInt, ' || 'MAX( VWFRMCFAnagraficaUEB118.Des4 ) MAXDesInt, '|| 'SUM( CFCapitoliPEG.StanzIni ) SUMStanzIni, ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ) Attuale, '|| 'SUM( pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) SUMImpAcc, ' || 'SUM( CFCapitoliPEG.StanzIni + CFCapitoliPEG.VarAum - CFCapitoliPEG.VarDim ' || '- pkViewForm.fnTotImpAcc( CFCapitoliPEG.IdCapitolo ) ) Obiettivo, ' || 'SUM( CFCapitoliPEG.Proposta ) SUMProposta ' || 'FROM CFCentriResponsabilita, VWFRMCFAnagraficaUEB118, CFCapitoliPEG, CFDesCentriResp '|| 'WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND '|| 'VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND '|| 'CFCapitoliPEG.App = ''S'' AND '|| 'CFCapitoliPEG.CodCdR = CFCentriResponsabilita.CodCdR AND '|| 'CFCentriResponsabilita.NumCdR = CFDesCentriResp.NumCdR AND ' || 'CFDesCentriResp.NumCdR BETWEEN ' || lCodCdRMin ||' AND '|| lCodCdRMax ||' AND ' || '( CFCapitoliPEG.Eser = ' || lEser || ' OR ( CFCapitoliPEG.Eser = ' || TO_NUMBER( lEser - 1 ) || ' AND '''|| lFlEserPrec ||''' = ''S'' ) ) '|| ' GROUP BY CFCapitoliPEG.UEB118, CFCapitoliPEG.CodCdR, CFCapitoliPEG.Eser', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNCFCapPEGUEB1S'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; ----------------------------------------- curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNCFCapPEGUEB2'||lCodSes ||' AS '|| 'SELECT Eser||App||UEB118 Id, '|| 'Eser, App, UEB118 UEB, ' || 'SUM( StanzIni ) TotSuCodBil '|| 'FROM CFCapitoliPEG '|| 'WHERE Eser = ' || lEser || ' OR ( Eser = ' || TO_NUMBER( lEser - 1 ) || ' AND '''|| lFlEserPrec ||''' = ''S'' ) '|| 'GROUP BY Eser, App, UEB118', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNCFCapPEGUEB2'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; --------------------------------------- END IF; curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNCFCapPEGUEB'||lCodSes || ' AS '|| 'SELECT vwPRNCFCapPEGUEB1S'||lCodSes ||'.Id, vwPRNCFCapPEGUEB1S'||lCodSes ||'.Eser, vwPRNCFCapPEGUEB2'||lCodSes ||'.App, '|| 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.CodCdR, ' || 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.MAXDesCdR, ' || 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.MAXCodTit, ' || 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.MAXDesTit, '|| 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.ServContoTerzi, '|| 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.MAXCodFnz CodCatFnz, ' || 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.MAXDesCat DesCatFnz, ' || 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.MAXCodSer CodSerRis, ' || 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.MAXDesSer DesSerRis, '|| 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.MAXCodInt, ' || 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.MAXDesInt, '|| 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.SUMStanzIni, '|| 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.Attuale, '|| 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.SUMImpAcc, vwPRNCFCapPEGUEB1S'||lCodSes ||'.Obiettivo, '|| 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.SUMProposta, '|| 'vwPRNCFCapPEGUEB2'||lCodSes ||'.TotSuCodBil '|| ' FROM vwPRNCFCapPEGUEB1S'||lCodSes ||', vwPRNCFCapPEGUEB2'||lCodSes || ' WHERE vwPRNCFCapPEGUEB1S'||lCodSes ||'.UEB = vwPRNCFCapPEGUEB2'||lCodSes ||'.UEB AND '|| 'vwPRNCFCapPEGUEB1S'||lCodSes ||'.Eser = vwPRNCFCapPEGUEB2'||lCodSes ||'.Eser AND '|| 'vwPRNCFCapPEGUEB2'||lCodSes ||'.App = ''S''' || ' UNION '|| 'SELECT vwPRNCFCapPEGUEB1E'||lCodSes ||'.Id, vwPRNCFCapPEGUEB1E'||lCodSes ||'.Eser, vwPRNCFCapPEGUEB2'||lCodSes ||'.App, ' || 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.CodCdR, ' || 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.MAXDesCdR, '|| 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.MAXCodTit, ' || 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.MAXDesTit, '|| 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.ServContoTerzi, ' || 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.MAXCodCat, ' || 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.MAXDesCat, '|| 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.MAXCodRis, ' || 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.MAXDesRisorsa, '|| 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.MAXCodRis, ' || 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.MAXDesRisorsa, '|| 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.SUMStanzIni, '|| 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.Attuale, '|| 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.SUMImpAcc, vwPRNCFCapPEGUEB1E'||lCodSes ||'.Obiettivo, '|| 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.SUMProposta, '|| 'vwPRNCFCapPEGUEB2'||lCodSes ||'.TotSuCodBil '|| ' FROM vwPRNCFCapPEGUEB1E'||lCodSes ||', vwPRNCFCapPEGUEB2'||lCodSes || ' WHERE vwPRNCFCapPEGUEB1E'||lCodSes ||'.UEB = vwPRNCFCapPEGUEB2'||lCodSes ||'.UEB AND '|| 'vwPRNCFCapPEGUEB1E'||lCodSes ||'.Eser = vwPRNCFCapPEGUEB2'||lCodSes ||'.Eser AND '|| 'vwPRNCFCapPEGUEB2'||lCodSes ||'.App = ''E''', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNCFCapPEGUEB'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); lNameView := 'vwPRNCFCapPEGUEB'||lCodSes; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF DBMS_SQL.IS_OPEN( CurId ) THEN DBMS_SQL.CLOSE_CURSOR( CurId ); END IF; RETURN pkUtility.fnError( 'pkContStampa.fnVwPrnCfCapitoliPegUEB', SQLCODE, ERRDIAG ); END fnVwPrnCfCapitoliPegUEB; /************************************************************************** * Funzione per la stampa del Quadro Generale Riassuntivo * **************************************************************************/ -- Autore: Torelli Roberto (24/08/2000) FUNCTION fnvwPRNQuaGenRias ( lEser IN pkType.tyStringa%type, -- Esercizio lCodSes IN pkType.tyStringa%type, lNameView OUT pkType.tyStringa%type, -- Nome della vista creata ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS curId integer; nCurId integer; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sErr20__0 ErroriPers.ling0%TYPE := pkUtilityCont.fnerroripers(20, 0); sErr20__1 ErroriPers.ling0%TYPE := pkUtilityCont.fnerroripers(20, 1); sErr20__2 ErroriPers.ling0%TYPE := pkUtilityCont.fnerroripers(20, 2); sErr20__3 ErroriPers.ling0%TYPE := pkUtilityCont.fnerroripers(20, 3); BEGIN lNameView := ' '; ERRDIAG := ' '; IF lCodSes = 0 OR lCodSes IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(46, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnvwPRNQuaGenRias', -499, ERRDIAG ); ELSE IF lEser IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(47, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnvwPRNQuaGenRias', -499, ERRDIAG ); END IF; END IF; curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( curId , 'CREATE OR REPLACE VIEW vwPRNQuaGenRiasE'|| lCodSes ||' AS '|| 'SELECT CFTitoli.CodTit Id, ' || lEser ||' Eser, ''E'' APP, '|| 'DECODE( CFTitoli.CodTit, 5,2, 6,2, 1 ) Blocco, '|| 'CFTitoli.CodTit, ' || '''' || sErr20__0 || ''' ||'' '' || CFTitoli.CodTit ||'' - '' ||MAX( CFTitoli.DesTit ) || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || '''|| ''' || sErr20__1 || ''' ||'' '' || CFTitoli.CodTit ||'' - '' ||MAX( CFTitoli.DesTit__1 ) ||''' || sSeparat || '''|| ''' || sErr20__2 || ''' ||'' '' || CFTitoli.CodTit ||'' - '' ||MAX( CFTitoli.DesTit__2 ) ||''' || sSeparat || '''|| ''' || sErr20__3 || ''' ||'' '' || CFTitoli.CodTit ||'' - '' ||MAX( CFTitoli.DesTit__3 ) ) DesTit, '|| 'NVL( SUM( Prev1 ), 0 ) SUMPrev1 '|| 'FROM CFStampaBilancioPrevE, CFTitoli '|| 'WHERE CFTitoli.App = ''E'' AND '|| 'CFTitoli.CodTit = CFStampaBilancioPrevE.CodTit(+) AND '|| 'CFStampaBilancioPrevE.Eser(+) = ' || lEser || ' GROUP BY CFTitoli.CodTit', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.CLOSE_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNQuaGenRiasE'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; --------------------------------------- curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( CurId, 'CREATE OR REPLACE VIEW vwPRNQuaGenRiasS'|| lCodSes || ' AS ' || 'SELECT CFTitoli.CodTit Id, ' || lEser ||' Eser, ''S'' APP, ' || 'DECODE( CFTitoli.CodTit, 1,1, 2,1, 2 ) Blocco, ' || 'CFTitoli.CodTit, ' || '''' || sErr20__0 || ''' ||'' '' || CFTitoli.CodTit ||'' - '' ||MAX( CFTitoli.DesTit ) || DECODE(''' || sSeparat || ''', NULL, NULL, ''' || sSeparat || '''|| ''' || sErr20__1 || ''' ||'' '' || CFTitoli.CodTit ||'' - '' ||MAX( CFTitoli.DesTit__1 ) ||''' || sSeparat || '''|| ''' || sErr20__2 || ''' ||'' '' || CFTitoli.CodTit ||'' - '' ||MAX( CFTitoli.DesTit__2 ) ||''' || sSeparat || '''|| ''' || sErr20__3 || ''' ||'' '' || CFTitoli.CodTit ||'' - '' ||MAX( CFTitoli.DesTit__3 ) ) DesTit, ' || 'NVL( SUM( Prev1 ), 0 ) SUMPrev1 ' || 'FROM CFStampaBilancioPrevS, CFTitoli ' || 'WHERE CFTitoli.App = ''S'' AND ' || 'CFTitoli.CodTit = CFStampaBilancioPrevS.CodTit(+) AND ' || 'CFStampaBilancioPrevS.Eser(+) = ' || lEser || ' GROUP BY CFTitoli.CodTit', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.close_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNQuaGenRiasS'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; --------------------------------------- curId:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( CurId, 'CREATE OR REPLACE VIEW vwPRNQuaGenRias'|| lCodSes || ' AS ' || 'SELECT E.id||S.id id, ' || 'E.Eser EserE, E.App AppE, E.Blocco BloccoE, E.CodTit CodTitE, ' || 'E.DesTit DesTitE, E.SUMPrev1 SUMPrev1E, ' || 'S.CodTit CodTitS, ' || ' S.DesTit DesTitS, S.SUMPrev1 SUMPrev1S ' || 'FROM vwPRNQuaGenRiasE'|| lCodSes ||' E, vwPRNQuaGenRiasS'|| lCodSes ||' S ' || 'WHERE ( E.CodTit = S.CodTit(+) AND E.Blocco = S.Blocco(+) AND E.Blocco = 1 AND E.Eser = S.Eser(+) ) ' || 'UNION ' || 'SELECT E.id||S.id id, ' || 'E.Eser EserE, E.App AppE, NVL( E.Blocco, 2 ) BloccoE, E.CodTit CodTitE, ' || 'E.DesTit DesTitE, E.SUMPrev1 SUMPrev1E, ' || 'S.CodTit CodTitS, ' || 'S.DesTit DesTitS, S.SUMPrev1 SUMPrev1S ' || 'FROM vwPRNQuaGenRiasE'|| lCodSes ||' E, vwPRNQuaGenRiasS'|| lCodSes ||' S ' || 'WHERE E.Blocco(+) = S.Blocco AND ' || '( S.CodTit = ( E.CodTit(+) - 2 ) ) AND ' || 'S.Blocco = 2 AND ( E.Eser = S.Eser OR E.Eser IS NULL )', dbms_sql.v7 ); nCurId:=DBMS_SQL.EXECUTE( CurId ); DBMS_SQL.CLOSE_CURSOR( CurId ); INSERT INTO CFContrView VALUES ( 'vwPRNQuaGenRias'||lCodSes, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); lNameView := 'vwPRNQuaGenRias'||lCodSes; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF DBMS_SQL.IS_OPEN( CurId ) THEN DBMS_SQL.CLOSE_CURSOR( CurId ); END IF; RETURN pkUtility.fnError( 'pkContStampa.fnvwPRNQuaGenRias', SQLCODE, ERRDIAG ); END fnvwPRNQuaGenRias; /************************************************************************** * Funzione per la stampa 'Riepilogo per Programmi' * **************************************************************************/ -- Autore: Torelli Roberto FUNCTION fnVwPRNRiepPerPrg ( lEser IN pkType.tyStringa%type, -- Esercizio lCodSes IN pkType.tyStringa%type, -- Codice della sessione utente ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS curId integer; nCurId integer; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; lTimeStamp CFStampaBilRiepPerPrg.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; BEGIN -- ripulisco la tabella DELETE CFStampaBilRiepPerPrg WHERE CodSes = lCodSes OR CodSes NOT IN ( SELECT CodSessione FROM CFSessioni ); -- Controllo i parametri di Input IF lCodSes = 0 OR lCodSes IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(46, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNRiepPerPrg', -499, ERRDIAG ); ELSE IF lEser IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(47, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNRiepPerPrg', -499, ERRDIAG ); END IF; END IF; --------------------------------------- -- Inserimento dei dati INSERT INTO CFStampaBilRiepPerPrg ( Eser, NumPgm, NomPgm, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, NomPgm__1, NomPgm__2, NomPgm__3, CodSes, TmsLock ) SELECT Eser, NumPgm, MAX( NomPgm ), 1, 'CO', SUM( ImpChiuso ), SUM( ImpCorso ), SUM( Imp1 ), SUM( Imp2 ), SUM( Imp3 ), SUM( Imp4 ), SUM( Imp5 ), MAX( NomPgm__1 ), MAX( NomPgm__2 ), MAX( NomPgm__3 ), lCodSes, lTimeStamp FROM CFStampaBilSpesePerPrg WHERE Eser = lEser AND Prg = 1 AND ( CodTit = 1 OR CodTit = 3 ) GROUP BY Eser, NumPgm, NomPgm; INSERT INTO CFStampaBilRiepPerPrg ( Eser, NumPgm, NomPgm, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, NomPgm__1, NomPgm__2, NomPgm__3, CodSes, TmsLock ) SELECT Eser, NumPgm, MAX( NomPgm ), 2, 'SV', SUM( ImpChiuso ), SUM( ImpCorso ), SUM( Imp1 ), SUM( Imp2 ), SUM( Imp3 ), SUM( Imp4 ), SUM( Imp5 ), MAX( NomPgm__1 ), MAX( NomPgm__2 ), MAX( NomPgm__3 ), lCodSes, lTimeStamp FROM CFStampaBilSpesePerPrg WHERE Eser = lEser AND Prg = 2 AND ( CodTit = 1 OR CodTit = 3 ) GROUP BY Eser, NumPgm, NomPgm; INSERT INTO CFStampaBilRiepPerPrg ( Eser, NumPgm, NomPgm, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, NomPgm__1, NomPgm__2, NomPgm__3, CodSes, TmsLock ) SELECT Eser, NumPgm, MAX( NomPgm ), 3, 'T1', SUM( ImpChiuso ), SUM( ImpCorso ), SUM( Imp1 ), SUM( Imp2 ), SUM( Imp3 ), SUM( Imp4 ), SUM( Imp5 ), MAX( NomPgm__1 ), MAX( NomPgm__2 ), MAX( NomPgm__3 ), lCodSes, lTimeStamp FROM CFStampaBilSpesePerPrg WHERE Eser = lEser AND Prg IN( 1, 2 ) AND ( CodTit = 1 OR CodTit = 3 ) GROUP BY Eser, NumPgm, NomPgm; INSERT INTO CFStampaBilRiepPerPrg ( Eser, NumPgm, NomPgm, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, NomPgm__1, NomPgm__2, NomPgm__3, CodSes, TmsLock ) SELECT Eser, NumPgm, MAX( NomPgm ), 4, 'IN', SUM( ImpChiuso ), SUM( ImpCorso ), SUM( Imp1 ), SUM( Imp2 ), SUM( Imp3 ), SUM( Imp4 ), SUM( Imp5 ), MAX( NomPgm__1 ), MAX( NomPgm__2 ), MAX( NomPgm__3 ), lCodSes, lTimeStamp FROM CFStampaBilSpesePerPrg WHERE Eser = lEser AND Prg = 2 AND CodTit = 2 GROUP BY Eser, NumPgm, NomPgm; INSERT INTO CFStampaBilRiepPerPrg ( Eser, NumPgm, NomPgm, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, NomPgm__1, NomPgm__2, NomPgm__3, CodSes, TmsLock ) SELECT Eser, NumPgm, MAX( NomPgm ), 5, 'T2', SUM( ImpChiuso ), SUM( ImpCorso ), SUM( Imp1 ), SUM( Imp2 ), SUM( Imp3 ), SUM( Imp4 ), SUM( Imp5 ), MAX( NomPgm__1 ), MAX( NomPgm__2 ), MAX( NomPgm__3 ), lCodSes, lTimeStamp FROM CFStampaBilSpesePerPrg WHERE Eser = lEser AND Prg IN( 1, 2 ) GROUP BY Eser, NumPgm, NomPgm; -- Inserisco le righe per le eventuali tipologie non presenti per Programma INSERT INTO CFStampaBilRiepPerPrg ( Eser, NumPgm, NomPgm, Prg, Tipo, NomPgm__1, NomPgm__2, NomPgm__3, CodSes, TmsLock ) SELECT DISTINCT Eser, NumPgm, NomPgm, 1, 'CO', NomPgm__1, NomPgm__2, NomPgm__3, lCodSes, lTimeStamp FROM CFStampaBilSpesePerPrg WHERE Eser = lEser AND ( NumPgm, NomPgm, 1 ) NOT IN ( SELECT DISTINCT NumPgm, NomPgm, Prg FROM CFStampaBilRiepPerPrg WHERE Eser = lEser AND CodSes = lCodSes ); INSERT INTO CFStampaBilRiepPerPrg ( Eser, NumPgm, NomPgm, Prg, Tipo, NomPgm__1, NomPgm__2, NomPgm__3, CodSes, TmsLock ) SELECT DISTINCT Eser, NumPgm, NomPgm, 2, 'SV', NomPgm__1, NomPgm__2, NomPgm__3, lCodSes, lTimeStamp FROM CFStampaBilSpesePerPrg WHERE Eser = lEser AND ( NumPgm, NomPgm, 2 ) NOT IN ( SELECT DISTINCT NumPgm, NomPgm, Prg FROM CFStampaBilRiepPerPrg WHERE Eser = lEser AND CodSes = lCodSes ); INSERT INTO CFStampaBilRiepPerPrg ( Eser, NumPgm, NomPgm, Prg, Tipo, NomPgm__1, NomPgm__2, NomPgm__3, CodSes, TmsLock ) SELECT DISTINCT Eser, NumPgm, NomPgm, 3, 'T1', NomPgm__1, NomPgm__2, NomPgm__3, lCodSes, lTimeStamp FROM CFStampaBilSpesePerPrg WHERE Eser = lEser AND ( NumPgm, NomPgm, 3 ) NOT IN ( SELECT DISTINCT NumPgm, NomPgm, Prg FROM CFStampaBilRiepPerPrg WHERE Eser = lEser AND CodSes = lCodSes ); INSERT INTO CFStampaBilRiepPerPrg ( Eser, NumPgm, NomPgm, Prg, Tipo, NomPgm__1, NomPgm__2, NomPgm__3, CodSes, TmsLock ) SELECT DISTINCT Eser, NumPgm, NomPgm, 4, 'IN', NomPgm__1, NomPgm__2, NomPgm__3, lCodSes, lTimeStamp FROM CFStampaBilSpesePerPrg WHERE Eser = lEser AND ( NumPgm, NomPgm, 4 ) NOT IN ( SELECT DISTINCT NumPgm, NomPgm, Prg FROM CFStampaBilRiepPerPrg WHERE Eser = lEser AND CodSes = lCodSes ); INSERT INTO CFStampaBilRiepPerPrg ( Eser, NumPgm, NomPgm, Prg, Tipo, NomPgm__1, NomPgm__2, NomPgm__3, CodSes, TmsLock ) SELECT DISTINCT Eser, NumPgm, NomPgm, 5, 'T2', NomPgm__1, NomPgm__2, NomPgm__3, lCodSes, lTimeStamp FROM CFStampaBilSpesePerPrg WHERE Eser = lEser AND ( NumPgm, NomPgm, 5 ) NOT IN ( SELECT DISTINCT NumPgm, NomPgm, Prg FROM CFStampaBilRiepPerPrg WHERE Eser = lEser AND CodSes = lCodSes ); COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNRiepPerPrg', SQLCODE, ERRDIAG ); END fnVwPRNRiepPerPrg; FUNCTION fnCFRisultatiDiffUpd ( lEser IN pkType.tyStringa%type, -- CFRisultatiDiff ------------- lImpQuotaCapit IN pkType.tyStringa%type, -- Quote di capitale amm.to dei mutui lImpAvanzoDeb IN pkType.tyStringa%type, -- Avanzo di amministrazione per debiti fuori bilancio lImpMutuo IN pkType.tyStringa%type, -- Mutuo per debiti fuori bilancio lImpOneriUrbaniz IN pkType.tyStringa%type, -- Quote di oneri di urbanizzazione lPercOneriUrbaniz IN pkType.tyStringa%type, -- Quote di oneri di urbanizzazione (%) lImpAvanzoSpese IN pkType.tyStringa%type, -- Avanzo di amministrazione per il fin. di spese correnti ------------- lCodSes IN pkType.tyStringa%type, -- CFRisultatiDiff ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS nCount number(9); lTimeStamp CFRisultatiDiff.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; BEGIN SELECT COUNT(*) INTO nCount FROM CFRisultatiDiff WHERE ESER = lEser; IF nCount > 0 THEN UPDATE CFRisultatiDiff SET ImpQuotaCapit = NVL(lImpQuotaCapit,0), ImpAvanzoDeb = NVL(lImpAvanzoDeb,0), ImpMutuo = NVL(lImpMutuo,0), ImpOneriUrbaniz = NVL(lImpOneriUrbaniz,0), PercOneriUrbaniz = NVL(lPercOneriUrbaniz,0), ImpAvanzoSpese = NVL(lImpAvanzoSpese,0), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; IF ( SQL%ROWCOUNT = 0 ) THEN ROLLBACK; RETURN pkUtility.fnError( '2pkContGen.fnCFRisultatiDiffUpd', -212, ERRDIAG ); END IF; ELSE INSERT INTO CFRisultatiDiff (ESER, IMPQUOTACAPIT, IMPAVANZODEB, IMPMUTUO, IMPONERIURBANIZ, PERCONERIURBANIZ, IMPAVANZOSPESE, CODSES, TMSLOCK) VALUES (lEser,lImpQuotaCapit, lImpAvanzoDeb, lImpMutuo, lImpOneriUrbaniz,lPercOneriUrbaniz, lImpAvanzoSpese, 0, lTimeStamp); END IF; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '2pkContStampa.fnCFRisultatiDiffUpd', SQLCODE, ERRDIAG ); END fnCFRisultatiDiffUpd; /**************************************************************************** * Funzione per la STAMPA DEL BILANCIO DI PREVISIONE\PLURIENNALE dettagliata * * per capitolo * ****************************************************************************/ -- Autore: Katiuscia Bottiglia, 21/10/2008. FUNCTION fnVwPRNBilDettCap ( lBilPrev IN pkType.tyStringa%type, -- 'S' = Bilancio di Previsione, 'N'=Bilancio di Pluriennale lEser IN pkType.tyStringa%type, -- Esercizio lApp IN pkType.tyStringa%type, -- Appartenenza lNumCdR IN pkType.tyStringa%type, -- Centro di responsabilità lCodResp IN pkType.tyStringa%type, -- Responsabile lCodTit IN pkType.tyStringa%type, -- Codice Titolo (Entrata/Spesa) lCodCatFnz IN pkType.tyStringa%type, -- Codice Categoria (Entrata/Spesa) lCodRisSer IN pkType.tyStringa%type, -- Codice Risorsa Iniziale (Entrata/Spesa) lCodInt IN pkType.tyStringa%type, -- Codice Intervento Iniziale -- Spesa lCodSes IN pkType.tyStringa%type, -- Codice della sessione utente lNameView OUT pkType.tyStringa%type, -- Nome della vista creata ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS K number; nCur1 integer; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sWhereClause VARCHAR2(2000) := ''; sSelectClause VARCHAR2(2000) := ''; BEGIN IF lCodSes = 0 OR lCodSes IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(46, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNBilDettCap', -499, ERRDIAG ); ELSE IF lEser IS NULL THEN ERRDIAG := pkUtilityCont.fnerroripers(47, NULL); RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNBilDettCap', -499, ERRDIAG ); END IF; END IF; IF lBilPrev = 'S' THEN lNameView := 'VwPRNBilPrevCap'; ELSE lNameView := 'VwPRNBilPlurCap'; END IF; lNameView := lNameView||lApp||lCodSes; -- filtro per numCdR IF lNumCdR IS NOT NULL THEN sWhereClause := sWhereClause || ' CFCentriResponsabilita.NumCdR = ' || lNumCdR || ' AND '; sSelectClause := sSelectClause || ' MAX( CFCentriResponsabilita.NumCdR ) NumCdR, '; END IF; IF lCodResp IS NOT NULL THEN sWhereClause := sWhereClause || ' CFCentriResponsabilita.CodResp = ' || lCodResp || ' AND '; sSelectClause := sSelectClause || ' MAX( CFCentriResponsabilita.CodResp ) CodResp, '; END IF; IF lCodTit IS NOT NULL THEN sWhereClause := sWhereClause || ' ALLCapBilPrev.Tit = ' || lCodTit || ' AND '; END IF; -- filtro gli elementi del bilancio per l'entrata IF Upper( lApp ) = 'E' THEN sWhereClause := sWhereClause || ' ALLCapBilPrev.App = ''E'' AND '; IF lCodCatFnz IS NOT NULL THEN sWhereClause := sWhereClause || ' ALLCapBilPrev.CodCat = ' || lCodCatFnz || ' AND '; END IF; IF lCodRisSer IS NOT NULL THEN sWhereClause := sWhereClause || ' ALLCapBilPrev.CodRis = ' || lCodRisSer || ' AND '; END IF; END IF; -- filtro gli elementi del bilancio per la spesa IF Upper( lApp ) = 'S' THEN sWhereClause := sWhereClause || ' ALLCapBilPrev.App = ''S'' AND '; IF lCodCatFnz IS NOT NULL THEN sWhereClause := sWhereClause || ' ALLCapBilPrev.CodFnz = ' || lCodCatFnz || ' AND '; END IF; IF lCodRisSer IS NOT NULL THEN sWhereClause := sWhereClause || ' ALLCapBilPrev.CodSer = ' || lCodRisSer || ' AND '; END IF; IF lCodInt IS NOT NULL THEN sWhereClause := sWhereClause || ' ALLCapBilPrev.CodInt = ' || lCodInt || ' AND '; END IF; END IF; nCur1 := DBMS_SQL.OPEN_CURSOR; -- GESTITI DA FRONT END: -- CFCentriResponsabilita.NumCdR||' - '||CFDesCentriResp.DesCDR DESCDR -- CFResponsabili.CodResp||' - '||CFResponsabili.DesResp DESRESP DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW ' || lNameView || ' AS ' || ' SELECT '|| lEser ||' ESER, MAX(ALLCapBilPrev.APP) APP, ALLCapBilPrev.CAP, ALLCapBilPrev.ART, '|| ' MAX(ALLCapBilPrev.CAP||''/''||ALLCapBilPrev.ART) CAPITOLO,'|| ' MAX(CFAnagraficaCapitoli.DesAnagrCap||''' || sSeparat || '''|| DesAnagrCap__1||''' || sSeparat || '''|| DesAnagrCap__2||''' || sSeparat || '''|| DesAnagrCap__3) DESANAGRCAP, ALLCapBilPrev.UEB, '|| ' MAX(ALLCapBilPrev.TIT) CODTIT, '|| ' MAX(''Titolo ''||ALLCapBilPrev.TIT||'' - ''||CFAnagraficaUeb.DESTIT||''' || sSeparat || '''|| CFAnagraficaUeb.DESTIT__1||''' || sSeparat || '''|| CFAnagraficaUeb.DESTIT__2||''' || sSeparat || '''|| CFAnagraficaUeb.DESTIT__3) DESTIT,'|| ' MAX(CFAnagraficaUeb.SERVCONTOTERZI) SERVCONTOTERZI, '|| sSelectClause || ' MAX(ALLCapBilPrev.CODCAT) CODCAT, '|| ' MAX(''Categoria ''||ALLCapBilPrev.CODCAT||'' - ''||CFAnagraficaUeb.DESCAT||''' || sSeparat || '''|| CFAnagraficaUeb.DESCAT__1||''' || sSeparat || '''|| CFAnagraficaUeb.DESCAT__2||''' || sSeparat || '''|| CFAnagraficaUeb.DESCAT__3) DESCAT, '|| ' MAX(ALLCapBilPrev.CODFNZ) CODFNZ, MAX(CFAnagraficaUeb.DESFNZ||''' || sSeparat || '''|| CFAnagraficaUeb.DESFNZ__1||''' || sSeparat || '''|| CFAnagraficaUeb.DESFNZ__2||''' || sSeparat || '''|| CFAnagraficaUeb.DESFNZ__3) DESFNZ, '|| ' MAX(ALLCapBilPrev.CODRIS) CODRIS, MAX(CFAnagraficaUeb.DESRIS||''' || sSeparat || '''|| CFAnagraficaUeb.DESRIS__1||''' || sSeparat || '''|| CFAnagraficaUeb.DESRIS__2||''' || sSeparat || '''|| CFAnagraficaUeb.DESRIS__3) DESRIS, '|| ' MAX(ALLCapBilPrev.CODSER) CODSER, MAX(CFAnagraficaUeb.DESSER||''' || sSeparat || '''|| CFAnagraficaUeb.DESSER__1||''' || sSeparat || '''|| CFAnagraficaUeb.DESSER__2||''' || sSeparat || '''|| CFAnagraficaUeb.DESSER__3) DESSER, '|| ' MAX(ALLCapBilPrev.CODINT) CODINT, MAX(CFAnagraficaUeb.DESINT||''' || sSeparat || '''|| CFAnagraficaUeb.DESINT__1||''' || sSeparat || '''|| CFAnagraficaUeb.DESINT__2||''' || sSeparat || '''|| CFAnagraficaUeb.DESINT__3) DESINT, '|| ' SUM( NVL(DECODE(ALLCapBilPrev.APP,''E'',NVL(pkViewForm.fnResAccSaldiCodMeccE( PEGEserChiuso.IDCAPITOLO, ''31/12/''||'||'TO_CHAR(PEGEserChiuso.ESER) ),0),'|| ' NVL(pkViewForm.fnResImpSaldiCodMeccS( PEGEserChiuso.IDCAPITOLO, ''31/12/''||'||'TO_CHAR(PEGEserChiuso.ESER)),0 ) ),0) ) IMPACC, '||-- Accertamenti\Impegni ultinmo eserc. chiuso ' SUM(NVL(PEGEserCorso.STANZINI+PEGEserCorso.VarAum-PEGEserCorso.VarDim,0)) ASSESTATOPREV, '|| -- Prev. definit. eser. in corso ' DECODE( SIGN( SUM( NVL(PEGEserCorso.STANZINI+PEGEserCorso.VarAum-PEGEserCorso.VarDim,0) - NVL(PEGPrev.STANZINI,0) ) ), ''-1'', -(SUM( NVL(PEGEserCorso.STANZINI+PEGEserCorso.VarAum-PEGEserCorso.VarDim,0) - NVL(PEGPrev.STANZINI,0) ) ), 0 ) VARAUM, '|| ' DECODE( SIGN( SUM( NVL(PEGEserCorso.STANZINI+PEGEserCorso.VarAum-PEGEserCorso.VarDim,0) - NVL(PEGPrev.STANZINI,0) ) ), ''1'', SUM( NVL(PEGEserCorso.STANZINI+PEGEserCorso.VarAum-PEGEserCorso.VarDim,0) - NVL(PEGPrev.STANZINI,0) ), 0 ) VARDIM, '|| ' SUM(NVL(PEGPrev.STANZINI,0)) STANZIATOPREV, '|| -- SOMME RISULTANTI ESERCIZIO DI PREVISIONE ' SUM(NVL(PEGPlur1.STANZINI,0)) STANZIATOPLUR1, '|| -- SOMME RISULTANTI ESERCIZIO PRIMO ANNO PLURIENNALE ' SUM(NVL(PEGPlur2.STANZINI,0)) STANZIATOPLUR2 '|| -- SOMME RISULTANTI ESERCIZIO PRIMO ANNO PLURIENNALE ' FROM ALLCapBilPrev, CFCapitoliPEG PEGEserChiuso, CFCapitoliPEG PEGEserCorso, CFCapitoliPEG PEGPrev, '|| ' CFCapitoliPEG PEGPlur1, CFCapitoliPEG PEGPlur2, CFAnagraficaUeb, CFAnagraficaCapitoli, CFCentriResponsabilita, vwSelSeparat '|| ' WHERE '||sWhereClause || ' CFAnagraficaUeb.APP = ALLCapBilPrev.APP AND '|| ' CFAnagraficaUeb.UEB = ALLCapBilPrev.UEB AND '|| ' ALLCapBilPrev.CodCdR = CFCentriResponsabilita.CodCdR AND '|| ' CFAnagraficaCapitoli.APP = ALLCapBilPrev.APP AND '|| ' CFAnagraficaCapitoli.CAP = ALLCapBilPrev.CAP AND '|| ' CFAnagraficaCapitoli.ART = ALLCapBilPrev.ART AND '|| ' PEGEserChiuso.APP(+) = ALLCapBilPrev.APP AND '|| ' PEGEserChiuso.CAP(+) = ALLCapBilPrev.CAP AND '|| ' PEGEserChiuso.ART(+) = ALLCapBilPrev.ART AND '|| ' PEGEserChiuso.UEB(+) = ALLCapBilPrev.UEB AND '|| ' PEGEserChiuso.CODCDR(+) = ALLCapBilPrev.CODCDR AND '|| ' PEGEserChiuso.CODVOCE(+) = ALLCapBilPrev.CODVOCE AND '|| ' PEGEserChiuso.FlCopFplur(+) = ALLCapBilPrev.FlCopFplur AND '|| -- per nuova chiave logica ' PEGEserChiuso.ESER(+) = '|| (lEser-2) ||' AND '|| ' PEGEserCorso.APP(+) = ALLCapBilPrev.APP AND '|| ' PEGEserCorso.CAP(+) = ALLCapBilPrev.CAP AND '|| ' PEGEserCorso.ART(+) = ALLCapBilPrev.ART AND '|| ' PEGEserCorso.UEB(+) = ALLCapBilPrev.UEB AND '|| ' PEGEserCorso.CODCDR(+) = ALLCapBilPrev.CODCDR AND '|| ' PEGEserCorso.CODVOCE(+) = ALLCapBilPrev.CODVOCE AND '|| ' PEGEserCorso.FlCopFplur(+) = ALLCapBilPrev.FlCopFplur AND '|| -- per nuova chiave logica ' PEGEserCorso.ESER(+) = '|| (lEser-1) ||' AND '|| ' PEGPrev.APP(+) = ALLCapBilPrev.APP AND '|| ' PEGPrev.CAP(+) = ALLCapBilPrev.CAP AND '|| ' PEGPrev.ART(+) = ALLCapBilPrev.ART AND '|| ' PEGPrev.UEB(+) = ALLCapBilPrev.UEB AND '|| ' PEGPrev.CODCDR(+) = ALLCapBilPrev.CODCDR AND '|| ' PEGPrev.CODVOCE(+) = ALLCapBilPrev.CODVOCE AND '|| ' PEGPrev.FlCopFplur(+) = ALLCapBilPrev.FlCopFplur AND '|| -- per nuova chiave logica ' PEGPrev.ESER(+) = '|| lEser ||' AND '|| ' PEGPlur1.APP(+) = ALLCapBilPrev.APP AND '|| ' PEGPlur1.CAP(+) = ALLCapBilPrev.CAP AND '|| ' PEGPlur1.ART(+) = ALLCapBilPrev.ART AND '|| ' PEGPlur1.UEB(+) = ALLCapBilPrev.UEB AND '|| ' PEGPlur1.CODCDR(+) = ALLCapBilPrev.CODCDR AND '|| ' PEGPlur1.CODVOCE(+) = ALLCapBilPrev.CODVOCE AND '|| ' PEGPlur1.FlCopFplur(+) = ALLCapBilPrev.FlCopFplur AND '|| -- per nuova chiave logica ' PEGPlur1.ESER(+) = '|| (lEser+1) ||' AND '|| ' PEGPlur2.APP(+) = ALLCapBilPrev.APP AND '|| ' PEGPlur2.CAP(+) = ALLCapBilPrev.CAP AND '|| ' PEGPlur2.ART(+) = ALLCapBilPrev.ART AND '|| ' PEGPlur2.UEB(+) = ALLCapBilPrev.UEB AND '|| ' PEGPlur2.CODCDR(+) = ALLCapBilPrev.CODCDR AND '|| ' PEGPlur2.CODVOCE(+) = ALLCapBilPrev.CODVOCE AND '|| ' PEGPlur2.FlCopFplur(+) = ALLCapBilPrev.FlCopFplur AND '|| -- per nuova chiave logica ' PEGPlur2.ESER(+) = '|| (lEser+2) ||' AND '|| ' ( ALLCapBilPrev.CAP, ALLCapBilPrev.ART, ALLCapBilPrev.UEB ) IN '|| ' ( SELECT CAP, ART, UEB '|| ' FROM CFCAPITOLIPEG '|| ' WHERE CFCAPITOLIPEG.App = ALLCapBilPrev.App AND '|| ' CFCAPITOLIPEG.ESER BETWEEN '|| (lEser-2) ||' AND '|| (lEser+2) ||' ) '|| ' GROUP BY ALLCapBilPrev.UEB, ALLCapBilPrev.CAP, ALLCapBilPrev.ART ', dbms_sql.v7 ); K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.CLOSE_CURSOR( nCur1 ); INSERT INTO CFContrView VALUES ( lNameView, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF DBMS_SQL.IS_OPEN( nCur1 ) THEN DBMS_SQL.CLOSE_CURSOR( nCur1 ); END IF; RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNBilDettCap', SQLCODE, ERRDIAG ); END fnVwPRNBilDettCap; /**************************************************************************** * Funzione per la Stampa Equilibri di Bilancio * ****************************************************************************/ -- Autore: Torelli FUNCTION fnVwPRNEquilBil ( lEser IN pkType.tyStringa%type, -- Esercizio lStanzAssat IN pkType.tyStringa%type, -- S = Stanziato A = Assestato lVarNonEsec IN pkType.tyStringa%type, -- S = considera Variazioni non ancora esecutive N = altrimenti lCodSes IN pkType.tyStringa%type, -- Codice della sessione utente lNameView OUT pkType.tyStringa%type, -- Nome della vista creata lNameView2 OUT pkType.tyStringa%type, -- Nome della vista creata per parte statica ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS nCountTit number(9); nTit1Eser1 number(16,2) :=0; nTit1Eser2 number(16,2) :=0; nTit1Eser3 number(16,2) :=0; nVarTit1Eser1 number(16,2) :=0; nVarTit1Eser2 number(16,2) :=0; nVarTit1Eser3 number(16,2) :=0; nTit2Eser1 number(16,2) :=0; nTit2Eser2 number(16,2) :=0; nTit2Eser3 number(16,2) :=0; nVarTit2Eser1 number(16,2) :=0; nVarTit2Eser2 number(16,2) :=0; nVarTit2Eser3 number(16,2) :=0; nTit3Eser1 number(16,2) :=0; nTit3Eser2 number(16,2) :=0; nTit3Eser3 number(16,2) :=0; nVarTit3Eser1 number(16,2) :=0; nVarTit3Eser2 number(16,2) :=0; nVarTit3Eser3 number(16,2) :=0; nTotEEser1 number(16,2) :=0; nTotEEser2 number(16,2) :=0; nTotEEser3 number(16,2) :=0; nTit1SEser1 number(16,2) :=0; nTit1SEser2 number(16,2) :=0; nTit1SEser3 number(16,2) :=0; nVarTit1SEser1 number(16,2) :=0; nVarTit1SEser2 number(16,2) :=0; nVarTit1SEser3 number(16,2) :=0; nQCRMEser1 number(16,2) :=0; nQCRMEser2 number(16,2) :=0; nQCRMEser3 number(16,2) :=0; nVarQCRMEser1 number(16,2) :=0; nVarQCRMEser2 number(16,2) :=0; nVarQCRMEser3 number(16,2) :=0; nDiff1 number(16,2) :=0; nDiff2 number(16,2) :=0; nDiff3 number(16,2) :=0; -- parte investimenti nTit4Eser1 number(16,2) :=0; nTit4Eser2 number(16,2) :=0; nTit4Eser3 number(16,2) :=0; nVarTit4Eser1 number(16,2) :=0; nVarTit4Eser2 number(16,2) :=0; nVarTit4Eser3 number(16,2) :=0; nTit5Eser1 number(16,2) :=0; nTit5Eser2 number(16,2) :=0; nTit5Eser3 number(16,2) :=0; nVarTit5Eser1 number(16,2) :=0; nVarTit5Eser2 number(16,2) :=0; nVarTit5Eser3 number(16,2) :=0; nTotEIEser1 number(16,2) :=0; nTotEIEser2 number(16,2) :=0; nTotEIEser3 number(16,2) :=0; nAntCassaEser1 number(16,2) :=0; nAntCassaEser2 number(16,2) :=0; nAntCassaEser3 number(16,2) :=0; nVarnAntCassa1 number(16,2) :=0; nVarnAntCassa2 number(16,2) :=0; nVarnAntCassa3 number(16,2) :=0; nTit2SEser1 number(16,2) :=0; nTit2SEser2 number(16,2) :=0; nTit2SEser3 number(16,2) :=0; nVarTit2SEser1 number(16,2) :=0; nVarTit2SEser2 number(16,2) :=0; nVarTit2SEser3 number(16,2) :=0; K number; nCur1 integer; sUnion VARCHAR2(255) := ' '; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; BEGIN -- controllo se si tratta di una Comunità Montana SELECT COUNT(*) INTO nCountTit FROM CFTitoli WHERE CodTit = 6 and App = 'E'; -- Titolo 1 Entrata SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) INTO nTit1Eser1 FROM CFCapitoliPeg WHERE Eser = lEser AND CodTit = 1 AND App = 'E' AND FlUnaTantum = 'N'; --SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit1Eser2 FROM CFCapitoliPeg WHERE Eser = lEser+1 AND CodTit = 1 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit1Eser3 FROM CFCapitoliPeg WHERE Eser = lEser+2 AND CodTit = 1 AND App = 'E' AND FlUnaTantum = 'N'; -- Titolo 2 Entrata SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) INTO nTit2Eser1 FROM CFCapitoliPeg WHERE Eser = lEser AND CodTit = 2 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit2Eser2 FROM CFCapitoliPeg WHERE Eser = lEser+1 AND CodTit = 2 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit2Eser3 FROM CFCapitoliPeg WHERE Eser = lEser+2 AND CodTit = 2 AND App = 'E' AND FlUnaTantum = 'N'; -- Titolo 3 Entrata SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) INTO nTit3Eser1 FROM CFCapitoliPeg WHERE Eser = lEser AND CodTit = 3 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit3Eser2 FROM CFCapitoliPeg WHERE Eser = lEser+1 AND CodTit = 3 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit3Eser3 FROM CFCapitoliPeg WHERE Eser = lEser+2 AND CodTit = 3 AND App = 'E' AND FlUnaTantum = 'N'; -- Titolo 4 Entrata SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) INTO nTit4Eser1 FROM CFCapitoliPeg WHERE Eser = lEser AND CodTit = 4 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit4Eser2 FROM CFCapitoliPeg WHERE Eser = lEser+1 AND CodTit = 4 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit4Eser3 FROM CFCapitoliPeg WHERE Eser = lEser+2 AND CodTit = 4 AND App = 'E' AND FlUnaTantum = 'N'; -- Titolo 5 Entrata SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) INTO nTit5Eser1 FROM CFCapitoliPeg WHERE Eser = lEser AND CodTit = 5 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit5Eser2 FROM CFCapitoliPeg WHERE Eser = lEser+1 AND CodTit = 5 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit5Eser3 FROM CFCapitoliPeg WHERE Eser = lEser+2 AND CodTit = 5 AND App = 'E' AND FlUnaTantum = 'N'; IF nCountTit > 0 THEN -- Anticipazioni di Cassa Titolo 5 Cat 1 (x i Comuni) SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) INTO nAntCassaEser1 FROM CFCapitoliPeg WHERE Eser = lEser AND CodTit = 5 AND CodCat = 1 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nAntCassaEser2 FROM CFCapitoliPeg WHERE Eser = lEser+1 AND CodTit = 5 AND CodCat = 1 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nAntCassaEser3 FROM CFCapitoliPeg WHERE Eser = lEser+2 AND CodTit = 5 AND CodCat = 1 AND App = 'E' AND FlUnaTantum = 'N'; ELSE -- Anticipazioni di Cassa Titolo 4 Cat 1 (x le Comunità Montane) SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) INTO nAntCassaEser1 FROM CFCapitoliPeg WHERE Eser = lEser AND CodTit = 4 AND CodCat = 1 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nAntCassaEser2 FROM CFCapitoliPeg WHERE Eser = lEser+1 AND CodTit = 4 AND CodCat = 1 AND App = 'E' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nAntCassaEser3 FROM CFCapitoliPeg WHERE Eser = lEser+2 AND CodTit = 4 AND CodCat = 1 AND App = 'E' AND FlUnaTantum = 'N'; END IF; -- IF nCountTit > 0 THEN IF lVarNonEsec = 'S' THEN -- Variazioni non ancora deliberate Titolo 1 Entrata SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit1Eser1 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.CodTit = 1 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit1Eser2 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND --TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.CodTit = 1 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit1Eser3 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.CodTit = 1 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; -- Variazioni non ancora deliberate Titolo 2 Entrata SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit2Eser1 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.CodTit = 2 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit2Eser2 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.CodTit = 2 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit2Eser3 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.CodTit = 2 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; -- Variazioni non ancora deliberate Titolo 3 Entrata SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit3Eser1 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.CodTit = 3 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit3Eser2 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.CodTit = 3 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit3Eser3 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.CodTit = 3 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; -- Variazioni non ancora deliberate Titolo 4 Entrata SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit4Eser1 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.CodTit = 4 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit4Eser2 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.CodTit = 4 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit4Eser3 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.CodTit = 4 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; -- Variazioni non ancora deliberate Titolo 5 Entrata SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit5Eser1 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.CodTit = 5 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit5Eser2 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.CodTit = 5 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit5Eser3 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.CodTit = 5 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; IF nCountTit > 0 THEN -- Variazioni non ancora deliberate Anticipazioni di Cassa Titolo 5 Cat 1 (x i Comuni) SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarnAntCassa1 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.CodTit = 5 AND CFCapitoliPEG.CodCat = 1 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarnAntCassa2 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.CodTit = 5 AND CFCapitoliPEG.CodCat = 1 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarnAntCassa3 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.CodTit = 5 AND CFCapitoliPEG.CodCat = 1 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; ELSE -- Variazioni non ancora deliberate Anticipazioni di Cassa Titolo 4 Cat 1 (x le Comunità Montane) SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarnAntCassa1 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.CodTit = 4 AND CFCapitoliPEG.CodCat = 1 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarnAntCassa2 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.CodTit = 4 AND CFCapitoliPEG.CodCat = 1 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarnAntCassa3 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.CodTit = 4 AND CFCapitoliPEG.CodCat = 1 AND CFCapitoliPEG.App = 'E' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; END IF; -- IF nCountTit > 0 END IF; -- IF lVarNonEsec = 'S' THEN -- Totale Entrate Titolo I II III: PEG+Variazioni nTit1Eser1 := nTit1Eser1 + nVarTit1Eser1; nTit1Eser2 := nTit1Eser2 + nVarTit1Eser2; nTit1Eser3 := nTit1Eser3 + nVarTit1Eser3; nTit2Eser1 := nTit2Eser1 + nVarTit2Eser1; nTit2Eser2 := nTit2Eser2 + nVarTit2Eser2; nTit2Eser3 := nTit2Eser3 + nVarTit2Eser3; nTit3Eser1 := nTit3Eser1 + nVarTit3Eser1; nTit3Eser2 := nTit3Eser2 + nVarTit3Eser2; nTit3Eser3 := nTit3Eser3 + nVarTit3Eser3; -- Equilibrio parte corrente (vedi 1^ col. stampa) Entrate IF nCountTit > 0 THEN -- Titolo I II III (x i Comuni) nTotEEser1 := nTit1Eser1 + nTit2Eser1 + nTit3Eser1; nTotEEser2 := nTit1Eser2 + nTit2Eser2 + nTit3Eser2; nTotEEser3 := nTit1Eser3 + nTit2Eser3 + nTit3Eser3; ELSE -- Titolo I II (x le Comunità Montane) nTotEEser1 := nTit1Eser1 + nTit2Eser1; nTotEEser2 := nTit1Eser2 + nTit2Eser2; nTotEEser3 := nTit1Eser3 + nTit2Eser3; END IF; -- Totale Entrate Titolo V IV: PEG+Variazioni nTit4Eser1 := nTit4Eser1 + nVarTit4Eser1; nTit4Eser2 := nTit4Eser2 + nVarTit4Eser2; nTit4Eser3 := nTit4Eser3 + nVarTit4Eser3; nTit5Eser1 := nTit5Eser1 + nVarTit5Eser1; nTit5Eser2 := nTit5Eser2 + nVarTit5Eser2; nTit5Eser3 := nTit5Eser3 + nVarTit5Eser3; -- Equilibrio parte investimenti (vedi 1^ col. stampa) Entrate IF nCountTit > 0 THEN -- Titolo V IV (x i Comuni) nTotEIEser1 := nTit4Eser1 + nTit5Eser1; nTotEIEser2 := nTit4Eser2 + nTit5Eser2; nTotEIEser3 := nTit4Eser3 + nTit5Eser3; ELSE -- Titolo III IV (x le Comunità Montane) nTotEIEser1 := nTit3Eser1 + nTit4Eser1; nTotEIEser2 := nTit3Eser2 + nTit4Eser2; nTotEIEser3 := nTit3Eser3 + nTit4Eser3; END IF; -- Equilibrio parte investimenti (vedi 1^ col. stampa) Anticipazione di Cassa: PEG+Variazioni nAntCassaEser1 := nAntCassaEser1 + nVarnAntCassa1; nAntCassaEser2 := nAntCassaEser2 + nVarnAntCassa2; nAntCassaEser3 := nAntCassaEser3 + nVarnAntCassa3; -- Spese Correti: Titolo 1 Spesa SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) INTO nTit1SEser1 FROM CFCapitoliPeg WHERE Eser = lEser AND CodTit = 1 AND App = 'S' AND FlUnaTantum = 'N'; --SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit1SEser2 FROM CFCapitoliPeg WHERE Eser = lEser+1 AND CodTit = 1 AND App = 'S' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit1SEser3 FROM CFCapitoliPeg WHERE Eser = lEser+2 AND CodTit = 1 AND App = 'S' AND FlUnaTantum = 'N'; IF lVarNonEsec = 'S' THEN -- Variazioni non ancora deliberate Titolo 1 Spesa SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit1SEser1 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.CodTit = 1 AND CFCapitoliPEG.App = 'S' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit1SEser2 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND --TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.CodTit = 1 AND CFCapitoliPEG.App = 'S' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit1SEser3 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.CodTit = 1 AND CFCapitoliPEG.App = 'S' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; END IF; -- IF lVarNonEsec = 'S' THEN -- Equilibrio parte corrente (vedi 1^ col. stampa) Spese Correnti - Tit.I nTit1SEser1 := nTit1SEser1 + nVarTit1SEser1; nTit1SEser2 := nTit1SEser2 + nVarTit1SEser2; nTit1SEser3 := nTit1SEser3 + nVarTit1SEser3; -- Quota capitale per rimborsi Mutui SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) INTO nQCRMEser1 FROM CFCapitoliPeg WHERE Eser = lEser AND UEB IN ( 3010303, 3010304 ) AND App = 'S' AND FlUnaTantum = 'N'; --SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nQCRMEser2 FROM CFCapitoliPeg WHERE Eser = lEser+1 AND UEB IN ( 3010303, 3010304 ) AND App = 'S' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nQCRMEser3 FROM CFCapitoliPeg WHERE Eser = lEser+2 AND UEB IN ( 3010303, 3010304 ) AND App = 'S' AND FlUnaTantum = 'N'; IF lVarNonEsec = 'S' THEN -- Variazioni non ancora deliberate per Quota capitale per rimborsi Mutui SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarQCRMEser1 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND UEB IN ( 3010303, 3010304 ) AND CFCapitoliPEG.App = 'S' AND FlUnaTantum = 'N' AND CFCapitoliPEG.Eser = lEser AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarQCRMEser2 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND --TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND UEB IN ( 3010303, 3010304 ) AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.App = 'S' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarQCRMEser3 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND UEB IN ( 3010303, 3010304 ) AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.App = 'S' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; END IF; -- IF lVarNonEsec = 'S' THEN -- Equilibrio parte corrente (vedi 1^ col. stampa) Quota capitale per rimborsi Mutui nQCRMEser1 := nQCRMEser1 + nVarQCRMEser1; nQCRMEser2 := nQCRMEser2 + nVarQCRMEser2; nQCRMEser3 := nQCRMEser3 + nVarQCRMEser3; -- Equilibrio parte corrente (vedi 1^ col. stampa) Differenza nDiff1 := nTotEEser1 - nTit1SEser1 - nQCRMEser1; nDiff2 := nTotEEser2 - nTit1SEser2 - nQCRMEser2; nDiff3 := nTotEEser3 - nTit1SEser3 - nQCRMEser3; -- Spese Titolo II SELECT NVL( SUM( StanzIni + DECODE( lStanzAssat, 'S', 0, VarAum-VarDim ) ), 0 ) INTO nTit2SEser1 FROM CFCapitoliPeg WHERE Eser = lEser AND CodTit = 2 AND App = 'S' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit2SEser2 FROM CFCapitoliPeg WHERE Eser = lEser+1 AND CodTit = 2 AND App = 'S' AND FlUnaTantum = 'N'; SELECT NVL( SUM( DECODE( lStanzAssat, 'S', StanzIni, AssestAnnPlur ) ), 0 ) INTO nTit2SEser3 FROM CFCapitoliPeg WHERE Eser = lEser+2 AND CodTit = 2 AND App = 'S' AND FlUnaTantum = 'N'; IF lVarNonEsec = 'S' THEN -- Variazioni non ancora deliberate Titolo 1 Spesa SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit2SEser1 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND TO_CHAR( CFVarBil.DtaVarBil, 'YYYY' ) = CFCapitoliPEG.Eser AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.CodTit = 2 AND CFCapitoliPEG.App = 'S' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit2SEser2 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.CodTit = 2 AND CFCapitoliPEG.App = 'S' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; SELECT NVL( SUM( CFVarBil.VarAum - CFVarBil.VarDim ), 0 ) INTO nVarTit2SEser3 FROM CFVarBil, CFCapitoliPEG WHERE CFVarBil.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.CodTit = 2 AND CFCapitoliPEG.App = 'S' AND FlUnaTantum = 'N' AND NumDelibera IS NULL; END IF; -- IF lVarNonEsec = 'S' THEN -- Equilibrio parte investimenti (vedi 1^ col. stampa) Spese - Titolo II nTit2SEser1 := nTit2SEser1 + nVarTit2SEser1; nTit2SEser2 := nTit2SEser2 + nVarTit2SEser2; nTit2SEser3 := nTit2SEser3 + nVarTit2SEser3; IF nCountTit > 0 THEN -- se Comuni sUnion := ' UNION '|| ' SELECT 100 Ord, '|| ' ''Titolo V''||DECODE('''|| sSeparat ||''', null, null, '''||sSeparat ||'Titel V' || sSeparat || 'II' || sSeparat || 'II'' ) Descr, '|| ' NULL PM, '|| 'TO_NUMBER( ''' || nTit5Eser1 || ''' ) nEser1, TO_NUMBER( ''' || nTit5Eser2 ||''' ) nEser2, TO_NUMBER( ''' || nTit5Eser3 ||''' ) nEser3 '|| ' FROM Dual '; END IF; nCur1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW VwPRNEquilBil' || lCodSes || ' AS ' || ' SELECT 10 Ord, '|| ' ''Entrate - Titolo I''||DECODE('''|| sSeparat ||''', null, null, '''||sSeparat ||'Einnahmen - Titel I' || sSeparat || 'I' || sSeparat || 'I'' ) Descr, '|| ' NULL PM, '|| 'TO_NUMBER( ''' || nTit1Eser1 || ''' ) nEser1, TO_NUMBER( ''' || nTit1Eser2 ||''' ) nEser2, TO_NUMBER( ''' || nTit1Eser3 ||''' ) nEser3 '|| ' FROM Dual '|| ' UNION '|| ' SELECT 20 Ord, '|| ' ''Titolo II''||DECODE('''|| sSeparat ||''', null, null, '''||sSeparat ||'Titel II' || sSeparat || 'II' || sSeparat || 'II'' ) Descr, '|| ' NULL PM, '|| 'TO_NUMBER( ''' || nTit2Eser1 || ''' ) nEser1, TO_NUMBER( ''' || nTit2Eser2 ||''' ) nEser2, TO_NUMBER( ''' || nTit2Eser3 ||''' ) nEser3 '|| ' FROM Dual '|| ' UNION '|| ' SELECT DECODE( '|| nCountTit || ', 0, 80, 30 ) Ord, '|| ' DECODE( '|| nCountTit || ', 0 , ''Entrate - Titolo III'', ''Titolo III'' )||DECODE ('''|| sSeparat ||''', null, null, '''||sSeparat ||'''||DECODE( '|| nCountTit || ', 0 , ''Einnahmen - Titel III'', ''Titel III'' )||''' || sSeparat || 'III' || sSeparat || 'III'' ) Descr, '|| ' NULL PM, '|| 'TO_NUMBER( ''' || nTit3Eser1 || ''' ) nEser1, TO_NUMBER( ''' || nTit3Eser2 ||''' ) nEser2, TO_NUMBER( ''' || nTit3Eser3 ||''' ) nEser3 '|| ' FROM Dual '|| ' UNION '|| ' SELECT 40 Ord, '|| ' ''Totale''||DECODE('''|| sSeparat ||''', null, null, '''||sSeparat ||'Insgesamt' || sSeparat || 'Tot' || sSeparat || 'Tot'' ) Descr, '|| ' ''+'' PM, '|| 'TO_NUMBER( ''' || nTotEEser1 || ''' ) nEser1, TO_NUMBER( ''' || nTotEEser2 ||''' ) nEser2, TO_NUMBER( ''' || nTotEEser3 ||''' ) nEser3 '|| ' FROM Dual '|| ' UNION '|| ' SELECT 50 Ord, '|| ' ''Spese correnti - Tit. I''||DECODE('''|| sSeparat ||''', null, null, '''||sSeparat ||'Laufende Ausgaben - Tit. I' || sSeparat || 'SC - Tit. I' || sSeparat || 'SC - Tit. I'' ) Descr, '|| '''-'' PM, '|| 'TO_NUMBER( ''' || nTit1SEser1 || ''' ) nEser1, TO_NUMBER( ''' || nTit1SEser2 ||''' ) nEser2, TO_NUMBER( ''' || nTit1SEser3 ||''' ) nEser3 '|| ' FROM Dual '|| ' UNION '|| ' SELECT 60 Ord, '|| ' ''Quota capitale per rimborso mutui e prestiti''||DECODE('''|| sSeparat ||''', null, null, '''||sSeparat ||'' || sSeparat || '' || sSeparat || ''' ) Descr, '|| '''-'' PM, '|| 'TO_NUMBER( ''' || nQCRMEser1 || ''' ) nEser1, TO_NUMBER( ''' || nQCRMEser2 ||''' ) nEser2, TO_NUMBER( ''' || nQCRMEser3 ||''' ) nEser3 '|| ' FROM Dual '|| ' UNION '|| ' SELECT 70 Ord, '|| ' ''Differenza''||DECODE('''|| sSeparat ||''', null, null, '''||sSeparat ||'Differenz' || sSeparat || 'Diff' || sSeparat || 'Diff'' ) Descr, '|| ' NULL PM, '|| 'TO_NUMBER( ''' || nDiff1 || ''' ) nEser1, TO_NUMBER( ''' || nDiff2 ||''' ) nEser2, TO_NUMBER( ''' || nDiff3 ||''' ) nEser3 '|| ' FROM Dual '|| ' UNION '|| ' SELECT DECODE( '|| nCountTit || ', 0 , 100, 90 ) Ord, '|| ' DECODE( '|| nCountTit || ', 0 , ''Titolo IV'', ''Entrate - Titolo IV'' )||DECODE ('''|| sSeparat ||''', null, null, '''||sSeparat ||'''||DECODE( '|| nCountTit || ', 0 , ''Titel IV'', ''Einnahmen - Titel IV'' )||''' || sSeparat || 'IV' || sSeparat || 'IV'' ) Descr, '|| ' NULL PM, '|| 'TO_NUMBER( ''' || nTit4Eser1 || ''' ) nEser1, TO_NUMBER( ''' || nTit4Eser2 ||''' ) nEser2, TO_NUMBER( ''' || nTit4Eser3 ||''' ) nEser3 '|| ' FROM Dual '|| sUnion || ' UNION '|| ' SELECT 110 Ord, '|| ' ''Totale''||DECODE('''|| sSeparat ||''', null, null, '''||sSeparat ||'Insgesamt' || sSeparat || 'Tot' || sSeparat || 'Tot'' ) Descr, '|| ' ''+'' PM, '|| 'TO_NUMBER( ''' || nTotEIEser1 || ''' ) nEser1, TO_NUMBER( ''' || nTotEIEser2 ||''' ) nEser2, TO_NUMBER( ''' || nTotEIEser3 ||''' ) nEser3 '|| ' FROM Dual '|| ' UNION '|| ' SELECT 120 Ord, '|| ' DECODE( '|| nCountTit || ', 0 , ''Anticipazione di Cassa (Tit.IV, Cat 1)'', ''Anticipazione di Cassa (Tit.V, Cat 1)'' )||DECODE ('''|| sSeparat ||''', null, null, '''||sSeparat ||'''||DECODE( '|| nCountTit || ', 0 , ''Cash-Vorfreude (Tit.IV, Cat 1)'', ''Cash-Vorfreude (Tit.V, Cat 1)'' )||''' || sSeparat || '(Tit.V, Cat 1)' || sSeparat || '(Tit.V, Cat 1)'' ) Descr, '|| ' ''-'' PM, '|| 'TO_NUMBER( ''' || nAntCassaEser1 || ''' ) nEser1, TO_NUMBER( ''' || nAntCassaEser2 ||''' ) nEser2, TO_NUMBER( ''' || nAntCassaEser3 ||''' ) nEser3 '|| ' FROM Dual '|| ' UNION '|| ' SELECT 130 Ord, '|| ' ''Spese - Titolo II''||DECODE('''|| sSeparat ||''', null, null, '''||sSeparat ||'Kosten - Tit. II' || sSeparat || 'Titolo II' || sSeparat || 'Titolo II'' ) Descr, '|| ' ''-'' PM, '|| 'TO_NUMBER( ''' || nTit2SEser1 || ''' ) nEser1, TO_NUMBER( ''' || nTit2SEser2 ||''' ) nEser2, TO_NUMBER( ''' || nTit2SEser3 ||''' ) nEser3 '|| ' FROM Dual ' , dbms_sql.v7 ); K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.CLOSE_CURSOR( nCur1 ); lNameView := 'VwPRNEquilBil'||lCodSes; INSERT INTO CFContrView VALUES ( lNameView, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); -- creamo la seconda vista legata alla parte inserita sulla tabella CFEquilBil da maschera nCur1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( nCur1 , 'CREATE OR REPLACE VIEW VwPRNEquilBilST' || lCodSes || ' AS ' || ' SELECT Eser, PercOneriUrbaniz, ImpOneriUrbaniz, ImpOneriUrbaniz1, ImpOneriUrbaniz2, '|| ' ImpAvanzoAmm, ImpAvanzoAmm1, ImpAvanzoAmm2, '|| ' ImpFondoNazInv, ImpFondoNazInv1, ImpFondoNazInv2, '|| ' ImpPlusvPatr, ImpPlusvPatr1, ImpPlusvPatr2, '|| ------------- Parte investimenti ' ImpOneriUrbanSC, ImpOneriUrban1SC, ImpOneriUrban2SC, '|| ' ImpAvAppliTitII, ImpAvAppliTitII1, ImpAvAppliTitII2 '|| ' FROM CFEquilBil '|| ' WHERE Eser = '||lEser, dbms_sql.v7 ); K := DBMS_SQL.EXECUTE( nCur1 ); DBMS_SQL.CLOSE_CURSOR( nCur1 ); lNameView2 := 'VwPRNEquilBilST'||lCodSes; INSERT INTO CFContrView VALUES ( lNameView2, lCodSes, TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ) ); COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF DBMS_SQL.IS_OPEN( nCur1 ) THEN DBMS_SQL.CLOSE_CURSOR( nCur1 ); END IF; RETURN pkUtility.fnError( 'pkContStampa.fnVwPRNEquilBil', SQLCODE, ERRDIAG ); END fnVwPRNEquilBil; FUNCTION fnCFEquilBilUpd ( lEser IN pkType.tyStringa%type, -- CFEquilBil ------------- Parte corrente lPercOneriUrbaniz IN pkType.tyStringa%type, -- Percent. Oneri di urbanizzazione lImpOneriUrbaniz IN pkType.tyStringa%type, -- Oneri di urbanizzazione Eser lImpOneriUrbaniz1 IN pkType.tyStringa%type, -- Oneri di urbanizzazione Eser + 1 lImpOneriUrbaniz2 IN pkType.tyStringa%type, -- Oneri di urbanizzazione Eser + 2 lImpAvanzoAmm IN pkType.tyStringa%type, -- Avanzo di amministrazione Eser lImpAvanzoAmm1 IN pkType.tyStringa%type, -- Avanzo di amministrazione Eser + 1 lImpAvanzoAmm2 IN pkType.tyStringa%type, -- Avanzo di amministrazione Eser + 2 lImpFondoNazInv IN pkType.tyStringa%type, -- Fondo Nazionale ordinario Investimenti Eser lImpFondoNazInv1 IN pkType.tyStringa%type, -- Fondo Nazionale ordinario Investimenti Eser + 1 lImpFondoNazInv2 IN pkType.tyStringa%type, -- Fondo Nazionale ordinario Investimenti Eser + 2 lImpPlusvPatr IN pkType.tyStringa%type, -- Mutuo per debiti fuori bilancio Eser lImpPlusvPatr1 IN pkType.tyStringa%type, -- Mutuo per debiti fuori bilancio Eser + 1 lImpPlusvPatr2 IN pkType.tyStringa%type, -- Mutuo per debiti fuori bilancio Eser + 2 ------------- Parte investimenti lImpOneriUrbanSC IN pkType.tyStringa%type, -- Oneri di urbanizzazione destinati alla Spesa corrente Eser lImpOneriUrban1SC IN pkType.tyStringa%type, -- Oneri di urbanizzazione destinati alla Spesa corrente Eser + 1 lImpOneriUrban2SC IN pkType.tyStringa%type, -- Oneri di urbanizzazione destinati alla Spesa corrente Eser + 2 lImpAvAppliTitII IN pkType.tyStringa%type, -- Avanzo di applicato al titolo II Eser lImpAvAppliTitII1 IN pkType.tyStringa%type, -- Avanzo di applicato al titolo II Eser + 1 lImpAvAppliTitII2 IN pkType.tyStringa%type, -- Avanzo di applicato al titolo II Eser + 2 ------------- lCodSes IN pkType.tyStringa%type, -- CFEquilBil ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS lTimeStamp CFEquilBil.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nCount NUMBER(9); BEGIN SELECT COUNT(*) INTO nCount FROM CFEquilBil WHERE ESER = lEser; IF nCount > 0 THEN UPDATE CFEquilBil SET PercOneriUrbaniz = NVL( lPercOneriUrbaniz, 0 ), ImpOneriUrbaniz = NVL( lImpOneriUrbaniz, 0 ), ImpOneriUrbaniz1 = NVL( lImpOneriUrbaniz1, 0 ), ImpOneriUrbaniz2 = NVL( lImpOneriUrbaniz2, 0 ), ImpAvanzoAmm = NVL( lImpAvanzoAmm, 0 ), ImpAvanzoAmm1 = NVL( lImpAvanzoAmm1, 0 ), ImpAvanzoAmm2 = NVL( lImpAvanzoAmm2, 0 ), ImpFondoNazInv = NVL( lImpFondoNazInv, 0 ), ImpFondoNazInv1 = NVL( lImpFondoNazInv1, 0 ), ImpFondoNazInv2 = NVL( lImpFondoNazInv2, 0 ), ImpPlusvPatr = NVL( lImpPlusvPatr, 0 ), ImpPlusvPatr1 = NVL( lImpPlusvPatr1, 0 ), ImpPlusvPatr2 = NVL( lImpPlusvPatr2, 0 ), ------------- Parte investimenti ImpOneriUrbanSC = NVL( lImpOneriUrbanSC, 0 ), ImpOneriUrban1SC = NVL( lImpOneriUrban1SC, 0 ), ImpOneriUrban2SC = NVL( lImpOneriUrban2SC, 0 ), ImpAvAppliTitII = NVL( lImpAvAppliTitII, 0 ), ImpAvAppliTitII1 = NVL( lImpAvAppliTitII1, 0 ), ImpAvAppliTitII2 = NVL( lImpAvAppliTitII2, 0 ), ---------------- CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; IF ( SQL%ROWCOUNT = 0 ) THEN ROLLBACK; RETURN pkUtility.fnError( '2pkContGen.fnCFEquilBilUpd', -212, ERRDIAG ); END IF; ELSE INSERT INTO CFEquilBil ( Eser, PercOneriUrbaniz, ImpOneriUrbaniz, ImpOneriUrbaniz1, ImpOneriUrbaniz2, ImpAvanzoAmm, ImpAvanzoAmm1, ImpAvanzoAmm2, ImpFondoNazInv, ImpFondoNazInv1, ImpFondoNazInv2, ImpPlusvPatr, ImpPlusvPatr1, ImpPlusvPatr2, ------------- Parte investimenti ImpOneriUrbanSC, ImpOneriUrban1SC, ImpOneriUrban2SC, ImpAvAppliTitII, ImpAvAppliTitII1, ImpAvAppliTitII2, CodSes, TmsLock ) VALUES ( lEser, NVL( lPercOneriUrbaniz, 0 ), NVL( lImpOneriUrbaniz, 0 ), NVL( lImpOneriUrbaniz1, 0 ), NVL( lImpOneriUrbaniz2, 0 ), NVL( lImpAvanzoAmm, 0 ), NVL( lImpAvanzoAmm1, 0 ), NVL( lImpAvanzoAmm2, 0 ), NVL( lImpFondoNazInv, 0 ), NVL( lImpFondoNazInv1, 0 ), NVL( lImpFondoNazInv2, 0 ), NVL( lImpPlusvPatr, 0 ), NVL( lImpPlusvPatr1, 0 ), NVL( lImpPlusvPatr2, 0 ), ------------- Parte investimenti NVL( lImpOneriUrbanSC, 0 ), NVL( lImpOneriUrban1SC, 0 ), NVL( lImpOneriUrban2SC, 0 ), NVL( lImpAvAppliTitII, 0 ), NVL( lImpAvAppliTitII1, 0 ), NVL( lImpAvAppliTitII2, 0 ), 0, lTimeStamp); END IF; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '2pkContStampa.fnCFEquilBilUpd', SQLCODE, ERRDIAG ); END fnCFEquilBilUpd; /************************************************************************** * Funzione per la Generazione degli Indicatori sintetici di Bilancio * **************************************************************************/ -- Autore: Torelli FUNCTION fnGeneraCFIndSintBil ( lEser IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS lTimeStamp CFIndSint.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nRet number(9); nVar1 NUMBER(20,4); nVar2 NUMBER(20,4); nVar3 NUMBER(20,4); nVar4 NUMBER(20,4); nCont number(9); BEGIN -- cancelalzione della tabella DELETE CFIndSint WHERE Eser = lEser AND Tipo = 'P'; DELETE CFIndSintDett WHERE Eser = lEser AND Tipo = 'P'; COMMIT; SELECT COUNT(*) INTO nCont FROM CFBilPre118 WHERE Eser = lEser; IF nCont = 0 THEN ERRDIAG := 'Bilancio non ancora generato per l''anno scelto'; RETURN pkUtility.fnError( 'pkContStampa.fnGeneraCFIndSintBil', -499, ERRDIAG ); END IF; --------------------------------------------------------- 1 Rigidità strutturale di bilancio ---------------------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '01', 'P', 'Rigidità strutturale di bilancio', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------ 1.1 Incidenza spese rigide (disavanzo, personale e debito) su entrate correnti ---------------------------------------------------------- -- inserimento Dettagli INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '01.1', 'P', 1, '+', 'Disavanzo iscritto in spesa', '', ImpPrev, ImpPrevPrev1, ImpPrevPrev2, 0, lTimeStamp FROM VWPRNAvDisav118 WHERE FlAvDisav = 'D' AND Eser = lEser; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '01.1', 'P', 2, '+', 'Stanziamenti: Macroaggregati 1.1 "Redditi di lavoro dipendente" + 1.7 "Interessi passivi" + Titolo 4 "Rimborso prestiti"', '', SUM(prev1), SUM(prev2), SUM(prev3), 0, lTimeStamp FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'S' AND ( SUBSTR(UEB118,5) IN ('101','107') OR SUBSTR(UEB118,5,1) = 4 ); FOR Anno In 0..2 LOOP -- IRAP [pdc U.1.02.01.01] SELECT NVL( SUM( Stanzini ), 0 ) INTO nVar1 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND App = 'S' AND CodEsteso LIKE 'U.1.02.01.01%'; IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '01.1', 'P', 3, '+', 'IRAP [pdc U.1.02.01.01]', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.1', 'P', 2, '+', 'IRAP [pdc U.1.02.01.01]', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.2', 'P', 6, '+', 'IRAP [pdc U.1.02.01.01]', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.3', 'P', 3, '+', 'IRAP [pdc U.1.02.01.01]', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.4', 'P', 2, '+', 'IRAP [pdc U.1.02.01.01]', '', nVar1, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod IN ( '01.1', '03.3' ) AND NumDett = 3 AND Tipo = 'P'; UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod IN ( '03.1', '03.4' ) AND NumDett = 2 AND Tipo = 'P'; UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod = '03.2' AND NumDett = 6 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod IN ( '01.1', '03.3' ) AND NumDett = 3 AND Tipo = 'P'; UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod IN ( '03.1', '03.4' ) AND NumDett = 2 AND Tipo = 'P'; UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod = '03.2' AND NumDett = 6 AND Tipo = 'P'; END IF; END lOOP; FOR Anno In 0..2 LOOP -- FPV entrata concernente il Macroaggregato 1.1 SELECT NVL( SUM( Stanzini ), 0 ) INTO nVar1 FROM vwFRMCFCapitoliPEG WHERE App = 'S' AND FLCopFPlur = 'S' AND Codice3 = 1 AND Codice4 = 1 AND Eser = lEser + Anno; IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '01.1', 'P', 4, '-', 'FPV entrata concernente il Macroaggregato 1.1', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.1', 'P', 3, '-', 'FPV entrata concernente il Macroaggregato 1.1', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.2', 'P', 4, '-', 'FPV entrata concernente il Macroaggregato 1.1', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.3', 'P', 4, '-', 'FPV entrata concernente il Macroaggregato 1.1', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.4', 'P', 4, '-', 'FPV entrata concernente il Macroaggregato 1.1', '', nVar1, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod IN ( '01.1', '03.2', '03.3', '03.4' ) AND NumDett = 4 AND Tipo = 'P'; UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod = '03.1' AND NumDett = 3 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod IN ( '01.1', '03.2', '03.3', '03.4' ) AND NumDett = 4 AND Tipo = 'P'; UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod = '03.1' AND NumDett = 3 AND Tipo = 'P'; END IF; END lOOP; FOR Anno In 0..2 LOOP -- FPV spesa concernente il Macroaggregato 1.1: prendiamo in considerazione i copereti da fondo dell'anno successivo del Macr. 101 SELECT nvl(SUM(Stanzini),0) INTO nVar1 FROM vwFRMCFCapitoliPEG WHERE App = 'S' AND FlCopFPlur = 'S' AND Eser = lEser + 1 + Anno AND SUBSTR(UEB118,5) = '101'; IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '01.1', 'P', 5, '+', 'FPV spesa concernente il Macroaggregato 1.1', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.1', 'P', 4, '+', 'FPV spesa concernente il Macroaggregato 1.1', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.2', 'P', 3, '+', 'FPV spesa concernente il Macroaggregato 1.1', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.3', 'P', 5, '+', 'FPV spesa concernente il Macroaggregato 1.1', '', nVar1, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.4', 'P', 3, '+', 'FPV spesa concernente il Macroaggregato 1.1', '', nVar1, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod IN ( '01.1', '03.3' ) AND NumDett = 5 AND Tipo = 'P'; UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod = '03.1' AND NumDett = 4 AND Tipo = 'P'; UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod IN ( '03.2', '03.4' ) AND NumDett = 3 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod IN ( '01.1', '03.3' ) AND NumDett = 5 AND Tipo = 'P'; UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod = '03.1' AND NumDett = 4 AND Tipo = 'P'; UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod IN ( '03.2', '03.4' ) AND NumDett = 3 AND Tipo = 'P'; END IF; END lOOP; SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'E' AND SUBSTR(UEB118,1,1) BETWEEN 1 and 3; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '01.1', 'P', 6, '/', 'Stanziamenti di competenza dei primi tre titoli delle Entrate', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '02.1', 'P', 2, '/', 'Stanziamenti di competenza dei primi tre titoli delle "Entrate correnti"', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '02.3', 'P', 4, '/', 'Stanziamenti di competenza dei primi tre titoli delle "Entrate correnti"', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '05.1', 'P', 2, '/', 'Stanziamenti di competenza dei primi tre titoli delle "Entrate correnti"', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '10.3', 'P', 2, '/', 'Competenza dei titoli 1, 2 e 3 delle entrate', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '12.1', 'P', 3, '/', 'Totale stanziamenti di competenza per i primi tre titoli di entrata', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); -- inserimento Calcolo INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '01.1', 'P', 'Incidenza spese rigide (disavanzo, personale e debito) su entrate correnti', '[Disavanzo iscritto in spesa + Stanziamenti competenza (Macroaggregati 1.1 "Redditi di lavoro dipendente" '|| '+ 1.7 "Interessi passivi" + Titolo 4 "Rimborso prestiti" + "IRAP" [pdc U.1.02.01.01] - FPV entrata concernente il Macroaggregato 1.1 '|| '+ FPV spesa concernente il Macroaggregato 1.1)] / (Stanziamenti di competenza dei primi tre titoli delle Entrate)', DECODE( nVar1, 0, 0, SUM(segno||Imp1)/nVar1 )*100, DECODE( nVar2, 0, 0,SUM(segno||Imp2)/nVar2 )*100, DECODE( nVar3, 0, 0,SUM(segno||Imp3)/nVar3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '01.1' AND Tipo = 'P' AND NumDett < 6; COMMIT; --------------------------------------------------------- 2 Entrate correnti ---------------------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '02', 'P', 'Entrate correnti', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------ 2.1 Indicatore di realizzazione delle previsioni di competenza concernenti le entrate correnti ---------------------------------------------------------- SELECT NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, (lEser + 1) ) ), 0 ) INTO nVar1 FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser BETWEEN lEser-2 AND lEser-1 AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,1) between 1 and 3; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '02.1', 'P', 1, '+', 'Media Accertamenti 2015 e 2016 in base alla nota del modello', '', nVar1/2, nVar1/2, nVar1/2, 0, lTimeStamp ); -- inserimento Calcolo INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '02.1', 'P', 'Indicatore di realizzazione delle previsioni di competenza concernenti le entrate correnti', 'Media accertamenti primi tre titoli di entrata nei tre esercizi precedenti / Stanziamenti di competenza dei primi tre titoli delle "Entrate correnti"', DECODE( Imp1, 0, 0, (nVar1/2)/Imp1 )*100, DECODE( Imp2, 0, 0, (nVar1/2)/Imp2 )*100, DECODE( Imp3, 0, 0, (nVar1/2)/Imp3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '02.1' AND Tipo = 'P' AND NumDett = 2; COMMIT; ------------------------------------------ 2.2 Indicatore di realizzazione delle previsioni di cassa corrente ---------------------------------------------------------- SELECT NVL( SUM( CFDettReversali.Impini ), 0 ) INTO nVar1 FROM CFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser BETWEEN lEser-2 AND lEser-1 AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,1) between 1 and 3; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '02.2', 'P', 1, '+', 'Media Incassi 2015 e 2016 in base alla nota del modello', '', nVar1/2, 0, 0, 0, lTimeStamp ); SELECT SUM(Prev1) INTO nVar2 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 4 AND App = 'E' AND SUBSTR(UEB118,1,1) BETWEEN 1 and 3; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '02.2', 'P', 2, '/', 'Stanziamenti di cassa dei primi tre titoli delle Entrate', '', nVar2, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '02.4', 'P', 4, '/', 'Stanziamenti di cassa dei primi tre titoli delle Entrate', '', nVar2, 0, 0, 0, lTimeStamp ); -- inserimento Calcolo INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '02.2', 'P', 'Indicatore di realizzazione delle previsioni di cassa corrente', 'Media incassi primi tre titoli di entrata nei tre esercizi precedenti / Stanziamenti di cassa dei primi tre titoli delle "Entrate correnti"', DECODE( nVar2, 0, 0, (nVar1/2)/nVar2 )*100, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------ 2.3 Indicatore di realizzazione delle previsioni di competenza concernenti le entrate proprie ---------------------------------------------------------- SELECT NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, (lEser + 1) ) ), 0 ) INTO nVar1 FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser BETWEEN lEser-2 AND lEser-1 AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,3) = '101'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '02.3', 'P', 1, '+', 'Media Accertamenti 2015 e 2016 pdc E.1.01.00.00.000 "Tributi"', '', nVar1/2, nVar1/2, nVar1/2, 0, lTimeStamp ); SELECT NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, (lEser + 1) ) ), 0 ) INTO nVar2 FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser BETWEEN lEser-2 AND lEser-1 AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,5) = '10104'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '02.3', 'P', 2, '-', 'Media Accertamenti 2015 e 2016 "Compartecipazioni di tributi" E.1.01.04.00.000', '', nVar2/2, nVar2/2, nVar2/2, 0, lTimeStamp ); SELECT NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, (lEser + 1) ) ), 0 ) INTO nVar3 FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser BETWEEN lEser-2 AND lEser-1 AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,1) = '3'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '02.3', 'P', 3, '+', 'Media Accertamenti 2015 e 2016 E.3.00.00.00.000 "Entrate extratributarie")', '', nVar3/2, nVar3/2, nVar3/2, 0, lTimeStamp ); -- inserimento Calcolo INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '02.3', 'P', 'Indicatore di realizzazione delle previsioni di competenza concernenti le entrate proprie', 'Media accertamenti nei tre esercizi precedenti (pdc E.1.01.00.00.000 "Tributi" - "Compartecipazioni di tributi" '|| 'E.1.01.04.00.000 + E.3.00.00.00.000 "Entrate extratributarie") / Stanziamenti di competenza dei primi tre titoli delle "Entrate correnti"', DECODE( Imp1, 0, 0, ((nVar1-nVar2+nVar3)/2)/Imp1 )*100, DECODE( Imp2, 0, 0, ((nVar1-nVar2+nVar3)/2)/Imp2 )*100, DECODE( Imp3, 0, 0, ((nVar1-nVar2+nVar3)/2)/Imp3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '02.3' AND Tipo = 'P' AND NumDett = 4; COMMIT; ------------------------------------------ 2.4 Indicatore di realizzazione delle previsioni di cassa concernenti le entrate proprie ---------------------------------------------------------- SELECT NVL( SUM( CFDettReversali.Impini ), 0 ) INTO nVar1 FROM CFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser BETWEEN lEser-2 AND lEser-1 AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,3) = '101'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '02.4', 'P', 1, '+', 'Media Incassi 2015 e 2016 pdc E.1.01.00.00.000 "Tributi"', '', nVar1/2, 0, 0, 0, lTimeStamp ); SELECT NVL( SUM( CFDettReversali.Impini ), 0 ) INTO nVar2 FROM CFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser BETWEEN lEser-2 AND lEser-1 AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,5) = '10104'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '02.4', 'P', 2, '-', 'Media Incassi 2015 e 2016 "Compartecipazioni di tributi" E.1.01.04.00.000', '', nVar2/2, 0, 0, 0, lTimeStamp ); SELECT NVL( SUM( CFDettReversali.Impini ), 0 ) INTO nVar3 FROM CFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser BETWEEN lEser-2 AND lEser-1 AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,1) = '3'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '02.4', 'P', 3, '+', 'Media Incassi 2015 e 2016 E.3.00.00.00.000 "Entrate extratributarie")', '', nVar3/2, 0, 0, 0, lTimeStamp ); -- inserimento Calcolo INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '02.4', 'P', 'Indicatore di realizzazione delle previsioni di cassa concernenti le entrate proprie', 'Media incassi nei tre esercizi precedenti (pdc E.1.01.00.00.000 "Tributi" - "Compartecipazioni di tributi" '|| 'E.1.01.04.00.000 + E.3.00.00.00.000 "Entrate extratributarie") / Stanziamenti di cassa dei primi tre titoli delle "Entrate correnti"', DECODE( Imp1, 0, 0, ((nVar1-nVar2+nVar3)/2)/Imp1 )*100, 0, 0, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '02.4' AND Tipo = 'P' AND NumDett = 4; --------------------------------------------------------- 3 Spese di personale ---------------------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03', 'P', 'Spese di personale', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 3.1 Incidenza spesa personale sulla spesa corrente(Indicatore di equilibrio economico-finanziario) ---------------------------------------------------------- INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '03.1', 'P', 1, '+', 'Stanziamenti: Macroaggregati 1.1', '', SUM(prev1), SUM(prev2), SUM(prev3), 0, lTimeStamp FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'S' AND SUBSTR(UEB118,5) = '101'; SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'S' AND SUBSTR(UEB118,5,1) = 1; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '03.1', 'P', 5, '+', 'Stanziamenti competenza Spesa corrente', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES( lEser, '12.2', 'P', 3, '/', 'Totale stanziamenti di competenza per il primo titolo di spesa', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); FOR Anno In 0..2 LOOP -- FCDE corrente U.1.10.01.03% SELECT NVL( SUM( Stanzini ), 0 ) INTO nVar1 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND App = 'S' AND CodEsteso LIKE 'U.1.10.01.03%'; IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.1', 'P', 6, '-', 'FCDE corrente (pdc: U.1.10.01.03.001)', '', nVar1, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod = '03.1' AND NumDett = 6 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod = '03.1' AND NumDett = 6 AND Tipo = 'P'; END IF; END lOOP; INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '03.1', 'P', 'Incidenza spesa personale sulla spesa corrente(Indicatore di equilibrio economico-finanziario)', 'Stanziamenti di competenza (Macroaggregato 1.1 + IRAP [pdc U.1.02.01.01] - FPV entrata concernente il Macroaggregato 1.1 '|| '+ FPV spesa concernente il Macroaggregato 1.1) /Stanziamenti competenza (Spesa corrente - FCDE corrente - FPV di entrata concernente il Macroaggregato 1.1 + FPV spesa concernente il Macroaggregato 1.1)', SUM( segno||Imp1 ), SUM( segno||Imp2 ), SUM( segno||Imp3 ), 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '03.1' AND Tipo = 'P' AND NumDett < 5; SELECT SUM( segno||Imp1 ), SUM( segno||Imp2 ), SUM( segno||Imp3 ) INTO nVar1, nVar2, nVar3 FROM CFIndSintDett WHERE Eser = lEser AND Cod = '03.1' AND Tipo = 'P' AND NumDett in ( 5, 6, 3, 4 ); UPDATE CFIndSint SET Imp1 = DECODE( nVar1, 0, 0, (Imp1/nVar1)*100 ), Imp2 = DECODE( nVar2, 0, 0, (Imp2/nVar2)*100 ), Imp3 = DECODE( nVar3, 0, 0, (Imp3/nVar3)*100 ) WHERE Eser = lEser AND Cod = '03.1' AND Tipo = 'P'; COMMIT; ------------------------------------------------- 3.2 Incidenza del salario accessorio ed incentivante rispetto al totale della spesa di personale ---------------------------------------------------------- FOR Anno In 0..2 LOOP -- pdc 1.01.01.01.004 + 1.01.01.01.008 "indennità e altri compensi al personale a tempo indeterminato e determinato" SELECT NVL( SUM( Stanzini ), 0 ) INTO nVar1 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND App = 'S' AND CodEsteso in ( 'U.1.01.01.01.004', 'U.1.01.01.01.008' ); IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.2', 'P', 1, '+', 'pdc 1.01.01.01.004 + 1.01.01.01.008 "indennità e altri compensi al personale a tempo indeterminato e determinato"', '', nVar1, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod = '03.2' AND NumDett = 1 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod = '03.2' AND NumDett = 1 AND Tipo = 'P'; END IF; END lOOP; FOR Anno In 0..2 LOOP -- pdc 1.01.01.01.003 + 1.01.01.01.007 "straordinario al personale a tempo indeterminato e determinato" SELECT NVL( SUM( Stanzini ), 0 ) INTO nVar1 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND App = 'S' AND CodEsteso in ( 'U.1.01.01.01.003', 'U.1.01.01.01.007' ); IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.2', 'P', 2, '+', 'pdc 1.01.01.01.003 + 1.01.01.01.007 "straordinario al personale a tempo indeterminato e determinato"', '', nVar1, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod = '03.2' AND NumDett = 2 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod = '03.2' AND NumDett = 2 AND Tipo = 'P'; END IF; END lOOP; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '03.2', 'P', 5, '+', 'Macroaggregato 1.1', '', SUM(prev1), SUM(prev2), SUM(prev3), 0, lTimeStamp FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'S' AND SUBSTR(UEB118,5) = '101'; INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '03.2', 'P', 'Incidenza del salario accessorio ed incentivante rispetto al totale della spesa di personale', '(pdc 1.01.01.004 + 1.01.01.008 "indennità e altri compensi al personale a tempo indeterminato e determinato" + '|| 'pdc 1.01.01.003 + 1.01.01.007 "straordinario al personale a tempo indeterminato e determinato" '|| 'FPV in uscita Macroaggregato 1.1 - FPV di entrata Macroaggregato 1.1) / '|| '(Macroaggregato 1.1 + pdc 1.02.01.01 "IRAP" - FPV di entrata Macroaggregato 1.1 + FPV spesa Macroaggregato 1.1)', SUM( segno||Imp1 ), SUM( segno||Imp2 ), SUM( segno||Imp3 ), 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '03.2' AND Tipo = 'P' AND NumDett < 5; SELECT SUM( segno||Imp1 ), SUM( segno||Imp2 ), SUM( segno||Imp3 ) INTO nVar1, nVar2, nVar3 FROM CFIndSintDett WHERE Eser = lEser AND Cod = '03.2' AND Tipo = 'P' AND NumDett in ( 5, 6, 3, 4 ); UPDATE CFIndSint SET Imp1 = DECODE( nVar1, 0, 0, (Imp1/nVar1)*100 ), Imp2 = DECODE( nVar2, 0, 0, (Imp2/nVar2)*100 ), Imp3 = DECODE( nVar3, 0, 0, (Imp3/nVar3)*100 ) WHERE Eser = lEser AND Cod = '03.2' AND Tipo = 'P'; COMMIT; ------------------------------------------------- 3.3 Incidenza della spesa di personale con forme di contratto flessibile ---------------------------------------------------------- FOR Anno In 0..2 LOOP -- pdc U.1.03.02.10 "Consulenze" + pdc U.1.03.02.12 "lavoro flessibile/LSU/Lavoro interinale") SELECT NVL( SUM( Stanzini ), 0 ) INTO nVar1 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND App = 'S' AND ( CodEsteso like 'U.1.03.02.12%' OR CodEsteso like 'U.1.03.02.10%' ); IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.3', 'P', 1, '+', 'pdc U.1.03.02.10 "Consulenze" + pdc U.1.03.02.12 "lavoro flessibile/LSU/Lavoro interinale"', '', nVar1, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod = '03.3' AND NumDett = 1 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod = '03.3' AND NumDett = 1 AND Tipo = 'P'; END IF; END lOOP; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '03.3', 'P', 2, '+', 'Macroaggregato 1.1', '', SUM(prev1), SUM(prev2), SUM(prev3), 0, lTimeStamp FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'S' AND SUBSTR(UEB118,5) = '101'; INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '03.3', 'P', 'Incidenza della spesa di personale con forme di contratto flessibile', 'Stanziamenti di competenza (pdc U.1.03.02.010 "Consulenze" + pdc U.1.03.02.12 "lavoro flessibile/LSU/Lavoro interinale") / '|| 'Stanziamenti di competenza (Macroaggregato 1.1 "Redditi di lavoro dipendente" + pdc U.1.02.01.01 "IRAP" + '|| 'FPV in uscita concernente il Macroaggregato 1.1 - FPV in entrata concernente il Macroaggregato 1.1)', Imp1, Imp2, Imp3, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '03.3' AND Tipo = 'P' AND NumDett = 1; SELECT SUM( segno||Imp1 ), SUM( segno||Imp2 ), SUM( segno||Imp3 ) INTO nVar1, nVar2, nVar3 FROM CFIndSintDett WHERE Eser = lEser AND Cod = '03.3' AND Tipo = 'P' AND NumDett > 1; UPDATE CFIndSint SET Imp1 = DECODE( nVar1, 0, 0, (Imp1/nVar1)*100 ), Imp2 = DECODE( nVar2, 0, 0, (Imp2/nVar2)*100 ), Imp3 = DECODE( nVar3, 0, 0, (Imp3/nVar3)*100 ) WHERE Eser = lEser AND Cod = '03.3' AND Tipo = 'P'; COMMIT; ------------------------------------------------- 3.4 Spesa di personale procapite ---------------------------------------------------------- INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '03.4', 'P', 1, '+', 'Macroaggregato 1.1', '', SUM(prev1), SUM(prev2), SUM(prev3), 0, lTimeStamp FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'S' AND SUBSTR(UEB118,5) = '101'; SELECT NVL(MAX(Popolazione),0) INTO nVar1 FROM CFInfobase WHERE ROWNUM < 2 ORDER BY 1 DESC; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '03.4', 'P', 5, '+', 'Popolazione dell''ultimo anno disponibile dalla tabella di base', '', nVar1, nVar1, nVar1, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.2', 'P', 2, '+', 'Popolazione dell''ultimo anno disponibile dalla tabella di base', '', nVar1, nVar1, nVar1, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.3', 'P', 2, '+', 'Popolazione dell''ultimo anno disponibile dalla tabella di base', '', nVar1, nVar1, nVar1, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.4', 'P', 2, '+', 'Popolazione dell''ultimo anno disponibile dalla tabella di base', '', nVar1, nVar1, nVar1, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '03.4', 'P', 'Spesa di personale procapite (Indicatore di equilibrio dimensionale in valore assoluto)', 'Stanziamenti di competenza (Macroaggregato 1.1 + IRAP [pdc 1.02.01.01] - FPV entrata concernente il Macroaggregato 1.1 + FPV spesa concernente il Macroaggregato 1.1 ) '|| '/ popolazione residente (Popolazione al 1° gennaio dell''esercizio di riferimento o, se non disponibile, al 1° gennaio dell''ultimo anno disponibile)', ABS( DECODE( nVar1, 0, 0, SUM( segno||Imp1 )/nVar1 )*100 ), ABS( DECODE( nVar1, 0, 0, SUM( segno||Imp2 )/nVar1 )*100 ), ABS( DECODE( nVar1, 0, 0, SUM( segno||Imp3 )/nVar1 )*100 ), 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '03.2' AND Tipo = 'P' AND NumDett < 5; COMMIT; ------------------------------------------------- 4 Esternalizzazione dei servizi ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '04', 'P', 'Esternalizzazione dei servizi', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 4.1 Indicatore di esternalizzazione dei servizi ---------------------------------------------------------- FOR Anno In 0..2 LOOP -- ( pdc U.1.03.02.15.000 "Contratti di servizio pubblico" + -- pdc U.1.04.03.01.000 "Trasferimenti correnti a imprese controllate" + -- pdc U.1.04.03.02.000 "Trasferimenti correnti a altre imprese partecipate" ) al netto del relativo FPV di spesa SELECT NVL( SUM( Stanzini ), 0 ) INTO nVar1 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND App = 'S' AND FlFondoPlur <> 'S' AND ( CodEsteso like 'U.1.03.02.15.%' OR CodEsteso like 'U.1.04.03.01.%' OR CodEsteso like 'U.1.04.03.02.%' ); IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '04.1', 'P', 1, '+', '(pdc U.1.03.02.15.000 "Contratti di servizio pubblico" + pdc U.1.04.03.01.000 "Trasferimenti correnti a imprese controllate" + pdc U.1.04.03.02.000 "Trasferimenti correnti a altre imprese partecipate") al netto del relativo FPV di spesa', '', nVar1, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod = '04.1' AND NumDett = 1 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod = '04.1' AND NumDett = 1 AND Tipo = 'P'; END IF; END lOOP; SELECT SUM(DECODE(NumRiga, 3, -prev1, prev1)), SUM(DECODE(NumRiga, 3, -prev2, prev2)), SUM(DECODE(NumRiga, 3, -prev3, prev3)) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga IN ( 1, 3 ) AND App = 'S' AND SUBSTR(UEB118,5,1) = '1'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '04.1', 'P', 2, '+', 'totale stanziamenti di competenza spese Titolo I al netto del FPV', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '04.1', 'P', 'Indicatore di esternalizzazione dei servizi', 'Stanziamenti di competenza (pdc U.1.03.02.15.000 "Contratti di servizio pubblico" + pdc U.1.04.03.01.000 "Trasferimenti correnti a imprese controllate" + '|| 'pdc U.1.04.03.02.000 "Trasferimenti correnti a altre imprese partecipate") al netto del relativo FPV di spesa / totale stanziamenti di competenza spese Titolo I al netto del FPV', DECODE( nVar1, 0, 0, Imp1/nVar1 )*100, DECODE( nVar1, 0, 0, Imp2/nVar1 )*100, DECODE( nVar1, 0, 0, Imp3/nVar1 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '04.1' AND Tipo = 'P' AND NumDett = 1; COMMIT; ------------------------------------------------- 5 Interessi passivi ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '05', 'P', 'Interessi passivi', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 5.1 Incidenza degli interessi passivi sulle entrate correnti ---------------------------------------------------------- SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'S' AND SUBSTR(UEB118,5) = '107'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '05.1', 'P', 1, '+', 'Macroaggregato 1.7 "Interessi passivi"', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '05.2', 'P', 2, '/', 'Macroaggregato 1.7 "Interessi passivi"', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '05.3', 'P', 2, '/', 'Macroaggregato 1.7 "Interessi passivi"', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '05.1', 'P', 'Incidenza degli interessi passivi sulle entrate correnti (che ne costituiscono la fonte di copertura)', 'Stanziamenti di competenza Macroaggregato 1.7 "Interessi passivi" / Stanziamenti di competenza primi tre titoli ("Entrate correnti")', DECODE( Imp1, 0, 0, nVar1/Imp1 )*100, DECODE( Imp2, 0, 0, nVar2/Imp2 )*100, DECODE( Imp3, 0, 0, nVar3/Imp3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '05.1' AND Tipo = 'P' AND NumDett = 2; COMMIT; ------------------------------------------------- 5.2 Incidenza degli interessi sulle anticipazioni sul totale degli interessi passivi ---------------------------------------------------------- -- utlizza le var1,2 e 3 di sopra FOR Anno In 0..2 LOOP -- pdc U.1.07.06.04.000 "Interessi passivi su anticipazioni di tesoreria" SELECT NVL( SUM( Stanzini ), 0 ) INTO nVar3 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND App = 'S' AND CodEsteso LIKE 'U.1.07.06.04.%'; IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '05.2', 'P', 1, '+', 'pdc U.1.07.06.04.000 "Interessi passivi su anticipazioni di tesoreria"', '', nVar3, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar3 WHERE Eser = lEser AND Cod = '05.2' AND NumDett = 1 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar3 WHERE Eser = lEser AND Cod = '05.2' AND NumDett = 1 AND Tipo = 'P'; END IF; END lOOP; INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '05.2', 'P', 'Incidenza degli interessi sulle anticipazioni sul totale degli interessi passivi', 'Stanziamenti di competenza voce del piano dei conti finanziario U.1.07.06.04.000 "Interessi passivi su anticipazioni di tesoreria" / Stanziamenti di competenza Macroaggregato 1.7 "Interessi passivi"', DECODE( nVar1, 0, 0, Imp1/nVar1 )*100, DECODE( nVar2, 0, 0, Imp2/nVar2 )*100, DECODE( nVar3, 0, 0, Imp3/nVar3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '05.2' AND Tipo = 'P' AND NumDett = 1; COMMIT; ------------------------------------------------- 5.3 Incidenza degli interessi di mora sul totale degli interessi passivi ---------------------------------------------------------- -- utlizza le var1,2 e 3 di sopra FOR Anno In 0..2 LOOP -- pdc U.1.07.06.02.000 "Interessi di mora" SELECT NVL( SUM( Stanzini ), 0 ) INTO nVar3 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND App = 'S' AND CodEsteso LIKE 'U.1.07.06.02.%'; IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '05.3', 'P', 1, '+', 'pdc U.1.07.06.02.000 "Interessi di mora"', '', nVar3, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar3 WHERE Eser = lEser AND Cod = '05.3' AND NumDett = 1 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar3 WHERE Eser = lEser AND Cod = '05.3' AND NumDett = 1 AND Tipo = 'P'; END IF; END lOOP; INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '05.3', 'P', 'Incidenza degli interessi di mora sul totale degli interessi passivi', 'Stanziamenti di competenza voce del piano dei conti finanziario U.1.07.06.02.000 "Interessi di mora" / Stanziamenti di competenza Macroaggregato 1.7 "Interessi passivi"', DECODE( nVar1, 0, 0, Imp1/nVar1 )*100, DECODE( nVar2, 0, 0, Imp2/nVar2 )*100, DECODE( nVar3, 0, 0, Imp3/nVar3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '05.2' AND Tipo = 'P' AND NumDett = 1; COMMIT; ------------------------------------------------- 6 Investimenti ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06', 'P', 'Investimenti', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 6.1 Incidenza investimenti su spesa corrente e in conto capitale ---------------------------------------------------------- SELECT SUM(DECODE(NumRiga, 3, -prev1, prev1)), SUM(DECODE(NumRiga, 3, -prev2, prev2)), SUM(DECODE(NumRiga, 3, -prev3, prev3)) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga IN ( 1, 3 ) AND App = 'S' AND SUBSTR(UEB118,5) IN ( '202', '203' ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.1', 'P', 1, '+', 'Macroaggregati 2.2 + 2.3 al netto dei relativi FPV', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.4', 'P', 1, '+', 'Macroaggregati 2.2 + 2.3 al netto dei relativi FPV', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.5', 'P', 2, '+', 'Macroaggregati 2.2 + 2.3 al netto dei relativi FPV', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.6', 'P', 2, '+', 'Macroaggregati 2.2 + 2.3 al netto dei relativi FPV', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.7', 'P', 2, '+', 'Macroaggregati 2.2 + 2.3 al netto dei relativi FPV', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.1', 'P', 'Incidenza investimenti su spesa corrente e in conto capitale', 'Totale stanziamento di competenza Macroaggregati 2.2 + 2.3 al netto dei relativi FPV / Totale stanziamento di competenza titolo 1° e 2° della spesa al netto del FPV', nVar1, nVar2, nVar3, 0, lTimeStamp ); SELECT SUM(DECODE(NumRiga, 3, -prev1, prev1)), SUM(DECODE(NumRiga, 3, -prev2, prev2)), SUM(DECODE(NumRiga, 3, -prev3, prev3)) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga IN ( 1, 3 ) AND App = 'S' AND SUBSTR(UEB118,5,1) IN( 1, 2 ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.1', 'P', 2, '+', 'titolo 1° e 2° della spesa al netto del FPV', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); UPDATE CFIndSint SET Imp1 = DECODE( nVar1, 0, 0, (Imp1/nVar1)*100 ), Imp2 = DECODE( nVar2, 0, 0, (Imp2/nVar2)*100 ), Imp3 = DECODE( nVar3, 0, 0, (Imp3/nVar3)*100 ) WHERE Eser = lEser AND Cod = '06.1' AND Tipo = 'P'; COMMIT; ------------------------------------------------- 6.2 Investimenti diretti procapite ---------------------------------------------------------- SELECT SUM(DECODE(NumRiga, 3, -prev1, prev1)), SUM(DECODE(NumRiga, 3, -prev2, prev2)), SUM(DECODE(NumRiga, 3, -prev3, prev3)) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga IN ( 1, 3 ) AND App = 'S' AND SUBSTR(UEB118,5) = '202'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.2', 'P', 1, '+', 'Macroaggregato 2.2 "Investimenti fissi lordi e acquisto di terreni" al netto del relativo FPV', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '06.2', 'P', 'Investimenti diretti procapite (Indicatore di equilibrio dimensionale in valore assoluto)', 'Stanziamenti di competenza per Macroaggregato 2.2 "Investimenti fissi lordi e acquisto di terreni" al netto del relativo FPV / popolazione residente '|| '(al 1° gennaio dell''esercizio di riferimento o, se non disponibile, al 1° gennaio dell''ultimo anno disponibile)', ABS( DECODE( Imp1, 0, 0, nVar1/Imp1 )*100 ), ABS( DECODE( Imp2, 0, 0, nVar2/Imp2 )*100 ), ABS( DECODE( Imp3, 0, 0, nVar3/Imp3 )*100 ), 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '06.2' AND Tipo = 'P' AND NumDett = 2; COMMIT; ------------------------------------------------- 6.3 Contributi agli investimenti procapite ---------------------------------------------------------- SELECT SUM(DECODE(NumRiga, 3, -prev1, prev1)), SUM(DECODE(NumRiga, 3, -prev2, prev2)), SUM(DECODE(NumRiga, 3, -prev3, prev3)) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga IN ( 1, 3 ) AND App = 'S' AND SUBSTR(UEB118,5) = '203'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.3', 'P', 1, '+', 'Macroaggregato 2.3 Contributi agli investimenti al netto del relativo FPV', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '06.3', 'P', 'Contributi agli investimenti procapite (Indicatore di equilibrio dimensionale in valore assoluto)', 'Stanziamenti di competenza Macroaggregato 2.3 Contributi agli investimenti al netto del relativo FPV / popolazione residente '|| '(al 1° gennaio dell''esercizio di riferimento o, se non disponibile, al 1° gennaio dell''ultimo anno disponibile)', ABS( DECODE( Imp1, 0, 0, nVar1/Imp1 )*100 ), ABS( DECODE( Imp2, 0, 0, nVar2/Imp2 )*100 ), ABS( DECODE( Imp3, 0, 0, nVar3/Imp3 )*100 ), 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '06.3' AND Tipo = 'P' AND NumDett = 2; COMMIT; ------------------------------------------------- 6.4 Investimenti complessivi procapite ---------------------------------------------------------- SELECT Imp1, Imp2, Imp3 INTO nVar1, nVar2, nVar3 FROM CFIndSintDett WHERE Eser = lEser AND Cod = '06.4' AND Tipo = 'P' AND NumDett = 1; INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '06.4', 'P', 'Investimenti complessivi procapite (Indicatore di equilibrio dimensionale in valore assoluto)', 'Totale stanziamenti di competenza per Macroaggregati 2.2 "Investimenti fissi lordi e acquisto di terreni" e 2.3 "Contributi agli investimenti" al netto dei relativi FPV '|| '/ popolazione residente (al 1° gennaio dell''esercizio di riferimento o, se non disponibile, al 1° gennaio dell''ultimo anno disponibile)', ABS( DECODE( Imp1, 0, 0, nVar1/Imp1 )*100 ), ABS( DECODE( Imp2, 0, 0, nVar2/Imp2 )*100 ), ABS( DECODE( Imp3, 0, 0, nVar3/Imp3 )*100 ), 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '06.4' AND Tipo = 'P' AND NumDett = 2; COMMIT; ------------------------------------------------- 6.5 Quota investimenti complessivi finanziati dal risparmio corrente ---------------------------------------------------------- -- per ora non è stato calcolato INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.5', 'P', 'Quota investimenti complessivi finanziati dal risparmio corrente', 'Margine corrente di competenza / Stanziamenti di competenza (Macroaggregato 2.2 "Investimenti fissi lordi e acquisto di terreni" + Macroaggregato 2.3 "Contributi agli investimenti")', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 6.6 Quota investimenti complessivi finanziati dal saldo positivo delle partite finanziarie ---------------------------------------------------------- SELECT SUM(DECODE(App, 'S', -prev1, prev1)), SUM(DECODE(App, 'S', -prev2, prev2)), SUM(DECODE(App, 'S', -prev3, prev3)) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND ( ( App = 'S' AND SUBSTR(UEB118,5,1) = 3 ) OR ( App = 'E' AND SUBSTR(UEB118,1,1) = 5 ) ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.6', 'P', 1, '+', 'Saldo positivo delle partite finanziarie pari alla differenza tra il TItolo V delle Entrate e il Titolo III delle Spese', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '06.6', 'P', 'Quota investimenti complessivi finanziati dal saldo positivo delle partite finanziarie', 'Saldo positivo di competenza delle partite finanziarie /Stanziamenti di competenza (Macroaggregato 2.2 "Investimenti fissi lordi e acquisto di terreni" + Macroaggregato 2.3 "Contributi agli investimenti")', DECODE( Imp1, 0, 0, nVar1/Imp1 )*100, DECODE( Imp2, 0, 0, nVar2/Imp2 )*100, DECODE( Imp3, 0, 0, nVar3/Imp3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '06.6' AND Tipo = 'P' AND NumDett = 2; COMMIT; ------------------------------------------------- 6.7 Quota investimenti complessivi finanziati da debito ---------------------------------------------------------- SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'E' AND SUBSTR(UEB118,1,1) = 6 AND UEB118 NOT IN ( 6020200, 6030300 ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '06.7', 'P', 1, '+', 'Titolo 6 "Accensione di prestiti" - Categoria 6.02.02 "Anticipazioni" - Categoria 6.03.03 "Accensione prestiti a seguito di escussione di garanzie"', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '06.7', 'P', 'Quota investimenti complessivi finanziati da debito', 'Stanziamenti di competenza (Titolo 6 "Accensione di prestiti" - Categoria 6.02.02 "Anticipazioni" - Categoria 6.03.03 "Accensione prestiti a seguito di escussione di garanzie" - '|| 'Accensioni di prestiti da rinegoziazioni)/Stanziamenti di competenza (Macroaggregato 2.2 "Investimenti fissi lordi e acquisto di terreni" + Macroaggregato 2.3 "Contributi agli investimenti")', DECODE( Imp1, 0, 0, nVar1/Imp1 )*100, DECODE( Imp2, 0, 0, nVar2/Imp2 )*100, DECODE( Imp3, 0, 0, nVar3/Imp3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '06.7' AND Tipo = 'P' AND NumDett = 2; COMMIT; ------------------------------------------------- 7 Debiti non finanziari ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '07', 'P', 'Debiti non finanziari', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 7.1 Indicatore di smaltimento debiti commerciali ---------------------------------------------------------- SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 4 AND -- cassa App = 'S' AND SUBSTR(UEB118,5) IN ( '202', '103' ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '07.1', 'P', 1, '+', 'Stanziamento di cassa (Macroaggregati 1.3 "Acquisto di beni e servizi" + 2.2 "Investimenti fissi lordi e acquisto di terreni")', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); SELECT SUM(DECODE(NumRiga, 3, -prev1, prev1)), SUM(DECODE(NumRiga, 3, -prev2, prev2)), SUM(DECODE(NumRiga, 3, -prev3, prev3)) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga IN ( 1, 3 ) AND App = 'S' AND SUBSTR(UEB118,5) IN ( '202', '103' ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '07.1', 'P', 2, '+', 'Stanziamenti di competenza e residui al netto dei relativi FPV (Macroaggregati 1.3 "Acquisto di beni e servizi" + 2.2 "Investimenti fissi lordi e acquisto di terreni")', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '07.1', 'P', 'Indicatore di smaltimento debiti commerciali', 'Stanziamento di cassa (Macroaggregati 1.3 "Acquisto di beni e servizi" + 2.2 "Investimenti fissi lordi e acquisto di terreni") / '|| 'stanziamenti di competenza e residui al netto dei relativi FPV (Macroaggregati 1.3 "Acquisto di beni e servizi" + 2.2 "Investimenti fissi lordi e acquisto di terreni")', DECODE( nVar1, 0, 0, Imp1/nVar1 )*100, DECODE( nVar2, 0, 0, Imp2/nVar2 )*100, DECODE( nVar3, 0, 0, Imp3/nVar3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '07.1' AND Tipo = 'P' AND NumDett = 1; COMMIT; ------------------------------------------------- 7.2 Indicatore di smaltimento debiti verso altre amministrazioni pubbliche ---------------------------------------------------------- -- Stanziamento di cassa -- [Trasferimenti correnti a Amministrazioni Pubbliche (U.1.04.01.00.000) + -- Trasferimenti di tributi (U.1.05.00.00.000) + -- Fondi perequativi (U.1.06.00.00.000) + -- Contributi agli investimenti a Amministrazioni pubbliche (U.2.03.01.00.000) + -- Altri trasferimenti in conto capitale (U.2.04.01.00.000 + U.2.04.11.00.000 + U.2.04.16.00.000 + U.2.04.21.00.000)] SELECT NVL( SUM( ImpCassa ), 0 ) INTO nVar1 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser AND App = 'S' AND FlFondoPlur <> 'S' AND ( CodEsteso like 'U.1.04.01.%' OR CodEsteso like 'U.1.05.%' OR CodEsteso like 'U.1.06.%' OR CodEsteso like 'U.2.03.01%' OR CodEsteso like 'U.2.04.01.%' OR CodEsteso like 'U.2.04.11.%' OR CodEsteso like 'U.2.04.16.%' OR CodEsteso like 'U.2.04.21.%' ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '07.2', 'P', 1, '+', 'Stanziamento di cassa [Trasferimenti correnti a Amministrazioni Pubbliche (U.1.04.01.00.000) + Trasferimenti di tributi (U.1.05.00.00.000) + '|| 'Fondi perequativi (U.1.06.00.00.000) + Contributi agli investimenti a Amministrazioni pubbliche (U.2.03.01.00.000) + '|| 'Altri trasferimenti in conto capitale (U.2.04.01.00.000 + U.2.04.11.00.000 + U.2.04.16.00.000 + U.2.04.21.00.000)]', '', nVar1, 0, 0, 0, lTimeStamp ); -- stanziamenti di competenza e residui, al netto dei relativi FPV, -- dei [Trasferimenti correnti a Amministrazioni Pubbliche (U.1.04.01.00.000) + -- Trasferimenti di tributi (U.1.05.00.00.000) + Fondi perequativi (U.1.06.00.00.000) + -- Contributi agli investimenti a Amministrazioni pubbliche (U.2.03.01.00.000) + -- Altri trasferimenti in conto capitale (U.2.04.01.00.000 + U.2.04.11.00.000 + U.2.04.16.00.000 + U.2.04.21.00.000)] SELECT NVL( SUM( StanzIni ), 0 ) INTO nVar2 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser AND App = 'S' AND FlFondoPlur <> 'S' AND ( CodEsteso like 'U.1.04.01.%' OR CodEsteso like 'U.1.05.%' OR CodEsteso like 'U.1.06.%' OR CodEsteso like 'U.2.03.01%' OR CodEsteso like 'U.2.04.01.%' OR CodEsteso like 'U.2.04.11.%' OR CodEsteso like 'U.2.04.16.%' OR CodEsteso like 'U.2.04.21.%' ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '07.2', 'P', 2, '+', 'Stanziamento di competenza al netto dei relativi FPV [Trasferimenti correnti a Amm. Pub. (U.1.04.01.00.000) + Trasferimenti di tributi (U.1.05.00.00.000) + '|| 'Fondi perequativi (U.1.06.00.00.000) + Contributi agli investimenti a Amm. pubb. (U.2.03.01.00.000) + '|| 'Altri trasferimenti in conto capitale (U.2.04.01.00.000 + U.2.04.11.00.000 + U.2.04.16.00.000 + U.2.04.21.00.000)]', '', nVar2, 0, 0, 0, lTimeStamp ); SELECT SUM( NVL( CFImpegni.ImpIni, 0 ) ) - NVL( SUM( pkViewForm.fnResTotDettMandPag( 2, CFImpegni.IdImp, NULL, '01/01/'||lEser ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, lEser ) ), 0 ) INTO nVar3 FROM vwFRMCFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser < lEser AND CFImpegni.IdCapitolo = vwFRMCFCapitoliPEG.IdCapitolo AND vwFRMCFCapitoliPEG.UEB118 IS NOT NULL AND App = 'S' AND FlFondoPlur <> 'S' AND ( CodEsteso like 'U.1.04.01.%' OR CodEsteso like 'U.1.05.%' OR CodEsteso like 'U.1.06.%' OR CodEsteso like 'U.2.03.01%' OR CodEsteso like 'U.2.04.01.%' OR CodEsteso like 'U.2.04.11.%' OR CodEsteso like 'U.2.04.16.%' OR CodEsteso like 'U.2.04.21.%' ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '07.2', 'P', 3, '+', 'Residui, [Trasferimenti correnti a Amm. Pub. (U.1.04.01.00.000) + Trasferimenti di tributi (U.1.05.00.00.000) + '|| 'Fondi perequativi (U.1.06.00.00.000) + Contributi agli investimenti a Amm. Pub. (U.2.03.01.00.000) + '|| 'Altri trasferimenti in conto capitale (U.2.04.01.00.000 + U.2.04.11.00.000 + U.2.04.16.00.000 + U.2.04.21.00.000)]', '', nVar3, 0, 0, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '07.2', 'P', 'Indicatore di smaltimento debiti verso altre amministrazioni pubbliche', 'Stanziamento di cassa [Trasferimenti correnti a Amm. Pub. (U.1.04.01.00.000) + Trasferimenti di tributi (U.1.05.00.00.000) + '|| 'Fondi perequativi (U.1.06.00.00.000) + Contributi agli investimenti a Amm. Pub. (U.2.03.01.00.000) + '|| 'Altri trasferimenti in conto capitale (U.2.04.01.00.000 + U.2.04.11.00.000 + U.2.04.16.00.000 + U.2.04.21.00.000)] / '|| 'stanziamenti di competenza e residui, al netto dei relativi FPV, dei [Trasferimenti correnti a Amm. Pub. (U.1.04.01.00.000) + '|| 'Trasferimenti di tributi (U.1.05.00.00.000) + Fondi perequativi (U.1.06.00.00.000) + Contributi agli investimenti a Amm. Pub. (U.2.03.01.00.000) + '|| 'Altri trasferimenti in conto capitale (U.2.04.01.00.000 + U.2.04.11.00.000 + U.2.04.16.00.000 + U.2.04.21.00.000)]', (nVar1/(nVar2+nVar3))*100, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 8 Debiti finanziari ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '08', 'P', 'Debiti finanziari', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 8.1 Incidenza estinzioni debiti finanziari ---------------------------------------------------------- -- L'indicatore è elaborato a partire dal 2018, INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '08.1', 'P', 'Incidenza estinzioni debiti finanziari', '(Totale competenza Titolo 4 della spesa) / Debito da finanziamento al 31/12 dell''esercizio precedente', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 8.2 Sostenibilità debiti finanziari ---------------------------------------------------------- SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'S' AND SUBSTR(UEB118,5) = '107'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '08.2', 'P', 1, '+', '1.7 "Interessi passivi"', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); FOR Anno In 0..2 LOOP SELECT NVL( SUM( StanzIni ), 0 ) INTO nVar1 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser+Anno AND App = 'S' AND ( CodEsteso like 'U.1.07.06.02.%' OR CodEsteso like 'U.1.07.06.04.%' ); IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '08.2', 'P', 2, '-', '"Interessi di mora" (U.1.07.06.02.000) e "Interessi per anticipazioni prestiti" (U.1.07.06.04.000)]', '', nVar1, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar1 WHERE Eser = lEser AND Cod = '08.2' AND NumDett = 2 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar1 WHERE Eser = lEser AND Cod = '08.2' AND NumDett = 2 AND Tipo = 'P'; END IF; END lOOP; SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'S' AND SUBSTR(UEB118,5,1) = '4'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '08.2', 'P', 3, '+', 'Titolo 4 della spesa', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'E' AND SUBSTR(UEB118,1,5) = '40206'; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '08.2', 'P', 4, '-', '[Entrate categoria 4.02.06.00.000 "Contributi agli investimenti direttamente destinati al rimborso dei prestiti da amministrazioni pubbliche"', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'E' AND SUBSTR(UEB118,1,5) in ( '40301', '40304' ); INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '08.2', 'P', 5, '+', '"Trasferimenti in conto capitale per assunzione di debiti dell''amministrazione da parte di amministrazioni pubbliche" (E.4.03.01.00.000) + '|| '"Trasferimenti in conto capitale da parte di amministrazioni pubbliche per cancellazione di debiti dell''amministrazione" (E.4.03.04.00.000)]', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'E' AND SUBSTR(UEB118,1,1) BETWEEN 1 AND 3; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '08.2', 'P', 6, '/', 'Stanziamenti competenza titoli 1, 2 e 3 delle Entrate', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '08.2', 'P', 'Sostenibilità debiti finanziari', 'Stanziamenti di competenza [1.7 "Interessi passivi" - "Interessi di mora" (U.1.07.06.02.000) - "Interessi per anticipazioni prestiti" (U.1.07.06.04.000)] + '|| 'Titolo 4 della spesa - [Entrate categoria 4.02.06.00.000 "Contributi agli investimenti direttamente destinati al rimborso dei prestiti da amministrazioni pubbliche" + '|| '"Trasferimenti in conto capitale per assunzione di debiti dell''amministrazione da parte di amministrazioni pubbliche" (E.4.03.01.00.000) + '|| '"Trasferimenti in conto capitale da parte di amministrazioni pubbliche per cancellazione di debiti dell''amministrazione" (E.4.03.04.00.000)] '|| '/ Stanziamenti competenza titoli 1, 2 e 3 delle entrate', DECODE( nVar1, 0, 0, SUM( segno||Imp1 )/nVar1 )*100, DECODE( nVar1, 0, 0, SUM( segno||Imp2 )/nVar1 )*100, DECODE( nVar1, 0, 0, SUM( segno||Imp3 )/nVar1 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '08.2' AND Tipo = 'P' AND NumDett <= 5; COMMIT; ------------------------------------------------- 8.3 Variazione procapite del livello di indebitamento dell'amministrazione ---------------------------------------------------------- -- L'indicatore è elaborato a partire dal 2018, INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '08.3', 'P', 'Variazione procapite del livello di indebitamento dell''amministrazione', '(Debito da finanziamento al 31/12 dell''esercizio precedente (2) / debito previsto al 31/12 dell''esercizio corrente) / '|| 'popolazione residente (al 1° gennaio dell''esercizio di riferimento o, se non disponibile, al 1° gennaio dell''ultimo anno disponibile)', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 9 Composizione avanzo di amministrazione presunto dell'esercizio precedente ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '09', 'P', 'Composizione avanzo di amministrazione presunto dell''esercizio precedente', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 9.1 Incidenza quota libera di parte corrente nell'avanzo presunto ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '09.1', 'P', 'Incidenza quota libera di parte corrente nell''avanzo presunto', 'Quota libera di parte corrente dell''avanzo presunto / Avanzo di amministrazione presunto', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 9.2 Incidenza quota libera in c/capitale nell'avanzo presunto ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '09.2', 'P', 'Incidenza quota libera in c/capitale nell''avanzo presunto', 'Quota libera in conto capitale dell''avanzo presunto / Avanzo di amministrazione presunto', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 9.3 Incidenza quota accantonata nell'avanzo presuntoo ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '09.3', 'P', 'Incidenza quota accantonata nell''avanzo presunto', 'Quota accantonata dell''avanzo presunto / Avanzo di amministrazione presunto', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 9.4 Incidenza quota vincolata nell'avanzo presunto ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '09.4', 'P', 'Incidenza quota vincolata nell''avanzo presunto', 'Quota vincolata dell''avanzo presunto / Avanzo di amministrazione presunto', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 10 Disavanzo di amministrazione presunto dell'esercizio precedente ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '10', 'P', 'Disavanzo di amministrazione presunto dell''esercizio precedente', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 10.1 Quota disavanzo che si prevede di ripianare nell'esercizio ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '10.1', 'P', 'Quota disavanzo che si prevede di ripianare nell''esercizio', 'Disavanzo iscritto in spesa del bilancio di previsione / Totale disavanzo di amministrazione di cui alla lettera E dell''allegato riguardante il risultato di amministrazione presunto', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 10.2 Sostenibilità patrimoniale del disavanzo presunto ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '10.2', 'P', 'Sostenibilità patrimoniale del disavanzo presunto', 'Totale disavanzo di amministrazione di cui alla lettera E dell''allegato riguardante il risultato di amministrazione presunto (3) / Patrimonio netto', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 10.3 Sostenibilità disavanzo a carico dell'esercizio ---------------------------------------------------------- SELECT ImpPrev, ImpPrevPrev1, ImpPrevPrev2 INTO nVar1, nVar2, nVar3 FROM VWPRNAvDisav118 WHERE FlAvDisav = 'D' AND Eser = lEser; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '10.3', 'P', 1, '+', 'Disavanzo iscritto in spesa del bilancio di previsione', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '10.3', 'P', 'Sostenibilità disavanzo a carico dell''esercizio', 'Disavanzo iscritto in spesa del bilancio di previsione / Competenza dei titoli 1, 2 e 3 delle entrate', DECODE( Imp1, 0, 0, nVar1/Imp1 )*100, DECODE( Imp2, 0, 0, nVar2/Imp2 )*100, DECODE( Imp3, 0, 0, nVar3/Imp3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '10.3' AND Tipo = 'P' AND NumDett = 2; COMMIT; ------------------------------------------------- 11 Fondo pluriennale vincolato ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '11', 'P', 'Fondo pluriennale vincolato', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 11.1 Utilizzo del FPV ---------------------------------------------------------- SELECT SUM(fplurv), SUM(fplurv1), SUM(fplurv2) INTO nVar1, nVar2, nVar3 FROM vwprnfpvbile WHERE Tit118 IN (1,2) AND Eser = lEser; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '11.1', 'P', 1, '+', 'Fondo pluriennale vincolato corrente e capitale iscritto in entrata del bilancio', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); FOR Anno In 0..2 LOOP SELECT NVL( SUM( StanzIni ), 0 ) INTO nVar4 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND FLCopFPlur = 'S' AND FlFondoPlur = 'S'; IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '11.1', 'P', 2, '-', 'Quota del fondo pluriennale vincolato non destinata ad essere utilizzata nel corso dell''esercizio e rinviata agli esercizi successivi', '', nVar4, 0, 0, 0, lTimeStamp ); ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar4 WHERE Eser = lEser AND Cod = '11.1' AND NumDett = 2 AND Tipo = 'P'; ELSE UPDATE CFIndSintDett SET Imp3 = nVar4 WHERE Eser = lEser AND Cod = '11.1' AND NumDett = 2 AND Tipo = 'P'; END IF; END lOOP; INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '11.1', 'P', 'Utilizzo del FPV', '(Fondo pluriennale vincolato corrente e capitale iscritto in entrata del bilancio - '|| 'Quota del fondo pluriennale vincolato non destinata ad essere utilizzata nel corso dell''esercizio e rinviata agli esercizi successivi) '|| '/ Fondo pluriennale vincolato corrente e capitale iscritto in entrata nel bilancio', DECODE( nVar1, 0, 0, (nVar1-Imp1)/nVar1 )*100, DECODE( nVar2, 0, 0, (nVar2-Imp2)/nVar2 )*100, DECODE( nVar3, 0, 0, (nVar3-Imp3)/nVar3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '11.1' AND Tipo = 'P' AND NumDett = 2; COMMIT; ------------------------------------------------- 12 Partite di giro e conto terzi ---------------------------------------------------------- INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '12', 'P', 'Partite di giro e conto terzi', '', 0, 0, 0, 0, lTimeStamp ); COMMIT; ------------------------------------------------- 12.1 Incidenza partite di giro e conto terzi in entrata ---------------------------------------------------------- SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'E' AND SUBSTR(UEB118,1,1) = 9; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '12.1', 'P', 1, '+', 'Totale stanziamenti di competenza delle Entrate per conto terzi e partite di giro', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); FOR Anno In 0..2 LOOP SELECT NVL( SUM( StanzIni ), 0 ) INTO nVar4 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND App = 'E' AND CodEsteso LIKE 'E.9.01.99.06.%'; IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '12.1', 'P', 2, '-', 'Entrate derivanti dalla gestione degli incassi vincolati degli enti locali (E.9.01.99.06.000)', '', nVar4, 0, 0, 0, lTimeStamp ); nVar1 := nVar1 - nVar4; ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar4 WHERE Eser = lEser AND Cod = '12.1' AND NumDett = 2 AND Tipo = 'P'; nVar2 := nVar2 - nVar4; ELSE UPDATE CFIndSintDett SET Imp3 = nVar4 WHERE Eser = lEser AND Cod = '12.1' AND NumDett = 2 AND Tipo = 'P'; nVar3 := nVar3 - nVar4; END IF; END lOOP; INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '12.1', 'P', 'Incidenza partite di giro e conto terzi in entrata', 'Totale stanziamenti di competenza per Entrate per conto terzi e partite di giro (al netto delle operazioni riguardanti la gestione della cassa vincolata) / Totale stanziamenti primi tre titoli delle entrate', DECODE( Imp1, 0, 0, nVar1/Imp1 )*100, DECODE( Imp2, 0, 0, nVar2/Imp2 )*100, DECODE( Imp3, 0, 0, nVar3/Imp3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '12.1' AND Tipo = 'P' AND NumDett = 3; COMMIT; ------------------------------------------------- 12.2 Incidenza partite di giro e conto terzi in uscita ---------------------------------------------------------- SELECT SUM(prev1), SUM(prev2), SUM(prev3) INTO nVar1, nVar2, nVar3 FROM CFBilPre118 WHERE Eser = lEser AND NumRiga = 1 AND App = 'S' AND SUBSTR(UEB118,5,1) = 7; INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '12.2', 'P', 1, '+', 'Totale stanziamenti di competenza per le Uscite per conto terzi e partite di giro', '', nVar1, nVar2, nVar3, 0, lTimeStamp ); FOR Anno In 0..2 LOOP SELECT NVL( SUM( StanzIni ), 0 ) INTO nVar4 FROM vwFRMCFCapitoliPEG WHERE Eser = lEser + Anno AND App = 'S' AND CodEsteso LIKE 'U.7.01.99.06%'; IF Anno = 0 THEN INSERT INTO CFIndSintDett ( Eser, Cod, Tipo, NumDett, Segno, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) VALUES ( lEser, '12.2', 'P', 2, '-', 'Uscite derivanti dalla gestione degli incassi vincolati degli enti locali (U.7.01.99.06.000)', '', nVar4, 0, 0, 0, lTimeStamp ); nVar1 := nVar1 - nVar4; ELSIF Anno = 1 THEN UPDATE CFIndSintDett SET Imp2 = nVar4 WHERE Eser = lEser AND Cod = '12.2' AND NumDett = 2 AND Tipo = 'P'; nVar2 := nVar2 - nVar4; ELSE UPDATE CFIndSintDett SET Imp3 = nVar4 WHERE Eser = lEser AND Cod = '12.2' AND NumDett = 2 AND Tipo = 'P'; nVar3 := nVar3 - nVar4; END IF; END lOOP; INSERT INTO CFIndSint ( Eser, Cod, Tipo, Des, Des2, Imp1, Imp2, Imp3, CodSes, Tmslock ) SELECT lEser, '12.2', 'P', 'Incidenza partite di giro e conto terzi in uscita', 'Totale stanziamenti di competenza per Uscite per conto terzi e partite di giro (al netto delle operazioni riguardanti la gestione della cassa vincolata) / Totale stanziamenti di competenza del titolo I della spesa', DECODE( Imp1, 0, 0, nVar1/Imp1 )*100, DECODE( Imp2, 0, 0, nVar2/Imp2 )*100, DECODE( Imp3, 0, 0, nVar3/Imp3 )*100, 0, lTimeStamp FROM CFIndSintDett WHERE Eser = lEser AND Cod = '12.2' AND Tipo = 'P' AND NumDett = 3; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFIndSintBil', 'I', 'Generazione degli Indicatori sintetici di Bilancio', lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFIndSintBil', 'I', 'Errore nella Generazione degli Indicatori sintetici di Bilancio', lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContStampa.fnGeneraCFIndSintBil', SQLCODE, ERRDIAG ); COMMIT; END fnGeneraCFIndSintBil; FUNCTION fnCFIndSintUpd ( lEser IN pkType.tyStringa%type, lTipo IN pkType.tyStringa%type, lCod IN pkType.tyStringa%type, lImp1 IN pkType.tyStringa%type, lImp2 IN pkType.tyStringa%type, lImp3 IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFIndSint.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); sOpzLang CFOPZIONI.opzione%type; rowTab CFIndSint%rowtype; BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione /* SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; */ UPDATE CFIndSint SET Imp1 = lImp1, Imp2 = lImp2, Imp3 = lImp3 WHERE Eser = lEser AND Tipo = lTipo AND Cod = lCod AND CodSes = lCodSes; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilPre118FDelRLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( 'pkContStampa.fnCFBilPre118FDelUpd', -212, ERRDIAG ); END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFIndSint' ) AND DesPK = UPPER( lEser||CHR(0167)||lTipo||lCod ); COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFIndSint', 'U', 'Modifca importi Indicatori Sintetici '||lTipo, lEser, lCod, lTipo, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFIndSint', 'U', 'Errore nella Modifca importi Indicatori Sintetici '||lTipo, lEser||' '||lTipo||' '||lCod, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContStampa.fnCFIndSintUpd', SQLCODE, ERRDIAG ); COMMIT; END fnCFIndSintUpd; FUNCTION fnCFIndSintRLkDph ( lEser IN pkType.tyStringa%type, lTipo IN pkType.tyStringa%type, lCod IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFIndSint.TmsLock%type; TmpCodSes CFIndSint.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFIndSint', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( 'pkContStampa.fnCFIndSintRLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFIndSint WHERE Eser = lEser AND Tipo = lTipo AND Cod = lCod FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN UPDATE CFIndSint SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND Tipo = lTipo AND Cod = lCod; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFIndSint' ) AND DesPk = UPPER( lEser||CHR(0167)||lTipo||lCod ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFIndSint' ), UPPER( lEser||CHR(0167)||lTipo||lCod ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFIndSint' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lTipo||lCod AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( 'pkContStampa.fnCFIndSintRLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContStampa.fnCFIndSintRLkDph', SQLCODE, ERRDIAG ); END fnCFIndSintRLkDph; FUNCTION fnCFIndSintRls ( lEser IN pkType.tyStringa%type, -- CFIndSint lTipo IN pkType.tyStringa%type, lCod IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, -- CFIndSint ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFIndSint SET CodSes = 0 WHERE Eser = lEser AND Tipo = lTipo AND Cod = lCod AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFIndSint' ) AND DesPk = UPPER( lEser||CHR(0167)||lTipo||lCod ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContStampa.fnCFIndSintRls', SQLCODE, ERRDIAG ); END fnCFIndSintRls; /************************************************************************** * Funzione per la Generazione degli Indicatori Analitici di Bilancio * **************************************************************************/ -- Autore: Torelli FUNCTION fnGeneraCFIndAnaE ( lEser IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS lTimeStamp CFIndAna.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nRet number(9); nVar1 NUMBER(20,4); nVar2 NUMBER(20,4); nVar3 NUMBER(20,4); nVar4 NUMBER(20,4); BEGIN DELETE CFIndAna WHERE Eser = lEser AND Tipo = 'P' AND App = 'E'; -- calcoliamo il totale della previsione per i tre anni SELECT SUM(Prev1), SUM(Prev2), SUM(Prev3) INTO nVar1, nVar2, nVar3 FROM vwprnCFBilPree118 WHERE Eser = lEser AND NumRiga = 1; INSERT INTO CFIndAna ( Eser, App, Cod, Tipo, Ord, Des, Imp1, Imp2, Imp3, Imp4, Imp5, Imp6, CodSes, Tmslock ) SELECT lEser, 'E', Codice, 'P', Codice, DesTipolog, DECODE( nVar1, 0, 0, (Prev1/nVar1)*100 ), DECODE( nVar2, 0, 0, (Prev2/nVar2)*100 ), DECODE( nVar3, 0, 0, (Prev3/nVar3)*100 ), 0, (Prev1 + ResPresunti), 0, 0, lTimeStamp FROM vwprnCFBilPree118 WHERE Eser = lEser AND NumRiga = 1; -- calcoliamo la media del totale dell'Accertato nei 2 anni addietro SELECT ( NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( IdAcc, lEser ) ), 0 ) ) / 2 INTO nVar4 FROM CFAccertamenti WHERE Eser BETWEEN lEser-2 AND lEser-1; UPDATE CFIndAna SET Imp4 = ( SELECT ( ( ( NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( IdAcc, lEser ) ), 0 ) ) / 2 ) / DECODE(nVar4,0,1,nVar4) ) *100 FROM VWFRMCFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser BETWEEN lEser-2 AND lEser-1 AND CFAccertamenti.IdCapitolo = VWFRMCFCapitoliPEG.IdCapitolo AND CodStr1||CodStr2 = Cod ), Imp6 = ( SELECT ( NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( IdAcc, lEser ) ), 0 ) ) / 2 FROM VWFRMCFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser BETWEEN lEser-2 AND lEser-1 AND CFAccertamenti.IdCapitolo = VWFRMCFCapitoliPEG.IdCapitolo AND CodStr1||CodStr2 = Cod ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'E'; UPDATE CFIndAna SET Imp5 = ( SELECT (Prev1/Imp5)*100 FROM vwprnCFBilPree118 WHERE Eser = lEser AND NumRiga = 4 AND Codice = Cod ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'E' AND Imp5 > 0; UPDATE CFIndAna SET Imp6 = ( SELECT ( ( NVL( SUM( CFDettReversali.Impini ), 0 ) / 2 ) / Imp6 ) *100 FROM VWFRMCFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser BETWEEN lEser-2 AND lEser-1 AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = VWFRMCFCapitoliPEG.IdCapitolo AND CodStr1||CodStr2 = Cod ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'E' AND Imp6 > 0; -- inseriamo i totali per titolo INSERT INTO CFIndAna ( Eser, App, Cod, Tipo, Ord, Des, Imp1, Imp2, Imp3, Imp4, Imp5, Imp6, CodSes, Tmslock ) SELECT lEser, 'E', CodTit||'0000', 'P', CodTit||'0999', 'Totale TITOLO '||CodTit||': '||MAX(DesTit), DECODE( nVar1, 0, 0, (SUM(Prev1)/nVar1)*100 ), DECODE( nVar2, 0, 0, (SUM(Prev2)/nVar2)*100 ), DECODE( nVar3, 0, 0, (SUM(Prev3)/nVar3)*100 ), 0, (SUM(Prev1) + SUM(ResPresunti)), 0, 0, lTimeStamp FROM vwprnCFBilPree118 WHERE Eser = lEser AND NumRiga = 1 GROUP BY CodTit; UPDATE CFIndAna SET Imp4 = ( SELECT ( ( ( NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( IdAcc, lEser ) ), 0 ) ) / 2 ) / DECODE(nVar4,0,1,nVar4) ) *100 FROM VWFRMCFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser BETWEEN lEser-2 AND lEser-1 AND CFAccertamenti.IdCapitolo = VWFRMCFCapitoliPEG.IdCapitolo AND CodStr1 = SUBSTR( Cod, 1, 1 ) ), Imp6 = ( SELECT ( NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( IdAcc, lEser ) ), 0 ) ) / 2 FROM VWFRMCFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser BETWEEN lEser-2 AND lEser-1 AND CFAccertamenti.IdCapitolo = VWFRMCFCapitoliPEG.IdCapitolo AND CodStr1 = SUBSTR( Cod, 1, 1 ) ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'E' AND SUBSTR( Cod, 2 ) = 0; UPDATE CFIndAna SET Imp5 = ( SELECT (SUM(Prev1)/Imp5)*100 FROM vwprnCFBilPree118 WHERE Eser = lEser AND NumRiga = 4 AND CodTit = SUBSTR( Cod, 1, 1 ) ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'E' AND Imp5 > 0 AND SUBSTR( Cod, 2 ) = 0; UPDATE CFIndAna SET Imp6 = ( SELECT ( ( NVL( SUM( CFDettReversali.Impini ), 0 ) / 2 ) / Imp6 ) *100 FROM VWFRMCFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser BETWEEN lEser-2 AND lEser-1 AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = VWFRMCFCapitoliPEG.IdCapitolo AND CodStr1 = SUBSTR( Cod, 1, 1 ) ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'E' AND Imp6 > 0 AND SUBSTR( Cod, 2 ) = 0; -- inseriamo il TOTALE GENERALE INSERT INTO CFIndAna ( Eser, App, Cod, Tipo, Ord, Des, Imp1, Imp2, Imp3, Imp4, Imp5, Imp6, CodSes, Tmslock ) SELECT lEser, 'E', '99999', 'P', '99999', 'TOTALE ENTRATE', 100, 100, 100, 100, (SUM(Prev1) + SUM(ResPresunti)), 0, 0, lTimeStamp FROM vwprnCFBilPreE118 WHERE Eser = lEser AND NumRiga = 1; UPDATE CFIndAna SET Imp6 = ( SELECT ( NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( IdAcc, lEser ) ), 0 ) ) / 2 FROM VWFRMCFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser BETWEEN lEser-2 AND lEser-1 AND CFAccertamenti.IdCapitolo = VWFRMCFCapitoliPEG.IdCapitolo ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'E' AND Cod = 99999; UPDATE CFIndAna SET Imp5 = ( SELECT (SUM(Prev1)/Imp5)*100 FROM vwprnCFBilPree118 WHERE Eser = lEser AND NumRiga = 4 ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'E' AND Imp5 > 0 AND Cod = 99999; UPDATE CFIndAna SET Imp6 = ( SELECT ( ( NVL( SUM( CFDettReversali.Impini ), 0 ) / 2 ) / Imp6 ) *100 FROM VWFRMCFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser BETWEEN lEser-2 AND lEser-1 AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = VWFRMCFCapitoliPEG.IdCapitolo ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'E' AND Imp6 > 0 AND Cod = 99999; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFIndAna', 'I', 'Generazione degli Indicatori analitici di Bilancio Entrata', lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFIndAna', 'I', 'Errore nella Generazione degli Indicatori analitici di Bilancio Entrata', lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContStampa.fnGeneraCFIndAnaE', SQLCODE, ERRDIAG ); COMMIT; END fnGeneraCFIndAnaE; FUNCTION fnGeneraCFIndAnaS ( lEser IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS lTimeStamp CFIndAna.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nRet number(9); nVar1 NUMBER(20,4); nVar2 NUMBER(20,4); nVar3 NUMBER(20,4); nVar4 NUMBER(20,4); nVar5 NUMBER(20,4); BEGIN DELETE CFIndAna WHERE Eser = lEser AND Tipo = 'P' AND App = 'S'; -- calcoliamo il totale della previsione per i tre anni del bilacio SELECT SUM(Prev1), SUM(Prev2), SUM(Prev3) INTO nVar1, nVar2, nVar3 FROM VWPRNCFBilPreS118 WHERE Eser = lEser AND NumRiga = 1; INSERT INTO CFIndAna ( Eser, App, Cod, Tipo, Ord, Des, Imp1, Imp2, Imp3, Imp4, Imp5, Imp6, Imp7, CodSes, Tmslock ) SELECT lEser, 'S', CodMisProgrStr, 'P', CodMisProgrStr, MAX(DesProgr), DECODE( nVar1, 0, 0, (SUM(Prev1)/nVar1)*100 ), 0, 0, DECODE( nVar2, 0, 0, (SUM(Prev2)/nVar2)*100 ), 0, DECODE( nVar3, 0, 0, (SUM(Prev3)/nVar3)*100 ), 0, 0, lTimeStamp FROM VWPRNCFBilPreS118 WHERE Eser = lEser AND NumRiga = 1 GROUP BY CodMisProgrStr; -- calcoliamo il totale della previsione FPV per i tre anni del bilacio SELECT SUM(Prev1), SUM(Prev2), SUM(Prev3) INTO nVar1, nVar2, nVar3 FROM vwprnCFBilPreS118 WHERE Eser = lEser AND NumRiga = 3; -- FPV UPDATE CFIndAna SET Imp2 = ( SELECT DECODE( nVar1, 0, 0, (SUM(Prev1)/nVar1)*100 ) FROM VWPRNCFBilPreS118 WHERE Eser = CFIndAna.Eser AND NumRiga = 3 AND CodMisProgrStr = Cod ), Imp5 = ( SELECT DECODE( nVar2, 0, 0, (SUM(Prev2)/nVar2)*100 ) FROM VWPRNCFBilPreS118 WHERE Eser = CFIndAna.Eser AND NumRiga = 3 AND CodMisProgrStr = Cod ), Imp7 = ( SELECT DECODE( nVar3, 0, 0, (SUM(Prev3)/nVar3)*100 ) FROM VWPRNCFBilPreS118 WHERE Eser = CFIndAna.Eser AND NumRiga = 3 AND CodMisProgrStr = Cod ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'S'; -- colonna 3: inseriamo prima il denominatore e poi facciamo la divisione UPDATE CFIndAna SET Imp3 = ( SELECT SUM( DECODE( numriga, 1, prev1, -prev1) + respresunti ) FROM VWPRNCFBilPreS118 WHERE Eser = CFIndAna.Eser AND NumRiga IN ( 1,3) AND CodMisProgrStr = Cod ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'S'; UPDATE CFIndAna SET Imp3 = ( SELECT DECODE( Imp3, 0, 0, (SUM(prev1)/Imp3)*100 ) FROM VWPRNCFBilPreS118 WHERE Eser = CFIndAna.Eser AND NumRiga = 4 AND -- cassa CodMisProgrStr = Cod ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'S'; -- l'Impegnato totale nei 2 anni addietro SELECT NVL( SUM( CFImpegni.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, lEser ) ), 0 ) INTO nVar4 FROM CFImpegni WHERE Eser BETWEEN lEser-2 AND lEser-1; -- FPV totale spesa nei 2 anni addietro SELECT NVL( SUM(Stanzini), 0 ) INTO nVar5 FROM vwFRMCFCapitoliPEG WHERE App = 'S' AND FlFondoPlur = 'S' AND Eser BETWEEN lEser-2 AND lEser-1; FOR rec IN ( SELECT Cod FROM CFIndAna WHERE Eser = lEser AND Tipo = 'P' AND App = 'S' ) LOOP -- l'Impegnato nei 2 anni addietro per Cod SELECT NVL( SUM( CFImpegni.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, lEser ) ), 0 ) INTO nVar1 FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser BETWEEN lEser-2 AND lEser-1 AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,4) = rec.Cod; -- FPV spesa nei 2 anni addietro per Cod SELECT NVL( SUM(Stanzini), 0 ) INTO nVar2 FROM vwFRMCFCapitoliPEG WHERE App = 'S' AND FlFondoPlur = 'S' AND Eser BETWEEN lEser-2 AND lEser-1 AND SUBSTR(UEB118,1,4) = rec.Cod; -- se il denominatore è > 0 update IF ( (nVar4 + nVar5)/2 ) > 0 THEN UPDATE CFIndAna SET Imp8 = ( ( (nVar1 + nVar2)/2 ) / ( (nVar4 + nVar5)/2 ) )*100 WHERE Eser = lEser AND Tipo = 'P' AND App = 'S' AND Cod = rec.Cod; END IF; -- se il denominatore è > 0 update IF ( nVar5/2 ) > 0 THEN UPDATE CFIndAna SET Imp9 = ( ( nVar2/2 ) / ( nVar5/2 ) )*100 WHERE Eser = lEser AND Tipo = 'P' AND App = 'S' AND Cod = rec.Cod; END IF; END LOOP; FOR rec IN ( SELECT Cod FROM CFIndAna WHERE Eser = lEser AND Tipo = 'P' AND App = 'S' ) LOOP -- MEDIA pagamenti Comp e Res nei 2 anni addietro SELECT NVL( SUM(Impini), 0 ) / 2 INTO nVar1 FROM VWFRMCFMand WHERE Eser BETWEEN lEser-2 AND lEser-1 AND DtaAnn IS NULL AND SUBSTR(UEB118,1,4) = rec.Cod; -- IMPEGNATO nei due anni SELECT NVL( SUM( CFImpegni.ImpIni ), 0 ) INTO nVar2 FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser BETWEEN lEser-2 AND lEser-1 AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,4) = rec.Cod; -- residui all'eser - 2 SELECT NVL( SUM( CFImpegni.ImpIni ), 0 ) - NVL( SUM( pkViewForm.fnResTotDettMandPag( 1, CFImpegni.IdImp, NULL, '01/01/'||(lEser-2) ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, (lEser-2) ) ), 0 ) INTO nVar3 FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser < (lEser-2) AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,4) = rec.Cod; -- residui all'eser - 1 SELECT NVL( SUM( CFImpegni.ImpIni ), 0 ) - NVL( SUM( pkViewForm.fnResTotDettMandPag( 1, CFImpegni.IdImp, NULL, '01/01/'||(lEser-1) ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, (lEser-1) ) ), 0 ) INTO nVar4 FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser < (lEser-1) AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,4) = rec.Cod; -- se il denominatore è > 0 update IF ( (nVar2 + nVar3 + nVar4)/2 ) > 0 THEN UPDATE CFIndAna SET Imp10 = ( nVar1 / ( (nVar2 + nVar3 + nVar4)/2 ) )*100 WHERE Eser = lEser AND Tipo = 'P' AND App = 'S' AND Cod = rec.Cod; END IF; END LOOP; -- inseriamo i totali per MISSIONE INSERT INTO CFIndAna ( Eser, App, Cod, Tipo, Ord, Des, Imp1, Imp2, Imp4, Imp5, Imp6, Imp7, Imp8, Imp9, CodSes, Tmslock ) SELECT lEser, 'S', SUBSTR(Cod,1,2)||'99', 'P', SUBSTR(Cod,1,2)||'99', 'Totale Missione '||SUBSTR(Cod,1,2)||': '||MAX(CFClassificaz118.Des), SUM(Imp1), SUM(Imp2), SUM(Imp4), SUM(Imp5), SUM(Imp6), SUM(Imp7), SUM(Imp8), SUM(Imp9), 0, lTimeStamp FROM CFIndAna, CFClassificaz118 WHERE Eser = lEser AND CFIndAna.Tipo = 'P' AND CFIndAna.App = 'S' AND CFIndAna.App = CFClassificaz118.App AND CFClassificaz118.Tipo = 'M' AND SUBSTR(Cod,1,2) = Codice GROUP BY SUBSTR(Cod,1,2); -- colonna 3: inseriamo prima il denominatore e poi facciamo la divisione UPDATE CFIndAna SET Imp3 = ( SELECT SUM( DECODE( numriga, 1, prev1, -prev1) + respresunti ) FROM VWPRNCFBilPreS118 WHERE Eser = CFIndAna.Eser AND NumRiga IN ( 1, 3 ) AND CodMisStr = SUBSTR(Cod,1,2) ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'S' AND SUBSTR(Ord,3) = '99'; UPDATE CFIndAna SET Imp3 = ( SELECT DECODE( Imp3, 0, 0, (SUM(prev1)/Imp3)*100 ) FROM VWPRNCFBilPreS118 WHERE Eser = CFIndAna.Eser AND NumRiga = 4 AND -- cassa CodMisStr = SUBSTR(Cod,1,2) ) WHERE Eser = lEser AND Tipo = 'P' AND App = 'S' AND SUBSTR(Ord,3) = '99'; FOR rec IN ( SELECT SUBSTR(Cod,1,2) cod, Ord FROM CFIndAna WHERE Eser = lEser AND Tipo = 'P' AND App = 'S' AND SUBSTR(Ord,3) = '99' ) LOOP -- MEDIA pagamenti Comp e Res nei 2 anni addietro SELECT NVL( SUM(Impini), 0 ) / 2 INTO nVar1 FROM VWFRMCFMand WHERE Eser BETWEEN lEser-2 AND lEser-1 AND DtaAnn IS NULL AND SUBSTR(UEB118,1,2) = rec.Cod; -- IMPEGNATO nei due anni SELECT NVL( SUM( CFImpegni.ImpIni ), 0 ) INTO nVar2 FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser BETWEEN lEser-2 AND lEser-1 AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,2) = rec.Cod; -- residui all'eser - 2 SELECT NVL( SUM( CFImpegni.ImpIni ), 0 ) - NVL( SUM( pkViewForm.fnResTotDettMandPag( 1, CFImpegni.IdImp, NULL, '01/01/'||(lEser-2) ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, (lEser-2) ) ), 0 ) INTO nVar3 FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser < (lEser-2) AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,2) = rec.Cod; -- residui all'eser - 1 SELECT NVL( SUM( CFImpegni.ImpIni ), 0 ) - NVL( SUM( pkViewForm.fnResTotDettMandPag( 1, CFImpegni.IdImp, NULL, '01/01/'||(lEser-1) ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, (lEser-1) ) ), 0 ) INTO nVar4 FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser < (lEser-1) AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,2) = rec.Cod; -- se il denominatore è > 0 update IF ( (nVar2 + nVar3 + nVar4)/2 ) > 0 THEN UPDATE CFIndAna SET Imp10 = ( nVar1 / ( (nVar2 + nVar3 + nVar4)/2 ) )*100 WHERE Eser = lEser AND Tipo = 'P' AND App = 'S' AND Ord = rec.Ord; END IF; END LOOP; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFIndAna', 'I', 'Generazione degli Indicatori analitici di Bilancio Spesa', lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFIndAna', 'I', 'Errore nella Generazione degli Indicatori analitici di Bilancio Spesa', lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContStampa.fnGeneraCFIndAnaS', SQLCODE, ERRDIAG ); COMMIT; END fnGeneraCFIndAnaS; FUNCTION fnGeneraIndBil ( lEser IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS lTimeStamp CFIndAna.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nRet number(9); BEGIN -- Indicatori Sintetici nRet := fnGeneraCFIndSintBil ( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Indicatori Analitici Entrata nRet := fnGeneraCFIndAnaE ( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Indicatori Analitici Spesa nRet := fnGeneraCFIndAnaS ( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContStampa.fnGeneraIndBil', SQLCODE, ERRDIAG ); COMMIT; END fnGeneraIndBil; END pkContStampa; / CREATE OR REPLACE PACKAGE BODY pkContPEG AS /*************************************************************************** * Funzione per il blocco e il rilascio di un singolo capitolo di PEG * ***************************************************************************/ -- Revisione: Torlone M.B. - 20/10/2003 - aggiunta la gestione del lock dei relativi record -- di CFPEGPerCdC, CFPEGPerProgrammi e CFDestUso FUNCTION fnCFCapitoliPEGRLkDph ( lIdCapitolo IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, -- CFCapitoliPEG lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFCapitoliPEG.TmsLock%type; TmpCodSes CFCapitoliPEG.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%type; sApp CFCapitoliPEG.App%type; CURSOR curCFPEGPerCdC IS SELECT CodCdC, CodSes, TmsLock FROM CFPEGPerCdC WHERE IdCapitolo = lIdCapitolo FOR UPDATE OF CodSes NOWAIT; CURSOR curCFPEGPerProgrammi IS SELECT IdProgetto, CodSes, TmsLock FROM CFPEGPerProgrammi WHERE IdCapitolo = lIdCapitolo FOR UPDATE OF CodSes NOWAIT; CURSOR curCFDestUso IS SELECT IdDestUso, CodSes, TmsLock FROM CFDestUso WHERE IdCapitoloE = lIdCapitolo FOR UPDATE OF CodSes NOWAIT; BEGIN lTmsLockOUT := ' '; -- inizializzazione necessaria per Delphi -- controllo se il DB o la Tabella padre sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFCapitoliPEG', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN ROLLBACK; RETURN nRet; ELSIF ( nRet = 0 ) THEN ROLLBACK; -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPeg.fnCFCapitoliPEGRLkDph', -499, ERRDIAG ); END IF; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; -- blocco il record del Capitolo di PEG SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFCapitoliPEG WHERE IdCapitolo = lIdCapitolo FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN UPDATE CFCapitoliPEG SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE IdCapitolo = lIdCapitolo; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFCapitoliPEG' ) AND DesPK = UPPER( lIdCapitolo ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFCapitoliPEG' ), UPPER( lIdCapitolo ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti AND CFSessioni.CodSessione = CFRecLock.CodSessione AND DesTabella = UPPER( 'CFCapitoliPEG' ) AND DesPk = lIdCapitolo; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPeg.fnCFCapitoliPEGRLkDph', -499, ERRDIAG ); END IF; -- blocco i record dello spacchettamento del Capitolo di PEG sui CdC FOR rowCFPEGPerCdC IN curCFPEGPerCdC LOOP bRet := pkUtility.fnFreeRec( lCodSes, rowCFPEGPerCdC.CodSes, NULL, rowCFPEGPerCdC.TmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN UPDATE CFPEGPerCdC SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE IdCapitolo = lIdCapitolo AND CodCdC = rowCFPEGPerCdC.CodCdC; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFPEGPerCdC' ) AND DesPK = UPPER( lIdCapitolo||CHR(0167)||rowCFPEGPerCdC.CodCdC ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFPEGPerCdC' ), UPPER( lIdCapitolo||CHR(0167)||rowCFPEGPerCdC.CodCdC ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti AND CFSessioni.CodSessione = CFRecLock.CodSessione AND DesTabella = UPPER( 'CFPEGPerCdC' ) AND DesPk = lIdCapitolo||CHR(0167)||rowCFPEGPerCdC.CodCdC; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPeg.fnCFCapitoliPEGRLkDph', -499, ERRDIAG ); END IF; END LOOP; -- blocco i record dello spacchettamento del Capitolo di PEG sui Programmi FOR rowCFPEGPerProgrammi IN curCFPEGPerProgrammi LOOP bRet := pkUtility.fnFreeRec( lCodSes, rowCFPEGPerProgrammi.CodSes, NULL, rowCFPEGPerProgrammi.TmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN UPDATE CFPEGPerProgrammi SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE IdCapitolo = lIdCapitolo AND IdProgetto = rowCFPEGPerProgrammi.IdProgetto; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFPEGPerProgrammi' ) AND DesPK = UPPER( lIdCapitolo||CHR(0167)||rowCFPEGPerProgrammi.IdProgetto ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFPEGPerProgrammi' ), UPPER( lIdCapitolo||CHR(0167)||rowCFPEGPerProgrammi.IdProgetto ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti AND CFSessioni.CodSessione = CFRecLock.CodSessione AND DesTabella = UPPER( 'CFPEGPerProgrammi' ) AND DesPk = lIdCapitolo||CHR(0167)||rowCFPEGPerProgrammi.IdProgetto; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPeg.fnCFCapitoliPEGRLkDph', -499, ERRDIAG ); END IF; END LOOP; -- blocco i record delle Destinazioni d'Uso del Capitolo di PEG, se è un Capitolo di Entrata SELECT App INTO sApp FROM CFCapitoliPEG WHERE IdCapitolo = lIdCapitolo; IF ( sApp = 'E' ) THEN FOR rowCFDestUso IN curCFDestUso LOOP bRet := pkUtility.fnFreeRec( lCodSes, rowCFDestUso.CodSes, NULL, rowCFDestUso.TmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN UPDATE CFDestUso SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE IdDestUso = rowCFDestUso.IdDestUso; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFDestUso' ) AND DesPK = UPPER( rowCFDestUso.IdDestUso ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFDestUso' ), UPPER( rowCFDestUso.IdDestUso ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti AND CFSessioni.CodSessione = CFRecLock.CodSessione AND DesTabella = UPPER( 'CFDestUso' ) AND DesPk = rowCFDestUso.IdDestUso; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPeg.fnCFCapitoliPEGRLkDph', -499, ERRDIAG ); END IF; END LOOP; END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPeg.fnCFCapitoliPEGRLkDph', SQLCODE, ERRDIAG ); END fnCFCapitoliPEGRLkDph; FUNCTION fnCFCapitoliPEGRls ( lIdCapitolo IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, -- CFCapitoliPEG ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record del Capitolo di PEG, se ne sono ancora proprietario UPDATE CFCapitoliPEG SET CodSes = 0 WHERE IdCapitolo = lIdCapitolo AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFCapitoliPEG' ) AND DesPK = UPPER( lIdCapitolo ); END IF; -- sblocco i record dello spacchettamento del Capitolo di PEG sui CdC, se ne sono ancora proprietario UPDATE CFPEGPerCdC SET CodSes = 0 WHERE IdCapitolo = lIdCapitolo AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFPEGPerCdC' ) AND DesPK LIKE UPPER( lIdCapitolo||CHR(0167)||'%' ); END IF; -- sblocco i record dello spacchettamento del Capitolo di PEG sui Programmi, se ne sono ancora proprietario UPDATE CFPEGPerProgrammi SET CodSes = 0 WHERE IdCapitolo = lIdCapitolo AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFPEGPerProgrammi' ) AND DesPK LIKE UPPER( lIdCapitolo||CHR(0167)||'%' ); END IF; -- sblocco i record delle Destinazioni d'Uso del Capitolo di PEG, se è un Capitolo di Entrata e se ne sono ancora proprietario UPDATE CFDestUso SET CodSes = 0 WHERE IdCapitoloE = lIdCapitolo AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFDestUso' ) AND DesPK IN ( SELECT IdDestUso FROM CFDestUso WHERE IdCapitoloE = lIdCapitolo ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPeg.fnCFCapitoliPEGRls', SQLCODE, ERRDIAG ); END fnCFCapitoliPEGRls; /************************************************************************** * Funzioni per la decodifica dell'UEB * * (UEB = Unità Elementare di Bilancio) * *************************************************************************** * L'UEB, detto anche codice meccanografico, è un numero di sette cifre * * che viene composto come segue: * * se lApp='E' (Entrata): TCCRRRR dove T=lCodTit, CC=lCodCat, RRRR=lCodRis * * oppure: Tcc0000 se si tratta del titolo delle Entrate * * conto terzi (CFTitoli.ServContoterzi='S'), * * dove cc è proprio il capitolo conto terzi * * se lApp='S' (Spesa) : TFFSSII dove T=lCodTit, FF=lCodCat, SS=lCodSer, * * II=lCodInt * * oppure: T0000cc se si tratta del titolo delle Entrate * * conto terzi (CFTitoli.ServContoterzi='S'), * * dove cc è proprio il capitolo conto terzi. * **************************************************************************/ -- Autore: Lai M. e Torlone M. B. FUNCTION fnDecodificaUEB ( lUEB IN pkType.tyStringa%type, lApp IN pkType.tyStringa%type, lCodTit OUT pkType.tyStringa%type, lCodCat OUT pkType.tyStringa%type, lCodRis OUT pkType.tyStringa%type, lCodSer OUT pkType.tyStringa%type, lCodInt OUT pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS sServContoTerzi CFTitoli.ServContoTerzi%type; BEGIN lCodTit := TO_NUMBER( SUBSTR( lUEB, 1, 1 ) ); -- controllo se si tratta di un Titolo conto terzi SELECT ServContoTerzi INTO sServContoTerzi FROM CFTitoli WHERE App = lApp AND CodTit = lCodTit; IF ( lApp = 'E' ) THEN -- TCCRRRR oppure Tcc0000 lCodCat := TO_NUMBER( SUBSTR( lUEB, 2, 2 ) ); lCodRis := TO_NUMBER( SUBSTR( lUEB, 4, 4 ) ); ELSE -- lApp = 'S': TFFSSII oppure T0000cc lCodCat := TO_NUMBER( SUBSTR( lUEB, 2, 2 ) ); lCodSer := TO_NUMBER( SUBSTR( lUEB, 4, 2 ) ); lCodInt := TO_NUMBER( SUBSTR( lUEB, 6, 2 ) ); END IF; RETURN 1; EXCEPTION WHEN OTHERS THEN RETURN pkUtility.fnError( 'pkContPEG.fnDecodificaUEB', SQLCODE, ERRDIAG ); END fnDecodificaUEB; /************************************************************************** * Funzione per la Conferma del PEG * * (PEG = Piano Esecutivo di Gestione) * *************************************************************************** * La funzione è costituita dai seguenti passi: * * - controllo che l'anno in input sia maggiore dell'anno corrente dei * * dati di configurazione * * - aggiornamento dell'importo stanziato (StanzIni) dei Capitoli di PEG * * allo stesso valore dell'importo proposto (Proposta) * * - utilizzo della tabella CFControlloConfPEG per inserire i record che * * non soddisfano i seguenti controlli: la sommatoria degli importi * * stanziati in CFPEGPerCDC deve coincidere con StanzIni nel record * * corrispondente in CFCapitoliPEG e la sommatoria degli importi * * stanziati in CFPEGPerProgrammi deve coincidere con StanzIni nel * * record corrispondente in CFCapitoliPEG; tali controlli non sono * * bloccanti per l'esito dell'intera operazione * * - aggiornamento della data della conferma del PEG nella CFOpzioni * *************************************************************************** * NB: prima di lanciare questa funzione, deve essere chiamata la funzione * * pkUtilityCont.fnValidOper con Codice Operazione = 2. * **************************************************************************/ -- Autore: Torelli Roberto e Torlone M. B. -- Revisione: M. B. Torlone - 21/03/2002 - aggiornamento dello Stanziato con il massimo -- tra il Proposto e l'impegnato/accertato FUNCTION fnConfPEG ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; curPEG curTypPEG; curContr curTypPEG; nAnno number(4); rowPEG CFCapitoliPEG%rowtype; nImpSta number(16,2); nStanzIni number(16,2); nCont number(9) := 0; nContContr number(9) := 0; nIdContr CFControlloConfPEG.IdControllo%type; lTimeStamp CFControlloConfPEG.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nIdMenuLavoro pkType.tyStringa%type; nNum number(9); nStanzIniE number(16,2); nStanzIniS number(16,2); contCFPEGPerPrg number(9); contCFPEGPerCDC number(9); ReturnErr number(9); nConfermato number(1) := 0; nSommaProp number(16,2); nSommaStan number(16,2); nRet number(9); sDivisa varchar2(2) := CHR(0128) || ' '; nImpAcc CFCapitoliPEG.StanzIni%type; nImportoMax CFCapitoliPEG.StanzIni%type; sDesMenuLavoro VARCHAR2(2000); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%TYPE; BEGIN -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; /* controllo che non sia stata già effettuata una conferma per l'anno richiesto */ IF ( lEser = ( nAnno + 1 ) ) THEN -- è stato richiesto l'anno di previsione SELECT COUNT(*) INTO nContContr FROM CFOpzioni WHERE DesOpzione = 'DTACONFPEGPREV' AND Opzione IS NOT NULL; IF ( nContContr > 0 ) THEN nConfermato := 1; END IF; ELSIF ( lEser = ( nAnno + 2 ) ) THEN -- è stato richiesto il primo anno del pluriennale SELECT COUNT(*) INTO nContContr FROM CFOpzioni WHERE DesOpzione = 'DTACONFPEGPLUR1' AND Opzione IS NOT NULL; IF ( nContContr > 0 ) THEN nConfermato := 1; END IF; ELSIF ( lEser = ( nAnno + 3 ) ) THEN -- è stato richiesto il secondo anno del pluriennale SELECT COUNT(*) INTO nContContr FROM CFOpzioni WHERE DesOpzione = 'DTACONFPEGPLUR2' AND Opzione IS NOT NULL; IF ( nContContr > 0 ) THEN nConfermato := 1; END IF; END IF; /* operazione di conferma del PEG: la eseguo solo se non è stata già effettuata per l'anno richiesto */ IF ( nConfermato = 0 ) THEN -- Correggo in percentuale lo stanziato di CFPEGPerCDC e CFPEGPerProgrammi OPEN curPEG FOR SELECT * FROM CFCapitoliPEG WHERE Eser = lEser; LOOP FETCH curPEG INTO rowPEG; EXIT WHEN curPEG%NOTFOUND; -- Controllo per vedere qual'è il massimo tra il proposto e l'impegnato/accertato nImpAcc := NVL( pkViewForm.fnTotImpAcc( rowPEG.IdCapitolo ), 0 ); nImportoMax := GREATEST( nImpAcc, NVL( rowPEG.Proposta, 0 ) ); -- Correggo in percentuale lo stanziato di CFPEGPerCDC SELECT COUNT(*) INTO nContContr FROM CFPEGPerCDC WHERE IdCapitolo = rowPEG.IdCapitolo; IF nContContr = 1 THEN -- un solo Centro di Costo UPDATE CFPEGPerCDC SET ImpSta = nImportoMax WHERE IdCapitolo = rowPEG.IdCapitolo; ELSE -- più Centri di Costo SELECT SUM( ImpSta ) INTO nSommaStan FROM CFPEGPerCDC WHERE IdCapitolo = rowPEG.IdCapitolo; UPDATE CFPEGPerCDC SET ImpSta = ImpSta + ROUND( ( ImpSta * ( ( nImportoMax - rowPEG.Proposta ) / nSommaStan ) ), 2 ) WHERE IdCapitolo = rowPEG.IdCapitolo AND nSommaStan <> 0; /* controllo che se l'importo stanziato per il Capitolo di PEG è uguale alla somma degli importi stanziati per i CdC relativi a quel Capitolo, ciò si verifichi ancora; cioè che gli arrotondamenti non abbiano causato una differenza tra tali importi; in questo caso, assegno tale differenza al primo dei CdC */ SELECT SUM( ImpSta ) INTO nSommaProp FROM CFPEGPerCDC WHERE IdCapitolo = rowPEG.IdCapitolo; IF ( nImportoMax <> nSommaProp ) THEN IF ( nImportoMax - nSommaProp ) < 0 THEN UPDATE CFPEGPerCDC SET ImpSta = ImpSta + ( nImportoMax - nSommaProp ) WHERE IdCapitolo = rowPEG.IdCapitolo AND ImpSta > 0 AND RowNum < 2; ELSE UPDATE CFPEGPerCDC SET ImpSta = ImpSta + ( nImportoMax - nSommaProp ) WHERE IdCapitolo = rowPEG.IdCapitolo AND RowNum < 2; END IF; END IF; END IF; -- Correggo in percentuale lo stanziato di CFPEGPerProgrammi SELECT COUNT(*) INTO nContContr FROM CFPEGPerProgrammi WHERE IdCapitolo = rowPEG.IdCapitolo; IF nContContr = 1 THEN -- un solo record in CFPEGPerProgrammi UPDATE CFPEGPerProgrammi SET StanzIni = nImportoMax WHERE IdCapitolo = rowPEG.IdCapitolo; ELSE -- più record in CFPEGPerProgrammi SELECT SUM( StanzIni ) INTO nSommaStan FROM CFPEGPerProgrammi WHERE IdCapitolo = rowPEG.IdCapitolo; UPDATE CFPEGPerProgrammi SET StanzIni = StanzIni + ROUND( ( StanzIni * ( ( nImportoMax - rowPEG.Proposta ) / nSommaStan ) ), 2 ) WHERE IdCapitolo = rowPEG.IdCapitolo AND nSommaStan <> 0; /* se l'importo stanziato per il Capitolo di PEG è uguale alla somma degli importi stanziati per i Programmi relativi a quel Capitolo, controllo che ciò si verifichi anche dopo la conferma, cioè che gli arrotondamenti non abbiano causato una differenza tra tali importi; in questo caso, assegno tale differenza al primo dei Programmi */ SELECT SUM( StanzIni ) INTO nSommaProp FROM CFPEGPerProgrammi WHERE IdCapitolo = rowPEG.IdCapitolo; IF ( nImportoMax <> nSommaProp ) THEN IF ( nImportoMax - nSommaProp ) < 0 THEN UPDATE CFPEGPerProgrammi SET StanzIni = StanzIni + ( nImportoMax - nSommaProp ) WHERE IdCapitolo = rowPEG.IdCapitolo AND StanzIni > 0 AND RowNum < 2; ELSE UPDATE CFPEGPerProgrammi SET StanzIni = StanzIni + ( nImportoMax - nSommaProp ) WHERE IdCapitolo = rowPEG.IdCapitolo AND RowNum < 2; END IF; END IF; END IF; -- aggiornamento dello Stanziato al massimo tra il Proposto e l'impegnato/accertato UPDATE CFCapitoliPEG SET StanzIni = nImportoMax WHERE IdCapitolo = rowPEG.IdCapitolo; END LOOP; CLOSE curPEG; END IF; /* controllo se la sommatoria degli importi stanziati in CFPEGPerCDC coincide con StanzIni nel record corrispondente in CFCapitoliPEG; per ogni IdCapitolo per cui tale controllo fallisce, inserisco un record in CFControlloConfPEG, che è stata preventivamente pulita da eventuali record già presenti; controllo se la sommatoria degli importi stanziati in CFPEGPerProgrammi coincide con StanzIni nel record corrispondente in CFCapitoliPEG; per ogni IdCapitolo per cui tale controllo fallisce, inserisco un record in CFControlloConfPEG */ DELETE FROM CFControlloConfPEG; SELECT COUNT(*) INTO contCFPEGPerPrg FROM CFPEGPerProgrammi, CFCapitoliPEG WHERE CFPEGPerProgrammi.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser AND CFPEGPerProgrammi.StanzIni > 0; SELECT COUNT(*) INTO contCFPEGPerCDC FROM CFPEGPerCDC, CFCapitoliPEG WHERE CFPEGPerCDC.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.Eser = lEser AND CFPEGPerCDC.ImpSta > 0; IF ( contCFPEGPerPrg = 0 ) OR ( contCFPEGPerCDC = 0 ) THEN nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, NULL, 'A', NULL, pkUtilityCont.fnerroripers(2,0), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(2,1) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(2,2) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(2,3) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); nCont := nCont + 1; IF ( contCFPEGPerPrg = 0 ) THEN INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, nCont - 1, 'A', rowPEG.IdCapitolo, pkUtilityCont.fnerroripers(3,0), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(3,1) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(3,2) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(3,3) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); END IF; nCont := nCont + 1; IF ( contCFPEGPerCDC = 0 ) THEN INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, nCont - 2, 'A', rowPEG.IdCapitolo, pkUtilityCont.fnerroripers(4,0), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(4,1) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(4,2) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(4,3) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); END IF; ELSE OPEN curPEG FOR SELECT * FROM CFCapitoliPEG WHERE Eser = lEser ORDER BY App, UEB, CodCdR, CodVoce, Cap, Art; LOOP FETCH curPEG INTO rowPEG; EXIT WHEN curPEG%NOTFOUND; -- controlli su CFPEGPerCDC SELECT NVL( SUM( ImpSta ), 0 ) INTO nImpSta FROM CFPEGPerCDC WHERE IdCapitolo = rowPEG.IdCapitolo; IF ( rowPEG.StanzIni <> nImpSta ) THEN SELECT COUNT(*) INTO nNum FROM CFControlloConfPEG WHERE IdCapitolo = rowPEG.IdCapitolo AND Livello IS NULL; IF ( nNum = 0 ) THEN nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, NULL, 'A', rowPEG.IdCapitolo, pkUtilityCont.fnerroripers(5, 0)||':'||rowPEG.Eser||' - '|| pkUtilityCont.fnerroripers(6, 0)||':'||rowPEG.App||' - '|| pkUtilityCont.fnerroripers(7, 0)||':'||rowPEG.UEB||' - '|| pkUtilityCont.fnerroripers(8, 0)||':'||LPAD( rowPEG.CodCdR, 4 ) ||' - '||pkUtilityCont.fnerroripers(9, 0)||':'|| LPAD( DECODE( SUBSTR( rowPEG.CodVoce, 4, 2 ), NULL, rowPEG.CodVoce, SUBSTR( rowPEG.CodVoce, 4, 2 ) ), 3 ) ||' - '||pkUtilityCont.fnerroripers(10, 0) ||':'||LPAD( rowPEG.Cap, 7 )||' - '||pkUtilityCont.fnerroripers(11, 0)|| ':'||LPAD( rowPEG.Art, 3 )||' - '||pkUtilityCont.fnerroripers(12, 0)|| ':'|| sDivisa ||LTRIM( REPLACE( TO_CHAR( NVL( rowPEG.StanzIni, 0 ), '9,999,999,999,999.00' ), ',', '.' ) ), -- DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(5, 1)||':'||rowPEG.Eser||' - '|| pkUtilityCont.fnerroripers(6, 1)||':'||rowPEG.App||' - '|| pkUtilityCont.fnerroripers(7, 1)||':'||rowPEG.UEB||' - '|| pkUtilityCont.fnerroripers(8, 1)||':'||LPAD( rowPEG.CodCdR, 4 ) ||' - '||pkUtilityCont.fnerroripers(9, 1)||':'|| LPAD( DECODE( SUBSTR( rowPEG.CodVoce, 4, 2 ), NULL, rowPEG.CodVoce, SUBSTR( rowPEG.CodVoce, 4, 2 ) ), 3 ) ||' - '||pkUtilityCont.fnerroripers(10, 1) ||':'||LPAD( rowPEG.Cap, 7 )||' - '||pkUtilityCont.fnerroripers(11, 1)|| ':'||LPAD( rowPEG.Art, 3 )||' - '||pkUtilityCont.fnerroripers(12, 1)|| ':'|| sDivisa ||LTRIM( REPLACE( TO_CHAR( NVL( rowPEG.StanzIni, 0 ), '9,999,999,999,999.00' ), ',', '.' ) ) ), -- DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(5, 2)||':'||rowPEG.Eser||' - '|| pkUtilityCont.fnerroripers(6, 2)||':'||rowPEG.App||' - '|| pkUtilityCont.fnerroripers(7, 2)||':'||rowPEG.UEB||' - '|| pkUtilityCont.fnerroripers(8, 2)||':'||LPAD( rowPEG.CodCdR, 4 ) ||' - '||pkUtilityCont.fnerroripers(9, 2)||':'|| LPAD( DECODE( SUBSTR( rowPEG.CodVoce, 4, 2 ), NULL, rowPEG.CodVoce, SUBSTR( rowPEG.CodVoce, 4, 2 ) ), 3 ) ||' - '||pkUtilityCont.fnerroripers(10, 2) ||':'||LPAD( rowPEG.Cap, 7 )||' - '||pkUtilityCont.fnerroripers(11, 2)|| ':'||LPAD( rowPEG.Art, 3 )||' - '||pkUtilityCont.fnerroripers(12, 2)|| ':'|| sDivisa ||LTRIM( REPLACE( TO_CHAR( NVL( rowPEG.StanzIni, 0 ), '9,999,999,999,999.00' ), ',', '.' ) ) ), -- DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(5, 3)||':'||rowPEG.Eser||' - '|| pkUtilityCont.fnerroripers(6, 3)||':'||rowPEG.App||' - '|| pkUtilityCont.fnerroripers(7, 3)||':'||rowPEG.UEB||' - '|| pkUtilityCont.fnerroripers(8, 3)||':'||LPAD( rowPEG.CodCdR, 4 ) ||' - '||pkUtilityCont.fnerroripers(9, 3)||':'|| LPAD( DECODE( SUBSTR( rowPEG.CodVoce, 4, 2 ), NULL, rowPEG.CodVoce, SUBSTR( rowPEG.CodVoce, 4, 2 ) ), 3 ) ||' - '||pkUtilityCont.fnerroripers(10, 3) ||':'||LPAD( rowPEG.Cap, 7 )||' - '||pkUtilityCont.fnerroripers(11, 3)|| ':'||LPAD( rowPEG.Art, 3 )||' - '||pkUtilityCont.fnerroripers(12, 3)|| ':'|| sDivisa ||LTRIM( REPLACE( TO_CHAR( NVL( rowPEG.StanzIni, 0 ), '9,999,999,999,999.00' ), ',', '.' ) ) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, nCont - 1, 'A', rowPEG.IdCapitolo, pkUtilityCont.fnerroripers(13, 0)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nImpSta, '99,999,999,999,999.00' ), ',', '.' ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(13, 1)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nImpSta, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(13, 2)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nImpSta, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(13, 3)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nImpSta, '99,999,999,999,999.00' ), ',', '.' ) ) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); ELSE OPEN curContr FOR SELECT IdControllo FROM CFControlloConfPEG WHERE IdCapitolo = rowPEG.IdCapitolo AND Livello IS NULL; FETCH curContr INTO nIdContr; nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, nIdContr, 'A', rowPEG.IdCapitolo, pkUtilityCont.fnerroripers(13, 0)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nImpSta, '99,999,999,999,999.00' ), ',', '.' ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(13, 1)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nImpSta, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(13, 2)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nImpSta, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(13, 3)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nImpSta, '99,999,999,999,999.00' ), ',', '.' ) ) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); CLOSE curContr; END IF; END IF; -- controlli su CFPEGPerProgrammi -- IF ( rowPEG.App = 'S' ) THEN ---------- PROGRAMMA PRESENTE NELLE ENTRATE -------------- SELECT NVL( SUM( StanzIni ), 0 ) INTO nStanzIni FROM CFPEGPerProgrammi WHERE IdCapitolo = rowPEG.IdCapitolo; IF ( rowPEG.StanzIni <> nStanzIni ) THEN SELECT COUNT(*) INTO nNum FROM CFControlloConfPEG WHERE IdCapitolo = rowPEG.IdCapitolo AND Livello IS NULL; IF ( nNum = 0 ) THEN nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, NULL, 'A', rowPEG.IdCapitolo, pkUtilityCont.fnerroripers(5, 0)||':'||rowPEG.Eser||' - '|| pkUtilityCont.fnerroripers(6, 0)||':'||rowPEG.App||' - '|| pkUtilityCont.fnerroripers(7, 0)||':'||rowPEG.UEB|| ' - '||pkUtilityCont.fnerroripers(8, 0)||':'|| LPAD( rowPEG.CodCdR, 4 )||' - '||pkUtilityCont.fnerroripers(9, 0)||':'|| LPAD( DECODE( SUBSTR( rowPEG.CodVoce, 4, 2 ), NULL, rowPEG.CodVoce, SUBSTR( rowPEG.CodVoce, 4, 2 ) ), 3 ) ||' - '||pkUtilityCont.fnerroripers(10, 0)|| ':'||LPAD( rowPEG.Cap, 7 )||' - '||pkUtilityCont.fnerroripers(11, 0)|| ':'||LPAD( rowPEG.Art, 3 )||' - '||pkUtilityCont.fnerroripers(12, 0)|| ':'|| sDivisa ||LTRIM( REPLACE( TO_CHAR( NVL( rowPEG.StanzIni, 0 ), '9,999,999,999,999.00' ), ',', '.' ) ), -- DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(5, 1)||':'||rowPEG.Eser||' - '|| pkUtilityCont.fnerroripers(6, 1)||':'||rowPEG.App||' - '|| pkUtilityCont.fnerroripers(7, 1)||':'||rowPEG.UEB|| ' - '||pkUtilityCont.fnerroripers(8, 1)||':'|| LPAD( rowPEG.CodCdR, 4 )||' - '||pkUtilityCont.fnerroripers(9, 1)||':'|| LPAD( DECODE( SUBSTR( rowPEG.CodVoce, 4, 2 ), NULL, rowPEG.CodVoce, SUBSTR( rowPEG.CodVoce, 4, 2 ) ), 3 ) ||' - '||pkUtilityCont.fnerroripers(10, 1)|| ':'||LPAD( rowPEG.Cap, 7 )||' - '||pkUtilityCont.fnerroripers(11, 1)|| ':'||LPAD( rowPEG.Art, 3 )||' - '||pkUtilityCont.fnerroripers(12, 1)|| ':'|| sDivisa ||LTRIM( REPLACE( TO_CHAR( NVL( rowPEG.StanzIni, 0 ), '9,999,999,999,999.00' ), ',', '.' ) ) ), -- DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(5, 2)||':'||rowPEG.Eser||' - '|| pkUtilityCont.fnerroripers(6, 2)||':'||rowPEG.App||' - '|| pkUtilityCont.fnerroripers(7, 2)||':'||rowPEG.UEB|| ' - '||pkUtilityCont.fnerroripers(8, 2)||':'|| LPAD( rowPEG.CodCdR, 4 )||' - '||pkUtilityCont.fnerroripers(9, 2)||':'|| LPAD( DECODE( SUBSTR( rowPEG.CodVoce, 4, 2 ), NULL, rowPEG.CodVoce, SUBSTR( rowPEG.CodVoce, 4, 2 ) ), 3 ) ||' - '||pkUtilityCont.fnerroripers(10, 2)|| ':'||LPAD( rowPEG.Cap, 7 )||' - '||pkUtilityCont.fnerroripers(11, 2)|| ':'||LPAD( rowPEG.Art, 3 )||' - '||pkUtilityCont.fnerroripers(12, 2)|| ':'|| sDivisa ||LTRIM( REPLACE( TO_CHAR( NVL( rowPEG.StanzIni, 0 ), '9,999,999,999,999.00' ), ',', '.' ) ) ), -- DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(5, 3)||':'||rowPEG.Eser||' - '|| pkUtilityCont.fnerroripers(6, 3)||':'||rowPEG.App||' - '|| pkUtilityCont.fnerroripers(7, 3)||':'||rowPEG.UEB|| ' - '||pkUtilityCont.fnerroripers(8, 3)||':'|| LPAD( rowPEG.CodCdR, 4 )||' - '||pkUtilityCont.fnerroripers(9, 3)||':'|| LPAD( DECODE( SUBSTR( rowPEG.CodVoce, 4, 2 ), NULL, rowPEG.CodVoce, SUBSTR( rowPEG.CodVoce, 4, 2 ) ), 3 ) ||' - '||pkUtilityCont.fnerroripers(10, 3)|| ':'||LPAD( rowPEG.Cap, 7 )||' - '||pkUtilityCont.fnerroripers(11, 3)|| ':'||LPAD( rowPEG.Art, 3 )||' - '||pkUtilityCont.fnerroripers(12, 3)|| ':'|| sDivisa ||LTRIM( REPLACE( TO_CHAR( NVL( rowPEG.StanzIni, 0 ), '9,999,999,999,999.00' ), ',', '.' ) ) ), -- NULL, NULL, NULL, NULL, 0, lTimeStamp ); nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, nCont - 1, 'A', rowPEG.IdCapitolo, pkUtilityCont.fnerroripers(14, 0)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIni, '99,999,999,999,999.00' ), ',', '.' ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(14, 1)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIni, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(14, 2)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIni, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(14, 3)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIni, '99,999,999,999,999.00' ), ',', '.' ) ) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); ELSE OPEN curContr FOR SELECT IdControllo FROM CFControlloConfPEG WHERE IdCapitolo = rowPEG.IdCapitolo AND Livello IS NULL; FETCH curContr INTO nIdContr; nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, nIdContr, 'A', rowPEG.IdCapitolo, pkUtilityCont.fnerroripers(14, 0)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIni, '99,999,999,999,999.00' ), ',', '.' ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(14, 1)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIni, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(14, 2)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIni, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(14, 3)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIni, '99,999,999,999,999.00' ), ',', '.' ) ) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); CLOSE curContr; END IF; END IF; -- END IF; END LOOP; CLOSE curPEG; END IF; /* controllo se la sommatoria degli importi stanziati in CFCapitoliPEG per le Entrate coincide con quella delle Spese; se tale controllo fallisce, inserisco gli opportuni record in CFControlloConfPEG */ SELECT NVL( SUM( StanzIni ), 0 ) INTO nStanzIniE FROM CFCapitoliPEG WHERE Eser = lEser AND App = 'E'; SELECT NVL( SUM( StanzIni ), 0 ) INTO nStanzIniS FROM CFCapitoliPEG WHERE Eser = lEser AND App = 'S'; IF ( nStanzIniE <> nStanzIniS ) THEN nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, NULL, 'A', NULL, pkUtilityCont.fnerroripers(15, 0), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(15, 1) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(15, 2) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(15, 3) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, nCont - 1, 'A', NULL, pkUtilityCont.fnerroripers(16, 0)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIniE, '99,999,999,999,999.00' ), ',', '.' ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(16, 1)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIniE, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(16, 2)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIniE, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(16, 3)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIniE, '99,999,999,999,999.00' ), ',', '.' ) ) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, nCont - 2, 'A', NULL, pkUtilityCont.fnerroripers(17, 0)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIniS, '99,999,999,999,999.00' ), ',', '.' ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(17, 1)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIniS, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(17, 2)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIniS, '99,999,999,999,999.00' ), ',', '.' ) ) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(17, 3)|| sDivisa || LTRIM( REPLACE( TO_CHAR( nStanzIniS, '99,999,999,999,999.00' ), ',', '.' ) ) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); END IF; /* inserisco in CFControlloConfPEG la descrizione del controllo relativa al fatto che la Conferma del PEG è stata effettuata */ nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, NULL, 'P', NULL, pkUtilityCont.fnerroripers(18, 0), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(18, 1) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(18, 2) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(18, 3) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); nCont := nCont + 1; INSERT INTO CFControlloConfPEG ( IdControllo, Livello, Esito, IdCapitolo, DesBreve, DESBREVE__1, DESBREVE__2, DESBREVE__3, DesEstesa, DESESTESA__1, DESESTESA__2, DESESTESA__3, CodSes, TmsLock ) VALUES ( nCont, nCont - 1, 'P', NULL, pkUtilityCont.fnerroripers(19, 0), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(19, 1) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(19, 2) ), DECODE( sSeparat, NULL, NULL, pkUtilityCont.fnerroripers(19, 3) ), NULL, NULL, NULL, NULL, 0, lTimeStamp ); /* aggiorno la data di conferma del PEG in CFOpzioni, ma solo se ho eseguito effettivamente l'operazione di conferma */ IF ( nConfermato = 0 ) THEN IF ( lEser = ( nAnno + 1 ) ) THEN -- ho confermato l'anno di previsione UPDATE CFOpzioni SET Opzione = TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ) WHERE DesOpzione = 'DTACONFPEGPREV'; ELSIF ( lEser = ( nAnno + 2 ) ) THEN -- ho confermato il primo anno del pluriennale UPDATE CFOpzioni SET Opzione = TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ) WHERE DesOpzione = 'DTACONFPEGPLUR1'; ELSIF ( lEser = ( nAnno + 3 ) ) THEN -- ho confermato il secondo anno del pluriennale UPDATE CFOpzioni SET Opzione = TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ) WHERE DesOpzione = 'DTACONFPEGPLUR2'; END IF; COMMIT; -- inserisco il log ReturnErr := pkContPerson.fnCFLogIns( 'CFCapitoliPEG', 'U', 'Conferma del P.E.G.', lEser, NULL, NULL, lCodSes, ERRDIAG ); ELSE COMMIT; -- inserisco il log ReturnErr := pkContPerson.fnCFLogIns( 'CFControlloConfPEG', 'I', 'Controlli sugli importi stanziati del P.E.G.', lEser, NULL, NULL, lCodSes, ERRDIAG ); END IF; -- INIZIALIZZAZIONE CFDATIQUADRI E CFDATIQUADRIQUADRIESER per esercizi non presenti ReturnErr := pkContGen.fnCFDatiQuadriTotIns( lCodSes, ERRDIAG ); -- aggiorno le Attività in CFMenuLavori -- cancello la riga CodSistema=1 ( Duplicazione del P.E.G. per l'anno ) DELETE CFMenuLavori WHERE CodSistema = 1; SELECT COUNT( * ) INTO nCont FROM CFMenuLavori WHERE CodSistema = 2||lEser; IF nCont > 0 THEN -- modifica la riga CodSistema=2 ( Confermare il P.E.G. per l'anno ) UPDATE CFMenuLavori SET DtaFine = TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ), FlEseguito = 'S' WHERE CodSistema = 2||lEser; ELSE sDesMenuLavoro := pkUtilityCont.fnerroripers(1677, 0) || ' ' || lEser; IF sOpzLang IS NOT NULL THEN sDesMenuLavoro := sDesMenuLavoro || sSeparat || pkUtilityCont.fnerroripers(1677, 1) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1677, 2) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1677, 3) || ' ' || lEser; END IF; -- inserisco la riga CodSistema=3 ( Conferma del P.E.G. per l'anno ) SELECT COUNT( * ) INTO nCont FROM CFMenuLavori WHERE CodSistema = 3||lEser; IF nCont = 0 THEN ReturnErr := pkContPerson.fnCFMenuLavoriIns( sDesMenuLavoro, 'S', NULL, TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'T', NULL, 3||lEser, lCodSes, nIdMenuLavoro, ERRDIAG ); END IF; END IF; sDesMenuLavoro := pkUtilityCont.fnerroripers(1678, 0) || ' ' || lEser; IF sOpzLang IS NOT NULL THEN sDesMenuLavoro := sDesMenuLavoro || sSeparat || pkUtilityCont.fnerroripers(1678, 1) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1678, 2) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1678, 3) || ' ' || lEser; END IF; -- se non presente, inserisco la riga CodSistema=4 ( Generare il Bilancio per l'anno ) SELECT COUNT( * ) INTO nCont FROM CFMenuLavori WHERE CodSistema = 4||lEser; IF nCont = 0 THEN ReturnErr := pkContPerson.fnCFMenuLavoriIns( sDesMenuLavoro, 'N', TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), NULL, 'T', NULL, 4||lEser, lCodSes, nIdMenuLavoro, ERRDIAG ); END IF; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF curContr%ISOPEN THEN CLOSE curContr; END IF; IF curPEG%ISOPEN THEN CLOSE curPEG; END IF; RETURN pkUtility.fnError( 'pkContPEG.fnConfPEG', SQLCODE, ERRDIAG ); END fnConfPEG; /************************************************************************** * Funzione per la Generazione del Bilancio DL 118/2011 * **************************************************************************/ -- Autore: Torelli FUNCTION fnGenerazBil118 ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lFlPlur IN pkType.tyStringa%type, -- N = generazione Previsione, S = generazione Pluriennale lFlRicCol IN pkType.tyStringa%type, -- E = Ricalcolo di Entrambe le prime 2 colonne Bilancio ( SOLO se Previsione ), -- Impegni/Accertamente per Eser-2 ed Assestato per Eser-1 -- P = Ricalcolo della sola Prima colonna Bilancio ( SOLO se Previsione ), -- S = Ricalcolo della sola Seconda colonna Bilancio ( SOLO se Previsione ), -- N = Non Ricalcolare le prime 2 colonne Bilancio lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(9); lTimeStamp CFBilancioPrevisione.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nIdMenuLavoro pkType.tyStringa%type; nRet number(9); flOpzione CFOpzioni.Opzione%type; sDesMenuLavoro VARCHAR2(2000); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%TYPE; nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnGenerazBil118', -499, ERRDIAG ); END IF; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF lFlPlur = 'N' AND lFlRicCol = 'E' THEN -- RICALCOLA LE PRIME DUE COLONNE -- cancellazione del Bilancio attualmente presente relativo all'esercizio considerato DELETE CFBilPre118 WHERE Eser = lEser; END IF; IF lFlPlur = 'N' THEN ------------------------------- Colonna Previsione 1° anno (Inserimento globale e calocolo Terza colonna importi) ----------------------------------- -- CONTROLLO PRESENZA RECORD NEL BILANCIO SELECT COUNT(*) INTO nCount FROM CFBilPre118 WHERE Eser = lEser; IF nCount = 0 THEN -- inseriamo tutti gli UEB118 ammessi con relativo numRiga = 1 ( previsione di Competenza ) per gli importi di previsione INSERT INTO CFBilPre118 ( Eser, App, UEB118, Des1, Des1__1, Des1__2, Des1__3, Des2, Des2__1, Des2__2, Des2__3, Des3, Des3__1, Des3__2, Des3__3, Des4, Des4__1, Des4__2, Des4__3, NumRiga, ResPresunti, Assestato, Prev1, Prev2, Prev3, EntrNoRicor1, EntrNoRicor2, EntrNoRicor3, CodSes, TmsLock ) SELECT lEser, VWFRMCFAnagraficaUEB118.App, VWFRMCFAnagraficaUEB118.UEB118, MAX(Des1__0), MAX(Des1__1), MAX(Des1__2), MAX(Des1__3), MAX(Des2__0), MAX(Des2__1), MAX(Des2__2), MAX(Des2__3), MAX(Des3__0), MAX(Des3__1), MAX(Des3__2), MAX(Des3__3), MAX(Des4__0), MAX(Des4__1), MAX(Des4__2), MAX(Des4__3), 1, 0, 0, NVL(SUM(Stanzini),0), 0, 0, 0, 0, 0, 0, lTimeStamp FROM VWFRMCFAnagraficaUEB118, CFCapitoliPEG WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND CFCapitoliPEG.Eser(+) = lEser GROUP BY VWFRMCFAnagraficaUEB118.App, VWFRMCFAnagraficaUEB118.UEB118; -- inseriamo tutti gli UEB118 ammessi con relativo numRiga = 4 ( previsione di Cassa ) per gli importi di previsione di Cassa INSERT INTO CFBilPre118 ( Eser, App, UEB118, Des1, Des1__1, Des1__2, Des1__3, Des2, Des2__1, Des2__2, Des2__3, Des3, Des3__1, Des3__2, Des3__3, Des4, Des4__1, Des4__2, Des4__3, NumRiga, ResPresunti, Assestato, Prev1, Prev2, Prev3, EntrNoRicor1, EntrNoRicor2, EntrNoRicor3, CodSes, TmsLock ) SELECT lEser, VWFRMCFAnagraficaUEB118.App, VWFRMCFAnagraficaUEB118.UEB118, MAX(Des1__0), MAX(Des1__1), MAX(Des1__2), MAX(Des1__3), MAX(Des2__0), MAX(Des2__1), MAX(Des2__2), MAX(Des2__3), MAX(Des3__0), MAX(Des3__1), MAX(Des3__2), MAX(Des3__3), MAX(Des4__0), MAX(Des4__1), MAX(Des4__2), MAX(Des4__3), 4, 0, 0, NVL(SUM(ImpCassa),0), 0, 0, 0, 0, 0, 0, lTimeStamp FROM VWFRMCFAnagraficaUEB118, CFCapitoliPEG WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND CFCapitoliPEG.Eser(+) = lEser GROUP BY VWFRMCFAnagraficaUEB118.App, VWFRMCFAnagraficaUEB118.UEB118; -- inseriamo tutti gli UEB118 (SOLO SPESA) ammessi con relativo numRiga = 2 ( di cui già impegnato ) e 3 ( di cui fondo pluriennale vincolato ) INSERT INTO CFBilPre118 ( Eser, App, UEB118, Des1, Des1__1, Des1__2, Des1__3, Des2, Des2__1, Des2__2, Des2__3, Des3, Des3__1, Des3__2, Des3__3, Des4, Des4__1, Des4__2, Des4__3, NumRiga, ResPresunti, Assestato, Prev1, Prev2, Prev3, EntrNoRicor1, EntrNoRicor2, EntrNoRicor3, CodSes, TmsLock ) SELECT lEser, App, UEB118, Des1__0, Des1__1, Des1__2, Des1__3, Des2__0, Des2__1, Des2__2, Des2__3, Des3__0, Des3__1, Des3__2, Des3__3, Des4__0, Des4__1, Des4__2, Des4__3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, lTimeStamp FROM VWFRMCFAnagraficaUEB118 WHERE App = 'S'; INSERT INTO CFBilPre118 ( Eser, App, UEB118, Des1, Des1__1, Des1__2, Des1__3, Des2, Des2__1, Des2__2, Des2__3, Des3, Des3__1, Des3__2, Des3__3, Des4, Des4__1, Des4__2, Des4__3, NumRiga, ResPresunti, Assestato, Prev1, Prev2, Prev3, EntrNoRicor1, EntrNoRicor2, EntrNoRicor3, CodSes, TmsLock ) SELECT lEser, App, UEB118, Des1__0, Des1__1, Des1__2, Des1__3, Des2__0, Des2__1, Des2__2, Des2__3, Des3__0, Des3__1, Des3__2, Des3__3, Des4__0, Des4__1, Des4__2, Des4__3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, lTimeStamp FROM VWFRMCFAnagraficaUEB118 WHERE App = 'S'; ELSIF lFlRicCol = 'E' OR lFlRicCol = 'N' THEN -- azzero gli importi di previsione prima del ricalcolo UPDATE CFBilPre118 SET Prev1 = 0, EntrNoRicor1 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 ( previsione di competenza ) FOR recPeg IN ( SELECT App, UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG WHERE Eser = lEser GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 4 ( previsione di cassa ) FOR recPeg IN ( SELECT App, UEB118, NVL( SUM( ImpCassa ), 0 ) Importo FROM CFCapitoliPEG WHERE Eser = lEser GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 4; END LOOP; END IF; IF nCount = 0 OR lFlRicCol = 'E' OR lFlRicCol = 'N' THEN -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) FOR recPeg IN ( SELECT App, UEB118, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < lEser GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) FOR recPeg IN ( SELECT CFCapitoliPEG.App, UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser GROUP BY CFCapitoliPEG.App, UEB118 ) LOOP UPDATE CFBilPre118 SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; -- Aggiornamento del numRiga = 1 ( di cui NON RICORRENTI ) Entrata e Spesa FOR recPeg IN ( SELECT App, UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG WHERE Eser = lEser AND FlEntrNoRicor = 'S' GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET EntrNoRicor1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; END IF; ---------------------------------- Colonna Residuo presunto Eser-1 ( (calcolo PRIMA colonna importi) --------------------------------------- IF lFlRicCol = 'E' OR lFlRicCol = 'P' THEN -- azzero gli importi della seconda colonna UPDATE CFBilPre118 SET ResPresunti = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Entrata; Aggiornamento del numRiga = 1 FOR recPeg IN ( SELECT App, UEB118, SUM( NVL( CFAccertamenti.ImpIni, 0 ) ) - NVL( SUM( pkViewForm.fnResTotDettRevRisc( 1, CFAccertamenti.IdAcc, NULL, '01/01/'||lEser ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, lEser ) ), 0 ) Importo FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser < lEser AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.App = 'E' GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET ResPresunti = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Spesa; Aggiornamento del numRiga = 1 FOR recPeg IN ( SELECT App, UEB118, SUM( NVL( CFImpegni.ImpIni, 0 ) ) - NVL( SUM( pkViewForm.fnResTotDettMandPag( 1, CFImpegni.IdImp, NULL, '01/01/'||lEser ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, lEser ) ), 0 ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser < lEser AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.App = 'S' GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET ResPresunti = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; END IF; ---------------------------------- Colonna Assestato Eser-1 (calcolo SECONDA colonna importi) --------------------------------------- IF lFlRicCol = 'E' OR lFlRicCol = 'S' THEN -- azzero gli importi della seconda colonna UPDATE CFBilPre118 SET Assestato = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 ( previsione di competenza ) FOR recPeg IN ( SELECT App, UEB118, SUM( StanzIni + VarAum - VarDim ) Importo FROM CFCapitoliPEG WHERE Eser = lEser-1 GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET Assestato = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) FOR recPeg IN ( SELECT CFCapitoliPEG.App, UEB118, SUM( StanzIni + VarAum - VarDim ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser-1 GROUP BY CFCapitoliPEG.App, UEB118 ) LOOP UPDATE CFBilPre118 SET Assestato = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; -- Aggiornamento del numRiga = 4 ( previsione di cassa ) FOR recPeg IN ( SELECT App, UEB118, SUM( ImpCassa + VarAumCas - VarDimCas ) Importo FROM CFCapitoliPEG WHERE Eser = lEser-1 GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET Assestato = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 4; END LOOP; END IF; ELSIF ( lFlPlur = 'S' ) THEN ------------------------------------- Pluriennale -------------------------------------------------- -- azzero gli importi della seconda colonna UPDATE CFBilPre118 SET Prev2 = 0, Prev3 = 0, EntrNoRicor2 = 0, EntrNoRicor3 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 ( previsione di competenza + 1 ) FOR recPeg IN ( SELECT App, UEB118, SUM( StanzIni ) Importo FROM CFCapitoliPEG WHERE Eser = lEser + 1 GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 1 ( previsione di competenza + 2 ) FOR recPeg IN ( SELECT App, UEB118, SUM( StanzIni ) Importo FROM CFCapitoliPEG WHERE Eser = lEser + 2 GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 1 ( di cui NON RICORRENTI + 1 ) Entrata e Spesa FOR recPeg IN ( SELECT App, UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG WHERE Eser = lEser + 1 AND FlEntrNoRicor = 'S' GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET EntrNoRicor2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 1 ( di cui NON RICORRENTI + 2 ) Entrata e Spesa FOR recPeg IN ( SELECT App, UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG WHERE Eser = lEser + 2 AND FlEntrNoRicor = 'S' GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET EntrNoRicor3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) + 1 FOR recPeg IN ( SELECT App, UEB118, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = (lEser + 1) AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < (lEser + 1) GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) + 1 FOR recPeg IN ( SELECT CFCapitoliPEG.App, UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser + 1 GROUP BY CFCapitoliPEG.App, UEB118 ) LOOP UPDATE CFBilPre118 SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) + 2 FOR recPeg IN ( SELECT App, UEB118, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = (lEser + 2) AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < (lEser + 2) GROUP BY App, UEB118 ) LOOP UPDATE CFBilPre118 SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) + 1 FOR recPeg IN ( SELECT CFCapitoliPEG.App, UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser + 2 GROUP BY CFCapitoliPEG.App, UEB118 ) LOOP UPDATE CFBilPre118 SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; -- committiamo la generazione del pluriennale COMMIT; -- lanciamo la funzione di genrerazione della stampa dettagliata nRet := fnGenerazBil118DettCap ( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; END IF; ---- previsione COMMIT; -- Generazione della stampa per il Fondo Crediti di dubbia esigibilità nRet := pkContPEG.fnGenerazBil118FSC( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Generazione della stampa per gli Equilibri di Bilancio nRet := pkContPEG.fnGenerazBil118EqBil( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Generazione della stampa per i Limiti di Debitamento nRet := pkContPEG.fnGenerazBil118LimDeb( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Generazione della stampa per il Risultato presunto di amministrazione nRet := pkContPEG.fnGenerazBil118RisAmmPres( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Generazione della stampa per Piano dei conti nRet := pkContPEG.fnGenerazBil118PFin( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Generazione della stampa per FPV nRet := pkContPEG.fnGenerazBil118FPV( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Generazione della stampa per il PROSPETTO VERIFICA RISPETTO DEI VINCOLI DI FINANZA PUBBLICA nRet := pkContPEG.fnGenerazBilPre118FinPub( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- aggiorno la data di generazione del Bilancio da PEG in CFOpzioni IF ( lFlPlur = 'N' ) THEN -- ho generato l'anno di previsione UPDATE CFOpzioni SET Opzione = TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ) WHERE DesOpzione = 'DTAGENBILPREV'; ELSE -- ho generato gli anni del pluriennale UPDATE CFOpzioni SET Opzione = TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ) WHERE DesOpzione = 'DTAGENBILPLUR'; END IF; -- Scrivo in CFOpzioni NO alla modifica del PEG e del Bilancio UPDATE CFOpzioni SET Opzione = 'N' WHERE DesOpzione = 'PEGMODIFICATO'; UPDATE CFOpzioni SET Opzione = 'N' WHERE DesOpzione = 'BILMODIFICATO'; -- chiamata alla funzione per la Quadratura nRet := fnCFContrBilPrev( lEser, 'N', lCodSes, ERRDIAG ); -- ho il parametro lCOMMIT in input IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- aggiorno le Attività in CFMenuLavori -- cancellazione di CodSistema 3 = Conferma del P.E.G. per l'anno DELETE CFMenuLavori WHERE SUBSTR( CodSistema, 1, 1 ) BETWEEN 1 AND 3; COMMIT; SELECT COUNT(*) INTO nCount FROM CFMenuLavori WHERE CodSistema = 4||lEser; SELECT Opzione INTO flOpzione FROM CFOpzioni WHERE DesOPzione = 'FLAGBILBLOCCATO'; IF ( flOpzione = 'S' ) THEN -- il Bilancio non quadra e quindi va rigenerato -- Cancello e reinserisco CodSistema=4 con ( Riscontrati Errori nella Generazione dovuti a Squilibrio di Bilancio ) DELETE CFMenuLavori WHERE SUBSTR( CodSistema, 1, 1 ) = 4; sDesMenuLavoro := pkUtilityCont.fnerroripers(1678, 0) || ' ' || lEser || ' ' || pkUtilityCont.fnerroripers(1679, 0); IF sOpzLang IS NOT NULL THEN sDesMenuLavoro := sDesMenuLavoro || sSeparat || pkUtilityCont.fnerroripers(1678, 1) || ' ' || lEser || ' ' || pkUtilityCont.fnerroripers(1679, 1) || sSeparat || pkUtilityCont.fnerroripers(1678, 2) || ' ' || lEser || ' ' || pkUtilityCont.fnerroripers(1679, 2) || sSeparat || pkUtilityCont.fnerroripers(1678, 3) || ' ' || lEser || ' ' || pkUtilityCont.fnerroripers(1679, 3); END IF; -- inserisco la riga CodSistema=4 ( Generare il Bilancio per l'anno ) nRet := pkContPerson.fnCFMenuLavoriIns( sDesMenuLavoro, 'S', TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), NULL, 'T', NULL, 4||lEser, lCodSes, nIdMenuLavoro, ERRDIAG ); ELSIF ( lFlPlur = 'N' ) AND ( flOpzione = 'N' ) THEN -- ho generato l'anno di previsione e quadra e quindi si deve generare il pluriennale DELETE CFMenuLavori WHERE SUBSTR( CodSistema, 1, 1 ) = 4; sDesMenuLavoro := pkUtilityCont.fnerroripers(1680, 0) || ' ' || lEser; IF sOpzLang IS NOT NULL THEN sDesMenuLavoro := sDesMenuLavoro || sSeparat || pkUtilityCont.fnerroripers(1680, 1) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1680, 2) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1680, 3) || ' ' || lEser; END IF; -- inserisco la riga CodSistema=5 ( Generare il Bilancio per il Pluriennale; Generazione corretta per l'anno ) nRet := pkContPerson.fnCFMenuLavoriIns( sDesMenuLavoro, 'N', TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), NULL, 'T', NULL, 5, lCodSes, nIdMenuLavoro, ERRDIAG ); ELSIF ( lFlPlur = 'S' ) AND ( flOpzione = 'N' ) THEN -- ho generato gli anni del pluriennale e quadrano e quindi si può Approvare il Bilancio IF ( nCount > 0 ) THEN UPDATE CFMenuLavori SET DtaFine = TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ), FlEseguito = 'S' WHERE SUBSTR( CodSistema, 1, 1 ) = 4; ELSE sDesMenuLavoro := pkUtilityCont.fnerroripers(1682, 0) || ' ' || lEser; IF sOpzLang IS NOT NULL THEN sDesMenuLavoro := sDesMenuLavoro || sSeparat || pkUtilityCont.fnerroripers(1682, 1) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1682, 2) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1682, 3) || ' ' || lEser; END IF; -- inserisco la riga CodSistema=6 ( Approvare il Bilancio per l'anno ) nRet := pkContPerson.fnCFMenuLavoriIns( sDesMenuLavoro, 'N', TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), NULL, 'T', NULL, 6, lCodSes, nIdMenuLavoro, ERRDIAG ); END IF; END IF; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118', 'I', 'Generazione del Bilancio 118/2011', 'Eser:'||lEser||' FlPlur:'||lFlPlur||' FlRicCol:'||lFlRicCol, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118', 'I', 'Errore nella Generazione del Bilancio 118/2011', 'Eser:'||lEser||' FlPlur:'||lFlPlur||' FlRicCol:'||lFlRicCol, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBil118', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBil118; /***************************************************************************** * Funzione per la Generazione del Bilancio DL 118/2011 dettaglaita per Cap * *****************************************************************************/ -- Autore: Torelli FUNCTION fnGenerazBil118DettCap ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(9); lTimeStamp CFBilancioPrevisione.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nRet number(9); sDesMenuLavoro VARCHAR2(2000); BEGIN -- cancellazione del Bilancio attualmente presente relativo all'esercizio considerato DELETE CFBilPre118DettCap WHERE Eser = lEser; -- inseriamo tutti gli UEB118 ammessi con relativo numRiga = 1 ( previsione di Competenza ) per gli importi di previsione INSERT INTO CFBilPre118DettCap ( Eser, App, UEB118, Cap, Art, CodCdR, NumRiga, ResPresunti, Assestato, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, AllCapBilPrev118.App, AllCapBilPrev118.UEB118, AllCapBilPrev118.Cap, AllCapBilPrev118.Art, AllCapBilPrev118.CodCdR, 1, 0, 0, NVL(SUM(Stanzini),0), 0, 0, 0, lTimeStamp FROM AllCapBilPrev118, CFCapitoliPEG WHERE AllCapBilPrev118.App = CFCapitoliPEG.App(+) AND AllCapBilPrev118.Cap = CFCapitoliPEG.Cap(+) AND AllCapBilPrev118.Art = CFCapitoliPEG.Art(+) AND AllCapBilPrev118.UEB = CFCapitoliPEG.UEB(+) AND AllCapBilPrev118.UEB118 = CFCapitoliPEG.UEB118(+) AND AllCapBilPrev118.CodCdR = CFCapitoliPEG.CodCdR(+) AND AllCapBilPrev118.CodVoce = CFCapitoliPEG.CodVoce(+) AND AllCapBilPrev118.FlCopFplur = CFCapitoliPEG.FlCopFplur(+) AND CFCapitoliPEG.Eser(+) = lEser GROUP BY AllCapBilPrev118.App, AllCapBilPrev118.UEB118, AllCapBilPrev118.Cap, AllCapBilPrev118.Art, AllCapBilPrev118.CodCdR; -- inseriamo tutti gli UEB118 ammessi con relativo numRiga = 4 ( previsione di Cassa ) per gli importi di previsione di Cassa INSERT INTO CFBilPre118DettCap ( Eser, App, UEB118, Cap, Art, CodCdR, NumRiga, ResPresunti, Assestato, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, AllCapBilPrev118.App, AllCapBilPrev118.UEB118, AllCapBilPrev118.Cap, AllCapBilPrev118.Art, AllCapBilPrev118.CodCdR, 4, 0, 0, NVL(SUM(ImpCassa),0), 0, 0, 0, lTimeStamp FROM AllCapBilPrev118, CFCapitoliPEG WHERE AllCapBilPrev118.App = CFCapitoliPEG.App(+) AND AllCapBilPrev118.Cap = CFCapitoliPEG.Cap(+) AND AllCapBilPrev118.Art = CFCapitoliPEG.Art(+) AND AllCapBilPrev118.UEB = CFCapitoliPEG.UEB(+) AND AllCapBilPrev118.UEB118 = CFCapitoliPEG.UEB118(+) AND AllCapBilPrev118.CodCdR = CFCapitoliPEG.CodCdR(+) AND AllCapBilPrev118.CodVoce = CFCapitoliPEG.CodVoce(+) AND AllCapBilPrev118.FlCopFplur = CFCapitoliPEG.FlCopFplur(+) AND CFCapitoliPEG.Eser(+) = lEser GROUP BY AllCapBilPrev118.App, AllCapBilPrev118.UEB118, AllCapBilPrev118.Cap, AllCapBilPrev118.Art, AllCapBilPrev118.CodCdR; -- inseriamo tutti gli UEB118 (SOLO SPESA) ammessi con relativo numRiga = 2 ( di cui già impegnato ) e 3 ( di cui fondo pluriennale vincolato ) INSERT INTO CFBilPre118DettCap ( Eser, App, UEB118, Cap, Art, CodCdR, NumRiga, ResPresunti, Assestato, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT DISTINCT lEser, App, UEB118, Cap, Art, CodCdR, 2, 0, 0, 0, 0, 0, 0, lTimeStamp FROM AllCapBilPrev118 WHERE AllCapBilPrev118.App = 'S'; INSERT INTO CFBilPre118DettCap ( Eser, App, UEB118, Cap, Art, CodCdR, NumRiga, ResPresunti, Assestato, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT DISTINCT lEser, App, UEB118, Cap, Art, CodCdR, 3, 0, 0, 0, 0, 0, 0, lTimeStamp FROM AllCapBilPrev118 WHERE AllCapBilPrev118.App = 'S'; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) FOR recPeg IN ( SELECT App, UEB118, Cap, Art, CFCapitoliPEG.CodCdR, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < lEser GROUP BY App, UEB118, Cap, Art, CFCapitoliPEG.CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) FOR recPeg IN ( SELECT CFCapitoliPEG.App, UEB118, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, CodCdR, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser GROUP BY CFCapitoliPEG.App, UEB118, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 3; END LOOP; ---------------------------------- Colonna Residuo presunto Eser-1 ( (calcolo PRIMA colonna importi) --------------------------------------- -- Entrata; Aggiornamento del numRiga = 1 FOR recPeg IN ( SELECT App, UEB118, Cap, Art, CFCapitoliPEG.CodCdR, SUM( NVL( CFAccertamenti.ImpIni, 0 ) ) - NVL( SUM( pkViewForm.fnResTotDettRevRisc( 1, CFAccertamenti.IdAcc, NULL, '01/01/'||lEser ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, lEser ) ), 0 ) Importo FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser < lEser AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.App = 'E' GROUP BY App, UEB118, Cap, Art, CFCapitoliPEG.CodCdR ) LOOP UPDATE CFBilPre118DettCap SET ResPresunti = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 1; END LOOP; -- Spesa; Aggiornamento del numRiga = 1 FOR recPeg IN ( SELECT App, UEB118, Cap, Art, CFCapitoliPEG.CodCdR, SUM( NVL( CFImpegni.ImpIni, 0 ) ) - NVL( SUM( pkViewForm.fnResTotDettMandPag( 1, CFImpegni.IdImp, NULL, '01/01/'||lEser ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, lEser ) ), 0 ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser < lEser AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.App = 'S' GROUP BY App, UEB118, Cap, Art, CFCapitoliPEG.CodCdR ) LOOP UPDATE CFBilPre118DettCap SET ResPresunti = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 1; END LOOP; ---------------------------------- Colonna Assestato Eser-1 (calcolo SECONDA colonna importi) --------------------------------------- -- Aggiornamento del numRiga = 1 ( previsione di competenza ) FOR recPeg IN ( SELECT App, UEB118, Cap, Art, CodCdR, SUM( StanzIni + VarAum - VarDim ) Importo FROM CFCapitoliPEG WHERE Eser = lEser-1 GROUP BY App, UEB118, Cap, Art, CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Assestato = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) FOR recPeg IN ( SELECT CFCapitoliPEG.App, UEB118, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, CodCdR, SUM( StanzIni + VarAum - VarDim ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser-1 GROUP BY CFCapitoliPEG.App, UEB118, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Assestato = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 3; END LOOP; -- Aggiornamento del numRiga = 4 ( previsione di cassa ) FOR recPeg IN ( SELECT App, UEB118, Cap, Art, CodCdR, SUM( ImpCassa + VarAumCas - VarDimCas ) Importo FROM CFCapitoliPEG WHERE Eser = lEser-1 GROUP BY App, UEB118, Cap, Art, CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Assestato = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 4; END LOOP; -- Aggiornamento del numRiga = 1 ( previsione di competenza + 1 ) FOR recPeg IN ( SELECT App, UEB118, Cap, Art, CodCdR, SUM( StanzIni ) Importo FROM CFCapitoliPEG WHERE Eser = lEser + 1 GROUP BY App, UEB118, Cap, Art, CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 1 ( previsione di competenza + 2 ) FOR recPeg IN ( SELECT App, UEB118, Cap, Art, CodCdR, SUM( StanzIni ) Importo FROM CFCapitoliPEG WHERE Eser = lEser + 2 GROUP BY App, UEB118, Cap, Art, CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) + 1 FOR recPeg IN ( SELECT App, UEB118, Cap, Art, CFCapitoliPEG.CodCdR, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = (lEser + 1) AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < (lEser + 1) GROUP BY App, UEB118, Cap, Art, CFCapitoliPEG.CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) + 1 FOR recPeg IN ( SELECT CFCapitoliPEG.App, UEB118, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, CodCdR, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser + 1 GROUP BY CFCapitoliPEG.App, UEB118, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 3; END LOOP; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) + 2 FOR recPeg IN ( SELECT App, UEB118, Cap, Art, CFCapitoliPEG.CodCdR, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = (lEser + 2) AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < (lEser + 2) GROUP BY App, UEB118, Cap, Art, CFCapitoliPEG.CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) + 2 FOR recPeg IN ( SELECT CFCapitoliPEG.App, UEB118, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, CodCdR, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser + 2 GROUP BY CFCapitoliPEG.App, UEB118, CFCapitoliPEG.Cap, CFCapitoliPEG.Art, CodCdR ) LOOP UPDATE CFBilPre118DettCap SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = recPeg.App AND UEB118 = recPeg.UEB118 AND Cap = recPeg.Cap AND Art = recPeg.Art AND CodCdR = recPeg.CodCdR AND NumRiga = 3; END LOOP; COMMIT; -- cancello i capitoli che non hanno importi DELETE CFBilPre118DettCap WHERE Eser = lEser AND ( App, UEB118, Cap, Art, CodCdR ) IN ( SELECT App, UEB118, Cap, Art, CodCdR FROM CFBilPre118DettCap WHERE Eser = lEser GROUP BY App, UEB118, Cap, Art, CodCdR HAVING sum( ResPresunti + Assestato + Prev1 + Prev2 + Prev3 ) = 0 ); COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118DettCap', 'I', 'Generazione del Bilancio 118/2011 Dettagliato', 'Eser:'||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118DettCap', 'I', 'Errore nella Generazione del Bilancio 118/2011 Dettagliato', 'Eser:'||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBil118DettCap', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBil118DettCap; /************************************************************************** * Funzione per la Gestione del Bilancio di Previsione 118 * * Utilizzata nella Predisposizione del Bilancio di Previsione * **************************************************************************/ FUNCTION fnCFBilPre118Upd ( lEser IN pkType.tyStringa%type, -- CFBilPre118 lApp IN pkType.tyStringa%type, -- CFBilPre118 lUEB118 IN pkType.tyStringa%type, -- CFBilPre118 lNumRiga IN pkType.tyStringa%type, -- CFBilPre118 lResPresunti IN pkType.tyStringa%type, -- CFBilPre118 lAssestato IN pkType.tyStringa%type, -- CFBilPre118 lCodSes IN pkType.tyStringa%type, -- CFBilPre118 ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilPre118.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118Upd', -499, ERRDIAG ); END IF; /* aggiorno il record solo se non si è verificato un blocco di DB o un blocco di tabella 'contemporaneamente' alla richiesta del blocco del record; in questo caso ha priorità il blocco DB o il blocco di tabella */ nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN ROLLBACK; RETURN nRet; ELSIF ( nRet = 0 ) THEN ROLLBACK; -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118Upd', -499, ERRDIAG ); END IF; -- aggiornamento del record UPDATE CFBilPre118 SET ResPresunti = NVL( lResPresunti, 0 ), Assestato = NVL( lAssestato, 0 ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = lApp AND UEB118 = lUEB118 AND NumRiga = lNumRiga AND CodSes = lCodSes; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilPre118RLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118Upd', -212, ERRDIAG ); END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118' ) AND DesPK = UPPER( lEser||CHR(0167)||lApp||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); -- aggiornamento nelle CFOpzioni UPDATE CFOpzioni SET Opzione = 'S' WHERE DesOpzione = 'BILMODIFICATO'; COMMIT; -- inserimento del log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118', 'U', 'Aggiornamento della tabella CFBilPre118', lEser||CHR(0167)||lApp||CHR(0167)||lUEB118||CHR(0167)||lNumRiga, lResPresunti, lAssestato, lCodSes, ERRDIAG ); ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; nRet := pkContPerson.fnCFLogIns( 'CFBilPre118', 'U', 'Errore: ' || SUBSTR( SQLERRM, 1, 245 ), lEser||CHR(0167)||lApp||CHR(0167)||lUEB118||CHR(0167)||lNumRiga, lResPresunti, lAssestato, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118Upd', SQLCODE, ERRDIAG ); END fnCFBilPre118Upd; FUNCTION fnCFBilPre118RLkDph ( lEser IN pkType.tyStringa%type, -- CFBilPre118 lApp IN pkType.tyStringa%type, -- CFBilPre118 lUEB118 IN pkType.tyStringa%type, -- CFBilPre118 lNumRiga IN pkType.tyStringa%type, -- CFBilPre118 lCodSes IN pkType.tyStringa%type, -- lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFBilPre118.TmsLock%type; TmpCodSes CFBilPre118.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118RLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFBilPre118 WHERE Eser = lEser AND App = lApp AND UEB118 = lUEB118 AND NumRiga = lNumRiga FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN -- in attesa di una migliore gestione --IF ( lTmsLockIN <> TmpTmsLock ) THEN /* record aggiornato, nel frattempo, da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ -- ROLLBACK; -- RETURN pkUtility.fnError( '5pkContPEG..fnCFBilPrevRLkDph', -212, ERRDIAG); --END IF; UPDATE CFBilPre118 SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND App = lApp AND UEB118 = lUEB118 AND NumRiga = lNumRiga; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFBilPre118' ) AND DesPk = UPPER( lEser||CHR(0167)||lApp||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFBilPre118' ), UPPER( lEser||CHR(0167)||lApp||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFBilPre118' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lApp||CHR(0167)||lUEB118||CHR(0167)||lNumRiga AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPEG.fnCFBilPre118RLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118RLkDph', SQLCODE, ERRDIAG ); END fnCFBilPre118RLkDph; FUNCTION fnCFBilPre118Rls ( lEser IN pkType.tyStringa%type, -- CFBilPre118 lApp IN pkType.tyStringa%type, -- CFBilPre118 lUEB118 IN pkType.tyStringa%type, -- CFBilPre118 lNumRiga IN pkType.tyStringa%type, -- CFBilPre118 lCodSes IN pkType.tyStringa%type, -- CFBilPre118 ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFBilPre118 SET CodSes = 0 WHERE Eser = lEser AND App = lApp AND UEB118 = lUEB118 AND NumRiga = lNumRiga AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118' ) AND DesPk = UPPER( lEser||CHR(0167)||lApp||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPre118Rls', SQLCODE, ERRDIAG ); END fnCFBilPre118Rls; /*************************************************************************************************** * Funzione per la Generazione del Bilancio DL 118/2011 FUNZIONI DELEGATE DALLE REGIONI * ***************************************************************************************************/ -- Autore: Torelli FUNCTION fnGenerazBilFDel118 ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lFlPlur IN pkType.tyStringa%type, -- N = generazione Previsione, S = generazione Pluriennale lFlRicCol IN pkType.tyStringa%type, -- E = Ricalcolo di Entrambe le prime 2 colonne Bilancio ( SOLO se Previsione ), -- Impegni/Accertamente per Eser-2 ed Assestato per Eser-1 -- P = Ricalcolo della sola Prima colonna Bilancio ( SOLO se Previsione ), -- S = Ricalcolo della sola Seconda colonna Bilancio ( SOLO se Previsione ), -- N = Non Ricalcolare le prime 2 colonne Bilancio lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(9); lTimeStamp CFBilPre118FDel.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nIdMenuLavoro pkType.tyStringa%type; nRet number(9); flOpzione CFOpzioni.Opzione%type; sDesMenuLavoro VARCHAR2(2000); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%TYPE; BEGIN -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF lFlPlur = 'N' AND lFlRicCol = 'E' THEN -- RICALCOLA LE PRIME DUE COLONNE -- cancellazione del Bilancio attualmente presente relativo all'esercizio considerato DELETE CFBilPre118FDel WHERE Eser = lEser; END IF; IF lFlPlur = 'N' THEN ------------------------------- Colonna Previsione 1° anno (Inserimento globale e calocolo Terza colonna importi) ----------------------------------- -- CONTROLLO PRESENZA RECORD SELECT COUNT(*) INTO nCount FROM CFBilPre118FDel WHERE Eser = lEser; IF nCount = 0 THEN FOR i IN 1..4 LOOP -- inseriamo gli UEB118 ammessi con relativo numRiga = 1 INSERT INTO CFBilPre118FDel ( Eser, UEB118, NumRiga, Des1, Des1__1, Des1__2, Des1__3, Des2, Des2__1, Des2__2, Des2__3, Des3, Des3__1, Des3__2, Des3__3, Des4, Des4__1, Des4__2, Des4__3, CodSes, TmsLock ) SELECT lEser, VWFRMCFAnagraficaUEB118.UEB118, i, MAX(Des1__0), MAX(Des1__1), MAX(Des1__2), MAX(Des1__3), MAX(Des2__0), MAX(Des2__1), MAX(Des2__2), MAX(Des2__3), MAX(Des3__0), MAX(Des3__1), MAX(Des3__2), MAX(Des3__3), MAX(Des4__0), MAX(Des4__1), MAX(Des4__2), MAX(Des4__3), 0, lTimeStamp FROM VWFRMCFAnagraficaUEB118, CFCapitoliPEG WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App AND VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118 AND CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.FlDelReg = 'S' AND CFCapitoliPEG.Eser >= lEser GROUP BY VWFRMCFAnagraficaUEB118.UEB118; END LOOP; END IF; IF lFlRicCol = 'E' OR lFlRicCol = 'N' THEN -- azzero gli importi di previsione prima del ricalcolo UPDATE CFBilPre118FDel SET Prev1 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 ( previsione di competenza ) FOR recPeg IN ( SELECT UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG WHERE Eser = lEser AND App = 'S' AND FlDelReg = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 4 ( previsione di cassa ) FOR recPeg IN ( SELECT UEB118, NVL( SUM( ImpCassa ), 0 ) Importo FROM CFCapitoliPEG WHERE Eser = lEser AND App = 'S' AND FlDelReg = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 4; END LOOP; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) FOR recPeg IN ( SELECT UEB118, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser AND App = 'S' AND FlDelReg = 'S' AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < lEser GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) FOR recPeg IN ( SELECT UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND FlDelReg = 'S' AND Eser = lEser GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; END IF; ---------------------------------- Colonna Residuo presunto Eser-1 (calcolo PRIMA colonna importi) --------------------------------------- IF lFlRicCol = 'E' OR lFlRicCol = 'P' THEN -- azzero gli importi della seconda colonna UPDATE CFBilPre118FDel SET ResPresunti = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 FOR recPeg IN ( SELECT UEB118, SUM( NVL( CFImpegni.ImpIni, 0 ) ) - NVL( SUM( pkViewForm.fnResTotDettMandPag( 1, CFImpegni.IdImp, NULL, '01/01/'||lEser ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, lEser ) ), 0 ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser < lEser AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND FlDelReg = 'S' AND CFCapitoliPEG.App = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET ResPresunti = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; END IF; ---------------------------------- Colonna Assestato Eser-1 (calcolo SECONDA colonna importi) --------------------------------------- IF lFlRicCol = 'E' OR lFlRicCol = 'S' THEN -- azzero gli importi della seconda colonna UPDATE CFBilPre118FDel SET Assestato = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 ( previsione di competenza ) FOR recPeg IN ( SELECT UEB118, SUM( StanzIni + VarAum - VarDim ) Importo FROM CFCapitoliPEG WHERE Eser = lEser-1 AND App = 'S' AND FlDelReg = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Assestato = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) FOR recPeg IN ( SELECT UEB118, SUM( StanzIni + VarAum - VarDim ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND FlDelReg = 'S' AND Eser = lEser-1 GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Assestato = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; END IF; ELSIF ( lFlPlur = 'S' ) THEN ------------------------------------- Pluriennale -------------------------------------------------- -- azzero gli importi della seconda colonna UPDATE CFBilPre118FDel SET Prev2 = 0, Prev3 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 ( previsione di competenza + 1 ) FOR recPeg IN ( SELECT UEB118, SUM( StanzIni ) Importo FROM CFCapitoliPEG WHERE Eser = lEser + 1 AND App = 'S' AND FlDelReg = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 1 ( previsione di competenza + 2 ) FOR recPeg IN ( SELECT UEB118, SUM( StanzIni ) Importo FROM CFCapitoliPEG WHERE Eser = lEser + 2 AND App = 'S' AND FlDelReg = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) + 1 FOR recPeg IN ( SELECT UEB118, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser + 1 AND FlDelReg = 'S' AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < (lEser + 1) GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) + 1 FOR recPeg IN ( SELECT UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND FlDelReg = 'S' AND Eser = lEser + 1 GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) + 2 FOR recPeg IN ( SELECT UEB118, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser + 2 AND FlDelReg = 'S' AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < (lEser + 2) GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) + 1 FOR recPeg IN ( SELECT UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser + 2 AND FlDelReg = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPre118FDel SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; END IF; ---- previsione COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FDel', 'I', 'Generazione del Bilancio 118/2011 F. Del.', 'Eser:'||lEser||' FlPlur:'||lFlPlur||' FlRicCol:'||lFlRicCol, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FDel', 'I', 'Errore nella Generazione del Bilancio 118/2011 F. Del.', 'Eser:'||lEser||' FlPlur:'||lFlPlur||' FlRicCol:'||lFlRicCol, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBilFDel118', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBilFDel118; /********************************************************************************************** * Funzione per la Gestione del Bilancio di Previsione 118 Funzioni delegate dalle regioni * * Utilizzata nella Predisposizione del Bilancio di Previsione * **********************************************************************************************/ FUNCTION fnCFBilPre118FDelUpd ( lEser IN pkType.tyStringa%type, -- CFBilPre118FDel lUEB118 IN pkType.tyStringa%type, -- CFBilPre118FDel lNumRiga IN pkType.tyStringa%type, -- CFBilPre118FDel lResPresunti IN pkType.tyStringa%type, -- CFBilPre118FDel lAssestato IN pkType.tyStringa%type, -- CFBilPre118FDel lCodSes IN pkType.tyStringa%type, -- CFBilPre118FDel ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilPre118FDel.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FDelUpd', -499, ERRDIAG ); END IF; /* aggiorno il record solo se non si è verificato un blocco di DB o un blocco di tabella 'contemporaneamente' alla richiesta del blocco del record; in questo caso ha priorità il blocco DB o il blocco di tabella */ nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118FDel', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN ROLLBACK; RETURN nRet; ELSIF ( nRet = 0 ) THEN ROLLBACK; -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FDelUpd', -499, ERRDIAG ); END IF; -- aggiornamento del record UPDATE CFBilPre118FDel SET ResPresunti = NVL( lResPresunti, 0 ), Assestato = NVL( lAssestato, 0 ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = lUEB118 AND NumRiga = lNumRiga AND CodSes = lCodSes; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilPre118FDelRLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FDelUpd', -212, ERRDIAG ); END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118FDel' ) AND DesPK = UPPER( lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); -- inserimento del log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FDel', 'U', 'Aggiornamento della tabella CFBilPre118FDel', lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga, lResPresunti, lAssestato, lCodSes, ERRDIAG ); ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FDel', 'U', 'Errore: ' || SUBSTR( SQLERRM, 1, 245 ), lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga, lResPresunti, lAssestato, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FDelUpd', SQLCODE, ERRDIAG ); END fnCFBilPre118FDelUpd; FUNCTION fnCFBilPre118FDelRLkDph ( lEser IN pkType.tyStringa%type, -- CFBilPre118FDel lUEB118 IN pkType.tyStringa%type, -- CFBilPre118FDel lNumRiga IN pkType.tyStringa%type, -- CFBilPre118FDel lCodSes IN pkType.tyStringa%type, -- lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFBilPre118FDel.TmsLock%type; TmpCodSes CFBilPre118FDel.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118FDel', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118FDelRLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFBilPre118FDel WHERE Eser = lEser AND UEB118 = lUEB118 AND NumRiga = lNumRiga FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN -- in attesa di una migliore gestione --IF ( lTmsLockIN <> TmpTmsLock ) THEN /* record aggiornato, nel frattempo, da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ -- ROLLBACK; -- RETURN pkUtility.fnError( '5pkContPEG..fnCFBilPrevRLkDph', -212, ERRDIAG); --END IF; UPDATE CFBilPre118FDel SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND UEB118 = lUEB118 AND NumRiga = lNumRiga; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFBilPre118FDel' ) AND DesPk = UPPER( lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFBilPre118FDel' ), UPPER( lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFBilPre118FDel' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPEG.fnCFBilPre118FDelRLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118FDelRLkDph', SQLCODE, ERRDIAG ); END fnCFBilPre118FDelRLkDph; FUNCTION fnCFBilPre118FDelRls ( lEser IN pkType.tyStringa%type, -- CFBilPre118FDel lUEB118 IN pkType.tyStringa%type, -- CFBilPre118FDel lNumRiga IN pkType.tyStringa%type, -- CFBilPre118FDel lCodSes IN pkType.tyStringa%type, -- CFBilPre118FDel ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFBilPre118FDel SET CodSes = 0 WHERE Eser = lEser AND UEB118 = lUEB118 AND NumRiga = lNumRiga AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118FDel' ) AND DesPk = UPPER( lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPre118FDelRls', SQLCODE, ERRDIAG ); END fnCFBilPre118FDelRls; /*************************************************************************************************** * Funzione per la Generazione del Bilancio DL 118/2011 * * UTILIZZO DI CONTRIBUTI E TRASFERIMENTI DA PARTE DI ORGANISMI COMUNITARI E INTERNAZIONALI * ***************************************************************************************************/ -- Autore: Torelli FUNCTION fnGenerazBilFondiUE118 ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lFlPlur IN pkType.tyStringa%type, -- N = generazione Previsione, S = generazione Pluriennale lFlRicCol IN pkType.tyStringa%type, -- E = Ricalcolo di Entrambe le prime 2 colonne Bilancio ( SOLO se Previsione ), -- Impegni/Accertamente per Eser-2 ed Assestato per Eser-1 -- P = Ricalcolo della sola Prima colonna Bilancio ( SOLO se Previsione ), -- S = Ricalcolo della sola Seconda colonna Bilancio ( SOLO se Previsione ), -- N = Non Ricalcolare le prime 2 colonne Bilancio lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(9); lTimeStamp CFBilPrev118FondiUE.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nIdMenuLavoro pkType.tyStringa%type; nRet number(9); flOpzione CFOpzioni.Opzione%type; sDesMenuLavoro VARCHAR2(2000); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%TYPE; BEGIN -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF lFlPlur = 'N' AND lFlRicCol = 'E' THEN -- RICALCOLA LE PRIME DUE COLONNE -- cancellazione del Bilancio attualmente presente relativo all'esercizio considerato DELETE CFBilPrev118FondiUE WHERE Eser = lEser; END IF; IF lFlPlur = 'N' THEN ------------------------------- Colonna Previsione 1° anno (Inserimento globale e calocolo Terza colonna importi) ----------------------------------- -- CONTROLLO PRESENZA RECORD SELECT COUNT(*) INTO nCount FROM CFBilPrev118FondiUE WHERE Eser = lEser; IF nCount = 0 THEN FOR i IN 1..4 LOOP -- inseriamo gli UEB118 ammessi con relativo numRiga = 1 INSERT INTO CFBilPrev118FondiUE ( Eser, UEB118, NumRiga, Des1, Des1__1, Des1__2, Des1__3, Des2, Des2__1, Des2__2, Des2__3, Des3, Des3__1, Des3__2, Des3__3, Des4, Des4__1, Des4__2, Des4__3, CodSes, TmsLock ) SELECT lEser, VWFRMCFAnagraficaUEB118.UEB118, i, MAX(Des1__0), MAX(Des1__1), MAX(Des1__2), MAX(Des1__3), MAX(Des2__0), MAX(Des2__1), MAX(Des2__2), MAX(Des2__3), MAX(Des3__0), MAX(Des3__1), MAX(Des3__2), MAX(Des3__3), MAX(Des4__0), MAX(Des4__1), MAX(Des4__2), MAX(Des4__3), 0, lTimeStamp FROM VWFRMCFAnagraficaUEB118, CFCapitoliPEG WHERE VWFRMCFAnagraficaUEB118.App = CFCapitoliPEG.App AND VWFRMCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118 AND CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.FlFondiCom = 'S' AND CFCapitoliPEG.Eser >= lEser GROUP BY VWFRMCFAnagraficaUEB118.UEB118; END LOOP; END IF; IF lFlRicCol = 'E' OR lFlRicCol = 'N' THEN -- azzero gli importi di previsione prima del ricalcolo UPDATE CFBilPrev118FondiUE SET Prev1 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 ( previsione di competenza ) FOR recPeg IN ( SELECT UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG WHERE Eser = lEser AND App = 'S' AND FlFondiCom = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 4 ( previsione di cassa ) FOR recPeg IN ( SELECT UEB118, NVL( SUM( ImpCassa ), 0 ) Importo FROM CFCapitoliPEG WHERE Eser = lEser AND App = 'S' AND FlFondiCom = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 4; END LOOP; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) FOR recPeg IN ( SELECT UEB118, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser AND App = 'S' AND FlFondiCom = 'S' AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < lEser GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) FOR recPeg IN ( SELECT UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND FlFondiCom = 'S' AND Eser = lEser GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Prev1 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; END IF; ---------------------------------- Colonna Residuo presunto Eser-1 (calcolo PRIMA colonna importi) --------------------------------------- IF lFlRicCol = 'E' OR lFlRicCol = 'P' THEN -- azzero gli importi della seconda colonna UPDATE CFBilPrev118FondiUE SET ResPresunti = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 FOR recPeg IN ( SELECT UEB118, SUM( NVL( CFImpegni.ImpIni, 0 ) ) - NVL( SUM( pkViewForm.fnResTotDettMandPag( 1, CFImpegni.IdImp, NULL, '01/01/'||lEser ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, lEser ) ), 0 ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser < lEser AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND FlFondiCom = 'S' AND CFCapitoliPEG.App = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET ResPresunti = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; END IF; ---------------------------------- Colonna Assestato Eser-1 (calcolo SECONDA colonna importi) --------------------------------------- IF lFlRicCol = 'E' OR lFlRicCol = 'S' THEN -- azzero gli importi della seconda colonna UPDATE CFBilPrev118FondiUE SET Assestato = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 ( previsione di competenza ) FOR recPeg IN ( SELECT UEB118, SUM( StanzIni + VarAum - VarDim ) Importo FROM CFCapitoliPEG WHERE Eser = lEser-1 AND App = 'S' AND FlFondiCom = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Assestato = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) FOR recPeg IN ( SELECT UEB118, SUM( StanzIni + VarAum - VarDim ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND FlFondiCom = 'S' AND Eser = lEser-1 GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Assestato = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; END IF; ELSIF ( lFlPlur = 'S' ) THEN ------------------------------------- Pluriennale -------------------------------------------------- -- azzero gli importi della seconda colonna UPDATE CFBilPrev118FondiUE SET Prev2 = 0, Prev3 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- Aggiornamento del numRiga = 1 ( previsione di competenza + 1 ) FOR recPeg IN ( SELECT UEB118, SUM( StanzIni ) Importo FROM CFCapitoliPEG WHERE Eser = lEser + 1 AND App = 'S' AND FlFondiCom = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 1 ( previsione di competenza + 2 ) FOR recPeg IN ( SELECT UEB118, SUM( StanzIni ) Importo FROM CFCapitoliPEG WHERE Eser = lEser + 2 AND App = 'S' AND FlFondiCom = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 1; END LOOP; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) + 1 FOR recPeg IN ( SELECT UEB118, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser + 1 AND FlFondiCom = 'S' AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < (lEser + 1) GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) + 1 FOR recPeg IN ( SELECT UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND FlFondiCom = 'S' AND Eser = lEser + 1 GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Prev2 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; -- Aggiornamento del numRiga = 2 ( di cui già impegnato ) + 2 FOR recPeg IN ( SELECT UEB118, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser + 2 AND FlFondiCom = 'S' AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < (lEser + 2) GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 2; END LOOP; -- Aggiornamento del numRiga = 3 ( di cui fondo pluriennale vincolato ) + 1 FOR recPeg IN ( SELECT UEB118, NVL( SUM( StanzIni ), 0 ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser + 2 AND FlFondiCom = 'S' GROUP BY UEB118 ) LOOP UPDATE CFBilPrev118FondiUE SET Prev3 = recPeg.Importo, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = recPeg.UEB118 AND NumRiga = 3; END LOOP; END IF; ---- previsione COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPrev118FondiUE', 'I', 'Generazione del Bilancio 118/2011 F. Del.', 'Eser:'||lEser||' FlPlur:'||lFlPlur||' FlRicCol:'||lFlRicCol, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPrev118FondiUE', 'I', 'Errore nella Generazione del Bilancio 118/2011 F. Del.', 'Eser:'||lEser||' FlPlur:'||lFlPlur||' FlRicCol:'||lFlRicCol, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBilFondiUE118', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBilFondiUE118; /********************************************************************************************** * Funzione per la Gestione del Bilancio di Previsione 118 * * UTILIZZO DI CONTRIBUTI E TRASFERIMENTI DA PARTE DI ORGANISMI COMUNITARI E INTERNAZIONALI * * Utilizzata nella Predisposizione del Bilancio di Previsione * **********************************************************************************************/ FUNCTION fnCFBilPrev118FondiUEUpd ( lEser IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lUEB118 IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lNumRiga IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lResPresunti IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lAssestato IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lCodSes IN pkType.tyStringa%type, -- CFBilPrev118FondiUE ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilPrev118FondiUE.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPrev118FondiUEUpd', -499, ERRDIAG ); END IF; /* aggiorno il record solo se non si è verificato un blocco di DB o un blocco di tabella 'contemporaneamente' alla richiesta del blocco del record; in questo caso ha priorità il blocco DB o il blocco di tabella */ nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPrev118FondiUE', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN ROLLBACK; RETURN nRet; ELSIF ( nRet = 0 ) THEN ROLLBACK; -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPrev118FondiUEUpd', -499, ERRDIAG ); END IF; -- aggiornamento del record UPDATE CFBilPrev118FondiUE SET ResPresunti = NVL( lResPresunti, 0 ), Assestato = NVL( lAssestato, 0 ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND UEB118 = lUEB118 AND NumRiga = lNumRiga AND CodSes = lCodSes; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilPrev118FondiUERLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPrev118FondiUEUpd', -212, ERRDIAG ); END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPrev118FondiUE' ) AND DesPK = UPPER( lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); -- inserimento del log nRet := pkContPerson.fnCFLogIns( 'CFBilPrev118FondiUE', 'U', 'Aggiornamento della tabella CFBilPrev118FondiUE', lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga, lResPresunti, lAssestato, lCodSes, ERRDIAG ); ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; nRet := pkContPerson.fnCFLogIns( 'CFBilPrev118FondiUE', 'U', 'Errore: ' || SUBSTR( SQLERRM, 1, 245 ), lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga, lResPresunti, lAssestato, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPrev118FondiUEUpd', SQLCODE, ERRDIAG ); END fnCFBilPrev118FondiUEUpd; FUNCTION fnCFBilPrev118FondiUERLkDph ( lEser IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lUEB118 IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lNumRiga IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lCodSes IN pkType.tyStringa%type, -- lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFBilPrev118FondiUE.TmsLock%type; TmpCodSes CFBilPrev118FondiUE.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPrev118FondiUE', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPrev118FondiUERLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFBilPrev118FondiUE WHERE Eser = lEser AND UEB118 = lUEB118 AND NumRiga = lNumRiga FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN -- in attesa di una migliore gestione --IF ( lTmsLockIN <> TmpTmsLock ) THEN /* record aggiornato, nel frattempo, da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ -- ROLLBACK; -- RETURN pkUtility.fnError( '5pkContPEG..fnCFBilPrevRLkDph', -212, ERRDIAG); --END IF; UPDATE CFBilPrev118FondiUE SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND UEB118 = lUEB118 AND NumRiga = lNumRiga; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFBilPrev118FondiUE' ) AND DesPk = UPPER( lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFBilPrev118FondiUE' ), UPPER( lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFBilPrev118FondiUE' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPEG.fnCFBilPrev118FondiUERLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPrev118FondiUERLkDph', SQLCODE, ERRDIAG ); END fnCFBilPrev118FondiUERLkDph; FUNCTION fnCFBilPrev118FondiUERls ( lEser IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lUEB118 IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lNumRiga IN pkType.tyStringa%type, -- CFBilPrev118FondiUE lCodSes IN pkType.tyStringa%type, -- CFBilPrev118FondiUE ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFBilPrev118FondiUE SET CodSes = 0 WHERE Eser = lEser AND UEB118 = lUEB118 AND NumRiga = lNumRiga AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPrev118FondiUE' ) AND DesPk = UPPER( lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPrev118FondiUERls', SQLCODE, ERRDIAG ); END fnCFBilPrev118FondiUERls; /*************************************************************************************************** * Funzione per la Generazione della stampa Allegato n.7-f - Fondo crediti di dubbia esigibilità * ***************************************************************************************************/ -- Autore: Torelli FUNCTION fnGenerazBil118FSC ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(9); lTimeStamp CFBilPre118FSC.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; nIdMenuLavoro pkType.tyStringa%type; nRet number(9); flOpzione CFOpzioni.Opzione%type; sDesMenuLavoro VARCHAR2(2000); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%TYPE; nReversato number(15,2) :=0; nAccertato number(15,2) :=0; nSommaRapp number(15,2) :=0; nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnGenerazBil118FSC', -499, ERRDIAG ); END IF; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; -- cancellazione della tabella DELETE CFBilPre118FSC WHERE Eser = lEser; -- inseriamo gli UEB118 (per Tipologia) con relativo numRiga = 1 per i 3 anni FOR i IN 1..3 LOOP INSERT INTO CFBilPre118FSC ( Eser, NumEserPlur, UEB118, NumRiga, StanzIni, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, i, CodSTR1||CodSTR2||'00', 1, NVL(SUM( StanzIni ), 0), MAX( 'Tipologia '||Codice2||': '||Des2__0 ), DECODE( sSeparat, null, null, MAX( 'Typ '||Codice2||': '||Des2__1 ) ), DECODE( sSeparat, null, null, MAX( Codice2||': '||Des2__2 ) ), 0, lTimeStamp FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'E' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.Eser(+) = ( (lEser-1) + i ) AND Codice1 <= 5 GROUP BY CodSTR1, codSTR2; END LOOP; -- inseriamo per gli UEB118 da 1010100 inferiori a 1010400 (se presente) l'accertati per cassa, numRiga = 2, per i 3 anni FOR i IN 1..3 LOOP INSERT INTO CFBilPre118FSC ( Eser, NumEserPlur, UEB118, NumRiga, StanzIni, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, i, CodSTR1|| CodSTR2||'00', 2, NVL( SUM(ImpIni), 0 ), 'di cui accertati per cassa sulla base del principio contabile 3.7', DECODE( sSeparat, null, null, 'die etablierten für Strömungen auf der Grundlage der Rechnungslegungsvorschriften 3.7' ), null, 0, lTimeStamp FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG, CFAccertamenti WHERE vwfrmCFAnagraficaUEB118.App = 'E' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.IdCapitolo = CFAccertamenti.IdCapitolo(+) AND CFAccertamenti.Eser(+) = ( (lEser-1) + i ) AND CODice1 = 1 AND Codice2 < 104 GROUP BY CodSTR1, codSTR2; END LOOP; -- inseriamo per l'UEB118 2010500 numRiga = 2, per i 3 anni FOR i IN 1..3 LOOP INSERT INTO CFBilPre118FSC ( Eser, NumEserPlur, UEB118, NumRiga, StanzIni, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, i, 2010500, 2, NVL(SUM( StanzIni ), 0), 'Trasferimenti correnti dall''Unione Europea', DECODE( sSeparat, null, null, 'Laufende Übertragungen von der Europäischen Union' ), null, 0, lTimeStamp FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'E' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.Eser(+) = ( (lEser-1) + i ) AND vwfrmCFAnagraficaUEB118.UEB118 = 2010501 GROUP BY vwfrmCFAnagraficaUEB118.UEB118; END LOOP; -- inseriamo per l'UEB118 4020000 numRiga = 2, per i 3 anni FOR i IN 1..3 LOOP INSERT INTO CFBilPre118FSC ( Eser, NumEserPlur, UEB118, NumRiga, StanzIni, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, i, 4020000, 2, NVL(SUM( StanzIni ), 0), MAX( Des2__0||' da amministrazioni pubbliche' ), DECODE( sSeparat, null, null, MAX( Des2__1||'von der Regierung' ) ), null, 0, lTimeStamp FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'E' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.Eser(+) = ( (lEser-1) + i ) AND vwfrmCFAnagraficaUEB118.UEB118 IN ( 4020100, 4020600 ) GROUP BY Codice1, Codice2; END LOOP; -- inseriamo per l'UEB118 4020000 numRiga = 3, per i 3 anni FOR i IN 1..3 LOOP INSERT INTO CFBilPre118FSC ( Eser, NumEserPlur, UEB118, NumRiga, StanzIni, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, i, 4020000, 3, NVL(SUM( StanzIni ), 0), MAX( Des2__0||' da EU' ), DECODE( sSeparat, null, null, MAX( Des2__1||' EU' ) ), null, 0, lTimeStamp FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'E' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.Eser(+) = ( (lEser-1) + i ) AND vwfrmCFAnagraficaUEB118.UEB118 = 4020500 GROUP BY vwfrmCFAnagraficaUEB118.UEB118; END LOOP; -- inseriamo per l'UEB118 4030000 numRiga = 2, per i 3 anni FOR i IN 1..3 LOOP INSERT INTO CFBilPre118FSC ( Eser, NumEserPlur, UEB118, NumRiga, StanzIni, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, i, 4030000, 2, NVL(SUM( StanzIni ), 0), MAX( Des2__0||' da amministrazioni pubbliche' ), DECODE( sSeparat, null, null, MAX( Des2__1||'von der Regierung' ) ), null, 0, lTimeStamp FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'E' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.Eser(+) = ( (lEser-1) + i ) AND vwfrmCFAnagraficaUEB118.UEB118 IN ( 4030100, 4030600, 4031600 ) GROUP BY Codice1, Codice2; END LOOP; -- inseriamo per l'UEB118 4030000 numRiga = 3, per i 3 anni FOR i IN 1..3 LOOP INSERT INTO CFBilPre118FSC ( Eser, NumEserPlur, UEB118, NumRiga, StanzIni, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, i, 4030000, 3, NVL(SUM( StanzIni ), 0), MAX( Des2__0||' da EU' ), DECODE( sSeparat, null, null, MAX( Des2__1||' EU' ) ), null, 0, lTimeStamp FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'E' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.Eser(+) = ( (lEser-1) + i ) AND vwfrmCFAnagraficaUEB118.UEB118 IN ( 4030500, 4031000, 4032000 ) GROUP BY Codice1, Codice2; END LOOP; -- inseriamo gli UEB118 da 1010100 inferiori a 1010400 (se presente) la differenza delle precedenti 2 righe, numRiga = 3, per i 3 anni INSERT INTO CFBilPre118FSC ( Eser, NumEserPlur, UEB118, NumRiga, StanzIni, FlModificab, CodSes, TmsLock ) SELECT lEser, NumEserPlur, UEB118, DECODE( UEB118, 4030000, 4, 4020000, 4, 3 ), SUM( DECODE( NumRiga, 1, StanzIni, -StanzIni ) ), 'S', 0, lTimeStamp FROM CFBilPre118FSC WHERE Eser = lEser AND ( UEB118 IN ( 4030000, 4020000, 2010500 ) OR UEB118 < 1010400 ) GROUP BY NumEserPlur, UEB118; -- Definiamo le descrizioni sui totali appena messi UPDATE CFBilPre118FSC b SET Des = ( SELECT Des||' non accertati per cassa' FROM CFBilPre118FSC a WHERE a.UEB118 = b.UEB118 AND a.Eser = b.Eser AND NumRiga = 1 AND a.NumEserPlur = b.NumEserPlur ), Des__1 = ( SELECT DECODE( sSeparat, null, null, Des__1||' nicht gegen Bargeld gegründet' ) FROM CFBilPre118FSC a WHERE a.UEB118 = b.UEB118 AND a.Eser = b.Eser AND NumRiga = 1 AND a.NumEserPlur = b.NumEserPlur ), Des__2 = ( SELECT DECODE( sSeparat, null, null, Des__2 ) FROM CFBilPre118FSC a WHERE a.UEB118 = b.UEB118 AND a.Eser = b.Eser AND NumRiga = 1 AND a.NumEserPlur = b.NumEserPlur ) WHERE Eser = lEser AND NumRiga = 3 AND UEB118 < 1010400; UPDATE CFBilPre118FSC b SET Des = 'Tipologia 105: Trasferimenti correnti dal Resto del Mondo', Des__1 = DECODE( sSeparat, null, null,'Typ 105: Laufende Übertragungen aus dem Rest der Welt' ) WHERE Eser = lEser AND NumRiga = 3 AND UEB118 = 2010500; UPDATE CFBilPre118FSC b SET Des = 'Tipologia 200: Contributi agli investimenti al netto dei contributi da PA e da UE', Des__1 = DECODE( sSeparat, null, null, 'Typ 200: Beiträge zu Investitionen, abzüglich der Beiträge der EU und PA' ) WHERE Eser = lEser AND NumRiga = 4 AND UEB118 = 4020000; UPDATE CFBilPre118FSC b SET Des = 'Tipologia 300: Trasferimenti in conto capitale al netto dei trasferimenti da PA e da UE', Des__1 = DECODE( sSeparat, null, null, 'Typ 300: Vermögensübertragungen, abzüglich Transfers PA und EU' ) WHERE Eser = lEser AND NumRiga = 4 AND UEB118 = 4030000; -- settiamo le righe modificabili UPDATE CFBilPre118FSC b SET FlModificab = 'S' WHERE Eser = lEser AND NumRiga = 1 AND ( SUBSTR( UEB118, 1, 1 ) IN ( 3, 5 ) OR UEB118 IN ( 1010400, 1030100, 1030200, 2010100, 2010200, 2010300, 2010400, 4010000, 4040000, 4050000 ) ); -- Calcoliamo il restante delle colonne FOR recCur in ( SELECT UEB118, Stanzini FROM CFBilPre118FSC WHERE Eser = lEser AND NumEserPlur = 1 AND FlModificab = 'S' AND ( UEB118 <= 3050000 OR UEB118 >= 5010000 ) AND UEB118 <> 2010500 ) LOOP nSommaRapp := 0; FOR i IN (lEser-5)..(lEser-1) LOOP -- reversato in competenza /* SELECT NVL( SUM(pkViewForm.fnTotReversaliCapDta( CFCapitoliPEG.IdCapitolo,'31/12/'||i )), 0 ) INTO nReversato FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'E' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118 AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App AND CFCapitoliPEG.Eser = i AND CodSTR1||CodSTR2 = SUBSTR(recCur.UEB118,1,5); */ SELECT NVL( SUM( CFDettReversali.ImpIni ), 0 ) INTO nReversato FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser = i AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFAccertamenti.Eser <= i AND vwfrmCFAnagraficaUEB118.App = 'E' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118 AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App AND CodSTR1||CodSTR2 = SUBSTR(recCur.UEB118,1,5); -- Accertato in competenza SELECT NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, (lEser + 1) ) ), 0 ) INTO nAccertato FROM CFCapitoliPEG, CFAccertamenti, vwfrmCFAnagraficaUEB118 WHERE CFAccertamenti.Eser = i AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND vwfrmCFAnagraficaUEB118.App = 'E' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118 AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App AND CodSTR1||CodSTR2 = SUBSTR(recCur.UEB118,1,5); IF nAccertato > 0 THEN nSommaRapp := nSommaRapp + (nReversato / nAccertato); END IF; END LOOP; UPDATE CFBilPre118FSC SET FondoObb = (DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) )*Stanzini)/100, PercAccant = DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) ), FondoEffet = (DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) )*Stanzini)/100 WHERE Eser = lEser AND UEB118 = recCur.UEB118 AND FlModificab = 'S'; END LOOP; -- Calcoliamo il restante delle colonne per UEB118 2010500 nSommaRapp := 0; FOR i IN (lEser-5)..(lEser-1) LOOP -- reversato in competenza /* SELECT NVL( SUM(pkViewForm.fnTotReversaliCapDta( CFCapitoliPEG.IdCapitolo,'31/12/'||i )), 0 ) INTO nReversato FROM CFCapitoliPEG WHERE CFCapitoliPEG.App = 'E' AND CFCapitoliPEG.Eser = i AND CFCapitoliPEG.UEB118 = '2010502'; */ SELECT NVL( SUM( CFDettReversali.ImpIni ), 0 ) INTO nReversato FROM CFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser = i AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFAccertamenti.Eser <= i AND CFCapitoliPEG.App = 'E' AND CFCapitoliPEG.UEB118 = '2010502'; -- Accertato in competenza SELECT NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, (lEser + 1) ) ), 0 ) INTO nAccertato FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser = i AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.UEB118 = '2010502'; IF nAccertato > 0 THEN nSommaRapp := nSommaRapp + (nReversato / nAccertato); END IF; END LOOP; UPDATE CFBilPre118FSC SET FondoObb = (DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) )*Stanzini)/100, PercAccant = DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) ), FondoEffet = (DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) )*Stanzini)/100 WHERE Eser = lEser AND UEB118 = '2010500' AND FlModificab = 'S'; -- Calcoliamo il restante delle colonne per UEB118 4020000 nSommaRapp := 0; FOR i IN (lEser-5)..(lEser-1) LOOP -- reversato in competenza /* SELECT NVL( SUM(pkViewForm.fnTotReversaliCapDta( CFCapitoliPEG.IdCapitolo,'31/12/'||i )), 0 ) INTO nReversato FROM CFCapitoliPEG WHERE App = 'E' AND Eser = i AND SUBSTR(UEB118,1,3) = '402' AND UEB118 NOT IN ( 4020100, 4020600, 4020500 ); */ SELECT NVL( SUM( CFDettReversali.ImpIni ), 0 ) INTO nReversato FROM CFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser = i AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFAccertamenti.Eser <= i AND CFCapitoliPEG.App = 'E' AND CFCapitoliPEG.UEB118 NOT IN ( 4020100, 4020600, 4020500 ); -- Accertato in competenza SELECT NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, (lEser + 1) ) ), 0 ) INTO nAccertato FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser = i AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,3) = '402' AND UEB118 NOT IN ( 4020100, 4020600, 4020500 ); IF nAccertato > 0 THEN nSommaRapp := nSommaRapp + (nReversato / nAccertato); END IF; END LOOP; UPDATE CFBilPre118FSC SET FondoObb = (DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) )*Stanzini)/100, PercAccant = DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) ), FondoEffet = (DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) )*Stanzini)/100 WHERE Eser = lEser AND UEB118 = '4020000' AND FlModificab = 'S'; -- Calcoliamo il restante delle colonne per UEB118 4030000 nSommaRapp := 0; FOR i IN (lEser-5)..(lEser-1) LOOP -- reversato in competenza /* SELECT NVL( SUM(pkViewForm.fnTotReversaliCapDta( CFCapitoliPEG.IdCapitolo,'31/12/'||i )), 0 ) INTO nReversato FROM CFCapitoliPEG WHERE App = 'E' AND Eser = i AND SUBSTR(UEB118,1,3) = '403' AND UEB118 NOT IN ( 4030100, 4030600, 4031600, 4030500, 4031000, 4032000 ); */ SELECT NVL( SUM( CFDettReversali.ImpIni ), 0 ) INTO nReversato FROM CFCapitoliPEG, CFDettReversali, CFAccertamenti, CFReversali WHERE CFReversali.Eser = i AND CFReversali.DtaAnn IS NULL AND CFDettReversali.IdRev = CFReversali.IdRev AND CFDettReversali.IdAcc = CFAccertamenti.IdAcc AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFAccertamenti.Eser <= i AND CFCapitoliPEG.App = 'E' AND CFCapitoliPEG.UEB118 NOT IN ( 4030100, 4030600, 4031600, 4030500, 4031000, 4032000 ); -- Accertato in competenza SELECT NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, (lEser + 1) ) ), 0 ) INTO nAccertato FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser = i AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND SUBSTR(UEB118,1,3) = '403' AND UEB118 NOT IN ( 4030100, 4030600, 4031600, 4030500, 4031000, 4032000 ); IF nAccertato > 0 THEN nSommaRapp := nSommaRapp + (nReversato / nAccertato); END IF; END LOOP; UPDATE CFBilPre118FSC SET FondoObb = (DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) )*Stanzini)/100, PercAccant = DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) ), FondoEffet = (DECODE( sign( 100 - ((nSommaRapp/5)*100) ),-1, 0, ( 100 - ((nSommaRapp/5)*100) ) )*Stanzini)/100 WHERE Eser = lEser AND UEB118 = '4030000' AND FlModificab = 'S'; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FSC', 'I', 'Generazione Fondo Crediti di dubbia esigibilita'' ', 'Eser:'||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FSC', 'I', 'Errore nella Generazione Fondo Crediti di dubbia esigibilita'' ', 'Eser:'||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBil118FSC', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBil118FSC; /********************************************************************************************** * Funzione per la Gestione del Fondo Crediti di dubbia esigibilita' * * Utilizzata nella Predisposizione del Bilancio di Previsione * **********************************************************************************************/ FUNCTION fnCFBilPre118FSCUpd ( lEser IN pkType.tyStringa%type, -- CFBilPre118FSC lNumEserPlur IN pkType.tyStringa%type, -- CFBilPre118FSC lUEB118 IN pkType.tyStringa%type, -- CFBilPre118FSC lNumRiga IN pkType.tyStringa%type, -- CFBilPre118FSC lStanzini IN pkType.tyStringa%type, -- CFBilPre118FSC lFondoObb IN pkType.tyStringa%type, -- CFBilPre118FSC lPercAccant IN pkType.tyStringa%type, -- CFBilPre118FSC lFondoEffet IN pkType.tyStringa%type, -- CFBilPre118FSC lCodSes IN pkType.tyStringa%type, -- CFBilPre118FSC ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilPre118FSC.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); rowFSC CFBilPre118FSC%rowType; BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FSCUpd', -499, ERRDIAG ); END IF; -- selecziono i dati necessari al cambiamento SELECT * INTO rowFSC FROM CFBilPre118FSC WHERE Eser = lEser AND NumEserPlur = lNumEserPlur AND UEB118 = lUEB118 AND NumRiga = lNumRiga; /* aggiorno il record solo se non si è verificato un blocco di DB o un blocco di tabella 'contemporaneamente' alla richiesta del blocco del record; in questo caso ha priorità il blocco DB o il blocco di tabella */ nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118FSC', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN ROLLBACK; RETURN nRet; ELSIF ( nRet = 0 ) THEN ROLLBACK; -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FSCUpd', -499, ERRDIAG ); END IF; -- aggiornamento del record UPDATE CFBilPre118FSC SET --FondoObb = ( lPercAccant * rowFSC.Stanzini ) / 100, Stanzini = lStanzini, FondoObb = lFondoObb, PercAccant = lPercAccant, FondoEffet = lFondoEffet, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND NumEserPlur = lNumEserPlur AND UEB118 = lUEB118 AND NumRiga = lNumRiga; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilPre118FSCRLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FSCUpd', -212, ERRDIAG ); END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118FSC' ) AND DesPK = UPPER( lEser||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); -- inserimento del log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FSC', 'U','Aggiornamento della tabella CFBilPre118FSC', lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lUEB118||CHR(0167)||lNumRiga, lPercAccant, NULL, lCodSes, ERRDIAG ); ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FSC', 'U', 'Errore: ' || SUBSTR( SQLERRM, 1, 245 ), lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lUEB118||CHR(0167)||lNumRiga, lPercAccant, NULL, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FSCUpd', SQLCODE, ERRDIAG ); END fnCFBilPre118FSCUpd; FUNCTION fnCFBilPre118FSCRLkDph ( lEser IN pkType.tyStringa%type, -- CFBilPre118FSC lNumEserPlur IN pkType.tyStringa%type, -- CFBilPre118FSC lUEB118 IN pkType.tyStringa%type, -- CFBilPre118FSC lNumRiga IN pkType.tyStringa%type, -- CFBilPre118FSC lCodSes IN pkType.tyStringa%type, -- lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFBilPre118FSC.TmsLock%type; TmpCodSes CFBilPre118FSC.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118FSC', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118FSCRLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFBilPre118FSC WHERE Eser = lEser AND NumEserPlur = lNumEserPlur AND UEB118 = lUEB118 AND NumRiga = lNumRiga FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN -- in attesa di una migliore gestione --IF ( lTmsLockIN <> TmpTmsLock ) THEN /* record aggiornato, nel frattempo, da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ -- ROLLBACK; -- RETURN pkUtility.fnError( '5pkContPEG..fnCFBilPrevRLkDph', -212, ERRDIAG); --END IF; UPDATE CFBilPre118FSC SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND NumEserPlur = lNumEserPlur AND UEB118 = lUEB118 AND NumRiga = lNumRiga; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFBilPre118FSC' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFBilPre118FSC' ), UPPER( lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFBilPre118FSC' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lUEB118||CHR(0167)||lNumRiga AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPEG.fnCFBilPre118FSCRLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118FSCRLkDph', SQLCODE, ERRDIAG ); END fnCFBilPre118FSCRLkDph; FUNCTION fnCFBilPre118FSCRls ( lEser IN pkType.tyStringa%type, -- CFBilPre118FSC lNumEserPlur IN pkType.tyStringa%type, -- CFBilPre118FSC lUEB118 IN pkType.tyStringa%type, -- CFBilPre118FSC lNumRiga IN pkType.tyStringa%type, -- CFBilPre118FSC lCodSes IN pkType.tyStringa%type, -- CFBilPre118FSC ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFBilPre118FSC SET CodSes = 0 WHERE Eser = lEser AND NumEserPlur = lNumEserPlur AND UEB118 = lUEB118 AND NumRiga = lNumRiga AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118FSC' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lUEB118||CHR(0167)||lNumRiga ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPre118FSCRls', SQLCODE, ERRDIAG ); END fnCFBilPre118FSCRls; /*************************************************************************************************** * Funzione per la Generazione della stampa per Piano dei conti * ***************************************************************************************************/ -- Autore: Torelli FUNCTION fnGenerazBil118PFin ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(9); lTimeStamp CFBilPre118FSC.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; nIdMenuLavoro pkType.tyStringa%type; nRet number(9); flOpzione CFOpzioni.Opzione%type; sDesMenuLavoro VARCHAR2(2000); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%TYPE; nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato /* IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnGenerazBil118PFin', -499, ERRDIAG ); END IF; */ -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; -- cancellazione della tabella DELETE CFBilPre118PFin WHERE Eser = lEser; COMMIT; -- inseriamo il PRIMO livello INSERT INTO CFBilPre118PFin ( Eser, App, Codice, CodMisProgr, Numlivello, CodPadre, CodEsteso, Stanziato, Cassa, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, MAX(VWFRMCFDesPianoFin.App), VWFRMCFDesPianoFin.IdDesPFin, '0000', 1, null, MAX(CodEsteso), NVL(SUM(Stanzini),0), NVL(SUM(ImpCassa),0), MAX(Des__0), MAX(Des__1), MAX(Des__2), 0, lTimeStamp FROM VWFRMCFDesPianoFin, CFCapitoliPEG WHERE VWFRMCFDesPianoFin.App = CFCapitoliPEG.App(+) AND SUBSTR(VWFRMCFDesPianoFin.Codice,1,2) = SUBSTR(CFCapitoliPEG.IdDesPFin(+),1,2) AND CFCapitoliPEG.Eser(+) = lEser AND Numlivello = 1 GROUP BY VWFRMCFDesPianoFin.IdDesPFin; -- inseriamo il SECONDO livello INSERT INTO CFBilPre118PFin ( Eser, App, Codice, CodMisProgr, Numlivello, CodPadre, CodEsteso, Stanziato, Cassa, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, MAX(VWFRMCFDesPianoFin.App), VWFRMCFDesPianoFin.IdDesPFin, '0000', 2, MAX(VWFRMCFDesPianoFin.idpadre), MAX(CodEsteso), NVL(SUM(Stanzini),0), NVL(SUM(ImpCassa),0), MAX(Des__0), MAX(Des__1), MAX(Des__2), 0, lTimeStamp FROM VWFRMCFDesPianoFin, CFCapitoliPEG WHERE VWFRMCFDesPianoFin.App = CFCapitoliPEG.App(+) AND SUBSTR(VWFRMCFDesPianoFin.Codice,1,4) = SUBSTR(CFCapitoliPEG.IdDesPFin(+),1,4) AND CFCapitoliPEG.Eser(+) = lEser AND Numlivello = 2 GROUP BY VWFRMCFDesPianoFin.IdDesPFin; -- inseriamo il TERZO livello INSERT INTO CFBilPre118PFin ( Eser, App, Codice, CodMisProgr, Numlivello, CodPadre, CodEsteso, Stanziato, Cassa, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, MAX(VWFRMCFDesPianoFin.App), VWFRMCFDesPianoFin.IdDesPFin, '0000', 3, MAX(VWFRMCFDesPianoFin.idpadre), MAX(CodEsteso), NVL(SUM(Stanzini),0), NVL(SUM(ImpCassa),0), MAX(Des__0), MAX(Des__1), MAX(Des__2), 0, lTimeStamp FROM VWFRMCFDesPianoFin, CFCapitoliPEG WHERE VWFRMCFDesPianoFin.App = CFCapitoliPEG.App(+) AND SUBSTR(VWFRMCFDesPianoFin.Codice,1,6) = SUBSTR(CFCapitoliPEG.IdDesPFin(+),1,6) AND CFCapitoliPEG.Eser(+) = lEser AND Numlivello = 3 GROUP BY VWFRMCFDesPianoFin.IdDesPFin; -- inseriamo il QUARTO livello ENTRATA INSERT INTO CFBilPre118PFin ( Eser, App, Codice, CodMisProgr, Numlivello, CodPadre, CodEsteso, Stanziato, Cassa, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, MAX(VWFRMCFDesPianoFin.App), VWFRMCFDesPianoFin.IdDesPFin, '0000', 4, MAX(VWFRMCFDesPianoFin.idpadre), MAX(CodEsteso), NVL(SUM(Stanzini),0), NVL(SUM(ImpCassa),0), MAX(Des__0), MAX(Des__1), MAX(Des__2), 0, lTimeStamp FROM VWFRMCFDesPianoFin, CFCapitoliPEG WHERE VWFRMCFDesPianoFin.App = CFCapitoliPEG.App(+) AND SUBSTR(VWFRMCFDesPianoFin.Codice,1,8) = SUBSTR(CFCapitoliPEG.IdDesPFin(+),1,8) AND CFCapitoliPEG.Eser(+) = lEser AND Numlivello = 4 AND VWFRMCFDesPianoFin.App = 'E' GROUP BY VWFRMCFDesPianoFin.IdDesPFin; -- inseriamo il QUARTO livello SPESA dei solo capitoli presenti in competenza INSERT INTO CFBilPre118PFin ( Eser, App, Codice, CodMisProgr, Numlivello, CodPadre, CodEsteso, Stanziato, Cassa, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, MAX(VWFRMCFDesPianoFin.App), VWFRMCFDesPianoFin.IdDesPFin, SUBSTR(UEB118,1,4), 4, MAX(VWFRMCFDesPianoFin.idpadre), MAX(CodEsteso), NVL(SUM(Stanzini),0), NVL(SUM(ImpCassa),0), MAX(Des__0), MAX(Des__1), MAX(Des__2), 0, lTimeStamp FROM VWFRMCFDesPianoFin, CFCapitoliPEG WHERE VWFRMCFDesPianoFin.App = CFCapitoliPEG.App AND SUBSTR(VWFRMCFDesPianoFin.Codice,1,8) = SUBSTR(CFCapitoliPEG.IdDesPFin,1,8) AND CFCapitoliPEG.Eser = lEser AND Numlivello = 4 AND VWFRMCFDesPianoFin.App = 'S' GROUP BY VWFRMCFDesPianoFin.IdDesPFin, SUBSTR(UEB118,1,4); -- inseriamo le altre combinazioni nei 4 anni utili di spesa INSERT INTO CFBilPre118PFin ( Eser, App, Codice, CodMisProgr, Numlivello, CodPadre, CodEsteso, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, 'S', VWFRMCFDesPianoFin.IdDesPFin, SUBSTR(UEB118,1,4), 4, MAX(VWFRMCFDesPianoFin.idpadre), MAX(CodEsteso), MAX(Des__0), MAX(Des__1), MAX(Des__2), 0, lTimeStamp FROM VWFRMCFDesPianoFin, CFCapitoliPEG WHERE VWFRMCFDesPianoFin.App = CFCapitoliPEG.App AND SUBSTR(VWFRMCFDesPianoFin.Codice,1,8) = SUBSTR(CFCapitoliPEG.IdDesPFin,1,8) AND CFCapitoliPEG.Eser BETWEEN lEser-1 AND lEser+2 AND Numlivello = 4 AND VWFRMCFDesPianoFin.App = 'S' AND (lEser, 'S', VWFRMCFDesPianoFin.IdDesPFin, SUBSTR(UEB118,1,4) ) NOT IN ( SELECT Eser, App, Codice, CodMisProgr FROM CFBilPre118PFin WHERE Eser = lEser and APP = 'S' ) GROUP BY VWFRMCFDesPianoFin.IdDesPFin, SUBSTR(UEB118,1,4); COMMIT; ------------------------------------------------- gestione altre colonne solo livello 4 per XBRL ------------------------------------- -- Entrata; Aggiornamento ResPresunti FOR recPeg IN ( SELECT App, SUBSTR(IdDesPFin,1,8)||'000' PFin, SUM( NVL( CFAccertamenti.ImpIni, 0 ) ) - NVL( SUM( pkViewForm.fnResTotDettRevRisc( 1, CFAccertamenti.IdAcc, NULL, '01/01/'||lEser ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, lEser ) ), 0 ) Importo FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser < lEser AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.App = 'E' AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY App, SUBSTR(IdDesPFin,1,8) ) LOOP UPDATE CFBilPre118PFin SET ResPresunti = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin; END LOOP; -- Spesa; Aggiornamento ResPresunti FOR recPeg IN ( SELECT App, SUBSTR(IdDesPFin,1,8)||'000' PFin, SUBSTR(UEB118,1,4) CodMisProgr, SUM( NVL( CFImpegni.ImpIni, 0 ) ) - NVL( SUM( pkViewForm.fnResTotDettMandPag( 1, CFImpegni.IdImp, NULL, '01/01/'||lEser ) ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, lEser ) ), 0 ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser < lEser AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo AND CFCapitoliPEG.App = 'S' AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY App, SUBSTR(IdDesPFin,1,8), SUBSTR(UEB118,1,4) ) LOOP -- verifico l'esistenza del record SELECT COUNT(*) INTO nCount FROM CFBilPre118PFin WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; IF nCount = 0 THEN INSERT INTO CFBilPre118PFin ( Eser, App, Codice, CodMisProgr, Numlivello, CodPadre, CodEsteso, ResPresunti, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, App, IdDesPFin, recPeg.CodMisProgr, 4, IdPadre, CodEsteso, recPeg.Importo, Des__0, Des__1, Des__2, 0, lTimeStamp FROM VWFRMCFDesPianoFin WHERE Codice = recPeg.PFin AND Numlivello = 4 AND App = 'S'; ELSE UPDATE CFBilPre118PFin SET ResPresunti = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END IF; END LOOP; -- Aggiornamento Assestato FOR recPeg IN ( SELECT App, SUBSTR(IdDesPFin,1,8)||'000' PFin, DECODE( APP, 'E', '0000', SUBSTR(UEB118,1,4) ) CodMisProgr, SUM( StanzIni + VarAum - VarDim ) Importo FROM CFCapitoliPEG WHERE Eser = lEser-1 AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY App, SUBSTR(IdDesPFin,1,8), DECODE( APP, 'E', '0000', SUBSTR(UEB118,1,4) ) ) LOOP UPDATE CFBilPre118PFin SET Assestato = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento Stanziato1 FOR recPeg IN ( SELECT App, SUBSTR(IdDesPFin,1,8)||'000' PFin, DECODE( APP, 'E', '0000', SUBSTR(UEB118,1,4) ) CodMisProgr, SUM( StanzIni ) Importo FROM CFCapitoliPEG WHERE Eser = lEser+1 AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY App, SUBSTR(IdDesPFin,1,8), DECODE( APP, 'E', '0000', SUBSTR(UEB118,1,4) ) ) LOOP UPDATE CFBilPre118PFin SET Stanziato1 = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento Stanziato2 FOR recPeg IN ( SELECT App, SUBSTR(IdDesPFin,1,8)||'000' PFin, DECODE( APP, 'E', '0000', SUBSTR(UEB118,1,4) ) CodMisProgr, SUM( StanzIni ) Importo FROM CFCapitoliPEG WHERE Eser = lEser+2 AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY App, SUBSTR(IdDesPFin,1,8), DECODE( APP, 'E', '0000', SUBSTR(UEB118,1,4) ) ) LOOP UPDATE CFBilPre118PFin SET Stanziato2 = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento CassaPrec FOR recPeg IN ( SELECT App, SUBSTR(IdDesPFin,1,8)||'000' PFin, DECODE( APP, 'E', '0000', SUBSTR(UEB118,1,4) ) CodMisProgr, SUM( ImpCassa + VarAumCas - VarDimCas ) Importo FROM CFCapitoliPEG WHERE Eser = lEser-1 AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY App, SUBSTR(IdDesPFin,1,8), DECODE( APP, 'E', '0000', SUBSTR(UEB118,1,4) ) ) LOOP UPDATE CFBilPre118PFin SET CassaPrec = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento ImpFpvPrec FOR recPeg IN ( SELECT CFCapitoliPEG.App, SUBSTR(IdDesPFin,1,8)||'000' PFin, SUBSTR(UEB118,1,4) CodMisProgr, SUM( StanzIni + VarAum - VarDim ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser-1 AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY CFCapitoliPEG.App, SUBSTR(IdDesPFin,1,8), SUBSTR(UEB118,1,4) ) LOOP UPDATE CFBilPre118PFin SET ImpFpvPrec = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento ImpFpv FOR recPeg IN ( SELECT CFCapitoliPEG.App, SUBSTR(IdDesPFin,1,8)||'000' PFin, SUBSTR(UEB118,1,4) CodMisProgr, SUM( StanzIni ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY CFCapitoliPEG.App, SUBSTR(IdDesPFin,1,8), SUBSTR(UEB118,1,4) ) LOOP UPDATE CFBilPre118PFin SET ImpFpv = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento ImpFpv1 FOR recPeg IN ( SELECT CFCapitoliPEG.App, SUBSTR(IdDesPFin,1,8)||'000' PFin, SUBSTR(UEB118,1,4) CodMisProgr, SUM( StanzIni ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser+1 AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY CFCapitoliPEG.App, SUBSTR(IdDesPFin,1,8), SUBSTR(UEB118,1,4) ) LOOP UPDATE CFBilPre118PFin SET ImpFpv1 = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento ImpFpv2 FOR recPeg IN ( SELECT CFCapitoliPEG.App, SUBSTR(IdDesPFin,1,8)||'000' PFin, SUBSTR(UEB118,1,4) CodMisProgr, SUM( StanzIni ) Importo FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND FlFondoPlur = 'S' AND Eser = lEser+2 AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY CFCapitoliPEG.App, SUBSTR(IdDesPFin,1,8), SUBSTR(UEB118,1,4) ) LOOP UPDATE CFBilPre118PFin SET ImpFpv2 = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento ImpPrec ( di cui già impegnato per l'eser - 1 ) FOR recPeg IN ( SELECT App, SUBSTR(IdDesPFin,1,8)||'000' PFin, SUBSTR(UEB118,1,4) CodMisProgr, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser-1 AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < lEser AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY App, SUBSTR(IdDesPFin,1,8), SUBSTR(UEB118,1,4) ) LOOP UPDATE CFBilPre118PFin SET ImpPrec = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento Imp ( di cui già impegnato per l'eser ) FOR recPeg IN ( SELECT App, SUBSTR(IdDesPFin,1,8)||'000' PFin, SUBSTR(UEB118,1,4) CodMisProgr, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < lEser AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY App, SUBSTR(IdDesPFin,1,8), SUBSTR(UEB118,1,4) ) LOOP UPDATE CFBilPre118PFin SET Imp = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento Imp1 ( di cui già impegnato per l'eser + 1 ) FOR recPeg IN ( SELECT App, SUBSTR(IdDesPFin,1,8)||'000' PFin, SUBSTR(UEB118,1,4) CodMisProgr, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser+1 AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < lEser+1 AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY App, SUBSTR(IdDesPFin,1,8), SUBSTR(UEB118,1,4) ) LOOP UPDATE CFBilPre118PFin SET Imp1 = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; -- Aggiornamento Imp2 ( di cui già impegnato per l'eser + 2 ) FOR recPeg IN ( SELECT App, SUBSTR(IdDesPFin,1,8)||'000' PFin, SUBSTR(UEB118,1,4) CodMisProgr, SUM( CFImpegni.ImpIni ) Importo FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = lEser+2 AND TO_CHAR( CFImpegni.DtaImp, 'YYYY' ) < lEser+2 AND UEB118 IS NOT NULL AND IdDesPFin IS NOT NULL GROUP BY App, SUBSTR(IdDesPFin,1,8), SUBSTR(UEB118,1,4) ) LOOP UPDATE CFBilPre118PFin SET Imp2 = recPeg.Importo WHERE Eser = lEser AND App = recPeg.App AND Codice = recPeg.PFin AND CodMisProgr = recPeg.CodMisProgr; END LOOP; COMMIT; -- inseriamo le altre combinazioni non inserite con missione e programma ma presenti come piani finanziari INSERT INTO CFBilPre118PFin ( Eser, App, Codice, CodMisProgr, Numlivello, CodPadre, CodEsteso, Des, Des__1, Des__2, CodSes, TmsLock ) SELECT lEser, 'S', IdDesPFin, '0000', 4, IdPadre, CodEsteso, Des__0, Des__1, Des__2, 0, lTimeStamp FROM VWFRMCFDesPianoFin WHERE Numlivello = 4 AND App = 'S' AND IdDesPFin NOT IN ( SELECT DISTINCT Codice FROM CFBilPre118PFin WHERE Eser = lEser AND App = 'S' ); COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118PFin', 'I', 'Generazione Piano Finanziario', 'Eser:'||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118PFin', 'I', 'Errore nella Generazione Piano Finanziario', 'Eser:'||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBil118PFin', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBil118PFin; /********************************************************************************************** * Funzioni per la Generazione della stampa Allegato b) - Fondo pluriennale vincolato * * COMPOSIZIONE PER MISSIONI E PROGRAMMI DEL FONDO PLURIENNALE VINCOLATO DELL'ESERCIZIO N DI * * RIFERIMENTO DEL BILANCIO * * Utilizzate nella Predisposizione del Bilancio di Previsione * **********************************************************************************************/ -- Autore: Torelli FUNCTION fnGenerazBil118FPV ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(9); lTimeStamp CFBilPre118FSC.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; nIdMenuLavoro pkType.tyStringa%type; nRet number(9); flOpzione CFOpzioni.Opzione%type; sDesMenuLavoro VARCHAR2(2000); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%TYPE; nReversato number(15,2) :=0; nAccertato number(15,2) :=0; nSommaRapp number(15,2) :=0; nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnGenerazBil118FPV', -499, ERRDIAG ); END IF; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; -- cancellazione della tabella DELETE CFBilPre118FPV WHERE Eser = lEser; COMMIT; --------------------------- inseriamo il PRIMO anno (competenza) --------------------------- INSERT INTO CFBilPre118FPV ( Eser, NumEserPlur, CodMis, CodProgr, DesMis, DesMis__1, DesMis__2, DesMis__3, DesProgr, DesProgr__1, DesProgr__2, DesProgr__3, ColA, ColH, CodSes, TmsLock ) SELECT lEser, 0 NumEserPlur, MAX(to_number(SUBSTR(UEB118,1,2))) CodMis, MAX(to_number(SUBSTR(UEB118,3,2))) CodProgr, MAX(Des1), MAX(Des1__1), MAX(Des1__2), MAX(Des1__3), MAX(Des2), MAX(Des2__1), MAX(Des2__2), MAX(Des2__3), SUM(Assestato) a, -- colonna a -- colonna c: da report -- colonna g: da report data come differenza partendo da h SUM(Prev1) h, -- colonna h 0, lTimeStamp FROM CFBilPre118 BilPre WHERE App = 'S' AND SUBSTR(UEB118,1,2) < 20 AND NumRiga = 3 AND Eser = lEser GROUP BY SUBSTR(UEB118,1,4); -- calcoliamo le colonne impostate a 0 nella insert UPDATE CFBilPre118FPV SET ColB = ( SELECT NVL(SUM( impini ),0) FROM CFImpegni, CFCAPITOLIPEG Cap WHERE CFImpegni.idcapitolo = Cap.idcapitolo AND Cap.Eser = lEser AND Cap.App = 'S' AND SUBSTR(Cap.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND Cap.FLCOPFPLUR = 'S' ),--AND --DtaImp <= TO_DATE( '31/12/'||(lEser-1), 'DD/MM/YYYY' )), -- colonna c: da report -- colonna d: primo pluriennale ColD = ( SELECT NVL(SUM(Stanzini),0) FROM CFCAPITOLIPEG CapCop, CFAnagraficacapitoli WHERE CapCop.App = CFAnagraficacapitoli.App AND CapCop.cap = CFAnagraficacapitoli.cap AND CapCop.Art = CFAnagraficacapitoli.Art AND CapCop.Eser = (lEser + 1) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND CapCop.FLCOPFPLUR = 'S' AND FlFondoPlur = 'N' ), -- colonna e: secondo pluriennale ColE = ( SELECT NVL(SUM(Stanzini),0) FROM CFCAPITOLIPEG CapCop, CFAnagraficacapitoli WHERE CapCop.App = CFAnagraficacapitoli.App AND CapCop.cap = CFAnagraficacapitoli.cap AND CapCop.Art = CFAnagraficacapitoli.Art AND CapCop.Eser = (lEser + 2) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND CapCop.FLCOPFPLUR = 'S' AND FlFondoPlur = 'N' ), -- colonna f; anni successivi ColF = ( SELECT NVL(SUM(Stanzini),0) FROM CFCAPITOLIPEG CapCop, CFAnagraficacapitoli WHERE CapCop.App = CFAnagraficacapitoli.App AND CapCop.cap = CFAnagraficacapitoli.cap AND CapCop.Art = CFAnagraficacapitoli.Art AND CapCop.Eser > (lEser + 2) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND CapCop.FLCOPFPLUR = 'S' AND FlFondoPlur = 'N' ) WHERE Eser = lEser AND NumEserPlur = 0; -- sottraiamo l'impegnato relativo al FPV degli annni precedenti nelle colonne d), e) e f) UPDATE CFBilPre118FPV SET -- colonna d: primo pluriennale ColD = ( SELECT ColD - NVL(SUM(impini),0) FROM CFImpegni, CFCAPITOLIPEG CapCop WHERE CFImpegni.idcapitolo = CapCop.idcapitolo AND CapCop.Eser = (lEser + 1) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad(CodProgr,2,'0') AND CapCop.FlCopFPlur = 'S' AND DtaImp <= TO_DATE( '31/12/'||(lEser-1), 'DD/MM/YYYY' ) ) , -- colonna e: secondo pluriennale ColE = ( SELECT ColE - NVL(SUM(impini),0) FROM CFImpegni, CFCAPITOLIPEG CapCop WHERE CFImpegni.idcapitolo = CapCop.idcapitolo AND CapCop.Eser = (lEser + 2) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad(CodProgr,2,'0') AND CapCop.FlCopFPlur = 'S' AND DtaImp <= TO_DATE( '31/12/'||(lEser-1), 'DD/MM/YYYY' ) ) , -- colonna f; anni successivi ColF = ( SELECT ColF - NVL(SUM(impini),0) FROM CFImpegni, CFCAPITOLIPEG CapCop WHERE CFImpegni.idcapitolo = CapCop.idcapitolo AND CapCop.Eser > (lEser + 2) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad(CodProgr,2,'0') AND CapCop.FlCopFPlur = 'S' AND DtaImp <= TO_DATE( '31/12/'||(lEser-1), 'DD/MM/YYYY' ) ) WHERE Eser = lEser AND NumEserPlur = 0; --------------------------- inseriamo il Secondo anno (primo plur) --------------------------- INSERT INTO CFBilPre118FPV ( Eser, NumEserPlur, CodMis, CodProgr, DesMis, DesMis__1, DesMis__2, DesMis__3, DesProgr, DesProgr__1, DesProgr__2, DesProgr__3, ColA, ColH, CodSes, TmsLock ) SELECT lEser, 1 NumEserPlur, MAX(to_number(SUBSTR(UEB118,1,2))) CodMis, MAX(to_number(SUBSTR(UEB118,3,2))) CodProgr, MAX(Des1), MAX(Des1__1), MAX(Des1__2), MAX(Des1__3), MAX(Des2), MAX(Des2__1), MAX(Des2__2), MAX(Des2__3), SUM(Prev1) a, -- colonna a -- colonna c: da report -- colonna g: da report data come differenza partendo da h SUM(Prev2) h, -- colonna h 0, lTimeStamp FROM CFBilPre118 BilPre WHERE App = 'S' AND SUBSTR(UEB118,1,2) < 20 AND NumRiga = 3 AND Eser = lEser GROUP BY SUBSTR(UEB118,1,4); -- calcoliamo le colonne impostate a 0 nella insert UPDATE CFBilPre118FPV SET ColB = ( SELECT NVL(SUM( impini ),0) FROM CFImpegni, CFCAPITOLIPEG Cap WHERE CFImpegni.idcapitolo = Cap.idcapitolo AND Cap.Eser = ( lEser + 1 ) AND Cap.App = 'S' AND SUBSTR(Cap.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND Cap.FLCOPFPLUR = 'S' ),--AND --DtaImp <= TO_DATE( '31/12/'||lEser, 'DD/MM/YYYY' )), -- colonna c: da report -- colonna d: primo pluriennale ColD = ( SELECT NVL(SUM(Stanzini),0) FROM CFCAPITOLIPEG CapCop, CFAnagraficacapitoli WHERE CapCop.App = CFAnagraficacapitoli.App AND CapCop.cap = CFAnagraficacapitoli.cap AND CapCop.Art = CFAnagraficacapitoli.Art AND CapCop.Eser = (lEser + 2) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND CapCop.FLCOPFPLUR = 'S' AND FlFondoPlur = 'N' ), -- colonna e: secondo pluriennale ColE = ( SELECT NVL(SUM(Stanzini),0) FROM CFCAPITOLIPEG CapCop, CFAnagraficacapitoli WHERE CapCop.App = CFAnagraficacapitoli.App AND CapCop.cap = CFAnagraficacapitoli.cap AND CapCop.Art = CFAnagraficacapitoli.Art AND CapCop.Eser = (lEser + 3) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND CapCop.FLCOPFPLUR = 'S' AND FlFondoPlur = 'N' ), -- colonna f; anni successivi ColF = ( SELECT NVL(SUM(Stanzini),0) FROM CFCAPITOLIPEG CapCop, CFAnagraficacapitoli WHERE CapCop.App = CFAnagraficacapitoli.App AND CapCop.cap = CFAnagraficacapitoli.cap AND CapCop.Art = CFAnagraficacapitoli.Art AND CapCop.Eser > (lEser + 3) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND CapCop.FLCOPFPLUR = 'S' AND FlFondoPlur = 'N' ) WHERE Eser = lEser AND NumEserPlur = 1; -- sottraiamo l'impegnato relativo al FPV degli annni precedenti nelle colonne d), e) e f) UPDATE CFBilPre118FPV SET -- colonna d: primo pluriennale ColD = ( SELECT ColD - NVL(SUM(impini),0) FROM CFImpegni, CFCAPITOLIPEG CapCop WHERE CFImpegni.idcapitolo = CapCop.idcapitolo AND CapCop.Eser = (lEser + 2) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad(CodProgr,2,'0') AND CapCop.FlCopFPlur = 'S' AND DtaImp <= TO_DATE( '31/12/'||(lEser-1), 'DD/MM/YYYY' ) ) , -- colonna e: secondo pluriennale ColE = ( SELECT ColE - NVL(SUM(impini),0) FROM CFImpegni, CFCAPITOLIPEG CapCop WHERE CFImpegni.idcapitolo = CapCop.idcapitolo AND CapCop.Eser = (lEser + 3) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad(CodProgr,2,'0') AND CapCop.FlCopFPlur = 'S' AND DtaImp <= TO_DATE( '31/12/'||(lEser-1), 'DD/MM/YYYY' ) ) , -- colonna f; anni successivi ColF = ( SELECT ColF - NVL(SUM(impini),0) FROM CFImpegni, CFCAPITOLIPEG CapCop WHERE CFImpegni.idcapitolo = CapCop.idcapitolo AND CapCop.Eser > (lEser + 3) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad(CodProgr,2,'0') AND CapCop.FlCopFPlur = 'S' AND DtaImp <= TO_DATE( '31/12/'||(lEser-1), 'DD/MM/YYYY' ) ) WHERE Eser = lEser AND NumEserPlur = 1; --------------------------- inseriamo il Terzo anno (secondo plur) --------------------------- INSERT INTO CFBilPre118FPV ( Eser, NumEserPlur, CodMis, CodProgr, DesMis, DesMis__1, DesMis__2, DesMis__3, DesProgr, DesProgr__1, DesProgr__2, DesProgr__3, ColA, ColH, CodSes, TmsLock ) SELECT lEser, 2 NumEserPlur, MAX(to_number(SUBSTR(UEB118,1,2))) CodMis, MAX(to_number(SUBSTR(UEB118,3,2))) CodProgr, MAX(Des1), MAX(Des1__1), MAX(Des1__2), MAX(Des1__3), MAX(Des2), MAX(Des2__1), MAX(Des2__2), MAX(Des2__3), SUM(Prev2) a, -- colonna a -- colonna c: da report -- colonna g: da report data come differenza partendo da h SUM(Prev3) h, -- colonna h 0, lTimeStamp FROM CFBilPre118 BilPre WHERE App = 'S' AND SUBSTR(UEB118,1,2) < 20 AND NumRiga = 3 AND Eser = lEser GROUP BY SUBSTR(UEB118,1,4); -- calcoliamo le colonne impostate a 0 nella insert UPDATE CFBilPre118FPV SET ColB = ( SELECT NVL(SUM( impini ),0) FROM CFImpegni, CFCAPITOLIPEG Cap WHERE CFImpegni.idcapitolo = Cap.idcapitolo AND Cap.Eser = ( lEser + 2 ) AND Cap.App = 'S' AND SUBSTR(Cap.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND Cap.FLCOPFPLUR = 'S' ),--AND --DtaImp <= TO_DATE( '31/12/'||lEser, 'DD/MM/YYYY' )), -- colonna c: da report -- colonna d: primo pluriennale ColD = ( SELECT NVL(SUM(Stanzini),0) FROM CFCAPITOLIPEG CapCop, CFAnagraficacapitoli WHERE CapCop.App = CFAnagraficacapitoli.App AND CapCop.cap = CFAnagraficacapitoli.cap AND CapCop.Art = CFAnagraficacapitoli.Art AND CapCop.Eser = (lEser + 3) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND CapCop.FLCOPFPLUR = 'S' AND FlFondoPlur = 'N' ), -- colonna e: secondo pluriennale ColE = ( SELECT NVL(SUM(Stanzini),0) FROM CFCAPITOLIPEG CapCop, CFAnagraficacapitoli WHERE CapCop.App = CFAnagraficacapitoli.App AND CapCop.cap = CFAnagraficacapitoli.cap AND CapCop.Art = CFAnagraficacapitoli.Art AND CapCop.Eser = (lEser + 4) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND CapCop.FLCOPFPLUR = 'S' AND FlFondoPlur = 'N' ), -- colonna f; anni successivi ColF = ( SELECT NVL(SUM(Stanzini),0) FROM CFCAPITOLIPEG CapCop, CFAnagraficacapitoli WHERE CapCop.App = CFAnagraficacapitoli.App AND CapCop.cap = CFAnagraficacapitoli.cap AND CapCop.Art = CFAnagraficacapitoli.Art AND CapCop.Eser > (lEser + 4) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad( CodProgr,2,'0') AND CapCop.FLCOPFPLUR = 'S' AND FlFondoPlur = 'N' ) WHERE Eser = lEser AND NumEserPlur = 2; -- sottraiamo l'impegnato relativo al FPV degli annni precedenti nelle colonne d), e) e f) UPDATE CFBilPre118FPV SET -- colonna d: primo pluriennale ColD = ( SELECT ColD - NVL(SUM(impini),0) FROM CFImpegni, CFCAPITOLIPEG CapCop WHERE CFImpegni.idcapitolo = CapCop.idcapitolo AND CapCop.Eser = (lEser + 3) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad(CodProgr,2,'0') AND CapCop.FlCopFPlur = 'S' AND DtaImp <= TO_DATE( '31/12/'||(lEser-1), 'DD/MM/YYYY' ) ) , -- colonna e: secondo pluriennale ColE = ( SELECT ColE - NVL(SUM(impini),0) FROM CFImpegni, CFCAPITOLIPEG CapCop WHERE CFImpegni.idcapitolo = CapCop.idcapitolo AND CapCop.Eser = (lEser + 4) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad(CodProgr,2,'0') AND CapCop.FlCopFPlur = 'S' AND DtaImp <= TO_DATE( '31/12/'||(lEser-1), 'DD/MM/YYYY' ) ) , -- colonna f; anni successivi ColF = ( SELECT ColF - NVL(SUM(impini),0) FROM CFImpegni, CFCAPITOLIPEG CapCop WHERE CFImpegni.idcapitolo = CapCop.idcapitolo AND CapCop.Eser > (lEser + 4) AND CapCop.App = 'S' AND SUBSTR(CapCop.UEB118,1,4) = lpad(CodMis,2,'0')|| lpad(CodProgr,2,'0') AND CapCop.FlCopFPlur = 'S' AND DtaImp <= TO_DATE( '31/12/'||(lEser-1), 'DD/MM/YYYY' ) ) WHERE Eser = lEser AND NumEserPlur = 2; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FPV', 'I', 'Generazione CFBilPre118FPV', 'Eser:'||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FPV', 'I', 'Errore nella Generazione di CFBilPre118FPV', 'Eser:'||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBil118FPV', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBil118FPV; -- Autore: Katiuscia Bottiglia, 13/11/2014. FUNCTION fnCFBilPre118FPVUpd ( lEser IN pkType.tyStringa%type, -- CFBilPre118FPV lNumEserPlur IN pkType.tyStringa%type, -- CFBilPre118FPV lCodMis IN pkType.tyStringa%type, -- CFBilPre118FPV lCodProgr IN pkType.tyStringa%type, -- CFBilPre118FPV lColD IN pkType.tyStringa%type, -- CFBilPre118FPV lColE IN pkType.tyStringa%type, -- CFBilPre118FPV lColF IN pkType.tyStringa%type, -- CFBilPre118FPV lCodSes IN pkType.tyStringa%type, -- CFBilPre118FPV ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilPre118FPV.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnnoAppBil number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnnoAppBil FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnnoAppBil ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FPVUpd', -499, ERRDIAG ); END IF; /* aggiorno il record solo se non si è verificato un blocco di DB o un blocco di tabella 'contemporaneamente' alla richiesta del blocco del record; in questo caso ha priorità il blocco DB o il blocco di tabella */ nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118FPV', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN ROLLBACK; RETURN nRet; ELSIF ( nRet = 0 ) THEN ROLLBACK; -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FPVUpd', -499, ERRDIAG ); END IF; -- aggiornamento del record UPDATE CFBilPre118FPV SET ColD = NVL( lColD, 0 ), ColE = NVL( lColE, 0 ), ColF = NVL( lColF, 0 ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND NumEserPlur = lNumEserPlur AND CodMis = lCodMis AND CodProgr = lCodProgr AND CodSes = lCodSes; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilPre118FPVRLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FPVUpd', -212, ERRDIAG ); END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118FPV' ) AND DesPK = UPPER( lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lCodMis||CHR(0167)||lCodProgr ); -- inserimento del log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FPV', 'U', 'Aggiornamento della tabella CFBilPre118FPV', lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lCodMis||CHR(0167)||lCodProgr, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FPV', 'U', 'Errore: ' || SUBSTR( SQLERRM, 1, 245 ), lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lCodMis||CHR(0167)||lCodProgr, NULL, NULL, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FPVUpd', SQLCODE, ERRDIAG ); END fnCFBilPre118FPVUpd; -- Autore: Katiuscia Bottiglia, 13/11/2014. FUNCTION fnCFBilPre118FPVRLkDph ( lEser IN pkType.tyStringa%type, -- CFBilPre118FPV lNumEserPlur IN pkType.tyStringa%type, -- CFBilPre118FPV lCodMis IN pkType.tyStringa%type, -- CFBilPre118FPV lCodProgr IN pkType.tyStringa%type, -- CFBilPre118FPV lCodSes IN pkType.tyStringa%type, -- CFBilPre118FPV lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFBilPre118FPV.TmsLock%type; TmpCodSes CFBilPre118FPV.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118FPV', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118FPVRLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFBilPre118FPV WHERE Eser = lEser AND NumEserPlur = lNumEserPlur AND CodMis = lCodMis AND CodProgr = lCodProgr FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN UPDATE CFBilPre118FPV SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND NumEserPlur = lNumEserPlur AND CodMis = lCodMis AND CodProgr = lCodProgr; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFBilPre118FPV' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lCodMis||CHR(0167)||lCodProgr ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFBilPre118FPV' ), UPPER( lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lCodMis||CHR(0167)||lCodProgr ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFBilPre118FPV' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lCodMis||CHR(0167)||lCodProgr AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPEG.fnCFBilPre118FPVRLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118FPVRLkDph', SQLCODE, ERRDIAG ); END fnCFBilPre118FPVRLkDph; -- Autore: Katiuscia Bottiglia, 13/11/2014. FUNCTION fnCFBilPre118FPVRls ( lEser IN pkType.tyStringa%type, -- CFBilPre118FPV lNumEserPlur IN pkType.tyStringa%type, -- CFBilPre118FPV lCodMis IN pkType.tyStringa%type, -- CFBilPre118FPV lCodProgr IN pkType.tyStringa%type, -- CFBilPre118FPV lCodSes IN pkType.tyStringa%type, -- CFBilPre118FPV ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFBilPre118FPV SET CodSes = 0 WHERE Eser = lEser AND NumEserPlur = lNumEserPlur AND CodMis = lCodMis AND CodProgr = lCodProgr AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118FPV' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumEserPlur||CHR(0167)||lCodMis||CHR(0167)||lCodProgr ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPre118FPVRls', SQLCODE, ERRDIAG ); END fnCFBilPre118FPVRls; /*************************************************************************************************** * Funzione per la Generazione della stampa Allegato n.7 * * Bilancio di previsione - Equilibri di Bilancio * * Utilizzate nella Generazione del Bilancio di Previsione/Pluriennale * ***************************************************************************************************/ -- Autore: Katiuscia Bottiglia. FUNCTION fnGenerazBil118EqBil ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(2); lTimeStamp CFBilPre118EqBil.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnGenerazBil118EqBil', -499, ERRDIAG ); END IF; -- cancellazione delle sole righe i cui importi sono gestiti in automatico DELETE CFBilPre118EqBil WHERE FlModificab = 'N' AND Eser = lEser; COMMIT; -- presenza righe gestite i cui importi sono gestiti in manualmente SELECT COUNT(*) INTO nCount FROM CFBilPre118EqBil WHERE FlModificab = 'S' AND Eser = lEser; -- primo blocco importi EQUILIBRIO -- -- A) Fondo pluriennale vincolato di entrata per spese correnti INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 100, 'S', 'A) Fondo pluriennale vincolato di entrata per spese correnti' AS Des, DECODE( sSeparat, null, null, 'A) Mehrjährigen Fonds für die Einreise gebunden für die laufenden Ausgaben' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( StanzIni ), 0 ) AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'S' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.FLCopFPlur = 'S' AND CFCapitoliPEG.Eser(+) = lEser AND Codice3 = 1; ------------------------------------------------------------------------- -- Aggiorna Prev2 UPDATE CFBilPre118EqBil SET Prev2 = ( SELECT NVL( SUM( StanzIni ), 0 ) AS Prev2 FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'S' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.FLCopFPlur = 'S' AND CFCapitoliPEG.Eser(+) = lEser+1 AND Codice3 = 1 ) WHERE Eser = lEser AND NumRiga = 100; -- Aggiorna Prev3 UPDATE CFBilPre118EqBil SET Prev3 =( SELECT NVL( SUM( StanzIni ), 0 ) AS Prev3 FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'S' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.FLCopFPlur = 'S' AND CFCapitoliPEG.Eser(+) = lEser+2 AND Codice3 = 1 ) WHERE Eser = lEser AND NumRiga = 100; ------------------------------------------------------------------------ -- AA) Recupero disavanzo di amministrazione esercizio precedente IF nCount = 0 THEN INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 110, 'S', 'AA) Recupero disavanzo di amministrazione esercizio precedente' AS Des, DECODE( sSeparat, null, null, 'AA) Wiederherstellung von Vorjahr Defizit of Directors') AS Des1, NULL AS Des2, 'S' AS FlModificab, '-' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; END IF; -- B) Entrate Titoli 1.00 - 2.00 - 3.00 INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 120, 'S', 'B) Entrate Titoli 1.00 - 2.00 - 3.00' AS Des, DECODE( sSeparat, null, null, 'B) Revenue Bonds 1.00 - 2.00 - 3.00') AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'E' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,1,1) BETWEEN 1 AND 3 AND CFBilPre118.NUMRIGA = 1; -- di cui per estinzione anticipata di prestiti IF nCount = 0 THEN INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 125, 'S', ' di cui per estinzione anticipata di prestiti' AS Des, DECODE( sSeparat, null, null, MAX( ' von denen für die vorzeitige Rückzahlung von Darlehen' ) ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; END IF; -- C) Entrate Titolo 4.02.06 - Contributi agli investimenti direttamente destinati al rimborso dei prestiti da amministrazioni pubbliche INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 130, 'S', 'C) Entrate Titolo 4.02.06 - Contributi agli investimenti direttamente destinati al rimborso dei prestiti da amministrazioni pubbliche' AS Des, DECODE( sSeparat, null, null, 'B) Revenue Bonds 4.02.06 - Investitionszuschüsse direkt für die Rückzahlung von Darlehen durch öffentliche pubblich') AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'E' AND CFBilPre118.Eser = lEser AND CFBilPre118.UEB118 LIKE '40206%' AND CFBilPre118.NUMRIGA = 1; -- D)Spese Titolo 1.00 - Spese correnti INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 140, 'S', 'D) Spese Titolo 1.00 - Spese correnti' AS Des, DECODE( sSeparat, null, null, 'D) Gebühren Titel 1.00 - Laufende Ausgaben' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,1) = 1 AND CFBilPre118.NUMRIGA = 1; -- di cui -- - fondo pluriennale vincolato INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 143, 'S', ' - fondo pluriennale vincolato' AS Des, DECODE( sSeparat, null, null, ' - mehrjährigen Fonds gebunden' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,1) = 1 AND CFBilPre118.NUMRIGA = 3; -- - fondo crediti di dubbia esigibilità INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 147, 'S', ' - fondo crediti di dubbia esigibilità' AS Des, DECODE( sSeparat, null, null, ' - Boden zweifelhafte Forderungen' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '' AS Segno, NVL( SUM( StanzIni ), 0 ) AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM CFCapitoliPEG WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.IDDespFin = 'U1100103001'; -- Fondo crediti di dubbia e difficile esazione di parte corrente ------------------------------------------------------------------------- -- Aggiorna Prev2 UPDATE CFBilPre118EqBil SET Prev2 = ( SELECT NVL( SUM( StanzIni ), 0 ) AS Prev2 FROM CFCapitoliPEG WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.IDDespFin = 'U1100103001' ) -- Fondo crediti di dubbia e difficile esazione di parte corrente WHERE Eser = lEser AND NumRiga = 147; -- Aggiorna Prev3 UPDATE CFBilPre118EqBil SET Prev3 =( SELECT NVL( SUM( StanzIni ), 0 ) AS Prev3 FROM CFCapitoliPEG WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.IDDespFin = 'U1100103001' ) -- Fondo crediti di dubbia e difficile esazione di parte corrente WHERE Eser = lEser AND NumRiga = 147; ------------------------------------------------------------------------ -- E) Spese Titolo 2.04 - Altri trasferimenti in conto capitale INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 150, 'S', 'E) Spese Titolo 2.04 - Altri trasferimenti in conto capitale' AS Des, DECODE( sSeparat, null, null, 'E) Gebühren Titel 2.04.00 - Sonstige Vermögenstransfers' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,3) LIKE '204%' AND CFBilPre118.NUMRIGA = 1; -- F) Spese Titolo 4.00 - Quote di capitale amm.to dei mutui e prestiti obbligazionari INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 160, 'S', 'F) Spese Titolo 4.00 - Quote di capitale amm.to dei mutui e prestiti obbligazionari' AS Des, DECODE( sSeparat, null, null, 'E) Gebühren Titel 2.04.00 - Einheiten des Kapitals Tilgung von Darlehen und Anleihen' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,1) = 4 AND CFBilPre118.NUMRIGA = 1; -- di cui per estinzione anticipata di prestiti IF nCount = 0 THEN INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 165, 'S', ' di cui per estinzione anticipata di prestiti' AS Des, DECODE( sSeparat, null, null, ' von denen für die vorzeitige Rückzahlung von Darlehen' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; END IF; -- di cui Fondo anticipazioni di liquidità (DL 35/2013 e successive modifiche e rifinanziamenti) Adeguamento Bil. 2017 IF nCount = 0 THEN INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 168, 'S', ' di cui Fondo anticipazioni di liquidità (DL 35/2013 e successive modifiche e rifinanziamenti)' AS Des, DECODE( sSeparat, null, null, ' von ' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; END IF; -- EQUILIBRIO DI PARTE CORRENTE -- IF nCount = 0 THEN -- H) Utilizzo risultato di amministrazione presunto per spese correnti INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 200, 'S', 'H) Utilizzo risultato di amministrazione presunto per spese correnti' AS Des, DECODE( sSeparat, null, null, 'H) Mit einem Ergebnis der angeblichen Verwaltung der tatsächlichen Ausgaben' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; -- di cui per estinzione anticipata di prestiti INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 205, 'S', ' di cui per estinzione anticipata di prestiti' AS Des, DECODE( sSeparat, null, null, ' von denen für die vorzeitige Rückzahlung von Darlehen' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; -- I) Entrate di parte capitale destinate a spese correnti in base a specifiche disposizioni di legge INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 210, 'S', 'I) Entrate di parte capitale destinate a spese correnti in base a specifiche disposizioni di legge o dei principi contabili' AS Des, DECODE( sSeparat, null, null, 'I) Geben Sie Teil der laufenden Ausgaben in Übereinstimmung mit besonderen Vorschriften des Gesetzes oder der Rechnungslegungsstandards zugeordneten Kapital' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; -- di cui per estinzione anticipata di prestiti INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 215, 'S', ' di cui per estinzione anticipata di prestiti' AS Des, DECODE( sSeparat, null, null, ' von denen für die vorzeitige Rückzahlung von Darlehen' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; -- L) Entrate di parte corrente destinate a spese di investimento in base a specifiche disposizioni di legge o dei principi contabili INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 220, 'S', 'L) Entrate di parte corrente destinate a spese di investimento in base a specifiche disposizioni di legge o dei principi contabili' AS Des, DECODE( sSeparat, null, null, 'L) Der Umsatz in der Leistungsbilanz auf Kosten der Investitionen statt auf der Grundlage spezifischer Bestimmungen des Gesetzes oder der Rechnungslegungsstandards' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '-' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; -- M) Entrate da accensione di prestiti destinate a estinzione anticipata dei prestiti INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 230, 'S', 'M) Entrate da accensione di prestiti destinate a estinzione anticipata dei prestiti' AS Des, DECODE( sSeparat, null, null, 'M) Einnahmen aus Kreditaufnahme für die vorzeitige Rückzahlung von Krediten bestimmt' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; -- EQUILIBRIO DI PARTE CAPITALE -- -- P) Utilizzo risultato di amministrazione presunto per spese di investimento INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 300, 'S', 'P) Utilizzo risultato di amministrazione presunto per spese di investimento' AS Des, DECODE( sSeparat, null, null, 'P) Mit einem Ergebnis der Verabreichung für angebliche Investitionskosten' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; END IF; -- Q) Fondo pluriennale vincolato di entrata per spese in conto capitale INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 305, 'S', 'Q) Fondo pluriennale vincolato di entrata per spese in conto capitale' AS Des, DECODE( sSeparat, null, null, 'Q) Mehrjährige Fonds Eintrag für Investitionen gebunden' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL(SUM(Stanzini),0) AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM vwFRMCFCapitoliPEG WHERE App = 'S' AND FLCopFPlur = 'S' AND Eser = lEser AND Codice3 = 2; ------------------------------------------------------------------------- -- Aggiorna Prev2 UPDATE CFBilPre118EqBil SET Prev2 = ( SELECT NVL(SUM(Stanzini),0) AS Prev2 FROM vwFRMCFCapitoliPEG WHERE App = 'S' AND FLCopFPlur = 'S' AND Eser = lEser+1 AND Codice3 = 2 ) WHERE Eser = lEser AND NumRiga = 305; -- Aggiorna Prev3 UPDATE CFBilPre118EqBil SET Prev3 = ( SELECT NVL(SUM(Stanzini),0) AS Prev3 FROM vwFRMCFCapitoliPEG WHERE App = 'S' AND FLCopFPlur = 'S' AND Eser = lEser+2 AND Codice3 = 2 ) WHERE Eser = lEser AND NumRiga = 305; ------------------------------------------------------------------------ -- R) Entrate Titoli 4.00-5.00-6.00 INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 310, 'S', 'R) Entrate Titoli 4.00-5.00-6.00' AS Des, DECODE( sSeparat, null, null, 'R) Revenue Bonds 4.00-5.00-6.00') AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'E' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,1,1) BETWEEN 4 AND 6 AND CFBilPre118.NUMRIGA = 1; -- C) Entrate Titolo 4.02.06 - Contributi agli investimenti direttamente destinati al rimborso dei prestiti da amministrazioni pubbliche INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 315, 'N', 'C) Entrate Titolo 4.02.06 - Contributi agli investimenti direttamente destinati al rimborso dei prestiti da amministrazioni pubbliche' AS Des, DECODE( sSeparat, null, null, 'B) Revenue Bonds 4.02.06 - Investitionszuschüsse direkt für die Rückzahlung von Darlehen durch öffentliche pubblich') AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'E' AND CFBilPre118.Eser = lEser AND CFBilPre118.UEB118 LIKE '40206%' AND CFBilPre118.NUMRIGA = 1; -- I) Entrate di parte capitale destinate a spese correnti in base a specifiche disposizioni di legge o dei principi contabili IF nCount = 0 THEN INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 320, 'N', 'I) Entrate di parte capitale destinate a spese correnti in base a specifiche disposizioni di legge o dei principi contabili' AS Des, DECODE( sSeparat, null, null, 'I) Geben Sie Teil der laufenden Ausgaben in Übereinstimmung mit besonderen Vorschriften des Gesetzes oder der Rechnungslegungsstandards zugeordneten Kapital' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '-' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; END IF; -- S1) Entrate Titolo 5.02 per Riscossione crediti di breve termine INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 325, 'S', 'S1) Entrate Titolo 5.02 per Riscossione crediti di breve termine' AS Des, DECODE( sSeparat, null, null, 'S1) Titel Steuererhebung 5.02 für kurzfristige Kredite') AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'E' AND CFBilPre118.Eser = lEser AND CFBilPre118.UEB118 LIKE '502%' AND CFBilPre118.NUMRIGA = 1; -- S2) Entrate Titolo 5.03 per Riscossione crediti di medio-lungo termine INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 330, 'S', 'S2) Entrate Titolo 5.03 per Riscossione crediti di medio-lungo termine' AS Des, DECODE( sSeparat, null, null, 'S2) Einnahmen Titel 5.033 Credits für mittlere bis langfristige') AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'E' AND CFBilPre118.Eser = lEser AND CFBilPre118.UEB118 LIKE '503%' AND CFBilPre118.NUMRIGA = 1; -- T) Entrate Titolo 5.04 relative a Altre entrate per riduzioni di attività finanziaria INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 335, 'S', 'T) Entrate Titolo 5.04 relative a Altre entrate per riduzioni di attività finanziaria' AS Des, DECODE( sSeparat, null, null, 'T) Umsatzerlöse im Zusammenhang mit Titel 5.04 Sonstige Erlösschmälerungen von finanziellen Aktivitäten') AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'E' AND CFBilPre118.Eser = lEser AND CFBilPre118.UEB118 LIKE '504%' AND CFBilPre118.NUMRIGA = 1; -- L) Entrate di parte corrente destinate a spese di investimento in base a specifiche disposizioni di legge o dei principi contabili IF nCount = 0 THEN INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 340, 'N', 'L) Entrate di parte corrente destinate a spese di investimento in base a specifiche disposizioni di legge o dei principi contabili' AS Des, DECODE( sSeparat, null, null, 'L) Der Umsatz in der Leistungsbilanz auf Kosten der Investitionen statt auf der Grundlage spezifischer Bestimmungen des Gesetzes oder der Rechnungslegungsstandards' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; -- M) Entrate da accensione di prestiti destinate a estinzione anticipata dei prestiti INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 343, 'N', 'M) Entrate da accensione di prestiti destinate a estinzione anticipata dei prestiti' AS Des, DECODE( sSeparat, null, null, 'M) Einnahmen aus Kreditaufnahme für die vorzeitige Rückzahlung von Krediten bestimmt' ) AS Des1, NULL AS Des2, 'S' AS FlModificab, '-' AS Segno, 0 AS Prev1, 0 AS Prev2, 0 AS Prev3, 0, lTimeStamp FROM DUAL; END IF; -- U) Spese Titolo 2.00 - Spese in conto capitale INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 345, 'S', 'U) Spese Titolo 2.00 - Spese in conto capitale' AS Des, DECODE( sSeparat, null, null, 'U) Gebühren Titel 2.00 - Investitionen' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,1) = 2 AND CFBilPre118.NUMRIGA = 1; -- di cui fondo pluriennale vincolato di spesa INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 347, 'S', ' di cui fondo pluriennale vincolato' AS Des, DECODE( sSeparat, null, null, ' mehrjährigen Fonds gebunden' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,1) = 2 AND CFBilPre118.NUMRIGA = 3; -- V) Spese Titolo 3.01 per Acquisizioni di attività finanziarie INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 350, 'S', 'V) Spese Titolo 3.01 per Acquisizioni di attività finanziarie' AS Des, DECODE( sSeparat, null, null, 'V) Titel Aufwendungen 3.01 für den Erwerb von Finanzanlagen' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,3) LIKE '301%' AND CFBilPre118.NUMRIGA = 1; -- E) Spese Titolo 2.04 - Altri trasferimenti in conto capitale INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 355, 'N', 'E) Spese Titolo 2.04 - Altri trasferimenti in conto capitale' AS Des, DECODE( sSeparat, null, null, 'E) Gebühren Titel 2.04.00 - Sonstige Vermögenstransfers' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,3) LIKE '204%' AND CFBilPre118.NUMRIGA = 1; -- EQUILIBRIO FINALE -- -- S1) Entrate Titolo 5.02 per Riscossione crediti di breve termine INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 400, 'N', 'S1) Entrate Titolo 5.02 per Riscossione crediti di breve termine' AS Des, DECODE( sSeparat, null, null, 'S1) Titel Steuererhebung 5.02 für kurzfristige Kredite') AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'E' AND CFBilPre118.Eser = lEser AND CFBilPre118.UEB118 LIKE '502%' AND CFBilPre118.NUMRIGA = 1; -- S2) Entrate Titolo 5.03 per Riscossione crediti di medio-lungo termine INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 410, 'N', 'S2) Entrate Titolo 5.03 per Riscossione crediti di medio-lungo termine' AS Des, DECODE( sSeparat, null, null, 'S2) Einnahmen Titel 5.03 Credits für mittlere bis langfristige') AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'E' AND CFBilPre118.Eser = lEser AND CFBilPre118.UEB118 LIKE '503%' AND CFBilPre118.NUMRIGA = 1; -- T) Entrate Titolo 5.04 relative a Altre entrate per riduzioni di attività finanziaria INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 420, 'N', 'T) Entrate Titolo 5.04 relative a Altre entrate per riduzioni di attività finanziaria' AS Des, DECODE( sSeparat, null, null, 'T) Umsatzerlöse im Zusammenhang mit Titel 5.04 Sonstige Erlösschmälerungen von finanziellen Aktivitäten') AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'E' AND CFBilPre118.Eser = lEser AND CFBilPre118.UEB118 LIKE '504%' AND CFBilPre118.NUMRIGA = 1; -- X1) Spese Titolo 3.02 per Concessione crediti di breve termine INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 430, 'S', 'X1) Spese Titolo 3.02 per Concessione crediti di breve termine' AS Des, DECODE( sSeparat, null, null, 'X1) Titel Aufwendungen 3.02 Gewährung von kurzfristigen Krediten' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,3) LIKE '302%' AND CFBilPre118.NUMRIGA = 1; -- X2) Spese Titolo 3.03 per Concessione crediti di medio-lungo termine INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 440, 'S', 'X2) Spese Titolo 3.03 per Concessione crediti di medio-lungo termine' AS Des, DECODE( sSeparat, null, null, 'X2) Titel Aufwendungen 3.03 Gewährung von Krediten für mittel-bis langfristige' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,3) LIKE '303%' AND CFBilPre118.NUMRIGA = 1; -- Y) Spese Titolo 3.04 per Altre spese per acquisizioni di attività finanziarie INSERT INTO CFBilPre118EqBil ( Eser, NumRiga, FlNumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 450, 'S', 'Y) Spese Titolo 3.04 per Altre spese per acquisizioni di attività finanziarie' AS Des, DECODE( sSeparat, null, null, 'Y) Die Gebühren für Titel 3.04 Sonstige Aufwendungen für den Erwerb von Finanzanlagen' ) AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) AS Prev1, NVL( SUM( CFBilPre118.Prev2 ), 0 ) AS Prev2, NVL( SUM( CFBilPre118.Prev3 ), 0 ) AS Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE CFBilPre118.App = 'S' AND CFBilPre118.Eser = lEser AND SUBSTR(CFBilPre118.UEB118,5,3) LIKE '304%' AND CFBilPre118.NUMRIGA = 1; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118EqBil', 'I', 'Generazione Equilibri di Bilancio', 'Eser:'||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118EqBil', 'I', 'Errore nella Generazione Equilibri di Bilancio', 'Eser: '||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBil118EqBil', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBil118EqBil; FUNCTION fnAggVarEqBil ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(2); lTimeStamp CFBilPre118EqBil.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) > TO_NUMBER( nAnno ) THEN ERRDIAG := 'L''anno non risulta approvato'; RETURN pkUtility.fnError( '2pkContPEG.fnAggVarEqBil', -499, ERRDIAG ); END IF; -- primo blocco importi EQUILIBRIO -- -- A) Fondo pluriennale vincolato di entrata per spese correnti UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'S' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.FLCopFPlur(+) = 'S' AND CFCapitoliPEG.Eser(+) = lEser AND Codice3 = 1 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'S' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.FLCopFPlur = 'S' AND CFCapitoliPEG.Eser(+) = lEser+1 AND Codice3 = 1 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'S' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.FLCopFPlur = 'S' AND CFCapitoliPEG.Eser(+) = lEser+2 AND Codice3 = 1 ) WHERE Eser = lEser AND NumRiga = 100; -- B) Entrate Titoli 1.00 - 2.00 - 3.00 UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) BETWEEN 1 AND 3 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND SUBSTR(UEB118,1,1) BETWEEN 1 AND 3 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND SUBSTR(UEB118,1,1) BETWEEN 1 AND 3 ) WHERE Eser = lEser AND NumRiga = 120; -- C) Entrate Titolo 4.02.06 - Contributi agli investimenti direttamente destinati al rimborso dei prestiti da amministrazioni pubbliche UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND UEB118 LIKE '40206%' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND UEB118 LIKE '40206%' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND UEB118 LIKE '40206%' ) WHERE Eser = lEser AND NumRiga = 130; -- D)Spese Titolo 1.00 - Spese correnti UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,1) = 1 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,1) = 1 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,1) = 1 ) WHERE Eser = lEser AND NumRiga = 140; -- di cui -- - fondo pluriennale vincolato UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFAnagraficaCapitoli.FlFondoPlur = 'S' AND SUBSTR(UEB118,5,1) = 1 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFAnagraficaCapitoli.FlFondoPlur = 'S' AND SUBSTR(UEB118,5,1) = 1 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFAnagraficaCapitoli.FlFondoPlur = 'S' AND SUBSTR(UEB118,5,1) = 1 ) WHERE Eser = lEser AND NumRiga = 143; -- - fondo crediti di dubbia esigibilità UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND IDDespFin = 'U1100103001' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND IDDespFin = 'U1100103001' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND IDDespFin = 'U1100103001' ) -- Fondo crediti di dubbia e difficile esazione di parte corrente WHERE Eser = lEser AND NumRiga = 147; -- E) Spese Titolo 2.04 - Altri trasferimenti in conto capitale UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,3) LIKE '204%' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,3) LIKE '204%' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,3) LIKE '204%' ) WHERE Eser = lEser AND NumRiga = 150; -- F) Spese Titolo 4.00 - Quote di capitale amm.to dei mutui e prestiti obbligazionari UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,1) = 4 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,1) = 4 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,1) = 4 ) WHERE Eser = lEser AND NumRiga = 160; -- EQUILIBRIO DI PARTE CORRENTE -- -- EQUILIBRIO DI PARTE CAPITALE -- -- Q) Fondo pluriennale vincolato di entrata per spese in conto capitale UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND FLCopFPlur = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,1) = 2 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND FLCopFPlur = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,1) = 2 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND FLCopFPlur = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,1) = 4 ) WHERE Eser = lEser AND NumRiga = 305; -- R) Entrate Titoli 4.00-5.00-6.00 UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) BETWEEN 4 AND 6 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND SUBSTR(UEB118,1,1) BETWEEN 4 AND 6 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND SUBSTR(UEB118,1,1) BETWEEN 4 AND 6 ) WHERE Eser = lEser AND NumRiga = 310; -- C) Entrate Titolo 4.02.06 - Contributi agli investimenti direttamente destinati al rimborso dei prestiti da amministrazioni pubbliche UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND UEB118 LIKE '40206%' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND UEB118 LIKE '40206%' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND UEB118 LIKE '40206%' ) WHERE Eser = lEser AND NumRiga = 315; -- S1) Entrate Titolo 5.02 per Riscossione crediti di breve termine UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND UEB118 LIKE '502%' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND UEB118 LIKE '502%' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND UEB118 LIKE '502%' ) WHERE Eser = lEser AND NumRiga = 325; -- S2) Entrate Titolo 5.03 per Riscossione crediti di medio-lungo termine UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND UEB118 LIKE '503%' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND UEB118 LIKE '503%' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND UEB118 LIKE '503%' ) WHERE Eser = lEser AND NumRiga = 330; -- T) Entrate Titolo 5.04 relative a Altre entrate per riduzioni di attività finanziaria UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND UEB118 LIKE '504%' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND UEB118 LIKE '504%' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND UEB118 LIKE '504%' ) WHERE Eser = lEser AND NumRiga = 335; -- U) Spese Titolo 2.00 - Spese in conto capitale UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,1) = 2 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,1) = 2 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,1) = 2 ) WHERE Eser = lEser AND NumRiga = 345; -- di cui fondo pluriennale vincolato di spesa UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFAnagraficaCapitoli.FlFondoPlur = 'S' AND SUBSTR(UEB118,5,1) = 2 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFAnagraficaCapitoli.FlFondoPlur = 'S' AND SUBSTR(UEB118,5,1) = 2 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFAnagraficaCapitoli.FlFondoPlur = 'S' AND SUBSTR(UEB118,5,1) = 2 ) WHERE Eser = lEser AND NumRiga = 347; -- V) Spese Titolo 3.01 per Acquisizioni di attività finanziarie UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,3) = '301' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,3) = '301' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,3) = '301' ) WHERE Eser = lEser AND NumRiga = 350; -- E) Spese Titolo 2.04 - Altri trasferimenti in conto capitale UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,3) = '204' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,3) = '204' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,3) = '204' ) WHERE Eser = lEser AND NumRiga = 355; -- EQUILIBRIO FINALE -- -- S1) Entrate Titolo 5.02 per Riscossione crediti di breve termine UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND UEB118 LIKE '502%' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND UEB118 LIKE '502%' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND UEB118 LIKE '502%' ) WHERE Eser = lEser AND NumRiga = 400; -- S2) Entrate Titolo 5.03 per Riscossione crediti di medio-lungo termine UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND UEB118 LIKE '503%' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND UEB118 LIKE '503%' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND UEB118 LIKE '503%' ) WHERE Eser = lEser AND NumRiga = 410; -- T) Entrate Titolo 5.04 relative a Altre entrate per riduzioni di attività finanziaria UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND UEB118 LIKE '504%' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND UEB118 LIKE '504%' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND UEB118 LIKE '504%' ) WHERE Eser = lEser AND NumRiga = 420; -- X1) Spese Titolo 3.02 per Concessione crediti di breve termine UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,3) = '302' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,3) = '302' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,3) = '302' ) WHERE Eser = lEser AND NumRiga = 430; -- X2) Spese Titolo 3.03 per Concessione crediti di medio-lungo termine UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,3) = '303' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,3) = '303' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,3) = '303' ) WHERE Eser = lEser AND NumRiga = 440; -- Y) Spese Titolo 3.04 per Altre spese per acquisizioni di attività finanziarie UPDATE CFBilPre118EqBil SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,3) = '304' ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,3) = '304' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,3) = '304' ) WHERE Eser = lEser AND NumRiga = 450; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118EqBil', 'U', 'Aggiornamento Variazioni Equilibri di Bilancio', 'Eser:'||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118EqBil', 'I', 'Errore nella Generazione Equilibri di Bilancio', 'Eser: '||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnAggVarEqBil', SQLCODE, ERRDIAG ); COMMIT; END fnAggVarEqBil; /********************************************************************************************** * Funzioni per la Generazione della stampa Allegato n.7 * * Bilancio di previsione - Equilibri di Bilancio * * Utilizzate nella Predisposizione del Bilancio di Previsione * **********************************************************************************************/ FUNCTION fnCFBilPre118EqBilUpd ( lEser IN pkType.tyStringa%type, -- CFBilPre118EqBil lNumRiga IN pkType.tyStringa%type, -- CFBilPre118EqBil lPrev1 IN pkType.tyStringa%type, -- CFBilPre118EqBil lPrev2 IN pkType.tyStringa%type, -- CFBilPre118EqBil lPrev3 IN pkType.tyStringa%type, -- CFBilPre118EqBil lVarPrev1 IN pkType.tyStringa%type, -- CFBilPre118EqBil lVarPrev2 IN pkType.tyStringa%type, -- CFBilPre118EqBil lVarPrev3 IN pkType.tyStringa%type, -- CFBilPre118EqBil lCodSes IN pkType.tyStringa%type, -- CFBilPre118EqBil ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilPre118EqBil.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); nCountSfora number(2); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%type; BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; /* aggiorno il record solo se non si è verificato un blocco di DB o un blocco di tabella 'contemporaneamente' alla richiesta del blocco del record; in questo caso ha priorità il blocco DB o il blocco di tabella */ nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118EqBil', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN ROLLBACK; RETURN nRet; ELSIF ( nRet = 0 ) THEN ROLLBACK; -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118EqBilUpd', -499, ERRDIAG ); END IF; nCountSfora := 0; -- si controlla se l'importo "di cui" inserito sfora l'importo "padre" IF lNumRiga = 125 THEN -- B) Entrate Titoli 1.00 - 2.00 - 3.00 SELECT COUNT(*) INTO nCountSfora FROM CFBilPre118EqBil WHERE NumRiga = 120 AND ( (Prev1+VarPrev1) < (lPrev1+lVarPrev1) OR (Prev2+VarPrev2) < (lPrev2+lVarPrev2) OR (Prev3+VarPrev3) < (lPrev3+lVarPrev3) ) AND Eser = lEser; ELSIF lNumRiga = 165 THEN -- F) Spese Titolo 4.00 - Quote di capitale amm.to dei mutui e prestiti obbligazionari SELECT COUNT(*) INTO nCountSfora FROM CFBilPre118EqBil WHERE NumRiga = 160 AND ( (Prev1+VarPrev1) < (lPrev1+lVarPrev1) OR (Prev2+VarPrev2) < (lPrev2+lVarPrev2) OR (Prev3+VarPrev3) < (lPrev3+lVarPrev3) ) AND Eser = lEser; ELSIF lNumRiga = 205 THEN -- H) Utilizzo avanzo di amministrazione per spese correnti SELECT COUNT(*) INTO nCountSfora FROM CFBilPre118EqBil WHERE NumRiga = 200 AND ( (Prev1+VarPrev1) < (lPrev1+lVarPrev1) OR (Prev2+VarPrev2) < (lPrev2+lVarPrev2) OR (Prev3+VarPrev3) < (lPrev3+lVarPrev3) ) AND Eser = lEser; ELSIF lNumRiga = 215 THEN -- I) Entrate di parte capitale destinate a spese correnti in base a specifiche disposizioni di legge SELECT COUNT(*) INTO nCountSfora FROM CFBilPre118EqBil WHERE NumRiga = 210 AND ( (Prev1+VarPrev1) < (lPrev1+lVarPrev1) OR (Prev2+VarPrev2) < (lPrev2+lVarPrev2) OR (Prev3+VarPrev3) < (lPrev3+lVarPrev3) ) AND Eser = lEser; END IF; IF nCountSfora <> 0 THEN ERRDIAG := pkUtilityCont.fnErroriPers( 2052, 0 ); -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 2052, 1 )|| sSeparat || pkUtilityCont.fnErroriPers( 2052, 2 )|| sSeparat || pkUtilityCont.fnErroriPers( 2052, 3 ); END IF; ROLLBACK; RETURN pkUtility.fnError ( '2pkContPEG.fnCFBilPre118EqBilUpd', -499, ERRDIAG ); ELSE -- si controlla se l'importo "padre" inserito è coerente con l'importo "di cui" nCountSfora := 0; -- H) Utilizzo avanzo di amministrazione per spese correnti IF lNumRiga = 200 THEN -- di cui SELECT COUNT(*) INTO nCountSfora FROM CFBilPre118EqBil WHERE NumRiga = 205 AND ( (Prev1+VarPrev1) > (lPrev1+lVarPrev1) OR (Prev2+VarPrev2) > (lPrev2+lVarPrev2) OR (Prev3+VarPrev3) > (lPrev3+lVarPrev3) ) AND Eser = lEser; ELSIF lNumRiga = 210 THEN -- I) Entrate di parte capitale destinate a spese correnti in base a specifiche disposizioni di legge -- di cui SELECT COUNT(*) INTO nCountSfora FROM CFBilPre118EqBil WHERE NumRiga = 215 AND ( (Prev1+VarPrev1) > (lPrev1+lVarPrev1) OR (Prev2+VarPrev2) > (lPrev2+lVarPrev2) OR (Prev3+VarPrev3) > (lPrev3+lVarPrev3) ) AND Eser = lEser; END IF; IF nCountSfora <> 0 THEN ERRDIAG := pkUtilityCont.fnErroriPers( 2053, 0 ); -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 2053, 1 )|| sSeparat || pkUtilityCont.fnErroriPers( 2053, 2 )|| sSeparat || pkUtilityCont.fnErroriPers( 2053, 3 ); END IF; ROLLBACK; RETURN pkUtility.fnError ( '2pkContPEG.fnCFBilPre118EqBilUpd', -499, ERRDIAG ); END IF; END IF; -- IF nCountSfora <> 0 THEN -- aggiornamento del record con FlNumRiga a 'S' visibile all'esterno e modificabile IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN UPDATE CFBilPre118EqBil SET VarPrev1 = lVarPrev1, VarPrev2 = lVarPrev2, VarPrev3 = lVarPrev3, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND NumRiga = lNumRiga; ELSE UPDATE CFBilPre118EqBil SET Prev1 = lPrev1, Prev2 = lPrev2, Prev3 = lPrev3, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND NumRiga = lNumRiga; END IF; -- aggiornamento del corrispondente record con FlNumRiga a 'N' non visibile dall'esterno IF lNumRiga IN ( 130, 150, 210, 220, 230, 350, 360, 370 ) THEN IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN UPDATE CFBilPre118EqBil SET VarPrev1 = lVarPrev1, VarPrev2 = lVarPrev2, VarPrev3 = lVarPrev3, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND NumRiga = DECODE( lNumRiga, 130, 315, 150, 355, 210, 320, 220, 340, 230, 343, 325, 400, 330, 410, 335, 420, lNumRiga ); ELSE UPDATE CFBilPre118EqBil SET Prev1 = lPrev1, Prev2 = lPrev2, Prev3 = lPrev3, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND NumRiga = DECODE( lNumRiga, 130, 315, 150, 355, 210, 320, 220, 340, 230, 343, 325, 400, 330, 410, 335, 420, lNumRiga ); END IF; END IF; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilPre118EqBilRLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118EqBilUpd', -212, ERRDIAG ); END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118EqBil' ) AND DesPK = UPPER( lEser||CHR(0167)||lNumRiga ); -- inserimento del log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118EqBil', 'U','Aggiornamento della tabella CFBilPre118EqBil', 'Eser: '||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; nRet := pkContPerson.fnCFLogIns( 'CFBilPre118EqBil', 'U', 'Errore: ' || SUBSTR( SQLERRM, 1, 245 ), 'Eser: '||lEser||' - NumRiga: '||lNumRiga, NULL, NULL, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118EqBilUpd', SQLCODE, ERRDIAG ); END fnCFBilPre118EqBilUpd; FUNCTION fnCFBilPre118EqBilRLkDph ( lEser IN pkType.tyStringa%type, -- CFBilPre118EqBil lNumRiga IN pkType.tyStringa%type, -- CFBilPre118EqBil lCodSes IN pkType.tyStringa%type, -- CFBilPre118EqBil lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFBilPre118EqBil.TmsLock%type; TmpCodSes CFBilPre118EqBil.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118EqBil', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118EqBilRLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFBilPre118EqBil WHERE Eser = lEser AND NumRiga = lNumRiga FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN -- in attesa di una migliore gestione --IF ( lTmsLockIN <> TmpTmsLock ) THEN /* record aggiornato, nel frattempo, da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ -- ROLLBACK; -- RETURN pkUtility.fnError( '5pkContPEG..fnCFBilPrevRLkDph', -212, ERRDIAG); --END IF; UPDATE CFBilPre118EqBil SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND NumRiga = lNumRiga; IF lNumRiga IN ( 130, 150, 210, 220, 325, 330, 335 ) THEN UPDATE CFBilPre118EqBil SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND NumRiga = DECODE( lNumRiga, 130, 315, 150, 355, 210, 320, 220, 340, 325, 400, 330, 410, 335, 420, lNumRiga ); END IF; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFBilPre118EqBil' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumRiga ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFBilPre118EqBil' ), UPPER( lEser||CHR(0167)||lNumRiga ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFBilPre118EqBil' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lNumRiga AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPEG.fnCFBilPre118EqBilRLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118EqBilRLkDph', SQLCODE, ERRDIAG ); END fnCFBilPre118EqBilRLkDph; FUNCTION fnCFBilPre118EqBilRls ( lEser IN pkType.tyStringa%type, -- CFBilPre118EqBil lNumRiga IN pkType.tyStringa%type, -- CFBilPre118EqBil lCodSes IN pkType.tyStringa%type, -- CFBilPre118EqBil ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFBilPre118EqBil SET CodSes = 0 WHERE Eser = lEser AND NumRiga = lNumRiga AND CodSes = lCodSes; IF lNumRiga IN ( 130, 150, 210, 220, 325, 330, 335 ) THEN UPDATE CFBilPre118EqBil SET CodSes = 0 WHERE Eser = lEser AND NumRiga = DECODE( lNumRiga, 130, 315, 150, 355, 210, 320, 220, 340, 325, 400, 330, 410, 335, 420, lNumRiga ) AND CodSes = lCodSes; END IF; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118EqBil' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumRiga ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPre118EqBilRls', SQLCODE, ERRDIAG ); END fnCFBilPre118EqBilRls; /*************************************************************************************************** * Funzione per la Generazione della stampa * * PROSPETTO VERIFICA RISPETTO DEI VINCOLI DI FINANZA PUBBLICA * * Utilizzate nella Generazione del Bilancio di Previsione/Pluriennale * ***************************************************************************************************/ -- Autore: Torelli FUNCTION fnGenerazBilPre118FinPub ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; lTimeStamp CFBilPre118FinPub.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnGenerazBilPre118FinPub', -499, ERRDIAG ); END IF; -- cancellazione delle sole righe i cui importi sono gestiti in automatico DELETE CFBilPre118FinPub WHERE Eser = lEser; COMMIT; --------------------- ENTRATA ------------------------- -- A) Fondo pluriennale vincolato di entrata per spese correnti INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 100, 'A', 'A) Fondo pluriennale vincolato di entrata per spese correnti (solo per l''esercizio 2016)' Des, 'S' FlModificab, '+' Segno, NVL( SUM( StanzIni ), 0 ) Prev1, 0 Prev2, 0 Prev3, 0, lTimeStamp FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'S' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.FLCopFPlur(+) = 'S' AND CFCapitoliPEG.Eser(+) = lEser AND Codice3 = 1; -- B) Fondo pluriennale vincolato di entrata in conto capitale al netto delle quote finanziate da debito (solo per l'esercizio 2016) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 200, 'B', 'B) Fondo pluriennale vincolato di entrata in conto capitale al netto delle quote finanziate da debito (solo per l''esercizio 2016)' Des, 'S' FlModificab, '+' Segno, NVL( SUM( StanzIni ), 0 ) Prev1, 0 Prev2, 0 Prev3, 0, lTimeStamp FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'S' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.FLCopFPlur(+) = 'S' AND CFCapitoliPEG.Eser(+) = lEser AND Codice3 = 2; -- C) Titolo 1 - Entrate correnti di natura tributaria, contributiva e perequativa INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 300, 'C', 'C) Titolo 1 - Entrate correnti di natura tributaria, contributiva e perequativa' Des, 'S' FlModificab, '+' Segno, NVL( SUM( Prev1 ), 0 ) Prev1, NVL( SUM( Prev2 ), 0 ) Prev2, NVL( SUM( Prev3 ), 0 ) Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) = 1 AND NUMRIGA = 1; -- D1) Titolo 2 - Trasferimenti correnti INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 410, 'D1', 'D1) Titolo 2 - Trasferimenti correnti' Des, 'S' FlModificab, '+' Segno, NVL( SUM( Prev1 ), 0 ) Prev1, NVL( SUM( Prev2 ), 0 ) Prev2, NVL( SUM( Prev3 ), 0 ) Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) = 2 AND NUMRIGA = 1; -- D2) Contributo di cui all'art. 1, comma 20, legge di stabilità 2016 (solo 2016 per i comuni) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 420, 'D2', 'D2) Contributo di cui all''art. 1, comma 20, legge di stabilità 2016 (solo 2016 per i comuni)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- D3) Contributo di cui all'art. 1, comma 683, legge di stabilità 2016 (solo 2016 per le regioni) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 430, 'D3', 'D3) Contributo di cui all''art. 1, comma 683, legge di stabilità 2016 (solo 2016 per le regioni)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); COMMIT; -- D) Titolo 2 - Trasferimenti correnti validi ai fini dei saldi finanza pubblica (D=D1-D2-D3) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 499, 'D', 'D) Titolo 2 - Trasferimenti correnti validi ai fini dei saldi finanza pubblica (D=D1-D2-D3)' Des, 'N', '+', SUM( DECODE(segno, '+', Prev1, -Prev1) ), SUM( DECODE(segno, '+', Prev2, -Prev2) ), SUM( DECODE(segno, '+', Prev3, -Prev3) ), 0, lTimeStamp FROM CFBilPre118FinPub WHERE Eser = lEser AND SUBSTR(CodRiga,1,1) = 'D'; -- E) Titolo 3 - Entrate extratributarie INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 500, 'E', 'E) Titolo 3 - Entrate extratributarie' Des, 'S' FlModificab, '+' Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) Prev1, NVL( SUM( Prev2 ), 0 ) Prev2, NVL( SUM( Prev3 ), 0 ) Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) = 3 AND NUMRIGA = 1; -- F) Titolo 4 - Entrate in c/capitale INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 600, 'F', 'F) Titolo 4 - Entrate in c/capitale' Des, 'S' FlModificab, '+' Segno, NVL( SUM( CFBilPre118.Prev1 ), 0 ) Prev1, NVL( SUM( Prev2 ), 0 ) Prev2, NVL( SUM( Prev3 ), 0 ) Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) = 4 AND NUMRIGA = 1; -- G) Titolo 5 - Entrate da riduzione di attività finanziarie INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 700, 'G', 'G) Titolo 5 - Entrate da riduzione di attività finanziarie' Des, 'S' FlModificab, '+' Segno, NVL( SUM( Prev1 ), 0 ) Prev1, NVL( SUM( Prev2 ), 0 ) Prev2, NVL( SUM( Prev3 ), 0 ) Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) = 5 AND NUMRIGA = 1; -- H) ENTRATE FINALI VALIDE AI FINI DEI SALDI DI FINANZA PUBBLICA (H=C+D+E+F+G) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 1000, 'H', ' H) ENTRATE FINALI VALIDE AI FINI DEI SALDI DI FINANZA PUBBLICA (H=C+D+E+F+G)' Des, 'N', '+', SUM( DECODE(segno, '+', Prev1, -Prev1) ), SUM( DECODE(segno, '+', Prev2, -Prev2) ), SUM( DECODE(segno, '+', Prev3, -Prev3) ), 0, lTimeStamp FROM CFBilPre118FinPub WHERE Eser = lEser AND CodRiga IN ('C','D','E','F','G'); --------------------- SPESA ------------------------- -- I1) Titolo 1 - Spese correnti al netto del fondo pluriennale vincolato INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 1100, 'I1', 'I1) Titolo 1 - Spese correnti al netto del fondo pluriennale vincolato' Des, 'S' FlModificab, '+' Segno, NVL( SUM( DECODE( NUMRIGA, 3, -Prev1, Prev1 ) ), 0 ) Prev1, NVL( SUM( DECODE( NUMRIGA, 3, -Prev2, Prev2 ) ), 0 ) Prev2, NVL( SUM( DECODE( NUMRIGA, 3, -Prev3, Prev3 ) ), 0 ) Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,1) = 1 AND NUMRIGA IN ( 1, 3 ); -- I2) Fondo pluriennale vincolato di parte corrente (solo per il 2016) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 1110, 'I2', 'I2) Fondo pluriennale vincolato di parte corrente (solo per il 2016)' Des, 'S' FlModificab, '+' Segno, NVL( SUM( Prev1 ), 0 ) Prev1, 0 Prev2, 0 Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,1) = 1 AND NUMRIGA = 3; -- I3) Fondo crediti di dubbia esigibilità di parte corrente INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 1120, 'I3', 'I3) Fondo crediti di dubbia esigibilità di parte corrente' Des, 'S' FlModificab, '-' Segno, NVL( SUM( StanzIni ), 0 ) Prev1, 0 Prev2, 0 Prev3, 0, lTimeStamp FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND IDDespFin = 'U1100103001'; -- Fondo crediti di dubbia e difficile esazione di parte corrente ------------------------------------------------------------------------- -- Aggiorna Prev2 UPDATE CFBilPre118FinPub SET Prev2 = ( SELECT NVL( SUM( StanzIni ), 0 ) FROM CFCapitoliPEG WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.IDDespFin = 'U1100103001' ) -- Fondo crediti di dubbia e difficile esazione di parte corrente WHERE Eser = lEser AND NumRiga = 1120; -- Aggiorna Prev3 UPDATE CFBilPre118FinPub SET Prev3 =( SELECT NVL( SUM( StanzIni ), 0 ) FROM CFCapitoliPEG WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.IDDespFin = 'U1100103001' ) -- Fondo crediti di dubbia e difficile esazione di parte corrente WHERE Eser = lEser AND NumRiga = 1120; ------------------------------------------------------------------------ -- I4) Fondo contenzioso (destinato a confluire nel risultato di amministrazione) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 1130, 'I4', 'I4) Fondo contenzioso (destinato a confluire nel risultato di amministrazione)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- I5) Altri accantonamenti (destinati a confluire nel risultato di amministrazione) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 1140, 'I5', 'I5) Altri accantonamenti (destinati a confluire nel risultato di amministrazione)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- I6) Spese correnti per interventi di bonifica ambientale di cui all'art. 1, comma 716, Legge di stabilità 2016 (solo 2016 per gli enti locali) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 1150, 'I6', 'I6) Spese correnti per interventi di bonifica ambientale di cui all''art. 1, comma 716, Legge di stabilità 2016 (solo 2016 per gli enti locali)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- I7) Spese correnti per sisma maggio 2012, finanziate secondo le modalità di cui all'art. 1, comma 441, Legge di stabilità 2016 (solo 2016 per gli enti locali dell'Emilia Romagna, Lombardia e Veneto) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 1160, 'I7', 'I7) Spese correnti per sisma maggio 2012, finanziate secondo le modalità di cui all''art. 1, comma 441, Legge di stabilità 2016 (solo 2016 per gli enti locali dell''Emilia Romagna, Lombardia e Veneto)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- I) Titolo 1 - Spese correnti valide ai fini dei saldi di finanza pubblica (I=I1+I2-I3-I4-I5-I6-I7) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 1199, 'I', 'I) Titolo 1 - Spese correnti valide ai fini dei saldi di finanza pubblica (I=I1+I2-I3-I4-I5-I6-I7)', 'N', '+', SUM( DECODE(segno, '+', Prev1, -Prev1) ), SUM( DECODE(segno, '+', Prev2, -Prev2) ), SUM( DECODE(segno, '+', Prev3, -Prev3) ), 0, lTimeStamp FROM CFBilPre118FinPub WHERE Eser = lEser AND SUBSTR(CodRiga,1,1) = 'I'; -- L1) Titolo 2 - Spese in c/ capitale al netto del fondo pluriennale vincolato INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 1200, 'L1', 'L1) Titolo 2 - Spese in c/ capitale al netto del fondo pluriennale vincolato' Des, 'S' FlModificab, '+' Segno, NVL( SUM( DECODE( NUMRIGA, 3, -Prev1, Prev1 ) ), 0 ) Prev1, NVL( SUM( DECODE( NUMRIGA, 3, -Prev2, Prev2 ) ), 0 ) Prev2, NVL( SUM( DECODE( NUMRIGA, 3, -Prev3, Prev3 ) ), 0 ) Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,1) = 2 AND NUMRIGA IN ( 1, 3 ); -- L2) Fondo pluriennale vincolato in c/capitale al netto delle quote finanziate da debito (solo per il 2016) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 1210, 'L2', 'L2) Fondo pluriennale vincolato in c/capitale al netto delle quote finanziate da debito (solo per il 2016)' Des, 'S' FlModificab, '+' Segno, NVL( SUM( Prev1 ), 0 ) Prev1, 0 Prev2, 0 Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,1) = 2 AND NUMRIGA = 3; -- L3) Fondo crediti di dubbia esigibilità in c/capitale (1) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 1220, 'L3', 'L3) Fondo crediti di dubbia esigibilità in c/capitale' Des, 'S' FlModificab, '-' Segno, NVL( SUM( StanzIni ), 0 ) Prev1, 0 Prev2, 0 Prev3, 0, lTimeStamp FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND IDDespFin = 'U2050301001'; -- Fondo crediti di dubbia e difficile esazione in c/capitale ------------------------------------------------------------------------- -- Aggiorna Prev2 UPDATE CFBilPre118FinPub SET Prev2 = ( SELECT NVL( SUM( StanzIni ), 0 ) FROM CFCapitoliPEG WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser+1 AND CFCapitoliPEG.IDDespFin = 'U2050301001' ) -- Fondo crediti di dubbia e difficile esazione in c/capitale WHERE Eser = lEser AND NumRiga = 1220; -- Aggiorna Prev3 UPDATE CFBilPre118FinPub SET Prev3 =( SELECT NVL( SUM( StanzIni ), 0 ) FROM CFCapitoliPEG WHERE CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser+2 AND CFCapitoliPEG.IDDespFin = 'U2050301001' ) -- Fondo crediti di dubbia e difficile esazione in c/capitale WHERE Eser = lEser AND NumRiga = 1220; ------------------------------------------------------------------------ -- L4) Altri accantonamenti (destinati a confluire nel risultato di amministrazione) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 1230, 'L4', 'L4) Altri accantonamenti (destinati a confluire nel risultato di amministrazione)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- L5) Spese per edilizia scolastica di cui all'art. 1, comma 713, Legge di stabilità 2016 (solo 2016 per gli enti locali) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 1240, 'L5', 'L5) Spese per edilizia scolastica di cui all''art. 1, comma 713, Legge di stabilità 2016 (solo 2016 per gli enti locali)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- L6) Spese in c/capitale per interventi di bonifica ambientale di cui all'art. 1, comma 716, Legge di stabilità 2016 (solo 2016 per gli enti locali) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 1250, 'L6', 'L6) Spese in c/capitale per interventi di bonifica ambientale di cui all''art. 1, comma 716, Legge di stabilità 2016 (solo 2016 per gli enti locali)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- L7) Spese in c/capitale per sisma maggio 2012, finanziate secondo le modalità di cui all'art. 1, comma 441, Legge di stabilità 2016 (solo 2016 per gli enti locali dell'Emilia Romagna, Lombardia e Veneto) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 1260, 'L7', 'L7) Spese in c/capitale per sisma maggio 2012, finanziate secondo le modalità di cui all''art. 1, comma 441, Legge di stabilità 2016 (solo 2016 per gli enti locali dell''Emilia Romagna, Lombardia e Veneto)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- L8) Spese per la realizzazione del Museo Nazionale della Shoah di cui all'art. 1, comma 750, Legge di stabilità 2016 (solo 2016 per Roma Capitale) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 1270, 'L8', 'L8) Spese per la realizzazione del Museo Nazionale della Shoah di cui all''art. 1, comma 750, Legge di stabilità 2016 (solo 2016 per Roma Capitale)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- L) Titolo 2 - Spese in c/capitale valide ai fini dei saldi di finanza pubblica (L=L1+L2-L3-L4-L5-L6-L7-L8) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 1299, 'L', 'L) Titolo 2 - Spese in c/capitale valide ai fini dei saldi di finanza pubblica (L=L1+L2-L3-L4-L5-L6-L7-L8)', 'N', '+', SUM( DECODE(segno, '+', Prev1, -Prev1) ), SUM( DECODE(segno, '+', Prev2, -Prev2) ), SUM( DECODE(segno, '+', Prev3, -Prev3) ), 0, lTimeStamp FROM CFBilPre118FinPub WHERE Eser = lEser AND SUBSTR(CodRiga,1,1) = 'L'; -- M) Titolo 3 - Spese per incremento di attività finanziaria INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 1300, 'M', 'M) Titolo 3 - Spese per incremento di attività finanziaria' Des, 'S' FlModificab, '+' Segno, NVL( SUM( Prev1 ), 0 ) Prev1, NVL( SUM( Prev2 ), 0 ) Prev2, NVL( SUM( Prev3 ), 0 ) Prev3, 0, lTimeStamp FROM CFBilPre118 WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,1) = 3 AND NUMRIGA = 1; -- N) SPESE FINALI VALIDE AI FINI DEI SALDI DI FINANZA PUBBLICA (N=I+L+M) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 2000, 'N', ' N) SPESE FINALI VALIDE AI FINI DEI SALDI DI FINANZA PUBBLICA (N=I+L+M)', 'N', '-', SUM(Prev1), SUM(Prev2), SUM(Prev3), 0, lTimeStamp FROM CFBilPre118FinPub WHERE Eser = lEser AND CodRiga IN ( 'I', 'L', 'M' ); -- O) SALDO TRA ENTRATE E SPESE FINALI VALIDE AI FINI DEI SALDI DI FINANZA PUBBLICA (O=A+B+H-N) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 3000, 'O', 'O) SALDO TRA ENTRATE E SPESE FINALI VALIDE AI FINI DEI SALDI DI FINANZA PUBBLICA (O=A+B+H-N) ', 'N', '+', SUM( DECODE(segno, '+', Prev1, -Prev1) ), SUM( DECODE(segno, '+', Prev2, -Prev2) ), SUM( DECODE(segno, '+', Prev3, -Prev3) ), 0, lTimeStamp FROM CFBilPre118FinPub WHERE Eser = lEser AND SUBSTR(CodRiga,1,1) IN ( 'A', 'B', 'H', 'N' ); ---------------------------------------------------------------------------------------------------------------------------------- -- Spazi finanziari ceduti o acquisiti ex art. 1, comma 728, Legge di stabilità 2016 (patto regionale) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 4100, 'P1', 'Spazi finanziari ceduti o acquisiti ex art. 1, comma 728, Legge di stabilità 2016 (patto regionale) (-)/(+)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- Spazi finanziari ceduti o acquisiti ex art. 1, comma 732, Legge di stabilità 2016 (patto nazionale orizzontale)(solo per gli enti locali) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 4200, 'P2', 'Spazi finanziari ceduti o acquisiti ex art. 1, comma 732, Legge di stabilità 2016 (patto nazionale orizzontale)(solo per gli enti locali) (-)/(+)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- Patto regionale orizzontale ai sensi del comma 141 dell'articolo 1 della legge n. 220/2010 anno 2014 (solo per gli enti locali) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 4300, 'P3', 'Patto regionale orizzontale ai sensi del comma 141 dell''articolo 1 della legge n. 220/2010 anno 2014 (solo per gli enti locali) (-)/(+)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- Patto regionale orizzontale ai sensi del comma 480 e segg. dell'articolo 1 della legge n. 190/2014 anno 2015 (solo per gli enti locali) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 4400, 'P4', 'Patto regionale orizzontale ai sensi del comma 480 e segg. dell''articolo 1 della legge n. 190/2014 anno 2015 (solo per gli enti locali) (-)/(+)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- Patto nazionale orizzontale ai sensi dei commi 1-7 dell'art. 4-ter del decreto legge n. 16/2012 anno 2014 (solo per gli enti locali) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 4500, 'P5', 'Patto nazionale orizzontale ai sensi dei commi 1-7 dell''art. 4-ter del decreto legge n. 16/2012 anno 2014 (solo per gli enti locali) (-)/(+)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- Patto nazionale orizzontale ai sensi dei commi 1-7 dell'art. 4-ter del decreto legge n. 16/2012 anno 2015 (solo per gli enti locali) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) VALUES( lEser, 4600, 'P6', 'Patto nazionale orizzontale ai sensi dei commi 1-7 dell''art. 4-ter del decreto legge n. 16/2012 anno 2015 (solo per gli enti locali) (-)/(+)', 'S', '-', 0, 0, 0, 0, lTimeStamp ); -- EQUILIBRIO FINALE (compresi gli effetti dei patti regionali e nazionali) INSERT INTO CFBilPre118FinPub ( Eser, NumRiga, CodRiga, Des, FlModificab, Segno, Prev1, Prev2, Prev3, CodSes, TmsLock ) SELECT lEser, 5000, NULL, ' EQUILIBRIO FINALE (compresi gli effetti dei patti regionali e nazionali)', 'N', '', SUM( DECODE(segno, '+', Prev1, -Prev1) ), SUM( DECODE(segno, '+', Prev2, -Prev2) ), SUM( DECODE(segno, '+', Prev3, -Prev3) ), 0, lTimeStamp FROM CFBilPre118FinPub WHERE Eser = lEser AND NumRiga BETWEEN 3000 AND 4600; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FinPub', 'I', 'Generazione PROSPETTO VERIFICA DEI VINCOLI DI FINANZA PUBBLICA', 'Eser:'||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FinPub', 'I', 'Errore nella Generazione PROSPETTO VERIFICA DEI VINCOLI DI FINANZA PUBBLICA', 'Eser: '||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBilPre118FinPub', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBilPre118FinPub; FUNCTION fnCFBilPre118FinPubRicalcTot ( lEser IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilPre118FinPub.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); sOpzLang CFOPZIONI.opzione%type; rowTab CFBilPre118FinPub%rowtype; BEGIN -- ricalcoliamo i totali se cambiamo dei dettagli intermedi (di lunghezza 2) UPDATE CFBilPre118FinPub SET Prev1 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev1, -dett.Prev1) ) FROM CFBilPre118FinPub dett WHERE SUBSTR(dett.CodRiga,1,1) = CFBilPre118FinPub.CodRiga AND dett.CodRiga <> CFBilPre118FinPub.CodRiga AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev1 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev1, -dett.VarPrev1) ) FROM CFBilPre118FinPub dett WHERE SUBSTR(dett.CodRiga,1,1) = CFBilPre118FinPub.CodRiga AND dett.CodRiga <> CFBilPre118FinPub.CodRiga AND dett.Eser = CFBilPre118FinPub.Eser ), Prev2 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev2, -dett.Prev2 ) ) FROM CFBilPre118FinPub dett WHERE SUBSTR(dett.CodRiga,1,1) = CFBilPre118FinPub.CodRiga AND dett.CodRiga <> CFBilPre118FinPub.CodRiga AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev2 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev2, -dett.VarPrev2) ) FROM CFBilPre118FinPub dett WHERE SUBSTR(dett.CodRiga,1,1) = CFBilPre118FinPub.CodRiga AND dett.CodRiga <> CFBilPre118FinPub.CodRiga AND dett.Eser = CFBilPre118FinPub.Eser ), Prev3 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev3, -dett.Prev3 ) ) FROM CFBilPre118FinPub dett WHERE SUBSTR(dett.CodRiga,1,1) = CFBilPre118FinPub.CodRiga AND dett.CodRiga <> CFBilPre118FinPub.CodRiga AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev3 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev3, -dett.VarPrev3) ) FROM CFBilPre118FinPub dett WHERE SUBSTR(dett.CodRiga,1,1) = CFBilPre118FinPub.CodRiga AND dett.CodRiga <> CFBilPre118FinPub.CodRiga AND dett.Eser = CFBilPre118FinPub.Eser ) WHERE Eser = lEser AND CodRiga IN ( 'D', 'I', 'L' ); -- ricalcoliamo i totali Entrata e Spesa e Generali -- H) ENTRATE FINALI VALIDE AI FINI DEI SALDI DI FINANZA PUBBLICA (H=C+D+E+F+G) UPDATE CFBilPre118FinPub SET Prev1 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev1, -dett.Prev1) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'C','D','E','F','G' ) AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev1 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev1, -dett.VarPrev1) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'C','D','E','F','G' ) AND dett.Eser = CFBilPre118FinPub.Eser ), Prev2 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev2, -dett.Prev2 ) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'C','D','E','F','G' ) AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev2 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev2, -dett.VarPrev2) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'C','D','E','F','G' ) AND dett.Eser = CFBilPre118FinPub.Eser ), Prev3 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev3, -dett.Prev3 ) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'C','D','E','F','G' ) AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev3 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev3, -dett.VarPrev3) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'C','D','E','F','G' ) AND dett.Eser = CFBilPre118FinPub.Eser ) WHERE Eser = lEser AND CodRiga = 'H'; -- N) SPESE FINALI VALIDE AI FINI DEI SALDI DI FINANZA PUBBLICA (N=I+L+M) UPDATE CFBilPre118FinPub SET Prev1 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev1, -dett.Prev1) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'I','L','M' ) AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev1 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev1, -dett.VarPrev1) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'I','L','M' ) AND dett.Eser = CFBilPre118FinPub.Eser ), Prev2 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev2, -dett.Prev2 ) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'I','L','M' ) AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev2 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev2, -dett.VarPrev2) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'I','L','M' ) AND dett.Eser = CFBilPre118FinPub.Eser ), Prev3 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev3, -dett.Prev3 ) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'I','L','M' ) AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev3 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev3, -dett.VarPrev3) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'I','L','M' ) AND dett.Eser = CFBilPre118FinPub.Eser ) WHERE Eser = lEser AND CodRiga = 'N'; -- O) SALDO TRA ENTRATE E SPESE FINALI VALIDE AI FINI DEI SALDI DI FINANZA PUBBLICA (O=A+B+H-N) UPDATE CFBilPre118FinPub SET Prev1 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev1, -dett.Prev1) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'A','B','H','N' ) AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev1 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev1, -dett.VarPrev1) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'A','B','H','N' ) AND dett.Eser = CFBilPre118FinPub.Eser ), Prev2 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev2, -dett.Prev2 ) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'A','B','H','N' ) AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev2 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev2, -dett.VarPrev2) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'A','B','H','N' ) AND dett.Eser = CFBilPre118FinPub.Eser ), Prev3 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev3, -dett.Prev3 ) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'A','B','H','N' ) AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev3 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev3, -dett.VarPrev3) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'A','B','H','N' ) AND dett.Eser = CFBilPre118FinPub.Eser ) WHERE Eser = lEser AND CodRiga = 'O'; -- EQUILIBRIO FINALE (compresi gli effetti dei patti regionali e nazionali) UPDATE CFBilPre118FinPub SET Prev1 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev1, -dett.Prev1) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'O','P1','P2','P3','P4','P5','P6') AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev1 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev1, -dett.VarPrev1) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'O','P1','P2','P3','P4','P5','P6') AND dett.Eser = CFBilPre118FinPub.Eser ), Prev2 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev2, -dett.Prev2 ) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'O','P1','P2','P3','P4','P5','P6') AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev2 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev2, -dett.VarPrev2) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'O','P1','P2','P3','P4','P5','P6') AND dett.Eser = CFBilPre118FinPub.Eser ), Prev3 = ( SELECT SUM( decode(dett.segno, '+', dett.Prev3, -dett.Prev3 ) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'O','P1','P2','P3','P4','P5','P6') AND dett.Eser = CFBilPre118FinPub.Eser ), VarPrev3 = ( SELECT SUM( decode(dett.segno, '+', dett.VarPrev3, -dett.VarPrev3) ) FROM CFBilPre118FinPub dett WHERE dett.CodRiga IN ( 'O','P1','P2','P3','P4','P5','P6') AND dett.Eser = CFBilPre118FinPub.Eser ) WHERE Eser = lEser AND NumRiga = 5000; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FinPub', 'U', 'Errore nel ricalcolo totali PROSPETTO VERIFICA DEI VINCOLI DI FINANZA PUBBLICA', 'Eser: '||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPre118FinPubRicalcTot', SQLCODE, ERRDIAG ); COMMIT; END fnCFBilPre118FinPubRicalcTot; FUNCTION fnCFBilPre118FinPubUpd ( lEser IN pkType.tyStringa%type, lNumRiga IN pkType.tyStringa%type, lPrev1 IN pkType.tyStringa%type, lPrev2 IN pkType.tyStringa%type, lPrev3 IN pkType.tyStringa%type, lVarPrev1 IN pkType.tyStringa%type, lVarPrev2 IN pkType.tyStringa%type, lVarPrev3 IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilPre118FinPub.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); sOpzLang CFOPZIONI.opzione%type; rowTab CFBilPre118FinPub%rowtype; BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- seleziono il necessario per dopo SELECT * INTO rowTab FROM CFBilPre118FinPub WHERE Eser = lEser AND NumRiga = lNumRiga; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) > TO_NUMBER( nAnno ) THEN -- modifichiamo il singolo dato di previsione se l'anno non è stato approvato UPDATE CFBilPre118FinPub SET Prev1 = lPrev1, Prev2 = lPrev2, Prev3 = lPrev3 WHERE Eser = lEser AND NumRiga = lNumRiga AND CodSes = lCodSes; ELSE -- a bilancio approvato modifico le sole variazioni UPDATE CFBilPre118FinPub SET VarPrev1 = lVarPrev1, VarPrev2 = lVarPrev2, VarPrev3 = lVarPrev3 WHERE Eser = lEser AND NumRiga = lNumRiga AND CodSes = lCodSes; END IF; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilPre118FDelRLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118FDelUpd', -212, ERRDIAG ); END IF; -- se provano ad avvalorare un pluriennale non ammissibile lo rimettiamo a zero IF rowTab.CodRiga IN ( 'A', 'B', 'D2', 'D3', 'I2', 'I6', 'I7', 'L2', 'L5', 'L6', 'L7', 'L8', 'P3', 'P5' ) THEN UPDATE CFBilPre118FinPub SET Prev2 = 0, Prev3 = 0, VarPrev2 = 0, VarPrev3 = 0 WHERE Eser = lEser AND NumRiga = lNumRiga; END IF; -- per quelli che hanno solo il secondo pluriennale IF rowTab.CodRiga IN ( 'P4', 'P6' ) THEN UPDATE CFBilPre118FinPub SET Prev3 = 0, VarPrev3 = 0 WHERE Eser = lEser AND NumRiga = lNumRiga; END IF; COMMIT; nRet := fnCFBilPre118FinPubRicalcTot ( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118FinPub' ) AND DesPK = UPPER( lEser||CHR(0167)||lNumRiga ); COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FinPub', 'U', 'Modifca importi PROSPETTO VERIFICA DEI VINCOLI DI FINANZA PUBBLICA', lEser, lNumRiga, rowTab.CodRiga, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FinPub', 'U', 'Errore nella Modifca importi PROSPETTO VERIFICA DEI VINCOLI DI FINANZA PUBBLICA', 'Eser: '||lEser||' '||lNumRiga, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPre118FinPubUpd', SQLCODE, ERRDIAG ); COMMIT; END fnCFBilPre118FinPubUpd; FUNCTION fnAggVarFinPub ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; lTimeStamp CFBilPre118FinPub.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) > TO_NUMBER( nAnno ) THEN ERRDIAG := 'L''anno non risulta approvato'; RETURN pkUtility.fnError( '2pkContPEG.fnAggVarFinPub', -499, ERRDIAG ); END IF; --------------------- ENTRATA ------------------------- -- A) Fondo pluriennale vincolato di entrata per spese correnti UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'S' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.FLCopFPlur(+) = 'S' AND CFCapitoliPEG.Eser(+) = lEser AND Codice3 = 1 ) WHERE Eser = lEser AND CodRiga = 'A'; -- B) Fondo pluriennale vincolato di entrata in conto capitale al netto delle quote finanziate da debito (solo per l'esercizio 2016) UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM vwfrmCFAnagraficaUEB118, CFCapitoliPEG WHERE vwfrmCFAnagraficaUEB118.App = 'S' AND vwfrmCFAnagraficaUEB118.UEB118 = CFCapitoliPEG.UEB118(+) AND vwfrmCFAnagraficaUEB118.App = CFCapitoliPEG.App(+) AND CFCapitoliPEG.FLCopFPlur(+) = 'S' AND CFCapitoliPEG.Eser(+) = lEser AND Codice3 = 2 ) WHERE Eser = lEser AND CodRiga = 'B'; -- C) Titolo 1 - Entrate correnti di natura tributaria, contributiva e perequativa UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) = 1 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND SUBSTR(UEB118,1,1) = 1 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND SUBSTR(UEB118,1,1) = 1 ) WHERE Eser = lEser AND CodRiga = 'C'; -- D1) Titolo 2 - Trasferimenti correnti UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) = 2 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND SUBSTR(UEB118,1,1) = 2 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND SUBSTR(UEB118,1,1) = 2 ) WHERE Eser = lEser AND CodRiga = 'D1'; -- E) Titolo 3 - Entrate extratributarie UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) = 3 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND SUBSTR(UEB118,1,1) = 3 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND SUBSTR(UEB118,1,1) = 3 ) WHERE Eser = lEser AND CodRiga = 'E'; -- F) Titolo 4 - Entrate in c/capitale UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) = 4 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND SUBSTR(UEB118,1,1) = 4 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND SUBSTR(UEB118,1,1) = 4 ) WHERE Eser = lEser AND CodRiga = 'F'; -- G) Titolo 5 - Entrate da riduzione di attività finanziarie UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser AND SUBSTR(UEB118,1,1) = 5 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+1 AND SUBSTR(UEB118,1,1) = 5 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'E' AND Eser = lEser+2 AND SUBSTR(UEB118,1,1) = 5 ) WHERE Eser = lEser AND CodRiga = 'G'; --------------------- SPESA ------------------------- -- I1) Titolo 1 - Spese correnti al netto del fondo pluriennale vincolato UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND FlFondoPlur <> 'S' AND CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser AND SUBSTR(UEB118,5,1) = 1 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND FlFondoPlur <> 'S' AND CFCapitoliPEG.App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,1) = 1 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND FlFondoPlur <> 'S' AND CFCapitoliPEG.App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,1) = 1 ) WHERE Eser = lEser AND CodRiga = 'I1'; -- I2) Fondo pluriennale vincolato di parte corrente (solo per il 2016) UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND FlFondoPlur = 'S' AND CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser AND SUBSTR(UEB118,5,1) = 1 ) WHERE Eser = lEser AND CodRiga = 'I2'; -- I3) Fondo crediti di dubbia esigibilità di parte corrente UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND IDDespFin = 'U1100103001' ), -- Fondo crediti di dubbia e difficile esazione di parte corrente VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND IDDespFin = 'U1100103001' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND IDDespFin = 'U1100103001' ) WHERE Eser = lEser AND CodRiga = 'I3'; -- L1) Titolo 2 - Spese in c/ capitale al netto del fondo pluriennale vincolato UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND FlFondoPlur <> 'S' AND CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser AND SUBSTR(UEB118,5,1) = 2 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND FlFondoPlur <> 'S' AND CFCapitoliPEG.App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,1) = 2 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND FlFondoPlur <> 'S' AND CFCapitoliPEG.App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,1) = 2 ) WHERE Eser = lEser AND CodRiga = 'L1'; -- L2) Fondo pluriennale vincolato in c/capitale al netto delle quote finanziate da debito (solo per il 2016) UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND FlFondoPlur = 'S' AND CFCapitoliPEG.App = 'S' AND CFCapitoliPEG.Eser = lEser AND SUBSTR(UEB118,5,1) = 2 ) WHERE Eser = lEser AND CodRiga = 'L2'; -- L3) Fondo crediti di dubbia esigibilità in c/capitale (1) UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND IDDespFin = 'U2050301001' ), -- Fondo crediti di dubbia e difficile esazione in c/capitale VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND IDDespFin = 'U2050301001' ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND IDDespFin = 'U2050301001' ) WHERE Eser = lEser AND CodRiga = 'L3'; -- M) Titolo 3 - Spese per incremento di attività finanziaria UPDATE CFBilPre118FinPub SET VarPrev1 = ( SELECT NVL( SUM( VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser AND SUBSTR(UEB118,5,1) = 3 ), VarPrev2 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev2 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+1 AND SUBSTR(UEB118,5,1) = 3 ), VarPrev3 = ( SELECT NVL( SUM( AssestAnnPlur ), 0 ) - Prev3 FROM CFCapitoliPEG WHERE App = 'S' AND Eser = lEser+2 AND SUBSTR(UEB118,5,1) = 3 ) WHERE Eser = lEser AND CodRiga = 'M'; COMMIT; nRet := fnCFBilPre118FinPubRicalcTot ( lEser, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FinPub', 'U', 'Aggiornamento Variazioni PROSPETTO VERIFICA DEI VINCOLI DI FINANZA PUBBLICA', 'Eser:'||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118FinPub', 'U', 'Errore nell''aggiornamento delle variazioni del PROSPETTO VERIFICA DEI VINCOLI DI FINANZA PUBBLICA', 'Eser: '||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnAggVarFinPub', SQLCODE, ERRDIAG ); COMMIT; END fnAggVarFinPub; FUNCTION fnCFBilPre118FinPubRLkDph ( lEser IN pkType.tyStringa%type, lNumRiga IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFBilPre118FinPub.TmsLock%type; TmpCodSes CFBilPre118FinPub.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118FinPub', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118FinPubRLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFBilPre118FinPub WHERE Eser = lEser AND NumRiga = lNumRiga FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN UPDATE CFBilPre118FinPub SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND NumRiga = lNumRiga; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFBilPre118FinPub' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumRiga ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFBilPre118FinPub' ), UPPER( lEser||CHR(0167)||lNumRiga ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFBilPre118FinPub' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lNumRiga AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPEG.fnCFBilPre118FinPubRLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118FinPubRLkDph', SQLCODE, ERRDIAG ); END fnCFBilPre118FinPubRLkDph; FUNCTION fnCFBilPre118FinPubRls ( lEser IN pkType.tyStringa%type, -- CFBilPre118FinPub lNumRiga IN pkType.tyStringa%type, lCodSes IN pkType.tyStringa%type, -- CFBilPre118FinPub ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFBilPre118FinPub SET CodSes = 0 WHERE Eser = lEser AND NumRiga = lNumRiga AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118FinPub' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumRiga ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPre118FinPubRls', SQLCODE, ERRDIAG ); END fnCFBilPre118FinPubRls; /*************************************************************************************************** * Funzione per la Generazione della stampa Limiti di indebitamento Enti Locali * * Utilizzate nella Generazione del Bilancio di Previsione/Pluriennale * ***************************************************************************************************/ -- Autore: Katiuscia Bottiglia. FUNCTION fnGenerazBil118LimDeb ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(2); lTimeStamp CFBilPre118LimDeb.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnGenerazBil118LimDeb', -499, ERRDIAG ); END IF; -- presenza righe gestite i cui importi sono gestiti in manualmente SELECT COUNT(*) INTO nCount FROM CFBilPre118LimDeb WHERE FlModificab = 'S' AND Eser = lEser; -- inseriamo le righe solo la prima volta che generato IF nCount = 0 THEN -- ENTRATE RELATIVE AI PRIMI TRE TITOLI DELLE ENTRATE -- -- 1) Entrate correnti di natura tributaria, contributiva e perequativa (Titolo I) INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, Segno, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 100, '1) Entrate correnti di natura tributaria, contributiva e perequativa (Titolo I)' Des, DECODE( sSeparat, null, null, '1) Laufende Einnahmen aus Steuern, Abgaben und Entzerrung (Titel I)' ) Des1, NULL Des2, '+', 'S' FlModificab, NVL( SUM( ImpAcc ), 0 ) Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM CFConsE118 WHERE Eser = lEser-2 AND SUBSTR(UEB118,1,1) = 1; -- 2) Trasferimenti correnti (titolo II) INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, Segno, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 105, '2) Trasferimenti correnti (titolo II)' Des, DECODE( sSeparat, null, null, '2) Laufende Übertragungen (Titel II)' ) Des1, NULL Des2, '+', 'S' FlModificab, NVL( SUM( ImpAcc ), 0 ) Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM CFConsE118 WHERE Eser = lEser-2 AND SUBSTR(UEB118,1,1) = 2; -- 3) Entrate extratributarie (titolo III) INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, Segno, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 110, '3) Entrate extratributarie (titolo III)' Des, DECODE( sSeparat, null, null, '3) Umsatz extratributarie (Titel III)' ) Des1, NULL Des2, '+', 'S' FlModificab, NVL( SUM( ImpAcc ), 0 ) Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM CFConsE118 WHERE Eser = lEser-2 AND SUBSTR(UEB118,1,1) = 3; -- SPESA ANNUALE PER RATE MUTUI/OBBLIGAZIONI -- -- Livello massimo di spesa annuale INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, Segno, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 200, 'Livello massimo di spesa annuale' Des, DECODE( sSeparat, null, null, 'Maximale Höhe der jährlichen Ausgaben') Des1, NULL Des2, '+', 'S' FlModificab, 0 Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM DUAL; -- Ammontare interessi per mutui, prestiti obbligazionari, aperture di credito e garanzie di cui all'articolo 207 del TUEL autorizzati fino al 31/12/esercizio precedente INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, Segno, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 205, 'Ammontare interessi per mutui, prestiti obbligazionari, aperture di credito e garanzie di cui all''articolo 207 del TUEL autorizzati fino al 31/12/'||(lEser-1) Des, DECODE( sSeparat, null, null, 'Zinsen auf Hypotheken, Anleihen, Akkreditive und Garantien in Artikel 207 des TUEL festgesetzten Beträge eingezahlt ermächtigt, bis zum 31/12/'||(lEser-1)) Des1, NULL Des2, '-', 'S' FlModificab, 0 Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM DUAL; -- Ammontare interessi per mutui, prestiti obbligazionari, aperture di credito e garanzie di cui all'articolo 207 del TUEL autorizzati nell'esercizio in corso INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, Segno, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 210, 'Ammontare interessi per mutui, prestiti obbligazionari, aperture di credito e garanzie di cui all''articolo 207 del TUEL autorizzati nell''esercizio in corso' Des, DECODE( sSeparat, null, null, 'Zinsen auf Hypotheken, Anleihen, Akkreditive und Garantien in Artikel 207 des TUEL im aktuellen ermächtigt festgesetzten Beträge eingezahlt') Des1, NULL Des2, '-', 'S' FlModificab, 0 Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM DUAL; -- Contributi erariali in c/interessi su mutui INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, Segno, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 215, 'Contributi erariali in c/interessi su mutui' Des, DECODE( sSeparat, null, null, 'Beiträge Beiträge erariali in c/Zinsen auf Darlehen') Des1, NULL Des2, '+', 'S' FlModificab, 0 Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM DUAL; -- Ammontare interessi riguardanti debiti espressamente esclusi dai limiti di indebitamento INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, Segno, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 220, 'Ammontare interessi riguardanti debiti espressamente esclusi dai limiti di indebitamento' Des, DECODE( sSeparat, null, null, 'Zinsen auf Schulden bezahlt ausdrücklich von den Grenzen der Verschuldung ausgeschlossen') Des1, NULL Des2, '+', 'S' FlModificab, 0 Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM DUAL; -- Ammontare disponibile per nuovi interessi (è sommatoria per segno) -- TOTALE DEBITO CONTRATTO -- -- Debito contratto al 31/12/esercizio precedente INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, Segno, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 300, 'Debito contratto al 31/12/'||(lEser-1) Des, DECODE( sSeparat, null, null, 'Debt an der entstandenen 31/12/'||(lEser-1)) Des1, NULL Des2, '+', 'S' FlModificab, 0 Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM DUAL; -- Debito autorizzato nell'esercizio in corso INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, Segno, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 305, 'Debito autorizzato nell''esercizio in corso' Des, DECODE( sSeparat, null, null, 'Debt im laufenden Jahr genehmigt') Des1, NULL Des2, '+', 'S' FlModificab, 0 Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM DUAL; -- DEBITO POTENZIALE -- -- Garanzie principali o sussidiarie prestate dall'Ente a favore di altre Amministrazioni pubbliche e di altri soggetti INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 400, 'Garanzie principali o sussidiarie prestate dall''Ente a favore di altre Amministrazioni pubbliche e di altri soggetti' Des, DECODE( sSeparat, null, null, 'Garantien der Ente haupt-oder nebenberuflich für andere öffentliche Verwaltungen und andere Themen gegeben') Des1, NULL Des2, 'S' FlModificab, 0 Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM DUAL; -- di cui, garanzie per le quali è stato costituito accantonamento INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 403, ' di cui, garanzie per le quali è stato costituito accantonamento' Des, DECODE( sSeparat, null, null, ' von denen Garantien, für die Bestimmung gemacht worden') Des1, NULL Des2, 'S' FlModificab, 0 Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM DUAL; -- Garanzie che concorrono al limite di indebitamento INSERT INTO CFBilPre118LimDeb ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Prev, Prev1, Prev2, CodSes, TmsLock ) SELECT lEser, 405, 'Garanzie che concorrono al limite di indebitamento' Des, DECODE( sSeparat, null, null, 'Garantien, die Verschuldung zu begrenzen beitragen') Des1, NULL Des2, 'S' FlModificab, 0 Prev, 0 Prev1, 0 Prev2, 0, lTimeStamp FROM DUAL; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118LimDeb', 'I', 'Generazione dei Limiti di indebitamento', 'Eser:'||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; END IF; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118LimDeb', 'I', 'Errore nella Generazione Limiti di indebitamento', 'Eser: '||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBil118LimDeb', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBil118LimDeb; /********************************************************************************************** * Funzioni per la Generazione della stampa Allegato n.7 * * Bilancio di previsione - Limiti di indebitamento Enti Locali * * Utilizzate nella Predisposizione del Bilancio di Previsione * **********************************************************************************************/ FUNCTION fnCFBilPre118LimDebUpd ( lEser IN pkType.tyStringa%type, -- CFBilPre118LimDeb lNumRiga IN pkType.tyStringa%type, -- CFBilPre118LimDeb lPrev IN pkType.tyStringa%type, -- CFBilPre118LimDeb lPrev1 IN pkType.tyStringa%type, -- CFBilPre118LimDeb lPrev2 IN pkType.tyStringa%type, -- CFBilPre118LimDeb lCodSes IN pkType.tyStringa%type, -- CFBilPre118LimDeb ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilPre118LimDeb.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); nCountSfora number(2) := 0; sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%type; BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118LimDebUpd', -499, ERRDIAG ); END IF; /* aggiorno il record solo se non si è verificato un blocco di DB o un blocco di tabella 'contemporaneamente' alla richiesta del blocco del record; in questo caso ha priorità il blocco DB o il blocco di tabella */ nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118LimDeb', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN ROLLBACK; RETURN nRet; ELSIF ( nRet = 0 ) THEN ROLLBACK; -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118LimDebUpd', -499, ERRDIAG ); END IF; -- si controlla se l'importo "di cui" inserito sfora l'importo "padre" IF lNumRiga = 403 THEN -- Garanzie principali o sussidiarie prestate dall'Ente a favore di altre Amministrazioni pubbliche e di altri soggetti SELECT COUNT(*) INTO nCountSfora FROM CFBilPre118LimDeb WHERE Eser = lEser AND NumRiga = 400 AND ( Prev < lPrev OR Prev1 < lPrev1 OR Prev2 < lPrev2 ); IF nCountSfora > 0 THEN ERRDIAG := pkUtilityCont.fnErroriPers( 2052, 0 ); -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 2052, 1 )|| sSeparat || pkUtilityCont.fnErroriPers( 2052, 2 )|| sSeparat || pkUtilityCont.fnErroriPers( 2052, 3 ); END IF; ROLLBACK; RETURN pkUtility.fnError ( '2pkContPEG.fnCFBilPre118LimDebUpd', -499, ERRDIAG ); END IF; END IF; -- si controlla se l'importo "padre" inserito è coerente con l'importo "di cui" IF lNumRiga = 400 THEN -- Garanzie principali o sussidiarie prestate dall'Ente a favore di altre Amministrazioni pubbliche e di altri soggetti -- di cui SELECT COUNT(*) INTO nCountSfora FROM CFBilPre118LimDeb WHERE Eser = lEser AND NumRiga = 403 AND ( Prev > lPrev OR Prev1 > lPrev1 OR Prev2 > lPrev2 ); IF nCountSfora <> 0 THEN ERRDIAG := pkUtilityCont.fnErroriPers( 2053, 0 ); -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 2053, 1 )|| sSeparat || pkUtilityCont.fnErroriPers( 2053, 2 )|| sSeparat || pkUtilityCont.fnErroriPers( 2053, 3 ); END IF; ROLLBACK; RETURN pkUtility.fnError ( '2pkContPEG.fnCFBilPre118LimDebUpd', -499, ERRDIAG ); END IF; END IF; -- aggiornamento del record con FlNumRiga a 'S' visibile all'esterno e modificabile UPDATE CFBilPre118LimDeb SET Prev = lPrev, Prev1 = lPrev1, Prev2 = lPrev2, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND NumRiga = lNumRiga; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilPre118LimDebRLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118LimDebUpd', -212, ERRDIAG ); END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118LimDeb' ) AND DesPK = UPPER( lEser||CHR(0167)||lNumRiga ); -- inserimento del log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118LimDeb', 'U','Aggiornamento della tabella CFBilPre118LimDeb', 'Eser: '||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; nRet := pkContPerson.fnCFLogIns( 'CFBilPre118LimDeb', 'U', 'Errore: ' || SUBSTR( SQLERRM, 1, 245 ), 'Eser: '||lEser||' - NumRiga: '||lNumRiga, NULL, NULL, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118LimDebUpd', SQLCODE, ERRDIAG ); END fnCFBilPre118LimDebUpd; FUNCTION fnCFBilPre118LimDebRLkDph ( lEser IN pkType.tyStringa%type, -- CFBilPre118LimDeb lNumRiga IN pkType.tyStringa%type, -- CFBilPre118LimDeb lCodSes IN pkType.tyStringa%type, -- CFBilPre118LimDeb lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFBilPre118LimDeb.TmsLock%type; TmpCodSes CFBilPre118LimDeb.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118LimDeb', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118LimDebRLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFBilPre118LimDeb WHERE Eser = lEser AND NumRiga = lNumRiga FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN -- in attesa di una migliore gestione --IF ( lTmsLockIN <> TmpTmsLock ) THEN /* record aggiornato, nel frattempo, da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ -- ROLLBACK; -- RETURN pkUtility.fnError( '5pkContPEG..fnCFBilPrevRLkDph', -212, ERRDIAG); --END IF; UPDATE CFBilPre118LimDeb SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND NumRiga = lNumRiga; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFBilPre118LimDeb' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumRiga ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFBilPre118LimDeb' ), UPPER( lEser||CHR(0167)||lNumRiga ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFBilPre118LimDeb' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lNumRiga AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPEG.fnCFBilPre118LimDebRLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118LimDebRLkDph', SQLCODE, ERRDIAG ); END fnCFBilPre118LimDebRLkDph; FUNCTION fnCFBilPre118LimDebRls ( lEser IN pkType.tyStringa%type, -- CFBilPre118LimDeb lNumRiga IN pkType.tyStringa%type, -- CFBilPre118LimDeb lCodSes IN pkType.tyStringa%type, -- CFBilPre118LimDeb ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFBilPre118LimDeb SET CodSes = 0 WHERE Eser = lEser AND NumRiga = lNumRiga AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118LimDeb' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumRiga ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPre118LimDebRls', SQLCODE, ERRDIAG ); END fnCFBilPre118LimDebRls; /*************************************************************************************************** * Funzione per la Generazione della stampa Allegato n.7 * * Bilancio di previsione - Risultato presunto di amministrazione * * Utilizzate nella Generazione del Bilancio di Previsione/Pluriennale * ***************************************************************************************************/ -- Autore: Katiuscia Bottiglia. FUNCTION fnGenerazBil118RisAmmPres ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; nCount number(2); lTimeStamp CFBilPre118RisAmmPres.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnGenerazBil118RisAmmPres', -499, ERRDIAG ); END IF; -- cancellazione delle sole righe i cui importi sono gestiti in automatico DELETE CFBilPre118RisAmmPres WHERE FlModificab = 'N' AND Eser = lEser; COMMIT; -- presenza righe gestite i cui importi sono gestiti in manualmente SELECT COUNT(*) INTO nCount FROM CFBilPre118RisAmmPres WHERE FlModificab = 'S' AND Eser = lEser; -- 1) Determinazione del risultato di amministrazione presunto al 31/12/(Eser-1) -- -- Risultato di amministrazione iniziale dell'esercizio (Eser-1) IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1000, '+ Risultato di amministrazione iniziale dell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, ' Aus dem Beginn der Verabreichung '||(lEser-1)) AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Fondo pluriennale vincolato iniziale dell'esercizio (Eser-1) INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1100, '+ Fondo pluriennale vincolato iniziale dell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, ' Fonds eingeschränkt mehrjährigen Anlaufzeit '||(lEser-1)) AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( StanzIni + VarAum - VarDim ), 0 ) AS Prev, 0, lTimeStamp FROM CFCapitoliPEG, CFAnagraficaCapitoli WHERE CFCapitoliPEG.App = CFAnagraficaCapitoli.App AND CFCapitoliPEG.Cap = CFAnagraficaCapitoli.Cap AND CFCapitoliPEG.Art = CFAnagraficaCapitoli.Art AND CFCapitoliPEG.App = 'S' AND CFAnagraficaCapitoli.FlFondoPlur = 'S' AND CFCapitoliPEG.Eser = lEser-2; -- Entrate già accertate nell'esercizio (Eser-1) 1110 ->1210 INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1210, '+ Entrate già accertate nell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, ' Umsatz bereits im Jahr etabliert '||(lEser-1)) AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( CFAccertamenti.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( CFAccertamenti.IdAcc, (lEser) ) ), 0 ) AS Prev, 0, lTimeStamp FROM CFCapitoliPEG, CFAccertamenti WHERE CFAccertamenti.Eser = (lEser-1) AND CFAccertamenti.IdCapitolo = CFCapitoliPEG.IdCapitolo; -- Uscite già impegnate nell'esercizio (Eser-1) 1120 -> 1220 INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1220, '- Uscite già impegnate nell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, ' Ausgänge sind bereits in der Übung beteiligt '||(lEser-1)) AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( CFImpegni.ImpIni ), 0 ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( CFImpegni.IdImp, (lEser) ) ), 0 ) AS Prev, 0, lTimeStamp FROM CFCapitoliPEG, CFImpegni WHERE CFImpegni.Eser = (lEser-1) AND CFImpegni.IdCapitolo = CFCapitoliPEG.IdCapitolo; -- Variazioni dei residui attivi già verificatesi nell'esercizio (Eser-1) 1130 -> 1230 INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1230, '+/- Variazioni dei residui attivi già verificatesi nell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, '+/- Variationen der Wirkstoffe bereits im Laufe des Jahres entstandenen '||(lEser-1)) AS Des1, NULL AS Des2, 'N' AS FlModificab, '-' AS Segno, NVL( SUM( NVL( DECODE( FlTipoVar, 'D', ImpVar, -ImpVar ), 0 ) ), 0 ) AS Prev, 0, lTimeStamp FROM CFVarAccTestata, CFTipiVar, CFAccertamenti WHERE CFVarAccTestata.IdAcc(+) = CFAccertamenti.IdAcc AND CFVarAccTestata.IdTipoVar = CFTipiVar.IdTipoVar(+) AND TO_CHAR( CFVarAccTestata.DtaVar, 'YYYY' ) = (lEser-1) AND CFAccertamenti.Eser <= (lEser-2); -- Variazioni dei residui attivi già verificatesi nell'esercizio (Eser-1) 1140 -> 1240 INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1240, '-/+ Variazioni dei residui passivi già verificatesi nell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, '-/+ Variationen der restlichen Verbindlichkeiten bereits im Laufe des Jahres entstandenen '||(lEser-1)) AS Des1, NULL AS Des2, 'N' AS FlModificab, '+' AS Segno, NVL( SUM( NVL( DECODE( FlTipoVar, 'D', ImpStorno, -ImpStorno ), 0 ) ), 0 ) AS Prev, 0, lTimeStamp FROM CFStorniImpTestata, CFTipiVar, CFImpegni WHERE CFStorniImpTestata.IdImp(+) = CFImpegni.IdImp AND CFStorniImpTestata.IdTipoVar = CFTipiVar.IdTipoVar(+) AND TO_CHAR( CFStorniImpTestata.DtaStorno, 'YYYY' ) = (lEser-1) AND CFImpegni.Eser <= (lEser-2); -- Entrate che prevedo di accertare per il restante periodo dell'esercizio (Eser-1) 1210 -> 1310 IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1310, '+ Entrate che prevedo di accertare per il restante periodo dell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, '+ Planen Sie, dass die Einnahmen für den verbleibenden Zeitraum des gewährleisten '||(lEser-1)) AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Spese che prevedo di impegnare per il restante periodo dell'esercizio (Eser-1) 1220 - > 1320 IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1320, '- Spese che prevedo di impegnare per il restante periodo dell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, '- Ausgaben Plan, um die verbleibende Zeit des begehen '||(lEser-1)) AS Des1, NULL AS Des2, 'S' AS FlModificab, '-' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Variazioni dei residui attivi, presunte per il restante periodo dell'esercizio (Eser-1) 1230 -> 1330 IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1330, '+/- Variazioni dei residui attivi, presunte per il restante periodo dell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, '+/- Variationen der Wirkstoffe, für den verbleibenden Zeitraum des angeblichen '||(lEser-1)) AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Variazioni dei residui passivi, presunte per il restante periodo dell'esercizio (Eser-1) 1240 -> 1340 IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1340, '-/+ Variazioni dei residui passivi, presunte per il restante periodo dell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, '-/+ Änderungen in Verzug, für den verbleibenden Zeitraum des angeblichen '||(lEser-1)) AS Des1, NULL AS Des2, 'S' AS FlModificab, '-' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Fondo pluriennale vincolato finale presunto dell'esercizio (Eser-1) 1250 -> 1350 IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 1350, '- Fondo pluriennale vincolato finale presunto dell''esercizio '||(lEser-1) AS Des, DECODE( sSeparat, null, null, '- Fonds mehreren Jahren angenommen gebunden Jahresende '||(lEser-1)) AS Des1, NULL AS Des2, 'S' AS FlModificab, '-' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- 2) Composizione del risultato di amministrazione presunto al 31/12/(Eser-1) -- -- Parte accantonata -- -- Fondo crediti di dubbia esigibilità al 31/12/(Eser-1) IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2110, ' Fondo crediti di dubbia esigibilità al 31/12/'||(lEser-1) AS Des, DECODE( sSeparat, null, null, ' Fund zweifelhafte Forderungen bis 31/12/'||(lEser-1)) AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Fondo anticipazioni liquidità DL 35 del 2013 e successive modifiche e rifinanziamenti IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2120, ' Fondo anticipazioni liquidità DL 35 del 2013 e successive modifiche e rifinanziamenti' Des, DECODE( sSeparat, null, null, ' Fondo anticipazioni liquidità DL 35 del 2013 e successive modifiche e rifinanziamenti' ) Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Fondo perdite società partecipate IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2130, ' Fondo perdite società partecipate' Des, DECODE( sSeparat, null, null, ' Fondo perdite società partecipate' ) Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Fondo contenzioso IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2140, ' Fondo contenzioso' Des, DECODE( sSeparat, null, null, ' Fondo contenzioso' ) Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Altri accantonamenti IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2150, ' Altri accantonamenti' Des, DECODE( sSeparat, null, null, ' Altri accantonamenti' ) Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; ----------------------- -- Parte vincolata -- -- Vincoli derivanti da leggi e dai principi contabili IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2210, ' Vincoli derivanti da leggi e dai principi contabili' AS Des, DECODE( sSeparat, null, null, ' Einschränkungen, die sich aus Gesetzen und Rechnungslegungsstandards') AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Vincoli derivanti da trasferimenti IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2220, ' Vincoli derivanti da trasferimenti' AS Des, DECODE( sSeparat, null, null, ' Constraints aus Transfers') AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Vincoli derivanti dalla contrazione di mutui IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2230, ' Vincoli derivanti dalla contrazione di mutui' AS Des, DECODE( sSeparat, null, null, ' Zwänge, die sich aus der Übernahme von') AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Vincoli formalmente attribuiti dall'ente IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2240, ' Vincoli formalmente attribuiti dall''ente' AS Des, DECODE( sSeparat, null, null, ' Einschränkungen formal durch die ausgezeichnet') AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Altri vincoli IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2250, ' Altri vincoli' Des, DECODE( sSeparat, null, null, ' Andere Einschränkungen') AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; ----------------------- -- Parte destinata agli investimenti -- IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 2300, ' Parte destinata agli investimenti' AS Des, DECODE( sSeparat, null, null, ' Teil gewidmet, um Investitionen') AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; ----------------------- -- 3) Utilizzo quote vincolate del risultato di amministrazione presunto al 31/12/(Eser-1) -- -- Utilizzo quota vincolata -- -- Utilizzo vincoli derivanti da leggi e dai principi contabili IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 3110, ' Utilizzo vincoli derivanti da leggi e dai principi contabili' AS Des, DECODE( sSeparat, null, null, ' Mit Einschränkungen, die sich aus Gesetzen und Rechnungslegungsstandards') AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Utilizzo vincoli derivanti da trasferimenti IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 3120, ' Utilizzo vincoli derivanti da trasferimenti' AS Des, DECODE( sSeparat, null, null, ' Verwendungsbeschränkungen aus Übertragungen ergebenden') AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Utilizzo vincoli derivanti dalla contrazione di mutui IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 3130, ' Utilizzo vincoli derivanti dalla contrazione di mutui' AS Des, DECODE( sSeparat, null, null, ' Mit Zwänge, die sich aus der Übernahme von') AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Utilizzo vincoli formalmente attribuiti dall'ente IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 3140, ' Utilizzo vincoli formalmente attribuiti dall''ente' AS Des, DECODE( sSeparat, null, null, ' Mit Einschränkungen formal durch die vergeben') AS Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; -- Utilizzo altri vincoli IF nCount = 0 THEN INSERT INTO CFBilPre118RisAmmPres ( Eser, NumRiga, Des, Des__1, Des__2, FlModificab, Segno, Prev, CodSes, TmsLock ) SELECT lEser, 3150, ' Utilizzo altri vincoli' Des, DECODE( sSeparat, null, null, ' Mit anderen Einschränkungen') Des1, NULL AS Des2, 'S' AS FlModificab, '+' AS Segno, 0 AS Prev, 0, lTimeStamp FROM DUAL; END IF; ------------------------------ COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118RisAmmPres', 'I', 'Generazione del Risultato presunto di amministrazione', 'Eser:'||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118RisAmmPres', 'I', 'Errore nella Generazione del Risultato presunto di amministrazione', 'Eser: '||lEser, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazBil118RisAmmPres', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazBil118RisAmmPres; /********************************************************************************************** * Funzioni per la Generazione della stampa Allegato n.7 * * Bilancio di previsione - Risultato presunto di amministrazione * * Utilizzate nella Predisposizione del Bilancio di Previsione * **********************************************************************************************/ FUNCTION fnCFBilPre118RisAmmPresUpd ( lEser IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres lNumRiga IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres lPrev IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres lDes IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres lCodSes IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilPre118RisAmmPres.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%type; BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118RisAmmPresUpd', -499, ERRDIAG ); END IF; /* aggiorno il record solo se non si è verificato un blocco di DB o un blocco di tabella 'contemporaneamente' alla richiesta del blocco del record; in questo caso ha priorità il blocco DB o il blocco di tabella */ nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118RisAmmPres', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN ROLLBACK; RETURN nRet; ELSIF ( nRet = 0 ) THEN ROLLBACK; -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118RisAmmPresUpd', -499, ERRDIAG ); END IF; -- aggiornamento del record con FlNumRiga a 'S' visibile all'esterno e modificabile UPDATE CFBilPre118RisAmmPres SET Prev = lPrev, -- Des = DECODE( lNumRiga, 2120,' '||lDes, 2130,' '||lDes, Des ), -- commentata a seguito di aggiornamenti che definiscono le descrizioni che prima avevano i '........' da dover definire CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND NumRiga = lNumRiga; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilPre118RisAmmPresRLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118RisAmmPresUpd', -212, ERRDIAG ); END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118RisAmmPres' ) AND DesPK = UPPER( lEser||CHR(0167)||lNumRiga ); -- inserimento del log nRet := pkContPerson.fnCFLogIns( 'CFBilPre118RisAmmPres', 'U','Aggiornamento della tabella CFBilPre118RisAmmPres', 'Eser: '||lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; nRet := pkContPerson.fnCFLogIns( 'CFBilPre118RisAmmPres', 'U', 'Errore: ' || SUBSTR( SQLERRM, 1, 245 ), 'Eser: '||lEser||' - NumRiga: '||lNumRiga, NULL, NULL, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPre118RisAmmPresUpd', SQLCODE, ERRDIAG ); END fnCFBilPre118RisAmmPresUpd; FUNCTION fnCFBilPre118RisAmmPresRLkDph ( lEser IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres lNumRiga IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres lCodSes IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFBilPre118RisAmmPres.TmsLock%type; TmpCodSes CFBilPre118RisAmmPres.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilPre118RisAmmPres', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118RisAmmPresRLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFBilPre118RisAmmPres WHERE Eser = lEser AND NumRiga = lNumRiga FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN -- in attesa di una migliore gestione --IF ( lTmsLockIN <> TmpTmsLock ) THEN /* record aggiornato, nel frattempo, da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ -- ROLLBACK; -- RETURN pkUtility.fnError( '5pkContPEG..fnCFBilPrevRLkDph', -212, ERRDIAG); --END IF; UPDATE CFBilPre118RisAmmPres SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND NumRiga = lNumRiga; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFBilPre118RisAmmPres' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumRiga ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFBilPre118RisAmmPres' ), UPPER( lEser||CHR(0167)||lNumRiga ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFBilPre118RisAmmPres' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lNumRiga AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPEG.fnCFBilPre118RisAmmPresRLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPre118RisAmmPresRLkDph', SQLCODE, ERRDIAG ); END fnCFBilPre118RisAmmPresRLkDph; FUNCTION fnCFBilPre118RisAmmPresRls ( lEser IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres lNumRiga IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres lCodSes IN pkType.tyStringa%type, -- CFBilPre118RisAmmPres ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFBilPre118RisAmmPres SET CodSes = 0 WHERE Eser = lEser AND NumRiga = lNumRiga AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilPre118RisAmmPres' ) AND DesPk = UPPER( lEser||CHR(0167)||lNumRiga ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPre118RisAmmPresRls', SQLCODE, ERRDIAG ); END fnCFBilPre118RisAmmPresRls; /************************************************************************** * Funzione per la Generazione del Bilancio da P.E.G. * *************************************************************************** * La funzione è costituita dai seguenti passi: * * - controllo che l'anno in input sia non nullo e maggiore dell'anno * * corrente dei dati di configurazione * * - controllo che il Bilancio non sia già stato approvato * * - controllo che sia stato confermato il P.E.G. * * Se è stata richiesta la Generazione del Bilancio (lFlPluri = 'N'): * * - cancellazione del Bilancio attualmente presente relativo all'anno * * considerato * * - calcolo del campo EserChiuso come sommatoria di * * TESTATA Imp Acc + o - VARIAZIONI, * * applicando un raggruppamento per Eser, App e UEB e impostando * * Eser=Anno di configurazione - 2 * * - calcolo del campo EserCorso come sommatoria di * * (StanzIni + VarAum - VarDim) della tabella CFCapitoliPEG, * * applicando un raggruppamento per Eser, App e UEB * * - calcolo del campo Prev1 come sommatoria del campo StanzIni della * * tabella CFCapitoliPEG, applicando un raggruppamento per Eser, App * * e UEB * * - impostazione del campo RilIVA in base ai dati della tabella * * CFBilTmp * * Se è stata richiesta la Generazione del Pluriennale (lFlPluri = 'S'): * * - calcolo dei campi Prev2 e Prev3 come sommatoria del campo StanzIni* * della tabella CFCapitoliPEG, applicando un raggruppamento per * * Eser, App e UEB e considerando rispettivamente Eser = Anno di * * configurazione + 2 e Eser = Anno di configurazione + 3 * *************************************************************************** * NB: prima di lanciare questa funzione, deve essere chiamata la funzione * * pkUtilityCont.fnValidOper con Codice Operazione = 3. * **************************************************************************/ -- Autore: Torlone M. B. -- Revisione: Torelli (Aggiunto parametro lFlRicCol) FUNCTION fnGenerazioneBilancioDaPEG ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lFlPlur IN pkType.tyStringa%type, -- N = generazione Previsione, S = generazione Pluriennale lFlRicCol IN pkType.tyStringa%type, -- E = Ricalcolo di Entrambe le prime 2 colonne Bilancio ( SOLO se Previsione ), -- Impegni/Accertamente per Eser-2 ed Assestato per Eser-1 -- P = Ricalcolo della sola Prima colonna Bilancio ( SOLO se Previsione ), -- S = Ricalcolo della sola Seconda colonna Bilancio ( SOLO se Previsione ), -- N = Non Ricalcolare le prime 2 colonne Bilancio lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; curPEG curTypPEG; curPlur curTypPEG; sApp CFCapitoliPEG.App%type; nUEB CFCapitoliPEG.UEB%type; nImporto number(16,2); nImpPlur number(16,2); nImpPlur1 number(16,2); nImpPlur2 number(16,2); nImpPrev number(16,2); nEserChiuso number(16,2); nEserCorso number(16,2); sWarning varchar2(255); nCount number(9); lTimeStamp CFBilancioPrevisione.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nIdMenuLavoro pkType.tyStringa%type; nRet number(9); flOpzione CFOpzioni.Opzione%type; sAppartenenza varchar2(10); sAppartenenza__1 varchar2(10); sAppartenenza__2 varchar2(10); sAppartenenza__3 varchar2(10); sDesMenuLavoro VARCHAR2(2000); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%TYPE; BEGIN -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF ( lFlPlur = 'N' ) AND ( lFlRicCol <> 'N' ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE IF ( lFlRicCol = 'E' ) THEN -- RICALCOLA LE PRIME DUE COLONNE (Impegni/Accertamente per Eser-2 ed Assestato per Eser-1): -- cancellazione del Bilancio attualmente presente relativo all'esercizio considerato DELETE CFBilancioPrevisione WHERE Eser = lEser; END IF; /* LOOP PER LA GENERAZIONE DEL BILANCIO DI PREVISIONE: calcolo del campo Prev1 come sommatoria del campo StanzIni della tabella CFCapitoliPEG; calcolo dei campi EserChiuso e EserCorso come sommatoria rispettivamente di TESTATA Imp Acc + O - VARIAZIONI e di (StanzIni + VarAum - VarDim) della tabella CFCapitoliPEG; in tutti i casi si deve applicare un raggruppamento per App e UEB e si deve impostare Eser ad un opportuno anno dato in input. */ OPEN curPEG FOR SELECT App, UEB, NVL( SUM( StanzIni ), 0 ) FROM CFCapitoliPEG WHERE Eser = lEser GROUP BY App, UEB; LOOP FETCH curPEG INTO sApp, nUEB, nImporto; EXIT WHEN curPEG%NOTFOUND; -- CONTROLLO PRESENZA RECORD NEL BILANCIO SELECT COUNT(*) INTO nCount FROM CFBilancioPrevisione WHERE Eser = lEser AND App = sApp AND UEB = nUEB; IF ( lFlRicCol = 'E' ) OR ( nCount = 0 ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE RICALCOLA LE PRIME DUE COLONNE INSERT INTO CFBilancioPrevisione ( Eser, App, UEB, EserChiuso, EserCorso, Prev1, Prev2, Prev3, Prev4, Prev5, CodSes, TmsLock ) VALUES ( lEser, sApp, nUEB, 0, 0, nImporto, 0, 0, 0, 0, 0, lTimeStamp ); ELSIF ( lFlRicCol = 'P' ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE RICALCOLA DELLA SOLA PRIMA COLONNA -- aggiornamento record già presente modificare l'importo dell'EserChiuso UPDATE CFBilancioPrevisione SET EserChiuso = 0, Prev1 = nImporto, Prev2 = 0, Prev3 = 0, Prev4 = 0, Prev5 = 0 WHERE Eser = lEser AND App = sApp AND UEB = nUEB; ELSIF ( lFlRicCol = 'S' ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE RICALCOLA DELLA SOLA SECONDA COLONNA -- aggiornamento record già presente modificare l'importo dell'EserCorso UPDATE CFBilancioPrevisione SET EserCorso = 0, Prev1 = nImporto, Prev2 = 0, Prev3 = 0, Prev4 = 0, Prev5 = 0 WHERE Eser = lEser AND App = sApp AND UEB = nUEB; END IF; -- impostiamo la Rilevanza IVA sull'UEB in base alla presenza sui capitoli SELECT COUNT(*) INTO nCount FROM CFCapitoliPEG WHERE Eser = lEser AND App = sApp AND UEB = nUEB AND FlRilIVA = 'S'; IF nCount > 0 THEN UPDATE CFBilancioPrevisione SET RilIVA = 'S' WHERE Eser = lEser AND App = sApp AND UEB = nUEB; END IF; END LOOP; CLOSE curPEG; -- LOOP PER IL CALCOLO DELLA COLONNA ESERCORSO (SECONDA COLONNA) DEL BILANCIO OPEN curPEG FOR SELECT App, UEB, NVL( SUM( StanzIni + VarAum - VarDim ), 0 ) FROM CFCapitoliPEG WHERE Eser = lEser - 1 GROUP BY App, UEB; LOOP FETCH curPEG INTO sApp, nUEB, nImporto; EXIT WHEN curPEG%NOTFOUND; IF nImporto < 0 THEN IF sApp = 'E' THEN sAppartenenza := pkUtilityCont.fnErroriPers( 28, 0 ); sAppartenenza__1 := pkUtilityCont.fnErroriPers( 28, 1 ); sAppartenenza__2 := pkUtilityCont.fnErroriPers( 28, 2 ); sAppartenenza__3 := pkUtilityCont.fnErroriPers( 28, 3 ); ELSE sAppartenenza := pkUtilityCont.fnErroriPers( 29, 0 ); sAppartenenza__1 := pkUtilityCont.fnErroriPers( 29, 1 ); sAppartenenza__2 := pkUtilityCont.fnErroriPers( 29, 2 ); sAppartenenza__3 := pkUtilityCont.fnErroriPers( 29, 3 ); END IF ; ERRDIAG := pkUtilityCont.fnErroriPers( 511, 0 )||' '||(lEser - 1)||' '|| pkUtilityCont.fnErroriPers( 512, 0 )||' '||nUEB||' '|| pkUtilityCont.fnErroriPers( 513, 0 )||' '||sAppartenenza||' '|| pkUtilityCont.fnErroriPers( 514, 0 )||' '||nImporto; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 511, 1 )||' '||(lEser - 1)||' '|| pkUtilityCont.fnErroriPers( 512, 1 )||' '||nUEB||' '|| pkUtilityCont.fnErroriPers( 513, 1 )||' '||sAppartenenza__1||' '|| pkUtilityCont.fnErroriPers( 514, 1 )||' '||nImporto|| sSeparat || pkUtilityCont.fnErroriPers( 511, 2 )||' '||(lEser - 1)||' '|| pkUtilityCont.fnErroriPers( 512, 2 )||' '||nUEB||' '|| pkUtilityCont.fnErroriPers( 513, 2 )||' '||sAppartenenza__2||' '|| pkUtilityCont.fnErroriPers( 514, 2 )||' '||nImporto|| sSeparat || pkUtilityCont.fnErroriPers( 511, 3 )||' '||(lEser - 1)||' '|| pkUtilityCont.fnErroriPers( 512, 3 )||' '||nUEB||' '|| pkUtilityCont.fnErroriPers( 513, 3 )||' '||sAppartenenza__3||' '|| pkUtilityCont.fnErroriPers( 514, 3 )||' '||nImporto; END IF; ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazioneBilancioDaPEG', -499, ERRDIAG ); END IF; -- CONTROLLO PRESENZA RECORD NEL BILANCIO SELECT COUNT(*) INTO nCount FROM CFBilancioPrevisione WHERE Eser = lEser AND App = sApp AND UEB = nUEB; IF ( nCount = 0 ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE RICALCOLA LE PRIME DUE COLONNE INSERT INTO CFBilancioPrevisione ( Eser, App, UEB, EserCorso, EserChiuso, Prev1, Prev2, Prev3, Prev4, Prev5, CodSes, TmsLock ) VALUES ( lEser, sApp, nUEB, nImporto, 0, 0, 0, 0, 0, 0, 0, lTimeStamp ); ELSIF ( lFlRicCol = 'E' ) OR ( lFlRicCol = 'S' ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE RICALCOLA DELLA SOLA SECONDA COLONNA -- aggiornamento record già presente modificare l'importo dell'EserCorso UPDATE CFBilancioPrevisione SET EserCorso = nImporto, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = sApp AND UEB = nUEB; END IF; END LOOP; CLOSE curPEG; -- LOOP PER IL CALCOLO DELLA COLONNA ESERCHIUSO ENTRATA (PRIMA COLONNA) DEL BILANCIO OPEN curPEG FOR SELECT CFCapitoliPEG.UEB, SUM( CFAccertamenti.ImpIni ) + NVL( SUM( pkStampeChiusura.fnSumVarAccTestRes( IdAcc, (lEser - 1) ) ), 0 ) FROM CFCapitoliPEG, CFAccertamenti WHERE CFCapitoliPEG.IdCapitolo = CFAccertamenti.IdCapitolo AND CFCapitoliPEG.Eser = ( lEser - 2 ) AND CFCapitoliPEG.App = 'E' GROUP BY UEB; LOOP FETCH curPEG INTO nUEB, nImporto; EXIT WHEN curPEG%NOTFOUND; -- CONTROLLO PRESENZA RECORD NEL BILANCIO SELECT COUNT(*) INTO nCount FROM CFBilancioPrevisione WHERE Eser = lEser AND App = 'E' AND UEB = nUEB; IF ( nCount = 0 ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE RICALCOLA LE PRIME DUE COLONNE INSERT INTO CFBilancioPrevisione ( Eser, App, UEB, EserCorso, EserChiuso, Prev1, Prev2, Prev3, Prev4, Prev5, CodSes, TmsLock ) VALUES ( lEser, 'E', nUEB, 0, nImporto, 0, 0, 0, 0, 0, 0, lTimeStamp ); ELSIF ( lFlRicCol = 'E' ) OR ( lFlRicCol = 'P' ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE RICALCOLA DELLA SOLA PRIMA COLONNA -- aggiornamento record già presente modificare l'importo dell'EserChiuso UPDATE CFBilancioPrevisione SET EserChiuso = nImporto, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = 'E' AND UEB = nUEB; END IF; END LOOP; CLOSE curPEG; -- LOOP PER IL CALCOLA DELLA COLONNA ESERCHIUSO SPESA (PRIMA COLONNA) DEL BILANCIO OPEN curPEG FOR SELECT CFCapitoliPEG.UEB, SUM( CFImpegni.ImpIni ) + NVL( SUM( pkStampeChiusura.fnSumVarImpTestRes( IdImp, (lEser - 1) ) ), 0 ) FROM CFCapitoliPEG, CFImpegni WHERE CFCapitoliPEG.IdCapitolo = CFImpegni.IdCapitolo AND CFCapitoliPEG.Eser = ( lEser - 2 ) AND CFCapitoliPEG.App = 'S' GROUP BY UEB; LOOP FETCH curPEG INTO nUEB, nImporto; EXIT WHEN curPEG%NOTFOUND; -- CONTROLLO PRESENZA RECORD NEL BILANCIO SELECT COUNT(*) INTO nCount FROM CFBilancioPrevisione WHERE Eser = lEser AND App = 'S' AND UEB = nUEB; IF ( nCount = 0 ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE RICALCOLA LE PRIME DUE COLONNE INSERT INTO CFBilancioPrevisione ( Eser, App, UEB, EserCorso, EserChiuso, Prev1, Prev2, Prev3, Prev4, Prev5, CodSes, TmsLock ) VALUES ( lEser, 'S', nUEB, 0, nImporto, 0, 0, 0, 0, 0, 0, lTimeStamp ); ELSIF ( lFlRicCol = 'E' ) OR ( lFlRicCol = 'P' ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE RICALCOLA DELLA SOLA PRIMA COLONNA -- aggiornamento record già presente modificare l'importo dell'EserChiuso UPDATE CFBilancioPrevisione SET EserChiuso = nImporto, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = 'S' AND UEB = nUEB; END IF; END LOOP; CLOSE curPEG; ELSIF ( lFlPlur = 'S' ) THEN -- GENERAZIONE BILANCIO PLURIENNALE: inserimento di eventuali nuovi UEB per l'anno in input, questo può accadere -- se si genera prima il bilancio e poi si inserisce una nuova Risorsa nRet := fnCFBilPrevIns ( lEser, lCodSes, sWarning, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- Generazione del Pluriennale OPEN curPEG FOR SELECT App, UEB FROM CFBilancioPrevisione WHERE Eser = lEser; LOOP FETCH curPEG INTO sApp, nUEB; EXIT WHEN curPEG%NOTFOUND; OPEN curPlur FOR SELECT NVL( SUM( StanzIni ), 0 ) FROM CFCapitoliPEG WHERE Eser = lEser + 1 AND App = sApp AND UEB = nUEB; FETCH curPlur INTO nImporto; CLOSE curPlur; OPEN curPlur FOR SELECT NVL( SUM( StanzIni ), 0 ) FROM CFCapitoliPEG WHERE Eser = lEser + 2 AND App = sApp AND UEB = nUEB; FETCH curPlur INTO nImpPlur; CLOSE curPlur; IF ( sOpzLang IS NOT NULL ) THEN -- bilinguismo OPEN curPlur FOR SELECT NVL( SUM( StanzIni ), 0 ) FROM CFCapitoliPEG WHERE Eser = lEser + 3 AND App = sApp AND UEB = nUEB; FETCH curPlur INTO nImpPlur1; CLOSE curPlur; OPEN curPlur FOR SELECT NVL( SUM( StanzIni ), 0 ) FROM CFCapitoliPEG WHERE Eser = lEser + 4 AND App = sApp AND UEB = nUEB; FETCH curPlur INTO nImpPlur2; CLOSE curPlur; ELSE nImpPlur1 := 0; nImpPlur2 := 0; END IF; UPDATE CFBilancioPrevisione SET Prev2 = NVL( nImporto, 0 ), Prev3 = NVL( nImpPlur, 0 ), Prev4 = NVL( nImpPlur1, 0 ), Prev5 = NVL( nImpPlur2, 0 ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = sApp AND UEB = nUEB; END LOOP; CLOSE curPEG; ELSIF ( lFlRicCol = 'N' ) THEN -- GENERAZIONE BILANCIO DI PREVISIONE SENZA IL RICALCOLO DELLE PRIME DUE COLONNE: inserimento di eventuali -- nuovi UEB per l'anno in input, questo può accadere se si genera prima -- il bilancio e poi si inserisce una nuova Risorsa nRet := fnCFBilPrevIns ( lEser, lCodSes, sWarning, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- E' stata richiesta la Generazione del Bilancio, ma non è la prima volta e, -- in particolare, si è già lavorato sugli importi EserChiuso ed EserCorso e quindi -- vengono rigenerati gli importi della previsione, ma non EserChiuso ed EserCorso OPEN curPEG FOR SELECT App, UEB FROM CFBilancioPrevisione WHERE Eser = lEser; LOOP FETCH curPEG INTO sApp, nUEB; EXIT WHEN curPEG%NOTFOUND; SELECT NVL( SUM( StanzIni ), 0 ) INTO nImpPrev FROM CFCapitoliPEG WHERE Eser = lEser AND App = sApp AND UEB = nUEB; UPDATE CFBilancioPrevisione SET Prev1 = NVL( nImpPrev, 0 ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = sApp AND UEB = nUEB; END LOOP; CLOSE curPEG; END IF; -- aggiorno la data di generazione del Bilancio da PEG in CFOpzioni IF ( lFlPlur = 'N' ) THEN -- ho generato l'anno di previsione UPDATE CFOpzioni SET Opzione = TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ) WHERE DesOpzione = 'DTAGENBILPREV'; ELSE -- ho generato gli anni del pluriennale UPDATE CFOpzioni SET Opzione = TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ) WHERE DesOpzione = 'DTAGENBILPLUR'; END IF; -- Scrivo in CFOpzioni NO alla modifica del PEG e del Bilancio UPDATE CFOpzioni SET Opzione = 'N' WHERE DesOpzione = 'PEGMODIFICATO'; UPDATE CFOpzioni SET Opzione = 'N' WHERE DesOpzione = 'BILMODIFICATO'; -- chiamata alla funzione per la Quadratura nRet := fnCFContrBilPrev( lEser, 'N', lCodSes, ERRDIAG ); -- ho il parametro lCOMMIT in input IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- chiamata alla funzione per il riempimento della tabella relativa alla Stampa del Bilancio di Previsione nRet := fnPrnBilancioPrev( lEser, 'N', lCodSes, ERRDIAG ); -- lCOMMIT = 'N' IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; -- lancio la funzione di generazione delle stampe 'Riepilogo per Servizi' e 'Riepilogo per Interventi' IF lFlPlur = 'N' THEN nRet := pkContPEG.fnGenerazPrnRiepSer ( lEser, lFlRicCol, lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; ELSE nRet := pkContPEG.fnGenerazPrnRiepSer ( lEser, 'N', lCodSes, ERRDIAG ); IF nRet < 0 THEN ROLLBACK; RETURN nRet; END IF; END IF; -- aggiorno le Attività in CFMenuLavori -- cancellazione di CodSistema 3 = Conferma del P.E.G. per l'anno DELETE CFMenuLavori WHERE SUBSTR( CodSistema, 1, 1 ) BETWEEN 1 AND 3; COMMIT; SELECT COUNT(*) INTO nCount FROM CFMenuLavori WHERE CodSistema = 4||lEser; SELECT Opzione INTO flOpzione FROM CFOpzioni WHERE DesOPzione = 'FLAGBILBLOCCATO'; IF ( flOpzione = 'S' ) THEN -- il Bilancio non quadra e quindi va rigenerato -- Cancello e reinserisco CodSistema=4 con ( Riscontrati Errori nella Generazione dovuti a Squilibrio di Bilancio ) DELETE CFMenuLavori WHERE SUBSTR( CodSistema, 1, 1 ) = 4; sDesMenuLavoro := pkUtilityCont.fnerroripers(1678, 0) || ' ' || lEser || ' ' || pkUtilityCont.fnerroripers(1679, 0); IF sOpzLang IS NOT NULL THEN sDesMenuLavoro := sDesMenuLavoro || sSeparat || pkUtilityCont.fnerroripers(1678, 1) || ' ' || lEser || ' ' || pkUtilityCont.fnerroripers(1679, 1) || sSeparat || pkUtilityCont.fnerroripers(1678, 2) || ' ' || lEser || ' ' || pkUtilityCont.fnerroripers(1679, 2) || sSeparat || pkUtilityCont.fnerroripers(1678, 3) || ' ' || lEser || ' ' || pkUtilityCont.fnerroripers(1679, 3); END IF; -- inserisco la riga CodSistema=4 ( Generare il Bilancio per l'anno ) nRet := pkContPerson.fnCFMenuLavoriIns( sDesMenuLavoro, 'S', TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), NULL, 'T', NULL, 4||lEser, lCodSes, nIdMenuLavoro, ERRDIAG ); ELSIF ( lFlPlur = 'N' ) AND ( flOpzione = 'N' ) THEN -- ho generato l'anno di previsione e quadra e quindi si deve generare il pluriennale DELETE CFMenuLavori WHERE SUBSTR( CodSistema, 1, 1 ) = 4; sDesMenuLavoro := pkUtilityCont.fnerroripers(1680, 0) || ' ' || lEser; IF sOpzLang IS NOT NULL THEN sDesMenuLavoro := sDesMenuLavoro || sSeparat || pkUtilityCont.fnerroripers(1680, 1) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1680, 2) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1680, 3) || ' ' || lEser; END IF; -- inserisco la riga CodSistema=5 ( Generare il Bilancio per il Pluriennale; Generazione corretta per l'anno ) nRet := pkContPerson.fnCFMenuLavoriIns( sDesMenuLavoro, 'N', TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), NULL, 'T', NULL, 5, lCodSes, nIdMenuLavoro, ERRDIAG ); ELSIF ( lFlPlur = 'S' ) AND ( flOpzione = 'N' ) THEN -- ho generato gli anni del pluriennale e quadrano e quindi si può Approvare il Bilancio IF ( nCount > 0 ) THEN UPDATE CFMenuLavori SET DtaFine = TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), 'DD/MM/YYYY' ), FlEseguito = 'S' WHERE SUBSTR( CodSistema, 1, 1 ) = 4; ELSE sDesMenuLavoro := pkUtilityCont.fnerroripers(1682, 0) || ' ' || lEser; IF sOpzLang IS NOT NULL THEN sDesMenuLavoro := sDesMenuLavoro || sSeparat || pkUtilityCont.fnerroripers(1682, 1) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1682, 2) || ' ' || lEser || sSeparat || pkUtilityCont.fnerroripers(1682, 3) || ' ' || lEser; END IF; -- inserisco la riga CodSistema=6 ( Approvare il Bilancio per l'anno ) nRet := pkContPerson.fnCFMenuLavoriIns( sDesMenuLavoro, 'N', TO_CHAR( SYSDATE, 'DD/MM/YYYY' ), NULL, 'T', NULL, 6, lCodSes, nIdMenuLavoro, ERRDIAG ); END IF; END IF; COMMIT; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilancioPrevisione', 'I', 'Generazione del Bilancio da P.E.G. e relativi controlli di quadratura; ' || 'riempimento delle tab. di stampa del Bilancio Entrate, Spese e Del. Reg.', 'Eser:'||lEser||' FlPlur:'||lFlPlur||' FlRicCol:'||lFlRicCol, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ''; COMMIT; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; IF curPEG%ISOPEN THEN CLOSE curPEG; END IF; IF curPlur%ISOPEN THEN CLOSE curPlur; END IF; -- inserisco il log nRet := pkContPerson.fnCFLogIns( 'CFBilancioPrevisione', 'I', 'Errore nella Generazione del Bilancio da P.E.G.', 'Eser:'||lEser||' FlPlur:'||lFlPlur||' FlRicCol:'||lFlRicCol, SQLCODE, NULL, lCodSes, ERRDIAG ); COMMIT; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazioneBilancioDaPEG', SQLCODE, ERRDIAG ); COMMIT; END fnGenerazioneBilancioDaPEG; /************************************************************************** * Funzione per la Gestione del Bilancio di Previsione * * Utilizzata nella Predisposizione del Bilancio di Previsione * **************************************************************************/ -- Funzione che inserisce eventuali nuovi UEB per l'anno in input; questo può -- accadere se vado a generare il bilancio e poi inserisco una nuova Risorsa FUNCTION fnCFBilPrevIns ( lEser IN pkType.tyStringa%type, -- CFBilancioPrevisione lCodSes IN pkType.tyStringa%type, -- CFBilancioPrevisione lWarning OUT pkType.tyStringa%type, -- messaggio d'attenzione ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilancioPrevisione.TmsLock%type; recInsE number(9) := 0; -- record inseriti sOpzione CFOpzioni.Opzione%type; nRet number(9); BEGIN -- Selezione dell'ordine delle lingue: SELECT MAX( Opzione ) INTO sOpzione FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; -- Aggiornamento delle STAMPE -- inserisco i record dell'UEB nella tab. di stampa del bilancio non presenti in CFBilancioPrevisione Entrata INSERT INTO CFStampaBilancioPrevE ( Eser, App, UEB, CodTit, DesTit, DESTIT__1, DESTIT__2, DESTIT__3, ServContoTerzi, CodCat, DesCat, DESCAT__1, DESCAT__2, DESCAT__3, CodRis, DesRisorsa, DESRISORSA__1, DESRISORSA__2, DESRISORSA__3, EserChiuso, EserCorso, VarAum, VarDim, Prev1, Prev2, Prev3, Prev4, Prev5, Totali, RilIVA, RILIVA__1, RILIVA__2, RILIVA__3, CodSes, TmsLock ) SELECT lEser, 'E', CFTitoli.CodTit || LPAD( CFCategorieFunzioni.CodCat, 2, 0 ) || LPAD( CFRisorse.CodRis, 4, 0 ) UEB, CFTitoli.CodTit, pkUtilityCont.fnerroripers(20,0) || ' ' || CFTitoli.CodTit || ' - ' || CFTitoli.DesTit, DECODE( sOpzione, NULL, NULL, pkUtilityCont.fnerroripers(20,1) || ' ' || CFTitoli.CodTit || ' - ' || CFTitoli.destit__1 ), DECODE( sOpzione, NULL, NULL, pkUtilityCont.fnerroripers(20,2) || ' ' || CFTitoli.CodTit || ' - ' || CFTitoli.destit__2 ), DECODE( sOpzione, NULL, NULL, pkUtilityCont.fnerroripers(20,3) || ' ' || CFTitoli.CodTit || ' - ' || CFTitoli.destit__3 ), CFTitoli.ServContoTerzi, CFCategorieFunzioni.CodCat, CFCategorieFunzioni.DesCat, CFCategorieFunzioni.descat__1, CFCategorieFunzioni.descat__2, CFCategorieFunzioni.descat__3, CFRisorse.CodRis, CFRisorse.DesRisorsa, CFRisorse.desrisorsa__1, CFRisorse.DesRisorsa__2, CFRisorse.DesRisorsa__3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'N', 'N', 'N', 'N', 0, lTimeStamp FROM CFCategorieFunzioni, CFRisorse, CFTitoli WHERE CFTitoli.App = 'E' AND CFCategorieFunzioni.App = 'E' AND CFTitoli.CodTit = CFCategorieFunzioni.CodTit AND CFRisorse.App = 'E' AND CFCategorieFunzioni.CodTit = CFRisorse.CodTit AND CFCategorieFunzioni.CodCat = CFRisorse.CodCat AND ( CFTitoli.CodTit || LPAD( CFCategorieFunzioni.CodCat, 2, 0 ) || LPAD( CFRisorse.CodRis, 4, 0 ) ) IN ( SELECT UEB FROM CFAnagraficaUEB WHERE App = 'E' ) AND ( CFTitoli.CodTit || LPAD( CFCategorieFunzioni.CodCat, 2, 0 ) || LPAD( CFRisorse.CodRis, 4, 0 ) ) NOT IN ( SELECT UEB FROM CFStampaBilancioPrevE WHERE Eser = lEser AND App = 'E' ); -- Aggiornamento della tabella CFBilancioPrevisione INSERT INTO CFBilancioPrevisione ( Eser, App, UEB, EserChiuso, EserCorso, Prev1, Prev2, Prev3, Prev4, Prev5, RilIVA, CodSes, TmsLock ) SELECT lEser, 'E', CFTitoli.CodTit || LPAD( CFCategorieFunzioni.CodCat, 2, 0 ) || LPAD( CFRisorse.CodRis, 4, 0 ) UEB, 0, 0, 0, 0, 0, 0, 0, 'N', 0, lTimeStamp FROM CFCategorieFunzioni, CFRisorse, CFTitoli WHERE CFTitoli.App = 'E' AND CFCategorieFunzioni.App = 'E' AND CFTitoli.CodTit = CFCategorieFunzioni.CodTit AND CFRisorse.App = 'E' AND CFCategorieFunzioni.CodTit = CFRisorse.CodTit AND CFCategorieFunzioni.CodCat = CFRisorse.CodCat AND ( CFTitoli.CodTit || LPAD( CFCategorieFunzioni.CodCat, 2, 0 ) || LPAD( CFRisorse.CodRis, 4, 0 ) ) IN ( SELECT UEB FROM CFAnagraficaUEB WHERE App = 'E' ) AND ( CFTitoli.CodTit || LPAD( CFCategorieFunzioni.CodCat, 2, 0 ) || LPAD( CFRisorse.CodRis, 4, 0 ) ) NOT IN ( SELECT UEB FROM CFBilancioPrevisione WHERE Eser = lEser AND App = 'E' ); recInsE := SQL%ROWCOUNT; -- inserisco i record degli UEB di Spesa non presenti in CFBilancioPrevisione INSERT INTO CFBilancioPrevisione ( Eser, App, UEB, EserChiuso, EserCorso, Prev1, Prev2, Prev3, Prev4, Prev5, RilIVA, CodSes, TmsLock ) SELECT lEser, 'S', UEB, 0, 0, 0, 0, 0, 0, 0, 'N', 0, lTimeStamp FROM CFAnagraficaUEB WHERE App = 'S' AND UEB NOT IN ( SELECT UEB FROM CFBilancioPrevisione WHERE Eser = lEser AND App = 'S' ); IF ( recInsE = 0 ) THEN -- non ho inserito alcun record; valorizzo la varibile lWarning := pkUtilityCont.fnErroriPers( 525, NULL ); RETURN 500; END IF; COMMIT; -- inserimento del log nRet := pkContPerson.fnCFLogIns( 'CFBilancioPrevisione', 'I', 'Inserimento nella tabella CFBilancioPrevisione di eventuali nuovi UEB', lEser, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; nRet := pkContPerson.fnCFLogIns( 'CFBilancioPrevisione', 'I', 'Errore: ' || SUBSTR( SQLERRM, 1, 245 ), lEser, NULL, NULL, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( '1pkContPEG.fnCFBilPrevIns', SQLCODE, ERRDIAG ); END fnCFBilPrevIns; FUNCTION fnCFBilPrevUpd ( lEser IN pkType.tyStringa%type, -- CFBilancioPrevisione lApp IN pkType.tyStringa%type, -- CFBilancioPrevisione lUEB IN pkType.tyStringa%type, -- CFBilancioPrevisione lEserChiuso IN pkType.tyStringa%type, -- CFBilancioPrevisione lEserCorso IN pkType.tyStringa%type, -- CFBilancioPrevisione lRilIva IN pkType.tyStringa%type, -- CFBilancioPrevisione lCodSes IN pkType.tyStringa%type, -- CFBilancioPrevisione ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- Messaggio d'errore lTimeStamp CFBilancioPrevisione.TmsLock%type := TO_CHAR( SYSDATE, 'YYYYMMDDHH24MISS' ) || '0'; nRet number(9); nAnno number(4); BEGIN -- selezione dell'anno dell'ultimo bilancio approvato e della data di approvazione SELECT Opzione INTO nAnno FROM CFOpzioni WHERE DesOpzione = 'ANNOAPPBIL'; -- Controllo se il bilancio è stato approvato IF TO_NUMBER( lEser ) <= TO_NUMBER( nAnno ) THEN ERRDIAG := pkUtilityCont.fnErroriPers( 208, NULL ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPrevUpd', -499, ERRDIAG ); END IF; /* aggiorno il record solo se non si è verificato un blocco di DB o un blocco di tabella 'contemporaneamente' alla richiesta del blocco del record; in questo caso ha priorità il blocco DB o il blocco di tabella */ nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilancioPrevisione', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN ROLLBACK; RETURN nRet; ELSIF ( nRet = 0 ) THEN ROLLBACK; -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPrevUpd', -499, ERRDIAG ); END IF; -- aggiornamento del record UPDATE CFBilancioPrevisione SET EserChiuso = NVL( lEserChiuso, 0 ), EserCorso = NVL( lEserCorso, 0 ), RilIva = UPPER( lRilIva ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND App = lApp AND UEB = lUEB AND CodSes = lCodSes; IF ( SQL%ROWCOUNT = 0 ) THEN /* record bloccato, aggiornato o cancellato, nel frattempo, da un altro utente; non è necessario cancellare il record sulla tabella CFRecLock, poichè ciò avviene al momento del read-and-lock (chiamata alla fnCFBilancioPrevisioneRLkDph, attivata con il pulsante MODIFICA) */ ROLLBACK; RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPrevUpd', -212, ERRDIAG ); END IF; /* rendiamo pubblico lo sblocco del record eliminando le informazioni di quest'ultimo dalla tabella CFRecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilancioPrevisione' ) AND DesPK = UPPER( lEser||CHR(0167)||lApp||CHR(0167)||lUEB ); -- aggiornamento nelle CFOpzioni UPDATE CFOpzioni SET Opzione = 'S' WHERE DesOpzione = 'BILMODIFICATO'; COMMIT; -- inserimento del log nRet := pkContPerson.fnCFLogIns( 'CFBilancioPrevisione', 'U', 'Aggiornamento della tabella CFBilancioPrevisione', lEser||CHR(0167)||lApp||CHR(0167)||lUEB, NULL, NULL, lCodSes, ERRDIAG ); ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; nRet := pkContPerson.fnCFLogIns( 'CFBilancioPrevisione', 'U', 'Errore: ' || SUBSTR( SQLERRM, 1, 245 ), lEser||CHR(0167)||lApp||CHR(0167)||lUEB, NULL, NULL, lCodSes, ERRDIAG ); RETURN pkUtility.fnError( '2pkContPEG.fnCFBilPrevUpd', SQLCODE, ERRDIAG ); END fnCFBilPrevUpd; FUNCTION fnCFBilPrevRLkDph ( lEser IN pkType.tyStringa%type, -- CFBilancioPrevisione lApp IN pkType.tyStringa%type, -- CFBilancioPrevisione lUEB IN pkType.tyStringa%type, -- CFBilancioPrevisione lCodSes IN pkType.tyStringa%type, -- lTmsLockIN IN pkType.tyStringa%type, -- TmsLock letto sulla tabella al momento dell'apertura lTmsLockOUT OUT pkType.tyStringa%type, -- TmsLock aggiornato dopo il blocco in pessimistico ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore TmpTmsLock CFBilancioPrevisione.TmsLock%type; TmpCodSes CFBilancioPrevisione.CodSes%type; nRet number(9); ReturnError number(6); bRet boolean; sDesGrUtenti CFGrUtenti.DesGrUtenti%type; sDesUtente CFUtenti.DesUtente%type; sSeparat varchar2(10) := pkUtilityCont.fnSelSeparat; sOpzLang CFOpzioni.Opzione%type; BEGIN /* funzione per Delphi per il lock di un record; devo controllare prima che non sia bloccato il DB e poi che non sia bloccata la tavola */ -- inizializzazione del parametro in output (necessaria per Delphi) lTmsLockOUT := ' '; -- Controllo se il DB o la Tabella sono bloccati nRet := pkUtilityCont.fnLockDBTabCtr( 'CFBilancioPrevisione', lCodSes, ERRDIAG ); IF ( nRet < 0 ) THEN RETURN nRet; ELSIF ( nRet = 0 ) THEN -- DB o Tabella bloccati; la variabile ERRDIAG è stata valorizzata in fnLockDBTabCtr RETURN pkUtility.fnError( '5pkContPEG..fnCFBilPrevRLkDph', -499, ERRDIAG ); END IF; SELECT CodSes, TmsLock INTO TmpCodSes, TmpTmsLock FROM CFBilancioPrevisione WHERE Eser = lEser AND App = lApp AND UEB = lUEB FOR UPDATE OF CodSes NOWAIT; bRet := pkUtility.fnFreeRec( lCodSes, TmpCodSes, NULL, TmpTmsLock, lTmsLockOUT, ReturnError, ERRDIAG ); IF ( bRet IS NULL ) THEN ROLLBACK; RETURN ReturnError; END IF; IF bRet THEN -- in attesa di una migliore gestione --IF ( lTmsLockIN <> TmpTmsLock ) THEN /* record aggiornato, nel frattempo, da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ -- ROLLBACK; -- RETURN pkUtility.fnError( '5pkContPEG..fnCFBilPrevRLkDph', -212, ERRDIAG); --END IF; UPDATE CFBilancioPrevisione SET CodSes = lCodSes, TmsLock = lTmsLockOUT WHERE Eser = lEser AND App = lApp AND UEB = lUEB; /* cancello nella tabella CFRecLock eventuali informazioni relative al fatto che il record potrebbe essere stato bloccato da altri utenti, per i quali però è scaduto il tempo ed inserisco il nuovo lock */ DELETE FROM CFRecLock WHERE DesTabella = UPPER( 'CFBilancioPrevisione' ) AND DesPk = UPPER( lEser||CHR(0167)||lApp||CHR(0167)||lUEB ); INSERT INTO CFRecLock ( CodSessione, DesTabella, DesPK, DtaLock ) VALUES ( lCodSes, UPPER( 'CFBilancioPrevisione' ), UPPER( lEser||CHR(0167)||lApp||CHR(0167)||lUEB ), TO_DATE( TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24.MI.SS' ), 'DD/MM/YYYY HH24.MI.SS' ) ); COMMIT; ERRDIAG := ' '; RETURN 1; ELSE /* record aggiornato da un altro utente; non è necessario riportare nel log il fatto che l'utente non riesca a fare il lock */ SELECT DesGrUtenti, DesUtente INTO sDesGrUtenti, sDesUtente FROM CFUtenti, CFGrUtenti, CFSessioni, CFRecLock WHERE CFRecLock.DesTabella = UPPER( 'CFBilancioPrevisione' ) AND CFRecLock.DesPk = lEser||CHR(0167)||lApp||CHR(0167)||lUEB AND CFRecLock.CodSessione = CFSessioni.CodSessione AND CFSessioni.IdrUtente = CFUtenti.IdrUtente AND CFUtenti.IdrGrUtenti = CFGrUtenti.IdrGrUtenti; ERRDIAG := pkUtilityCont.fnErroriPers( 61, 0 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 61, 1 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 2 ) || ': ' || sDesGrUtenti || '/' || sDesUtente || sSeparat || pkUtilityCont.fnErroriPers( 61, 3 ) || ': ' || sDesGrUtenti || '/' || sDesUtente; END IF; ROLLBACK; RETURN pkUtility.fnError ( '5pkContPEG.fnCFBilPrevRLkDph', -499, ERRDIAG ); END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( '5pkContPEG.fnCFBilPrevRLkDph', SQLCODE, ERRDIAG ); END fnCFBilPrevRLkDph; FUNCTION fnCFBilPrevRls ( lEser IN pkType.tyStringa%type, -- CFBilancioPrevisione lApp IN pkType.tyStringa%type, -- CFBilancioPrevisione lUEB IN pkType.tyStringa%type, -- CFBilancioPrevisione lCodSes IN pkType.tyStringa%type, -- CFBilancioPrevisione ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS -- messaggio d'errore BEGIN -- sblocco il record, se ne sono ancora proprietario UPDATE CFBilancioPrevisione SET CodSes = 0 WHERE Eser = lEser AND App = lApp AND UEB = lUEB AND CodSes = lCodSes; IF ( SQL%ROWCOUNT > 0 ) THEN /* se ho effettuato lo sblocco del record, lo rendo pubblico eliminando le informazioni di quest'ultimo dalla tabella RecLock */ DELETE FROM CFRecLock WHERE CodSessione = lCodSes AND DesTabella = UPPER( 'CFBilancioPrevisione' ) AND DesPk = UPPER( lEser||CHR(0167)||lApp||CHR(0167)||lUEB ); END IF; COMMIT; ERRDIAG := ' '; RETURN 1; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnCFBilPrevRls', SQLCODE, ERRDIAG ); END fnCFBilPrevRls; /************************************************************************** * Funzioni per la Generazione e gestione delle Stampe * * 'Riepilogo per Servizi' e 'Riepilogo per Interventi' * **************************************************************************/ -- Autore: Torelli FUNCTION fnGenerazPrnRiepSer ( lEser IN pkType.tyStringa%type, -- CFCapitoliPEG lFlRicCol IN pkType.tyStringa%type, -- E = Ricalcolo di Entrambe le prime 2 colonne EserChiuso, EserCorso: -- Impegni/Accertamente per Eser-2 ed Assestato per Eser-1 -- P = Ricalcolo della sola Prima colonna EserChiuso, -- S = Ricalcolo della sola Seconda colonna EserCorso, -- N = Non Ricalcolare le prime 2 colonne lCodSes IN pkType.tyStringa%type, ERRDIAG OUT pkType.tyStringa%type ) RETURN NUMERIC IS TYPE curTypPEG IS REF CURSOR; curPEG curTypPEG; nCodSer CFStampaBilRiepPerSer.CodSer%type; nCodFnz CFStampaBilRiepPerSer.CodFnz%type; nCodTit CFStampaBilRiepPerSer.CodTit%type; nCodInt CFStampaBilRiepPerSer.CodInt%type; nCons number(16,2); nSvil number(16,2); nTot number(16,2); nCount number(9); lTimeStamp CFStampaBilRiepPerSer.TmsLock%type := TO_CHAR( sysdate, 'YYYYMMDDHH24MISS' ) || '0'; -- no lock su inserimento nRet number(9); sSeparat VARCHAR2(10) := pkUtilityCont.fnselseparat; sOpzLang CFOPZIONI.opzione%TYPE; BEGIN -- Controllo il bilinguismo: SELECT MAX( Opzione ) INTO sOpzLang FROM CFOpzioni WHERE DesOpzione = 'ORDCOLLANG'; IF ( lFlRicCol = 'E' ) THEN -- Ricalcola le prime due colonne (Impegni/Accertamente per Eser-2 ed Assestato per Eser-1): -- cancellazione della stampa attualmente presente relativo all'esercizio considerato DELETE CFStampaBilRiepPerSer WHERE Eser = lEser; END IF; ----------------------------- PREVISIONE ---------------------------- -- azzero la colonna Imp1 prima di ricalcolarla UPDATE CFStampaBilRiepPerSer SET Imp1 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- LOOP PER IL CALCOLO DELLA COLONNA Imp1 (TERZA COLONNA, PREVISIONE) DELLA STAMPA -- calcolo Imp1 per come sommatoria del campo StanzIni della tabella CFPEGPerProgrammi; OPEN curPEG FOR SELECT CodSer, CodFnz, CodTit, CodInt, NVL( SUM( DECODE( FlConsSvil, 'C', PEGProgr.StanzIni, 0 ) ), 0 ) Cons, NVL( SUM( DECODE( FlConsSvil, 'S', PEGProgr.StanzIni, 0 ) ), 0 ) Svil, NVL( SUM( PEGProgr.StanzIni ), 0 ) Tot FROM CFCapitoliPEG, CFPEGPerProgrammi PEGProgr WHERE CFCapitoliPEG.IdCapitolo = PEGProgr.IdCapitolo AND CFCapitoliPEG.CodTit < 4 AND CFCapitoliPEG.Eser = lEser AND CFCapitoliPEG.App = 'S' GROUP BY CodSer, CodFnz, CodTit, CodInt; LOOP FETCH curPEG INTO nCodSer, nCodFnz, nCodTit, nCodInt, nCons, nSvil, nTot; EXIT WHEN curPEG%NOTFOUND; -- Controllo la presenza del record nella tabella SELECT COUNT(*) INTO nCount FROM CFStampaBilRiepPerSer WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt; IF ( nCount = 0 ) THEN -- Inserimento delle righe selezionate IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, j, DECODE( j, 1, 'CO', 2, 'SV', 3, 'T' ), 0, 0, DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), 0, 0, 0, 0, 0, lTimeStamp ); END LOOP; ELSE INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, 2, 'SV', 0, 0, nTot, 0, 0, 0, 0, 0, lTimeStamp ); END IF; ELSE -- GENERAZIONE BILANCIO DI PREVISIONE RICALCOLA DELLA SOLA PRIMA COLONNA -- aggiornamento record già presente modificare l'importo dell'EserChiuso IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP UPDATE CFStampaBilRiepPerSer SET Imp1 = DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = j; END LOOP; ELSE UPDATE CFStampaBilRiepPerSer SET Imp1 = nTot, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = 2; END IF; END IF; END LOOP; CLOSE curPEG; ----------------------------- PLURIENNALE ---------------------------- -- azzero la colonna Imp2 prima di ricalcolarla UPDATE CFStampaBilRiepPerSer SET Imp2 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- LOOP PER IL CALCOLO DELLA COLONNA Imp2 (QUARTA COLONNA) DELLA STAMPA OPEN curPEG FOR SELECT CodSer, CodFnz, CodTit, CodInt, NVL( SUM( DECODE( FlConsSvil, 'C', PEGProgr.StanzIni, 0 ) ), 0 ) Cons, NVL( SUM( DECODE( FlConsSvil, 'S', PEGProgr.StanzIni, 0 ) ), 0 ) Svil, NVL( SUM( PEGProgr.StanzIni ), 0 ) Tot FROM CFCapitoliPEG, CFPEGPerProgrammi PEGProgr WHERE CFCapitoliPEG.IdCapitolo = PEGProgr.IdCapitolo AND CFCapitoliPEG.CodTit < 4 AND CFCapitoliPEG.Eser = ( lEser + 1 ) AND CFCapitoliPEG.App = 'S' GROUP BY CodSer, CodFnz, CodTit, CodInt; LOOP FETCH curPEG INTO nCodSer, nCodFnz, nCodTit, nCodInt, nCons, nSvil, nTot; EXIT WHEN curPEG%NOTFOUND; -- Controllo la presenza del record nella tabella SELECT COUNT(*) INTO nCount FROM CFStampaBilRiepPerSer WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt; IF ( nCount = 0 ) THEN -- Inserimento delle righe selezionate IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, j, DECODE( j, 1, 'CO', 2, 'SV', 3, 'T' ), 0, 0, 0, DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), 0, 0, 0, 0, lTimeStamp ); END LOOP; ELSE INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, 2, 'SV', 0, 0, 0, nTot, 0, 0, 0, 0, lTimeStamp ); END IF; ELSE -- aggiornamento record già presente IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP UPDATE CFStampaBilRiepPerSer SET Imp2 = DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = j; END LOOP; ELSE UPDATE CFStampaBilRiepPerSer SET Imp2 = nTot, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = 2; END IF; END IF; END LOOP; CLOSE curPEG; -- azzero la colonna Imp3 prima di ricalcolarla UPDATE CFStampaBilRiepPerSer SET Imp3 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- LOOP PER IL CALCOLO DELLA COLONNA Imp3 (QUINTA COLONNA) DELLA STAMPA OPEN curPEG FOR SELECT CodSer, CodFnz, CodTit, CodInt, NVL( SUM( DECODE( FlConsSvil, 'C', PEGProgr.StanzIni, 0 ) ), 0 ) Cons, NVL( SUM( DECODE( FlConsSvil, 'S', PEGProgr.StanzIni, 0 ) ), 0 ) Svil, NVL( SUM( PEGProgr.StanzIni ), 0 ) Tot FROM CFCapitoliPEG, CFPEGPerProgrammi PEGProgr WHERE CFCapitoliPEG.IdCapitolo = PEGProgr.IdCapitolo AND CFCapitoliPEG.CodTit < 4 AND CFCapitoliPEG.Eser = ( lEser + 2 ) AND CFCapitoliPEG.App = 'S' GROUP BY CodSer, CodFnz, CodTit, CodInt; LOOP FETCH curPEG INTO nCodSer, nCodFnz, nCodTit, nCodInt, nCons, nSvil, nTot; EXIT WHEN curPEG%NOTFOUND; -- Controllo la presenza del record nella tabella SELECT COUNT(*) INTO nCount FROM CFStampaBilRiepPerSer WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt; IF ( nCount = 0 ) THEN -- Inserimento delle righe selezionate IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, j, DECODE( j, 1, 'CO', 2, 'SV', 3, 'T' ), 0, 0, 0, 0, DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), 0, 0, 0, lTimeStamp ); END LOOP; ELSE INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, 2, 'SV', 0, 0, 0, 0, nTot, 0, 0, 0, lTimeStamp ); END IF; ELSE -- aggiornamento record già presente IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP UPDATE CFStampaBilRiepPerSer SET Imp3 = DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = j; END LOOP; ELSE UPDATE CFStampaBilRiepPerSer SET Imp3 = nTot, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = 2; END IF; END IF; END LOOP; CLOSE curPEG; IF ( sOpzLang IS NOT NULL ) THEN -- SOLO BILINGUISMO -- azzero la colonna Imp4 prima di ricalcolarla UPDATE CFStampaBilRiepPerSer SET Imp4 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- LOOP PER IL CALCOLO DELLA COLONNA Imp4 OPEN curPEG FOR SELECT CodSer, CodFnz, CodTit, CodInt, NVL( SUM( DECODE( FlConsSvil, 'C', PEGProgr.StanzIni, 0 ) ), 0 ) Cons, NVL( SUM( DECODE( FlConsSvil, 'S', PEGProgr.StanzIni, 0 ) ), 0 ) Svil, NVL( SUM( PEGProgr.StanzIni ), 0 ) Tot FROM CFCapitoliPEG, CFPEGPerProgrammi PEGProgr WHERE CFCapitoliPEG.IdCapitolo = PEGProgr.IdCapitolo AND CFCapitoliPEG.CodTit < 4 AND CFCapitoliPEG.Eser = ( lEser + 3 ) AND CFCapitoliPEG.App = 'S' GROUP BY CodSer, CodFnz, CodTit, CodInt; LOOP FETCH curPEG INTO nCodSer, nCodFnz, nCodTit, nCodInt, nCons, nSvil, nTot; EXIT WHEN curPEG%NOTFOUND; -- Controllo la presenza del record nella tabella SELECT COUNT(*) INTO nCount FROM CFStampaBilRiepPerSer WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt; IF ( nCount = 0 ) THEN -- Inserimento delle righe selezionate IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, j, DECODE( j, 1, 'CO', 2, 'SV', 3, 'T' ), 0, 0, 0, 0, 0, DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), 0, 0, lTimeStamp ); END LOOP; ELSE INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, 2, 'SV', 0, 0, 0, 0, 0, nTot, 0, 0, lTimeStamp ); END IF; ELSE -- aggiornamento record già presente IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP UPDATE CFStampaBilRiepPerSer SET Imp4 = DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = j; END LOOP; ELSE UPDATE CFStampaBilRiepPerSer SET Imp4 = nTot, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = 2; END IF; END IF; END LOOP; CLOSE curPEG; -- azzero la colonna Imp5 prima di ricalcolarla UPDATE CFStampaBilRiepPerSer SET Imp5 = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- LOOP PER IL CALCOLO DELLA COLONNA Imp5 OPEN curPEG FOR SELECT CodSer, CodFnz, CodTit, CodInt, NVL( SUM( DECODE( FlConsSvil, 'C', PEGProgr.StanzIni, 0 ) ), 0 ) Cons, NVL( SUM( DECODE( FlConsSvil, 'S', PEGProgr.StanzIni, 0 ) ), 0 ) Svil, NVL( SUM( PEGProgr.StanzIni ), 0 ) Tot FROM CFCapitoliPEG, CFPEGPerProgrammi PEGProgr WHERE CFCapitoliPEG.IdCapitolo = PEGProgr.IdCapitolo AND CFCapitoliPEG.CodTit < 4 AND CFCapitoliPEG.Eser = ( lEser + 4 ) AND CFCapitoliPEG.App = 'S' GROUP BY CodSer, CodFnz, CodTit, CodInt; LOOP FETCH curPEG INTO nCodSer, nCodFnz, nCodTit, nCodInt, nCons, nSvil, nTot; EXIT WHEN curPEG%NOTFOUND; -- Controllo la presenza del record nella tabella SELECT COUNT(*) INTO nCount FROM CFStampaBilRiepPerSer WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt; IF ( nCount = 0 ) THEN -- Inserimento delle righe selezionate IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, j, DECODE( j, 1, 'CO', 2, 'SV', 3, 'T' ), 0, 0, 0, 0, 0, 0, DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), 0, lTimeStamp ); END LOOP; ELSE INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, 2, 'SV', 0, 0, 0, 0, 0, 0, nTot, 0, lTimeStamp ); END IF; ELSE -- aggiornamento record già presente IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP UPDATE CFStampaBilRiepPerSer SET Imp5 = DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = j; END LOOP; ELSE UPDATE CFStampaBilRiepPerSer SET Imp5 = nTot, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = 2; END IF; END IF; END LOOP; CLOSE curPEG; END IF; ----------------------------- COMPETENZA E RESIDUO ---------------------------- IF ( lFlRicCol <> 'N' ) THEN -- Flag diverso dal non calcolare IF ( lFlRicCol = 'E' ) OR ( lFlRicCol = 'S' ) THEN -- Calcola Entrambi o solo la Seconda -- Prima di ricalcolare azzero la colonna UPDATE CFStampaBilRiepPerSer SET ImpCorso = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- LOOP PER IL CALCOLO DELLA COLONNA ImpCorso (SECONDA COLONNA) DELLA STAMPA -- calcolo ImpCorso come sommatoria di (StanzIni + VarAum - VarDim) della tabella CFPEGPerProgrammi OPEN curPEG FOR SELECT CodSer, CodFnz, CodTit, CodInt, NVL( SUM( DECODE( FlConsSvil, 'C', PEGProgr.StanzIni + PEGProgr.VarAum - PEGProgr.VarDim, 0 ) ), 0 ) Cons, NVL( SUM( DECODE( FlConsSvil, 'S', PEGProgr.StanzIni + PEGProgr.VarAum - PEGProgr.VarDim, 0 ) ), 0 ) Svil, NVL( SUM( PEGProgr.StanzIni + PEGProgr.VarAum - PEGProgr.VarDim ), 0 ) Tot FROM CFCapitoliPEG, CFPEGPerProgrammi PEGProgr WHERE CFCapitoliPEG.IdCapitolo = PEGProgr.IdCapitolo AND CFCapitoliPEG.CodTit < 4 AND CFCapitoliPEG.Eser = ( lEser - 1 ) AND CFCapitoliPEG.App = 'S' GROUP BY CodSer, CodFnz, CodTit, CodInt; LOOP FETCH curPEG INTO nCodSer, nCodFnz, nCodTit, nCodInt, nCons, nSvil, nTot; EXIT WHEN curPEG%NOTFOUND; IF nTot < 0 THEN ERRDIAG := pkUtilityCont.fnErroriPers( 511, 0 )||' '||(lEser - 1)||' '|| 'Ser/Tit/Int '||nCodSer||'/'||nCodTit||'/'||nCodInt||' '|| pkUtilityCont.fnErroriPers( 514, 0 )||' '||nTot; IF sOpzLang IS NOT NULL THEN ERRDIAG := ERRDIAG || sSeparat || pkUtilityCont.fnErroriPers( 511, 1 )||' '||(lEser - 1)||' '|| 'Ser/Tit/Int '||nCodSer||'/'||nCodTit||'/'||nCodInt||' '|| pkUtilityCont.fnErroriPers( 514, 1 )||' '||nTot|| sSeparat || pkUtilityCont.fnErroriPers( 511, 2 )||' '||(lEser - 1)||' '|| 'Ser/Tit/Int '||nCodSer||'/'||nCodTit||'/'||nCodInt||' '|| pkUtilityCont.fnErroriPers( 514, 2 )||' '||nTot|| sSeparat || pkUtilityCont.fnErroriPers( 511, 3 )||' '||(lEser - 1)||' '|| 'Ser/Tit/Int '||nCodSer||'/'||nCodTit||'/'||nCodInt||' '|| pkUtilityCont.fnErroriPers( 514, 3 )||' '||nTot; END IF; ROLLBACK; RETURN pkUtility.fnError( 'pkContPEG.fnGenerazPrnRiepSer', -499, ERRDIAG ); END IF; -- Controllo la presenza del record nella tabella SELECT COUNT(*) INTO nCount FROM CFStampaBilRiepPerSer WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt; IF ( nCount = 0 ) THEN -- Inserimento delle righe selezionate IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, j, DECODE( j, 1, 'CO', 2, 'SV', 3, 'T' ), 0, DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), 0, 0, 0, 0, 0, 0, lTimeStamp ); END LOOP; ELSE INSERT INTO CFStampaBilRiepPerSer ( Eser, CodSer, CodFnz, CodTit, CodInt, Prg, Tipo, ImpChiuso, ImpCorso, Imp1, Imp2, Imp3, Imp4, Imp5, CodSes, TmsLock ) VALUES ( lEser, nCodSer, nCodFnz, nCodTit, nCodInt, 2, 'SV', 0, nTot, 0, 0, 0, 0, 0, 0, lTimeStamp ); END IF; ELSE -- aggiornamento record già presente modificare l'importo dell'ImpCorso IF nCodTit <> 2 THEN FOR j IN 1..3 LOOP UPDATE CFStampaBilRiepPerSer SET ImpCorso = DECODE( j, 1, nCons, 2, nSvil, 3, nTot ), CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = j; END LOOP; ELSE UPDATE CFStampaBilRiepPerSer SET ImpCorso = nTot, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser AND CodSer = nCodSer AND CodFnz = nCodFnz AND CodTit = nCodTit AND CodInt = nCodInt AND Prg = 2; END IF; END IF; END LOOP; CLOSE curPEG; END IF; IF ( lFlRicCol = 'E' ) OR ( lFlRicCol = 'P' ) THEN -- Calcola Entrambi o solo la Prima -- Prima di ricalcolare azzero la colonna UPDATE CFStampaBilRiepPerSer SET ImpChiuso = 0, CodSes = 0, TmsLock = lTimeStamp WHERE Eser = lEser; -- LOOP PER IL CALCOLO DELLA COLONNA ImpChiuso (PRIMA COLONNA) DELLA STAMPA -- calcolo ImpChiuso come sommatoria di TESTATA Impegni + O - VARIAZIONI OPEN curPEG FOR SELECT CodSer, CodFnz, CodTit, CodInt, NVL( SUM( DECODE( FlConsSvil, 'C', ( ( (PEGProgr.StanzIni+PEGProgr.VarAum-PEGProgr.VarDim) / (Cap.StanzIni+Cap.VarAum-Cap.VarDim) ) * NVL( pkViewForm.fnResImpSaldiCodMeccS(cap.IdCapitolo,('31/12/'||(lEser - 2))), 0 ) ) , 0 ) ), 0 ) Cons, NVL( SUM( DECODE( FlConsSvil, 'S', ( ( (PEGProgr.StanzIni+PEGProgr.VarAum-PEGProgr.VarDim) / (Cap.StanzIni+Cap.VarAum-Cap.