All Downloads are FREE. Search and download functionalities are using the official Maven repository.

expsigladb.Package.CNRCTB054_BODY.sql Maven / Gradle / Ivy

There is a newer version: 6.6.11
Show newest version
--------------------------------------------------------
--  DDL for Package Body CNRCTB054
--------------------------------------------------------

  CREATE OR REPLACE PACKAGE BODY "CNRCTB054" is

 procedure aggiornaStanziamentoResidui(aSaldo voce_f_saldi_cmp%rowtype, aDelta number, aUser varchar2,aTSNow date) is
 begin
          update voce_f_saldi_cmp
          set im_stanz_iniziale_a1 = im_stanz_iniziale_a1 + aDelta,
                  duva                             = aTSNow,
                  utuv                             = aUser,
                  pg_ver_rec               = pg_ver_rec + 1
          where cd_cds                        = aSaldo.cd_cds
            and esercizio                         = aSaldo.esercizio
            and ti_appartenenza           = aSaldo.ti_appartenenza
            and ti_gestione                       = aSaldo.ti_gestione
            and cd_voce                           = aSaldo.cd_voce
            and ti_competenza_residuo = aSaldo.ti_competenza_residuo;
 end;

 procedure aggiornaSaldi(aSaldo voce_f_saldi_cmp%rowtype,aTiImporto char, aDelta number, aUser varchar2,aTSNow date) is
 begin
  if aDelta=0 then
   return;
  end if;
  if aTiImporto = 'P' then
   update voce_f_saldi_cmp set
     im_obblig_imp_acr=im_obblig_imp_acr+aDelta,
         duva=aTSNow,
         utuv=aUser,
         pg_ver_rec=pg_ver_rec+1
   where
         esercizio = aSaldo.esercizio
     and cd_cds = aSaldo.cd_cds
     and ti_appartenenza = aSaldo.ti_appartenenza
     and ti_gestione = aSaldo.ti_gestione
     and cd_voce = aSaldo.cd_voce
     and ti_competenza_residuo = aSaldo.ti_competenza_residuo;
  elsif  aTiImporto = 'A' then
   update voce_f_saldi_cmp set
     im_mandati_reversali=im_mandati_reversali+aDelta,
         duva=aTSNow,
         utuv=aUser,
         pg_ver_rec=pg_ver_rec+1
   where
         esercizio = aSaldo.esercizio
     and cd_cds = aSaldo.cd_cds
     and ti_appartenenza = aSaldo.ti_appartenenza
     and ti_gestione = aSaldo.ti_gestione
     and cd_voce = aSaldo.cd_voce
     and ti_competenza_residuo = aSaldo.ti_competenza_residuo;
  elsif aTiImporto = 'U' then
   update voce_f_saldi_cmp set
     im_pagamenti_incassi=im_pagamenti_incassi+aDelta,
         duva=aTSNow,
         utuv=aUser,
         pg_ver_rec=pg_ver_rec+1
   where
         esercizio = aSaldo.esercizio
     and cd_cds = aSaldo.cd_cds
     and ti_appartenenza = aSaldo.ti_appartenenza
     and ti_gestione = aSaldo.ti_gestione
     and cd_voce = aSaldo.cd_voce
     and ti_competenza_residuo = aSaldo.ti_competenza_residuo;
  else
   IBMERR001.RAISE_ERR_GENERICO('Errore di invocazione funzione di aggiornamento dei saldi finanziari');
  end if;
 end;

 procedure lockBilFin(aEs number, aCDCDS varchar2) is
  aTemp varchar2(20);
 begin
  begin
   select utuv into aTemp from BILANCIO_PREVENTIVO where
        esercizio = aEs
    and cd_cds = aCDCDS
   for update nowait;
  exception when no_data_found then
   IBMERR001.RAISE_ERR_GENERICO('Bilancio preventivo di '||aCDCDS||' non ancora definito!');
  end;
 end;

 function isBilancioCNRIniziale(aEsercizio NUMBER) return CHAR is
  aStato varchar2(5);
 begin
  select stato into aStato from bilancio_preventivo where
       esercizio = aEsercizio
   and ti_appartenenza = CNRCTB001.APPARTENENZA_CNR;
  if aStato = STATO_PREVENTIVO_INIZIALE then
   return 'Y';
  end if;
  return 'N';
 exception when NO_DATA_FOUND then
  return 'N';
 end;

 function isBilancioCNRPredisposto(aEsercizio NUMBER) return CHAR is
  aStato varchar2(5);
 begin
  select stato into aStato from bilancio_preventivo where
       esercizio = aEsercizio
   and ti_appartenenza = CNRCTB001.APPARTENENZA_CNR;
  if aStato = STATO_PREVENTIVO_PREDISPOSTO then
   return 'Y';
  end if;
  return 'N';
 exception when NO_DATA_FOUND then
  return 'N';
 end;

 function isBilancioCNRApprovato(aEsercizio NUMBER) return CHAR is
  aStato varchar2(5);
 begin
  select stato into aStato from bilancio_preventivo where
       esercizio = aEsercizio
   and ti_appartenenza = CNRCTB001.APPARTENENZA_CNR;
  if aStato = STATO_PREVENTIVO_APPROVATO then
   return 'Y';
  end if;
  return 'N';
 exception when NO_DATA_FOUND then
  return 'N';
 end;

 procedure ins_VOCE_F_SALDI_CMP (aDest VOCE_F_SALDI_CMP%rowtype) is
  begin
   insert into VOCE_F_SALDI_CMP (
     ESERCIZIO
    ,CD_CDS
    ,TI_APPARTENENZA
    ,TI_GESTIONE
        ,TI_COMPETENZA_RESIDUO
    ,CD_VOCE
        ,FL_SOLA_LETTURA
    ,ORIGINE
    ,IM_STANZ_INIZIALE_A1
    ,IM_STANZ_INIZIALE_A2
    ,IM_STANZ_INIZIALE_A3
    ,VARIAZIONI_PIU
    ,VARIAZIONI_MENO
    ,IM_OBBLIG_IMP_ACR
    ,IM_MANDATI_REVERSALI
    ,IM_PAGAMENTI_INCASSI
    ,DACR
    ,UTCR
    ,DUVA
    ,UTUV
    ,PG_VER_REC
   ) values (
     aDest.ESERCIZIO
    ,aDest.CD_CDS
    ,aDest.TI_APPARTENENZA
    ,aDest.TI_GESTIONE
        ,aDest.TI_COMPETENZA_RESIDUO
    ,aDest.CD_VOCE
        ,aDest.FL_SOLA_LETTURA
    ,aDest.ORIGINE
    ,aDest.IM_STANZ_INIZIALE_A1
    ,aDest.IM_STANZ_INIZIALE_A2
    ,aDest.IM_STANZ_INIZIALE_A3
    ,aDest.VARIAZIONI_PIU
    ,aDest.VARIAZIONI_MENO
    ,aDest.IM_OBBLIG_IMP_ACR
    ,aDest.IM_MANDATI_REVERSALI
    ,aDest.IM_PAGAMENTI_INCASSI
    ,aDest.DACR
    ,aDest.UTCR
    ,aDest.DUVA
    ,aDest.UTUV
    ,aDest.PG_VER_REC
    );
 end;

 procedure ins_VOCE_F_SALDI_CDR_LINEA (aDest VOCE_F_SALDI_CDR_LINEA%rowtype) is
  begin
   insert into VOCE_F_SALDI_CDR_LINEA (
     ESERCIZIO,   ESERCIZIO_RES,
     CD_CENTRO_RESPONSABILITA,  CD_LINEA_ATTIVITA,
     TI_APPARTENENZA,  TI_GESTIONE,
     CD_VOCE,
     IM_STANZ_INIZIALE_A1, IM_STANZ_INIZIALE_A2,  IM_STANZ_INIZIALE_A3,
     VARIAZIONI_PIU,  VARIAZIONI_MENO,
     IM_STANZ_INIZIALE_CASSA, VARIAZIONI_PIU_CASSA, VARIAZIONI_MENO_CASSA,
     IM_OBBL_ACC_COMP, IM_STANZ_RES_IMPROPRIO,
     VAR_PIU_STANZ_RES_IMP, VAR_MENO_STANZ_RES_IMP,
     IM_OBBL_RES_IMP, VAR_PIU_OBBL_RES_IMP, VAR_MENO_OBBL_RES_IMP,
     IM_OBBL_RES_PRO, VAR_PIU_OBBL_RES_PRO, VAR_MENO_OBBL_RES_PRO,
     IM_MANDATI_REVERSALI_PRO, IM_MANDATI_REVERSALI_IMP,
     IM_PAGAMENTI_INCASSI, DACR, UTCR, DUVA, UTUV, PG_VER_REC, CD_ELEMENTO_VOCE)
Values (
     adest.ESERCIZIO, adest.ESERCIZIO_RES,
     adest.CD_CENTRO_RESPONSABILITA, adest.CD_LINEA_ATTIVITA,
     adest.TI_APPARTENENZA,  adest.TI_GESTIONE,
     adest.CD_VOCE,
     adest.IM_STANZ_INIZIALE_A1, adest.IM_STANZ_INIZIALE_A2,  adest.IM_STANZ_INIZIALE_A3,
     adest.VARIAZIONI_PIU,  adest.VARIAZIONI_MENO,
     adest.IM_STANZ_INIZIALE_CASSA, adest.VARIAZIONI_PIU_CASSA, adest.VARIAZIONI_MENO_CASSA,
     adest.IM_OBBL_ACC_COMP, adest.IM_STANZ_RES_IMPROPRIO,
     adest.VAR_PIU_STANZ_RES_IMP, adest.VAR_MENO_STANZ_RES_IMP,
     adest.IM_OBBL_RES_IMP, adest.VAR_PIU_OBBL_RES_IMP, adest.VAR_MENO_OBBL_RES_IMP,
     adest.IM_OBBL_RES_PRO, adest.VAR_PIU_OBBL_RES_PRO, adest.VAR_MENO_OBBL_RES_PRO,
     adest.IM_MANDATI_REVERSALI_PRO, adest.IM_MANDATI_REVERSALI_IMP,
     adest.IM_PAGAMENTI_INCASSI, adest.DACR, adest.UTCR, adest.DUVA, adest.UTUV,
     adest.PG_VER_REC, adest.CD_ELEMENTO_VOCE);
 end;

Procedure concatenaCampo (Stringa In Out VARCHAR2,valore In NUMBER,campo In VARCHAR2, trovato In Out VARCHAR2) Is
Begin
    If Nvl(valore,0) != 0 Then
      If trovato = 'N' Then
        Stringa := Stringa ||campo;
      Else
        Stringa := Stringa ||','||campo;
      End If;
      trovato := 'S';
    End If;
End;
Procedure concatenaCampoForUpdate (Stringa In Out VARCHAR2,valoreOld In NUMBER,valoreNew In NUMBER,campo In VARCHAR2, trovato In Out VARCHAR2) Is
  totale NUMBER := valoreOld + valoreNew;
  apici        VARCHAR2(1) := '''';
Begin
    If Nvl(valoreNew,0) != 0 Then
      If trovato = 'N' Then
        Stringa := Stringa ||' '||campo||' = '||apici||totale||apici;
      Else
        Stringa := Stringa ||', '||campo||' = '||apici||totale||apici;
      End If;
      trovato := 'S';
    End If;
End;

Procedure eseguiAggiornaSaldi(aOldSaldo In voce_f_saldi_cdr_linea%Rowtype,
                              aDeltaSaldo In voce_f_saldi_cdr_linea%Rowtype) Is
    CURSOR_NAME  INTEGER;
    appo         integer;
    p_stringa    VARCHAR2(2000);
    apici        VARCHAR2(1) := '''';
    trovato      VARCHAR2(1) := 'N';
Begin
    CURSOR_NAME:=DBMS_SQL.OPEN_CURSOR;
    p_stringa := 'UPDATE VOCE_F_SALDI_CDR_LINEA SET ';
    concatenaCampoForUpdate (p_stringa,Nvl(aOldSaldo.IM_STANZ_INIZIALE_A1,0), Nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A1,0),'IM_STANZ_INIZIALE_A1',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.IM_STANZ_INIZIALE_A2,0)    ,nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A2,0)    ,'IM_STANZ_INIZIALE_A2',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.IM_STANZ_INIZIALE_A3,0)    ,nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A3,0)    ,'IM_STANZ_INIZIALE_A3',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.VARIAZIONI_PIU,0)          ,nvl(aDeltaSaldo.VARIAZIONI_PIU,0)          ,'VARIAZIONI_PIU',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.VARIAZIONI_MENO,0)         ,nvl(aDeltaSaldo.VARIAZIONI_MENO,0)         ,'VARIAZIONI_MENO',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.IM_STANZ_INIZIALE_CASSA,0) ,nvl(aDeltaSaldo.IM_STANZ_INIZIALE_CASSA,0) ,'IM_STANZ_INIZIALE_CASSA',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.VARIAZIONI_PIU_CASSA,0)    ,nvl(aDeltaSaldo.VARIAZIONI_PIU_CASSA,0)    ,'VARIAZIONI_PIU_CASSA',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.VARIAZIONI_MENO_CASSA,0)   ,nvl(aDeltaSaldo.VARIAZIONI_MENO_CASSA,0)   ,'VARIAZIONI_MENO_CASSA',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.IM_OBBL_ACC_COMP,0)        ,nvl(aDeltaSaldo.IM_OBBL_ACC_COMP,0)        ,'IM_OBBL_ACC_COMP',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.IM_STANZ_RES_IMPROPRIO,0)  ,nvl(aDeltaSaldo.IM_STANZ_RES_IMPROPRIO,0)  ,'IM_STANZ_RES_IMPROPRIO',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.VAR_PIU_STANZ_RES_IMP,0)   ,nvl(aDeltaSaldo.VAR_PIU_STANZ_RES_IMP,0)   ,'VAR_PIU_STANZ_RES_IMP',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.VAR_MENO_STANZ_RES_IMP,0)  ,nvl(aDeltaSaldo.VAR_MENO_STANZ_RES_IMP,0)  ,'VAR_MENO_STANZ_RES_IMP',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.IM_OBBL_RES_IMP,0)         ,nvl(aDeltaSaldo.IM_OBBL_RES_IMP,0)         ,'IM_OBBL_RES_IMP',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.VAR_PIU_OBBL_RES_IMP,0)    ,nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_IMP,0)    ,'VAR_PIU_OBBL_RES_IMP',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.VAR_MENO_OBBL_RES_IMP,0)   ,nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_IMP,0)   ,'VAR_MENO_OBBL_RES_IMP',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.IM_OBBL_RES_PRO,0)         ,nvl(aDeltaSaldo.IM_OBBL_RES_PRO,0)         ,'IM_OBBL_RES_PRO',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.VAR_PIU_OBBL_RES_PRO,0)    ,nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO,0)    ,'VAR_PIU_OBBL_RES_PRO',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.VAR_MENO_OBBL_RES_PRO,0)   ,nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO,0)   ,'VAR_MENO_OBBL_RES_PRO',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.IM_MANDATI_REVERSALI_PRO,0),nvl(aDeltaSaldo.IM_MANDATI_REVERSALI_PRO,0),'IM_MANDATI_REVERSALI_PRO',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.IM_MANDATI_REVERSALI_IMP,0),nvl(aDeltaSaldo.IM_MANDATI_REVERSALI_IMP,0),'IM_MANDATI_REVERSALI_IMP',trovato);
    concatenaCampoForUpdate (p_stringa,nvl(aOldSaldo.IM_PAGAMENTI_INCASSI,0)    ,nvl(aDeltaSaldo.IM_PAGAMENTI_INCASSI,0)    ,'IM_PAGAMENTI_INCASSI',trovato);
    If trovato = 'N' Then
      p_stringa := p_stringa||' DUVA = sysdate, PG_VER_REC = PG_VER_REC +1, UTUV = '||Apici||aDeltaSaldo.utuv||Apici;
    Else
      p_stringa := p_stringa||', DUVA = sysdate, PG_VER_REC = PG_VER_REC +1, UTUV = '||Apici||aDeltaSaldo.utuv||Apici;
    End If;
    p_stringa := p_stringa||
                ' WHERE ESERCIZIO = '||aOldSaldo.ESERCIZIO||' AND '||
                'ESERCIZIO_RES = '||aOldSaldo.ESERCIZIO_RES||' AND '||
                'CD_CENTRO_RESPONSABILITA = '||apici||aOldSaldo.CD_CENTRO_RESPONSABILITA||apici||' AND '||
                'CD_LINEA_ATTIVITA        = '||apici||aOldSaldo.CD_LINEA_ATTIVITA||apici||' AND '||
                'TI_APPARTENENZA          = '||apici||aOldSaldo.TI_APPARTENENZA||apici||' AND '||
                'TI_GESTIONE              = '||apici||aOldSaldo.TI_GESTIONE||apici||' AND '||
                'CD_VOCE                  = '||apici||aOldSaldo.CD_VOCE||apici;
    dbms_sql.parse(CURSOR_NAME, p_stringa, DBMS_SQL.V7);
    appo := dbms_sql.execute(CURSOR_NAME);
    dbms_sql.close_cursor(CURSOR_NAME);
End;

Function creaSelectForUpdate(aDeltaSaldo In voce_f_saldi_cdr_linea%Rowtype, esercizio NUMBER)
        Return voce_f_saldi_cdr_linea%Rowtype Is
    CURSOR_NAME  INTEGER;
    appo         integer;
    p_stringa    VARCHAR2(2000);
    apici        VARCHAR2(1) := '''';
    trovato      VARCHAR2(1) := 'N';
    aSaldo       voce_f_saldi_cdr_linea%Rowtype;
    parametri_esercizio parametri_cnr%rowtype:=null;
    parametri_esercizioNew parametri_cnr%rowtype:=null;
    ev_old  elemento_voce%rowtype:=null;
    ev_new  elemento_voce%rowtype:=null;
    vocef   voce_f%Rowtype;
Begin
	dbms_output.put_line('aDeltaSaldo.ESERCIZIO '||aDeltaSaldo.ESERCIZIO||' - aDeltaSaldo.ESERCIZIO_RES '||aDeltaSaldo.ESERCIZIO_RES||'  - ESERCIZIO: '||esercizio||' - Voce '||aDeltaSaldo.cd_voce);
    if(aDeltaSaldo.ESERCIZIO !=esercizio) then
      parametri_esercizio:=CNRUTL001.getRecParametriCnr(aDeltaSaldo.ESERCIZIO);
      parametri_esercizioNew:=CNRUTL001.getRecParametriCnr(esercizio);
      if(parametri_esercizio.fl_nuovo_pdg='N' and parametri_esercizioNew.fl_nuovo_pdg='Y') then
	      begin
		      select * into vocef from voce_f
		      where
		        esercizio =aDeltaSaldo.ESERCIZIO And
		        ti_gestione = aDeltaSaldo.ti_gestione and
		        ti_appartenenza = aDeltaSaldo.ti_appartenenza and
		        cd_voce = aDeltaSaldo.cd_voce;

		      select * into ev_old from elemento_voce
		      where
		        esercizio =aDeltaSaldo.ESERCIZIO And
		        ti_gestione = aDeltaSaldo.ti_gestione and
		        ti_appartenenza = aDeltaSaldo.ti_appartenenza and
		        cd_elemento_voce = vocef.cd_elemento_voce;

	        ev_new :=cnrctb046.getElementoVoceNew(ev_old);

	      exception when no_data_found then
	       null;
	      end;
	    end if;
	  end if;
  if(ev_new.esercizio is not null ) then
  	p_stringa := 'SELECT ESERCIZIO, ESERCIZIO_RES, CD_CENTRO_RESPONSABILITA, CD_LINEA_ATTIVITA, '||
                'TI_APPARTENENZA, TI_GESTIONE, CD_VOCE, IM_STANZ_INIZIALE_A1, '||
                'IM_STANZ_INIZIALE_A2, IM_STANZ_INIZIALE_A3, VARIAZIONI_PIU, '||
                'VARIAZIONI_MENO, IM_STANZ_INIZIALE_CASSA, VARIAZIONI_PIU_CASSA, '||
                'VARIAZIONI_MENO_CASSA, IM_OBBL_ACC_COMP, IM_STANZ_RES_IMPROPRIO, '||
                'VAR_PIU_STANZ_RES_IMP, VAR_MENO_STANZ_RES_IMP, IM_OBBL_RES_IMP, '||
                'VAR_PIU_OBBL_RES_IMP, VAR_MENO_OBBL_RES_IMP, IM_OBBL_RES_PRO, '||
                'VAR_PIU_OBBL_RES_PRO, VAR_MENO_OBBL_RES_PRO, IM_MANDATI_REVERSALI_PRO, '||
                'IM_MANDATI_REVERSALI_IMP, IM_PAGAMENTI_INCASSI, '||
                'DACR, UTCR, DUVA, UTUV, PG_VER_REC, CD_ELEMENTO_VOCE '||
                'FROM  VOCE_F_SALDI_CDR_LINEA '||
                'WHERE ESERCIZIO = '||esercizio||' AND '||
                'ESERCIZIO_RES = '||aDeltaSaldo.ESERCIZIO_RES||' AND '||
                'CD_CENTRO_RESPONSABILITA = '||apici||aDeltaSaldo.CD_CENTRO_RESPONSABILITA||apici||' AND '||
                'CD_LINEA_ATTIVITA        = '||apici||aDeltaSaldo.CD_LINEA_ATTIVITA||apici||' AND '||
                'TI_APPARTENENZA          = '||apici||ev_new.TI_APPARTENENZA||apici||' AND '||
                'TI_GESTIONE              = '||apici||aDeltaSaldo.TI_GESTIONE||apici||' AND '||
                'CD_VOCE                  = '||apici||ev_new.CD_ELEMENTO_VOCE||apici||
                ' FOR Update of ';
  else
    p_stringa := 'SELECT ESERCIZIO, ESERCIZIO_RES, CD_CENTRO_RESPONSABILITA, CD_LINEA_ATTIVITA, '||
                'TI_APPARTENENZA, TI_GESTIONE, CD_VOCE, IM_STANZ_INIZIALE_A1, '||
                'IM_STANZ_INIZIALE_A2, IM_STANZ_INIZIALE_A3, VARIAZIONI_PIU, '||
                'VARIAZIONI_MENO, IM_STANZ_INIZIALE_CASSA, VARIAZIONI_PIU_CASSA, '||
                'VARIAZIONI_MENO_CASSA, IM_OBBL_ACC_COMP, IM_STANZ_RES_IMPROPRIO, '||
                'VAR_PIU_STANZ_RES_IMP, VAR_MENO_STANZ_RES_IMP, IM_OBBL_RES_IMP, '||
                'VAR_PIU_OBBL_RES_IMP, VAR_MENO_OBBL_RES_IMP, IM_OBBL_RES_PRO, '||
                'VAR_PIU_OBBL_RES_PRO, VAR_MENO_OBBL_RES_PRO, IM_MANDATI_REVERSALI_PRO, '||
                'IM_MANDATI_REVERSALI_IMP, IM_PAGAMENTI_INCASSI, '||
                'DACR, UTCR, DUVA, UTUV, PG_VER_REC, CD_ELEMENTO_VOCE '||
                'FROM  VOCE_F_SALDI_CDR_LINEA '||
                'WHERE ESERCIZIO = '||esercizio||' AND '||
                'ESERCIZIO_RES = '||aDeltaSaldo.ESERCIZIO_RES||' AND '||
                'CD_CENTRO_RESPONSABILITA = '||apici||aDeltaSaldo.CD_CENTRO_RESPONSABILITA||apici||' AND '||
                'CD_LINEA_ATTIVITA        = '||apici||aDeltaSaldo.CD_LINEA_ATTIVITA||apici||' AND '||
                'TI_APPARTENENZA          = '||apici||aDeltaSaldo.TI_APPARTENENZA||apici||' AND '||
                'TI_GESTIONE              = '||apici||aDeltaSaldo.TI_GESTIONE||apici||' AND '||
                'CD_VOCE                  = '||apici||aDeltaSaldo.CD_VOCE||apici||
                ' FOR Update of ';
    end if;
    concatenaCampo (p_stringa,aDeltaSaldo.IM_STANZ_INIZIALE_A1    ,'IM_STANZ_INIZIALE_A1',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.IM_STANZ_INIZIALE_A2    ,'IM_STANZ_INIZIALE_A2',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.IM_STANZ_INIZIALE_A3    ,'IM_STANZ_INIZIALE_A3',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.VARIAZIONI_PIU          ,'VARIAZIONI_PIU',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.VARIAZIONI_MENO         ,'VARIAZIONI_MENO',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.IM_STANZ_INIZIALE_CASSA ,'IM_STANZ_INIZIALE_CASSA',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.VARIAZIONI_PIU_CASSA    ,'VARIAZIONI_PIU_CASSA',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.VARIAZIONI_MENO_CASSA   ,'VARIAZIONI_MENO_CASSA',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.IM_OBBL_ACC_COMP        ,'IM_OBBL_ACC_COMP',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.IM_STANZ_RES_IMPROPRIO  ,'IM_STANZ_RES_IMPROPRIO',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.VAR_PIU_STANZ_RES_IMP   ,'VAR_PIU_STANZ_RES_IMP',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.VAR_MENO_STANZ_RES_IMP  ,'VAR_MENO_STANZ_RES_IMP',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.IM_OBBL_RES_IMP         ,'IM_OBBL_RES_IMP',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.VAR_PIU_OBBL_RES_IMP    ,'VAR_PIU_OBBL_RES_IMP',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.VAR_MENO_OBBL_RES_IMP   ,'VAR_MENO_OBBL_RES_IMP',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.IM_OBBL_RES_PRO         ,'IM_OBBL_RES_PRO',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.VAR_PIU_OBBL_RES_PRO    ,'VAR_PIU_OBBL_RES_PRO',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.VAR_MENO_OBBL_RES_PRO   ,'VAR_MENO_OBBL_RES_PRO',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.IM_MANDATI_REVERSALI_PRO,'IM_MANDATI_REVERSALI_PRO',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.IM_MANDATI_REVERSALI_IMP,'IM_MANDATI_REVERSALI_IMP',trovato);
    concatenaCampo (p_stringa,aDeltaSaldo.IM_PAGAMENTI_INCASSI    ,'IM_PAGAMENTI_INCASSI',trovato);
    If trovato = 'N' Then
      p_stringa := p_stringa ||' ESERCIZIO ';
    End If;
    p_stringa := p_stringa ||' WAIT 180';
    /*pipe.send_message(Substr(p_stringa,1,250));
    pipe.send_message(Substr(p_stringa,251,250));
    pipe.send_message(Substr(p_stringa,501,250));
    pipe.send_message(Substr(p_stringa,751,250));
    pipe.send_message(Substr(p_stringa,1001,250));*/
Dbms_Output.put_line(p_stringa);
    CURSOR_NAME:=DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(CURSOR_NAME, P_Stringa, DBMS_SQL.V7);

    Dbms_Sql.DEFINE_COLUMN(cursor_name,1 ,aSaldo.ESERCIZIO );
    DBMS_SQL.DEFINE_COLUMN(cursor_name,2 ,aSaldo.ESERCIZIO_RES );
    DBMS_SQL.DEFINE_COLUMN(cursor_name,3 ,aSaldo.CD_CENTRO_RESPONSABILITA,30 );
    DBMS_SQL.DEFINE_COLUMN(cursor_name,4 ,aSaldo.CD_LINEA_ATTIVITA ,10);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,5 ,aSaldo.TI_APPARTENENZA ,1);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,6 ,aSaldo.TI_GESTIONE ,1);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,7 ,aSaldo.CD_VOCE,50 );
    DBMS_SQL.DEFINE_COLUMN(cursor_name,8 ,aSaldo.IM_STANZ_INIZIALE_A1);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,9 ,aSaldo.IM_STANZ_INIZIALE_A2);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,10,aSaldo.IM_STANZ_INIZIALE_A3);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,11,aSaldo.VARIAZIONI_PIU);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,12,aSaldo.VARIAZIONI_MENO);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,13,aSaldo.IM_STANZ_INIZIALE_CASSA);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,14,aSaldo.VARIAZIONI_PIU_CASSA);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,15,aSaldo.VARIAZIONI_MENO_CASSA);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,16,aSaldo.IM_OBBL_ACC_COMP);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,17,aSaldo.IM_STANZ_RES_IMPROPRIO);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,18,aSaldo.VAR_PIU_STANZ_RES_IMP);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,19,aSaldo.VAR_MENO_STANZ_RES_IMP);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,20,aSaldo.IM_OBBL_RES_IMP);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,21,aSaldo.VAR_PIU_OBBL_RES_IMP);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,22,aSaldo.VAR_MENO_OBBL_RES_IMP);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,23,aSaldo.IM_OBBL_RES_PRO);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,24,aSaldo.VAR_PIU_OBBL_RES_PRO);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,25,aSaldo.VAR_MENO_OBBL_RES_PRO);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,26,aSaldo.IM_MANDATI_REVERSALI_PRO);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,27,aSaldo.IM_MANDATI_REVERSALI_IMP);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,28,aSaldo.IM_PAGAMENTI_INCASSI);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,29,aSaldo.DACR);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,30,aSaldo.UTCR,20);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,31,aSaldo.DUVA);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,32,aSaldo.UTUV,20);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,33,aSaldo.PG_VER_REC);
    DBMS_SQL.DEFINE_COLUMN(cursor_name,34,aSaldo.CD_ELEMENTO_VOCE,20);

    appo := DBMS_SQL.execute_and_fetch(cursor_name);

    DBMS_SQL.COLUMN_VALUE(cursor_name,1 ,aSaldo.ESERCIZIO );
    DBMS_SQL.COLUMN_VALUE(cursor_name,2 ,aSaldo.ESERCIZIO_RES );
    DBMS_SQL.COLUMN_VALUE(cursor_name,3 ,aSaldo.CD_CENTRO_RESPONSABILITA );
    DBMS_SQL.COLUMN_VALUE(cursor_name,4 ,aSaldo.CD_LINEA_ATTIVITA );
    DBMS_SQL.COLUMN_VALUE(cursor_name,5 ,aSaldo.TI_APPARTENENZA );
    DBMS_SQL.COLUMN_VALUE(cursor_name,6 ,aSaldo.TI_GESTIONE );
    DBMS_SQL.COLUMN_VALUE(cursor_name,7 ,aSaldo.CD_VOCE );
    DBMS_SQL.COLUMN_VALUE(cursor_name,8 ,aSaldo.IM_STANZ_INIZIALE_A1);
    DBMS_SQL.COLUMN_VALUE(cursor_name,9 ,aSaldo.IM_STANZ_INIZIALE_A2);
    DBMS_SQL.COLUMN_VALUE(cursor_name,10,aSaldo.IM_STANZ_INIZIALE_A3);
    DBMS_SQL.COLUMN_VALUE(cursor_name,11,aSaldo.VARIAZIONI_PIU);
    DBMS_SQL.COLUMN_VALUE(cursor_name,12,aSaldo.VARIAZIONI_MENO);
    DBMS_SQL.COLUMN_VALUE(cursor_name,13,aSaldo.IM_STANZ_INIZIALE_CASSA);
    DBMS_SQL.COLUMN_VALUE(cursor_name,14,aSaldo.VARIAZIONI_PIU_CASSA);
    DBMS_SQL.COLUMN_VALUE(cursor_name,15,aSaldo.VARIAZIONI_MENO_CASSA);
    DBMS_SQL.COLUMN_VALUE(cursor_name,16,aSaldo.IM_OBBL_ACC_COMP);
    DBMS_SQL.COLUMN_VALUE(cursor_name,17,aSaldo.IM_STANZ_RES_IMPROPRIO);
    DBMS_SQL.COLUMN_VALUE(cursor_name,18,aSaldo.VAR_PIU_STANZ_RES_IMP);
    DBMS_SQL.COLUMN_VALUE(cursor_name,19,aSaldo.VAR_MENO_STANZ_RES_IMP);
    DBMS_SQL.COLUMN_VALUE(cursor_name,20,aSaldo.IM_OBBL_RES_IMP);
    DBMS_SQL.COLUMN_VALUE(cursor_name,21,aSaldo.VAR_PIU_OBBL_RES_IMP);
    DBMS_SQL.COLUMN_VALUE(cursor_name,22,aSaldo.VAR_MENO_OBBL_RES_IMP);
    DBMS_SQL.COLUMN_VALUE(cursor_name,23,aSaldo.IM_OBBL_RES_PRO);
    DBMS_SQL.COLUMN_VALUE(cursor_name,24,aSaldo.VAR_PIU_OBBL_RES_PRO);
    DBMS_SQL.COLUMN_VALUE(cursor_name,25,aSaldo.VAR_MENO_OBBL_RES_PRO);
    DBMS_SQL.COLUMN_VALUE(cursor_name,26,aSaldo.IM_MANDATI_REVERSALI_PRO);
    DBMS_SQL.COLUMN_VALUE(cursor_name,27,aSaldo.IM_MANDATI_REVERSALI_IMP);
    DBMS_SQL.COLUMN_VALUE(cursor_name,28,aSaldo.IM_PAGAMENTI_INCASSI);
    DBMS_SQL.COLUMN_VALUE(cursor_name,29,aSaldo.DACR);
    DBMS_SQL.COLUMN_VALUE(cursor_name,30,aSaldo.UTCR);
    DBMS_SQL.COLUMN_VALUE(cursor_name,31,aSaldo.DUVA);
    DBMS_SQL.COLUMN_VALUE(cursor_name,32,aSaldo.UTUV);
    DBMS_SQL.COLUMN_VALUE(cursor_name,33,aSaldo.PG_VER_REC);
    DBMS_SQL.COLUMN_VALUE(cursor_name,34,aSaldo.CD_ELEMENTO_VOCE);

    DBMS_SQL.CLOSE_CURSOR(CURSOR_NAME);

    Return(aSaldo);

End;

Procedure RESET_IMPORTI_SALDI (aDeltaSaldo  In Out voce_f_saldi_cdr_linea%Rowtype) Is
Begin
  aDeltaSaldo.IM_STANZ_INIZIALE_A1      := 0;
  aDeltaSaldo.IM_STANZ_INIZIALE_A2      := 0;
  aDeltaSaldo.IM_STANZ_INIZIALE_A3      := 0;
  aDeltaSaldo.VARIAZIONI_PIU            := 0;
  aDeltaSaldo.VARIAZIONI_MENO           := 0;
  aDeltaSaldo.IM_STANZ_INIZIALE_CASSA   := 0;
  aDeltaSaldo.VARIAZIONI_PIU_CASSA      := 0;
  aDeltaSaldo.VARIAZIONI_MENO_CASSA     := 0;
  aDeltaSaldo.IM_OBBL_ACC_COMP          := 0;
  aDeltaSaldo.IM_STANZ_RES_IMPROPRIO    := 0;
  aDeltaSaldo.VAR_PIU_STANZ_RES_IMP     := 0;
  aDeltaSaldo.VAR_MENO_STANZ_RES_IMP    := 0;
  aDeltaSaldo.IM_OBBL_RES_IMP           := 0;
  aDeltaSaldo.VAR_PIU_OBBL_RES_IMP      := 0;
  aDeltaSaldo.VAR_MENO_OBBL_RES_IMP     := 0;
  aDeltaSaldo.IM_OBBL_RES_PRO           := 0;
  aDeltaSaldo.VAR_PIU_OBBL_RES_PRO      := 0;
  aDeltaSaldo.VAR_MENO_OBBL_RES_PRO     := 0;
  aDeltaSaldo.IM_MANDATI_REVERSALI_PRO  := 0;
  aDeltaSaldo.IM_MANDATI_REVERSALI_IMP  := 0;
  aDeltaSaldo.IM_PAGAMENTI_INCASSI      := 0;
End;

Procedure crea_aggiorna_saldi(aDeltaSaldo VOCE_F_SALDI_CDR_LINEA%Rowtype, COD_CHIAMANTE VARCHAR2,
          AGGIORNA_STANZ_RES CHAR) IS

aOldSaldo       VOCE_F_SALDI_CDR_LINEA%ROWTYPE;
aNewSaldo       VOCE_F_SALDI_CDR_LINEA%ROWTYPE;
aOldSaldo_NEXT  VOCE_F_SALDI_CDR_LINEA%ROWTYPE;
aCd_elemento_voce VOCE_F_SALDI_CDR_LINEA.cd_elemento_voce%TYPE;
alinea          linea_attivita%Rowtype;
aelvoce         elemento_voce%Rowtype;
fl_2006         CHAR(1);

BEGIN
/*
If ADELTASALDO.ESERCIZIO = 2005 And ADELTASALDO.ESERCIZIO_RES = 2005
And ADELTASALDO.CD_CENTRO_RESPONSABILITA = '101.000.000' And
ADELTASALDO.TI_APPARTENENZA = 'C' And
ADELTASALDO.TI_GESTIONE = 'E' Then
   IBMERR001.RAISE_ERR_GENERICO('A');
End If;
     IBMERR001.RAISE_ERR_GENERICO('PARAMETRI PASSATI DAL CHIAMANTE '||cod_chiamante||
' ESERCIZIO                '||ADELTASALDO.ESERCIZIO               ||
' ESERCIZIO_RES            '||ADELTASALDO.ESERCIZIO_RES           ||
' CD_CENTRO_RESPONSABILITA '||ADELTASALDO.CD_CENTRO_RESPONSABILITA||
' CD_LINEA_ATTIVITA        '||ADELTASALDO.CD_LINEA_ATTIVITA       ||
' TI_APPARTENENZA          '||ADELTASALDO.TI_APPARTENENZA         ||
' TI_GESTIONE              '||ADELTASALDO.TI_GESTIONE             ||
' CD_VOCE                  '||ADELTASALDO.CD_VOCE);
*/
--End If;


If aDeltaSaldo.ESERCIZIO IS NULL Then
     IBMERR001.RAISE_ERR_GENERICO('Impossibile aggiornare i Saldi per CdR/Voce/Linea, parametro "Esercizio" nullo ! Cod. Chiamante '||cod_chiamante);
elsif   aDeltaSaldo.ESERCIZIO_RES IS NULL  Then
     IBMERR001.RAISE_ERR_GENERICO('Impossibile aggiornare i Saldi per CdR/Voce/Linea, parametro "Esercizio Residuo" nullo ! Cod. Chiamante '||cod_chiamante);
elsif   aDeltaSaldo.CD_CENTRO_RESPONSABILITA IS NULL  Then
     IBMERR001.RAISE_ERR_GENERICO('Impossibile aggiornare i Saldi per CdR/Voce/Linea, parametro "CdR" nullo ! Cod. Chiamante '||cod_chiamante);
elsif   aDeltaSaldo.CD_LINEA_ATTIVITA IS NULL  Then
     IBMERR001.RAISE_ERR_GENERICO('Impossibile aggiornare i Saldi per CdR/Voce/Linea, parametro "LdA" nullo ! Cod. Chiamante '||cod_chiamante);
elsif   aDeltaSaldo.TI_APPARTENENZA IS NULL  Then
     IBMERR001.RAISE_ERR_GENERICO('Impossibile aggiornare i Saldi per CdR/Voce/Linea, parametro "Tipo Appartenenza" nullo ! Cod. Chiamante '||cod_chiamante);
elsif   aDeltaSaldo.TI_GESTIONE IS NULL  Then
     IBMERR001.RAISE_ERR_GENERICO('Impossibile aggiornare i Saldi per CdR/Voce/Linea, parametro "Tipo Gstione" nullo ! Cod. Chiamante '||cod_chiamante);
elsif   aDeltaSaldo.CD_VOCE IS NULL  Then
     IBMERR001.RAISE_ERR_GENERICO('Impossibile aggiornare i Saldi per CdR/Voce/Linea, parametro "Voce" nullo ! Cod. Chiamante '||cod_chiamante);
elsif   aDeltaSaldo.UTUV IS NULL THEN
     IBMERR001.RAISE_ERR_GENERICO('Impossibile aggiornare i Saldi per CdR/Voce/Linea, parametro "Utente Ultima Variazione" nullo ! Cod. Chiamante '||cod_chiamante);
End IF;

Dbms_Output.PUT_LINE ('ENTRO CON '||aDeltaSaldo.ESERCIZIO||'/'||aDeltaSaldo.ESERCIZIO_RES||'/'||
                                        aDeltaSaldo.CD_CENTRO_RESPONSABILITA||'/'||aDeltaSaldo.CD_LINEA_ATTIVITA||'/'||
                                        aDeltaSaldo.TI_APPARTENENZA||'/'||aDeltaSaldo.TI_GESTIONE||'/'||
                                        aDeltaSaldo.CD_VOCE||' CHIAMENTE '||COD_CHIAMANTE);

Begin
  aOldSaldo := creaSelectForUpdate(aDeltaSaldo,aDeltaSaldo.ESERCIZIO);
  If aOldSaldo.ESERCIZIO Is Null Then
    Raise No_Data_Found;
  End If;
Exception
  When ERR_LOCK Then
    IBMERR001.RAISE_ERR_GENERICO('Impossibile procedere all''operazione. La risorsa non ט al momento disponibile. Riprovare.');
End;

If aOldSaldo.CD_elemento_VOCE Is Null Then
   IBMERR001.RAISE_ERR_GENERICO('Sui Saldi relativi a '||aDeltaSaldo.ESERCIZIO||'/'||aDeltaSaldo.ESERCIZIO_RES||'/'||
                                        aDeltaSaldo.CD_CENTRO_RESPONSABILITA||'/'||aDeltaSaldo.CD_LINEA_ATTIVITA||'/'||
                                        aDeltaSaldo.TI_APPARTENENZA||'/'||aDeltaSaldo.TI_GESTIONE||'/'||
                                        aDeltaSaldo.CD_VOCE||' non ט indicato l''Elemento Voce');
End If;

Begin
  Select *
  Into  alinea
  From  linea_attivita
  Where cd_centro_responsabilita = aDeltaSaldo.CD_CENTRO_RESPONSABILITA And
        cd_linea_attivita = aDeltaSaldo.CD_LINEA_ATTIVITA;
Exception
  When No_Data_Found Then
   IBMERR001.RAISE_ERR_GENERICO('La G.A.E. '||aDeltaSaldo.CD_CENTRO_RESPONSABILITA||'/'||aDeltaSaldo.CD_LINEA_ATTIVITA||
' non esiste in anagrafica !');
End;

Begin
  Select  *
  Into    aelvoce
  From    elemento_voce
  Where   ESERCIZIO        = aDeltaSaldo.ESERCIZIO AND
          TI_APPARTENENZA  = aDeltaSaldo.TI_APPARTENENZA AND
          TI_GESTIONE      = aDeltaSaldo.TI_GESTIONE AND
          CD_ELEMENTO_VOCE = aOldSaldo.CD_elemento_VOCE;
Exception
  When No_Data_Found Then
   IBMERR001.RAISE_ERR_GENERICO('L''Elemento Voce '||aDeltaSaldo.ESERCIZIO||'/'||aDeltaSaldo.TI_APPARTENENZA||'/'||aDeltaSaldo.TI_GESTIONE||'/'||aOldSaldo.CD_elemento_VOCE||
' non esiste in anagrafica !');
End;

Begin
  Select  Nvl(FL_REGOLAMENTO_2006, 'N')
  Into    fl_2006
  From    parametri_cnr
  Where   esercizio = aDeltaSaldo.ESERCIZIO;
Exception
  When No_Data_Found Then
   IBMERR001.RAISE_ERR_GENERICO('Attenzione !!! Non esistono i Parametri CNR per l''Esercizio '||aDeltaSaldo.ESERCIZIO);
End;

If FL_2006 = 'Y' And
   aDeltaSaldo.ESERCIZIO = aDeltaSaldo.ESERCIZIO_RES And
   aDeltaSaldo.TI_GESTIONE = 'S' And
 ((NVL(aDeltasaldo.IM_OBBL_ACC_COMP, 0) != 0) Or (NVL(aDeltasaldo.VARIAZIONI_MENO, 0)) != 0) And
   Not CNRCTB037.ISLINEASFONDABILE(alinea) And Not CNRCTB037.ISELEMENTOVOCESFONDABILE(aelvoce) And
   Nvl(aOldsaldo.IM_STANZ_INIZIALE_A1, 0) + NVL(aDeltasaldo.IM_STANZ_INIZIALE_A1, 0) +
   Nvl(aOldsaldo.VARIAZIONI_PIU, 0) + NVL(aDeltasaldo.VARIAZIONI_PIU, 0) -
   (Nvl(aOldsaldo.VARIAZIONI_MENO, 0) + NVL(aDeltasaldo.VARIAZIONI_MENO, 0)) -
   (Nvl(aOldsaldo.IM_OBBL_ACC_COMP, 0) + NVL(aDeltasaldo.IM_OBBL_ACC_COMP, 0)) < 0 Then
   IBMERR001.RAISE_ERR_GENERICO('Impossibile effettuare l''operazione, Voce e GAE non sono sfondabili e '||
' la disponibilitא di competenza per CdR/GAE/Voce ('||
Nvl(Ltrim(
 To_Char(Nvl(aOldsaldo.IM_STANZ_INIZIALE_A1, 0) +
         Nvl(aDeltasaldo.IM_STANZ_INIZIALE_A1, 0) +
         Nvl(aOldsaldo.VARIAZIONI_PIU, 0) +
         Nvl(aDeltasaldo.VARIAZIONI_PIU, 0) -
         Nvl(aOldsaldo.VARIAZIONI_MENO, 0) +
         Nvl(aDeltasaldo.VARIAZIONI_MENO, 0)), '999g999g999g999g999g990d99'), 0)
||') non ט sufficiente a coprire il totale dei documenti ('||
Ltrim(
 To_Char(Nvl(aOldsaldo.IM_OBBL_ACC_COMP, 0) +
         NVL(aDeltasaldo.IM_OBBL_ACC_COMP, 0), '999g999g999g999g999g990d99'))
||'). [Esercizio '||aDeltaSaldo.ESERCIZIO||', Es. Residuo '||aDeltaSaldo.ESERCIZIO_RES||', CdR '||aDeltaSaldo.CD_CENTRO_RESPONSABILITA||', GAE '||aDeltaSaldo.CD_LINEA_ATTIVITA||', Voce '||aDeltaSaldo.CD_VOCE||']');

End If;
/*
Dbms_Output.put_line ('update 54 VAR_MENO_OBBL_RES_IMP  '||NVL(aOldsaldo.IM_OBBL_RES_PRO, 0)||' '||NVL(aDeltasaldo.IM_OBBL_RES_PRO, 0)||' '||cod_chiamante||' '||
aOldSaldo.ESERCIZIO||' '||
aOldSaldo.ESERCIZIO_RES||' '||
aOldSaldo.CD_CENTRO_RESPONSABILITA||' '||
aOldSaldo.CD_LINEA_ATTIVITA||' '||
aOldSaldo.TI_APPARTENENZA||' '||
aOldSaldo.TI_GESTIONE||' '||
aOldSaldo.CD_VOCE);
*/

eseguiAggiornaSaldi(aOldsaldo,aDeltasaldo);

-- SE IL CDS E' GIA' STATO RIBALTATO DEVO AGGIORNARE I SALDI ANCHE NELL'ANNO NUOVO
-- (SOLO QUELLI CHE HANNO INFLUENZA NEL NUOVO ESERCIZIO)
Begin

If CNRCTB048.getcdsribaltato (aDeltaSaldo.ESERCIZIO, CNRUTL001.GETCDSFROMCDR(aDeltaSaldo.CD_CENTRO_RESPONSABILITA)) = 'Y' And
((aDeltaSaldo.TI_GESTIONE = CNRCTB001.GESTIONE_SPESE And (aDeltaSaldo.IM_STANZ_INIZIALE_A1 != 0 Or
                                                          aDeltaSaldo.VARIAZIONI_PIU != 0 Or
                                                          aDeltaSaldo.VARIAZIONI_MENO != 0 Or
                                                          aDeltaSaldo.IM_OBBL_ACC_COMP != 0 Or
                                                          aDeltaSaldo.IM_STANZ_RES_IMPROPRIO != 0 Or
                                                          aDeltaSaldo.VAR_PIU_STANZ_RES_IMP != 0 Or
                                                          aDeltaSaldo.VAR_MENO_STANZ_RES_IMP != 0 Or
                                                          aDeltaSaldo.IM_OBBL_RES_IMP != 0 Or
                                                          aDeltaSaldo.VAR_PIU_OBBL_RES_IMP != 0 Or
                                                          aDeltaSaldo.VAR_MENO_OBBL_RES_IMP != 0 Or
                                                          aDeltaSaldo.IM_OBBL_RES_PRO != 0 Or
                                                          aDeltaSaldo.VAR_PIU_OBBL_RES_PRO != 0 Or
                                                          aDeltaSaldo.VAR_MENO_OBBL_RES_PRO != 0)) Or
(aDeltaSaldo.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE And (aDeltaSaldo.IM_OBBL_ACC_COMP != 0 Or
                                                           aDeltaSaldo.IM_OBBL_RES_PRO != 0 Or
                                                           aDeltaSaldo.VAR_PIU_OBBL_RES_PRO != 0 Or
                                                           aDeltaSaldo.VAR_MENO_OBBL_RES_PRO != 0))) Then
Begin
  dbms_output.put_line ('esercizio +1');
  aOldSaldo_NEXT := creaSelectForUpdate(aDeltaSaldo,aDeltaSaldo.ESERCIZIO+1);
  If aOldSaldo_NEXT.ESERCIZIO Is Null Then
    Raise No_Data_Found;
  End If;
Exception
  When ERR_LOCK Then
    IBMERR001.RAISE_ERR_GENERICO('Impossibile procedere all''operazione. La risorsa non ט al momento disponibile. Riprovare.');
End;

/*
Dbms_Output.put_line ('aOldsaldo_NEXT.IM_OBBL_RES_PRO '||aOldsaldo_NEXT.IM_OBBL_RES_PRO);
Dbms_Output.put_line ('aDeltaSaldo.IM_OBBL_RES_PRO '||aDeltaSaldo.IM_OBBL_RES_PRO);
Dbms_Output.put_line ('aDeltaSaldo.VAR_PIU_OBBL_RES_PRO '||aDeltaSaldo.VAR_PIU_OBBL_RES_PRO);
Dbms_Output.put_line ('aDeltaSaldo.VAR_MENO_OBBL_RES_PRO '||aDeltaSaldo.VAR_MENO_OBBL_RES_PRO);

If Nvl(aOldsaldo_NEXT.IM_OBBL_RES_PRO, 0) + Nvl(aDeltaSaldo.IM_OBBL_RES_PRO, 0) +
     Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO, 0) - Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO, 0) < 0 Then
      IBMERR001.RAISE_ERR_GENERICO('04. Impossibile effettuare l''operazione ! '||
' Nell''esercizio '||To_Char(aOldSaldo_NEXT.ESERCIZIO)||' e per il CdR '||aDeltaSaldo.CD_CENTRO_RESPONSABILITA||', '||
' Voce '||aDeltaSaldo.CD_VOCE||' e GAE '||aDeltaSaldo.CD_LINEA_ATTIVITA||' il Totale Residui Propri '||
' diventerebbe negativo ('||To_Char(Nvl(aOldsaldo_NEXT.IM_OBBL_RES_PRO, 0) + Nvl(aDeltaSaldo.IM_OBBL_RES_PRO, 0) +
     Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO, 0) - Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO, 0))||')');
End If;

Update VOCE_F_SALDI_CDR_LINEA
SET    IM_OBBL_RES_PRO          = Nvl(aOldsaldo_NEXT.IM_OBBL_RES_PRO, 0) +
                                  Nvl(aDeltaSaldo.IM_OBBL_RES_PRO, 0) +
                                  Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO, 0) -
                                  Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO, 0)
WHERE ESERCIZIO                = aOldSaldo_NEXT.ESERCIZIO                AND
      ESERCIZIO_RES            = aOldSaldo_NEXT.ESERCIZIO_RES            AND
      CD_CENTRO_RESPONSABILITA = aOldSaldo_NEXT.CD_CENTRO_RESPONSABILITA AND
      CD_LINEA_ATTIVITA        = aOldSaldo_NEXT.CD_LINEA_ATTIVITA        AND
      TI_APPARTENENZA          = aOldSaldo_NEXT.TI_APPARTENENZA          AND
      TI_GESTIONE              = aOldSaldo_NEXT.TI_GESTIONE              AND
      CD_VOCE                  = aOldSaldo_NEXT.CD_VOCE;
*/

If AGGIORNA_STANZ_RES = 'Y' Then
  Declare
    newStanzResImproprio voce_f_saldi_cdr_linea.IM_STANZ_RES_IMPROPRIO%Type;
  Begin
    If aDeltaSaldo.ESERCIZIO = aDeltaSaldo.ESERCIZIO_RES Then
      newStanzResImproprio := Nvl(aOldsaldo_NEXT.IM_STANZ_RES_IMPROPRIO, 0) + Nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A1, 0) +
                              Nvl(aDeltaSaldo.VARIAZIONI_PIU, 0) - Nvl(aDeltaSaldo.VARIAZIONI_MENO, 0) - Nvl(aDeltaSaldo.IM_OBBL_ACC_COMP, 0);
      If newStanzResImproprio < 0 Then
        IBMERR001.RAISE_ERR_GENERICO('01. Impossibile effettuare l''operazione ! '||
' Nell''esercizio '||aDeltaSaldo.ESERCIZIO||' e per il CdR '||aDeltaSaldo.CD_CENTRO_RESPONSABILITA||', '||
' Voce '||aDeltaSaldo.CD_VOCE||' e GAE '||aDeltaSaldo.CD_LINEA_ATTIVITA||' lo Stanziamento Residuo Improprio '||
' diventerebbe negativo ('||To_Char(newStanzResImproprio,'999g999g999g999g990d00')||')');
      End If;
    Elsif aDeltaSaldo.ESERCIZIO > aDeltaSaldo.ESERCIZIO_RES Then
      newStanzResImproprio := Nvl(aOldsaldo_NEXT.IM_STANZ_RES_IMPROPRIO, 0) +
                              (Nvl(aDeltaSaldo.IM_STANZ_RES_IMPROPRIO, 0) + Nvl(aDeltaSaldo.VAR_PIU_STANZ_RES_IMP, 0) - Nvl(aDeltaSaldo.VAR_MENO_STANZ_RES_IMP, 0)) -
                              (Nvl(aDeltaSaldo.IM_OBBL_RES_IMP, 0) + Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_IMP, 0) - Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_IMP, 0));
      If newStanzResImproprio < 0 Then
        IBMERR001.RAISE_ERR_GENERICO('01.1 Impossibile effettuare l''operazione ! '||
' Nell''esercizio '||aDeltaSaldo.ESERCIZIO||' e per il CdR '||aDeltaSaldo.CD_CENTRO_RESPONSABILITA||', '||
' Voce '||aDeltaSaldo.CD_VOCE||' e GAE '||aDeltaSaldo.CD_LINEA_ATTIVITA||' lo Stanziamento Residuo Improprio '||
' diventerebbe negativo ('||To_Char(newStanzResImproprio,'999g999g999g999g990d00')||')');
      End If;
    End If;

    If aDeltaSaldo.TI_GESTIONE = CNRCTB001.GESTIONE_SPESE Then
      Update VOCE_F_SALDI_CDR_LINEA
      Set    IM_STANZ_RES_IMPROPRIO   = newStanzResImproprio
      Where ESERCIZIO                = aOldSaldo_NEXT.ESERCIZIO                AND
            ESERCIZIO_RES            = aOldSaldo_NEXT.ESERCIZIO_RES            AND
            CD_CENTRO_RESPONSABILITA = aOldSaldo_NEXT.CD_CENTRO_RESPONSABILITA AND
            CD_LINEA_ATTIVITA        = aOldSaldo_NEXT.CD_LINEA_ATTIVITA        AND
            TI_APPARTENENZA          = aOldSaldo_NEXT.TI_APPARTENENZA          AND
            TI_GESTIONE              = aOldSaldo_NEXT.TI_GESTIONE              AND
            CD_VOCE                  = aOldSaldo_NEXT.CD_VOCE;
    End if;    -- end if (aDeltaSaldo.TI_GESTIONE = CNRCTB001.GESTIONE_SPESE then
  End;
End If; -- AGGIORNA_STANZ_RES = 'Y'

End If;

Exception

When No_Data_Found Then
     IBMERR001.RAISE_ERR_GENERICO('Il CDS '||CNRUTL001.GETCDSFROMCDR(aDeltaSaldo.CD_CENTRO_RESPONSABILITA)||
' risulta ribaltato ma non ט stato trovato il saldo per l''esercizio '||To_Char(aDeltaSaldo.ESERCIZIO+1)||
' Es. provenienza '||aDeltaSaldo.ESERCIZIO_RES||
' CDR '||aDeltaSaldo.CD_CENTRO_RESPONSABILITA||
' Linea '||aDeltaSaldo.CD_LINEA_ATTIVITA||
' App. '||aDeltaSaldo.TI_APPARTENENZA||
' Gestione '||aDeltaSaldo.TI_GESTIONE||
' Voce '||aDeltaSaldo.CD_VOCE||
' Delta Importi: '||
' Stanz. Ini. '||Nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A1, 0)||
' Var. + '||Nvl(aDeltaSaldo.VARIAZIONI_PIU, 0)||
' Var. - '||Nvl(aDeltaSaldo.VARIAZIONI_MENO, 0)||
' Obb/acc comp. '||Nvl(aDeltaSaldo.IM_OBBL_ACC_COMP, 0)||
' Stanz. Res. Impr. '||Nvl(aDeltaSaldo.IM_STANZ_RES_IMPROPRIO, 0)||
' Var. + Stanz. Res. '||Nvl(aDeltaSaldo.VAR_PIU_STANZ_RES_IMP, 0)||
' Var. - Stanz. Res. '||Nvl(aDeltaSaldo.VAR_MENO_STANZ_RES_IMP, 0)||
' Obbl. Res. Impr. '||Nvl(aDeltaSaldo.IM_OBBL_RES_IMP, 0)||
' Var. + Obbl. Res. Imp. '||Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_IMP, 0)||
' Var. - Obbl. Res. Imp. '||Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_IMP, 0)||
' Obb/Acc Res. Pro. '||Nvl(aDeltaSaldo.IM_OBBL_RES_PRO, 0)||
' Var + Obb/Acc Res. Pro. '||Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO, 0)||
' Var - Obb/Acc Res. Pro. '||Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO, 0));

End;

Exception

WHEN NO_DATA_FOUND THEN
-- Recupero la voce corta da VOCE_F

Declare
  recParametriCNR PARAMETRI_CNR%Rowtype;
  appoVoce voce_f.cd_voce%type;
Begin
  recParametriCNR := CNRUTL001.getRecParametriCnr(aDeltaSaldo.ESERCIZIO);
  If recParametriCNR.fl_nuovo_pdg='N' Then
    Begin
      SELECT CD_ELEMENTO_VOCE INTO appoVoce
      FROM   VOCE_F
      WHERE  ESERCIZIO = aDeltaSaldo.ESERCIZIO
         AND Ti_appartenenza = aDeltaSaldo.TI_APPARTENENZA
         AND Ti_gestione = aDeltaSaldo.TI_GESTIONE
         AND Cd_voce = aDeltaSaldo.CD_VOCE;
      Exception
    When No_Data_Found Then
         IBMERR001.RAISE_ERR_GENERICO('Per l''Esercizio '||aDeltaSaldo.ESERCIZIO||' non esiste la Voce '||aDeltaSaldo.ESERCIZIO||'/'||aDeltaSaldo.TI_APPARTENENZA||'/'||aDeltaSaldo.TI_GESTIONE||'/'||aDeltaSaldo.CD_VOCE);
    End;
  Else
    appoVoce := aDeltaSaldo.CD_VOCE;
  End If;

  Begin
    Select  *
    Into    aelvoce
    From    elemento_voce
    Where   ESERCIZIO        = aDeltaSaldo.ESERCIZIO AND
            TI_APPARTENENZA  = aDeltaSaldo.TI_APPARTENENZA AND
            TI_GESTIONE      = aDeltaSaldo.TI_GESTIONE AND
            CD_ELEMENTO_VOCE = appoVoce;
  Exception
    When No_Data_Found Then
     IBMERR001.RAISE_ERR_GENERICO('L''Elemento Voce '||aDeltaSaldo.ESERCIZIO||'/'||aDeltaSaldo.TI_APPARTENENZA||'/'||aDeltaSaldo.TI_GESTIONE||'/'||appoVoce||
  ' non esiste in anagrafica !');
  End;

  aCd_elemento_voce := appoVoce;

End;

aNewSaldo.ESERCIZIO                      := aDeltaSaldo.ESERCIZIO;
aNewSaldo.ESERCIZIO_RES                  := aDeltaSaldo.ESERCIZIO_RES;
aNewSaldo.CD_CENTRO_RESPONSABILITA       := aDeltaSaldo.CD_CENTRO_RESPONSABILITA;
aNewSaldo.CD_LINEA_ATTIVITA              := aDeltaSaldo.CD_LINEA_ATTIVITA;
aNewSaldo.TI_APPARTENENZA                := aDeltaSaldo.TI_APPARTENENZA;
aNewSaldo.TI_GESTIONE                    := aDeltaSaldo.TI_GESTIONE;
aNewSaldo.CD_VOCE                        := aDeltaSaldo.CD_VOCE;
aNewSaldo.IM_STANZ_INIZIALE_A1           := NVL(aDeltaSaldo.IM_STANZ_INIZIALE_A1     ,0);
aNewSaldo.IM_STANZ_INIZIALE_A2           := NVL(aDeltaSaldo.IM_STANZ_INIZIALE_A2     ,0);
aNewSaldo.IM_STANZ_INIZIALE_A3           := NVL(aDeltaSaldo.IM_STANZ_INIZIALE_A3     ,0);
aNewSaldo.VARIAZIONI_PIU                 := NVL(aDeltaSaldo.VARIAZIONI_PIU           ,0);
aNewSaldo.VARIAZIONI_MENO                := NVL(aDeltaSaldo.VARIAZIONI_MENO          ,0);
aNewSaldo.IM_STANZ_INIZIALE_CASSA        := NVL(aDeltaSaldo.IM_STANZ_INIZIALE_CASSA  ,0);
aNewSaldo.VARIAZIONI_PIU_CASSA           := NVL(aDeltaSaldo.VARIAZIONI_PIU_CASSA     ,0);
aNewSaldo.VARIAZIONI_MENO_CASSA          := NVL(aDeltaSaldo.VARIAZIONI_MENO_CASSA    ,0);
aNewSaldo.IM_OBBL_ACC_COMP               := NVL(aDeltaSaldo.IM_OBBL_ACC_COMP         ,0);
aNewSaldo.IM_STANZ_RES_IMPROPRIO         := NVL(aDeltaSaldo.IM_STANZ_RES_IMPROPRIO   ,0);
aNewSaldo.VAR_PIU_STANZ_RES_IMP          := NVL(aDeltaSaldo.VAR_PIU_STANZ_RES_IMP    ,0);
aNewSaldo.VAR_MENO_STANZ_RES_IMP         := NVL(aDeltaSaldo.VAR_MENO_STANZ_RES_IMP   ,0);
aNewSaldo.IM_OBBL_RES_IMP                := NVL(aDeltaSaldo.IM_OBBL_RES_IMP          ,0);
aNewSaldo.VAR_PIU_OBBL_RES_IMP           := NVL(aDeltaSaldo.VAR_PIU_OBBL_RES_IMP     ,0);
aNewSaldo.VAR_MENO_OBBL_RES_IMP          := NVL(aDeltaSaldo.VAR_MENO_OBBL_RES_IMP    ,0);
aNewSaldo.IM_OBBL_RES_PRO                := NVL(aDeltaSaldo.IM_OBBL_RES_PRO          ,0);
aNewSaldo.VAR_PIU_OBBL_RES_PRO           := NVL(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO     ,0);
aNewSaldo.VAR_MENO_OBBL_RES_PRO          := NVL(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO    ,0);
aNewSaldo.IM_MANDATI_REVERSALI_PRO       := NVL(aDeltaSaldo.IM_MANDATI_REVERSALI_PRO ,0);
aNewSaldo.IM_MANDATI_REVERSALI_IMP       := NVL(aDeltaSaldo.IM_MANDATI_REVERSALI_IMP ,0);
aNewSaldo.IM_PAGAMENTI_INCASSI           := NVL(aDeltaSaldo.IM_PAGAMENTI_INCASSI     ,0);
aNewSaldo.CD_ELEMENTO_VOCE               := aCd_elemento_voce  ;
aNewSaldo.DACR                           := Sysdate;
aNewSaldo.UTCR                           := aDeltaSaldo.UTUV;
aNewSaldo.DUVA                           := Sysdate;
aNewSaldo.UTUV                           := aDeltaSaldo.UTUV;
aNewSaldo.PG_VER_REC                     := 1;

cnrctb054.ins_VOCE_F_SALDI_CDR_LINEA (aNewSaldo);

-- SE IL CDS E' GIA' STATO RIBALTATO DEVO AGGIORNARE I SALDI ANCHE NELL'ANNO NUOVO
-- (SOLO QUELLI CHE HANNO INFLUENZA NEL NUOVO ESERCIZIO)

If CNRCTB048.getcdsribaltato (aDeltaSaldo.ESERCIZIO, CNRUTL001.GETCDSFROMCDR(aDeltaSaldo.CD_CENTRO_RESPONSABILITA)) = 'Y' And
  (aDeltaSaldo.IM_STANZ_INIZIALE_A1 != 0 Or
   aDeltaSaldo.VARIAZIONI_PIU != 0 Or
   aDeltaSaldo.VARIAZIONI_MENO != 0 Or
   aDeltaSaldo.IM_OBBL_ACC_COMP != 0 Or
   aDeltaSaldo.IM_STANZ_RES_IMPROPRIO != 0 Or
   aDeltaSaldo.VAR_PIU_STANZ_RES_IMP != 0 Or
   aDeltaSaldo.VAR_MENO_STANZ_RES_IMP != 0 Or
   aDeltaSaldo.IM_OBBL_RES_IMP != 0 Or
   aDeltaSaldo.VAR_PIU_OBBL_RES_IMP != 0 Or
   aDeltaSaldo.VAR_MENO_OBBL_RES_IMP != 0 Or
   aDeltaSaldo.IM_OBBL_RES_PRO != 0 Or
   aDeltaSaldo.VAR_PIU_OBBL_RES_PRO != 0 Or
   aDeltaSaldo.VAR_MENO_OBBL_RES_PRO != 0)
   AND (aDeltaSaldo.TI_GESTIONE =CNRCTB001.GESTIONE_SPESE) Then

aNewSaldo := Null;

aNewSaldo.ESERCIZIO                := aDeltaSaldo.ESERCIZIO + 1;
aNewSaldo.ESERCIZIO_RES            := aDeltaSaldo.ESERCIZIO_RES;
aNewSaldo.CD_CENTRO_RESPONSABILITA := aDeltaSaldo.CD_CENTRO_RESPONSABILITA;
aNewSaldo.CD_LINEA_ATTIVITA        := aDeltaSaldo.CD_LINEA_ATTIVITA;
aNewSaldo.TI_APPARTENENZA          := aDeltaSaldo.TI_APPARTENENZA;
aNewSaldo.TI_GESTIONE              := aDeltaSaldo.TI_GESTIONE;
aNewSaldo.CD_VOCE                  := aDeltaSaldo.CD_VOCE;
aNewSaldo.IM_STANZ_RES_IMPROPRIO   := nvl(aDeltaSaldo.IM_STANZ_RES_IMPROPRIO, 0);
aNewSaldo.IM_STANZ_INIZIALE_A1     := Nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A1, 0);
aNewSaldo.IM_STANZ_INIZIALE_A2     := nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A2    , 0);
aNewSaldo.IM_STANZ_INIZIALE_A3     := nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A3    , 0);
aNewSaldo.VARIAZIONI_PIU           := nvl(aDeltaSaldo.VARIAZIONI_PIU          , 0);
aNewSaldo.VARIAZIONI_MENO          := nvl(aDeltaSaldo.VARIAZIONI_MENO         , 0);
aNewSaldo.IM_STANZ_INIZIALE_CASSA  := nvl(aDeltaSaldo.IM_STANZ_INIZIALE_CASSA , 0);
aNewSaldo.VARIAZIONI_PIU_CASSA     := nvl(aDeltaSaldo.VARIAZIONI_PIU_CASSA    , 0);
aNewSaldo.VARIAZIONI_MENO_CASSA    := nvl(aDeltaSaldo.VARIAZIONI_MENO_CASSA   , 0);
aNewSaldo.IM_OBBL_ACC_COMP         := nvl(aDeltaSaldo.IM_OBBL_ACC_COMP        , 0);
aNewSaldo.VAR_PIU_STANZ_RES_IMP    := nvl(aDeltaSaldo.VAR_PIU_STANZ_RES_IMP   , 0);
aNewSaldo.VAR_MENO_STANZ_RES_IMP   := nvl(aDeltaSaldo.VAR_MENO_STANZ_RES_IMP  , 0);
aNewSaldo.VAR_PIU_OBBL_RES_IMP     := nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_IMP    , 0);
aNewSaldo.VAR_MENO_OBBL_RES_IMP    := nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_IMP   , 0);
aNewSaldo.VAR_PIU_OBBL_RES_PRO     := nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO    , 0);
aNewSaldo.VAR_MENO_OBBL_RES_PRO    := nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO   , 0);
aNewSaldo.IM_MANDATI_REVERSALI_PRO := nvl(aDeltaSaldo.IM_MANDATI_REVERSALI_PRO, 0);
aNewSaldo.IM_MANDATI_REVERSALI_IMP := nvl(aDeltaSaldo.IM_MANDATI_REVERSALI_IMP, 0);
aNewSaldo.IM_PAGAMENTI_INCASSI     := nvl(aDeltaSaldo.IM_PAGAMENTI_INCASSI    , 0);

If aDeltaSaldo.ESERCIZIO = aDeltaSaldo.ESERCIZIO_RES Then

  If FL_2006 = 'Y' And
   aDeltaSaldo.TI_GESTIONE = 'S' And
 ((NVL(aDeltasaldo.IM_OBBL_ACC_COMP, 0) != 0) Or (NVL(aDeltasaldo.VARIAZIONI_MENO, 0)) != 0) And
   Not CNRCTB037.ISLINEASFONDABILE(alinea) And Not CNRCTB037.ISELEMENTOVOCESFONDABILE(aelvoce) And
    Nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A1, 0) + Nvl(aDeltaSaldo.VARIAZIONI_PIU, 0) -
     Nvl(aDeltaSaldo.VARIAZIONI_MENO, 0) - Nvl(aDeltaSaldo.IM_OBBL_ACC_COMP, 0) < 0 Then
        IBMERR001.RAISE_ERR_GENERICO('02. Impossibile effettuare l''operazione ! '||
  ' Nell''esercizio '||aNewSaldo.ESERCIZIO||' e per il CdR '||aNewSaldo.CD_CENTRO_RESPONSABILITA||', '||
  ' Voce '||aNewSaldo.CD_VOCE||' e GAE '||aNewSaldo.CD_LINEA_ATTIVITA||' lo stanziamento Residuo Improprio '||
  ' diventerebbe negativo ('||Ltrim(
                                To_Char(Nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A1, 0) +
                                        Nvl(aDeltaSaldo.VARIAZIONI_PIU, 0) -
                                        Nvl(aDeltaSaldo.VARIAZIONI_MENO, 0) -
                                        Nvl(aDeltaSaldo.IM_OBBL_ACC_COMP, 0)),
                                '999g999g999g999g999g990d99')||')');
  End If;
      aNewSaldo.IM_STANZ_RES_IMPROPRIO := Nvl(aDeltaSaldo.IM_STANZ_INIZIALE_A1, 0) +
                                      Nvl(aDeltaSaldo.VARIAZIONI_PIU, 0) -
                                      Nvl(aDeltaSaldo.VARIAZIONI_MENO, 0) -
                                      Nvl(aDeltaSaldo.IM_OBBL_ACC_COMP, 0);
Elsif aDeltaSaldo.ESERCIZIO > aDeltaSaldo.ESERCIZIO_RES Then

  If (NVL(aDeltaSaldo.IM_STANZ_RES_IMPROPRIO, 0) +
                                       NVL(aDeltaSaldo.VAR_PIU_STANZ_RES_IMP , 0) -
                                       NVL(aDeltaSaldo.VAR_MENO_STANZ_RES_IMP, 0)) -
                                      (NVL(aDeltaSaldo.IM_OBBL_RES_IMP       , 0) +
                                       NVL(aDeltaSaldo.VAR_PIU_OBBL_RES_IMP  , 0) -
                                       NVL(aDeltaSaldo.VAR_MENO_OBBL_RES_IMP , 0)) < 0 Then
        IBMERR001.RAISE_ERR_GENERICO('03. Impossibile effettuare l''operazione ! '||
  ' Nell''esercizio '||aNewSaldo.ESERCIZIO||' e per il CdR '||aNewSaldo.CD_CENTRO_RESPONSABILITA||', '||
  ' Voce '||aNewSaldo.CD_VOCE||' e GAE '||aNewSaldo.CD_LINEA_ATTIVITA||' lo stanziamento Residuo Improprio '||
  ' diventerebbe negativo ('||(NVL(aDeltaSaldo.IM_STANZ_RES_IMPROPRIO, 0) +
                                       NVL(aDeltaSaldo.VAR_PIU_STANZ_RES_IMP , 0) -
                                       NVL(aDeltaSaldo.VAR_MENO_STANZ_RES_IMP, 0)) -
                                      (NVL(aDeltaSaldo.IM_OBBL_RES_IMP       , 0) +
                                       NVL(aDeltaSaldo.VAR_PIU_OBBL_RES_IMP  , 0) -
                                       NVL(aDeltaSaldo.VAR_MENO_OBBL_RES_IMP , 0))||')');
  End If;

  aNewSaldo.IM_STANZ_RES_IMPROPRIO := (NVL(aDeltaSaldo.IM_STANZ_RES_IMPROPRIO, 0) +
                                       NVL(aDeltaSaldo.VAR_PIU_STANZ_RES_IMP , 0) -
                                       NVL(aDeltaSaldo.VAR_MENO_STANZ_RES_IMP, 0)) -
                                      (NVL(aDeltaSaldo.IM_OBBL_RES_IMP       , 0) +
                                       NVL(aDeltaSaldo.VAR_PIU_OBBL_RES_IMP  , 0) -
                                       NVL(aDeltaSaldo.VAR_MENO_OBBL_RES_IMP , 0));
End If;

  If Nvl(aDeltaSaldo.IM_OBBL_RES_PRO, 0) + Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO, 0) -
     Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO, 0) < 0 Then
        IBMERR001.RAISE_ERR_GENERICO('05. Impossibile effettuare l''operazione ! '||
' Nell''esercizio '||aNewSaldo.ESERCIZIO||' e per il CdR '||aNewSaldo.CD_CENTRO_RESPONSABILITA||', '||
' Voce '||aNewSaldo.CD_VOCE||' e GAE '||aNewSaldo.CD_LINEA_ATTIVITA||' il totale Residui Propri '||
' diventerebbe negativo ('||Nvl(aDeltaSaldo.IM_OBBL_RES_PRO, 0) + Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO, 0) -
Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO, 0)||')');
  End If;

aNewSaldo.IM_OBBL_RES_PRO          := Nvl(aDeltaSaldo.IM_OBBL_RES_PRO, 0) +
                                      Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO, 0) -
                                      Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO, 0);

  If Nvl(aDeltaSaldo.IM_OBBL_RES_PRO, 0) + Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO, 0) -
     Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO, 0) < 0 Then
        IBMERR001.RAISE_ERR_GENERICO('06. Impossibile effettuare l''operazione ! '||
' Nell''esercizio '||aNewSaldo.ESERCIZIO||' e per il CdR '||aNewSaldo.CD_CENTRO_RESPONSABILITA||', '||
' Voce '||aNewSaldo.CD_VOCE||' e GAE '||aNewSaldo.CD_LINEA_ATTIVITA||' il totale Residui Impropri '||
' diventerebbe negativo ('||Nvl(aDeltaSaldo.IM_OBBL_RES_PRO, 0) + Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_PRO, 0) -
Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_PRO, 0)||')');
  End If;

aNewSaldo.IM_OBBL_RES_IMP          := Nvl(aDeltaSaldo.IM_OBBL_RES_IMP, 0) +
                                      Nvl(aDeltaSaldo.VAR_PIU_OBBL_RES_IMP, 0) -
                                      Nvl(aDeltaSaldo.VAR_MENO_OBBL_RES_IMP, 0);

aNewSaldo.CD_ELEMENTO_VOCE         := aCd_elemento_voce  ;
aNewSaldo.DACR                     := Sysdate;
aNewSaldo.UTCR                     := aDeltaSaldo.UTUV;
aNewSaldo.DUVA                     := Sysdate;
aNewSaldo.UTUV                     := aDeltaSaldo.UTUV;
aNewSaldo.PG_VER_REC               := 1;

cnrctb054.ins_VOCE_F_SALDI_CDR_LINEA (aNewSaldo);

End If;

END;

Procedure ins_BILANCIO_PREVENTIVO (aDest BILANCIO_PREVENTIVO%rowtype) is
  begin
   insert into BILANCIO_PREVENTIVO (
     ESERCIZIO
    ,CD_CDS
    ,TI_APPARTENENZA
    ,STATO
    ,DACR
    ,UTCR
    ,DUVA
    ,UTUV
    ,PG_VER_REC
   ) values (
     aDest.ESERCIZIO
    ,aDest.CD_CDS
    ,aDest.TI_APPARTENENZA
    ,aDest.STATO
    ,aDest.DACR
    ,aDest.UTCR
    ,aDest.DUVA
    ,aDest.UTUV
    ,aDest.PG_VER_REC
    );
 end;

 procedure ins_VAR_BILANCIO (aDest VAR_BILANCIO%rowtype) is
  begin
   insert into VAR_BILANCIO (
     CD_CDS
    ,ESERCIZIO
    ,ESERCIZIO_IMPORTI
    ,TI_APPARTENENZA
    ,PG_VARIAZIONE
    ,DS_VARIAZIONE
    ,DS_DELIBERA
    ,TI_VARIAZIONE
    ,CD_CAUSALE_VAR_BILANCIO
    ,STATO
    ,DUVA
    ,UTUV
    ,DACR
    ,UTCR
    ,PG_VER_REC
    ,ESERCIZIO_PDG_VARIAZIONE
    ,PG_VARIAZIONE_PDG
    ,ESERCIZIO_VAR_STANZ_RES
    ,PG_VAR_STANZ_RES
   ) values (
     aDest.CD_CDS
    ,aDest.ESERCIZIO
        ,aDest.ESERCIZIO_IMPORTI
    ,aDest.TI_APPARTENENZA
    ,aDest.PG_VARIAZIONE
    ,aDest.DS_VARIAZIONE
    ,aDest.DS_DELIBERA
    ,aDest.TI_VARIAZIONE
    ,aDest.CD_CAUSALE_VAR_BILANCIO
    ,aDest.STATO
    ,aDest.DUVA
    ,aDest.UTUV
    ,aDest.DACR
    ,aDest.UTCR
    ,aDest.PG_VER_REC
    ,aDest.ESERCIZIO_PDG_VARIAZIONE
    ,aDest.PG_VARIAZIONE_PDG
    ,aDest.ESERCIZIO_VAR_STANZ_RES
    ,aDest.PG_VAR_STANZ_RES           );

 end;
 procedure ins_VAR_BILANCIO_DET (aDest VAR_BILANCIO_DET%rowtype) is
  begin
   insert into VAR_BILANCIO_DET (
     CD_CDS
    ,ESERCIZIO
    ,TI_APPARTENENZA
    ,PG_VARIAZIONE
    ,TI_GESTIONE
    ,CD_VOCE
    ,IM_VARIAZIONE
    ,DUVA
    ,UTUV
    ,DACR
    ,UTCR
    ,PG_VER_REC
   ) values (
     aDest.CD_CDS
    ,aDest.ESERCIZIO
    ,aDest.TI_APPARTENENZA
    ,aDest.PG_VARIAZIONE
    ,aDest.TI_GESTIONE
    ,aDest.CD_VOCE
    ,aDest.IM_VARIAZIONE
    ,aDest.DUVA
    ,aDest.UTUV
    ,aDest.DACR
    ,aDest.UTCR
    ,aDest.PG_VER_REC
    );
 end;
end;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy