expsigladb.Package.CNRCTB205_BODY.sql Maven / Gradle / Ivy
--------------------------------------------------------
-- DDL for Package Body CNRCTB205
--------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY "CNRCTB205" is
Function isGenericoCollInv(aDoc V_DOC_AMM_COGE_RIGA%ROWTYPE)Return Boolean
Is
conta NUMBER:=0;
Begin
Select Count(0) Into conta FROM ASS_INV_BENE_FATTURA WHERE
cd_cds_doc_gen = aDoc.cd_cds
AND cd_uo_doc_gen = aDoc.cd_unita_organizzativa
AND esercizio_doc_gen = aDoc.ESERCIZIO
AND pg_documento_generico = aDoc.pg_numero_documento
And CD_TIPO_DOCUMENTO_AMM = aDoc.cd_tipo_documento
AND progressivo_riga_doc_gen = aDoc.pg_riga;
If conta!=0 Then
Return True;
else
return False;
End If;
Exception When Others Then
Return False;
End;
-- =======================================
--
-- CONTABILIZZAZIONE PARTE PRINCIPALE
--
-- =======================================
procedure buildMovPEPAnticipo(aListaMovimenti IN OUT CNRCTB200.movimentiList, aDocTst V_DOC_AMM_COGE_TSTA%rowtype, aDoc V_DOC_AMM_COGE_RIGA%rowtype, aUser varchar2, aTSnow date) is
aAnticipo anticipo%rowtype;
aImpAnticipo number(15,2);
aVoce_ep voce_ep%rowtype;
begin
Dbms_Output.put_line ('anticipo buildMovPEPAnticipo ');
aAnticipo := CNRCTB204.getAnticipo(aDocTst);
-- No anticipo no movimento
if aAnticipo.pg_anticipo is null then
return;
end if;
aImpAnticipo := aAnticipo.im_anticipo;
-- Se l'anticipo è 0 non genero movimenti legati all'anticipo
if aImpAnticipo > 0 and aDoc.CD_TIPO_DOCUMENTO = CNRCTB100.TI_COMPENSO and CNRCTB204.isCompConAntMaggNetto(aDocTst)='Y' then
null;
elsif aImpAnticipo > 0 then
-- L'anticipo è sempre in avere
Dbms_Output.put_line ('buildMovPrinc in buildMovPEPAnticipo CNRCTB002.GETVOCEEPANTICIPOMISSIONE');
aVoce_ep:=CNRCTB002.GETVOCEEPANTICIPOMISSIONE(aDocTst.esercizio);
if aVoce_ep.cd_voce_ep is null then
aVoce_ep:=CNRCTB204.trovaContoEp(aDocTst,aDoc);
Dbms_Output.PUT_LINE ('aVoce_ep.cd_voce_ep '||avoce_ep.cd_voce_ep );
end if;
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,aVoce_ep,aImpAnticipo,CNRCTB200.IS_AVERE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc, aListaMovimenti,aUser,aTSnow);
-- 23.06.2006 mette sull'anticipo il flag movimento terzo sennò in caso di ratei va male la chiusura del rateo
aListaMovimenti(aListaMovimenti.count).FL_MOV_TERZO := 'Y';
end if;
end;
Procedure buildMovPEPIVAServIstNR(aListaMovimenti IN OUT CNRCTB200.movimentiList, aDocTst V_DOC_AMM_COGE_TSTA%rowtype, aDoc V_DOC_AMM_COGE_RIGA%rowtype, aUser varchar2, aTSnow date) is
aEffCori ass_tipo_cori_voce_ep%rowtype;
aContoEp voce_ep%rowtype;
aSezione CHAR(1);
Fl_SNR CHAR(1);
Begin
Dbms_Output.PUT_LINE ('IN buildMovPEPIVAServIstNR');
If aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_PASSIVA and
aDocTst.TI_BENE_SERVIZIO = CNRCTB100.TI_FT_ACQ_SERVIZI And
aDocTst.TI_ISTITUZ_COMMERC = CNRCTB100.TI_ISTITUZIONALE Then
select fl_servizi_non_residenti into Fl_SNR
from tipo_sezionale ,fattura_passiva
where
tipo_sezionale.cd_tipo_sezionale =fattura_passiva.cd_tipo_sezionale and
fattura_passiva.esercizio = aDocTst.esercizio and
fattura_passiva.cd_cds = aDocTst.cd_cds and
fattura_passiva.cd_unita_organizzativa = aDocTst.cd_unita_organizzativa and
fattura_passiva.pg_fattura_passiva = aDocTst.PG_NUMERO_DOCUMENTO;
-- Se la fattura è istituzionale NON RESIDENTI, apro il debito verso l'erario
If Fl_SNR = 'Y' then
aEffCori := CNRCTB204.getAssCoriEp(aDocTst.esercizio, 'IVA', CNRCTB001.GESTIONE_ENTRATE, CNRCTB100.IS_DARE);
Begin
aContoEp:=CNRCTB002.getVoceEp(aEffCori.esercizio, aEffCori.cd_voce_ep_contr);
Exception when OTHERS then
IBMERR001.RAISE_ERR_GENERICO('Conto economico di contr.: '||aEffCori.cd_voce_ep_contr||' associato a CORI IVA non trovato');
End;
-- modifica del 14/06/2006 per le note l'iva va in Dare, prima metteva l'iva sempre in Avere e per le note sfetecchiava
-- tutta la scrittura per il fatto che l'ultimo importo lo mette per quadrare la scrittura
If aDocTst.ti_fattura = 'C' Then
aSezione := CNRCTB100.IS_DARE;
Else
aSezione := CNRCTB100.IS_AVERE;
End If;
Dbms_Output.PUT_LINE ('CARICA RIGA CON '||aContoEp.CD_VOCE_EP);
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine, aDocTst.esercizio, aDocTst.cd_uo_origine, aContoEp, abs(aDoc.im_iva),
aSezione,
aDoc.dt_da_competenza_coge, aDoc.dt_a_competenza_coge, aDocTst.cd_terzo,
aListaMovimenti, aUser, aTSnow);
End if;
End if;
End;
Procedure buildMovPEPIVABeniIstIUSMSI(aListaMovimenti IN OUT CNRCTB200.movimentiList, aDocTst V_DOC_AMM_COGE_TSTA%rowtype, aDoc V_DOC_AMM_COGE_RIGA%rowtype, aUser varchar2, aTSnow date) is
aEffCori ass_tipo_cori_voce_ep%rowtype;
aContoEp voce_ep%rowtype;
aSezione CHAR(1);
fl_merce_intra_ue CHAR(1);
Begin
If aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_PASSIVA and
aDocTst.TI_BENE_SERVIZIO = CNRCTB100.TI_FT_ACQ_BENI And
aDocTst.TI_ISTITUZ_COMMERC = CNRCTB100.TI_ISTITUZIONALE Then
select fl_merce_intra_ue into fl_merce_intra_ue
from fattura_passiva
where
fattura_passiva.esercizio = aDocTst.esercizio and
fattura_passiva.cd_cds = aDocTst.cd_cds and
fattura_passiva.cd_unita_organizzativa = aDocTst.cd_unita_organizzativa and
fattura_passiva.pg_fattura_passiva = aDocTst.PG_NUMERO_DOCUMENTO;
Dbms_Output.PUT_LINE ('IN buildMovPEPIVABeniIstIUSMSI');
-- Se la fattura è istituzionale intraue o san marino per beni, apro il debito verso l'erario
If (aDocTst.FL_SAN_MARINO_SENZA_IVA = 'Y' Or aDocTst.FL_INTRA_UE = 'Y' or fl_merce_intra_ue='Y') then
aEffCori := CNRCTB204.getAssCoriEp(aDocTst.esercizio, 'IVA', CNRCTB001.GESTIONE_ENTRATE, CNRCTB100.IS_DARE);
Begin
aContoEp:=CNRCTB002.getVoceEp(aEffCori.esercizio, aEffCori.cd_voce_ep_contr);
Exception when OTHERS then
IBMERR001.RAISE_ERR_GENERICO('Conto economico di contr.: '||aEffCori.cd_voce_ep_contr||' associato a CORI IVA non trovato');
End;
-- modifica del 14/06/2006 per le note l'iva va in Dare, prima metteva l'iva sempre in Avere e per le note sfetecchiava
-- tutta la scrittura per il fatto che l'ultimo importo lo mette per quadrare la scrittura
If aDocTst.ti_fattura = 'C' Then
aSezione := CNRCTB100.IS_DARE;
Else
aSezione := CNRCTB100.IS_AVERE;
End If;
Dbms_Output.PUT_LINE ('CARICA RIGA CON '||aContoEp.CD_VOCE_EP);
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine, aDocTst.esercizio, aDocTst.cd_uo_origine, aContoEp, abs(aDoc.im_iva),
aSezione,
aDoc.dt_da_competenza_coge, aDoc.dt_a_competenza_coge, aDocTst.cd_terzo,
aListaMovimenti, aUser, aTSnow);
End if;
End if;
End;
PROCEDURE buildMovPEPBeniDurevoli(aListaMovimenti IN OUT CNRCTB200.movimentiList, aDocTst V_DOC_AMM_COGE_TSTA%ROWTYPE, aDoc V_DOC_AMM_COGE_RIGA%ROWTYPE, aUser VARCHAR2, aTSnow DATE) IS
aInventBene INVENTARIO_BENI%ROWTYPE;
isBeneNonTrovato BOOLEAN;
aCatGruppo CATEGORIA_GRUPPO_INVENT%ROWTYPE;
aCatGruppoVoceEp CATEGORIA_GRUPPO_VOCE_EP%ROWTYPE;
aVoceEPCG VOCE_EP%ROWTYPE;
aVoceEPCGContr VOCE_EP%ROWTYPE;
aVoceEPPlusvalenza VOCE_EP%ROWTYPE;
aVoceEPMinusvalenza VOCE_EP%ROWTYPE;
aResiduo NUMBER(15,2):=0;
quote_storno NUMBER(15,2):=0;
aDelta NUMBER(15,2):=0;
TOT_DOC NUMBER(15,2):=0;
Conta NUMBER:=0;
scarico_tot Boolean;
aBSC BUONO_CARICO_SCARICO_DETT%ROWTYPE;
begin
recParametriCNR := CNRUTL001.getRecParametriCnr(aDoc.esercizio);
If (aDocTst.cd_tipo_documento= CNRCTB100.TI_FATTURA_ATTIVA)Then
isBeneNonTrovato:=TRUE;
FOR aAssInvBF IN (SELECT * FROM ASS_INV_BENE_FATTURA WHERE
cd_cds_fatt_att = aDoc.cd_cds
AND cd_uo_fatt_att = aDoc.cd_unita_organizzativa
AND esercizio_fatt_att = aDoc.ESERCIZIO
AND pg_fattura_attiva = aDoc.pg_numero_documento
AND progressivo_riga_fatt_att = aDoc.pg_riga FOR UPDATE NOWAIT) LOOP
isBeneNonTrovato:=FALSE;
Begin
SELECT * INTO aInventBene FROM INVENTARIO_BENI WHERE
pg_inventario=aAssInvBF.pg_inventario
AND nr_inventario=aAssInvBF.nr_inventario
AND progressivo=aAssInvBF.progressivo FOR UPDATE NOWAIT;
EXCEPTION WHEN NO_DATA_FOUND THEN
IBMERR001.RAISE_ERR_GENERICO('Bene non trovato in inventario:'||aAssInvBF.pg_inventario||'-'||aAssInvBF.nr_inventario||'-'||aAssInvBF.progressivo);
End;
-- 22/02/2008 verifico che non ci siano + righe di documento generico collegate allo stesso dettaglio di buono di scarico
-- altrimenti i dati dell'inventario vengono presi + volte
Select Count(*) Into conta
From ASS_INV_BENE_FATTURA,ASS_INV_BENE_FATTURA ass
Where
ASS_INV_BENE_FATTURA.cd_cds_fatt_att = aDoc.cd_cds
And ASS_INV_BENE_FATTURA.cd_uo_fatt_att = aDoc.cd_unita_organizzativa
And ASS_INV_BENE_FATTURA.esercizio_fatt_att = aDoc.ESERCIZIO
And ASS_INV_BENE_FATTURA.pg_fattura_attiva = aDoc.pg_numero_documento
And ASS_INV_BENE_FATTURA.progressivo_riga_fatt_att = aDoc.pg_riga
And ass.pg_inventario = ASS_INV_BENE_FATTURA.pg_inventario
And ass.NR_inventario = ASS_INV_BENE_FATTURA.NR_inventario
And ass.pROGRESSIVO = ASS_INV_BENE_FATTURA.pROGRESSIVO
And ass.ESERCIZIO = ASS_INV_BENE_FATTURA.ESERCIZIO
And ass.TI_DOCUMENTO = ASS_INV_BENE_FATTURA.TI_DOCUMENTO
And ass.PG_BUONO_C_S = ASS_INV_BENE_FATTURA.PG_BUONO_C_S
And ass.pg_inventario = aAssInvBF.pg_inventario
And ass.NR_inventario = aAssInvBF.NR_inventario
And ass.pROGRESSIVO = aAssInvBF.pROGRESSIVO
And ass.ESERCIZIO = aAssInvBF.ESERCIZIO
And ass.TI_DOCUMENTO = aAssInvBF.TI_DOCUMENTO
And ass.PG_BUONO_C_S = aAssInvBF.PG_BUONO_C_S
And ass.cd_cds_fatt_att = aDoc.cd_cds
And ass.cd_uo_fatt_att = aDoc.cd_unita_organizzativa
And ass.esercizio_fatt_att = aDoc.ESERCIZIO
And ass.pg_fattura_attiva = aDoc.pg_numero_documento
And ass.pg_riga <= ASS_INV_BENE_FATTURA.pg_riga;
If(Conta =1 ) Then
BEGIN
SELECT * INTO aBSC FROM BUONO_CARICO_SCARICO_DETT bcsd WHERE
PG_INVENTARIO=aAssInvBF.pg_inventario
AND TI_DOCUMENTO='S'
AND ESERCIZIO=aDoc.ESERCIZIO
AND NR_INVENTARIO=aAssInvBF.nr_inventario
AND PROGRESSIVO=aAssInvBF.progressivo
AND PG_BUONO_C_S = aAssInvBF.pg_buono_c_s
FOR UPDATE NOWAIT;
EXCEPTION WHEN NO_DATA_FOUND THEN
IBMERR001.RAISE_ERR_GENERICO('Buono di scarico non trovato');
END;
BEGIN
SELECT * INTO aCatGruppo FROM CATEGORIA_GRUPPO_INVENT WHERE
cd_categoria_gruppo = aInventBene.cd_categoria_gruppo;
EXCEPTION WHEN NO_DATA_FOUND THEN
IBMERR001.RAISE_ERR_GENERICO('Gruppo inventariale non trovato:'||aInventBene.cd_categoria_gruppo);
END;
BEGIN
if recParametriCNR.fl_nuovo_pdg='N' then
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_padre
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aDocTst.ESERCIZIO;
else
begin
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_gruppo
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aDocTst.ESERCIZIO
and cd_elemento_voce = aDoc.CD_ELEMENTO_VOCE_EV;
EXCEPTION WHEN NO_DATA_FOUND THEN
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_gruppo
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aDocTst.ESERCIZIO
and fl_default='Y';
end;
end if;
EXCEPTION WHEN NO_DATA_FOUND THEN
IBMERR001.RAISE_ERR_GENERICO('Nessun conto economico associato a categoria:'||aCatGruppo.cd_categoria_gruppo);
END;
-- Conto automezzi
aVoceEPCG:=CNRCTB002.getVoceEp(aCatGruppoVoceEp.ESERCIZIO,aCatGruppoVoceEp.cd_voce_ep);
if(aCatGruppoVoceEp.cd_voce_ep_contr is not null) then
-- Conto per l'ammortamento
aVoceEPCGContr:=CNRCTB002.getVoceEp(aCatGruppoVoceEp.ESERCIZIO,aCatGruppoVoceEp.cd_voce_ep_contr);
end if;
aResiduo:=aResiduo+aInventBene.valore_iniziale + aInventBene.variazione_piu - (aInventBene.variazione_meno-(aBSC.quantita*aBSC.valore_unitario)) - NVL(aInventBene.valore_ammortizzato,0);
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.ESERCIZIO,aDocTst.cd_uo_origine,aVoceEPCG,aInventBene.valore_iniziale + aInventBene.variazione_piu - (aInventBene.variazione_meno-(aBSC.quantita*aBSC.valore_unitario)),CNRCTB200.IS_AVERE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,aListaMovimenti,aUser,aTSnow);
IF NVL(aInventBene.valore_ammortizzato,0) > 0 THEN
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.ESERCIZIO,aDocTst.cd_uo_origine,aVoceEPCGContr,NVL(aInventBene.valore_ammortizzato,0),CNRCTB200.IS_DARE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,aListaMovimenti,aUser,aTSnow);
END IF;
IF aInventBene.ti_commerciale_istituzionale = CNRCTB100.TI_ISTITUZIONALE THEN
TOT_DOC:=aDoc.im_imponibile + aDoc.im_iva;
Else
TOT_DOC:=aDoc.im_imponibile;
end if;
-- r.p. 22/02/2008 caso + righe collegate stesso dettaglio buono devo considerare solo l'importo della riga di doc.
Else
IF aInventBene.ti_commerciale_istituzionale = CNRCTB100.TI_ISTITUZIONALE THEN
TOT_DOC:=aDoc.im_imponibile + aDoc.im_iva;
ELSE
TOT_DOC:=aDoc.im_imponibile;
end if;
End If;
aVoceEPMinusvalenza:=CNRCTB002.getVoceEpMinusval(aDocTst.ESERCIZIO,aCatGruppo.cd_categoria_gruppo,null);
aVoceEPPlusvalenza:=CNRCTB002.getVoceEpPlusval(aDocTst.ESERCIZIO,aCatGruppo.cd_categoria_gruppo,null);
END LOOP;
-- r.p. 14/02/2007 spostato all'esterno del loop in quanto sono dati relativi al documento
-- quindi devono essere considerati una sola volta nel loop viene calcolato il residuo totale
--aVoceEPMinusvalenza:=CNRCTB002.getVoceEpMinusval(aDocTst.ESERCIZIO,aCatGruppo.cd_categoria_gruppo,aDoc.CD_ELEMENTO_VOCE_EV);
--aVoceEPPlusvalenza:=CNRCTB002.getVoceEpPlusval(aDocTst.ESERCIZIO,aCatGruppo.cd_categoria_gruppo,aDoc.CD_ELEMENTO_VOCE_EV);
aDelta:=TOT_DOC - aResiduo;
IF aDelta > 0 THEN
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.ESERCIZIO,aDocTst.cd_uo_origine,aVoceEPPlusvalenza,aDelta,CNRCTB200.IS_AVERE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,aListaMovimenti,aUser,aTSnow);
END IF;
IF aDelta < 0 THEN
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.ESERCIZIO,aDocTst.cd_uo_origine,aVoceEPMinusvalenza,ABS(aDelta),CNRCTB200.IS_DARE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,aListaMovimenti,aUser,aTSnow);
END IF;
IF isBeneNonTrovato THEN
IBMERR001.RAISE_ERR_GENERICO('Associazione con bene ad inventario non trovata');
END IF;
Else
-- generico attivo
FOR aAssInvBF IN (SELECT * FROM ASS_INV_BENE_FATTURA WHERE
cd_cds_doc_gen = aDoc.cd_cds
AND cd_uo_doc_gen = aDoc.cd_unita_organizzativa
AND esercizio_doc_gen = aDoc.ESERCIZIO
AND pg_documento_generico = aDoc.pg_numero_documento
And CD_TIPO_DOCUMENTO_AMM = aDoc.cd_tipo_documento
AND progressivo_riga_doc_gen = aDoc.pg_riga
FOR UPDATE NOWAIT) Loop
Begin
SELECT * INTO aInventBene
FROM INVENTARIO_BENI
WHERE
pg_inventario=aAssInvBF.pg_inventario
AND nr_inventario=aAssInvBF.nr_inventario
AND progressivo=aAssInvBF.progressivo FOR UPDATE NOWAIT;
EXCEPTION WHEN NO_DATA_FOUND Then
IBMERR001.RAISE_ERR_GENERICO('Bene non trovato in inventario:'||aAssInvBF.pg_inventario||'-'||aAssInvBF.nr_inventario||'-'||aAssInvBF.progressivo);
End;
-- 22/02/2008 verifico che non ci siano + righe di documento generico collegate allo stesso dettaglio di buono di scarico
-- altrimenti i dati dell'inventario vengono presi + volte
Select Count(*) Into conta
From ASS_INV_BENE_FATTURA,ASS_INV_BENE_FATTURA ass
Where
ASS_INV_BENE_FATTURA.cd_cds_doc_gen = aDoc.cd_cds
And ASS_INV_BENE_FATTURA.cd_uo_doc_gen = aDoc.cd_unita_organizzativa
And ASS_INV_BENE_FATTURA.esercizio_doc_gen = aDoc.ESERCIZIO
And ASS_INV_BENE_FATTURA.pg_documento_generico = aDoc.pg_numero_documento
And ASS_INV_BENE_FATTURA.CD_TIPO_DOCUMENTO_AMM = aDoc.cd_tipo_documento
And ASS_INV_BENE_FATTURA.progressivo_riga_doc_gen = aDoc.pg_riga
And ass.pg_inventario = ASS_INV_BENE_FATTURA.pg_inventario
And ass.NR_inventario = ASS_INV_BENE_FATTURA.NR_inventario
And ass.pROGRESSIVO = ASS_INV_BENE_FATTURA.pROGRESSIVO
And ass.ESERCIZIO = ASS_INV_BENE_FATTURA.ESERCIZIO
And ass.TI_DOCUMENTO = ASS_INV_BENE_FATTURA.TI_DOCUMENTO
And ass.PG_BUONO_C_S = ASS_INV_BENE_FATTURA.PG_BUONO_C_S
And ass.pg_inventario = aAssInvBF.pg_inventario
And ass.NR_inventario = aAssInvBF.NR_inventario
And ass.pROGRESSIVO = aAssInvBF.pROGRESSIVO
And ass.ESERCIZIO = aAssInvBF.ESERCIZIO
And ass.TI_DOCUMENTO = aAssInvBF.TI_DOCUMENTO
And ass.PG_BUONO_C_S = aAssInvBF.PG_BUONO_C_S
And ass.cd_cds_doc_gen = aDoc.cd_cds
And ass.cd_uo_doc_gen = aDoc.cd_unita_organizzativa
And ass.esercizio_doc_gen = aDoc.ESERCIZIO
And ass.pg_documento_generico = aDoc.pg_numero_documento
And ass.CD_TIPO_DOCUMENTO_AMM = aDoc.cd_tipo_documento
And ass.pg_riga <= ASS_INV_BENE_FATTURA.pg_riga;
If(Conta =1 ) Then
BEGIN
Select * INTO aBSC
FROM BUONO_CARICO_SCARICO_DETT bcsd
WHERE
PG_INVENTARIO=aAssInvBF.pg_inventario
AND TI_DOCUMENTO='S'
AND ESERCIZIO=aDoc.ESERCIZIO
AND NR_INVENTARIO=aAssInvBF.nr_inventario
AND PROGRESSIVO=aAssInvBF.progressivo
And PG_BUONO_C_S=aAssInvBF.PG_BUONO_C_S
FOR UPDATE NOWAIT;
EXCEPTION WHEN NO_DATA_FOUND Then
IBMERR001.RAISE_ERR_GENERICO('Buono di scarico non trovato');
END;
BEGIN
SELECT * INTO aCatGruppo
FROM CATEGORIA_GRUPPO_INVENT
WHERE
cd_categoria_gruppo = aInventBene.cd_categoria_gruppo;
EXCEPTION WHEN NO_DATA_FOUND THEN
IBMERR001.RAISE_ERR_GENERICO('Gruppo inventariale non trovato:'||aInventBene.cd_categoria_gruppo);
END;
BEGIN
if recParametriCNR.fl_nuovo_pdg='N' then
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_padre
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aDocTst.ESERCIZIO;
else
begin
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_gruppo
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aDocTst.ESERCIZIO
and cd_elemento_voce = aDoc.CD_ELEMENTO_VOCE_EV;
EXCEPTION WHEN NO_DATA_FOUND THEN
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_gruppo
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aDocTst.ESERCIZIO
and fl_default='Y';
end;
end if;
EXCEPTION WHEN NO_DATA_FOUND THEN
IBMERR001.RAISE_ERR_GENERICO('Nessun conto economico associato a categoria:'||aCatGruppo.cd_categoria_gruppo);
END;
if(aDocTst.cd_tipo_documento= CNRCTB100.TI_GENERICO_ENTRATA) then
aVoceEPMinusvalenza:=CNRCTB002.getVoceEpMinusval(aDocTst.ESERCIZIO,aCatGruppo.cd_categoria_gruppo,null);
aVoceEPPlusvalenza:=CNRCTB002.getVoceEpPlusval(aDocTst.ESERCIZIO,aCatGruppo.cd_categoria_gruppo,null);
else
aVoceEPMinusvalenza:=CNRCTB002.getVoceEpMinusval(aDocTst.ESERCIZIO,aCatGruppo.cd_categoria_gruppo,aDoc.CD_ELEMENTO_VOCE_EV);
aVoceEPPlusvalenza:=CNRCTB002.getVoceEpPlusval(aDocTst.ESERCIZIO,aCatGruppo.cd_categoria_gruppo,aDoc.CD_ELEMENTO_VOCE_EV);
end if;
-- Conto automezzi
aVoceEPCG:=CNRCTB002.getVoceEp(aCatGruppoVoceEp.ESERCIZIO,aCatGruppoVoceEp.cd_voce_ep);
-- Conto per l'ammortamento
if(aCatGruppoVoceEp.cd_voce_ep_contr is not null) then
aVoceEPCGContr:=CNRCTB002.getVoceEp(aCatGruppoVoceEp.ESERCIZIO,aCatGruppoVoceEp.cd_voce_ep_contr);
end if;
aResiduo:=aResiduo+aInventBene.valore_iniziale + aInventBene.variazione_piu - (aInventBene.variazione_meno-(aBSC.quantita*aBSC.valore_unitario)) - NVL(aInventBene.valore_ammortizzato,0);
Dbms_Output.PUT_LINE('RESIDUO '||aResiduo);
Dbms_Output.PUT_LINE('valore_ammortizzato '||aInventBene.valore_ammortizzato);
IF aInventBene.FL_totalmente_scaricato='Y' Then
scarico_tot:=True;
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.ESERCIZIO,aDocTst.cd_uo_origine,aVoceEPCG,aInventBene.valore_iniziale + aInventBene.variazione_piu - (aInventBene.variazione_meno-(aBSC.quantita*aBSC.valore_unitario)),CNRCTB200.IS_AVERE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,aListaMovimenti,aUser,aTSnow);
Else
scarico_tot:=False;
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.ESERCIZIO,aDocTst.cd_uo_origine,aVoceEPCG,aBSC.quantita*aBSC.valore_unitario,CNRCTB200.IS_AVERE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,aListaMovimenti,aUser,aTSnow);
End If;
IF aInventBene.FL_totalmente_scaricato='Y' Then
If NVL(aInventBene.valore_ammortizzato,0) > 0 Then
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.ESERCIZIO,aDocTst.cd_uo_origine,aVoceEPCGContr,NVL(aInventBene.valore_ammortizzato,0),CNRCTB200.IS_DARE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,aListaMovimenti,aUser,aTSnow);
END IF;
Else
Begin
select abs(im_movimento_ammort) into quote_storno
from ammortamento_bene_inv
where
PG_INVENTARIO= aBSC.PG_INVENTARIO
And PG_BUONO_S = aBSC.PG_BUONO_C_S
and NR_INVENTARIO= aBSC.NR_INVENTARIO
and PROGRESSIVO = aBSC.PROGRESSIVO
and esercizio = aBSC.esercizio
and fl_storno ='Y';
Exception when no_data_found then
quote_storno:=0;
End;
If NVL(aInventBene.valore_ammortizzato,0) > 0 Then
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.ESERCIZIO,aDocTst.cd_uo_origine,aVoceEPCGContr,quote_storno,CNRCTB200.IS_DARE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,aListaMovimenti,aUser,aTSnow);
END IF;
End If;
IF aInventBene.ti_commerciale_istituzionale = CNRCTB100.TI_ISTITUZIONALE THEN
TOT_DOC:=aDoc.im_imponibile + aDoc.im_iva ;
Else
TOT_DOC:=aDoc.im_imponibile;
End IF;
-- r.p. 22/02/2008 caso + righe collegate stesso dettaglio buono devo considerare solo l'importo della riga di doc.
Else
IF aInventBene.ti_commerciale_istituzionale = CNRCTB100.TI_ISTITUZIONALE THEN
TOT_DOC:=aDoc.im_imponibile + aDoc.im_iva ;
Else
TOT_DOC:=aDoc.im_imponibile;
End IF;
End if;
END LOOP;
-- r.p. 14/02/2007 spostato all'esterno del loop in quanto sono dati relativi al documento
-- quindi devono essere considerati una sola volta nel loop viene calcolato il residuo totale
If (scarico_tot)Then
aDelta:=TOT_DOC - aResiduo;
Else
aDelta:=quote_storno;
End If;
IF aDelta > 0 THEN
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.ESERCIZIO,aDocTst.cd_uo_origine,aVoceEPPlusvalenza,aDelta,CNRCTB200.IS_AVERE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,aListaMovimenti,aUser,aTSnow);
END IF;
IF aDelta < 0 THEN
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.ESERCIZIO,aDocTst.cd_uo_origine,aVoceEPMinusvalenza,ABS(aDelta),CNRCTB200.IS_DARE,aDoc.dt_da_competenza_coge,aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,aListaMovimenti,aUser,aTSnow);
END IF;
End If;
END;
Procedure buildMovPEPIVAIstSplit(aListaMovimenti IN OUT CNRCTB200.movimentiList, aDocTst V_DOC_AMM_COGE_TSTA%rowtype, aDoc V_DOC_AMM_COGE_RIGA%rowtype, aUser varchar2, aTSnow date) is
aEffCori ass_tipo_cori_voce_ep%rowtype;
aContoEp voce_ep%rowtype;
aSezione CHAR(1);
Fl_split CHAR(1);
Begin
Dbms_Output.PUT_LINE ('IN buildMovPEPIVAIstSplit');
If aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_PASSIVA and
aDocTst.TI_ISTITUZ_COMMERC = CNRCTB100.TI_ISTITUZIONALE Then
select fl_split_payment into Fl_split
from fattura_passiva
where
fattura_passiva.esercizio = aDocTst.esercizio and
fattura_passiva.cd_cds = aDocTst.cd_cds and
fattura_passiva.cd_unita_organizzativa = aDocTst.cd_unita_organizzativa and
fattura_passiva.pg_fattura_passiva = aDocTst.PG_NUMERO_DOCUMENTO;
-- Se la fattura è istituzionale con Split, apro il debito verso l'erario
If Fl_split = 'Y' then
aEffCori := CNRCTB204.getAssCoriEp(aDocTst.esercizio, 'IVA', CNRCTB001.GESTIONE_ENTRATE, CNRCTB100.IS_DARE);
Begin
aContoEp:=CNRCTB002.getVoceEp(aEffCori.esercizio, aEffCori.cd_voce_ep_contr);
Exception when OTHERS then
IBMERR001.RAISE_ERR_GENERICO('Conto economico di contr.: '||aEffCori.cd_voce_ep_contr||' associato a CORI IVA non trovato');
End;
-- modifica del 14/06/2006 per le note l'iva va in Dare, prima metteva l'iva sempre in Avere e per le note sfetecchiava
-- tutta la scrittura per il fatto che l'ultimo importo lo mette per quadrare la scrittura
If aDocTst.ti_fattura = 'C' Then
aSezione := CNRCTB100.IS_DARE;
Else
aSezione := CNRCTB100.IS_AVERE;
End If;
Dbms_Output.PUT_LINE ('CARICA RIGA CON '||aContoEp.CD_VOCE_EP);
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine, aDocTst.esercizio, aDocTst.cd_uo_origine, aContoEp, abs(aDoc.im_iva),
aSezione,
aDoc.dt_da_competenza_coge, aDoc.dt_a_competenza_coge, aDocTst.cd_terzo,
aListaMovimenti, aUser, aTSnow);
End if;
End if;
End;
procedure buildMovPEP(aListaMovimenti IN OUT CNRCTB200.movimentiList, aDocTst V_DOC_AMM_COGE_TSTA%rowtype,
aDoc V_DOC_AMM_COGE_RIGA%rowtype, aUser varchar2, aTSnow date) is
aContoEp voce_ep%rowtype;
aImporto number(15,2);
aSezione char(1);
aNum number;
conta number;
aRecCompenso compenso%Rowtype;
DA_COMP DATE;
A_COMP DATE;
aAnticipo anticipo%rowtype;
begin
recParametriCNR := CNRUTL001.getRecParametriCnr(aDoc.esercizio);
dbms_output.put_line('Origine PGIRO E');
if ( aDocTst.cd_tipo_documento in(CNRCTB100.TI_GENERICO_SPESA,CNRCTB100.TI_GENERICO_ENTRATA) and aDoc.FL_PGIRO = 'Y' ) then
if (aDocTst.cd_tipo_documento = CNRCTB100.TI_GENERICO_SPESA ) then
begin
select 1 into conta from ass_obb_acr_pgiro
where
CD_CDS = aDoc.CD_CDS_DOC and
ESERCIZIO = aDoc.ESERCIZIO_DOC and
PG_OBBLIGAZIONE = aDoc.PG_DOC and
ESERCIZIO_ORI_OBBLIGAZIONE = aDoc.ESERCIZIO_ORI_DOC and
TI_ORIGINE = 'S';
exception when no_data_found then
dbms_output.put_line('Origine PGIRO E');
return;
end;
elsif (aDocTst.cd_tipo_documento = CNRCTB100.TI_GENERICO_ENTRATA ) then
begin
select 1 into conta from ass_obb_acr_pgiro
where
CD_CDS = aDoc.CD_CDS_DOC and
ESERCIZIO = aDoc.ESERCIZIO_DOC and
PG_ACCERTAMENTO = aDoc.PG_DOC and
ESERCIZIO_ORI_ACCERTAMENTO = aDoc.ESERCIZIO_ORI_DOC and
TI_ORIGINE = 'E';
exception when no_data_found then
dbms_output.put_line('Origine PGIRO S');
return;
end;
end if;
end if;
-- Modifica del 15/03/2004
-- Gestione speciale righe di generico di spesa su capitoli di parte 1 nell'ente
-- Tali righe non generano movimenti
Dbms_Output.put_line ('buildMovPEP 1');
If aDocTst.cd_tipo_documento = CNRCTB100.TI_GENERICO_SPESA And aDoc.ti_appartenenza_ev = CNRCTB001.APPARTENENZA_CNR then
begin
select 1 into aNum from elemento_voce
Where esercizio=aDoc.esercizio_ev
and ti_appartenenza=aDoc.ti_appartenenza_ev
and ti_gestione=aDoc.ti_gestione_ev
and cd_elemento_voce=aDoc.cd_elemento_voce_ev
and cd_parte=CNRCTB001.PARTE1;
Dbms_Output.put_line ('NO CONT DOC F');
return;
exception when NO_DATA_FOUND then
Dbms_Output.put_line ('NO CONT DOC AA');
null;
end;
elsif(nvl(aDoc.stato_coge_docamm,' ') = CNRCTB100.STATO_COEP_EXC) then
Dbms_Output.put_line ('ROSPUC ESCO SENZA CONTABILIZZARE RIGA');
return;
end if;
-- Gestione vendita bene durevole in fattura attiva
Dbms_Output.put_line ('2');
if ((aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_ATTIVA And
aDocTst.ti_causale_emissione = CNRCTB100.TI_FA_CAUSALE_BENE_DUREVOLE) Or
(aDocTst.cd_tipo_documento = CNRCTB100.TI_GENERICO_ENTRATA And isGenericoCollInv(aDoc))) then
buildMovPEPBeniDurevoli(aListaMovimenti, aDocTst, aDoc, aUser, aTSnow);
return;
end if;
-- Generazione del movimento di anticipo (se necessario)
Dbms_Output.put_line ('PRIMA DI buildMovPEPAnticipo MOVIMENTI: '||aDocTst.CD_TIPO_DOCUMENTO||' '||aListaMovimenti.Count);
buildMovPEPAnticipo(aListaMovimenti, aDocTst, aDoc, aUser, aTSnow);
-- Generazione del movimento di apertura del debito verso l'erario per
-- fatture istituz. per beni di tipo intraue o san marino senz'iva
Dbms_Output.put_line ('lcount 2a '||aListaMovimenti.Count);
buildMovPEPIVABeniIstIUSMSI(aListaMovimenti, aDocTst, aDoc, aUser, aTSnow);
-- Generazione del movimento di apertura del debito verso l'erario per
-- fatture istituz. di servizi su sezionale fl_servizi_non_residenti = si
Dbms_Output.put_line ('lcount 2c '||aListaMovimenti.Count);
buildMovPEPIVAServIstNR(aListaMovimenti, aDocTst, aDoc, aUser, aTSnow);
Dbms_Output.put_line ('split '||aListaMovimenti.Count);
buildMovPEPIVAIstSplit(aListaMovimenti, aDocTst, aDoc, aUser, aTSnow);
Dbms_Output.put_line ('lcount 3 '||aListaMovimenti.Count);
-- Generazione movimento di costo
aContoEp := CNRCTB204.trovaContoEp(aDocTst, aDoc);
if(aContoEp.cd_voce_ep= CNRCTB002.getVoceEpRimbMutuoEsercizio(aDocTst.esercizio).cd_voce_ep) then
return;
end if;
aSezione := CNRCTB204.getSezione(aDocTst, aDoc);
aImporto := aDoc.im_imponibile;
If aDoc.im_imponibile < 0 then
aSezione:=CNRCTB200.getSezioneOpposta(aSezione);
aImporto:=abs(aImporto);
End if;
Dbms_Output.put_line ('buildMovPrinc '||Nvl(aContoEp.CD_VOCE_EP, 'NULLO'));
-- 12.12.2006 (SF) SE IL DOCUMENTO HA COMPETENZA (ANCHE PARZIALMENTE) IN ANNO PRECEDENTE MA L'ESERCIZIO PRECEDENTE E' CHIUSO
-- NON POTENDO FARE IL RATEO IMPUTA IL COSTO/RICAVO NELL'ESERCIZIO IN CORSO MA ANCHE LE DATE DI COMPETENZA
-- ECONOMICA DEVONO APPARTENERE ALL'ESERCIZIO
If (CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) Or CNRCTB204.getCompetenzaacavalloconEsPrec(aDocTst)) And
Not CNRCTB008.ISESERCIZIOAPERTOSenzaBlocco(aDocTst.esercizio - 1, aDocTst.cd_cds_origine) Then
If To_Char(aDoc.dt_da_competenza_coge, 'YYYY') < aDocTst.esercizio Then
DA_COMP := To_Date('0101'||aDocTst.esercizio, 'DDMMYYYY');
Else
DA_COMP := aDoc.dt_da_competenza_coge;
End If;
If To_Char(aDoc.dt_a_competenza_coge, 'YYYY') < aDocTst.esercizio Then
A_COMP := To_Date('0101'||aDocTst.esercizio, 'DDMMYYYY');
Else
A_COMP := aDoc.dt_a_competenza_coge;
End If;
End If;
if aDoc.CD_TIPO_DOCUMENTO = CNRCTB100.TI_COMPENSO and CNRCTB204.isCompConAntMaggNetto(aDocTst)='Y' then
aAnticipo := CNRCTB204.getAnticipo(aDocTst);
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
aContoEp,0,aSezione,
Nvl(DA_COMP, aDoc.dt_da_competenza_coge),
Nvl(A_COMP, aDoc.dt_a_competenza_coge),
aDoc.cd_terzo,aDoc.ti_istituz_commerc,
aListaMovimenti,aUser,aTSnow);
else
--Dbms_Output.put_line ('da data '||To_Char(DA_COMP, 'dd/mm/yyyy'));
--Dbms_Output.put_line ('a data '||To_Char(A_COMP, 'dd/mm/yyyy'));
Dbms_Output.put_line ('MOv PRinc '||aContoEp.cd_voce_ep||' importo '||to_char(aImporto)||' MA CHE FIN HA FATTO');
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
aContoEp,aImporto,aSezione,
Nvl(DA_COMP, aDoc.dt_da_competenza_coge),
Nvl(A_COMP, aDoc.dt_a_competenza_coge),
aDoc.cd_terzo,aDoc.ti_istituz_commerc,
aListaMovimenti,aUser,aTSnow);
end if;
Dbms_Output.put_line ('lcount 4 '||aListaMovimenti.Count);
end;
-- =======================================
--
-- CONTABILIZZAZIONE CORI
--
-- =======================================
Procedure buildMovPEP(aListaNuoveScritture IN OUT CNRCTB200.scrittureList, aListaMovimenti IN OUT CNRCTB200.movimentiList,
aDocTst V_DOC_AMM_COGE_TSTA%rowtype, aCori V_DOC_AMM_COGE_CORI%rowtype, aUser varchar2, aTSnow date) is
aContoEp voce_ep%rowtype;
aImporto number(15,2);
aSezione char(1);
aAnticipo anticipo%rowtype;
DA_COMP DATE;
A_COMP DATE;
aAssCoriEpLoc ass_tipo_cori_voce_ep%rowtype;
aContoEpLoc voce_ep%rowtype;
aSezioneLoc char(1);
aImportoLoc number(15,2);
aVoceIvaCredito voce_ep%rowtype;
Begin
-- Nelle scritture di rateo delle fatture attive l'IVA non gira nella scrittura in esercizio precedente
-- Fix del 13/11/2003 e successiva del 19/02/2004
-- se l'esercizio n-1 non è chiuso, il documento è con comp. in es. prec, l'IVA su fatture attive e passive non viene gestita
-- infatti in questo caso la scrittura viene fatta al 3112(n-1) come RATEO parte 1
If not (CNRCTB200.ISCHIUSURACOEPDEF(aDocTst.esercizio-1, aDocTst.cd_cds_origine)= 'Y') -- SE L'ESERCIZIO PRECEDENTE E' APERTO
And (CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) Or -- COMPETENZA COMPLETAMENTE FUORI ESERCIZIO
CNRCTB204.getCompetenzaacavalloconEsPrec(aDocTst)) -- OPPURE COMPETENZA A CAVALLO
-- E TIPO DOCUMENTO UGUALE A FATTURA ATTIVA, PASSIVA O COMPENSO
And (aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_ATTIVA Or aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_PASSIVA Or -- SOLO IVA
(aDocTst.cd_tipo_documento = CNRCTB100.TI_COMPENSO And
(aCori.TI_ENTE_PERCEPIENTE = TI_CORI_PERCIPIENTE Or
aCori.cd_contributo_ritenuta = CNRCTB015.GETVAL01PERCHIAVE(CNRCTB575.TI_CORI_SPECIALE,CNRCTB575.TI_CORI_IVA)))) Then
Dbms_Output.PUT_LINE ('ESCO DA buildMovPEP CON CORI');
Return;
elsif (nvl(aCori.stato_coge_docamm,' ') = CNRCTB100.STATO_COEP_EXC) then
Dbms_Output.put_line ('ROSPUC ESCO SENZA CONTABILIZZARE CORI');
return;
End If;
If aDocTst.cd_tipo_documento = CNRCTB100.TI_COMPENSO Then -- se cori di compenso
------------------------------------------- tutto su compenso ---------------------------------------------
Declare
aCompenso compenso%rowtype;
aAssCoriEp ass_tipo_cori_voce_ep%rowtype;
aCoriLoc contributo_ritenuta%rowtype;
aListaMovimentiTemp CNRCTB200.movimentiList;
aScrittura scrittura_partita_doppia%rowtype;
aVoceAnag voce_ep%rowtype;
aPgTerzo number(8);
Begin
aVoceIvaCredito:=CNRCTB002.GETVOCEEPIVACredito(aDocTst.esercizio);
select * into aCompenso
from compenso
where esercizio=aDocTst.esercizio
and cd_cds=aDocTst.cd_cds
and cd_unita_organizzativa = aDocTst.cd_unita_organizzativa
and pg_compenso = aDocTst.pg_numero_documento
for update nowait;
dbms_output.put_line('ci arrivo');
aAnticipo:=CNRCTB204.getAnticipo(aDocTst);
-- Fix errore n.834 - 10/08/2004:blocco non valido per compenso con aticipo maggiore del netto missione
-- Se il compenso è senza mandato principale
-- devo aprire il debito verso l'erario per i CORI subito
-- Lo faccio con scritture indipendenti per ogni CORI tutte legate al compenso e con terzi in
-- dipendenza del fatto che il cori sia ente o percipiente
-- Viene registrata una scrittura PER ogni cori presente nel compenso
If aCompenso.im_totale_compenso <= 0 then
aAssCoriEp:=CNRCTB204.getAssCoriEp(aCori.esercizio, aCori.cd_contributo_ritenuta,aCori.ti_ente_percepiente,CNRCTB204.getSezione(aDocTst, aCori));
aContoEp:=CNRCTB002.getVoceEp(aAssCoriEp.esercizio, aAssCoriEp.cd_voce_ep_contr);
aSezione:=CNRCTB200.getSezioneOpposta(CNRCTB204.getSezione(aDocTst, aCori)); -- Sezione opposta rispetto alla normale sezione CORI
aImporto:=abs(aCori.ammontare);
-- Se il CORI è ENTE e negativo e il compenso ha totale compenso strettamente < 0,
-- bisogna generare un movimento sul conto di anagrafica del terzo ENTE
-- Per gli altri cori, il terzo da usare è quello del CORI (terzo del compenso)
Declare
aUOENTE unita_organizzativa%rowtype;
aCdTerzoEnte number(8);
Begin
If aCori.ti_ente_percepiente = TI_CORI_ENTE and aCompenso.im_totale_compenso < 0
and aCori.ammontare < 0 then
-- Estrae il terzo associato all'UO ENTE
aUOENTE:=CNRCTB020.GETUOENTE(aCompenso.esercizio);
CNRCTB080.getTerzoPerUO(aUOENTE.cd_unita_organizzativa, aCdTerzoEnte);
aPgTerzo:=aCdTerzoEnte;
if aCori.ammontare > 0 then
aVoceAnag:=CNRCTB204.TROVACONTOANAG(aDocTst.esercizio,aCdTerzoEnte, CNRCTB100.TI_GENERICO_ENTRATA,null,aCori.CD_ELEMENTO_VOCE_EV);
else
aVoceAnag:=CNRCTB204.TROVACONTOANAG(aDocTst.esercizio,aCdTerzoEnte, CNRCTB100.TI_GENERICO_SPESA,null,aCori.CD_ELEMENTO_VOCE_EV);
end if;
else -- Tipo cori percipiente
aPgTerzo:=aCori.cd_terzo;
DBMS_OUTPUT.PUT_LINE('CORI EV pos'||aCori.CD_ELEMENTO_VOCE_EV);
if aCori.ammontare > 0 then
aVoceAnag:=CNRCTB204.TROVACONTOANAG(aDocTst.esercizio,aCori.cd_terzo, CNRCTB100.TI_GENERICO_ENTRATA,null,aCori.CD_ELEMENTO_VOCE_EV);
else
aVoceAnag:=CNRCTB204.TROVACONTOANAG(aDocTst.esercizio,aCori.cd_terzo, CNRCTB100.TI_GENERICO_SPESA,null,aCori.CD_ELEMENTO_VOCE_EV);
end if;
end if;
aListaMovimentiTemp.delete;
aScrittura:=null;
-- Crea il movimento sul patrimoniale dell'anagrafica del cori
Dbms_Output.PUT_LINE ('AA '||aContoEp.CD_VOCE_EP);
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,
aDocTst.esercizio,
aDocTst.cd_uo_origine,
aContoEp,
aImporto,
aSezione,
aCori.dt_da_competenza_coge,
aCori.dt_a_competenza_coge,
aPgTerzo,
aCori.ti_istituz_commerc,
aListaMovimentiTemp,
aUser,
aTSnow);
Dbms_Output.PUT_LINE ('BB '||aVoceAnag.CD_VOCE_EP);
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,
aDocTst.esercizio,
aDocTst.cd_uo_origine,
aVoceAnag,
aImporto,
CNRCTB200.getSezioneOpposta(aSezione),
aCori.dt_da_competenza_coge,
aCori.dt_a_competenza_coge,
aPgTerzo,
aCompenso.ti_istituz_commerc,
aListaMovimentiTemp,
aUser,
aTSnow);
-- Imposta l'ultimo movimento come movimento terzo della scrittura
aListaMovimentiTemp(2).FL_MOV_TERZO:='Y';
aScrittura:=CNRCTB204.buildScrPEP(aDocTst,aPgTerzo,aUser,aTSNow);
if CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) and CNRCTB008.ISESERCIZIOAPERTO(aDocTst.esercizio - 1,aDocTst.cd_cds_origine) then
IBMERR001.RAISE_ERR_GENERICO('Compenso senza costo principale con competenza in esercizio precedente aperto non processabile come RATEO parte I');
else
CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimentiTemp);
end if;
if aListaMovimentiTemp.count > 0 then
aListaNuoveScritture(aListaNuoveScritture.count+1):=aScrittura;
end if;
-- ARRIVATO QUI HO GENERATO LA SCRITTURA PER IL CORI ED ESCO
return;
End;
Else -- dell'If aCompenso.im_totale_compenso <= 0 then
-- Fix errore n.834 - 10/08/2004
-- Se il compenso ha anticipo maggiore del netto percipiente
-- devo aprire il debito verso l'erario per i CORI subito e nella stessa scrittura del compenso
If (aAnticipo.pg_anticipo is not Null and aAnticipo.im_anticipo > aCompenso.im_netto_percipiente) Then
Begin
aAssCoriEpLoc:=CNRCTB204.getAssCoriEp(aCori.esercizio, aCori.cd_contributo_ritenuta,aCori.ti_ente_percepiente,CNRCTB204.getSezione(aDocTst, aCori));
aContoEpLoc:=CNRCTB002.getVoceEp(aAssCoriEpLoc.esercizio, aAssCoriEpLoc.cd_voce_ep_contr);
aSezioneLoc:=CNRCTB200.getSezioneOpposta(CNRCTB204.getSezione(aDocTst, aCori)); -- Sezione opposta rispetto alla normale sezione CORI
aImportoLoc:=abs(aCori.ammontare);
Dbms_Output.PUT_LINE ('CC '||aContoEpLoc.CD_VOCE_EP);
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine,
aDocTst.esercizio,
aDocTst.cd_uo_origine,
aContoEpLoc,
aImportoLoc,
aSezioneLoc,
aCori.dt_da_competenza_coge,
aCori.dt_a_competenza_coge,
aCori.cd_terzo,
aCori.ti_istituz_commerc,
aListaMovimenti,
aUser,
aTSnow);
End;
End If;
-- Il compenso CON mandato principale non scorpora i CORI percipiente dal corpo
If aCori.ti_ente_percepiente = TI_CORI_PERCIPIENTE then
Return;
End If;
-- Se si tratta di CORI ENTE POSITIVO normale gestione CORI
aContoEp:=CNRCTB204.trovaContoEp(aDocTst, aCori);
Dbms_Output.PUT_LINE ('Se si tratta di CORI ENTE POSITIVO normale gestione CORI '||aContoEp.CD_VOCE_EP||' '||ACORI.CD_ELEMENTO_VOCE_EV);
aSezione:=CNRCTB204.getSezione(aDocTst, aCori);
aImporto:=abs(aCori.ammontare);
End If; -- dell'If aCompenso.im_totale_compenso <= 0 then
Exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Compenso non trovato:'||aDocTst.pg_numero_documento||' uo:'||aDocTst.cd_unita_organizzativa||' es:'||aDocTst.esercizio);
End;
---------------------------------------------- fine tutto su compenso ---------------------------------------
Else -- Cori non di compenso
aContoEp:=CNRCTB204.trovaContoEp(aDocTst, aCori);
aSezione:=CNRCTB204.getSezione(aDocTst, aCori);
aImporto:=abs(aCori.ammontare);
End If;
-- 12.12.2006 (SF) SE IL DOCUMENTO HA COMPETENZA (ANCHE PARZIALMENTE) IN ANNO PRECEDENTE MA L'ESERCIZIO PRECEDENTE E' CHIUSO
-- NON POTENDO FARE IL RATEO IMPUTA IL COSTO/RICAVO NELL'ESERCIZIO IN CORSO MA ANCHE LE DATE DI COMPETENZA
-- ECONOMICA DEVONO APPARTENERE ALL'ESERCIZIO
If (CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) Or CNRCTB204.getCompetenzaacavalloconEsPrec(aDocTst)) And
Not CNRCTB008.ISESERCIZIOAPERTOSenzaBlocco(aDocTst.esercizio - 1, aDocTst.cd_cds_origine) Then
If To_Char(aCori.dt_da_competenza_coge, 'YYYY') < aDocTst.esercizio Then
DA_COMP := To_Date('0101'||aDocTst.esercizio, 'DDMMYYYY');
Else
DA_COMP := aCori.dt_da_competenza_coge;
End If;
If To_Char(aCori.dt_a_competenza_coge, 'YYYY') < aDocTst.esercizio Then
A_COMP := To_Date('0101'||aDocTst.esercizio, 'DDMMYYYY');
Else
A_COMP := aCori.dt_a_competenza_coge;
End If;
else
DA_COMP := aCori.dt_da_competenza_coge;
A_COMP := aCori.dt_a_competenza_coge;
End If;
Dbms_Output.PUT_LINE ('DD '||aContoEp.CD_VOCE_EP);
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,
aDocTst.esercizio,
aDocTst.cd_uo_origine,
aContoEp,
aImporto,
aSezione,
DA_COMP, -- aCori.dt_da_competenza_coge,
A_COMP, -- aCori.dt_a_competenza_coge,
aCori.cd_terzo,
aCori.ti_istituz_commerc,
aListaMovimenti,
aUser,
aTSnow);
if(aDocTst.cd_tipo_documento not in(CNRCTB100.TI_FATTURA_ATTIVA,CNRCTB100.TI_FATTURA_PASSIVA)) then
if (aContoEp.CD_VOCE_EP= aVoceIvaCredito.cd_voce_ep )then
null;
else
aContoEpLoc:=CNRCTB204.trovaContoContrEp(aDocTst.esercizio,null,null,null,aContoEp.CD_VOCE_EP);
aSezioneLoc:=CNRCTB200.getSezioneOpposta(CNRCTB204.getSezione(aDocTst, aCori)); -- Sezione opposta rispetto alla normale sezione CORI
aImportoLoc:=abs(aCori.ammontare);
Dbms_Output.PUT_LINE ('DD contr '||aContoEpLoc.CD_VOCE_EP);
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,
aDocTst.esercizio,
aDocTst.cd_uo_origine,
aContoEpLoc,
aImportoLoc,
aSezioneLoc,
DA_COMP, -- aCori.dt_da_competenza_coge,
A_COMP, -- aCori.dt_a_competenza_coge,
aCori.cd_terzo,
aCori.ti_istituz_commerc,
aListaMovimenti,
aUser,
aTSnow);
end if;
end if;
End;
/* stani */
Procedure buildMovPEPAutofattura(aListaNuoveScritture IN OUT CNRCTB200.scrittureList, aListaMovimenti IN OUT CNRCTB200.movimentiList,
aDocTst V_DOC_AMM_COGE_TSTA%rowtype, aCori V_DOC_AMM_COGE_CORI%rowtype, aUser varchar2, aTSnow date) is
aContoEp voce_ep%rowtype;
aVoceIvaDebito voce_ep%rowtype;
aImporto NUMBER(15,2);
aSezione CHAR(1);
aAnticipo anticipo%rowtype;
Begin
-- Nelle scritture di rateo delle fatture attive l'IVA non gira nella scrittura in esercizio precedente
-- Fix del 13/11/2003 e successiva del 19/02/2004
-- se l'esercizio n-1 non è chiuso, il documento è con comp. in es. prec, l'IVA su fatture attive e passive non viene gestita
-- infatti in questo caso la scrittura viene fatta al 3112(n-1) come RATEO parte 1
If CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) And
Not (CNRCTB200.ISCHIUSURACOEPDEF(aDocTst.esercizio-1,aDocTst.cd_cds_origine) = 'Y') and
(aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_ATTIVA or aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_PASSIVA) Then
Return;
End if;
aContoEp := CNRCTB204.trovaContoEp(aDocTst, aCori);
aSezione := CNRCTB204.getSezione(aDocTst, aCori);
aImporto := abs(aCori.ammontare);
Dbms_Output.PUT_LINE ('EE '||aContoEp.CD_VOCE_EP);
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine, aDocTst.esercizio, aDocTst.cd_uo_origine, aContoEp, aImporto, aSezione,
aCori.dt_da_competenza_coge, aCori.dt_a_competenza_coge, aCori.cd_terzo, aCori.ti_istituz_commerc,
aListaMovimenti, aUser, aTSnow);
aVoceIvaDebito := CNRCTB002.GETVOCEEPIVADEBITO(aDocTst.esercizio);
Dbms_Output.PUT_LINE ('FF '||aVoceIvaDebito.CD_VOCE_EP);
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine, aDocTst.esercizio, aDocTst.cd_uo_origine, aVoceIvaDebito, aImporto,
CNRCTB200.getSezioneOpposta(aSezione), aCori.dt_da_competenza_coge, aCori.dt_a_competenza_coge,
aCori.cd_terzo, aCori.ti_istituz_commerc, aListaMovimenti, aUser, aTSnow);
End;
/* stani */
-- =======================================
--
-- CONTROPARTITA
--
-- =======================================
Procedure buildMovContrPEP(aListaMovimenti IN OUT CNRCTB200.movimentiList,
aDocTst V_DOC_AMM_COGE_TSTA%rowtype, aCdTerzo number, aUser varchar2,
aTSnow date, ACdElementoVoce varchar2) is
aVoceEP voce_ep%rowtype;
aImporto_C number(15,2);
aImporto_I number(15,2);
aMovimento movimento_coge%rowtype;
aSezPrinc char(1);
aTotAvere_C NUMBER(15,2);
aTotAvere_I NUMBER(15,2);
aTotDare_C NUMBER(15,2);
aTotDare_I NUMBER(15,2);
aTiIstituzCommerc char(1) := CNRCTB100.TI_COMMERCIALE;
aRecCompenso compenso%Rowtype;
begin
if aListaMovimenti.count = 0 then
Dbms_Output.PUT_LINE ('buildMovContrPEP ESCO');
return;
End if;
if aListaMovimenti(1).dt_a_competenza_coge is null then
IBMERR001.RAISE_ERR_GENERICO('Data fine competenza non specificata su primo movimento della scrittura');
end if;
-- Accumula i movimenti di controparte
aTotAvere_C := 0;
aTotAvere_I := 0;
aTotDare_C := 0;
aTotDare_I := 0;
For k in 1 .. aListaMovimenti.count loop
Dbms_Output.PUT_LINE ('buildMovContrPEP LOOP K '||ACdElementoVoce);
If aListaMovimenti(k).sezione = CNRCTB200.IS_DARE Then
If aListaMovimenti(k).TI_ISTITUZ_COMMERC = 'C' Then
aTotDare_C := aTotDare_C + aListaMovimenti(k).im_movimento;
Elsif aListaMovimenti(k).TI_ISTITUZ_COMMERC = 'I' Then
aTotDare_I := aTotDare_I + aListaMovimenti(k).im_movimento;
End If;
Elsif aListaMovimenti(k).sezione = CNRCTB200.IS_AVERE Then
If aListaMovimenti(k).TI_ISTITUZ_COMMERC = 'C' Then
aTotAvere_C := aTotAvere_C + aListaMovimenti(k).im_movimento;
Elsif aListaMovimenti(k).TI_ISTITUZ_COMMERC = 'I' Then
aTotAvere_I := aTotAvere_I + aListaMovimenti(k).im_movimento;
End If;
End if;
End loop;
Dbms_Output.PUT_LINE ('buildMovContrPEP DOPO END LOOP K');
Dbms_Output.PUT_LINE ('VEDIAMO VALORI '||Nvl(aTotDare_C, 0)||' '||Nvl(aTotAvere_C, 0)||' '||Nvl(aTotDare_I, 0)||' '||Nvl(aTotAvere_I, 0));
-- Se il tot dare dei movimenti supera il tot avere, la sezione principale è dare (contropartita in avere)
if aTotDare_C > aTotAvere_C Or aTotDare_I > aTotAvere_I then
aSezPrinc := CNRCTB200.IS_DARE;
elsif aTotDare_C < aTotAvere_C Or aTotDare_I < aTotAvere_I then
-- Se la partita doppia è già chiusa non devo generare movimenti
aSezPrinc := CNRCTB200.IS_AVERE;
Else
Dbms_Output.PUT_LINE ('buildMovContrPEP DOPO ESCO 2');
return;
end if;
-- Nel caso:
-- la competenza economica del documento sia in esercizio precedente (data fine periodo),
-- l'esercizio precedente sia il primo esercizio dell'applicazione
-- -> Viene recuperato il conto di contropartita dei crediti/debiti iniziali
-- altrimenti
-- se la competenza in esercizio precedente aperto
-- -> ratei attivi/passivi o fatture da emettere per fattura attiva
-- altrimenti
-- -> contropartita anagrafica
-- Modifica del 25/08/2003 -> se la competenza è in esercizio precedente e l'esercizio attuale
-- è il primo dell'applicazione il conto di costo/ricavo è SP Iniziale
If CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) and aDocTst.esercizio = CNRCTB008.ESERCIZIO_PARTENZA then
Dbms_Output.PUT_LINE ('buildMovContrPEP COMP FUORI PARTENZA');
-- Modifica del 13/11/2003 -> se si tratta di fattura attiva in esercizio precedente e
-- l'esercizio attuale è il primo dell'applicazione
-- Devo USARE il conto dei criditi da terzo (legato ad anagrafica)
If aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_ATTIVA Then
aVoceEP := CNRCTB204.trovaContoContrEp(aDocTst, aCdTerzo,ACdElementoVoce);
-- Modifica del 19/02/2004 -> quello che è fatto per la fattura attiva è fatto anche per
-- quella passiva
Elsif aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_PASSIVA Then
aVoceEP:=CNRCTB204.trovaContoContrEp(aDocTst, aCdTerzo,ACdElementoVoce);
Else
if CNRCTB100.GETSEZIONEECONOMICA(aDocTst.cd_tipo_documento) = CNRCTB100.IS_DARE then
aVoceEP:=CNRCTB002.GETVOCEEPDEBITIINIZIALI(aDocTst.esercizio);
else
aVoceEP:=CNRCTB002.GETVOCEEPCREDITIINIZIALI(aDocTst.esercizio);
end if;
End if;
Else
-- Competenza in es precedente NON CHIUSO e competenza economica o completamente
-- nell'anno precedente o a cavallo tra il precedente ed il corrente
Dbms_Output.PUT_LINE ('buildMovContrPEP COMP FUORI MA NON PARTENZA');
If Not (CNRCTB200.ISCHIUSURACOEPDEF(aDocTst.esercizio - 1, aDocTst.cd_cds_origine) = 'Y') And
(CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst)) Then
Dbms_Output.PUT_LINE ('buildMovContrPEP 111');
-- RECUPERA SOLO IL COMPENSO
If aDocTst.cd_tipo_documento = CNRCTB100.TI_COMPENSO Then
Dbms_Output.PUT_LINE ('buildMovContrPEP 222');
aRecCompenso := CNRCTB545.getCompenso(aDocTst.cd_cds,
aDocTst.cd_unita_organizzativa,
aDocTst.esercizio,
aDocTst.PG_NUMERO_DOCUMENTO,
'N' /* LOCK S/N */);
End If;
-- per la fattura attiva estrae il conto delle fatture da emettere
Dbms_Output.PUT_LINE ('buildMovContrPEP 333');
if aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_ATTIVA Then
Dbms_Output.PUT_LINE ('buildMovContrPEP 333');
aVoceEP := CNRCTB002.GETVOCEEPFATTUREDAEMETTERE(aDocTst.esercizio);
-- Modifica del 19/02/2004 -> quello che è fatto per la fattura attiva è fatto
-- anche per quella passiva
elsif aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_PASSIVA Or
(aDocTst.cd_tipo_documento = CNRCTB100.TI_COMPENSO And aRecCompenso.FL_GENERATA_FATTURA = 'Y') Then
Dbms_Output.PUT_LINE ('buildMovContrPEP 444');
aVoceEP := CNRCTB002.GETVOCEEPFATTUREDARICEVERE(aDocTst.esercizio);
Else
Dbms_Output.PUT_LINE ('buildMovContrPEP 555');
-- altrimenti i conti di rateo
if aSezPrinc = CNRCTB200.IS_DARE then
aVoceEP:=CNRCTB002.GETVOCEEPRATEIPASSIVI(aDocTst.esercizio);
else
aVoceEP:=CNRCTB002.GETVOCEEPRATEIATTIVI(aDocTst.esercizio);
end if;
end if;
else -- Per gli altri documenti ritorna il conto di contropartita anagrafica
Dbms_Output.PUT_LINE ('buildMovContrPEP CONTO ANAGRAFICA '||ACdElementoVoce);
aVoceEP := CNRCTB204.trovaContoContrEp(aDocTst, aCdTerzo,ACdElementoVoce);
Dbms_Output.PUT_LINE ('dopo buildMovContrPEP CONTO ANAGRAFICA');
-- Fix errore 834: nel caso il compenso sia con anticipo maggiore del netto percipiente,
-- bisogna utilizzare il conto di credito e non di debito
-- (quest'ultimo naturalmente associato al compenso)
-- Per questo motivo nel metodo seguente viene utilizzato il tipo GENERICO di ENTRATA perchè
-- permette naturalmente di estrarre un conto di credito
if aDocTst.cd_tipo_documento = CNRCTB100.TI_COMPENSO then
if CNRCTB204.isCompConAntMaggNetto(aDocTst) = 'Y' then
if(recParametriCnr.fl_nuovo_pdg='Y' ) then
aVoceEP := CNRCTB204.trovaContoAnag(aDocTst.esercizio, aCdTerzo, aDocTst.cd_tipo_documento, aDocTst.ti_fattura,ACdElementoVoce);
else
aVoceEP := CNRCTB204.trovaContoAnag(aDocTst.esercizio, aCdTerzo, CNRCTB100.TI_GENERICO_ENTRATA, aDocTst.ti_fattura,ACdElementoVoce);
Dbms_Output.PUT_LINE ('buildMovContrPEP CAMBIA CON '||aVoceEP.CD_VOCE_EP);
end if;
end if;
end if;
End if;
End if;
aImporto_C := abs(aTotDare_C - aTotAvere_C);
aImporto_I := abs(aTotDare_I - aTotAvere_I);
If aImporto_I > 0 Then
aMovimento.CD_CDS := aListaMovimenti(1).cd_cds;
aMovimento.ESERCIZIO := aListaMovimenti(1).esercizio;
aMovimento.CD_UNITA_ORGANIZZATIVA := aListaMovimenti(1).cd_unita_organizzativa;
aMovimento.PG_SCRITTURA := null;
aMovimento.PG_MOVIMENTO := null;
aMovimento.CD_VOCE_EP := aVoceEP.cd_voce_ep;
aMovimento.SEZIONE := CNRCTB200.getSezioneOpposta(aSezPrinc);
aMovimento.IM_MOVIMENTO := aImporto_I;
aMovimento.CD_TERZO := aListaMovimenti(1).cd_terzo;
aMovimento.DT_DA_COMPETENZA_COGE := null;
aMovimento.DT_A_COMPETENZA_COGE := null;
aMovimento.ti_istituz_commerc := CNRCTB100.TI_ISTITUZIONALE; --aTiIstituzCommerc;
aMovimento.STATO := CNRCTB200.STATO_DEFINITIVO;
aMovimento.FL_MOV_TERZO := 'Y';
Dbms_Output.PUT_LINE ('movimento '||aVoceEP.CD_VOCE_EP||' importo '||aImporto_I);
aListaMovimenti(aListaMovimenti.COUNT + 1) := aMovimento;
End If;
If aImporto_C > 0 Then
aMovimento.CD_CDS := aListaMovimenti(1).cd_cds;
aMovimento.ESERCIZIO := aListaMovimenti(1).esercizio;
aMovimento.CD_UNITA_ORGANIZZATIVA := aListaMovimenti(1).cd_unita_organizzativa;
aMovimento.PG_SCRITTURA := null;
aMovimento.PG_MOVIMENTO := null;
aMovimento.CD_VOCE_EP := aVoceEP.cd_voce_ep;
aMovimento.SEZIONE := CNRCTB200.getSezioneOpposta(aSezPrinc);
aMovimento.IM_MOVIMENTO := aImporto_C;
aMovimento.CD_TERZO := aListaMovimenti(1).cd_terzo;
aMovimento.DT_DA_COMPETENZA_COGE := null;
aMovimento.DT_A_COMPETENZA_COGE := null;
aMovimento.ti_istituz_commerc := CNRCTB100.TI_COMMERCIALE; --aTiIstituzCommerc;
aMovimento.STATO := CNRCTB200.STATO_DEFINITIVO;
aMovimento.FL_MOV_TERZO := 'Y';
aListaMovimenti(aListaMovimenti.COUNT + 1) := aMovimento;
End If;
End;
-- Motori di registrazione delle prime scritture
function chkBuonoPerTrasferimento
(aBSDett buono_carico_scarico_dett%rowtype
) RETURN VARCHAR2 IS
isTrasferimento CHAR(1);
Begin
select B.fl_buono_per_trasferimento into isTrasferimento
from buono_carico_scarico A, tipo_carico_scarico B
where A.pg_inventario = aBSDett.pg_inventario and
A.ti_documento = aBSDett.ti_documento and
A.esercizio = aBSDett.esercizio and
A.pg_buono_c_s = aBSDett.pg_buono_c_s AND
B.cd_tipo_carico_scarico = A.cd_tipo_carico_scarico;
return isTrasferimento;
Exception
when others then
IBMERR001.RAISE_ERR_GENERICO('Errore in recupero del tipo buono di carico/scarico');
End chkBuonoPerTrasferimento;
Procedure regAnnullaDocEsChiusoCOGE(aEs number, aDocTst V_DOC_AMM_COGE_TSTA%rowtype, aUser varchar2, aTSNow date) is
aScRittura scrittura_partita_doppia%rowtype;
aScritturaNew scrittura_partita_doppia%rowtype;
aListaMovimenti CNRCTB200.movimentiList;
aNewListaMovimenti CNRCTB200.movimentiList;
aMovimento movimento_coge%rowtype;
aVoceAnag voce_ep%rowtype;
aVoceSopr voce_ep%rowtype;
aVoceSoprA voce_ep%rowtype;
aVoceSoprP voce_ep%rowtype;
aListaScritture CNRCTB200.scrittureList;
aImMovimento number(15,2);
aImPagatoIncassato number(15,2);
aCdElementoVoce elemento_voce.cd_elemento_voce%type;
aSezMovimento char(1);
aTiIstituzCommerc char(1);
aCdTerzo number(8);
aNum number;
begin
-- Lock del documento
CNRCTB100.LOCKDOCAMM(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento
);
begin
select 1 into aNum from v_unita_organizzativa_valida where
cd_unita_organizzativa=aDocTst.cd_cds_origine
and esercizio=aEs
and fl_cds='Y';
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('(1) Il cds '||aDocTst.cd_cds_origine||' non è più valido nell''esercizio ('||aEs||') in cui è stato richiesto di anullare il documento');
end;
if not CNRCTB008.ISESERCIZIOAPERTOOCHIUSO(aEs, aDocTst.cd_cds_origine) then
IBMERR001.RAISE_ERR_GENERICO('L''esercizio ('||aEs||') per il cds '||aDocTst.cd_cds_origine||' in cui è stato annullato il documento non è ancora aperto o chiuso');
end if;
if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs-1,aDocTst.cd_cds_origine)='Y') then
IBMERR001.RAISE_ERR_GENERICO('(1) L''esercizio economico di origine del documento amministrativo ('||To_Char(aEs-1)||') non è chiuso definitivamente');
end if;
if not (CNRCTB200.ISCHIUSURACOEPDEF(aDocTst.esercizio,aDocTst.cd_cds_origine)='Y') then
IBMERR001.RAISE_ERR_GENERICO('(2) L''esercizio economico di origine del documento amministrativo ('||aDocTst.esercizio||') non è chiuso definitivamente');
end if;
-- Lock del documento
CNRCTB100.LOCKDOCAMM(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento
);
-- Se già processato in economica esco
If aDocTst.stato_coge in (CNRCTB100.STATO_COEP_CON, CNRCTB100.STATO_COEP_EXC) Then
Return;
End If;
-- Se il documento NON è riportato l'operazione in COGE non è possibile
If CNRCTB105.isRiportato(aDocTst.cd_cds,aDocTst.cd_unita_organizzativa, aDocTst.esercizio, aDocTst.pg_numero_documento, aDocTst.cd_tipo_documento) = 'N' then
IBMERR001.RAISE_ERR_GENERICO('Documento non processabile con tale funzione perchè non riportato ('||
aDocTst.cd_cds||'/'||aDocTst.cd_unita_organizzativa||'/'||aDocTst.esercizio||'/'||aDocTst.pg_numero_documento||'/'||
aDocTst.cd_tipo_documento||' e origine '||aDocTst.CD_CDS_ORIGINE||'/'||aDocTst.CD_uo_ORIGINE||')');
End If;
-- Se mai stato processato in economica (stato N) sollevo eccezione
If aDocTst.stato_coge in (CNRCTB100.STATO_COEP_INI) Then
IBMERR001.RAISE_ERR_GENERICO('Documento mai processato in economica');
End if;
-- verifico che il documento sia stato riportato all'esercizio di annullamento e non oltre (o non ancora)
if not (CNRCTB105.GETSTATORIPORTATOINSCRIVANIA(aDocTst.cd_cds, aDocTst.cd_unita_organizzativa, aDocTst.esercizio,
aDocTst.pg_numero_documento, aDocTst.cd_tipo_documento, aEs) =
CNRCTB105.COMPLETAMENTE_RIPORTATO) then
IBMERR001.RAISE_ERR_GENERICO('Il documento amministrativo risulta (anche riportato) in un esercizio diverso da quello di registrazione economica dell''annullamento');
end if;
If Not aDocTst.stato_cofi = CNRCTB100.STATO_GEN_COFI_ANN And Not aDocTst.fl_congelata = 'Y' Then
IBMERR001.RAISE_ERR_GENERICO('Il documento da processare deve essere in stato annullato (congelato). Il documento in processo non è in questo stato');
End If;
-- cerca eventuali scritture di annullamento gia registrate per il documento in esercizi precedenti
CNRCTB204.getScritturePEPLock(null,aDocTst,CNRCTB200.CAU_ANNULL_ES_CHIUSO,aListaScritture);
if aListaScritture.count > 0 then
CNRCTB100.UPDATEDOCAMM_NODUVAUTUV(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento,
'stato_coge='''||CNRCTB100.STATO_COEP_CON||'''',
null
);
CNRCTB100.UPDATEDOCAMM_NODUVAUTUV(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento,
'stato_coan='''||CNRCTB100.STATO_COEP_CON||'''',
null
);
return;
end if;
/* INVERTITI IN DATA 23.05.2006 SU RICHIESTA DI FRANCA. IN SOSTANZA CAMBIANO I CONTI MA NON LA SOSTANZA.
- ANZICHE' REGISTRARE MENO RICAVI SI REGISTRANO PIU' COSTI;
- ANZICHE' REGISTRARE MENO COSTI SI REGISTRANO PIU' RICAVI; */
aVoceSoprA := CNRCTB002.GETVOCEEPINSUSSPASSIVE(aEs); --CNRCTB002.GETVOCEEPINSUSSATTIVE(aEs);
aVoceSoprP := CNRCTB002.GETVOCEEPINSUSSATTIVE(aEs); --CNRCTB002.GETVOCEEPINSUSSPASSIVE(aEs);
-- Devo girare sulle insussistenze dell'esercizio specificato aEs la quota non pagata del documento
-- Se si tratta di compenso/missione/anticipo/rimborso
-- recupero la scrittura di origine e leggo da lì l'importo terzo da girare sulle insussistenze
-- utilizzando l'associazione anagrafica conto dell'anno aEs
-- Carica le scritture originali del documento
CNRCTB204.GETSCRITTUREPEPLOCK(aDocTst,aListaScritture);
For k in 1 .. aListaScritture.count Loop
aScrittura := aListaScritture(k);
aNewListaMovimenti.delete;
aListaMovimenti.delete;
CNRCTB200.GETSCRITTURAEPLOCK(aScrittura,aListaMovimenti);
aImMovimento := Null;
aSezMovimento := Null;
aTiIstituzCommerc := Null;
For i in 1 .. aListaMovimenti.count Loop
If aListaMovimenti(i).fl_mov_terzo is not null and aListaMovimenti(i).fl_mov_terzo = 'Y' then
aImMovimento:=aListaMovimenti(i).im_movimento;
aSezMovimento:=aListaMovimenti(i).sezione;
aTiIstituzCommerc:=aListaMovimenti(i).ti_istituz_commerc;
aCdElementoVoce:=aListaMovimenti(i).cd_voce_ep;
End if;
End Loop;
if aImMovimento is null then
IBMERR001.RAISE_ERR_GENERICO('Errore in determinazione dell''importo movimento creditore/debitore della scrittura originale del documento');
end if;
-- Se il documento è generico o fattura devo determinare la quota PAGATA per le righe del terzo specificato
If aScrittura.cd_tipo_documento in (CNRCTB100.TI_FATTURA_PASSIVA, CNRCTB100.TI_FATTURA_ATTIVA) Or
CNRCTB100.ISINTABELLAGENERICO(aScrittura.cd_tipo_documento) = 'Y' then
aImPagatoIncassato := 0;
Begin
select im_pagato_incassato,Cd_Elemento_Voce
into aImPagatoIncassato,aCdElementoVoce
from V_DOC_AMM_COGE_PAGATO where
esercizio=aScrittura.esercizio_documento_amm
and cd_cds = aScrittura.cd_cds_documento
and cd_unita_organizzativa =aScrittura.cd_uo_documento
and cd_tipo_documento = aScrittura.cd_tipo_documento
and pg_numero_documento = aScrittura.pg_numero_documento
and cd_terzo = aScrittura.cd_terzo;
aImMovimento := aImMovimento - aImPagatoIncassato;
Exception when NO_DATA_FOUND then
null;
End;
End If;
if aImMovimento <= 0 then
IBMERR001.RAISE_ERR_GENERICO('Importo da girare su sopravvenienze minore o uguale a zero');
end if;
aCdTerzo:=aScrittura.cd_terzo;
recParametriCNR := CNRUTL001.getRecParametriCnr(aDocTst.esercizio);
if(recParametriCnr.fl_nuovo_pdg='Y' ) then
aVoceAnag :=CNRCTB002.getVoceEp(aDocTst.esercizio, ACdElementoVoce);
else
aVoceAnag:=CNRCTB204.TROVACONTOANAG(aEs,aCdTerzo,aDocTst.cd_tipo_documento,aDocTst.ti_fattura,aCdElementoVoce);
end if;
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aEs,aScrittura.cd_unita_organizzativa,aVoceAnag,
aImMovimento,CNRCTB200.GETSEZIONEOPPOSTA(aSezMovimento),trunc(aTSnow),
trunc(aTSNow),0,aTiIstituzCommerc,aNewListaMovimenti,aUser,aTSnow);
if CNRCTB200.GETSEZIONEOPPOSTA(aSezMovimento) = CNRCTB200.IS_AVERE then
aVoceSopr:=aVoceSoprP;
else
aVoceSopr:=aVoceSoprA;
end if;
CNRCTB204.buildChiusuraScrittura(aScrittura.cd_cds,aEs,aScrittura.cd_unita_organizzativa,aVoceSopr,trunc(aTSnow),trunc(aTSNow),0,aTiIstituzCommerc,aNewListaMovimenti,aUser,aTSnow);
aScritturaNew:=null;
aScritturaNew.CD_CDS:=aScrittura.cd_cds;
aScritturaNew.ESERCIZIO:=aEs;
aScritturaNew.CD_UNITA_ORGANIZZATIVA:=aScrittura.cd_unita_organizzativa;
aScritturaNew.ORIGINE_SCRITTURA:=CNRCTB200.ORIGINE_DOCUMENTO_AMM;
aScritturaNew.CD_TIPO_DOCUMENTO:=aDocTst.cd_tipo_documento;
aScritturaNew.CD_CAUSALE_COGE:=CNRCTB200.CAU_ANNULL_ES_CHIUSO;
-- La chiave del documento viene costruita per concatenazione delle componenti della chiave del buono di scarico
aScritturaNew.CD_COMP_DOCUMENTO:=null;
aScritturaNew.CD_CDS_DOCUMENTO:=aDocTst.cd_cds;
aScritturaNew.CD_UO_DOCUMENTO:=aDocTst.cd_unita_organizzativa;
aScritturaNew.PG_NUMERO_DOCUMENTO:=aDocTst.pg_numero_documento;
aScritturaNew.IM_SCRITTURA:=null; -- Impostato come totale di sezione in realizzazione della scrittura
-- 09.08.2006 data contabilizzazione = ultimo giorno dell'anno (scritture di annullamento documenti)
aScritturaNew.DT_CONTABILIZZAZIONE := To_Date('3112'||to_char(aEs), 'ddmmyyyy'); --trunc(aTSNow);
aScritturaNew.DT_PAGAMENTO:=null;
aScritturaNew.DT_CANCELLAZIONE:=null;
aScritturaNew.TI_SCRITTURA:=CNRCTB200.TI_SCRITTURA_SINGOLA;
aScritturaNew.CD_TERZO:=aCdTerzo;
aScritturaNew.STATO:=CNRCTB200.STATO_DEFINITIVO;
aScritturaNew.CD_DIVISA:=NULL;
aScritturaNew.COSTO_PLURIENNALE:=null; -- chi lo valorizza e come non è chiaro
aScritturaNew.PG_ENTE:=null; -- serve a rinumerare le scritture livello di ENTE
aScritturaNew.DS_SCRITTURA := 'Annullamento documento esercizio chiuso';
aScritturaNew.PG_SCRITTURA_ANNULLATA:=null; -- codice della scrittura annullata in effettuazione storno
aScritturaNew.ATTIVA:='Y';
aScritturaNew.ESERCIZIO_DOCUMENTO_AMM:=aDocTst.esercizio;
aScritturaNew.DACR:=aTSNow;
aScritturaNew.UTCR:=aUser;
-- Registro la scrittura
CNRCTB200.CREASCRITTCOGE(aScritturaNew,aNewListaMovimenti);
End Loop;
CNRCTB100.UPDATEDOCAMM_NODUVAUTUV(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento,
'stato_coge='''||CNRCTB100.STATO_COEP_CON||'''',
null
);
CNRCTB100.UPDATEDOCAMM_NODUVAUTUV(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento,
'stato_coan='''||CNRCTB100.STATO_COEP_CON||'''',
null
);
end;
-- inizio nuovo
Procedure regAnnullaRigheDocEsChiusoCOGE(aEs number, aRigheAnn V_DOC_AMM_COGE_RIGHE_ANNULLATE%rowtype, aUser varchar2, aTSNow date) is
aScrittura scrittura_partita_doppia%rowtype;
aScritturaNew scrittura_partita_doppia%rowtype;
aListaMovimenti CNRCTB200.movimentiList;
aNewListaMovimenti CNRCTB200.movimentiList;
aMovimento movimento_coge%rowtype;
aVoceAnag voce_ep%rowtype;
aVoceSopr voce_ep%rowtype;
aVoceSoprA voce_ep%rowtype;
aVoceSoprP voce_ep%rowtype;
aListaScritture CNRCTB200.scrittureList;
aImMovimento number(15,2);
aImPagatoIncassato number(15,2);
aSezMovimento char(1);
aTiIstituzCommerc char(1);
aCdTerzo number(8);
aNum number;
conta_annullate NUMBER;
aDocTst v_doc_amm_coge_tsta%Rowtype;
Begin
-- partendo direttamente dalle righe ho necessità di recuperare la testata del documento
Select *
Into aDocTst
From v_doc_amm_coge_tsta
Where CD_TIPO_DOCUMENTO = aRigheAnn.CD_TIPO_DOCUMENTO And
CD_CDS = aRigheAnn.CD_CDS And
CD_UNITA_ORGANIZZATIVA = aRigheAnn.CD_UNITA_ORGANIZZATIVA And
ESERCIZIO = aRigheAnn.ESERCIZIO And
PG_NUMERO_DOCUMENTO = aRigheAnn.PG_NUMERO_DOCUMENTO;
-- Lock del documento
CNRCTB100.LOCKDOCAMM(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento);
begin
select 1 into aNum from v_unita_organizzativa_valida where
cd_unita_organizzativa=aDocTst.cd_cds_origine
and esercizio=aEs
and fl_cds='Y';
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('(1) Il cds '||aDocTst.cd_cds_origine||' non è più valido nell''esercizio ('||aEs||') in cui è stato richiesto di annullare il documento');
end;
if not CNRCTB008.ISESERCIZIOAPERTOOCHIUSO(aEs, aDocTst.cd_cds_origine) then
IBMERR001.RAISE_ERR_GENERICO('L''esercizio ('||aEs||') per il cds '||aDocTst.cd_cds_origine||' in cui è stato annullato il documento non è ancora aperto o chiuso');
end if;
-- indipendentemente dall'esercizio residuo del documento amministrativo deve essere chiuso in economica
-- l'esercizio precedente a quello della scrittura (chiusura dei conti) -> GIUSTO
if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs-1,aDocTst.cd_cds_origine)='Y') then
IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente a quello della contabilizzazione ('||To_Char(aEs-1)||') non è chiuso definitivamente (annullamento righe)');
end if;
-- deve essere chiuso anche quello di origine del documento (forse inutile, al più è dell'anno prima... csnf)
if not (CNRCTB200.ISCHIUSURACOEPDEF(aDocTst.esercizio,aDocTst.cd_cds_origine)='Y') then
IBMERR001.RAISE_ERR_GENERICO('(2) L''esercizio economico di origine del documento amministrativo ('||aDocTst.esercizio||') non è chiuso definitivamente');
end if;
-- E' possibile annullare le righe solo ai Documenti Generici (per adesso)
If --aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_ATTIVA Or
CNRCTB100.ISINTABELLAGENERICO(aDocTst.cd_tipo_documento) = 'Y' Then
Null; -- ok
Else
IBMERR001.RAISE_ERR_GENERICO('La tipologia del documento amministrativo ('||aDocTst.cd_tipo_documento||') non è consentita');
End If;
-- Lock del documento
CNRCTB100.LOCKDOCAMM(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento
);
-- Se il documento NON è riportato (cioè se non è a residuo) l'operazione in COGE non è possibile
-- (verifica che almeno una riga sia riportata)
If CNRCTB105.isRiportato(aDocTst.cd_cds,aDocTst.cd_unita_organizzativa, aDocTst.esercizio,
aDocTst.pg_numero_documento, aDocTst.cd_tipo_documento) = 'N' then
IBMERR001.RAISE_ERR_GENERICO('Documento non processabile con tale funzione perchè non riportato ('||
aDocTst.cd_cds||'/'||aDocTst.cd_unita_organizzativa||'/'||aDocTst.esercizio||'/'||aDocTst.pg_numero_documento||'/'||
aDocTst.cd_tipo_documento||' e origine '||aDocTst.CD_CDS_ORIGINE||'/'||aDocTst.CD_uo_ORIGINE||'), documento '||
'NON residuo.');
End If;
-- Se mai stato processato in economica (stato N) sollevo eccezione
If aDocTst.stato_coge in (CNRCTB100.STATO_COEP_INI) Then
IBMERR001.RAISE_ERR_GENERICO('Testata del documento mai processato in economica '||
aDocTst.cd_tipo_documento||'/'||aDocTst.esercizio||'/'||aDocTst.cd_cds||'/'||aDocTst.cd_unita_organizzativa||'/'||
aDocTst.pg_numero_documento);
End If;
-- verifico che il documento sia stato riportato all'esercizio di annullamento e non oltre (o non ancora)
-- controllando che la riga del documento non sia associata ad accertamento di esercizio superiore a quello
-- dell'annullamento (aRigheAnn.ESERCIZIO_DOC = esercizio di bilancio dell'accertamento)
If aRigheAnn.ESERCIZIO_DOC > aEs Then
IBMERR001.RAISE_ERR_GENERICO('Impossibile contabilizzare nel '||aEs||' l''annullamento della riga n. '||aRigheAnn.PG_RIGA||
' del documento amministrativo '||aDocTst.cd_tipo_documento||'/'||aDocTst.esercizio||'/'||aDocTst.cd_cds||'/'||
aDocTst.cd_unita_organizzativa||'/'||aDocTst.pg_numero_documento||
' in quando associata a documento contabile di esercizio successivo ('||aRigheAnn.ESERCIZIO_DOC||').');
End If;
-- controllo anche che tutte le altre righe valide siano contabilizzate
Declare
conta_righe_non_contabilizzate NUMBER;
Begin
Select Count(*)
Into conta_righe_non_contabilizzate
From documento_generico_riga
Where CD_CDS = aRigheAnn.CD_CDS And
CD_UNITA_ORGANIZZATIVA = aRigheAnn.CD_UNITA_ORGANIZZATIVA And
ESERCIZIO = aRigheAnn.ESERCIZIO And
CD_TIPO_DOCUMENTO_AMM = aRigheAnn.CD_TIPO_DOCUMENTO And
PG_DOCUMENTO_GENERICO = aRigheAnn.PG_NUMERO_DOCUMENTO And
PROGRESSIVO_RIGA != aRigheAnn.PG_RIGA And
STATO_COFI != CNRCTB100.STATO_GEN_COFI_ANN And
STATO_COGE In (CNRCTB100.STATO_COEP_INI, CNRCTB100.STATO_COEP_DA_RIP );
If conta_righe_non_contabilizzate > 0 Then
IBMERR001.RAISE_ERR_GENERICO('Impossibile contabilizzare l''annullamento della riga n. '||aRigheAnn.PG_RIGA||
' del documento amministrativo '||aDocTst.cd_tipo_documento||'/'||aDocTst.esercizio||'/'||aDocTst.cd_cds||'/'||
aDocTst.cd_unita_organizzativa||'/'||aDocTst.pg_numero_documento||
' in quando esistono altri dettagli dello stesso documento non contabilizzati.');
End If;
End;
-- fine controllo
-- ??? update dello stato_coge del dettaglio
CNRCTB100.updateDocAmmRiga_noDuvaUtuv(
aRigheAnn.CD_TIPO_DOCUMENTO,
aRigheAnn.CD_CDS,
aRigheAnn.ESERCIZIO,
aRigheAnn.CD_UNITA_ORGANIZZATIVA,
aRigheAnn.PG_NUMERO_DOCUMENTO,
aRigheAnn.PG_RIGA,
' stato_coge = '''||CNRCTB100.STATO_COEP_CON||'''',
Null);
aVoceSoprA := CNRCTB002.GETVOCEEPINSUSSPASSIVE(aEs);
aVoceSoprP := CNRCTB002.GETVOCEEPINSUSSATTIVE(aEs);
-- Devo girare sulle insussistenze dell'esercizio specificato aEs la quota non pagata del documento
-- Se si tratta di compenso/missione/anticipo/rimborso
-- recupero la scrittura di origine e leggo da lì l'importo terzo da girare sulle insussistenze
-- utilizzando l'associazione anagrafica conto dell'anno aEs
-- Carica le scritture originali del documento
CNRCTB204.GETSCRITTUREPEPLOCK(aDocTst, aListaScritture); -- recupera le testate di tutte le scritture del mio documento
For k in 1 .. aListaScritture.count Loop -- e poi recupera testata e righe di quella del mio terzo
Dbms_Output.put_line ('terzo a '||aRigheAnn.cd_terzo);
If aListaScritture(k).cd_terzo = aRigheAnn.cd_terzo Then
aScrittura := aListaScritture(k);
aNewListaMovimenti.delete;
aListaMovimenti.delete;
CNRCTB200.GETSCRITTURAEPLOCK(aScrittura, aListaMovimenti);
aImMovimento := Null;
aSezMovimento := Null;
aTiIstituzCommerc := Null;
For i In 1 .. aListaMovimenti.count Loop
If aListaMovimenti(i).fl_mov_terzo is not null and aListaMovimenti(i).fl_mov_terzo = 'Y' then
aImMovimento := aListaMovimenti(i).im_movimento;
aSezMovimento := aListaMovimenti(i).sezione;
aTiIstituzCommerc := aListaMovimenti(i).ti_istituz_commerc;
End If;
End Loop;
If aImMovimento Is Null Then
IBMERR001.RAISE_ERR_GENERICO('Errore in determinazione dell''importo movimento creditore/debitore della scrittura originale del documento');
End If;
Dbms_Output.put_line ('terzo b '||aScrittura.cd_terzo);
aCdTerzo := aScrittura.cd_terzo;
aVoceAnag := CNRCTB204.TROVACONTOANAG(aEs,aCdTerzo,aDocTst.cd_tipo_documento,aDocTst.ti_fattura,aRigheAnn.cd_elemento_voce_ev);
Dbms_Output.put_line ('CNRCTB204.buildMovPrinc');
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aEs,aScrittura.cd_unita_organizzativa,aVoceAnag,
Nvl(aRigheAnn.IM_IMPONIBILE, 0) + Nvl(aRigheAnn.IM_IVA, 0),
CNRCTB200.GETSEZIONEOPPOSTA(aSezMovimento),
To_Date('3112'||to_char(aEs), 'ddmmyyyy'), To_Date('3112'||to_char(aEs), 'ddmmyyyy'),
aCdTerzo, aTiIstituzCommerc, aNewListaMovimenti, aUser, aTSnow);
if CNRCTB200.GETSEZIONEOPPOSTA(aSezMovimento) = CNRCTB200.IS_AVERE then
aVoceSopr := aVoceSoprP;
else
aVoceSopr := aVoceSoprA;
end if;
Dbms_Output.put_line ('CNRCTB204.buildChiusuraScrittura');
CNRCTB204.buildChiusuraScrittura(aScrittura.cd_cds,aEs,aScrittura.cd_unita_organizzativa,aVoceSopr,
To_Date('3112'||to_char(aEs), 'ddmmyyyy'), To_Date('3112'||to_char(aEs), 'ddmmyyyy'),
aCdTerzo,aTiIstituzCommerc,aNewListaMovimenti,aUser,aTSnow);
aScritturaNew := null;
aScritturaNew.CD_CDS:=aScrittura.cd_cds;
aScritturaNew.ESERCIZIO:=aEs;
aScritturaNew.CD_UNITA_ORGANIZZATIVA:=aScrittura.cd_unita_organizzativa;
aScritturaNew.ORIGINE_SCRITTURA:=CNRCTB200.ORIGINE_DOCUMENTO_AMM;
aScritturaNew.CD_TIPO_DOCUMENTO:=aDocTst.cd_tipo_documento;
aScritturaNew.CD_CAUSALE_COGE:=CNRCTB200.CAU_ANNULL_RIGHE_ES_CHIUSO;
-- La chiave del documento viene costruita per concatenazione delle componenti della chiave del buono di scarico
aScritturaNew.CD_COMP_DOCUMENTO:=null;
aScritturaNew.CD_CDS_DOCUMENTO:=aDocTst.cd_cds;
aScritturaNew.CD_UO_DOCUMENTO:=aDocTst.cd_unita_organizzativa;
aScritturaNew.PG_NUMERO_DOCUMENTO:=aDocTst.pg_numero_documento;
aScritturaNew.IM_SCRITTURA:=null; -- Impostato come totale di sezione in realizzazione della scrittura
-- 09.08.2006 data contabilizzazione = ultimo giorno dell'anno (scritture di annullamento documenti)
aScritturaNew.DT_CONTABILIZZAZIONE := To_Date('3112'||to_char(aEs), 'ddmmyyyy'); --trunc(aTSNow);
aScritturaNew.DT_PAGAMENTO:=null;
aScritturaNew.DT_CANCELLAZIONE:=null;
aScritturaNew.TI_SCRITTURA:=CNRCTB200.TI_SCRITTURA_SINGOLA;
aScritturaNew.CD_TERZO:=aCdTerzo;
aScritturaNew.STATO:=CNRCTB200.STATO_DEFINITIVO;
aScritturaNew.CD_DIVISA:=NULL;
aScritturaNew.COSTO_PLURIENNALE:=null; -- chi lo valorizza e come non è chiaro
aScritturaNew.PG_ENTE:=null; -- serve a rinumerare le scritture livello di ENTE
aScritturaNew.DS_SCRITTURA := 'Annullamento dettaglio documento esercizio chiuso';
aScritturaNew.PG_SCRITTURA_ANNULLATA:=null; -- codice della scrittura annullata in effettuazione storno
aScritturaNew.ATTIVA:='Y';
aScritturaNew.ESERCIZIO_DOCUMENTO_AMM:=aDocTst.esercizio;
aScritturaNew.DACR:=aTSNow;
aScritturaNew.UTCR:=aUser;
-- Registro la scrittura
Dbms_Output.put_line ('CNRCTB200.CREASCRITTCOGE');
CNRCTB200.CREASCRITTCOGE(aScritturaNew,aNewListaMovimenti);
End If;
End Loop;
--buildMovContrPEP (aListaMovimenti, aDocTst, aRigheAnn.cd_terzo, aUser, aTSNow);
--aScrittura := CNRCTB204.buildScrPEP(aDocTst, aRigheAnn.cd_terzo, aUser, aTSNow);
--CNRCTB200.CREASCRITTCOGE(aScrittura, aListaMovimenti);
/* fine */
End;
-- fine nuovo
procedure regDismBeneDurevoleCOGE(aTBS buono_carico_scarico_dett%rowtype, aUser varchar2, aTSNow date) is
aInventBene inventario_beni%rowtype;
aVoceEPMinusvalenza voce_ep%rowtype;
aVoceEPPlusvalenza voce_ep%rowtype;
aVoceEPPatrimNetto voce_ep%rowtype;
aCatGruppo CATEGORIA_GRUPPO_INVENT%rowtype;
aCatGruppoVoceEp CATEGORIA_GRUPPO_VOCE_EP%rowtype;
aVoceEPCG voce_ep%rowtype;
aVoceEPCGContr voce_ep%rowtype;
--aVoceEPCred voce_ep%rowtype;
aScrittura scrittura_partita_doppia%rowtype;
aListaMovimenti CNRCTB200.movimentiList;
aResiduo number(15,2);
aBS buono_carico_scarico_dett%rowtype;
isTrasferimento CHAR(1);
aRecAssTrasfBeni ASS_TRASFERIMENTO_BENI_INV%ROWTYPE;
ABuono_carico_scarico buono_carico_scarico%rowtype;
quote_storno number(15,2):=0;
ALTRI_SCARICHI number(15,2):=0;
begin
recParametriCNR := CNRUTL001.getRecParametriCnr(aTBS.esercizio);
-- Lettura con lock del buono di scarico dettaglio
select * into aBS
from buono_carico_scarico_dett bcs where
PG_INVENTARIO=aTBS.PG_INVENTARIO
and TI_DOCUMENTO=aTBS.TI_DOCUMENTO
and ESERCIZIO=aTBS.ESERCIZIO
and PG_BUONO_C_S=aTBS.PG_BUONO_C_S
and NR_INVENTARIO=aTBS.NR_INVENTARIO
and PROGRESSIVO=aTBS.PROGRESSIVO
for update nowait;
select * into ABuono_carico_scarico
from buono_carico_scarico where
PG_INVENTARIO=aTBS.PG_INVENTARIO
and TI_DOCUMENTO=aTBS.TI_DOCUMENTO
and ESERCIZIO=aTBS.ESERCIZIO
and PG_BUONO_C_S=aTBS.PG_BUONO_C_S
for update nowait;
-- Controllo se lo scarico è per trasferimento
isTrasferimento:=chkBuonoPerTrasferimento(aBS);
-- Selezione del bene
begin
select * into aInventBene from inventario_beni where
pg_inventario = aBS.pg_inventario
and nr_inventario = aBS.nr_inventario
and progressivo = aBS.progressivo
for update nowait;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Bene a inventario non trovato pg. inv.:'||aBS.pg_inventario||' nr.'||aBS.nr_inventario||' pg. acc.'||aBS.progressivo);
end;
-- Fix del 20040924 Richiesta 843
CNRCTB204.checkChiusuraEsercizio(aBS.esercizio, aInventBene.cd_cds);
if not (CNRCTB200.ISCHIUSURACOEPDEF(aBS.esercizio-1, aInventBene.cd_cds)='Y') then
IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente non è chiuso definitivamente per il cds: '||aInventBene.cd_cds);
end if;
begin
select * into aCatGruppo from CATEGORIA_GRUPPO_INVENT where
cd_categoria_gruppo = aInventBene.cd_categoria_gruppo;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Gruppo inventariale non trovato:'||aInventBene.cd_categoria_gruppo);
end;
BEGIN
if recParametriCNR.fl_nuovo_pdg='N' then
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_padre
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aBS.esercizio;
else
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_gruppo
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aBS.esercizio
and fl_default = 'Y';
end if;
EXCEPTION WHEN NO_DATA_FOUND THEN
IBMERR001.RAISE_ERR_GENERICO('Nessun conto economico associato a categoria:'||aCatGruppo.cd_categoria_gruppo);
END;
SELECT COUNT(*) INTO ALTRI_SCARICHI
FROM BUONO_CARICO_SCARICO_DETT
WHERE
pg_inventario = aInventBene.pg_inventario and
nr_inventario = aInventBene.nr_inventario and
progressivo = aInventBene.progressivo AND
TI_DOCUMENTO = 'S' AND
((PG_BUONO_C_S > ABS.PG_BUONO_C_S and
esercizio = aBS.esercizio) OR
ESERCIZIO > aBS.esercizio);
Begin
select abs(im_movimento_ammort) into quote_storno
from ammortamento_bene_inv
where
PG_INVENTARIO = aBS.PG_INVENTARIO
and PG_BUONO_S = aBS.PG_BUONO_C_S
and NR_INVENTARIO= aBS.NR_INVENTARIO
and PROGRESSIVO = aBS.PROGRESSIVO
and esercizio = aBS.esercizio
and fl_storno ='Y';
Exception when no_data_found then
quote_storno:=0;
end;
-- Selezione associativa beni per trasferimento
if isTrasferimento = 'Y' then
begin
select * into aRecAssTrasfBeni
from ass_trasferimento_beni_inv
where pg_inventario_origine = aInventBene.pg_inventario and
nr_inventario_origine = aInventBene.nr_inventario and
progressivo_origine = aInventBene.progressivo;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO
('Non trovata associativa per scarico da trasferimento. Bene: '|| aInventBene.pg_inventario || '-' || aInventBene.nr_inventario || '-' ||aInventBene.progressivo);
end;
end if;
-- Costruzione scrittura
-- crediti vs/clienti
--aVoceEPCred:=CNRCTB002.getVoceEp(aCatGruppoVoceEp.esercizio,'A.06.005');
aVoceEPCG:=CNRCTB002.getVoceEp(aCatGruppoVoceEp.esercizio,aCatGruppoVoceEp.cd_voce_ep);
if (aCatGruppoVoceEp.cd_voce_ep_contr is not null) then
aVoceEPCGContr:=CNRCTB002.getVoceEp(aCatGruppoVoceEp.esercizio,aCatGruppoVoceEp.cd_voce_ep_contr);
end if;
aVoceEPMinusvalenza:=CNRCTB002.getVoceEpMinusval(aCatGruppoVoceEp.ESERCIZIO,aCatGruppo.cd_categoria_gruppo,null);
aVoceEPPlusvalenza:=CNRCTB002.getVoceEpPlusval(aCatGruppoVoceEp.ESERCIZIO,aCatGruppo.cd_categoria_gruppo,null);
if (isTrasferimento = 'Y') Then
aVoceEPPatrimNetto:=CNRCTB002.getVoceEpPatrimNetto(aBS.esercizio);
aResiduo:=aRecAssTrasfBeni.valore_iniziale + aRecAssTrasfBeni.variazione_piu - aRecAssTrasfBeni.variazione_meno - aRecAssTrasfBeni.valore_ammortizzato;
if aResiduo > 0 then
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPPatrimNetto,aResiduo,CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
Elsif aResiduo < 0 Then
-- 18/01/2006 rp aggiunta gestione storno voce patrimoniale
Cnrctb204.buildMovPrinc(aInventBene.cd_cds,ABS.ESERCIZIO,aInventBene.cd_unita_organizzativa,aVoceEPPatrimNetto,aResiduo*(-1),Cnrctb200.IS_AVERE,TRUNC(ABuono_carico_scarico.DATA_REGISTRAZIONE),TRUNC(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
end if;
if aRecAssTrasfBeni.valore_ammortizzato > 0 then
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCGContr,aRecAssTrasfBeni.valore_ammortizzato,CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
end if;
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCG,aRecAssTrasfBeni.valore_iniziale + aRecAssTrasfBeni.variazione_piu - aRecAssTrasfBeni.variazione_meno,CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE), Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
Elsif (aBS.stato_coge_quote='N') Then
if (aInventBene.fl_totalmente_scaricato='Y' AND ALTRI_SCARICHI = 0 ) Then
--if (Nvl(aInventBene.valore_alienazione,0)=0) then
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCGContr,nvl(aInventBene.valore_ammortizzato,0),CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPPlusvalenza,nvl(aInventBene.valore_ammortizzato,0),CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
/*Else caso gestito dalle contabilizzazioni delle fatture attive e documenti generici attivi
aResiduo:=aInventBene.valore_iniziale + aInventBene.variazione_piu - (aInventBene.variazione_meno-(aBS.quantita*aBS.valore_unitario)) - nvl(aInventBene.valore_ammortizzato,0)-Nvl(aInventBene.valore_alienazione,0);
if aResiduo > 0 Then
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPMinusvalenza,aResiduo,CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCG,aResiduo+Nvl(aInventBene.valore_ammortizzato,0),CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
Elsif aResiduo <0 Then
-- 18/01/2006 rp aggiunto recupero ed uso voce di plusvalenza
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPPlusvalenza,aResiduo*(-1),CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
If (aResiduo*(-1) > Nvl(aInventBene.valore_ammortizzato,0)) Then
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCG,(aResiduo+Nvl(aInventBene.valore_ammortizzato,0))*(-1),CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
else
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCG,(-Nvl(aInventBene.valore_ammortizzato,0)- aResiduo)*(-1),CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
end If;
end if;
If (Nvl(aInventBene.valore_ammortizzato,0)!=0) Then
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCGContr,Nvl(aInventBene.valore_ammortizzato,0),CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
End If;
end If;*/
else
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCGContr,quote_storno,CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPPlusvalenza,quote_storno,CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
end If;
update buono_carico_scarico_dett set
stato_coge_quote = CNRCTB100.STATO_COEP_CON,
pg_ver_rec = pg_ver_rec+1
where
pg_inventario = aBS.pg_inventario
and ti_documento = aBS.ti_documento
and esercizio = aBS.esercizio
and pg_buono_c_s = aBS.pg_buono_c_s
and nr_inventario = aBS.nr_inventario
and progressivo = aBS.progressivo;
ElsIf(aBS.stato_coge In (CNRCTB100.STATO_COEP_INI,CNRCTB100.STATO_COEP_DA_RIP)) Then
if (aInventBene.fl_totalmente_scaricato='Y' AND ALTRI_SCARICHI=0) Then
--dbms_output.put_line('scaricato comp');
-- 05/12/2006 non considero il valore di alienazione che viene valorizzato ad oggi solo per le vendite da fattura attiva e da doc.gen. attivo
-- aResiduo:=aInventBene.valore_iniziale + aInventBene.variazione_piu - (aInventBene.variazione_meno-(aBS.quantita*aBS.valore_unitario)) - nvl(aInventBene.valore_ammortizzato,0)-Nvl(aInventBene.valore_alienazione,0);
aResiduo:=aInventBene.valore_iniziale + aInventBene.variazione_piu - (aInventBene.variazione_meno-(aBS.quantita*aBS.valore_unitario)) - nvl(aInventBene.valore_ammortizzato,0);
if aResiduo > 0 Then
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPMinusvalenza,aResiduo,CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
Elsif aResiduo <0 Then
-- 18/01/2006 rp aggiunto recupero ed uso voce di plusvalenza
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPPlusvalenza,aResiduo*(-1),CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
end if;
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCG,aInventBene.valore_iniziale + aInventBene.variazione_piu - (aInventBene.variazione_meno-(aBS.quantita*aBS.valore_unitario)),CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
/*
-- crediti vs/Clienti
if nvl(aInventBene.valore_alienazione,0) > 0 then
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCred,aInventBene.valore_alienazione,CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
End If;
*/
if nvl(aInventBene.valore_ammortizzato,0) > 0 then
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCGContr,nvl(aInventBene.valore_ammortizzato,0),CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
End If;
else -- scarico parziale
--dbms_output.put_line('scaricato parz');
aVoceEPMinusvalenza:=CNRCTB002.getVoceEpMinusval(aBS.esercizio,aCatGruppo.cd_categoria_gruppo,null);
aVoceEPPlusvalenza:=CNRCTB002.getVoceEpPlusval(aBS.esercizio,aCatGruppo.cd_categoria_gruppo,null);
aResiduo:=(aBS.quantita*aBS.valore_unitario)- quote_storno;
--dbms_output.put_line('residuo '||aresiduo);
if aResiduo > 0 Then
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPMinusvalenza,aResiduo,CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
Elsif aResiduo <0 Then
-- 18/01/2006 rp aggiunto recupero ed uso voce di plusvalenza
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPPlusvalenza,aResiduo*(-1),CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
end if;
--dbms_output.put_line('valore_uni '||abs.valore_unitario);
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCG,(aBS.quantita*aBS.valore_unitario),CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
--dbms_output.put_line('quote_storno '||quote_storno);
if quote_storno > 0 then
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCGContr,quote_storno,CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
end if;
end if;
End if;
aScrittura:=null;
aScrittura.CD_CDS:=aInventBene.cd_cds;
aScrittura.ESERCIZIO:=aBS.esercizio;
aScrittura.CD_UNITA_ORGANIZZATIVA:=aInventBene.cd_unita_organizzativa;
aScrittura.ORIGINE_SCRITTURA:=CNRCTB200.ORIGINE_DOCUMENTO_AMM;
aScrittura.CD_TIPO_DOCUMENTO:=TI_DOC_FITT_SCR_BENE;
if isTrasferimento = 'Y' then
aScrittura.CD_CAUSALE_COGE:=CNRCTB200.CAU_SCA_BENE_DUREVOLE_TRASF;
else
aScrittura.CD_CAUSALE_COGE:=CNRCTB200.CAU_DISMISSIONE_BENE_DURVOLE;
end if;
-- La chiave del documento viene costruita per concatenazione delle componenti della chiave del buono di scarico
aScrittura.CD_COMP_DOCUMENTO:=aBS.pg_inventario||'.'||aBS.ti_documento||'.'||aBS.esercizio||'.'||aBS.pg_buono_c_s||'.'||aBS.nr_inventario||'.'||aBS.progressivo;
aScrittura.CD_CDS_DOCUMENTO:=aInventBene.cd_cds;
aScrittura.CD_UO_DOCUMENTO:=aInventBene.cd_unita_organizzativa;
aScrittura.PG_NUMERO_DOCUMENTO:=NULL;
aScrittura.IM_SCRITTURA:=null; -- Impostato come totale di sezione in realizzazione della scrittura
aScrittura.DT_CONTABILIZZAZIONE := Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE); --TRUNC(aTSNow); -- stani
aScrittura.DT_PAGAMENTO:=null;
aScrittura.DT_CANCELLAZIONE:=null;
aScrittura.TI_SCRITTURA:=CNRCTB200.TI_SCRITTURA_SINGOLA;
aScrittura.CD_TERZO:=0;
aScrittura.STATO:=CNRCTB200.STATO_DEFINITIVO;
aScrittura.CD_DIVISA:=NULL;
aScrittura.COSTO_PLURIENNALE:=null; -- chi lo valorizza e come non è chiaro
aScrittura.PG_ENTE:=null; -- serve a rinumerare le scritture livello di ENTE
aScrittura.DS_SCRITTURA := 'Dismissione bene durevole '||
aBS.pg_inventario||'/'||aBS.ti_documento||'/'||aBS.esercizio||'/'||aBS.pg_buono_c_s||'/'||aBS.nr_inventario||'/'||aBS.progressivo;
aScrittura.PG_SCRITTURA_ANNULLATA:=null; -- codice della scrittura annullata in effettuazione storno
aScrittura.ATTIVA:='Y';
aScrittura.ESERCIZIO_DOCUMENTO_AMM:=aBS.esercizio;
aScrittura.DACR:=aTSNow;
aScrittura.UTCR:=aUser;
-- Registro la scrittura
CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimenti);
-- Aggiorno lo stato coge del buono di scarico
update buono_carico_scarico_dett set
stato_coge = CNRCTB100.STATO_COEP_CON,
pg_ver_rec = pg_ver_rec+1
where
pg_inventario = aBS.pg_inventario
and ti_documento = aBS.ti_documento
and esercizio = aBS.esercizio
and pg_buono_c_s=aBS.pg_buono_c_s
and nr_inventario = aBS.nr_inventario
and progressivo = aBS.progressivo
And STATO_COGE In(CNRCTB100.STATO_COEP_INI,CNRCTB100.STATO_COEP_DA_RIP);
end;
procedure regCaricBeneDurevoleCOGE(aTBS buono_carico_scarico_dett%rowtype, aUser varchar2, aTSNow date) is
aInventBene inventario_beni%rowtype;
aCatGruppo CATEGORIA_GRUPPO_INVENT%rowtype;
aCatGruppoVoceEp CATEGORIA_GRUPPO_VOCE_EP%rowtype;
aVoceEPCG voce_ep%rowtype;
aVoceEPSoprAtt voce_ep%rowtype;
aVoceEPPatrimNetto voce_ep%rowtype;
aVoceEPCGContr voce_ep%rowtype;
aScrittura scrittura_partita_doppia%rowtype;
aListaMovimenti CNRCTB200.movimentiList;
aScritturaTmp scrittura_partita_doppia%rowtype;
aListaM CNRCTB200.movimentiList;
aImporto number(15,2);
aBS buono_carico_scarico_dett%rowtype;
aListaVecchieScritture CNRCTB200.scrittureList;
aListaNuoveScritture CNRCTB200.scrittureList;
isTrasferimento CHAR(1);
aRecAssTrasfBeni ASS_TRASFERIMENTO_BENI_INV%ROWTYPE;
aCausaleCoge VARCHAR2(50);
ABuono_carico_scarico buono_carico_scarico%rowtype;
begin
recParametriCNR := CNRUTL001.getRecParametriCnr(aTBS.ESERCIZIO);
-- Lettura con lock del buono di carico dettaglio
select * into aBS from buono_carico_scarico_dett bcs where
PG_INVENTARIO=aTBS.PG_INVENTARIO
and TI_DOCUMENTO=aTBS.TI_DOCUMENTO
and ESERCIZIO=aTBS.ESERCIZIO
and PG_BUONO_C_S=aTBS.PG_BUONO_C_S
and NR_INVENTARIO=aTBS.NR_INVENTARIO
and PROGRESSIVO=aTBS.PROGRESSIVO
for update nowait;
select * into ABuono_carico_scarico
from buono_carico_scarico where
PG_INVENTARIO=aTBS.PG_INVENTARIO
and TI_DOCUMENTO=aTBS.TI_DOCUMENTO
and ESERCIZIO=aTBS.ESERCIZIO
and PG_BUONO_C_S=aTBS.PG_BUONO_C_S
for update nowait;
-- Controllo se lo scarico è per trasferimento
isTrasferimento:=chkBuonoPerTrasferimento(aBS);
-- Selezione del bene
begin
select * into aInventBene from inventario_beni where
pg_inventario = aBS.pg_inventario
and nr_inventario = aBS.nr_inventario
and progressivo = aBS.progressivo
for update nowait;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Bene a inventario non trovato pg. inv.:'||aBS.pg_inventario||' nr.'||aBS.nr_inventario||' pg. acc.'||aBS.progressivo);
end;
-- Fix del 20040924 Richiesta 843
CNRCTB204.checkChiusuraEsercizio(aBS.esercizio, aInventBene.cd_cds);
if not (CNRCTB200.ISCHIUSURACOEPDEF(aBS.esercizio-1, aInventBene.cd_cds)='Y') then
IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente non è chiuso definitivamente per il cds: '||aInventBene.cd_cds);
end if;
-- Memorizzo la causale coge
if isTrasferimento = 'Y' then
aCausaleCoge:=CNRCTB200.CAU_CAR_BENE_DUREVOLE_TRASF;
else
aCausaleCoge:=CNRCTB200.CAU_CARICO_BENE_DURVOLE;
end if;
-- UNDO eventuale della scrittura esistente
savepoint CNRCTB205_SP_002;
-- cerca eventuali scritture gia registrate per il documento
begin
select * into aScritturaTmp from scrittura_partita_doppia where
CD_COMP_DOCUMENTO=aBS.pg_inventario||'.'||aBS.ti_documento||'.'||aBS.esercizio||'.'||aBS.pg_buono_c_s||'.'||aBS.nr_inventario||'.'||aBS.progressivo
and CD_CDS=aInventBene.cd_cds
and ESERCIZIO=aBS.esercizio
and CD_UNITA_ORGANIZZATIVA=aInventBene.cd_unita_organizzativa
and ORIGINE_SCRITTURA=CNRCTB200.ORIGINE_DOCUMENTO_AMM
and CD_TIPO_DOCUMENTO=TI_DOC_FITT_CAR_BENE
and CD_CAUSALE_COGE=aCausaleCoge
for update nowait;
CNRCTB200.getScritturaEPLOCK(aScritturaTmp,aListaM);
aListaVecchieScritture(1):=aScritturaTmp;
CNRCTB200.creaScrittStornoCoge(aScritturaTmp,aListaM, aUser, aTSNow);
exception when NO_DATA_FOUND then
null;
end;
begin
select * into aCatGruppo from CATEGORIA_GRUPPO_INVENT where
cd_categoria_gruppo = aInventBene.cd_categoria_gruppo;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Gruppo inventariale non trovato:'||aInventBene.cd_categoria_gruppo);
end;
BEGIN
if recParametriCNR.fl_nuovo_pdg='N' then
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_padre
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aBS.esercizio;
else
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_gruppo
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aBS.esercizio
and fl_default = 'Y';
end if;
EXCEPTION WHEN NO_DATA_FOUND THEN
IBMERR001.RAISE_ERR_GENERICO('Nessun conto economico associato a categoria:'||aCatGruppo.cd_categoria_gruppo);
END;
-- Selezione associativa beni per trasferimento
if isTrasferimento = 'Y' then
begin
select * into aRecAssTrasfBeni
from ass_trasferimento_beni_inv
where pg_inventario_dest = aInventBene.pg_inventario and
nr_inventario_dest = aInventBene.nr_inventario and
progressivo_dest = aInventBene.progressivo;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO
('Non trovata associativa per carico da trasferimento. Bene: '|| aInventBene.pg_inventario || '-' || aInventBene.nr_inventario || '-' ||aInventBene.progressivo);
end;
end if;
-- Costruzione scrittura
aVoceEPCG:=CNRCTB002.getVoceEp(aCatGruppoVoceEp.esercizio,aCatGruppoVoceEp.cd_voce_ep);
if isTrasferimento = 'Y' then
Dbms_Output.put_line('valore '||(aRecAssTrasfBeni.valore_iniziale + aRecAssTrasfBeni.variazione_piu - aRecAssTrasfBeni.variazione_meno)|| '-' ||aCatGruppoVoceEp.cd_categoria_gruppo);
if(aCatGruppoVoceEp.cd_voce_ep_contr is not null or aRecAssTrasfBeni.valore_ammortizzato != 0 ) then
aVoceEPCGContr:=CNRCTB002.getVoceEp(aCatGruppoVoceEp.esercizio,aCatGruppoVoceEp.cd_voce_ep_contr);
end if;
aVoceEPPatrimNetto:=CNRCTB002.getVoceEpPatrimNetto(aBS.esercizio);
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCG,aRecAssTrasfBeni.valore_iniziale + aRecAssTrasfBeni.variazione_piu - aRecAssTrasfBeni.variazione_meno,CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
--Dbms_Output.put_line('amm '||aRecAssTrasfBeni.valore_ammortizzato);
if aRecAssTrasfBeni.valore_ammortizzato > 0 then
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCGContr,aRecAssTrasfBeni.valore_ammortizzato,CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
end if;
aImporto:=aRecAssTrasfBeni.valore_iniziale + aRecAssTrasfBeni.variazione_piu - aRecAssTrasfBeni.variazione_meno - aRecAssTrasfBeni.valore_ammortizzato;
--Dbms_Output.put_line('saldo '||(aRecAssTrasfBeni.valore_iniziale + aRecAssTrasfBeni.variazione_piu - aRecAssTrasfBeni.variazione_meno-aRecAssTrasfBeni.valore_ammortizzato));
if aImporto > 0 then
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPPatrimNetto,aImporto,CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
Elsif aImporto < 0 Then
-- 27/01/2006 rp aggiunta gestione storno voce patrimoniale
Cnrctb204.buildMovPrinc(aInventBene.cd_cds,ABS.ESERCIZIO,aInventBene.cd_unita_organizzativa,aVoceEPPatrimNetto,aImporto*(-1),Cnrctb200.IS_DARE,TRUNC(ABuono_carico_scarico.DATA_REGISTRAZIONE),TRUNC(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
end if;
Else
aVoceEPSoprAtt:=CNRCTB002.GETVOCEEPSOPRAVVATTIVE(aBS.esercizio);
aImporto:=aBS.quantita*aBS.valore_unitario;
-- Dbms_Output.put_line('no trasf importo '||aImporto);
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPCG,aImporto,CNRCTB200.IS_DARE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
--Dbms_Output.put_line('no trasf importo '||aImporto);
-- 30/12/2004 METTEVA LA DATA DI SISTEMA COME DA COMPETENZA/A COMPETENZA SULLE REGISTRAZIONI DI ECONOMICA
CNRCTB204.buildMovPrinc(aInventBene.cd_cds,aBS.esercizio,aInventBene.cd_unita_organizzativa,aVoceEPSoprAtt,aImporto,CNRCTB200.IS_AVERE,Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE),0,
aInventBene.TI_COMMERCIALE_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
end if;
aScrittura:=null;
aScrittura.CD_CDS:=aInventBene.cd_cds;
aScrittura.ESERCIZIO:=aBS.esercizio;
aScrittura.CD_UNITA_ORGANIZZATIVA:=aInventBene.cd_unita_organizzativa;
aScrittura.ORIGINE_SCRITTURA:=CNRCTB200.ORIGINE_DOCUMENTO_AMM;
aScrittura.CD_TIPO_DOCUMENTO:=TI_DOC_FITT_CAR_BENE;
aScrittura.CD_CAUSALE_COGE:=aCausaleCoge;
-- La chiave del documento viene costruita per concatenazione delle componenti della chiave del buono di scarico
aScrittura.CD_COMP_DOCUMENTO:=aBS.pg_inventario||'.'||aBS.ti_documento||'.'||aBS.esercizio||'.'||aBS.pg_buono_c_s||'.'||aBS.nr_inventario||'.'||aBS.progressivo;
aScrittura.CD_CDS_DOCUMENTO:=aInventBene.cd_cds;
aScrittura.CD_UO_DOCUMENTO:=aInventBene.cd_unita_organizzativa;
aScrittura.PG_NUMERO_DOCUMENTO:=NULL;
aScrittura.IM_SCRITTURA := null; -- Impostato come totale di sezione in realizzazione della scrittura
aScrittura.DT_CONTABILIZZAZIONE := Trunc(ABuono_carico_scarico.DATA_REGISTRAZIONE); --TRUNC(aTSNow); -- stani
aScrittura.DT_PAGAMENTO:=null;
aScrittura.DT_CANCELLAZIONE:=null;
aScrittura.TI_SCRITTURA:=CNRCTB200.TI_SCRITTURA_SINGOLA;
aScrittura.CD_TERZO:=0;
aScrittura.STATO:=CNRCTB200.STATO_DEFINITIVO;
aScrittura.CD_DIVISA:=NULL;
aScrittura.COSTO_PLURIENNALE:=null; -- chi lo valorizza e come non è chiaro
aScrittura.PG_ENTE:=null; -- serve a rinumerare le scritture livello di ENTE
aScrittura.DS_SCRITTURA := 'Carico bene durevole '||
aBS.pg_inventario||'/'||aBS.ti_documento||'/'||aBS.esercizio||'/'||aBS.pg_buono_c_s||'/'||aBS.nr_inventario||'/'||aBS.progressivo;
aScrittura.PG_SCRITTURA_ANNULLATA:=null; -- codice della scrittura annullata in effettuazione storno
aScrittura.ATTIVA:='Y';
aScrittura.ESERCIZIO_DOCUMENTO_AMM:=aBS.esercizio;
aScrittura.DACR:=aTSNow;
aScrittura.UTCR:=aUser;
-- Registro la scrittura
CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimenti);
-- Verifica di effettiva modifica della scrittura
aListaNuoveScritture(1):=aScrittura;
if not CNRCTB200.isModificata(aListaVecchieScritture, aListaNuoveScritture) then
rollback to savepoint CNRCTB205_SP_002;
end if;
-- Aggiorno lo stato coge del buono di scarico
update buono_carico_scarico_dett set
stato_coge = CNRCTB100.STATO_COEP_CON,
pg_ver_rec = pg_ver_rec+1
where
pg_inventario = aBS.pg_inventario
and ti_documento = aBS.ti_documento
and esercizio = aBS.esercizio
and pg_buono_c_s=aBS.pg_buono_c_s
and nr_inventario = aBS.nr_inventario
and progressivo = aBS.progressivo;
end;
procedure regMigrazioneBeniCoge
(aEs NUMBER,
aCdCds VARCHAR2,
aCdUo VARCHAR2,
aCdCategoriaGruppo VARCHAR2,
aValoreAssestato NUMBER,
aValoreAmmortizzato NUMBER,
aUser VARCHAR2,
aTSNow DATE,
astato CHAR) IS
aCatGruppo CATEGORIA_GRUPPO_INVENT%rowtype;
aCatGruppoVoceEp CATEGORIA_GRUPPO_VOCE_EP%rowtype;
aVoceEPCG voce_ep%rowtype;
aVoceFondoAmm voce_ep%rowtype;
aVoceEPMigraBeni voce_ep%rowtype;
aScrittura scrittura_partita_doppia%rowtype;
aListaMovimenti CNRCTB200.movimentiList;
aScritturaTmp scrittura_partita_doppia%rowtype;
aListaM CNRCTB200.movimentiList;
aListaVecchieScritture CNRCTB200.scrittureList;
aListaNuoveScritture CNRCTB200.scrittureList;
begin
recParametriCNR := CNRUTL001.getRecParametriCnr(aEs);
-- Fix del 20040924 Richiesta 843
CNRCTB204.checkChiusuraEsercizio(aEs, aCdCds);
if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs-1, aCdCds)='Y') then
IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente '||To_Char(aEs-1)||' non è chiuso definitivamente per il cds: ' || aCdCds);
end if;
begin
select * into aCatGruppo from CATEGORIA_GRUPPO_INVENT where
cd_categoria_gruppo = aCdCategoriaGruppo;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Gruppo inventariale non trovato:'||aCdCategoriaGruppo);
end;
BEGIN
if recParametriCNR.fl_nuovo_pdg='N' then
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_padre
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aEs;
else
SELECT * INTO aCatGruppoVoceEp FROM CATEGORIA_GRUPPO_VOCE_EP WHERE
cd_categoria_gruppo = aCatGruppo.cd_categoria_gruppo
AND sezione = CNRCTB200.IS_AVERE
AND ESERCIZIO=aEs
and fl_default = 'Y';
end if;
EXCEPTION WHEN NO_DATA_FOUND THEN
IBMERR001.RAISE_ERR_GENERICO('Nessun conto economico associato a categoria:'||aCatGruppo.cd_categoria_gruppo);
END;
aVoceEPCG := CNRCTB002.getVoceEp(aCatGruppoVoceEp.esercizio,aCatGruppoVoceEp.cd_voce_ep); -- A.02.004
if (aCatGruppoVoceEp.cd_voce_ep_contr is not null) then
aVoceFondoAmm :=
CNRCTB002.getVoceEp(aCatGruppoVoceEp.esercizio,aCatGruppoVoceEp.cd_voce_ep_contr); -- P.01.004
end if;
aVoceEPMigraBeni := CNRCTB002.getVoceEpMigraBeni(aEs); -- X.01.001
If (aStato ='N') Then
CNRCTB204.buildMovPrinc(aCdCds,aEs,aCdUo, aVoceEPCG, aValoreAssestato, CNRCTB200.IS_DARE,To_Date('3112'||aEs, 'ddmmyyyy'),To_Date('3112'||aEs, 'ddmmyyyy'),0,CNRCTB100.TI_ISTITUZIONALE,aListaMovimenti,aUser,aTSnow);
IF aValoreAmmortizzato = 0 THEN
CNRCTB204.buildMovPrinc(aCdCds,aEs,aCdUo, aVoceEPMigraBeni, aValoreAssestato, CNRCTB200.IS_AVERE,To_Date('3112'||aEs, 'ddmmyyyy'),To_Date('3112'||aEs, 'ddmmyyyy'),0,CNRCTB100.TI_ISTITUZIONALE,aListaMovimenti,aUser,aTSnow);
ELSE
CNRCTB204.buildMovPrinc(aCdCds,aEs,aCdUo, aVoceFondoAmm, aValoreAmmortizzato, CNRCTB200.IS_AVERE,To_Date('3112'||aEs, 'ddmmyyyy'),To_Date('3112'||aEs, 'ddmmyyyy'),0,CNRCTB100.TI_ISTITUZIONALE,aListaMovimenti,aUser,aTSnow);
If (aValoreAssestato - aValoreAmmortizzato!=0) Then
CNRCTB204.buildMovPrinc(aCdCds,aEs,aCdUo, aVoceEPMigraBeni, aValoreAssestato - aValoreAmmortizzato, CNRCTB200.IS_AVERE,To_Date('3112'||aEs, 'ddmmyyyy'),To_Date('3112'||aEs, 'ddmmyyyy'),0,CNRCTB100.TI_ISTITUZIONALE,aListaMovimenti,aUser,aTSnow);
End If;
END IF;
End If;
aScrittura:=null;
aScrittura.CD_CDS:=aCdCds;
aScrittura.ESERCIZIO:=aEs;
aScrittura.CD_UNITA_ORGANIZZATIVA:=aCdUo;
aScrittura.ORIGINE_SCRITTURA:=CNRCTB200.ORIGINE_MIGRA_BENI;
aScrittura.CD_TIPO_DOCUMENTO:=TI_DOC_FITT_MIGRA_BENE;
aScrittura.CD_CAUSALE_COGE:=CNRCTB200.CAU_MIGRAZIONE_BENI;
-- La chiave del documento viene costruita per concatenazione dei riferimenti al cds, uo e categoria gruppo
aScrittura.CD_COMP_DOCUMENTO:=aCdCds||'.'||aCdUo||'.'||aCdCategoriaGruppo;
aScrittura.CD_CDS_DOCUMENTO:=aCdCds;
aScrittura.CD_UO_DOCUMENTO:=aCdUo;
aScrittura.PG_NUMERO_DOCUMENTO:=NULL;
aScrittura.IM_SCRITTURA:=null; -- Impostato come totale di sezione in realizzazione della scrittura
-- 09.08.2006 data contabilizzazione = primo giorno dell'anno (migrazione)
aScrittura.DT_CONTABILIZZAZIONE := To_Date('0101'||aEs, 'ddmmyyyy'); -- TRUNC(aTSNow); -- stani
aScrittura.DT_PAGAMENTO:=null;
aScrittura.DT_CANCELLAZIONE:=null;
aScrittura.TI_SCRITTURA:=CNRCTB200.TI_SCRITTURA_SINGOLA;
aScrittura.CD_TERZO:=0;
aScrittura.STATO:=CNRCTB200.STATO_DEFINITIVO;
aScrittura.CD_DIVISA:=NULL;
aScrittura.COSTO_PLURIENNALE:=null; -- chi lo valorizza e come non è chiaro
aScrittura.PG_ENTE:=null; -- serve a rinumerare le scritture livello di ENTE
aScrittura.DS_SCRITTURA := 'Scrittura da migrazione beni '||aCdCds||'/'||aCdUo||'/'||aCdCategoriaGruppo;
aScrittura.PG_SCRITTURA_ANNULLATA:=null; -- codice della scrittura annullata in effettuazione storno
aScrittura.ATTIVA:='Y';
aScrittura.ESERCIZIO_DOCUMENTO_AMM:=aEs;
aScrittura.DACR:=aTSNow;
aScrittura.UTCR:=aUser;
-- Registro la scrittura
CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimenti);
-- Aggiorno lo stato coge dei record di CNR_INVENTARIO_BENI_MIG
UPDATE buono_carico_scarico_dett
SET stato_coge = CNRCTB100.STATO_COEP_CON
WHERE esercizio = aEs AND
ti_documento = 'C' and
stato_coge IN (CNRCTB100.STATO_COEP_INI,CNRCTB100.STATO_COEP_DA_RIP) and
(pg_inventario,nr_inventario,progressivo) in
(select pg_inventario,nr_inventario,progressivo from inventario_beni where
cd_categoria_gruppo = aCdCategoriaGruppo AND
cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUo And
buono_carico_scarico_dett.dacr Like inventario_beni.dacr And
esercizio_carico_bene = aEs and
fl_migrato = 'Y');
end;
function getDesc(aLiqIva liquidazione_iva%rowtype) return varchar2 is
begin
return 'Liquidazione mensile IVA di tipo '||aLiqIva.tipo_liquidazione||' es:'||aLiqIva.esercizio||' cds:'||aLiqIva.cd_cds||' uo:'||aLiqIva.cd_unita_organizzativa||' periodo:'||to_char(aLiqIva.dt_inizio,'DD/MM/YYYY')||'-'||to_char(aLiqIva.dt_fine,'DD/MM/YYYY');
end;
Procedure regLiqIvaMensileCOGE(aEs number, aCds varchar2, aUO varchar2, aTipo char, aDtDa date, aDtA date, aUser varchar2) is
aLiqIva liquidazione_iva%rowtype;
aVoceDebVersoErario voce_ep%rowtype;
aVoceEarioCIVA voce_ep%rowtype;
aVoceIvaDebito voce_ep%rowtype;
aVoceIvaCredito voce_ep%rowtype;
aVoceBancaCds voce_ep%rowtype;
aVoceCostoIvaNonDetraibile voce_ep%rowtype;
aVoceRicavoIvaNonDetraibile voce_ep%rowtype;
aGenRiga documento_generico_riga%rowtype;
aGen documento_generico%rowtype;
aTSNow date;
aListaMovimenti CNRCTB200.movimentiList;
aScrittura scrittura_partita_doppia%rowtype;
aScritturaEnte scrittura_partita_doppia%rowtype;
aListaMovimentiEnte CNRCTB200.movimentiList;
aDtContabil date;
aUOVERSIVA unita_organizzativa%rowtype;
aUOVERSCENTRO unita_organizzativa%rowtype;
aUOENTE unita_organizzativa%rowtype;
aPK2String varchar2(50);
aCdTerzo number(8);
isVersamentoCentro boolean;
IST_COMM_LIQ MOVIMENTO_COGE.TI_ISTITUZ_COMMERC%Type;
DaData date:=null;
AData date:=null;
voce varchar2(30);
Begin
Dbms_Output.PUT_LINE ('ENTRO IN regLiqIvaMensileCOGE');
If aEs is Null Or aCds is Null Or aUO is Null Or aTipo is Null Or aDtDa is Null Or aDtA is Null Or
aUser is Null Then
IBMERR001.RAISE_ERR_GENERICO('Parametri per registrazione economica liquidazione mensile IVA ente non specificati');
End if;
-- Fix del 20040924 Richiesta 843
CNRCTB204.checkChiusuraEsercizio(aEs, aCds);
Dbms_Output.PUT_LINE ('DOPO checkChiusuraEsercizio');
-- L'esercizio economico precedente deve essere chiuso definitivamente
if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs-1, aCds)='Y') then
IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente '||To_Char(aEs-1)||' non è chiuso definitivamente per il cds: '||aCds);
end if;
aTSNow:=sysdate;
-- Estrazione dell'UO di versamento IVA
aUOVERSCENTRO:=CNRCTB020.getUOVersIVA(aEs);
aUOENTE:=CNRCTB020.getUOENTE(aEs);
recParametriCnr:=CNRUTL001.getRecParametriCnr(aEs);
Begin
Select *
Into aLiqIva
From liquidazione_iva
Where esercizio = aEs And
cd_cds = aCds And
cd_unita_organizzativa = aUO And
tipo_liquidazione = aTipo And
dt_inizio = aDtDa And
dt_fine = aDtA And
report_id = 0
For Update nowait;
-- DERIVO IL TIPO ISTITUZIONALE/COMMERCIALE DELLA SCRITTURA CHE VERRA' A PARTIRE DAL TIPO_LIQUIDAZIONE:
-- SE "C = Sezionali commerciali" ALLORA E' COMMERCIALE
-- SE "I = Sezionali istituzionali intraue" OPPURE "S = Sezionali istituzionali San Marino senza IVA"
-- ALLORA E' ISTITUZIONALE
Dbms_Output.PUT_LINE ('TROVATA LIQUIDAZIONE_IVA');
If aLiqIva.TIPO_LIQUIDAZIONE = 'C' Then
IST_COMM_LIQ := 'C';
Elsif aLiqIva.TIPO_LIQUIDAZIONE In ('I', 'S', 'X', 'P') Then
IST_COMM_LIQ := 'I';
End If;
Exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO(getDesc(aLiqIva)||' non trovata.');
End;
if aLiqIva.cd_unita_organizzativa=aUOENTE.cd_unita_organizzativa Then
aUOVERSIVA:=aUOVERSCENTRO;
isVersamentoCentro:=true;
-- Modifica del 22/04/2004
-- la scrittura che gira il conto erario IVA sulla banca viene fatta sul mandato di versamento
-- del centro e quindi la gestione non è più fatta a livello di questo metodo
Dbms_Output.PUT_LINE ('ESCE 1');
return;
else
aUOVERSIVA:=CNRCTB020.getUOValida(aLiqIva.esercizio,aLiqIva.cd_unita_organizzativa);
isVersamentoCentro:=false;
end if;
-- Verifica che le scritture non siano già state fatte
aPK2String:=CNRCTB204.pk2String(aLiqIva);
For aTSCR in (Select *
From scrittura_partita_doppia
Where esercizio = aEs And
cd_cds= aUOVERSIVA.cd_unita_padre And
cd_unita_organizzativa = aUOVERSIVA.cd_unita_organizzativa And
origine_scrittura = CNRCTB200.ORIGINE_LIQUID_IVA And
cd_comp_documento = aPK2String
For Update nowait) Loop
IBMERR001.RAISE_ERR_GENERICO(getDesc(aLiqIva)||': Scrittura già eseguita.');
End Loop;
aDtContabil := trunc(aTSNow);
aCdTerzo := 0;
if(recParametriCNR.fl_tesoreria_unica='N') then
-- Estrazione dei dati di versamento (doc generico) se esistono
Begin
Dbms_Output.PUT_LINE ('CERCA DOC GEN');
Select *
Into aGen
From documento_generico
Where cd_tipo_documento_amm = aLiqIva.cd_tipo_documento And
esercizio = aLiqIva.esercizio_doc_amm And
cd_cds= aLiqIva.cd_cds_doc_amm And
cd_unita_organizzativa = aLiqIva.cd_uo_doc_amm And
pg_documento_generico = aLiqIva.pg_doc_amm;
For aTGenRiga in (Select *
From documento_generico_riga
Where cd_tipo_documento_amm = aLiqIva.cd_tipo_documento And
esercizio = aLiqIva.esercizio_doc_amm And
cd_cds= aLiqIva.cd_cds_doc_amm And
cd_unita_organizzativa = aLiqIva.cd_uo_doc_amm And
pg_documento_generico = aLiqIva.pg_doc_amm) Loop
aGenRiga:=aTGenRiga;
Exit;
End Loop;
begin
select distinct cd_elemento_voce into voce
from obbligazione
where
obbligazione.esercizio = aGenRiga.esercizio_obbligazione and
obbligazione.cd_cds = aGenRiga.cd_cds_obbligazione and
obbligazione.pg_obbligazione = aGenRiga.pg_obbligazione and
obbligazione.esercizio_originale = aGenRiga.ESERCIZIO_ORI_OBBLIGAZIONE ;
exception when too_many_rows then
IBMERR001.RAISE_ERR_GENERICO('Documento generico di versamento IVA su più voci');
End;
if not isVersamentoCentro then
if recParametriCnr.fl_nuovo_pdg='N' then
aVoceDebVersoErario:=CNRCTB204.trovaContoAnag(aLiqIva.esercizio, aGenRiga.cd_terzo, aLiqIva.cd_tipo_documento, null,voce);
end if;
end if;
aDtContabil := trunc(aGen.data_registrazione); -- da vedere per data 01/01 anno prec
aCdTerzo := aGenRiga.cd_terzo;
Exception when NO_DATA_FOUND then
Null; -- IBMERR001.RAISE_ERR_GENERICO('Documento generico di versamento IVA non trovato');
End;
end if;
-- Estrazione dei conti
aVoceEarioCIVA:=CNRCTB002.GETVOCEEPERARIOCIVA(aLiqIva.esercizio);
if (aVoceDebVersoErario.cd_voce_ep is null) then
aVoceDebVersoErario:=CNRCTB002.GETVOCEEPERARIOCIVAGIROCONTOUO(aLiqIva.esercizio);
end if;
if not isVersamentoCentro then
aVoceIvaDebito:=CNRCTB002.GETVOCEEPIVADEBITO(aLiqIva.esercizio);
aVoceIvaCredito:=CNRCTB002.GETVOCEEPIVACREDITO(aLiqIva.esercizio);
end if;
-- prima REGISTRAZIONE ===> IVA VENDITE
Dbms_Output.PUT_LINE ('PREPARA SCRITTURA '||aUOVERSIVA.cd_unita_padre);
aScrittura:=null;
aScrittura.CD_CDS:=aUOVERSIVA.cd_unita_padre;
aScrittura.ESERCIZIO:=aEs;
aScrittura.CD_UNITA_ORGANIZZATIVA:=aUOVERSIVA.cd_unita_organizzativa;
aScrittura.ORIGINE_SCRITTURA:=CNRCTB200.ORIGINE_LIQUID_IVA;
aScrittura.CD_CAUSALE_COGE:=CNRCTB200.CAU_LIQIVAVENDITE;
aScrittura.CD_COMP_DOCUMENTO:=aPK2String;
aScrittura.CD_TIPO_DOCUMENTO:=aGenRiga.cd_tipo_documento_amm;
aScrittura.CD_CDS_DOCUMENTO:=aGenRiga.cd_cds;
aScrittura.CD_UO_DOCUMENTO:=aGenRiga.cd_unita_organizzativa;
aScrittura.PG_NUMERO_DOCUMENTO:=aGenRiga.pg_documento_generico;
aScrittura.IM_SCRITTURA:=null; -- Impostato come totale di sezione in realizzazione della scrittura
If To_Char(aDtContabil, 'yyyy') = aEs Then
aScrittura.DT_CONTABILIZZAZIONE := aDtContabil;
Else
aScrittura.DT_CONTABILIZZAZIONE := To_Date('3112'||aes, 'DDMMYYYY');
End If;
-- Le date di competenza della liquidazione di gennaio si riferisco all'iva di compentenza di dicembre dell'anno precedente
if To_char(aDtDa,'yyyy') < aEs then
DaData:=to_date('0101'||to_char(aEs),'ddmmyyyy');
AData :=to_date('0101'||to_char(aEs),'ddmmyyyy');
else
DaData :=null;
AData :=null;
end if;
aScrittura.DT_PAGAMENTO:=null;
aScrittura.DT_CANCELLAZIONE:=null;
aScrittura.TI_SCRITTURA:=CNRCTB200.TI_SCRITTURA_PRIMA; -- Si tratta del tipo di scrittura prima o ultima
aScrittura.CD_TERZO:=aCdTerzo;
aScrittura.STATO:=CNRCTB200.STATO_DEFINITIVO;
aScrittura.CD_DIVISA:=aGen.cd_divisa;
aScrittura.COSTO_PLURIENNALE:=null; -- chi lo valorizza e come non è chiaro
aScrittura.PG_ENTE:=null; -- serve a rinumerare le scritture livello di ENTE
aScrittura.DS_SCRITTURA := 'Liquidazione IVA mensile CDS '||aUOVERSIVA.cd_unita_padre||', UO '||aUOVERSIVA.cd_unita_organizzativa;
aScrittura.PG_SCRITTURA_ANNULLATA:=null; -- codice della scrittura annullata in effettuazione storno
aScrittura.ATTIVA:='Y';
aScrittura.ESERCIZIO_DOCUMENTO_AMM:=aGenRiga.esercizio;
aScrittura.DACR:=aTSNow;
aScrittura.UTCR:=aUser;
if (recParametriCNR.fl_nuovo_pdg='Y' ) then
aScritturaEnte:=null;
aScritturaEnte.CD_CDS:=aUOVERSCENTRO.cd_unita_padre;
aScritturaEnte.ESERCIZIO:=aEs;
aScritturaEnte.CD_UNITA_ORGANIZZATIVA:=aUOVERSCENTRO.cd_unita_organizzativa;
aScritturaEnte.ORIGINE_SCRITTURA:=CNRCTB200.ORIGINE_LIQUID_IVA;
aScritturaEnte.CD_CAUSALE_COGE:=CNRCTB200.CAU_LIQIVAVENDITE;
aScritturaEnte.CD_COMP_DOCUMENTO:=aPK2String;
aScritturaEnte.CD_TIPO_DOCUMENTO:=aGenRiga.cd_tipo_documento_amm;
aScritturaEnte.CD_CDS_DOCUMENTO:=aGenRiga.cd_cds;
aScritturaEnte.CD_UO_DOCUMENTO:=aGenRiga.cd_unita_organizzativa;
aScritturaEnte.PG_NUMERO_DOCUMENTO:=aGenRiga.pg_documento_generico;
aScritturaEnte.IM_SCRITTURA:=null; -- Impostato come totale di sezione in realizzazione della scrittura
If To_Char(aDtContabil, 'yyyy') = aEs Then
aScritturaEnte.DT_CONTABILIZZAZIONE := aDtContabil;
Else
aScritturaEnte.DT_CONTABILIZZAZIONE := To_Date('3112'||aes, 'DDMMYYYY');
End If;
-- Le date di competenza della liquidazione di gennaio si riferisco all'iva di compentenza di dicembre dell'anno precedente
if To_char(aDtDa,'yyyy') < aEs then
DaData:=to_date('0101'||to_char(aEs),'ddmmyyyy');
AData :=to_date('0101'||to_char(aEs),'ddmmyyyy');
else
DaData :=null;
AData :=null;
end if;
aScritturaEnte.DT_PAGAMENTO:=null;
aScritturaEnte.DT_CANCELLAZIONE:=null;
aScritturaEnte.TI_SCRITTURA:=CNRCTB200.TI_SCRITTURA_PRIMA; -- Si tratta del tipo di scrittura prima o ultima
aScritturaEnte.CD_TERZO:=aCdTerzo;
aScritturaEnte.STATO:=CNRCTB200.STATO_DEFINITIVO;
aScritturaEnte.CD_DIVISA:=aGen.cd_divisa;
aScritturaEnte.COSTO_PLURIENNALE:=null; -- chi lo valorizza e come non è chiaro
aScritturaEnte.PG_ENTE:=null; -- serve a rinumerare le scritture livello di ENTE
aScritturaEnte.DS_SCRITTURA := 'Liquidazione IVA mensile CDS '||aUOVERSIVA.cd_unita_padre||', UO '||aUOVERSIVA.cd_unita_organizzativa;
aScritturaEnte.PG_SCRITTURA_ANNULLATA:=null; -- codice della scrittura annullata in effettuazione storno
aScritturaEnte.ATTIVA:='Y';
aScritturaEnte.ESERCIZIO_DOCUMENTO_AMM:=aGenRiga.esercizio;
aScritturaEnte.DACR:=aTSNow;
aScritturaEnte.UTCR:=aUser;
end if;
-- Scritture SOLO per le UO decentrate
if not isVersamentoCentro then
-- Generazione della scrittura per le vendite
if aLiqIva.iva_Debito > 0 then
aListaMovimenti.delete;
Dbms_Output.PUT_LINE ('PREPARA MOVIMENTI 1');
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,
aVoceIvaDebito,aLiqIva.iva_Debito,CNRCTB200.IS_DARE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ,--CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,aVoceEarioCIVA,aLiqIva.iva_Debito,CNRCTB200.IS_AVERE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ,--CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
aScrittura.ds_scrittura:='IVA VENDITE';
Dbms_Output.PUT_LINE ('INS SCRITTURA 1');
CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimenti);
end if;
-- seconda REGISTRAZIONE ===> IVA ACQUISTI
-- Errore 830 - al posto di iva_credito va utilizzata l'iva a credito senza
-- prorata (campo iva_credito_no_prorata della liquidazione)
-- Generazione della scrittura per gli acquisti
if aLiqIva.iva_credito_no_prorata > 0 then
aListaMovimenti.delete;
aScrittura.pg_scrittura:=null;
aScrittura.im_Scrittura:=null;
aScrittura.CD_CAUSALE_COGE:=CNRCTB200.CAU_LIQIVAACQUISTI;
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,aVoceEarioCIVA,aLiqIva.iva_credito_no_prorata,CNRCTB200.IS_DARE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ,--CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,aVoceIvaCredito,aLiqIva.iva_credito_no_prorata,CNRCTB200.IS_AVERE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ,--CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
aScrittura.ds_scrittura:='IVA ACQUISTI';
Dbms_Output.PUT_LINE ('INS SCRITTURA 2');
CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimenti);
end if;
end if;
-- terza REGISTRAZIONE ===> IVA SALDO
-- Generazione della scrittura per il saldo se necessaria per aprire il debito verso
-- l'erario chiuso dal pagamento del mandato
aListaMovimenti.delete;
aScrittura.pg_scrittura:=null;
aScrittura.im_Scrittura:=null;
aScrittura.ds_scrittura:='IVA SALDO';
aScrittura.CD_CAUSALE_COGE:=CNRCTB200.CAU_LIQIVASALDO;
-- Movimenti per l'ENTE
if isVersamentoCentro Then -- se la UO è la UO ENTE
aVoceBancaCds:=CNRCTB002.GETVOCEEPBANCACDS(aLiqIva.esercizio);
Dbms_Output.PUT_LINE ('PREPARA MOVIMENTI 2');
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,aVoceEarioCIVA,nvl(aGen.im_totale,aLiqIva.iva_versata),CNRCTB200.IS_DARE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ,--CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,aVoceBancaCds,nvl(aGen.im_totale,aLiqIva.iva_versata),CNRCTB200.IS_AVERE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ,--CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
Else -- altrimenti (per tutte le altre UO normali)
-- Movimenti per le UO decentrate
aVoceCostoIvaNonDetraibile:=CNRCTB002.getVoceEpCostoIvaNonDetraibile(aLiqIva.esercizio);
aVoceRicavoIvaNonDetraibile:=CNRCTB002.getVoceEpRicIvaNonDetraibile(aLiqIva.esercizio);
if aGen.pg_documento_generico is not null or aLiqIva.iva_versata> 0 then
-- Movimenti nel caso ci sia iva da versare (si è versata l'IVA)
-- NEI CASI IN CUI IL SALDO FINALE PREVEDE UN SALDO A DEBITO (QUINDI CON IVA DA VERSARE),
-- OLTRE ALLE SCRITTURE CHE TRAVASANO L'IVA A CREDITO E L'IVA A DEBITO NELL'ERARIO C/IVA
-- (GIA' FATTE PRIMA), SI DEVONO FARE ANCHE QUELLE CHE RILEVANO L'EVENTUALE COSTO PER IVA INDETRAIBILE E
-- E LA CHIUSURA DEL CONTO ERARIO SUL CONTO DEBITI VERSO ERARIO PER LA PARTE VERSATA
-- fa la registrazione con in AVERE l'Erario C/IVa per stornare la parte indetraibile (PRO RATA)
If aLiqIva.iva_credito - aLiqIva.iva_credito_no_prorata < 0 then
Dbms_Output.PUT_LINE ('PREPARA MOVIMENTI 3');
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,
aVoceEarioCIVA,
Abs(aLiqIva.iva_credito - aLiqIva.iva_credito_no_prorata),
CNRCTB200.IS_AVERE, nvl(DaData,aDtDa),nvl(AData,aDtA), aCdTerzo,
IST_COMM_LIQ,--CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,
aVoceCostoIvaNonDetraibile,
Abs(aLiqIva.iva_credito - aLiqIva.iva_credito_no_prorata),
CNRCTB200.IS_DARE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ,--CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
End If;
-- COMUNQUE REGISTRA LA CHIUSURA DEL CONTO ERARIO C/IVA CON IL DEBITO VS/ERARIO
Dbms_Output.PUT_LINE ('PREPARA MOVIMENTI 4 ');
Dbms_Output.PUT_LINE (aVoceDebVersoErario.cd_voce_ep);
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,
aVoceEarioCIVA, nvl(aGen.im_totale,aLiqIva.iva_versata),
CNRCTB200.IS_DARE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ, --CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,
aVoceDebVersoErario, nvl(aGen.im_totale,aLiqIva.iva_versata),
CNRCTB200.IS_AVERE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ, --CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
-- ente
if(recParametriCnr.fl_tesoreria_unica ='Y' ) then
Dbms_Output.PUT_LINE ('INS SCRITTURA ente');
aListaMovimentiEnte.delete;
CNRCTB204.buildMovPrinc(aScritturaEnte.cd_cds,aScritturaEnte.esercizio,aScritturaEnte.cd_unita_organizzativa,
aVoceEarioCIVA, nvl(aGen.im_totale,aLiqIva.iva_versata),
CNRCTB200.IS_AVERE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ, --CNRCTB100.TI_ISTITUZIONALE,
aListaMovimentiEnte,aUser,aTSnow);
CNRCTB204.buildMovPrinc(aScritturaEnte.cd_cds,aScritturaEnte.esercizio,aScritturaEnte.cd_unita_organizzativa,
aVoceDebVersoErario, nvl(aGen.im_totale,aLiqIva.iva_versata),
CNRCTB200.IS_DARE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ, --CNRCTB100.TI_ISTITUZIONALE,
aListaMovimentiEnte,aUser,aTSnow);
CNRCTB200.CREASCRITTCOGE(aScritturaEnte,aListaMovimentiEnte);
end if;
else
-- Movimenti nel caso NON ci sia iva da versare
-- NEI CASI IN CUI IL SALDO FINALE NON PREVEDE UN SALDO A DEBITO (QUINDI CON IVA NON DA VERSARE
-- MA MAGARI DA PORTARE A CREDITO NEL PERIODO SUCCESSIVO), OLTRE ALLE SCRITTURE CHE TRAVASANO
-- L'IVA A CREDITO E L'IVA A DEBITO NELL'ERARIO C/IVA (GIA' FATTE PRIMA),
-- SI DEVONO FARE ANCHE QUELLE CHE RILEVANO L'EVENTUALE COSTO PER IVA INDETRAIBILE
-- NON SI FA LA CHIUSURA DEL CONTO ERARIO SUL CONTO DEBITI VERSO ERARIO PER LA PARTE VERSATA PERCHE'
-- NON C'E' VERSAMENTO !!!
-- fa la registrazione con in AVERE l'Erario C/IVA per stornare la parte indetraibile (PRO RATA)
If aLiqIva.iva_credito - aLiqIva.iva_credito_no_prorata < 0 then
Dbms_Output.PUT_LINE ('PREPARA MOVIMENTI 5');
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,
aVoceEarioCIVA,
Abs(aLiqIva.iva_credito - aLiqIva.iva_credito_no_prorata),
CNRCTB200.IS_AVERE, nvl(DaData,aDtDa),nvl(AData,aDtA), aCdTerzo,
IST_COMM_LIQ,--CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
CNRCTB204.buildMovPrinc(aScrittura.cd_cds,aScrittura.esercizio,aScrittura.cd_unita_organizzativa,
aVoceCostoIvaNonDetraibile,
Abs(aLiqIva.iva_credito - aLiqIva.iva_credito_no_prorata),
CNRCTB200.IS_DARE,nvl(DaData,aDtDa),nvl(AData,aDtA),aCdTerzo,
IST_COMM_LIQ,--CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,aUser,aTSnow);
End If;
end if;
end if;
Dbms_Output.PUT_LINE ('INS SCRITTURA 3');
CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimenti);
end;
Procedure regDocAmmCOGE(aEs number, aCds varchar2, aUO varchar2, aTiDocumento varchar2, aPgDocAmm number, aUser varchar2, aTSNow date) is
aDocTst V_DOC_AMM_COGE_TSTA%rowtype;
Begin
select * into aDocTst from V_DOC_AMM_COGE_TSTA where
cd_cds = aCds
and cd_unita_organizzativa = aUO
and esercizio = aEs
and pg_numero_documento = aPgDocAmm
and cd_tipo_documento = aTiDocumento;
regDocAmmCOGE(aDocTst,aUser, aTSNow);
End;
-- ===========================================
-- Scrittura economica principale
-- ===========================================
Procedure regDocAmmCOGE(aDocTst V_DOC_AMM_COGE_TSTA%rowtype, aUser varchar2, aTSNow date) is
aScrittura scrittura_partita_doppia%rowtype;
aMovimento movimento_coge%rowtype;
aListaMovimenti CNRCTB200.movimentiList;
aContoEp voce_ep%rowtype;
aListaScritture CNRCTB200.scrittureList;
aListaNuoveScritture CNRCTB200.scrittureList;
aListaVecchieScritture CNRCTB200.scrittureList;
aListaNuoviMovimenti CNRCTB200.movimentiList;
aListaM CNRCTB200.movimentiList;
isProcessaCOEP boolean;
giorni_totali NUMBER;
giorni_es_corrente NUMBER;
frazione_es_corrente NUMBER (15, 10);
frazione_es_precedente NUMBER (15, 10);
CONTO_USATO voce_ep%rowtype;
CUMULO_DARE NUMBER (15,2);
CUMULO_AVERE NUMBER (15,2);
aRecCompenso COMPENSO%Rowtype;
aCC_es_prec chiusura_coep%Rowtype;
Begin
-- Lock del documento
CNRCTB100.LOCKDOCAMM(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento);
Dbms_Output.PUT_LINE ('A');
-- Gestione filtrodocumenti speciali che non vanno in COGE come prime scritture
-- in attesa di porre tali documenti in stato coge escluso
If aDocTst.cd_tipo_documento in (CNRCTB100.TI_GENERICO_TRASF_E,
CNRCTB100.TI_GENERICO_TRASF_S,
CNRCTB100.TI_GEN_APERTURA_FONDO,
CNRCTB100.TI_GEN_IVA_ENTRATA) Or
aDocTst.fl_associato_compenso = 'Y' Then -- La missione che transita per il compenso non va in economica
Dbms_Output.PUT_LINE ('A1');
CNRCTB100.UPDATEDOCAMM_NODUVAUTUV(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento,
'stato_coge='''||CNRCTB100.STATO_COEP_EXC||'''',
Null);
Dbms_Output.PUT_LINE ('B');
return;
End if;
Dbms_Output.PUT_LINE ('B1');
-- Se già processato in economica esco
If aDocTst.stato_coge in (CNRCTB100.STATO_COEP_CON, CNRCTB100.STATO_COEP_EXC) then
Dbms_Output.PUT_LINE ('UO '||aDocTst.CD_UNITA_ORGANIZZATIVA||' NUM. DOC. '||aDocTst.PG_NUMERO_DOCUMENTO||' STATO COGE '||aDocTst.stato_coge);
Return;
End If;
Dbms_Output.PUT_LINE ('C1');
If CNRCTB204.checkIsCogeDifferita(aDocTst) Then
return;
End If;
-- Fix del 20040924 Richiesta 843
Dbms_Output.PUT_LINE ('D1');
CNRCTB204.checkChiusuraEsercizio(aDocTst.esercizio, aDocTst.cd_cds_origine);
Dbms_Output.PUT_LINE ('D2');
-- L'esercizio economico precedente deve essere chiuso definitivamente a meno che non SI STIA FACENDO UNA SCRITTURA
-- DI RATEO PARTE 1 - in questo caso la scrittura si PUO' FARE ed è fatta nell'esercizio precedente a quello del documento
-- che deve essere aperto
-- CONSENTO ANCHE SE LA COMPETENZA E' A CAVALLO
aCC_es_prec := CNRCTB200.getChiusuraCoep(aDocTst.esercizio-1, aDocTst.cd_cds_origine);
-- NON POSSO INIZIARE A CONTABILIZZARE NELL'ESERCIZIO 2006 DOCUMENTI 2006 SE L'ESERCIZIO 2005 NON E' CHIUSO
-- A MENO CHE I DOCUMENTI NON ABBIANO COMPETENZA ANNO PRECEDENTE (QUINDI SOLO QUELLI PER I RATEI)
If aCC_es_prec.STATO = CNRCTB200.STATO_PROVA_ANNULLATA And -- se l'economica dell'esercizio precedente è ancora aperta
-- MA LA COMPETENZA ECONOMICA NON E' IN ESERCIZIO PRECEDENTE
-- NON CONTABILIZZA NULLA
Not ((CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) Or CNRCTB204.getCompetenzaacavalloconEsPrec(aDocTst)) And
CNRCTB008.ISESERCIZIOAPERTO(aDocTst.esercizio - 1,aDocTst.cd_cds_origine)) then
IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente '||To_Char(aDocTst.esercizio-1)||' non è chiuso definitivamente per il cds: '||aDocTst.cd_cds_origine);
--Elsif
-- 30.11.2006 PARTE NUOVA STANI
-- SE IL DOCUMENTO CON COMPETENZA (ANCHE PARZIALE IN ESERCIZIO PRECEDENTE) E' STATO CONTABILIZZATO CON RATEO ED E' ANCHE
-- STATA FATTA LA CHIUSURA OCCORRE REGISTRARE LA DIFFERENZA NEI CREDITI DEBITI
End If;
-- 27/02/2009 S.F. COMPENSI PER CONGUAGLI FISCALI CON COMPETENZA ESERCIZIO PRECEDENTE NON CONTABILIZZATI MA CON STATO MISTERIOSAMENTE A "C"
If aCC_es_prec.STATO = CNRCTB200.STATO_PROVA_ANNULLATA And -- ANCHE SE L'ECONOMICA DELL'ESERCIZIO PRECEDENTE È ANCORA APERTA E
-- LA COMPETENZA ECONOMICA E' IN ESERCIZIO PRECEDENTE
-- SE SI TRATTA DI COMPENSI PER CONGUAGLI FISCALI NON DEVE CONTABILIZZARE NULLA
-- NELL'ANNO PRECEDENTE MA ATTENDERE L'ANNO SUCCESSIVO
(CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) Or CNRCTB204.getCompetenzaacavalloconEsPrec(aDocTst)) And
CNRCTB008.ISESERCIZIOAPERTO(aDocTst.esercizio - 1,aDocTst.cd_cds_origine) And
aDocTst.cd_tipo_documento = 'COMPENSO' And aDocTst.IM_TOTALE_IMPONIBILE = 0 Then
IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente '||To_Char(aDocTst.esercizio-1)||' non è chiuso definitivamente per il cds: '||
aDocTst.cd_cds_origine||' ma i compensi di conguaglio fiscale non producono Ratei.');
End If;
-- Se il documento è riportato anche parzialmente non può essere processato in economica
-- 30.05.2006 NON E' PIU' VERO, ANCHE I DOCUMENTI RIPORTATI DEVONO ESSERE REGISTRATI IN ECONOMICA
/*
If CNRCTB105.isRiportato(aDocTst.cd_cds,aDocTst.cd_unita_organizzativa, aDocTst.esercizio,
aDocTst.pg_numero_documento, aDocTst.cd_tipo_documento) = 'Y' Then
IBMERR001.RAISE_ERR_GENERICO('Il documento riportato (anche parzialmente) non può essere processato automaticamente in economica');
end if;
*/
Dbms_Output.PUT_LINE ('Savepoint CNRCTB205_SP_001');
Savepoint CNRCTB205_SP_001;
-- cerca eventuali scritture gia registrate per il documento
-- se la competenza è fuori esercizio e l'esercizio precedente è aperto cerca i ratei parte 1
-- SE LA COMPETENZA E' COMPLETAMENTE FUORI ESERCIZIO/A CAVALLO ED IN PIU' L'ESERCIZIO PRECEDENTE E' APERTO
If (CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) Or CNRCTB204.getCompetenzaacavalloconEsPrec(aDocTst)) And
NOT (CNRCTB200.ISCHIUSURACOEPDEF(aDocTst.esercizio - 1, aDocTst.cd_cds_origine)='Y') AND
CNRCTB008.ISESERCIZIOAPERTOSenzaBlocco(aDocTst.esercizio - 1, aDocTst.cd_cds_origine) Then
Dbms_Output.PUT_LINE ('fuori o a cavallo');
If CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) Then
Dbms_Output.PUT_LINE ('fuori ');
-- SE LA COMPETENZA E' COMPLETAMENTE FUORI ESERCIZIO
CNRCTB204.getScritturePEPLock(aDocTst.esercizio - 1, aDocTst, CNRCTB200.CAU_RATEI, aListaScritture);
-- Per ogni scrittura crea uno storno per poi riemettere la scrittura aggiornata
-- QUI STORNA SOLO LA SCRITTURA GIA' FATTA TUTTA IN ANNO PRECEDENTE
If aListaScritture.count > 0 Then
For i in 1 .. aListaScritture.count loop
CNRCTB200.getScritturaEPLOCK(aListaScritture(i),aListaM);
aListaVecchieScritture(i):=aListaScritture(i);
CNRCTB200.creaScrittStornoCoge(aListaScritture(i), aListaM, aUser, aTSNow);
End Loop;
End If;
Elsif CNRCTB204.getCompetenzaacavalloconEsPrec(aDocTst) Then
-- SE LA COMPETENZA E' A CAVALLO
Dbms_Output.PUT_LINE ('a cavallo ');
CNRCTB204.getScritturePEPLock(aDocTst.esercizio - 1, aDocTst, CNRCTB200.CAU_RATEI, aListaScritture);
-- Per ogni scrittura crea uno storno per poi riemettere la scrittura aggiornata
-- QUI STORNA SOLO IL PEZZO DI SCRITTURA GIA' FATTA DELL'ANNO PRECEDENTE
If aListaScritture.count > 0 Then
For i in 1 .. aListaScritture.count loop
CNRCTB200.getScritturaEPLOCK(aListaScritture(i),aListaM);
aListaVecchieScritture(i):=aListaScritture(i);
CNRCTB200.creaScrittStornoCoge(aListaScritture(i), aListaM, aUser, aTSNow);
End loop;
End If;
CNRCTB204.getScritturePEPLock(aDocTst.esercizio, aDocTst, CNRCTB200.CAU_RATEI, aListaScritture);
-- Per ogni scrittura crea uno storno per poi riemettere la scrittura aggiornata
-- QUI STORNA SOLO IL PEZZO DI SCRITTURA GIA' FATTA DELL'ANNO IN CORSO
If aListaScritture.count > 0 Then
For i in 1 .. aListaScritture.count loop
CNRCTB200.getScritturaEPLOCK(aListaScritture(i),aListaM);
aListaVecchieScritture(i):=aListaScritture(i);
CNRCTB200.creaScrittStornoCoge(aListaScritture(i), aListaM, aUser, aTSNow);
End loop;
End if;
End If;
Else -- COMPETENZA TUTTA IN ESERCIZIO
-- (OPPURE COMPETENZA IN ESERCIZIO PRECEDENTE (O A CAVALLO) MA CON ESERCIZIO PRECEDENTE CHIUSO)
Dbms_Output.PUT_LINE ('DOCUMENTO CON COMP. ECON. IN ESERCIZIO O ESERCIZIO PRECEDENTE CHIUSO');
-- 12.12.2006 SF PARTE NUOVA: SE DEVO RICONTABILIZZARE UN DOCUMENTO AMMINISTRATIVO CHE AVEVA COMPETENZA IN ESERCIZIO PRECEDENTE,
-- (QUINDI HA PRODOTTO RATEO CHE SI E' CHIUSO E RIAPERTO) DEVO PRIMA "STORNARE" LA SCRITTURA DI RATEO PARTE 2
-- ALTRIMENTI IL DOCUMENTO VIENE RICONTABILIZZATO PER LA SECODNA VOLTA
-- INIZIO PARTE NUOVA
Declare
conto_ratei_attivi voce_ep%Rowtype;
conto_ratei_passivi voce_ep%Rowtype;
conto_fatt_emettere voce_ep%Rowtype;
conto_fatt_ricevere voce_ep%Rowtype;
conto_insuss_attive voce_ep%Rowtype;
conto_insuss_passive voce_ep%Rowtype;
Begin
If CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) Then
CNRCTB204.getScritturePEPLock(aDocTst.esercizio, aDocTst, CNRCTB200.CAU_RATEI_P2, aListaScritture);
For i in 1 .. aListaScritture.count loop
CNRCTB200.getScritturaEPLOCK(aListaScritture(i), aListaM);
aListaScritture(i).ORIGINE_SCRITTURA := CNRCTB200.ORIGINE_MANUALE;
aListaScritture(i).CD_CAUSALE_COGE := Null;
aListaScritture(i).ESERCIZIO_DOCUMENTO_AMM := Null;
aListaScritture(i).CD_TIPO_DOCUMENTO := Null;
aListaScritture(i).PG_NUMERO_DOCUMENTO := Null;
aListaScritture(i).CD_CDS_DOCUMENTO := Null;
aListaScritture(i).CD_UO_DOCUMENTO := Null;
If To_Char(Sysdate, 'YYYY') < Nvl(aListaScritture(I).esercizio, aDocTst.esercizio) Then
aListaScritture(i).DT_CONTABILIZZAZIONE := To_Date('0101'||aListaScritture(I).esercizio, 'DDMMYYYY');
Elsif To_Char(Sysdate, 'YYYY') > Nvl(aListaScritture(I).esercizio, aDocTst.esercizio) Then
aListaScritture(i).DT_CONTABILIZZAZIONE := To_Date('3112'||aListaScritture(I).esercizio, 'DDMMYYYY');
Else
aListaScritture(i).DT_CONTABILIZZAZIONE := Trunc(aTSNow);
End If;
aListaScritture(i).utcr := aUser;
aListaScritture(i).DACR := aTSNow;
For i in 1 .. aListaM.count loop
Dbms_Output.PUT_LINE ('aListaM '||aListaM(i).cd_voce_ep);
conto_ratei_attivi := cnrctb002.getVoceEpRateiAttivi(aDocTst.esercizio);
conto_ratei_passivi := cnrctb002.getVoceEpRateiPassivi(aDocTst.esercizio);
conto_fatt_emettere := cnrctb002.getVoceEpFattureDaEmettere(aDocTst.esercizio);
conto_fatt_ricevere := cnrctb002.getVoceEpFattureDaRicevere(aDocTst.esercizio);
conto_insuss_passive := cnrctb002.getVoceEpInsussPassive (aDocTst.esercizio);
conto_insuss_attive := cnrctb002.getVoceEpInsussAttive (aDocTst.esercizio);
-- IN DATA 26.06.2007 HO INVERTITO LA LETTURE DEI DUE CONTI (RICHIESTA DI FRANCA)
-- POTEVO CAMBIARE IL VALORE DEI PARAMETRI IN CONF_CNR MA NON SO SE ALTROVE HO GIA' CAMBIATO
-- LA LETTURA DEGLI STESSI (NON VORREI SCASSARE ALTRO)
If aListaM(i).cd_voce_ep In (conto_ratei_attivi.cd_voce_ep, conto_fatt_emettere.cd_voce_ep) Then
aListaM(i).cd_voce_ep := conto_insuss_attive.cd_voce_ep;
Elsif aListaM(i).cd_voce_ep In (conto_ratei_passivi.cd_voce_ep, conto_fatt_ricevere.cd_voce_ep) Then
aListaM(i).cd_voce_ep := conto_insuss_passive.cd_voce_ep;
End If;
aListaM(i).SEZIONE := CNRCTB200.getSezioneOpposta(aListaM(i).SEZIONE);
aListaM(i).utcr := 'RICONT_RATEI';
aListaM(i).DACR := aTSNow;
End Loop;
Dbms_Output.PUT_LINE ('chiamata a CNRCTB200.CREASCRITTCOGE');
Dbms_Output.PUT_LINE ('3 VALORE ATTUALE UTENTE '||aListaScritture(i).utcr);
CNRCTB200.CREASCRITTCOGE(aDocTst.esercizio, aListaScritture(i), aListaM);
End loop;
Else
-- FINE PARTE NUOVA
CNRCTB204.getScritturePEPLock(aDocTst, aListaScritture); -- LA CERCA CON CAUSALE_COGE A NULL E NON TROVA I RATEI
Dbms_Output.PUT_LINE ('SCRITT RECUPERATE '||aListaScritture.count);
-- Per ogni scrittura crea uno storno (AL FINE poi riemettere la scrittura aggiornata)
-- QUI STORNA SOLO LA SCRITTURA GIA' FATTA DELL'ANNO IN CORSO
If aListaScritture.count > 0 Then
For i in 1 .. aListaScritture.count loop
CNRCTB200.getScritturaEPLOCK(aListaScritture(i),aListaM);
aListaVecchieScritture(i):=aListaScritture(i);
CNRCTB200.creaScrittStornoCoge(aListaScritture(i), aListaM, aUser, aTSNow);
End loop;
End if;
End If; -- MIO AGGIUNTO
End;
End If; -- FINE COMPETENZA IN ESERCIZIO/FUORI ESERCIZIO/A CAVALLO
-- Se il documento è stato annullato e la scrittura non è di rateo la contabilizzazione COGE si ferma qui
Dbms_Output.PUT_LINE (' stornato tutto riprendo');
If aDocTst.stato_cofi = CNRCTB100.STATO_GEN_COFI_ANN Then
CNRCTB100.UPDATEDOCAMM_NODUVAUTUV(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento,
'stato_coge='''||CNRCTB100.STATO_COEP_CON||'''',
Null);
Dbms_Output.PUT_LINE ('F');
return;
End If;
-- Se il documento e composto di piu di un'entita anagrafica, vengono create tante scritture quante sono le
-- entita anagrafiche specificate
Dbms_Output.PUT_LINE ('inizio loop sui terzi di V_DOC_AMM_COGE_RIGA');
For aCDoc In (Select distinct cd_terzo,cd_elemento_voce_ev
From V_DOC_AMM_COGE_RIGA
Where cd_cds = aDocTst.cd_cds
And cd_unita_organizzativa = aDocTst.cd_unita_organizzativa
And esercizio = aDocTst.esercizio
And pg_numero_documento = aDocTst.pg_numero_documento
And cd_tipo_documento = aDocTst.cd_tipo_documento) Loop
-- Scrittura su partita normale
aListaMovimenti.delete;
Dbms_Output.PUT_LINE ('inizio loop sui V_DOC_AMM_COGE_RIGA per terzo '||Acdoc.cd_terzo||' '||acdoc.cd_elemento_voce_ev);
for aDoc in (select * from V_DOC_AMM_COGE_RIGA
Where cd_cds = aDocTst.cd_cds
and cd_unita_organizzativa = aDocTst.cd_unita_organizzativa
and esercizio = aDocTst.esercizio
and pg_numero_documento = aDocTst.pg_numero_documento
And cd_tipo_documento = aDocTst.cd_tipo_documento
and cd_terzo = aCDoc.cd_terzo
and (cd_elemento_voce_ev = aCDoc.cd_elemento_voce_ev ) -- COmpenso senza calcolo iva
and fl_pgiro = 'N') loop
Dbms_Output.PUT_LINE ('K '||aListaMovimenti.COUNT);
buildMovPEP(aListaMovimenti, aDocTst, aDoc, aUser, aTSNow);
end loop;
Dbms_Output.PUT_LINE ('K esco ');
declare
fl_split char(1):='N';
begin
If aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_ATTIVA Then
select FL_LIQUIDAZIONE_DIFFERITA into fl_split
from fattura_attiva
where
fattura_attiva.ti_fattura = aDocTst.ti_fattura and
fattura_attiva.esercizio = aDocTst.ESERCIZIO and
fattura_attiva.cd_cds_origine = aDocTst.CD_CDS_ORIGINE and
fattura_attiva.cd_uo_origine = aDocTst.CD_UO_ORIGINE and
fattura_attiva.pg_fattura_attiva = aDocTst.PG_NUMERO_DOCUMENTO;
else
fl_split:='N';
end if;
if (fl_split = 'N') then
Dbms_Output.PUT_LINE ('giro su cori '||aCDoc.cd_elemento_voce_ev||' ENTE ');
for aDocCori in (select * from V_DOC_AMM_COGE_CORI
Where cd_cds = aDocTst.cd_cds
and cd_unita_organizzativa = aDocTst.cd_unita_organizzativa
and esercizio = aDocTst.esercizio
and pg_numero_documento = aDocTst.pg_numero_documento
and cd_tipo_documento = aDocTst.cd_tipo_documento
and cd_terzo = aCDoc.cd_terzo
-- and cd_elemento_voce_ev = aCDoc.cd_elemento_voce_ev
--and ti_ente_percepiente = TI_CORI_ENTE
) loop
Dbms_Output.PUT_LINE ('giro su cori '||aDocCori.AMMONTARE||' righe '||aListaMovimenti.count);
buildMovPEP(aListaNuoveScritture, aListaMovimenti,aDocTst, aDocCori, aUser, aTSNow);
Dbms_Output.PUT_LINE ('dopo giro su cori '||aDocCori.AMMONTARE||' righe '||aListaMovimenti.count);
end loop;
end if;
end;
-- NEW !!!! 14/06/2006
-- Solo per documenti COMMERCIALI:
-- Generazione del movimento contemporaneo di alimentazione dell'IVA a Credito e
-- dell'IVA a Debito per le fatture che generano autofattura (qualsiasi sia la specie)
If aDocTst.TI_ISTITUZ_COMMERC = CNRCTB100.TI_COMMERCIALE Then
Dbms_Output.PUT_LINE ('commerciale');
For aDocCoriIVAAutofattura in (Select * from V_DOC_AMM_COGE_CORI_AUTOFATT
Where cd_cds = aDocTst.cd_cds And
cd_unita_organizzativa = aDocTst.cd_unita_organizzativa And
esercizio = aDocTst.esercizio And
pg_numero_documento = aDocTst.pg_numero_documento And
cd_tipo_documento = aDocTst.cd_tipo_documento And
cd_terzo = aCDoc.cd_terzo
and cd_elemento_voce_ev = aCDoc.cd_elemento_voce_ev) Loop
Dbms_Output.PUT_LINE ('buildMovPEPAutofattura');
buildMovPEPAutofattura(aListaNuoveScritture, aListaMovimenti, aDocTst, aDocCoriIVAAutofattura, aUser, aTSNow);
End loop;
End If;
-- FINE NEW !!!! 14/06/2006
-- Movimenti su partita di giro
For aDoc in (select * from V_DOC_AMM_COGE_RIGA
Where cd_cds = aDocTst.cd_cds
And cd_unita_organizzativa = aDocTst.cd_unita_organizzativa
And esercizio = aDocTst.esercizio
And pg_numero_documento = aDocTst.pg_numero_documento
and cd_tipo_documento = aDocTst.cd_tipo_documento
and cd_terzo = aCDoc.cd_terzo
and (cd_elemento_voce_ev = aCDoc.cd_elemento_voce_ev) -- COmpenso senza calcolo o da conguaglio potrebbe non avere il dato
And fl_pgiro = 'Y') loop
Dbms_Output.PUT_LINE ('2222');
Declare
aSezContrPgiro char(1);
conta number:=0;
Begin
-- La sezione è quella principale del documento
aSezContrPgiro:=CNRCTB204.getSezione(aDocTst, aDoc);
Dbms_Output.PUT_LINE ('3333');
if (nvl(aDoc.stato_coge_docamm,' ') = CNRCTB100.STATO_COEP_EXC) then
Dbms_Output.put_line ('ROSPUC ESCO SENZA CONTABILIZZARE RIGA pgiro');
return;
end if;
if ( aDocTst.cd_tipo_documento in(CNRCTB100.TI_GENERICO_SPESA,CNRCTB100.TI_GENERICO_ENTRATA) and aDoc.FL_PGIRO = 'Y' ) then
if (aDocTst.cd_tipo_documento = CNRCTB100.TI_GENERICO_SPESA ) then
begin
select 1 into conta from ass_obb_acr_pgiro
where
CD_CDS = aDoc.CD_CDS_DOC and
ESERCIZIO = aDoc.ESERCIZIO_DOC and
PG_OBBLIGAZIONE = aDoc.PG_DOC and
ESERCIZIO_ORI_OBBLIGAZIONE = aDoc.ESERCIZIO_ORI_DOC and
TI_ORIGINE = 'S';
exception when no_data_found then
dbms_output.put_line('Origine PGIRO E');
CNRCTB100.UPDATEDOCAMM_NODUVAUTUV(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento,
'stato_coge='''||CNRCTB100.STATO_COEP_EXC||'''',
null);
return;
end;
elsif (aDocTst.cd_tipo_documento = CNRCTB100.TI_GENERICO_ENTRATA ) then
begin
select 1 into conta from ass_obb_acr_pgiro
where
CD_CDS = aDoc.CD_CDS_DOC and
ESERCIZIO = aDoc.ESERCIZIO_DOC and
PG_ACCERTAMENTO = aDoc.PG_DOC and
ESERCIZIO_ORI_ACCERTAMENTO = aDoc.ESERCIZIO_ORI_DOC and
TI_ORIGINE = 'E';
exception when no_data_found then
dbms_output.put_line('Origine PGIRO S');
CNRCTB100.UPDATEDOCAMM_NODUVAUTUV(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento,
'stato_coge='''||CNRCTB100.STATO_COEP_EXC||'''',
null
);
return;
end;
end if;
end if;
CNRCTB204.buildMovPrinc(aDocTst.cd_cds_origine, aDocTst.esercizio,
aDocTst.cd_uo_origine, CNRCTB204.getContoEpPgiro(aDocTst,aDoc),
aDoc.im_imponibile, aSezContrPgiro, aDoc.dt_da_competenza_coge,
aDoc.dt_a_competenza_coge,aDoc.cd_terzo,aDoc.ti_istituz_commerc,
aListaMovimenti,aUser,aTSnow);
Exception when NO_DATA_FOUND then
Dbms_Output.PUT_LINE ('4444');
null;
End;
End Loop;
buildMovContrPEP (aListaMovimenti, aDocTst, aCDoc.cd_terzo, aUser, aTSNow,aCDoc.cd_elemento_voce_ev);
--Dbms_Output.PUT_LINE ('CHIAMATA A buildMovContrPEP da: '||aListaMovimenti(1).dt_da_competenza_coge||' a: '||aListaMovimenti(1).dt_a_competenza_coge);
-- rospuc 2017 spostato per avere aDoc da verificare
--buildMovContrPEP (aListaMovimenti, aDocTst, aCDoc.cd_terzo, aUser, aTSNow,aDoc);
aScrittura := CNRCTB204.buildScrPEP(aDocTst, aCDoc.cd_terzo, aUser, aTSNow);
-- Nel caso la competenza sia in es. precedente (o a cavallo) e l'esercizio precedente sia aperto, sposta come rateo
-- la scrittura appena fatta in es. precedente (la relativa frazione) ed emette la scrittura
If (CNRCTB204.getCompetenzaFuoriEsercizio(aDocTst) Or CNRCTB204.getCompetenzaacavalloconEsPrec(aDocTst)) And
NOT (CNRCTB200.ISCHIUSURACOEPDEF(aDocTst.esercizio - 1, aDocTst.cd_cds_origine)='Y') AND
CNRCTB008.ISESERCIZIOAPERTOSenzaBlocco(aDocTst.esercizio - 1, aDocTst.cd_cds_origine) Then
-- prima di chiamare la procedura che inserisce devo modificare gli importi del cursore
-- moltiplicandoli per la frazione relativa alla quota dell'esercizio
If CNRCTB204.getCompetenzaacavalloconEsPrec(aDocTst) Then -- SE E' A CAVALLO TRA I DUE ESERCIZI
-- calcola le proporzioni
giorni_totali := Trunc(aDocTst.dt_a_competenza_coge) - Trunc(aDocTst.dt_da_competenza_coge) + 1;
giorni_es_corrente := Trunc(aDocTst.dt_a_competenza_coge) - to_date('0101'||aDocTst.esercizio,'DDMMYYYY') + 1;
frazione_es_precedente := (giorni_totali - giorni_es_corrente) / giorni_totali;
-- crea la scrittura normale nell'esercizio attuale con gli importi totali
aScrittura.dt_contabilizzazione := aDocTst.dt_da_competenza_coge;
For i in 1 .. aListaMovimenti.count loop
If aListaMovimenti(i).dt_da_competenza_coge Is Not Null Then
aListaMovimenti(i).dt_da_competenza_coge := to_date('0101'||aDocTst.esercizio, 'DDMMYYYY');
End If;
If aListaMovimenti(i).dt_a_competenza_coge Is Not Null Then
aListaMovimenti(i).dt_a_competenza_coge := aDocTst.dt_a_competenza_coge;
End If;
End Loop;
aScrittura.cd_causale_coge := Null; -- LA SCRITURA TOTALE NON HA CAUSALE
CNRCTB200.CREASCRITTCOGE(aDocTst.esercizio, aScrittura, aListaMovimenti);
-------------------- fine scrittura esercizio in corso
----------------- DOPODICHÈ CREA LA SCRITTURA DI SOLO RATEO NELL'ESERCIZIO PRECEDENTE
aScrittura.dt_contabilizzazione := To_Date('3112'||(aDocTst.esercizio-1), 'DDMMYYYY');
CUMULO_DARE := 0;
CUMULO_AVERE := 0;
For i in 1 .. aListaMovimenti.count loop
aListaMovimenti(i).im_movimento := Trunc((aListaMovimenti(i).im_movimento * frazione_es_precedente), 2);
-- PER QUADRATURA FINALE
If aListaMovimenti(i).SEZIONE = CNRCTB200.IS_DARE Then
CUMULO_DARE := CUMULO_DARE + aListaMovimenti(i).im_movimento;
Elsif aListaMovimenti(i).SEZIONE = CNRCTB200.IS_AVERE Then
CUMULO_AVERE := CUMULO_AVERE + aListaMovimenti(i).im_movimento;
End If;
If CUMULO_DARE != CUMULO_AVERE And Abs(CUMULO_DARE - CUMULO_AVERE) = 0.01 And
i = aListaMovimenti.COUNT Then
If CUMULO_DARE - CUMULO_AVERE > 0 Then
If aListaMovimenti(i).SEZIONE = CNRCTB200.IS_DARE Then
aListaMovimenti(i).im_movimento := aListaMovimenti(i).im_movimento - 0.01;
Else
aListaMovimenti(i).im_movimento := aListaMovimenti(i).im_movimento + 0.01;
End If;
Elsif CUMULO_AVERE - CUMULO_DARE > 0 Then
If aListaMovimenti(i).SEZIONE = CNRCTB200.IS_AVERE Then
aListaMovimenti(i).im_movimento := aListaMovimenti(i).im_movimento - 0.01;
Else
aListaMovimenti(i).im_movimento := aListaMovimenti(i).im_movimento + 0.01;
End If;
End If;
End If;
If aListaMovimenti(i).dt_da_competenza_coge Is Not Null Then
aListaMovimenti(i).dt_da_competenza_coge := aDocTst.dt_da_competenza_coge;
End If;
If aListaMovimenti(i).dt_a_competenza_coge Is Not Null Then
aListaMovimenti(i).dt_a_competenza_coge := to_date('3112'||aDocTst.esercizio-1, 'DDMMYYYY');
End If;
-- 20.06.2006 MAIL FRANCA CAMPANALE
-- SE IL COMPENSO E' COL FLAG GENERATA FATTURA IL CONTO DEVE ESSERE FATTURE DA RICEVERE
-- Testo Mail: "i compensi derivanti da fattura (flag "generata fattura") con competenza esercizio
-- precedente devono valorizzare il conto fatture da ricevere e non ratei"
If aDocTst.cd_tipo_documento = CNRCTB100.TI_COMPENSO Then
aRecCompenso := CNRCTB545.getCompenso(aDocTst.cd_cds,
aDocTst.cd_unita_organizzativa,
aDocTst.esercizio,
aDocTst.PG_NUMERO_DOCUMENTO,
'N' /* LOCK S/N */);
End If;
-- per la fattura attiva estrae il conto delle fatture da emettere,
-- pe la passiva fatture da ricevere, altrimenti ratei
if aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_ATTIVA Then
aContoEP := CNRCTB002.GETVOCEEPFATTUREDAEMETTERE(aDocTst.esercizio);
elsif aDocTst.cd_tipo_documento = CNRCTB100.TI_FATTURA_PASSIVA Or
(aDocTst.cd_tipo_documento = CNRCTB100.TI_COMPENSO And aRecCompenso.FL_GENERATA_FATTURA = 'Y') Then
aContoEP := CNRCTB002.GETVOCEEPFATTUREDARICEVERE(aDocTst.esercizio);
else
if CNRCTB100.GETSEZIONEECONOMICA(aDocTst.cd_tipo_documento) = CNRCTB200.IS_DARE then
aContoEP := CNRCTB002.GETVOCEEPRATEIPASSIVI(aDocTst.esercizio);
else
aContoEP := CNRCTB002.GETVOCEEPRATEIATTIVI(aDocTst.esercizio);
end if;
end if;
CONTO_USATO := CNRCTB002.GETVOCEEP(aListaMovimenti(i).ESERCIZIO, aListaMovimenti(i).cd_voce_ep);
If (Upper(trim(CONTO_USATO.natura_voce)) Not In ('EEC', 'EER') or( CONTO_USATO.natura_voce is null and CONTO_USATO.RIEPILOGA_A !='CEC')) Then
aListaMovimenti(i).cd_voce_ep := aContoEP.cd_voce_ep;
End If;
End loop;
aScrittura.cd_causale_coge := CNRCTB200.CAU_RATEI_QUOTA; -- LA QUOTA DELL'ANNO PRIMA E' RATEO
CNRCTB200.CREASCRITTCOGE(aDocTst.esercizio - 1, aScrittura, aListaMovimenti);
------------ E ROVESCIAMENTO DELLA SCRITTURA PER CHIUDERE IL RATEO COL COSTO NELL'ANNO NUOVO
aScrittura.dt_contabilizzazione := to_date('0101'||aDocTst.esercizio, 'DDMMYYYY');
For i in 1 .. aListaMovimenti.count loop
If aListaMovimenti(i).dt_da_competenza_coge Is Not Null Then
aListaMovimenti(i).dt_da_competenza_coge := to_date('0101'||aDocTst.esercizio, 'DDMMYYYY');
End If;
If aListaMovimenti(i).dt_a_competenza_coge Is Not Null Then
aListaMovimenti(i).dt_a_competenza_coge := to_date('0101'||aDocTst.esercizio, 'DDMMYYYY');
End If;
If aListaMovimenti(i).SEZIONE = CNRCTB200.IS_DARE Then
aListaMovimenti(i).SEZIONE := CNRCTB200.IS_AVERE;
Elsif aListaMovimenti(i).SEZIONE = CNRCTB200.IS_AVERE Then
aListaMovimenti(i).SEZIONE := CNRCTB200.IS_DARE;
End If;
End Loop;
aScrittura.cd_causale_coge := CNRCTB200.CAU_RATEI_QUOTA_P2; -- IL ROVESCIAMENTO E' RATEO QUOTA PARTE 2
CNRCTB200.CREASCRITTCOGE(aDocTst.esercizio, aScrittura, aListaMovimenti);
------------------ fine rateo + SUO ROVESCIAMENTO
Else -- SE NON E' A CAVALLO, QUINDI TOTALMENTE FUORI ESERCIZIO
-- SF 17.09.2007, modificata la data della scrittura, rimaneva quella del documento amministrativo
-- cioè quello dell'anno dopo (p.e. contabilizzazione 2006 con data 2007)
aScrittura.dt_contabilizzazione := aDocTst.dt_a_competenza_coge;
aScrittura.cd_causale_coge := CNRCTB200.CAU_RATEI; -- SE LA COMPETENZA E' TOTALMENTE ANNO PRECEDENTE E' RATEO
-- CHE SI CHIUDE CON LA CHIUSURA
CNRCTB200.CREASCRITTCOGE(aDocTst.esercizio - 1, aScrittura, aListaMovimenti);
End If;
/* fine */
Else -- SE E' ALL'INTERNO DELL'ESERCIZIO
CNRCTB200.CREASCRITTCOGE(aScrittura, aListaMovimenti);
End If;
if aListaMovimenti.count > 0 then
aListaNuoveScritture(aListaNuoveScritture.count+1):=aScrittura;
end if;
end loop;
-- Costruisce le scritture di parte 2 nel caso di competenza in es. prec.
if not CNRCTB200.isModificata(aListaVecchieScritture, aListaNuoveScritture) then
Dbms_Output.PUT_LINE ('rollback to savepoint CNRCTB205_SP_001');
rollback to savepoint CNRCTB205_SP_001;
end if;
<>
CNRCTB100.UPDATEDOCAMM_NODUVAUTUV(
aDocTst.cd_tipo_documento,
aDocTst.cd_cds,
aDocTst.esercizio,
aDocTst.cd_unita_organizzativa,
aDocTst.pg_numero_documento,
'stato_coge='''||CNRCTB100.STATO_COEP_CON||'''',
null
);
end;
-- =======================================
--
-- CONTABILIZZAZIONE ULTIMA
--
-- =======================================
-- Componenti scrittura ultima o singola
procedure buildMovUEP(aListaMovimenti IN OUT CNRCTB200.movimentiList,
aDocTst V_DOC_ULT_COGE_TSTA%rowtype,
aDoc V_DOC_ULT_COGE_RIGA%rowtype,
aTiIstituzCommerc IN OUT char,
aUser varchar2,
aTSnow date) is
aVoceEp voce_ep%rowtype;
aNum number;
aUOENTE unita_organizzativa%rowtype;
aDocTstPrimo V_DOC_AMM_COGE_TSTA%rowtype;
aDocTstPrimoBis V_DOC_AMM_COGE_TSTA%rowtype;
aImportoMov number;
netto_da_trattenere number;
fl_merce_intra CHAR(1);
fl_split CHAR(1);
fl_snr CHAR(1);
begin
--Dbms_Output.PUT_LINE ('A1');
-- rospuc prova spostato recupero trovaContoAnag
aVoceEp:=CNRCTB204.trovaContoAnag(aDoc, aDoc.cd_terzo,aDoc.cd_elemento_voce);
-- Modifica del 18/05/2004 err. 825 -> se la competenza è in esercizio precedente e l'esercizio attuale è il primo dell'applicazione
-- Il conto di costo/ricavo è SP Iniziale
if
aDoc.esercizio_doc = CNRCTB008.ESERCIZIO_PARTENZA
and aDoc.cd_tipo_doc not in (CNRCTB100.TI_FATTURA_ATTIVA,CNRCTB100.TI_FATTURA_PASSIVA)
then
select * into aDocTstPrimo from V_DOC_AMM_COGE_TSTA where
CD_TIPO_DOCUMENTO=aDoc.cd_tipo_doc
and CD_CDS=aDoc.cd_cds_doc
and CD_UNITA_ORGANIZZATIVA=aDoc.cd_uo_doc
and ESERCIZIO=aDoc.esercizio_doc
and PG_NUMERO_DOCUMENTO=aDoc.pg_numero_doc;
if CNRCTB204.getCompetenzaFuoriEsercizio(aDocTstPrimo) then
if CNRCTB100.GETSEZIONEECONOMICA(aDocTstPrimo.cd_tipo_documento) = CNRCTB100.IS_DARE then
aVoceEP:=CNRCTB002.GETVOCEEPDEBITIINIZIALI(aDocTstPrimo.esercizio);
else
aVoceEP:=CNRCTB002.GETVOCEEPCREDITIINIZIALI(aDocTstPrimo.esercizio);
end if;
end if;
end if;
-- Modifica del 26/02/2004
-- Gestione della reversale di accantonamento IVA al centro
-- Nel caso si tratti di revrsale di accantonamento iva al centro, il conto da utilizzare
-- al posto di quello creditorio, è il conto erario/IVA
--Dbms_Output.PUT_LINE ('A');
If aDocTst.cd_tipo_documento_cont = CNRCTB018.TI_DOC_REV And aDoc.cd_tipo_doc = CNRCTB100.TI_GEN_CORI_ACC_ENTRATA Then
-- Verifico se si tratta di reversale di accantonamento IVA al centro
Dbms_Output.PUT_LINE ('B');
begin
select distinct 1 into aNum from reversale_riga rr where
esercizio=aDocTst.esercizio
and cd_cds=aDocTst.cd_cds
and pg_reversale=aDocTst.pg_documento_cont
and exists (
select 1 from ass_obb_acr_pgiro aoa where
cd_cds = rr.cd_cds
and esercizio = rr.esercizio
and esercizio_ori_accertamento = rr.esercizio_ori_accertamento
and pg_accertamento = rr.pg_accertamento
and ti_origine = CNRCTB001.GESTIONE_ENTRATE
and exists (select 1 from liquidazione_iva_centro where
CD_CDS_OBB_ACCENTR=aoa.cd_cds
and ESERCIZIO_OBB_ACCENTR=aoa.esercizio
and ESERCIZIO_ORI_OBB_ACCENTR=aoa.esercizio_ori_obbligazione
and PG_OBB_ACCENTR=aoa.pg_obbligazione
)
);
-- Nel caso sia reversale di accantonamento IVA, il conto da usare è il patrimoniale Erario conto IVA
aVoceEp:=CNRCTB002.GETVOCEEPERARIOCIVA(aDocTst.esercizio);
exception when NO_DATA_FOUND then
null;
end;
end if;
-- Modifica del 22/04/2004
-- Gestione del mandato di versamento IVA al centro
-- Nel caso si tratti di mandato di versamento IVA al centro, il conto da utilizzare
-- al posto di quello creditorio, è il conto erario/IVA
--Dbms_Output.PUT_LINE ('C '||aDocTst.cd_tipo_documento_cont||' '||aDoc.cd_tipo_doc);
--Dbms_Output.PUT_LINE ('RISPETTO A '||CNRCTB018.TI_DOC_MAN||' '||CNRCTB100.TI_GEN_CORI_VER_SPESA);
if
aDocTst.cd_tipo_documento_cont = CNRCTB018.TI_DOC_MAN
and aDoc.cd_tipo_doc = CNRCTB100.TI_GEN_CORI_VER_SPESA
then
-- Verifico se si tratta di mandato di versamento IVA al centro
--Dbms_Output.PUT_LINE ('D');
begin
aUOENTE:=CNRCTB020.GETUOENTE(aDocTst.esercizio);
--Dbms_Output.PUT_LINE ('11 '||aUOENTE.cd_unita_padre||' '||aUOENTE.cd_unita_organizzativa||' '
--||aDocTst.esercizio||' '||aDocTst.cd_cds||' '||aDocTst.pg_documento_cont);
select distinct 1 into aNum from mandato_riga mr where
esercizio=aDocTst.esercizio
and cd_cds=aDocTst.cd_cds
and pg_mandato=aDocTst.pg_documento_cont
and exists (
select 1 from documento_generico dg where
esercizio = mr.esercizio_doc_amm
and cd_cds = mr.cd_cds_doc_amm
and cd_unita_organizzativa = mr.cd_uo_doc_amm
and pg_documento_generico = mr.pg_doc_amm
and cd_tipo_documento_amm = mr.cd_tipo_documento_amm
and exists (select 1 from liquidazione_iva where
CD_CDS=aUOENTE.cd_unita_padre
and CD_UNITA_ORGANIZZATIVA=aUOENTE.cd_unita_organizzativa
and STATO='D'
and REPORT_ID=0
and CD_TIPO_DOCUMENTO=dg.cd_tipo_documento_amm
and CD_CDS_DOC_AMM=dg.cd_cds
and CD_UO_DOC_AMM=dg.cd_unita_organizzativa
and ESERCIZIO_DOC_AMM=dg.esercizio
and PG_DOC_AMM=dg.pg_documento_generico
)
);
-- Nel caso sia mandato di versamento IVA al centro, il conto da usare è il patrimoniale Erario conto IVA
Dbms_Output.PUT_LINE ('D1');
aVoceEp:=CNRCTB002.GETVOCEEPERARIOCIVA(aDocTst.esercizio);
Dbms_Output.PUT_LINE ('D1 '||aVoceEp.CD_VOCE_EP);
exception when NO_DATA_FOUND then
--Dbms_Output.PUT_LINE ('NIENTE');
null;
end;
end if;
--Dbms_Output.PUT_LINE ('D2');
-- Conto speciale per mandati di accreditamento
if aDocTst.ti_man_rev = CNRCTB038.TI_MAN_ACCRED then
aVoceEp:=CNRCTB002.getVoceEpBancaCds(aDocTst.esercizio);
end if;
-- Estrazione del numero di movimenti istituzionali/commerciali e promiscui
aTiIstituzCommerc:=CNRCTB100.TI_ISTITUZIONALE;
begin
select nvl(ti_istituz_commerc,CNRCTB100.TI_ISTITUZIONALE)
into aTiIstituzCommerc
From v_doc_amm_coge_tsta
Where cd_tipo_documento=aDoc.cd_tipo_doc
and esercizio=aDoc.esercizio_doc
and pg_numero_documento=aDoc.pg_numero_doc
and cd_cds=aDoc.cd_cds_doc
and cd_unita_organizzativa=aDoc.cd_uo_doc;
exception when NO_DATA_FOUND then
null;
end;
aImportoMov:=aDoc.im_lordo_doc;
-- Modifica del 18/10/2004 rich. 844 -> per le fatture passive di tipo
-- San Marino o intra ue che siano anche istituzionali di beni, bisogna
-- utilizzare il netto invece del lordo del mandato
if aDoc.cd_tipo_doc = CNRCTB100.TI_COMPENSO then
select nvl(IM_NETTO_DA_TRATTENERE ,0)
into netto_da_trattenere
from COMPENSO
Where
CD_CDS=aDoc.cd_cds_doc
and CD_UNITA_ORGANIZZATIVA=aDoc.cd_uo_doc
and ESERCIZIO=aDoc.esercizio_doc
and PG_compenso=aDoc.pg_numero_doc;
if (netto_da_trattenere!=0 ) then
aImportoMov:=aDoc.im_lordo_doc - netto_da_trattenere;
end if;
end if;
If aDoc.cd_tipo_doc = CNRCTB100.TI_FATTURA_PASSIVA Then
select *
into aDocTstPrimoBis
from V_DOC_AMM_COGE_TSTA
Where CD_TIPO_DOCUMENTO=aDoc.cd_tipo_doc
and CD_CDS=aDoc.cd_cds_doc
and CD_UNITA_ORGANIZZATIVA=aDoc.cd_uo_doc
and ESERCIZIO=aDoc.esercizio_doc
and PG_NUMERO_DOCUMENTO=aDoc.pg_numero_doc;
select fl_servizi_non_residenti,fl_merce_intra_ue,fattura_passiva.fl_split_payment into fl_snr,fl_merce_intra,fl_split
from fattura_passiva, tipo_sezionale
where
fattura_passiva.cd_tipo_sezionale = tipo_sezionale.cd_tipo_sezionale and
fattura_passiva.esercizio = aDoc.esercizio_doc and
fattura_passiva.cd_cds = aDoc.cd_cds_doc and
fattura_passiva.cd_unita_organizzativa = aDoc.cd_uo_doc and
fattura_passiva.pg_fattura_passiva = aDoc.pg_numero_doc;
If (aDocTstPrimoBis.FL_SAN_MARINO_SENZA_IVA = 'Y' Or
aDocTstPrimoBis.FL_INTRA_UE = 'Y' or
fl_merce_intra ='Y' ) And
aDocTstPrimoBis.TI_ISTITUZ_COMMERC = CNRCTB100.TI_ISTITUZIONALE And
aDocTstPrimoBis.TI_BENE_SERVIZIO = CNRCTB100.TI_FT_ACQ_BENI Then
aImportoMov:=aDoc.im_doc;
End if;
If fl_snr ='Y' And
aDocTstPrimoBis.TI_ISTITUZ_COMMERC = CNRCTB100.TI_ISTITUZIONALE And
aDocTstPrimoBis.TI_BENE_SERVIZIO = CNRCTB100.TI_FT_ACQ_SERVIZI Then
aImportoMov:=aDoc.im_doc;
End if;
If fl_split ='Y' And
aDocTstPrimoBis.TI_ISTITUZ_COMMERC = CNRCTB100.TI_ISTITUZIONALE Then
aImportoMov:=aDoc.im_doc;
End if;
end if;
-- SDOPPIO GLI IMPORTI NEL CASO IN CUI LA TESTATA DELLA FATTURA SIA PROMISCUA
If aTiIstituzCommerc = CNRCTB100.TI_PROMISCUO Then
dbms_output.put_line('Ros');
Select Nvl(Sum(IM_IMPONIBILE), 0) --+ Nvl(Sum(IM_IVA), 0)
into aImportoMov
From v_doc_amm_coge_riga
Where cd_tipo_documento = aDoc.cd_tipo_doc
And esercizio = aDoc.esercizio_doc
And pg_numero_documento = aDoc.pg_numero_doc
And cd_cds = aDoc.cd_cds_doc
And cd_unita_organizzativa = aDoc.cd_uo_doc
And ti_istituz_commerc = CNRCTB100.TI_ISTITUZIONALE;
If aImportoMov > 0 Then
dbms_output.put_line('Ros 2');
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,
aDocTst.esercizio,
aDocTst.cd_uo_origine,
aVoceEp,
aImportoMov,
CNRCTB204.getSezione(aDocTst),
null,
null,
aDoc.cd_terzo,
CNRCTB100.TI_ISTITUZIONALE,
aListaMovimenti,
aUser,
aTSnow);
End If;
dbms_output.put_line('Ros 3');
Select Nvl(Sum(IM_IMPONIBILE), 0) + Nvl(Sum(IM_IVA), 0)
into aImportoMov
From v_doc_amm_coge_riga
Where cd_tipo_documento = aDoc.cd_tipo_doc
And esercizio = aDoc.esercizio_doc
And pg_numero_documento = aDoc.pg_numero_doc
And cd_cds = aDoc.cd_cds_doc
And cd_unita_organizzativa = aDoc.cd_uo_doc
And ti_istituz_commerc = CNRCTB100.TI_COMMERCIALE;
If aImportoMov > 0 Then
dbms_output.put_line('Ros 4');
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,
aDocTst.esercizio,
aDocTst.cd_uo_origine,
aVoceEp,
aImportoMov,
CNRCTB204.getSezione(aDocTst),
null,
null,
aDoc.cd_terzo,
CNRCTB100.TI_COMMERCIALE,
aListaMovimenti,
aUser,
aTSnow);
End If;
dbms_output.put_line('Ros 5');
Else
Dbms_Output.PUT_LINE ('D11 '||aVoceEp.CD_VOCE_EP);
dbms_output.put_line('Ros 6');
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,
aDocTst.esercizio,
aDocTst.cd_uo_origine,
aVoceEp,
aImportoMov,
CNRCTB204.getSezione(aDocTst),
null,
null,
aDoc.cd_terzo,
aTiIstituzCommerc,
aListaMovimenti,
aUser,
aTSnow
);
End If;
end;
procedure buildMovContrCoriUEP(aListaMovimenti IN OUT CNRCTB200.movimentiList, aDocTst V_DOC_ULT_COGE_TSTA%rowtype, aDocRiga V_DOC_ULT_COGE_RIGA%rowtype, aUser varchar2, aTSnow date) is
aCompenso compenso%rowtype;
aFatt fattura_passiva%rowtype;
isEscluso boolean;
aEffCori ass_tipo_cori_voce_ep%rowtype;
aContoEp voce_ep%rowtype;
aContoEpCoriEnte voce_ep%rowtype;
aContoEpCoriEnteORI voce_ep%rowtype;
totEnte number:=0;
ev elemento_voce.cd_elemento_voce%typE;
begin
dbms_output.put_line('ci arrivo cori');
if aDocRiga.cd_tipo_doc = CNRCTB100.TI_COMPENSO then
for aCori in (select * from v_doc_amm_coge_cori a where
esercizio = aDocRiga.esercizio_doc
and cd_cds = aDocRiga.cd_cds_doc
and cd_unita_organizzativa = aDocRiga.cd_uo_doc
and pg_numero_documento = aDocRiga.pg_numero_doc
and cd_tipo_documento = aDocRiga.cd_tipo_doc
) loop
isEscluso:=false;
declare
aCoriLoc contributo_ritenuta%rowtype;
aCdClassificazioneCori char(2);
begin
begin
select * into aCoriLoc from contributo_ritenuta where
cd_cds = aCori.cd_cds
and esercizio = aCori.esercizio
and cd_unita_organizzativa = aCori.cd_unita_organizzativa
and pg_compenso = aCori.pg_numero_documento
and cd_contributo_ritenuta = aCori.cd_contributo_ritenuta
and ti_ente_percipiente = aCori.ti_ente_percepiente;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Contributo ritenuta non trovato:'||aCori.cd_contributo_ritenuta);
end;
-- Se la tipologia di contributo ritenuta è IVA o RIVALSA, non vengono esposte nell'ultima scrittura (per l'IVA indipendentemente dal fatto che sia commerciale o istituzionale)
aCdClassificazioneCori:=CNRCTB545.getTipoCoriDaRigaCompenso(aCoriLoc);
if (( aCdClassificazioneCori = CNRCTB545.isCoriIva and aCori.TI_ENTE_PERCEPIENTE ='E' )
or aCdClassificazioneCori = CNRCTB545.isCoriRivalsa
) then
isEscluso:=true;
end if;
end;
if not isEscluso then
dbms_output.put_line('cori '||aCori.cd_contributo_ritenuta||' ti_e_p '||aCori.ti_ente_percepiente);
aEffCori:=CNRCTB204.getAssCoriEp(aDocRiga.esercizio,aCori.cd_contributo_ritenuta,aCori.ti_ente_percepiente,CNRCTB100.IS_DARE);
begin
if(aCori.ti_ente_percepiente = TI_CORI_ENTE) then
aContoEpCoriEnte:=CNRCTB204.trovaContoContrEp(aEffCori.esercizio, NULL,NULL,NULL, aEffCori.cd_voce_EP);
else
aContoEpCoriEnte:=null;
end if;
aContoEp:=CNRCTB002.getVoceEp(aEffCori.esercizio, aEffCori.cd_voce_ep_contr);
dbms_output.put_line('aContoEp '||aEffCori.cd_voce_ep_contr);
exception when OTHERS then
IBMERR001.RAISE_ERR_GENERICO('Conto economico di contr.: '||aEffCori.cd_voce_ep_contr||' associato a CORI IVA non trovato in esercizio '||aEffCori.esercizio);
end;
if (abs(aCori.ammontare) = aCori.ammontare) then
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
aContoEp,
abs(aCori.ammontare),
CNRCTB200.getSezioneOpposta(CNRCTB100.IS_DARE),
null,
null,
aDocRiga.cd_terzo,
ACORI.TI_ISTITUZ_COMMERC, /* STANI 04.11 AGGIUNTO PER AVERE SCRITTURE COMMERCIALI PER COMPENSI
COMMERCIALI. NON PASSANDO NULLA ERA AUTOMATICAMENTE
ISTITUZIONALE */
aListaMovimenti,
aUser,
aTSnow
);
else
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
aContoEp,
abs(aCori.ammontare),
CNRCTB200.getSezioneOpposta(CNRCTB100.IS_AVERE),
null,
null,
aDocRiga.cd_terzo,
ACORI.TI_ISTITUZ_COMMERC, /* STANI 04.11 AGGIUNTO PER AVERE SCRITTURE COMMERCIALI PER COMPENSI
COMMERCIALI. NON PASSANDO NULLA ERA AUTOMATICAMENTE
ISTITUZIONALE */
aListaMovimenti,
aUser,
aTSnow
);
end if;
begin
select distinct cd_elemento_voce_ev into Ev
From V_DOC_AMM_COGE_RIGA
Where cd_cds = aDocRiga.cd_cds
And cd_unita_organizzativa = aDocRiga.cd_unita_organizzativa
And esercizio = aDocRiga.esercizio_doc
And pg_numero_documento= aDocRiga.pg_numero_doc
And cd_tipo_documento= aDocRiga.cd_tipo_doc;
exception when too_many_rows then
dbms_output.put_line ('Tipo '||aDocRiga.cd_tipo_doc||'Uo '||aDocRiga.cd_unita_organizzativa||' doc '||aDocRiga.pg_numero_doc);
when no_data_found then
dbms_output.put_line ('Tipo '||aDocRiga.cd_tipo_doc||'Uo '||aDocRiga.cd_unita_organizzativa||' doc '||aDocRiga.pg_numero_doc);
end;
-- Rospuc 18/05/2017 scritture per rettificare i debiti considerando solo le ritenute a carico ente
if(aContoEpCoriEnte.cd_voce_ep is not null and ev is not null) then
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
aContoEpCoriEnte,
abs(aCori.ammontare),
CNRCTB100.IS_DARE,
null,
null,
aDocRiga.cd_terzo,
ACORI.TI_ISTITUZ_COMMERC,
aListaMovimenti,
aUser,
aTSnow
);
aContoEpCoriEnteORI:=CNRCTB204.trovaContoAnag(aDocRiga, aDocRiga.cd_terzo,ev);
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
aContoEpCoriEnteORI,
abs(aCori.ammontare),
CNRCTB200.getSezioneOpposta(CNRCTB100.IS_DARE),
null,
null,
aDocRiga.cd_terzo,
ACORI.TI_ISTITUZ_COMMERC,
aListaMovimenti,
aUser,
aTSnow
);
end iF;
-- Rospuc 18/05/2017 scritture per rettificare i debiti considerando solo le ritenute a carico ente
end if;
end loop;
end if;
end;
procedure buildMovContrDefaultUEP(aListaMovimenti IN OUT CNRCTB200.movimentiList, aDocTst V_DOC_ULT_COGE_TSTA%rowtype, aDocRiga V_DOC_ULT_COGE_RIGA%rowtype, aTiIstituzCommerc char, aUser varchar2, aTSnow date) is
aVoceEP voce_ep%rowtype:=null;
aMovimento movimento_coge%rowtype;
begin
if aListaMovimenti.count = 0 then
IBMERR001.RAISE_ERR_GENERICO('Nessun movimento da chiudere in contropartita');
end if;
dbms_output.put_line ('aiu v '||aDocRiga.cd_elemento_voce);
aVoceEP:=CNRCTB204.trovaContoContrEP(aDocTst, aDocRiga);
dbms_output.put_line ('aiu '||aVoceEp.cd_voce_ep);
-- Accumula i movimenti di controparte
CNRCTB204.BUILDCHIUSURASCRITTURA(
aListaMovimenti(1).cd_cds,aListaMovimenti(1).esercizio,aListaMovimenti(1).cd_unita_organizzativa,
aVoceEP,
null,
null,
aListaMovimenti(1).cd_terzo,
-- CNRCTB200.TI_ISTITUZIONALE,
aTiIstituzCommerc,
aListaMovimenti,
aUser,
aTSnow
);
end;
procedure buildMovContrUEP(aListaMovimenti IN OUT CNRCTB200.movimentiList,
aDocTst V_DOC_ULT_COGE_TSTA%rowtype,
aDocRiga V_DOC_ULT_COGE_RIGA%rowtype,
aTiIstituzCommerc char,
aUser varchar2,
aTSnow date) is
begin
-- Gestione movimenti contropartita compenso
if
aDocRiga.cd_tipo_doc = CNRCTB100.TI_COMPENSO
or aDocRiga.cd_tipo_doc = CNRCTB100.TI_FATTURA_PASSIVA
then
buildMovContrCoriUEP(aListaMovimenti, aDocTst, aDocRiga, aUser, aTSnow);
end if;
-- Movimenti di default
buildMovContrDefaultUEP(aListaMovimenti, aDocTst, aDocRiga, aTiIstituzCommerc , aUser, aTSnow);
end;
Procedure buildMovVersCoriUEP(aListaMovimenti IN OUT CNRCTB200.movimentiList, aDocTst V_DOC_ULT_COGE_TSTA%rowtype, aDoc V_DOC_ULT_COGE_RIGA%rowtype, aUser varchar2, aTSnow date) is
aVoceEP voce_ep%rowtype;
aAssCoriEp ass_tipo_cori_voce_ep%rowtype;
aCoriLoc contributo_ritenuta%rowtype;
isEscluso boolean;
aGenRiga documento_generico_riga%rowtype;
aAccScad accertamento_scadenzario%rowtype;
aObbScad obbligazione_scadenzario%rowtype;
Begin
-- Carico la riga di generico di versamento
select * into aGenRiga from documento_generico_riga where
esercizio = aDoc.esercizio
and cd_cds = aDoc.cd_cds_doc
and cd_unita_organizzativa = aDoc.cd_uo_doc
and cd_tipo_documento_amm = aDoc.cd_tipo_doc
and pg_documento_generico = aDoc.pg_numero_doc
and progressivo_riga = 1 for update nowait;
Dbms_Output.PUT_LINE ('TROVA GENERICO '||aGenRiga.CD_CDS||' '||aGenRiga.CD_UNITA_ORGANIZZATIVA||' '||aGenRiga.ESERCIZIO||' '||
aGenRiga.CD_TIPO_DOCUMENTO_AMM||' '||aGenRiga.PG_DOCUMENTO_GENERICO||' '||aGenRiga.PROGRESSIVO_RIGA);
If aGenRiga.pg_obbligazione is not null Then
-- Carico l'accertamento collegato all'obbligazione su partita di giro
Dbms_Output.PUT_LINE ('C '||aGenRiga.esercizio_obbligazione||' '||aGenRiga.cd_cds_obbligazione||' '||aGenRiga.pg_obbligazione);
Begin
select *
into aAccScad
from accertamento_scadenzario
Where cd_cds = aGenRiga.cd_cds_obbligazione And
esercizio = aGenRiga.esercizio_obbligazione And
(esercizio_originale, pg_accertamento) In
(select esercizio_ori_accertamento, pg_accertamento
from ass_obb_acr_pgiro
Where cd_cds = aGenRiga.cd_cds_obbligazione
And esercizio = aGenRiga.esercizio
And esercizio_ori_OBBLIGAZIONE = aGenRiga.esercizio_ori_obbligazione
And pg_obbligazione = aGenRiga.pg_obbligazione
--And ti_origine = CNRCTB001.GESTIONE_ENTRATE REMMATO IL 28.06.2006 STANI (RITENUTE STIPENDI)
) And
pg_accertamento_scadenzario = 1;
Exception when NO_DATA_FOUND Then
Dbms_Output.PUT_LINE ('NO DATA AA');
Return;
End;
Begin
Dbms_Output.PUT_LINE ('CERCO CORI LOC '||aAccScad.esercizio||' '||aAccScad.cd_cds||' '||aAccScad.pg_accertamento||' '||aAccScad.pg_accertamento_scadenzario);
Select *
Into aCoriLoc
From contributo_ritenuta
Where cd_cds_accertamento = aAccScad.cd_cds
And esercizio_accertamento = aAccScad.esercizio
And esercizio_ori_accertamento = aAccScad.esercizio_originale
And pg_accertamento = aAccScad.pg_accertamento
And pg_accertamento_scadenzario = aAccScad.pg_accertamento_scadenzario;
-- Se l'accertamento di contropartita che ha aperto la partita di giro non è
-- collegato a CORI di compenso, esce
-- (modifica del 13/07/2005 => ... dopo aver controllato anche che l'accertamento di origine
exception when NO_DATA_FOUND Then
-- RICERCA L'ACCERTAMENTO DELL'ESERCIZIO PRECEDENTE
Declare
CDS_ES_PREC VARCHAR(20);
ES_PREC NUMBER;
ES_ORI_PREC NUMBER;
PG_ACC_ES_PREC NUMBER;
Begin
Dbms_Output.PUT_LINE ('NO DATA ACC '||aAccScad.cd_cds||' '||aAccScad.esercizio||' '||aAccScad.pg_accertamento);
Select CD_CDS_ORI_RIPORTO, ESERCIZIO_ORI_RIPORTO, ESERCIZIO_ORI_ORI_RIPORTO, PG_ACCERTAMENTO_ORI_RIPORTO
Into CDS_ES_PREC, ES_PREC, ES_ORI_PREC, PG_ACC_ES_PREC
From ACCERTAMENTO
Where CD_CDS = aAccScad.cd_cds And
ESERCIZIO = aAccScad.esercizio And
ESERCIZIO_ORIGINALE = aAccScad.esercizio_originale And
PG_ACCERTAMENTO = aAccScad.pg_accertamento;
Dbms_Output.PUT_LINE ('NO DATA CORI LOC '||ES_PREC||' '||CDS_ES_PREC||' '||PG_ACC_ES_PREC);
select * into aCoriLoc from contributo_ritenuta
Where cd_cds_accertamento = CDS_ES_PREC
and esercizio_accertamento = ES_PREC
and esercizio_ori_accertamento = ES_ORI_PREC
and pg_accertamento = PG_ACC_ES_PREC
and pg_accertamento_scadenzario = 1;
Exception
When No_Data_Found Then
Begin
if(recParametriCnr.fl_tesoreria_unica ='N') then
select a.*
into aAccScad
from LIQUID_CORI_ASS_PGIRO l,ass_obb_acr_pgiro asS,accertamento_scadenzario a
Where
l.ESERCIZIO_PGIRO_NEW = aGenRiga.esercizio_obbligazione
and l.CD_CDS_PGIRO_NEW =aGenRiga.cd_cds_obbligazione
and l.PG_PGIRO_NEW = aGenRiga.pg_obbligazione
and ESERCIZIO_ORI_PGIRO_NEW =aGenRiga.esercizio_ori_obbligazione
and tipo_Pgiro =CNRCTB001.GESTIONE_SPESE
and l.ESERCIZIO_PGIRO_ORIGINE = asS.esercizio
and l.CD_CDS_PGIRO_ORIGINE = asS.cd_cds
and l.PG_PGIRO_ORIGINE = asS.pg_obbligazione
and l.ESERCIZIO_ORI_PGIRO_ORIGINE = asS.ESERCIZIO_ORI_OBBLIGAZIONE
and a.esercizio = asS.esercizio
and a.cd_cds = asS.cd_cds
and a.pg_accertamento = asS.pg_accertamento
and a.ESERCIZIO_ORIGINALE = ass.ESERCIZIO_ORI_ACCERTAMENTO
and a.pg_accertamento_scadenzario = 1;
Dbms_Output.PUT_LINE ('CERCO CORI LOC 999 '||aAccScad.esercizio||' '||aAccScad.cd_cds||' '||aAccScad.pg_accertamento||' '||aAccScad.pg_accertamento_scadenzario);
Select *
Into aCoriLoc
From contributo_ritenuta
Where cd_cds_accertamento = aAccScad.cd_cds
And esercizio_accertamento = aAccScad.esercizio
And esercizio_ori_accertamento = aAccScad.esercizio_originale
And pg_accertamento = aAccScad.pg_accertamento
And pg_accertamento_scadenzario = aAccScad.pg_accertamento_scadenzario;
-- Se l'accertamento di contropartita che ha aperto la partita di giro non è
-- collegato a CORI di compenso, esce
-- (modifica del 13/07/2005 => ... dopo aver controllato anche che l'accertamento di origine
end if;
exception when NO_DATA_FOUND Then
-- RICERCA L'ACCERTAMENTO DELL'ESERCIZIO PRECEDENTE
Declare
CDS_ES_PREC VARCHAR(20);
ES_PREC NUMBER;
ES_ORI_PREC NUMBER;
PG_ACC_ES_PREC NUMBER;
Begin
Dbms_Output.PUT_LINE ('NO DATA ACC 999 '||aAccScad.cd_cds||' '||aAccScad.esercizio||' '||aAccScad.pg_accertamento);
Select CD_CDS_ORI_RIPORTO, ESERCIZIO_ORI_RIPORTO, ESERCIZIO_ORI_ORI_RIPORTO, PG_ACCERTAMENTO_ORI_RIPORTO
Into CDS_ES_PREC, ES_PREC, ES_ORI_PREC, PG_ACC_ES_PREC
From ACCERTAMENTO
Where CD_CDS = aAccScad.cd_cds And
ESERCIZIO = aAccScad.esercizio And
ESERCIZIO_ORIGINALE = aAccScad.esercizio_originale And
PG_ACCERTAMENTO = aAccScad.pg_accertamento;
Dbms_Output.PUT_LINE ('NO DATA CORI LOC 999 '||ES_PREC||' '||CDS_ES_PREC||' '||PG_ACC_ES_PREC);
select * into aCoriLoc from contributo_ritenuta
Where cd_cds_accertamento = CDS_ES_PREC
and esercizio_accertamento = ES_PREC
and esercizio_ori_accertamento = ES_ORI_PREC
and pg_accertamento = PG_ACC_ES_PREC
and pg_accertamento_scadenzario = 1;
--exception when NO_DATA_FOUND Then
-- Dbms_Output.PUT_LINE ('NO DATA 999');
-- return;
end;
end;
End;
end;
Elsif aGenRiga.pg_accertamento is not null then
-- Carico l'obbligazione collegato all'accertamento su partita di giro
Begin
Dbms_Output.PUT_LINE ('ACC '||aGenRiga.esercizio_accertamento||' '||aGenRiga.cd_cds_accertamento||' '||aGenRiga.pg_accertamento);
Select *
Into aObbScad
From obbligazione_scadenzario
Where cd_cds = aGenRiga.cd_cds_accertamento And
esercizio = aGenRiga.esercizio_accertamento And
(esercizio_originale, pg_obbligazione) In
(Select esercizio_ori_obbligazione, pg_obbligazione
From ass_obb_acr_pgiro
Where cd_cds = aGenRiga.cd_cds_accertamento And
esercizio = aGenRiga.esercizio And
esercizio_ori_accertamento = aGenRiga.esercizio_ori_accertamento And
pg_accertamento = aGenRiga.pg_accertamento
-- And ti_origine = CNRCTB001.GESTIONE_SPESE REMMATO IL 28.06.2006 STANI (RITENUTE STIPENDI)
) And
pg_obbligazione_scadenzario = 1;
Exception
When No_Data_Found Then
IBMERR001.RAISE_ERR_GENERICO('L''obbligazione non è associata a Partite di Giro con origine '||CNRCTB001.GESTIONE_SPESE);
End;
Begin
Select * into aCoriLoc from contributo_ritenuta where
-- Fix del 23/04/2004 esercizio e cds sono quelli dell'obbl. e non dell'acc.
cd_cds_obbligazione = aObbScad.cd_cds
and esercizio_obbligazione = aObbScad.esercizio
and esercizio_ori_obbligazione = aObbScad.esercizio_originale
and pg_obbligazione = aObbScad.pg_obbligazione
and pg_obbligazione_scadenzario = aObbScad.pg_obbligazione_scadenzario;
-- Se l'obbligazione di contropartita che ha aperto la partita di giro non è colegata a CORI di compenso, esce
Exception when NO_DATA_FOUND then
-- RICERCA L'OBBLIGAZIONE DELL'ESERCIZIO PRECEDENTE
Declare
CDS_ES_PREC VARCHAR(20);
ES_PREC NUMBER;
ES_ORI_PREC NUMBER;
PG_OBB_ES_PREC NUMBER;
Begin
Select CD_CDS_ORI_RIPORTO, ESERCIZIO_ORI_RIPORTO, ESERCIZIO_ORI_ORI_RIPORTO, PG_OBBLIGAZIONE_ORI_RIPORTO
Into CDS_ES_PREC, ES_PREC, ES_ORI_PREC, PG_OBB_ES_PREC
From OBBLIGAZIONE
Where CD_CDS = aObbScad.cd_cds And
ESERCIZIO = aObbScad.esercizio And
ESERCIZIO_ORIGINALE = aObbScad.esercizio_originale And
PG_OBBLIGAZIONE = aObbScad.pg_obbligazione;
select * into aCoriLoc from contributo_ritenuta where
cd_cds_obbligazione = CDS_ES_PREC
and esercizio_obbligazione = ES_PREC
and esercizio_ori_obbligazione = ES_ORI_PREC
and pg_obbligazione = PG_OBB_ES_PREC
and pg_obbligazione_scadenzario = 1;
Exception
When No_Data_Found Then
Begin
select o.*
into aObbScad
from LIQUID_CORI_ASS_PGIRO l,ass_obb_acr_pgiro asS,obbligazione_scadenzario O
Where
l.ESERCIZIO_PGIRO_NEW = aGenRiga.esercizio_accertamento
and l.CD_CDS_PGIRO_NEW =aGenRiga.cd_cds_accertamento
and l.PG_PGIRO_NEW = aGenRiga.pg_accertamento
and ESERCIZIO_ORI_PGIRO_NEW =aGenRiga.esercizio_ori_accertamento
and tipo_Pgiro =CNRCTB001.GESTIONE_ENTRATE
and l.ESERCIZIO_PGIRO_ORIGINE = asS.esercizio
and l.CD_CDS_PGIRO_ORIGINE = asS.cd_cds
and l.PG_PGIRO_ORIGINE = asS.pg_accertamento
and l.ESERCIZIO_ORI_PGIRO_ORIGINE = asS.ESERCIZIO_ORI_accertamento
and o.esercizio = asS.esercizio
and o.cd_cds = asS.cd_cds
and o.pg_obbligazione = asS.pg_obbligazione
and o.ESERCIZIO_ORIGINALE = ass.ESERCIZIO_ORI_obbligazione
and o.pg_obbligazione_scadenzario = 1;
Dbms_Output.PUT_LINE ('CERCO CORI LOC 999'||aObbScad.esercizio||' '||aObbScad.cd_cds||' '||aObbScad.pg_obbligazione||' '||aObbScad.pg_obbligazione_scadenzario);
Select * into aCoriLoc from contributo_ritenuta where
-- Fix del 23/04/2004 esercizio e cds sono quelli dell'obbl. e non dell'acc.
cd_cds_obbligazione = aObbScad.cd_cds
and esercizio_obbligazione = aObbScad.esercizio
and esercizio_ori_obbligazione = aObbScad.esercizio_originale
and pg_obbligazione = aObbScad.pg_obbligazione
and pg_obbligazione_scadenzario = aObbScad.pg_obbligazione_scadenzario;
-- Se l'obbligazione di contropartita che ha aperto la partita di giro non è colegata a CORI di compenso, esce
exception when NO_DATA_FOUND Then
-- RICERCA L'ACCERTAMENTO DELL'ESERCIZIO PRECEDENTE
Declare
CDS_ES_PREC VARCHAR(20);
ES_PREC NUMBER;
ES_ORI_PREC NUMBER;
PG_OBB_ES_PREC NUMBER;
Begin
Select CD_CDS_ORI_RIPORTO, ESERCIZIO_ORI_RIPORTO, ESERCIZIO_ORI_ORI_RIPORTO, PG_OBBLIGAZIONE_ORI_RIPORTO
Into CDS_ES_PREC, ES_PREC, ES_ORI_PREC, PG_OBB_ES_PREC
From OBBLIGAZIONE
Where CD_CDS = aObbScad.cd_cds And
ESERCIZIO = aObbScad.esercizio And
ESERCIZIO_ORIGINALE = aObbScad.esercizio_originale And
PG_OBBLIGAZIONE = aObbScad.pg_obbligazione;
select * into aCoriLoc from contributo_ritenuta where
cd_cds_obbligazione = CDS_ES_PREC
and esercizio_obbligazione = ES_PREC
and esercizio_ori_obbligazione = ES_ORI_PREC
and pg_obbligazione = PG_OBB_ES_PREC
and pg_obbligazione_scadenzario = 1;
exception when NO_DATA_FOUND Then
Dbms_Output.PUT_LINE ('NO DATA 999');
-- return;
end;
end;
End;
end;
Else
IBMERR001.RAISE_ERR_GENERICO('Il documento generico di versamento non risulta collegato a '||cnrutil.getLabelObbligazioneMin()||' o accertamento:'||aDoc.pg_numero_doc||' tipo:'||aDoc.cd_tipo_doc);
End if;
IF(aCoriLoc.cd_contributo_ritenuta IS NULL and aDoc.cd_elemento_voce is not null) then
dbms_output.put_line('no coriloc ' || aDoc.CD_TIPO_DOC );
if (aDoc.CD_TIPO_DOC in (CNRCTB100.TI_GEN_CORI_VER_ENTRATA)) then
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
CNRCTB204.trovaContoContrEp(aDocTst.esercizio,'C','E',aDoc.cd_elemento_voce,null),
abs(aDoc.im_doc),
CNRCTB204.getSezione(aDocTst),
null,
null,
aDoc.cd_terzo,
aListaMovimenti,
aUser,
aTSnow
);
elsif (aDoc.CD_TIPO_DOC in (CNRCTB100.TI_GEN_CORI_VER_SPESA)) then
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
CNRCTB204.trovaContoContrEp(aDocTst.esercizio,'D','S',aDoc.cd_elemento_voce,null),
abs(aDoc.im_doc),
CNRCTB204.getSezione(aDocTst),
null,
null,
aDoc.cd_terzo,
aListaMovimenti,
aUser,
aTSnow
);
end if;
ELSE
aAssCoriEp:=CNRCTB204.getAssCoriEp(aDocTst.esercizio, aCoriLoc.cd_contributo_ritenuta,aCoriLoc.ti_ente_percipiente,CNRCTB204.getSezioneCoriComp(aCoriLoc));
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
CNRCTB002.getVoceEp(aAssCoriEp.esercizio, aAssCoriEp.cd_voce_ep_contr),
abs(aCoriLoc.ammontare),
aAssCoriEp.sezione,
null,
null,
aDoc.cd_terzo,
aListaMovimenti,
aUser,
aTSnow
);
END IF;
dbms_output.put_line('aCoriLoc '||aCoriLoc.ammontare);
dbms_output.put_line('aCoriLoc conto '||aAssCoriEp.cd_voce_ep_contr);
end;
Procedure buildMovCommissioni1210(aListaMovimenti IN OUT CNRCTB200.movimentiList,
aDocTst V_DOC_ULT_COGE_TSTA%rowtype,
aDoc V_DOC_ULT_COGE_RIGA%rowtype,
aUser varchar2,
aTSnow date) is
aDocAmm v_doc_amm_coge_tsta%rowtype;
aVoceEp voce_ep%rowtype;
MAN_RIGA MANDATO_RIGA%rowtype;
aEV ELEMENTO_VOCE%Rowtype;
CONTO_DA_PASS VOCE_EP%rowtype;
Begin
-- Richiesta n. 793. Gestione esplicita delle commissioni di cambio su scrittura ultima
If aDoc.cd_tipo_doc = CNRCTB100.TI_FATTURA_PASSIVA Or
((CNRCTB100.ISINTABELLAGENERICO(aDoc.cd_tipo_doc) = 'Y') And
aDocTst.cd_tipo_documento_cont=CNRCTB018.TI_DOC_MAN) then
Begin
-- Se si tratta di fattura associata a lettera di pagam. estero
select * into aDocAmm
from v_doc_amm_coge_tsta
Where cd_tipo_documento=aDoc.cd_tipo_doc
and cd_cds = aDoc.cd_cds_doc
and cd_unita_organizzativa = aDoc.cd_uo_doc
and esercizio = aDoc.esercizio_doc
and pg_numero_documento = aDoc.pg_numero_doc
and pg_lettera is not null
and im_pagamento is not null;
-- S.F. 28.02.2006 AGGIUNTO PER RICHIESTA FRANCA CAMPANALE
-- PER LE VOCI DI TIPO INVENTARIALE LE COMMISSIONI NON VANNO SUL CONTO DELLE COMMISSIONI BANCARIE
-- MA BENSI' SUL CONTO (DI COSTO) ASSOCIATO ALLA VOCE DEL MANDATO
Begin
-- RECUPERO L'ELEMENTO VOCE DI TUTTE LE OBBLIGAZIONI PRESENTI SULLE RIGHE DEL MANDATO (CON ANCHE IL DOCUMENTO AMMINISTRATIVO)
Select Distinct EV.*
Into aEV
From MANDATO_RIGA MR, OBBLIGAZIONE O, OBBLIGAZIONE_SCADENZARIO OS, ELEMENTO_VOCE EV
Where MR.CD_CDS = aDoc.CD_CDS And
MR.ESERCIZIO = aDoc.ESERCIZIO And
MR.PG_MANDATO = aDoc.PG_DOCUMENTO_CONT And
MR.CD_CDS_DOC_AMM = aDoc.CD_CDS_DOC And
MR.CD_UO_DOC_AMM = aDoc.CD_UO_DOC And
MR.ESERCIZIO_DOC_AMM = aDoc.ESERCIZIO_DOC And
MR.CD_TIPO_DOCUMENTO_AMM = aDoc.CD_TIPO_DOC And
MR.PG_DOC_AMM = aDoc.PG_NUMERO_DOC And
O.CD_CDS = OS.CD_CDS And
O.ESERCIZIO = OS.ESERCIZIO And
O.ESERCIZIO_ORIGINALE = OS.ESERCIZIO_ORIGINALE And
O.PG_OBBLIGAZIONE = OS.PG_OBBLIGAZIONE And
OS.CD_CDS = MR.CD_CDS And
OS.ESERCIZIO = MR.ESERCIZIO_OBBLIGAZIONE And
OS.ESERCIZIO_ORIGINALE = MR.ESERCIZIO_ORI_OBBLIGAZIONE And
OS.PG_OBBLIGAZIONE = MR. PG_OBBLIGAZIONE And
OS.PG_OBBLIGAZIONE_SCADENZARIO = MR.PG_OBBLIGAZIONE_SCADENZARIO And
O.ESERCIZIO = EV.ESERCIZIO And
O.TI_APPARTENENZA = EV.TI_APPARTENENZA And
O.TI_GESTIONE = EV.TI_GESTIONE And
O.CD_ELEMENTO_VOCE = EV.CD_ELEMENTO_VOCE;
-- SE HA L'ATTRIBUTO CHE MI INTERESSA CERCO IL CONTO ASSOCIATO ALLA VOCE (E LO METTO IN CONTO_DA_PASS)
Dbms_Output.PUT_LINE ('C');
If aEV.FL_INV_BENI_PATR = 'Y' Then
Dbms_Output.PUT_LINE ('D');
Select VOCE_EP.*
Into CONTO_DA_PASS
From ass_ev_voceep, VOCE_EP
Where ass_ev_voceep.esercizio = aEV.esercizio and
ass_ev_voceep.ti_appartenenza = aEV.ti_appartenenza And
ass_ev_voceep.ti_gestione = aEV.ti_gestione And
ass_ev_voceep.cd_elemento_voce = aEV.cd_elemento_voce And
ass_ev_voceep.ESERCIZIO = VOCE_EP.ESERCIZIO And
ass_ev_voceep.CD_VOCE_EP = VOCE_EP.CD_VOCE_EP;
Else
Dbms_Output.PUT_LINE ('E');
CONTO_DA_PASS := Null;
End If;
Dbms_Output.PUT_LINE ('F');
Exception
-- QUALSIASI ERRORE ANNULLO CONTO_DA_PASS
When Others Then
Dbms_Output.PUT_LINE ('G');
CONTO_DA_PASS := Null;
End;
Dbms_Output.PUT_LINE ('H');
-- SE CONTO DA_PASS E' VUOTO (O PER ERRORE O PERCHE' LA VOCE NON E' INVENTARIALE)
-- PRENDO LE COMMISSIONI
If CONTO_DA_PASS.cd_voce_ep Is Null Then
Dbms_Output.PUT_LINE ('I');
CONTO_DA_PASS := CNRCTB002.getVoceEpCommissioniBanca(aDocTst.esercizio);
End If;
-- Fix richiesta del 06/09/2004
-- Le commissioni vanno in dare mentre va creato un nuovo movimento sul conto del
-- avere per l'importo delle commissioni
Dbms_Output.PUT_LINE (' CONTO PASSATO 1 '||CONTO_DA_PASS.CD_VOCE_EP||' com '||to_char(aDocAmm.im_commissioni));
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,
aDocTst.esercizio,
aDocTst.cd_uo_origine,
CONTO_DA_PASS,
aDocAmm.im_commissioni,
CNRCTB200.IS_DARE,
null,
null,
aDoc.cd_terzo,
ADOCAMM.TI_ISTITUZ_COMMERC,
aListaMovimenti,
aUser,
aTSnow);
aVoceEp:=CNRCTB204.trovaContoAnag(aDoc, aDoc.cd_terzo,aEv.CD_ELEMENTO_VOCE);
Dbms_Output.PUT_LINE (' CONTO PASSATO 2 '||aVoceEp.CD_VOCE_EP||' com '||to_char(aDocAmm.im_commissioni));
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,
aDocTst.esercizio,
aDocTst.cd_uo_origine,
aVoceEp,
aDocAmm.im_commissioni,
CNRCTB200.IS_AVERE,
null,
null,
aDoc.cd_terzo,
--CNRCTB100.TI_ISTITUZIONALE,
ADOCAMM.TI_ISTITUZ_COMMERC,
aListaMovimenti,
aUser,
aTSnow
);
Exception when NO_DATA_FOUND then
null;
End;
End if;
End;
-- =========================================================
-- Motori di registrazione scritture ultime/singole
-- =========================================================
procedure regDocPag1210COGE(aDocTst V_DOC_ULT_COGE_TSTA%rowtype,
aCdTerzo number,
aTiIstituzCommerc char,
aUser varchar2,
aTSNow date) is
aScrittura scrittura_partita_doppia%rowtype;
aListaMovimenti CNRCTB200.movimentiList;
aTipoScrittura char(1);
aSezionePrincipale char(1);
aVoceEp voce_ep%rowtype;
aDelta number(15,2);
aDocAmm v_doc_amm_coge_tsta%rowtype;
isUtilePerdita boolean;
aCausale varchar2(50);
fl_snr CHAR(1);
fl_merce_intra CHAR(1);
aEV_ES ELEMENTO_VOCE.ESERCIZIO%Type;
aEV_TI ELEMENTO_VOCE.TI_APPARTENENZA%Type;
aEV_GE ELEMENTO_VOCE.TI_GESTIONE%Type;
aEV_EV ELEMENTO_VOCE.CD_ELEMENTO_VOCE%Type;
aEV_flag ELEMENTO_VOCE.FL_INV_BENI_PATR%Type;
Begin
recParametriCNR := CNRUTL001.getRecParametriCnr(aDocTst.esercizio);
For aDoc in (select Distinct esercizio_doc,
cd_tipo_doc,
cd_cds_doc,
cd_uo_doc,
pg_numero_doc,
cd_elemento_voce
from V_DOC_ULT_COGE_RIGA
Where cd_cds = aDocTst.cd_cds And
esercizio = aDocTst.esercizio And
pg_documento_cont = aDocTst.pg_documento_cont And
cd_tipo_documento_cont = aDocTst.cd_tipo_documento_cont And
cd_terzo = aCdTerzo) loop
aListaMovimenti.delete;
isUtilePerdita:=true;
Begin
select * into aDocAmm
from V_DOC_AMM_COGE_TSTA
Where cd_cds = aDoc.cd_cds_doc And
esercizio = aDoc.esercizio_doc And
cd_tipo_documento = aDoc.cd_tipo_doc And
cd_unita_organizzativa = aDoc.cd_uo_doc And
pg_numero_documento = aDoc.pg_numero_doc;
Exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Documento amministrativo non trovato per doc. autorizz.: '||CNRCTB204.GETDESCDOCUMENTO(aDocTst));
End;
CNRCTB100.LOCKDOCAMM(aDocAmm.cd_tipo_documento,
aDocAmm.cd_cds,
aDocAmm.esercizio,
aDocAmm.cd_unita_organizzativa,
aDocAmm.pg_numero_documento);
-- Se l'importo pagato via lettera non è nullo, creo l'eventuale scrittura di utile perdita
If aDocAmm.im_pagamento is not null then
-- Le commissioni NON SONO ANNEGATE nella scrittura di utile/perdita su cambi
aDelta := aDocAmm.im_pagamento;
If aDocAmm.im_commissioni is not null Then
aDelta:=aDelta-aDocAmm.im_commissioni;
End if;
If aDocAmm.cd_tipo_documento = CNRCTB100.TI_FATTURA_PASSIVA then
select fl_servizi_non_residenti,fl_merce_intra_ue into fl_snr,fl_merce_intra
from fattura_passiva, tipo_sezionale
where
fattura_passiva.cd_tipo_sezionale = tipo_sezionale.cd_tipo_sezionale and
fattura_passiva.esercizio = aDocAmm.esercizio and
fattura_passiva.cd_cds = aDocAmm.cd_cds and
fattura_passiva.cd_unita_organizzativa = aDocAmm.cd_unita_organizzativa and
fattura_passiva.pg_fattura_passiva = aDocAmm.pg_numero_documento;
if (((aDocAmm.FL_SAN_MARINO_SENZA_IVA = 'Y' or aDocAmm.FL_INTRA_UE = 'Y' or fl_merce_intra ='Y') And
aDocAmm.TI_ISTITUZ_COMMERC = CNRCTB100.TI_ISTITUZIONALE And aDocAmm.TI_BENE_SERVIZIO = CNRCTB100.TI_FT_ACQ_BENI) Or
(aDocAmm.TI_ISTITUZ_COMMERC = CNRCTB100.TI_COMMERCIALE) or
(aDocAmm.TI_ISTITUZ_COMMERC = CNRCTB100.TI_ISTITUZIONALE and aDocAmm.TI_BENE_SERVIZIO = CNRCTB100.TI_FT_ACQ_SERVIZI and
fl_snr ='Y' )) Then -- STANI 26.04 Cinti
aDelta:=aDelta - (aDocAmm.im_totale_imponibile);
Else
aDelta:=aDelta - (aDocAmm.im_totale_imponibile + aDocAmm.im_totale_iva);
Dbms_Output.PUT_LINE ('else1 aDelta '||to_char(aDelta));
End If;
else
aDelta:=aDelta - (aDocAmm.im_totale_imponibile + aDocAmm.im_totale_iva);
Dbms_Output.PUT_LINE ('else2 aDelta '||to_char(aDelta));
end if;
Dbms_Output.PUT_LINE ('aDelta '||to_char(aDelta));
If aDelta > 0 then
aSezionePrincipale:=CNRCTB200.IS_DARE; -- Perdita in dare
aVoceEp:=CNRCTB002.GETVOCEEPPERDITASUCAMBIO(aDocTst.esercizio);
aCausale:=CNRCTB200.CAU_PERDITA_SU_CAMBI;
Elsif aDelta < 0 then
aSezionePrincipale:=CNRCTB200.IS_AVERE; -- Utile in avere
aVoceEp:=CNRCTB002.GETVOCEEPUTILESUCAMBIO(aDocTst.esercizio);
aCausale:=CNRCTB200.CAU_UTILE_SU_CAMBI;
Else
isUtilePerdita:=false;
End if;
-- S.F. 16.03.2006 AGGIUNTO PER RICHIESTA FRANCA CAMPANALE
-- PER LE VOCI DI TIPO INVENTARIALE LE COMMISSIONI NON VANNO SUL CONTO DELLE COMMISSIONI BANCARIE
-- MA BENSI' SUL CONTO ASSOCIATO ALLA VOCE DEL MANDATO
-- SOSTITUISCO IL CONTO UTILE/PERDITA SU CAMBIO CON QUELLO PATRIMONIALE
Begin
-- RICAVO L'ELEMENTO VOCE DELLE OBBLIGAZIONI MESSE SUI DETTAGLI DI FATTURA
If aDocAmm.cd_tipo_documento = CNRCTB100.TI_FATTURA_PASSIVA Then
Select Distinct EV.ESERCIZIO, EV.TI_APPARTENENZA, EV.TI_GESTIONE, EV.CD_ELEMENTO_VOCE, EV.FL_INV_BENI_PATR
Into aEV_ES, aEV_TI, aEV_GE, aEV_EV, aEV_flag
From FATTURA_PASSIVA FP, FATTURA_PASSIVA_RIGA FPR, OBBLIGAZIONE O, OBBLIGAZIONE_SCADENZARIO OS, ELEMENTO_VOCE EV
Where FP.CD_CDS = aDocAmm.CD_CDS And
FP.CD_UNITA_ORGANIZZATIVA = aDocAmm.CD_UNITA_ORGANIZZATIVA And
FP.ESERCIZIO = aDocAmm.ESERCIZIO And
FP.PG_FATTURA_PASSIVA = aDocAmm.PG_NUMERO_DOCUMENTO And
FP.CD_CDS = FPR.CD_CDS AND
FP.CD_UNITA_ORGANIZZATIVA = FPR.CD_UNITA_ORGANIZZATIVA AND
FP.ESERCIZIO = FPR.ESERCIZIO AND
FP.PG_FATTURA_PASSIVA = FPR.PG_FATTURA_PASSIVA AND
FPR.CD_CDS_OBBLIGAZIONE = OS.CD_CDS And
FPR.ESERCIZIO_OBBLIGAZIONE = OS.ESERCIZIO And
FPR.ESERCIZIO_ORI_OBBLIGAZIONE = OS.ESERCIZIO_ORIGINALE And
FPR.PG_OBBLIGAZIONE = OS.PG_OBBLIGAZIONE And
FPR.PG_OBBLIGAZIONE_SCADENZARIO = OS.PG_OBBLIGAZIONE_SCADENZARIO And
O.CD_CDS = OS.CD_CDS And
O.ESERCIZIO = OS.ESERCIZIO And
O.ESERCIZIO_ORIGINALE = OS.ESERCIZIO_ORIGINALE And
O.PG_OBBLIGAZIONE = OS.PG_OBBLIGAZIONE And
O.ESERCIZIO = EV.ESERCIZIO And
O.TI_APPARTENENZA = EV.TI_APPARTENENZA And
O.TI_GESTIONE = EV.TI_GESTIONE And
O.CD_ELEMENTO_VOCE = EV.CD_ELEMENTO_VOCE;
-- SE HA L'ATTRIBUTO CHE MI INTERESSA CERCO IL CONTO ASSOCIATO ALLA VOCE (E LO PASSO ALLA SCRITTURA AL POSTO
-- DI UTILE O PERDITA SU CAMBIO)
-- rospuc da togliere
If aEV_flag = 'Y' or REcParametriCNR.fl_nuovo_pdg='Y' Then
Select VOCE_EP.*
Into aVoceEp
From ass_ev_voceep, VOCE_EP
Where ass_ev_voceep.esercizio = aEV_ES and
ass_ev_voceep.ti_appartenenza = aEV_TI And
ass_ev_voceep.ti_gestione = aEV_GE And
ass_ev_voceep.cd_elemento_voce = aEV_EV And
ass_ev_voceep.ESERCIZIO = VOCE_EP.ESERCIZIO And
ass_ev_voceep.CD_VOCE_EP = VOCE_EP.CD_VOCE_EP;
End If; -- altrimenti niente perchè il conto già c'è
End If; -- FATTURA
Exception
-- QUALSIASI ERRORE NON PASSO NIENTE perchè il conto già c'è
When Others Then Null;
End;
Dbms_Output.PUT_LINE ('CONTO pro '||aVoceEp.CD_VOCE_EP||' delta '||to_char( abs(aDelta)));
/* FINE MODIFICA 16.03.2006 */
if(aVoceEp.cd_voce_ep is null ) then
return;
else
-- STANI UTILE PROMISCUO
If isUtilePerdita then
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
aVoceEp,
abs(aDelta),
aSezionePrincipale,
null,
null,
aCdTerzo,
aDocAmm.ti_istituz_commerc,
aListaMovimenti,aUser,aTSnow);
Dbms_Output.PUT_LINE ('aDoc.cd_elemento_voce '||aDoc.cd_elemento_voce);
Dbms_Output.PUT_LINE ('aDoccontr.cd_elemento_voce '||CNRCTB204.trovaContoContrEp(aDocTst.esercizio,'D','S',null,aVoceEp.cd_voce_ep).cd_voce_ep);
if(RecParametriCNR.fl_nuovo_pdg='Y' ) then
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
CNRCTB204.trovaContoContrEp(aDocTst.esercizio,'D','S',null,aVoceEp.cd_voce_ep),
abs(aDelta),
CNRCTB200.getSezioneOpposta(aSezionePrincipale),
null,
null,
aCdTerzo,
aDocAmm.ti_istituz_commerc,
aListaMovimenti,aUser,aTSnow);
else
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
CNRCTB204.trovaContoAnag(aDocamm, aCdTerzo,aDoc.cd_elemento_voce),
abs(aDelta),
CNRCTB200.getSezioneOpposta(aSezionePrincipale),
null,
null,
aCdTerzo,
aDocAmm.ti_istituz_commerc,
aListaMovimenti,aUser,aTSnow);
end if;
aScrittura:=CNRCTB204.buildScrUEP(aDocTst, aCdTerzo, CNRCTB200.TI_SCRITTURA_SINGOLA, CNRCTB200.CAU_PAGAMENTO_1210, aUser,aTSNow);
aScrittura.cd_causale_coge:=aCausale;
CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimenti);
End If;
End If;
End If;
End Loop;
End;
procedure regDocPagDefaultCOGE(aDocTst V_DOC_ULT_COGE_TSTA%rowtype, aCdTerzo number, aUser varchar2, aTSNow date) is
aScrittura scrittura_partita_doppia%rowtype;
aListaScritture CNRCTB200.scrittureList;
aListaNuoveScritture CNRCTB200.scrittureList;
aListaVecchieScritture CNRCTB200.scrittureList;
aListaMovimenti CNRCTB200.movimentiList;
aListaMovimentiOld CNRCTB200.movimentiList;
aTDoc V_DOC_ULT_COGE_RIGA%rowtype;
aTipoScrittura char(1);
aNumIst number;
aNumComm number;
aNumProm number;
aTiIstituzCommerc char(1);
isManVersIva boolean;
aNum number;
begin
aListaMovimenti.delete;
aNumIst:=0;
aNumComm:=0;
aNumProm:=0;
if aDocTst.stato_coge = CNRCTB100.STATO_COEP_DA_RIP then
savepoint CNRCTB205_SP_001;
aListaMovimentiOld.delete;
-- cerca eventuali scritture gia registrate per il documento
CNRCTB204.getScrittureUEPLock(aDocTst,aListaScritture);
-- Per ogni scrittura crea uno storno per poi riemettere la scrittura aggiornata
if aListaScritture.count > 0 then
for i in 1 .. aListaScritture.count loop
CNRCTB200.getScritturaEPLOCK(aListaScritture(i),aListaMovimentiOld);
aListaVecchieScritture(i):=aListaScritture(i);
CNRCTB200.creaScrittStornoCoge(aListaScritture(i),aListaMovimentiOld, aUser, aTSNow);
end loop;
end if;
end if;
aTiIstituzCommerc:=CNRCTB100.TI_ISTITUZIONALE;
for aDoc in (select * from V_DOC_ULT_COGE_RIGA where
cd_cds = aDocTst.cd_cds
and esercizio = aDocTst.esercizio
and pg_documento_cont = aDocTst.pg_documento_cont
and cd_tipo_documento_cont = aDocTst.cd_tipo_documento_cont
and cd_terzo = aCdTerzo
) loop
-- Fix errore 682, il mandato su generico di apertura fondo non deve essere processato in economica
-- se non con scrittura speciale cassa banca
if aDoc.cd_tipo_doc = CNRCTB100.TI_GEN_APERTURA_FONDO then
return;
end if;
-- Conseguenze fix errore 757, la reversale su generico di chiusura fondo non deve essere processata in economica
-- se non con scrittura speciale banca cassa
if aDoc.cd_tipo_doc = CNRCTB100.TI_GEN_CHIUSURA_FONDO then
return;
end if;
if aDoc.stato_coge_doccont = CNRCTB100.STATO_COEP_EXC then
dbms_output.put_line('rospuc ');
return;
end if;
-- Fix del 20040825
-- Fix erorre 834: nessuna movimento su mandato di compenso con anticipo maggiore
-- del netto percipiente
if aDoc.cd_tipo_doc = CNRCTB100.TI_COMPENSO then
if CNRCTB204.isCompConAntMaggNetto(aDoc)='Y' then
return;
end if;
end if;
-- Costruisce se necessario il movimento delle commissioni (SE LA FA, LA FA QUADRATA COMMISSIONI A DEBITI VS/FORNITORI)
buildMovCommissioni1210(aListaMovimenti, aDocTst, aDoc, aUser, aTSnow);
-- Modifica del 22/04/2004
-- Gestione del mandato di versamento IVA al centro o locale su generico di tipo CNRCTB100.TI_GEN_CORI_VER_SPESA
isManVersIva:=false;
If aDocTst.cd_tipo_documento_cont = CNRCTB018.TI_DOC_MAN
and aDoc.cd_tipo_doc = CNRCTB100.TI_GEN_CORI_VER_SPESA Then
-- Verifico se si tratta di mandato di versamento IVA
begin
select distinct 1 into aNum from mandato_riga mr where
esercizio=aDocTst.esercizio
and cd_cds=aDocTst.cd_cds
and pg_mandato=aDocTst.pg_documento_cont
and exists (
select 1 from documento_generico dg where
esercizio = mr.esercizio_doc_amm
and cd_cds = mr.cd_cds_doc_amm
and cd_unita_organizzativa = mr.cd_uo_doc_amm
and pg_documento_generico = mr.pg_doc_amm
and cd_tipo_documento_amm = mr.cd_tipo_documento_amm
and exists (select 1 from liquidazione_iva where
STATO='D'
and REPORT_ID=0
and CD_TIPO_DOCUMENTO=dg.cd_tipo_documento_amm
and CD_CDS_DOC_AMM=dg.cd_cds
and CD_UO_DOC_AMM=dg.cd_unita_organizzativa
and ESERCIZIO_DOC_AMM=dg.esercizio
and PG_DOC_AMM=dg.pg_documento_generico
)
);
isManVersIva:=true;
exception when NO_DATA_FOUND then
null;
end;
end if;
If aDoc.cd_tipo_doc in (CNRCTB100.TI_GEN_CORI_VER_ENTRATA, CNRCTB100.TI_GEN_CORI_VER_SPESA)
and not isManVersIva then
-- Gestione dei versamenti CORI
-- I movimenti relativi ai versamenti CORI sono accumulati in una lista a parte
-- In questo modo non influenzano la gestione del tipo istituzionale/commerciale/promiscuo
-- fatta per i movimenti anagrafici dei singoli documenti amministrativi di questo ciclo
Dbms_Output.PUT_LINE ('buildMovVersCoriUEP AA');
begin
buildMovVersCoriUEP(aListaMovimenti, aDocTst, aDoc, aUser, aTSnow);
exception when no_data_found then
declare
aUOENTE unita_organizzativa%rowtype;
aUOVERCORI unita_organizzativa%rowtype;
aUOVerCoRiSac unita_organizzativa%rowtype;
begin
aUOENTE:=CNRCTB020.GETUOENTE(aDocTst.esercizio);
aUOVERCORI:=CNRCTB020.getUOVersCori(aDocTst.esercizio);
aUOVerCoRiSac:=CNRCTB020.getUOVersCoriTuttaSAC(aDocTst.esercizio);
if (aDoc.CD_UNITA_ORGANIZZATIVA!= aUOENTE.cd_unita_organizzativa and aDoc.CD_UNITA_ORGANIZZATIVA!= aUOVERCORI.cd_unita_organizzativa and
aDoc.CD_UNITA_ORGANIZZATIVA!= aUOVerCoRiSac.cd_unita_organizzativa)then
buildMovUEP(aListaMovimenti,aDocTst, aDoc,aTiIstituzCommerc, aUser,aTSNow);
-- per ogni doc amm sul terzo specifico, estrae l'informazione ti_istituz_commerc per
-- incrementare i corrispondenti contatori per tipo
if aTiIstituzCommerc = CNRCTB100.TI_COMMERCIALE then
aNumComm:=aNumComm+1;
elsif aTiIstituzCommerc = CNRCTB100.TI_PROMISCUO then
aNumProm:=aNumProm+1;
else
aNumIst:=aNumIst+1;
end if;
end if;
end;
end;
Else
-- Gestione movimento base sul terzo
-- Il movimento generato viene compresso (per conto/sezione/periodo di competenza) con gli altri
-- ed è al momento di tipo ISTITUZIONALE
-- In un secondo tempo tutti i movimenti generati verranno modificati a commerciali o promscui
-- sulla base dei tre contatori aggiornati nel loop
--Dbms_Output.PUT_LINE ('buildMovUEP');
buildMovUEP(aListaMovimenti,aDocTst, aDoc,aTiIstituzCommerc, aUser,aTSNow);
-- per ogni doc amm sul terzo specifico, estrae l'informazione ti_istituz_commerc per
-- incrementare i corrispondenti contatori per tipo
if aTiIstituzCommerc = CNRCTB100.TI_COMMERCIALE then
aNumComm:=aNumComm+1;
elsif aTiIstituzCommerc = CNRCTB100.TI_PROMISCUO then
aNumProm:=aNumProm+1;
else
aNumIst:=aNumIst+1;
end if;
end if;
aTDoc:=aDoc;
end loop;
-- Determina il tipo istituzionale/commerciale/promicuo per l'ultimo movimento
-- sulla base dei tipi dei documenti amministrativi che contribuiscono alla scrittura
aTiIstituzCommerc:=CNRCTB100.TI_ISTITUZIONALE;
if aListaMovimenti.count > 0 then
-- Se per il terzo specificato, esistevano movimenti "sia istituzionali che commerciali"
-- oppure "promiscui"
if aNumComm * aNumIst <> 0 or aNumProm > 0 then
aTiIstituzCommerc:=CNRCTB100.TI_PROMISCUO;
-- Se per il terzo specificato, esistevano movimenti commerciali
elsif aNumComm > 0 then
aTiIstituzCommerc:=CNRCTB100.TI_COMMERCIALE;
end if;
end if;
aTipoScrittura:=CNRCTB204.getTipoScrittura(aTDoc);
Dbms_Output.PUT_LINE ('UNICA CHIAMATA 1');
buildMovContrUEP(aListaMovimenti,aDocTst,aTDoc,aTiIstituzCommerc,aUser,aTSNow);
aScrittura:=CNRCTB204.buildScrUEP(aDocTst, aCdTerzo, aTipoScrittura, aUser,aTSNow);
CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimenti);
-- Verifica di effettiva modifica della scrittura
if aListaMovimenti.count > 0 then
aListaNuoveScritture(aListaNuoveScritture.count+1):=aScrittura;
end if;
if not CNRCTB200.isModificata(aListaVecchieScritture, aListaNuoveScritture) then
Dbms_Output.PUT_LINE ('DOCCONT rollback to savepoint CNRCTB205_SP_001');
rollback to savepoint CNRCTB205_SP_001;
end if;
regDocPag1210COGE(aDocTst, aCdTerzo, aTiIstituzCommerc, aUser, aTSNow);
End;
procedure regDocPagCassaBancaCOGE(aStatoPFEco varchar2, aDocTst V_DOC_ULT_COGE_TSTA%rowtype, aUser varchar2, aTSNow date) is
aScrittura scrittura_partita_doppia%rowtype;
aListaMovimenti CNRCTB200.movimentiList;
aSezLoc char(1);
begin
aListaMovimenti.delete;
-- ATTENZIONE!!! la vista V_DOC_ULT_COGE_RIGA ritorna a R lo stato di associazione a fondo economale
-- per tutti i documenti generici di REINTEGRO, APERTURA e CHIUSURA del fondo indipendentemente
-- dallo stato attualmente presente sul documento
-- Fix errore 682, il mandato su generico di apertura fondo non deve essere processato in economica
-- se non con scrittura speciale cassa banca
-- Fix errore 757, la reversale di restituzione alla banca (su GEN_CH_FON)
-- deve effettuare una scrittura speciale di tipo BANCA CASSA
-- Per i mandati di reintegro (non in chiusura) o apertura del fondo economale, bisogna chiudere la cassa sulla banca
-- Per la reversale di restituzione, bisogna chiudere la banca sulla cassa
-- La reversale di regolarizzazione collegata al mandato di regolarizzazione è COEP esclusa (X)
if
(aStatoPFEco in (CNRCTB100.STATO_ASS_PFONDOECO, CNRCTB100.STATO_REG_PFONDOECO))
then
-- Il mandato di regolarizzazione per chiusura fondo non fa scritture cassa-banca
If aDocTst.ti_man_rev=CNRCTB038.TI_MAN_REG then
return;
end if;
aSezLoc:=null;
-- Nel caso di resituzione fondo la sezione principale è avere perchè su reversale
aSezLoc:=CNRCTB204.getSezione(aDocTst);
-- Se si tratta di mandato di regolarizzazione per reintegro spese in chiusura del fondo
-- la scrittura è BANCA a CASSA invece di cassa a banca
-- La stessa COSA vale anche per la REVERSALE di restituzione (in questo caso la sezione principale del documento contabile è AVERE)
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
CNRCTB002.GETVOCEEPCASSA(aDocTst.esercizio),
aDocTst.im_documento,
aSezLoc,
null,
null,
aDocTst.cd_terzo,
aListaMovimenti,aUser,aTSnow
);
CNRCTB204.buildMovPrinc(
aDocTst.cd_cds_origine,aDocTst.esercizio,aDocTst.cd_uo_origine,
CNRCTB002.GETVOCEEPBANCACDS(aDocTst.esercizio),
aDocTst.im_documento,
CNRCTB200.getSezioneOpposta(aSezLoc),
null,
null,
aDocTst.cd_terzo,
aListaMovimenti,aUser,aTSnow
);
dbms_output.put_line('Ignorato I/C');
aScrittura:=CNRCTB204.buildScrUEP(aDocTst, aDocTst.cd_terzo, CNRCTB200.TI_SCRITTURA_SINGOLA, CNRCTB200.CAU_CASSA_BANCA, aUser,aTSNow);
CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimenti);
end if;
end;
procedure regDocPagCOGE(aDocTst V_DOC_ULT_COGE_TSTA%rowtype, aUser varchar2,aTSNow date) is
aScrittura scrittura_partita_doppia%rowtype;
aMovimento movimento_coge%rowtype;
aListaMovimenti CNRCTB200.movimentiList;
aListaScritture CNRCTB200.scrittureList;
aListaM CNRCTB200.movimentiList;
aCdTerzo number;
aTipoScrittura char(1);
aStatoPFEco varchar2(5);
aMan mandato%rowtype;
aRev reversale%rowtype;
aUOENTE unita_organizzativa%rowtype;
begin
-- Il documento deve essere annullato o esitato altrimenti esce
if aDocTst.stato not in (CNRCTB038.STATO_AUT_ANN,CNRCTB038.STATO_AUT_ESI) then
Dbms_Output.put_line ('NO CONT DOC A');
return;
end if;
-- Fix del 20040924 Richiesta 843
CNRCTB204.checkChiusuraEsercizio(aDocTst.esercizio, aDocTst.cd_cds_origine);
if not (CNRCTB200.ISCHIUSURACOEPDEF(aDocTst.esercizio-1, aDocTst.cd_cds_origine)='Y') then
IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente '||To_Char(aDocTst.esercizio-1)||' non è chiuso definitivamente per il cds: '||aDocTst.cd_cds_origine);
end if;
Dbms_Output.put_line ('a');
-- Lock del documento autorizzatorio
if aDocTst.cd_tipo_documento_cont = CNRCTB018.TI_DOC_MAN then
select * into aMan from mandato where
esercizio = aDocTst.esercizio
and cd_cds = aDocTst.cd_cds
and pg_mandato = aDocTst.pg_documento_cont for update nowait;
elsif aDocTst.cd_tipo_documento_cont = CNRCTB018.TI_DOC_REV then
select * into aRev from reversale where
esercizio = aDocTst.esercizio
and cd_cds = aDocTst.cd_cds
and pg_reversale = aDocTst.pg_documento_cont for update nowait;
else
IBMERR001.RAISE_ERR_GENERICO('Tipo di documento non supportato: '||CNRCTB204.getDescDocumento(aDocTst));
end if;
--Dbms_Output.put_line ('b');
If aDocTst.stato_coge in (CNRCTB100.STATO_COEP_CON, CNRCTB100.STATO_COEP_EXC) then
Dbms_Output.put_line ('NO CONT DOC B');
return;
end if;
Dbms_Output.put_line ('c');
-- IBMUTL010.log(CNRCTB204.GETDESCDOCUMENTO(aDocTst),'TEST');
-- Se il doc autorizzatorio risulta annullato storno la scrittura ultima
if aDocTst.stato = CNRCTB038.STATO_AUT_ANN then
aListaMovimenti.delete;
-- cerca eventuali scritture gia registrate per il documento
CNRCTB204.getScrittureUEPLock(aDocTst,aListaScritture);
-- Per ogni scrittura crea uno storno per poi riemettere la scrittura aggiornata
if aListaScritture.count > 0 then
for i in 1 .. aListaScritture.count loop
CNRCTB200.getScritturaEPLOCK(aListaScritture(i),aListaMovimenti);
CNRCTB200.creaScrittStornoCoge(aListaScritture(i),aListaMovimenti, aUser, aTSNow);
end loop;
end if;
goto fine;
end if;
Dbms_Output.put_line ('d');
-- Filtro e aggiorno a stato COGE ESCLUSO LE REVERSALI PER
-- IVA (intraue/san marino istituzionale per beni)
if aDocTst.cd_tipo_documento_cont = CNRCTB018.TI_DOC_REV then
for aTT in (select 1 from V_DOC_ULT_COGE_RIGA where
cd_cds = aDocTst.cd_cds
and esercizio = aDocTst.esercizio
and pg_documento_cont = aDocTst.pg_documento_cont
and cd_tipo_documento_cont = aDocTst.cd_tipo_documento_cont
and cd_tipo_doc = CNRCTB100.TI_GEN_IVA_ENTRATA)
loop
update reversale set
stato_coge = CNRCTB100.STATO_COEP_EXC,
pg_ver_rec=pg_ver_rec+1
where
esercizio = aDocTst.esercizio
and cd_cds = aDocTst.cd_cds
and pg_reversale = aDocTst.pg_documento_cont;
Dbms_Output.put_line ('NO CONT DOC C');
return;
end loop;
end if;
Dbms_Output.put_line ('e');
-- Filtro eaggiorno a stato COGE ESCLUSO I MANDATI DI REGOLARIZZAZIONE FATTI SULL'ENTE dall'ENTE
if aDocTst.cd_tipo_documento_cont = CNRCTB018.TI_DOC_MAN
and aDocTst.ti_man_rev = 'R'
and aDocTst.cd_cds=aDocTst.cd_cds_origine then
aUOENTE:=CNRCTB020.GETUOENTE(aDocTst.esercizio);
if aDocTst.cd_cds = aUOENTE.cd_unita_padre then
update mandato set
stato_coge = CNRCTB100.STATO_COEP_EXC,
pg_ver_rec=pg_ver_rec+1
Where esercizio = aDocTst.esercizio
and cd_cds = aDocTst.cd_cds
and pg_mandato = aDocTst.pg_documento_cont;
Dbms_Output.put_line ('NO CONT DOC D');
return;
end if;
end if;
/*
if aDocTst.cd_tipo_documento_cont = CNRCTB018.TI_DOC_REV and aDocTst.cd_tipo_documento= CNRCTB100.TI_GEN_REC_CRED_DA_TERZI Then
update reversale set
stato_coge = CNRCTB100.STATO_COEP_EXC,
pg_ver_rec=pg_ver_rec+1
Where esercizio = aDocTst.esercizio
and cd_cds = aDocTst.cd_cds
and pg_reversale = aDocTst.pg_documento_cont;
Dbms_Output.put_line ('NO CONT DOC REV');
return;
end if;
*/
Dbms_Output.put_line ('f');
begin
select distinct stato_pagamento_fondo_eco into aStatoPFEco from V_DOC_ULT_COGE_RIGA where
cd_cds = aDocTst.cd_cds
and esercizio = aDocTst.esercizio
and pg_documento_cont = aDocTst.pg_documento_cont
and cd_tipo_documento_cont = aDocTst.cd_tipo_documento_cont;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Nessuna riga trovata per documento ti:'||aDocTst.cd_tipo_documento_cont||' pg.'||aDocTst.pg_documento_cont||' cds.'||aDocTst.cd_cds||' es.'||aDocTst.esercizio);
end;
Dbms_Output.put_line ('g');
-- Scateno la scrittura di tipo ultimo o singolo
aCdTerzo:=null;
for aRTerzo in (
Select distinct cd_terzo from V_DOC_ULT_COGE_RIGA where
cd_cds = aDocTst.cd_cds
and esercizio = aDocTst.esercizio
and pg_documento_cont = aDocTst.pg_documento_cont
and cd_tipo_documento_cont = aDocTst.cd_tipo_documento_cont
) loop
Dbms_Output.put_line ('g1');
aCdTerzo:=aRTerzo.cd_terzo;
Dbms_Output.put_line ('g2 '||aCdTerzo);
regDocPagDefaultCOGE(aDocTst, aCdTerzo, aUser, aTSNow);
Dbms_Output.put_line ('g3');
end loop;
if aCdTerzo is null then
IBMERR001.RAISE_ERR_GENERICO('Terzo non trovato nel documento amministrativo collegato a doc autorizzatorio');
end if;
Dbms_Output.put_line ('h');
regDocPagCassaBancaCOGE(aStatoPFEco, aDocTst, aUser, aTSNow);
<>
-- Aggiornamento dello stato COGE solo a doc autorizzatorio esitato o annullato
if
aDocTst.cd_tipo_documento_cont = CNRCTB018.TI_DOC_MAN
then
update mandato set
stato_coge = CNRCTB100.STATO_COEP_CON,
pg_ver_rec=pg_ver_rec+1
where
esercizio = aDocTst.esercizio
and cd_cds = aDocTst.cd_cds
and pg_mandato = aDocTst.pg_documento_cont;
elsif
aDocTst.cd_tipo_documento_cont = CNRCTB018.TI_DOC_REV
then
update reversale set
stato_coge = CNRCTB100.STATO_COEP_CON,
pg_ver_rec=pg_ver_rec+1
where
esercizio = aDocTst.esercizio
and cd_cds = aDocTst.cd_cds
and pg_reversale = aDocTst.pg_documento_cont;
end if;
end;
End;
/
© 2015 - 2024 Weber Informatics LLC | Privacy Policy