Вы находитесь на странице: 1из 22

create or replace procedure XXKCC_EXPENSE_REPORT (

ERRBUF out varchar2,


RETCODE out varchar2,
P_PERIOD_NAME_FROM in varchar2,
P_PERIOD_NAME_TO in varchar2,
P_PROJECT_NUMBER in varchar2,
P_AGREEMENT_NUM in varchar2,
P_MAIN_CATEGORY in varchar2,
P_EXPND_CATEGORY in varchar2,
P_EXPND_TYPE in varchar2
)
as
P_V_PERIOD_NAME_FROM varchar2 (9999) := P_PERIOD_NAME_FROM;
P_V_PERIOD_NAME_TO varchar2 (9999) := P_PERIOD_NAME_TO;
P_V_PROJECT_NUMBER varchar2 (9999) := P_PROJECT_NUMBER;
P_V_AGREEMENT_NUM varchar2 (9999) := P_AGREEMENT_NUM;
P_V_MAIN_CATEGORY varchar2 (9999) := P_MAIN_CATEGORY;
P_V_EXPND_CATEGORY varchar2 (9999) := P_EXPND_CATEGORY;
P_V_EXPND_TYPE varchar2 (9999) := P_EXPND_TYPE;
V_LAST_YEAR number;
V_CURRENT_YEAR number;
V_PROJECT_NAME varchar2 (9999);
V_PROJECT_ID number;
V_MAIN_SUBCONTRACTOR varchar2 (9999);
V_START_DATE varchar2 (9999);
V_COMPLETION_DATE varchar2 (9999);
V_PROJECT_MANAGER varchar2 (9999);
V_AGREEMENT_VALUE number;
V_CUSTOMER_NAME varchar2 (9999);
V_4000100_VALUE number;
V_4000200_VALUE number;
V_PROFIT_LOSS number;
V_PROFIT_LOSS2 number;
V_LAST_YEAR_VALUE number;
V_VARIATION_ORDER_C number;
V_VARIATION_ORDER_P number;
V_CONTRACT_BALANCE number;
V_HEADING_LINE varchar2 (9999);
V_ACCOUNT_LINE varchar2 (9999);
V_4000100_LINE varchar2 (9999);
V_4000200_LINE varchar2 (9999);
V_ACCOUNT_VALUE number;
V_ACCOUNT_SUM number;
L_COUNTER number := 1;
V_AMOUNT number := 0;
V_EXPENDITURE_TYPE varchar2 (9999);

cursor CUR_PERIOD
is
select PERIOD_NAME
from GL_PERIODS
where PERIOD_YEAR = (select PERIOD_YEAR
from GL_PERIODS
where PERIOD_NAME = P_V_PERIOD_NAME_FROM)
and PERIOD_NUM <= (select PERIOD_NUM
from GL_PERIODS
where PERIOD_NAME = P_V_PERIOD_NAME_TO)
order by PERIOD_NUM;
cursor CUR_PERIOD1
is
select PERIOD_NAME
from GL_PERIODS
where PERIOD_YEAR = (select PERIOD_YEAR
from GL_PERIODS
where PERIOD_NAME = P_V_PERIOD_NAME_FROM)
and PERIOD_NAME not like 'ADJ%'
order by PERIOD_NUM;

cursor MAIN_CATEGORY
is
select PEC.ATTRIBUTE1 MAIN_CATEGORY
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA,
PA_PROJECTS_ALL PPA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = PPA.PROJECT_ID
and PPA.SEGMENT1 = NVL (P_V_PROJECT_NUMBER, PPA.SEGMENT1)
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
group by PEC.ATTRIBUTE1
order by MAIN_CATEGORY;

cursor EXPENDITURE_CATEGORY (V_MAIN_CATEGORY varchar2)


is
select PEC.ATTRIBUTE1 MAIN_CATEGORY, PEC.EXPENDITURE_CATEGORY
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA,
PA_PROJECTS_ALL PPA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PEC.ATTRIBUTE1 = V_MAIN_CATEGORY
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = PPA.PROJECT_ID
and PPA.SEGMENT1 = NVL (P_V_PROJECT_NUMBER, PPA.SEGMENT1)
group by PEC.ATTRIBUTE1, PEC.EXPENDITURE_CATEGORY
order by PEC.EXPENDITURE_CATEGORY;

cursor lines (V_MAIN_CATEGORY varchar2, V_EXPENDITURE_CATEGORY varchar2)


is
select PEC.ATTRIBUTE1 MAIN_CATEGORY, PEC.EXPENDITURE_CATEGORY,
PET.EXPENDITURE_TYPE
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA,
PA_PROJECTS_ALL PPA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = PPA.PROJECT_ID
and PPA.SEGMENT1 = NVL (P_V_PROJECT_NUMBER, PPA.SEGMENT1)
and PEC.ATTRIBUTE1 = V_MAIN_CATEGORY
and PET.EXPENDITURE_CATEGORY = V_EXPENDITURE_CATEGORY
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
group by PEC.ATTRIBUTE1, PEC.EXPENDITURE_CATEGORY, PET.EXPENDITURE_TYPE
UNION
select PEC.ATTRIBUTE1 MAIN_CATEGORY, PEC.EXPENDITURE_CATEGORY,
PET.EXPENDITURE_TYPE
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA,
PA_PROJECTS_ALL PPA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE(+)
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = PPA.PROJECT_ID(+)
-- and PPA.SEGMENT1 = NVL (P_V_PROJECT_NUMBER, PPA.SEGMENT1)
and PEC.ATTRIBUTE1 = V_MAIN_CATEGORY
and PET.EXPENDITURE_CATEGORY = V_EXPENDITURE_CATEGORY
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
-- and PEIA.EXPENDITURE_TYPE =
-- NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
group by PEC.ATTRIBUTE1, PEC.EXPENDITURE_CATEGORY, PET.EXPENDITURE_TYPE
order by 2;
begin
V_HEADING_LINE := 'Project';
V_4000100_LINE := 'LINES';
V_4000200_LINE := 'LINES';

begin
select name, PROJECT_ID, ATTRIBUTE2,
TO_CHAR (START_DATE, 'DD-MON-YYYY'),
TO_CHAR (COMPLETION_DATE, 'DD-MON-YYYY')
into V_PROJECT_NAME, V_PROJECT_ID, V_MAIN_SUBCONTRACTOR,
V_START_DATE,
V_COMPLETION_DATE
from PA_PROJECTS_ALL
where SEGMENT1 = P_V_PROJECT_NUMBER;
exception
when others
then
null;
end;

begin
begin
select PBVB.REVENUE
into V_VARIATION_ORDER_C
from PA_BUDGET_VERSIONS_BASELINED_V PBVB
where PBVB.PROJECT_ID = V_PROJECT_ID
and BUDGET_TYPE_CODE = 'AR'
and CURRENT_FLAG = 'Y'
and rownum = 1;
exception
when others
then
null;
end;

begin
select PBVB.REVENUE
into V_VARIATION_ORDER_P
from PA_BUDGET_VERSIONS_BASELINED_V PBVB
where PBVB.PROJECT_ID = V_PROJECT_ID
and BUDGET_TYPE_CODE = 'AR'
and CURRENT_FLAG = 'N'
and rownum = 1;
exception
when others
then
null;
end;

V_VARIATION_ORDER_C :=
V_VARIATION_ORDER_C - NVL (V_VARIATION_ORDER_P, 0);
end;

begin
select distinct CUSTOMER_NAME, AGREEMENT_NUM, AMOUNT
into V_CUSTOMER_NAME, P_V_AGREEMENT_NUM, V_AGREEMENT_VALUE
from PA_PROJECT_FUNDINGS_V PPFV, PA_AGREEMENTS_V PA
where PPFV.AGREEMENT_ID = PA.AGREEMENT_ID
and PROJECT_NUMBER = P_V_PROJECT_NUMBER
and AGREEMENT_NUM = P_V_AGREEMENT_NUM;
exception
when others
then
null;
end;

begin
begin
select NVL (sum (NVL (INVOICE_AMOUNT, 0)), 0)
into V_CONTRACT_BALANCE
from PA_DRAFT_INVOICES_V
where PROJECT_NUMBER = P_V_PROJECT_NUMBER
and AGREEMENT_NUM = P_V_AGREEMENT_NUM
and INVOICE_STATUS_M = 'Transferred to Receivable';
exception
when others
then
null;
end;

V_CONTRACT_BALANCE :=
NVL (V_AGREEMENT_VALUE, 0)
- NVL (V_CONTRACT_BALANCE, 0);
end;
begin
select PAPF.FULL_NAME
into V_PROJECT_MANAGER
from PA_PROJECT_PLAYERS PPP, PER_ALL_PEOPLE_F PAPF
where PPP.PROJECT_ID = V_PROJECT_ID
and PROJECT_ROLE_TYPE = 'PROJECT MANAGER'
and PPP.END_DATE_ACTIVE is null
and PAPF.PERSON_ID = PPP.PERSON_ID;
exception
when others
then
null;
end;

begin
select PERIOD_YEAR - 1
into V_LAST_YEAR
from GL_PERIODS
where PERIOD_NAME = P_PERIOD_NAME_FROM;
exception
when others
then
null;
end;

begin
select PERIOD_YEAR
into V_CURRENT_YEAR
from GL_PERIODS
where PERIOD_NAME = P_PERIOD_NAME_FROM;
exception
when others
then
null;
end;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<?xml version="1.0" encoding="windows-1252"?>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<EXPENSE_REPORT>');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_PERIOD_NAME_FROM>' || P_V_PERIOD_NAME_FROM
|| '</P_PERIOD_NAME_FROM>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_PERIOD_NAME_TO>' || P_V_PERIOD_NAME_TO
|| '</P_PERIOD_NAME_TO>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_PROJECT_NUMBER>'
|| P_V_PROJECT_NUMBER
|| '</P_PROJECT_NUMBER>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_PROJECT_NAME>'
|| replace (V_PROJECT_NAME, '&', 'and')
|| '</P_PROJECT_NAME>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_MAIN_SUBCONTRACTOR>'
|| replace (V_MAIN_SUBCONTRACTOR, '&', 'and')
|| '</P_MAIN_SUBCONTRACTOR>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_VARIATION_ORDER>'
|| V_VARIATION_ORDER_C
|| '</P_VARIATION_ORDER>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_CONTRACT_BALANCE>'
|| V_CONTRACT_BALANCE
|| '</P_CONTRACT_BALANCE>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_START_DATE>' || V_START_DATE || '</P_START_DATE>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_COMPLETION_DATE>'
|| V_COMPLETION_DATE
|| '</P_COMPLETION_DATE>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_PROJECT_MANAGER>'
|| V_PROJECT_MANAGER
|| '</P_PROJECT_MANAGER>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_CUSTOMER_NAME>'
|| replace (V_CUSTOMER_NAME, '&', 'and')
|| '</P_CUSTOMER_NAME>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_AGREEMENT_NUM>'
|| P_V_AGREEMENT_NUM
|| '</P_AGREEMENT_NUM>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_AGREEMENT_VALUE>'
|| V_AGREEMENT_VALUE
|| '</P_AGREEMENT_VALUE>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_MAIN_CATEOGRY>'
|| replace (P_V_MAIN_CATEGORY, '&', 'and')
|| '</P_MAIN_CATEOGRY>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_EXPND_CATEGORY>'
|| replace (P_V_EXPND_CATEGORY, '&', 'and')
|| '</P_EXPND_CATEGORY>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<P_EXPND_TYPE>'
|| replace (P_V_EXPND_TYPE, '&', 'and')
|| '</P_EXPND_TYPE>'
);
----H----------
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<HEADERS>');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<H_LAST>'
|| ' Opening Balance '
|| ' '
|| '</H_LAST>'
);

for HRD_REC_PERIOD_1 in CUR_PERIOD1


loop
if V_HEADING_LINE is not null
then
L_COUNTER := L_COUNTER + 1;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<H_'
|| L_COUNTER
|| '>'
|| ' '
|| HRD_REC_PERIOD_1.PERIOD_NAME
|| ' '
|| '</H_'
|| L_COUNTER
|| '>'
);
end if;
end loop;

if L_COUNTER < 14
then
loop
L_COUNTER := L_COUNTER + 1;
exit when L_COUNTER = 14;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<H_' || L_COUNTER || '/>');
end loop;
end if;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<H_14>'
|| ' Total '
|| ' '
|| '</H_14>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<H_TOTAL>' || ' Total ' || '</H_TOTAL>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '</HEADERS>');

-----H----
for F_MAIN_CATEGORY in MAIN_CATEGORY
loop
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<MAIN_CATEGORY>');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<MAIN_DATA>'
|| replace (F_MAIN_CATEGORY.MAIN_CATEGORY, '&',
'and')
|| '</MAIN_DATA>'
);

for F_EXPENDITURE_CATEGORY in
EXPENDITURE_CATEGORY (F_MAIN_CATEGORY.MAIN_CATEGORY)
loop
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<EXPENDITURE_CATEGORY>');
FND_FILE.PUT_LINE
(FND_FILE.OUTPUT,
'<EXPENDITURE_DATA>'
|| replace (F_EXPENDITURE_CATEGORY.EXPENDITURE_CATEGORY,
'&',
'and'
)
|| '</EXPENDITURE_DATA>'
);

for F_LINES in lines (F_MAIN_CATEGORY.MAIN_CATEGORY,


F_EXPENDITURE_CATEGORY.EXPENDITURE_CATEGORY
)
loop
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<LINES>');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_1>'
|| replace (F_LINES.EXPENDITURE_TYPE,
'&',
'and'
)
|| '</L_1>'
);
L_COUNTER := 1;

for HRD_REC_PERIOD in CUR_PERIOD


loop
---------------last year
if L_COUNTER = 1
then
begin
select NVL
(sum
(case
when PEIA.SYSTEM_LINKAGE_FUNCTION =
'USG'
then NVL (PEIA.RAW_COST, 0)
else NVL (PEIA.QUANTITY, 0)
end
),
0
)
into V_LAST_YEAR_VALUE
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA
where PEC.EXPENDITURE_CATEGORY =
PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = V_PROJECT_ID
and PEC.ATTRIBUTE1 = F_LINES.MAIN_CATEGORY
and PET.EXPENDITURE_CATEGORY =
F_LINES.EXPENDITURE_CATEGORY
and PEIA.EXPENDITURE_TYPE = F_LINES.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 =
NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY,
PET.EXPENDITURE_CATEGORY
)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PEIA.EXPENDITURE_ITEM_DATE
<(select start_date from gl_periods where
period_name=P_PERIOD_NAME_FROM)
group by PEC.ATTRIBUTE1,
PEC.EXPENDITURE_CATEGORY,
PET.EXPENDITURE_TYPE
order by PET.EXPENDITURE_TYPE;
exception
when others
then
V_LAST_YEAR_VALUE := 0;
end;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_LAST>'
|| V_LAST_YEAR_VALUE
|| '</L_LAST>'
);
end if;

-------------------------------
begin
select PET.EXPENDITURE_TYPE,
NVL
(sum
(case
when PEIA.SYSTEM_LINKAGE_FUNCTION =
'USG'
then NVL (PEIA.RAW_COST, 0)
else NVL (PEIA.QUANTITY, 0)
end
),
0
)
into V_EXPENDITURE_TYPE,
V_4000100_VALUE
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = V_PROJECT_ID
and PEC.ATTRIBUTE1 = F_LINES.MAIN_CATEGORY
and PET.EXPENDITURE_CATEGORY =
F_LINES.EXPENDITURE_CATEGORY
and PEIA.EXPENDITURE_TYPE = F_LINES.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 =
NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY,
PET.EXPENDITURE_CATEGORY
)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PEIA.EXPENDITURE_ITEM_DATE
between (select START_DATE
from GL_PERIODS
where PERIOD_NAME =
HRD_REC_PERIOD.PERIOD_NAME)
and (select END_DATE
from GL_PERIODS
where PERIOD_NAME =
HRD_REC_PERIOD.PERIOD_NAME)
group by PEC.ATTRIBUTE1,
PEC.EXPENDITURE_CATEGORY,
PET.EXPENDITURE_TYPE
order by PET.EXPENDITURE_TYPE;
exception
when others
then
V_4000100_VALUE := 0;
end;

V_AMOUNT := NVL (V_4000100_VALUE, 0) + V_AMOUNT;

if V_4000100_LINE is not null


then
L_COUNTER := L_COUNTER + 1;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_'
|| L_COUNTER
|| '>'
|| V_4000100_VALUE
|| '</L_'
|| L_COUNTER
|| '>'
);
end if;
end loop;

if L_COUNTER < 14
then
loop
L_COUNTER := L_COUNTER + 1;
exit when L_COUNTER = 14;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_' || L_COUNTER || '/>'
);
end loop;
end if;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_14>' || V_AMOUNT || '</L_14>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_TOTAL>'
|| (V_AMOUNT + V_LAST_YEAR_VALUE)
|| '</L_TOTAL>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '</LINES>');
V_AMOUNT := 0;
V_LAST_YEAR_VALUE := 0;
end loop;

--------------------------------------------------
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<TOTAL_SUB_CATEGORY>');
FND_FILE.PUT_LINE
(FND_FILE.OUTPUT,
'<L_1>'
|| 'Total of '
|| replace
(F_EXPENDITURE_CATEGORY.EXPENDITURE_CATEGORY,
'&',
'and'
)
|| '</L_1>'
);
L_COUNTER := 1;

for HRD_REC_PERIOD in CUR_PERIOD


loop
---------------last year
if L_COUNTER = 1
then
begin
select NVL
(sum
(case
when PEIA.SYSTEM_LINKAGE_FUNCTION = 'USG'
then NVL (PEIA.RAW_COST, 0)
else NVL (PEIA.QUANTITY, 0)
end
),
0
)
into V_LAST_YEAR_VALUE
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = V_PROJECT_ID
and PEC.ATTRIBUTE1 = F_MAIN_CATEGORY.MAIN_CATEGORY
and PET.EXPENDITURE_CATEGORY =
F_EXPENDITURE_CATEGORY.EXPENDITURE_CATEGORY
and PEC.ATTRIBUTE1 =
NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PEIA.EXPENDITURE_ITEM_DATE
<(select start_date from gl_periods where
period_name=P_PERIOD_NAME_FROM);
exception
when others
then
V_LAST_YEAR_VALUE := 0;
end;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_LAST>' || V_LAST_YEAR_VALUE
|| '</L_LAST>'
);
end if;

-------------------------------
begin
select NVL
(sum
(case
when PEIA.SYSTEM_LINKAGE_FUNCTION = 'USG'
then NVL (PEIA.RAW_COST, 0)
else NVL (PEIA.QUANTITY, 0)
end
),
0
)
into V_4000100_VALUE
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = V_PROJECT_ID
and PEC.ATTRIBUTE1 = F_MAIN_CATEGORY.MAIN_CATEGORY
and PET.EXPENDITURE_CATEGORY =
F_EXPENDITURE_CATEGORY.EXPENDITURE_CATEGORY
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PEIA.EXPENDITURE_ITEM_DATE
between (select START_DATE
from GL_PERIODS
where PERIOD_NAME =
HRD_REC_PERIOD.PERIOD_NAME)
and (select END_DATE
from GL_PERIODS
where PERIOD_NAME =
HRD_REC_PERIOD.PERIOD_NAME);
exception
when others
then
V_4000100_VALUE := 0;
end;

V_AMOUNT := NVL (V_4000100_VALUE, 0) + V_AMOUNT;

if V_4000100_LINE is not null


then
L_COUNTER := L_COUNTER + 1;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_'
|| L_COUNTER
|| '>'
|| V_4000100_VALUE
|| '</L_'
|| L_COUNTER
|| '>'
);
end if;
end loop;

if L_COUNTER < 14
then
loop
L_COUNTER := L_COUNTER + 1;
exit when L_COUNTER = 14;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_' || L_COUNTER || '/>');
end loop;
end if;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_14>' || V_AMOUNT || '</L_14>');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_TOTAL>'
|| (V_AMOUNT + V_LAST_YEAR_VALUE)
|| '</L_TOTAL>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '</TOTAL_SUB_CATEGORY>');
V_AMOUNT := 0;
V_LAST_YEAR_VALUE := 0;
--------------------------------------------------
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '</EXPENDITURE_CATEGORY>');
end loop;

---------------------------------------
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<TOTAL_MAIN>');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_1>'
|| 'Total of '
|| replace (F_MAIN_CATEGORY.MAIN_CATEGORY, '&',
'and')
|| '</L_1>'
);
L_COUNTER := 1;

for HRD_REC_PERIOD in CUR_PERIOD


loop
---------------last year
if L_COUNTER = 1
then
begin
select NVL
(sum
(case
when PEIA.SYSTEM_LINKAGE_FUNCTION = 'USG'
then NVL (PEIA.RAW_COST, 0)
else NVL (PEIA.QUANTITY, 0)
end
),
0
)
into V_LAST_YEAR_VALUE
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = V_PROJECT_ID
and PEC.ATTRIBUTE1 = F_MAIN_CATEGORY.MAIN_CATEGORY
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PEIA.EXPENDITURE_ITEM_DATE
<(select start_date from gl_periods where
period_name=P_PERIOD_NAME_FROM);
exception
when others
then
V_LAST_YEAR_VALUE := 0;
end;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_LAST>' || V_LAST_YEAR_VALUE || '</L_LAST>'
);
end if;

-------------------------------
begin
select NVL
(sum
(case
when PEIA.SYSTEM_LINKAGE_FUNCTION = 'USG'
then NVL (PEIA.RAW_COST, 0)
else NVL (PEIA.QUANTITY, 0)
end
),
0
)
into V_4000100_VALUE
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = V_PROJECT_ID
and PEC.ATTRIBUTE1 = F_MAIN_CATEGORY.MAIN_CATEGORY
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PEIA.EXPENDITURE_ITEM_DATE
between (select START_DATE
from GL_PERIODS
where PERIOD_NAME = HRD_REC_PERIOD.PERIOD_NAME)
and (select END_DATE
from GL_PERIODS
where PERIOD_NAME = HRD_REC_PERIOD.PERIOD_NAME);
exception
when others
then
V_4000100_VALUE := 0;
end;

V_AMOUNT := NVL (V_4000100_VALUE, 0) + V_AMOUNT;

if V_4000100_LINE is not null


then
L_COUNTER := L_COUNTER + 1;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_'
|| L_COUNTER
|| '>'
|| V_4000100_VALUE
|| '</L_'
|| L_COUNTER
|| '>'
);
end if;
end loop;

if L_COUNTER < 14
then
loop
L_COUNTER := L_COUNTER + 1;
exit when L_COUNTER = 14;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<L_' || L_COUNTER || '/>');
end loop;
end if;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<L_14>' || V_AMOUNT || '</L_14>');


FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_TOTAL>'
|| (V_AMOUNT + V_LAST_YEAR_VALUE)
|| '</L_TOTAL>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '</TOTAL_MAIN>');
V_AMOUNT := 0;
V_LAST_YEAR_VALUE := 0;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '</MAIN_CATEGORY>');
end loop;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<TOTAL_EXPENSES>');


FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_1>' || 'Total Expenses' || '</L_1>');
L_COUNTER := 1;

for HRD_REC_PERIOD in CUR_PERIOD


loop
---------------last year
if L_COUNTER = 1
then
begin
select NVL
(sum
(case
when PEIA.SYSTEM_LINKAGE_FUNCTION = 'USG'
then NVL (PEIA.RAW_COST, 0)
else NVL (PEIA.QUANTITY, 0)
end
),
0
)
into V_LAST_YEAR_VALUE
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = V_PROJECT_ID
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PEIA.EXPENDITURE_ITEM_DATE
<(select start_date from gl_periods where
period_name=P_PERIOD_NAME_FROM);
exception
when others
then
V_LAST_YEAR_VALUE := 0;
end;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_LAST>' || V_LAST_YEAR_VALUE || '</L_LAST>'
);
end if;

-------------------------------
begin
select NVL
(sum
(case
when PEIA.SYSTEM_LINKAGE_FUNCTION = 'USG'
then NVL (PEIA.RAW_COST, 0)
else NVL (PEIA.QUANTITY, 0)
end
),
0
)
into V_4000100_VALUE
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = V_PROJECT_ID
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PEIA.EXPENDITURE_ITEM_DATE
between (select START_DATE
from GL_PERIODS
where PERIOD_NAME = HRD_REC_PERIOD.PERIOD_NAME)
and (select END_DATE
from GL_PERIODS
where PERIOD_NAME = HRD_REC_PERIOD.PERIOD_NAME);
exception
when others
then
V_4000100_VALUE := 0;
end;

V_AMOUNT := NVL (V_4000100_VALUE, 0) + V_AMOUNT;

if V_4000100_LINE is not null


then
L_COUNTER := L_COUNTER + 1;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_'
|| L_COUNTER
|| '>'
|| V_4000100_VALUE
|| '</L_'
|| L_COUNTER
|| '>'
);
end if;
end loop;

if L_COUNTER < 14
then
loop
L_COUNTER := L_COUNTER + 1;
exit when L_COUNTER = 14;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<L_' || L_COUNTER || '/>');
end loop;
end if;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<L_14>' || V_AMOUNT || '</L_14>');


FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_TOTAL>'
|| (V_AMOUNT + V_LAST_YEAR_VALUE)
|| '</L_TOTAL>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '</TOTAL_EXPENSES>');
V_AMOUNT := 0;
V_LAST_YEAR_VALUE := 0;
-------------------------revenue-----------------------
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<TOTAL_REVENUE>');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<L_1>' || 'Total Revenue' || '</L_1>');
L_COUNTER := 1;

for HRD_REC_PERIOD in CUR_PERIOD


loop
---------------last year
if L_COUNTER = 1
then
begin
select NVL (sum (NVL (INVOICE_AMOUNT, 0)), 0)
into V_LAST_YEAR_VALUE
from PA_DRAFT_INVOICES_V
where PROJECT_NUMBER = P_V_PROJECT_NUMBER
and AGREEMENT_NUM = P_V_AGREEMENT_NUM
and INVOICE_STATUS_M = 'Transferred to Receivable'
and INVOICE_DATE <(select start_date from gl_periods where
period_name=P_PERIOD_NAME_FROM);
exception
when others
then
V_LAST_YEAR_VALUE := 0;
end;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_LAST>' || V_LAST_YEAR_VALUE || '</L_LAST>'
);
end if;

-------------------------------
begin
select NVL (sum (NVL (INVOICE_AMOUNT, 0)), 0)
into V_4000100_VALUE
from PA_DRAFT_INVOICES_V
where PROJECT_NUMBER = P_V_PROJECT_NUMBER
and AGREEMENT_NUM = P_V_AGREEMENT_NUM
and INVOICE_STATUS_M = 'Transferred to Receivable'
and INVOICE_DATE between (select START_DATE
from GL_PERIODS
where PERIOD_NAME =
HRD_REC_PERIOD.PERIOD_NAME)
and (select END_DATE
from GL_PERIODS
where PERIOD_NAME =
HRD_REC_PERIOD.PERIOD_NAME);
exception
when others
then
V_4000100_VALUE := 0;
end;

V_AMOUNT := NVL (V_4000100_VALUE, 0) + V_AMOUNT;

if V_4000100_LINE is not null


then
L_COUNTER := L_COUNTER + 1;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_'
|| L_COUNTER
|| '>'
|| V_4000100_VALUE
|| '</L_'
|| L_COUNTER
|| '>'
);
end if;
end loop;
if L_COUNTER < 14
then
loop
L_COUNTER := L_COUNTER + 1;
exit when L_COUNTER = 14;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<L_' || L_COUNTER || '/>');
end loop;
end if;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<L_14>' || V_AMOUNT || '</L_14>');


FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_TOTAL>'
|| (V_AMOUNT + V_LAST_YEAR_VALUE)
|| '</L_TOTAL>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '</TOTAL_REVENUE>');
V_AMOUNT := 0;
V_LAST_YEAR_VALUE := 0;
--------------------------------------------------------profit
loss-----------------------
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<PROFIT_LOST>');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_1>' || 'Output /+ Profit / - Loss' || '</L_1>'
);
L_COUNTER := 1;

for HRD_REC_PERIOD in CUR_PERIOD


loop
---------------last year
if L_COUNTER = 1
then
begin
select NVL (sum (NVL (INVOICE_AMOUNT, 0)), 0)
into V_LAST_YEAR_VALUE
from PA_DRAFT_INVOICES_V
where PROJECT_NUMBER = P_V_PROJECT_NUMBER
and AGREEMENT_NUM = P_V_AGREEMENT_NUM
and INVOICE_STATUS_M = 'Transferred to Receivable'
and INVOICE_DATE <(select start_date from gl_periods where
period_name=P_PERIOD_NAME_FROM);

exception
when others
then
V_LAST_YEAR_VALUE := 0;
end;

begin
select NVL
(sum
(case
when PEIA.SYSTEM_LINKAGE_FUNCTION = 'USG'
then NVL (PEIA.RAW_COST, 0)
else NVL (PEIA.QUANTITY, 0)
end
),
0
)
into V_PROFIT_LOSS2
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = V_PROJECT_ID
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PEIA.EXPENDITURE_ITEM_DATE
<(select start_date from gl_periods where
period_name=P_PERIOD_NAME_FROM);
exception
when others
then
V_PROFIT_LOSS := 0;
end;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_LAST>'
|| (V_PROFIT_LOSS2 - V_LAST_YEAR_VALUE)
|| '</L_LAST>'
);
end if;

-------------------------------
begin
select NVL (sum (NVL (INVOICE_AMOUNT, 0)), 0)
into V_4000100_VALUE
from PA_DRAFT_INVOICES_V
where PROJECT_NUMBER = P_V_PROJECT_NUMBER
and AGREEMENT_NUM = P_V_AGREEMENT_NUM
and INVOICE_STATUS_M = 'Transferred to Receivable'
and INVOICE_DATE between (select START_DATE
from GL_PERIODS
where PERIOD_NAME =
HRD_REC_PERIOD.PERIOD_NAME)
and (select END_DATE
from GL_PERIODS
where PERIOD_NAME =
HRD_REC_PERIOD.PERIOD_NAME);
exception
when others
then
V_4000100_VALUE := 0;
end;

begin
select NVL
(sum
(case
when PEIA.SYSTEM_LINKAGE_FUNCTION = 'USG'
then NVL (PEIA.RAW_COST, 0)
else NVL (PEIA.QUANTITY, 0)
end
),
0
)
into V_PROFIT_LOSS
from PA_EXPENDITURE_CATEGORIES PEC,
PA_EXPENDITURE_TYPES PET,
PA_EXPENDITURE_ITEMS_ALL PEIA
where PEC.EXPENDITURE_CATEGORY = PET.EXPENDITURE_CATEGORY
and PET.EXPENDITURE_TYPE = PEIA.EXPENDITURE_TYPE
and PEC.ATTRIBUTE1 is not null
and PEIA.PROJECT_ID = V_PROJECT_ID
and PEC.ATTRIBUTE1 = NVL (P_V_MAIN_CATEGORY, PEC.ATTRIBUTE1)
and PET.EXPENDITURE_CATEGORY =
NVL (P_V_EXPND_CATEGORY, PET.EXPENDITURE_CATEGORY)
and PEIA.EXPENDITURE_TYPE =
NVL (P_V_EXPND_TYPE, PEIA.EXPENDITURE_TYPE)
and PEIA.EXPENDITURE_ITEM_DATE
between (select START_DATE
from GL_PERIODS
where PERIOD_NAME = HRD_REC_PERIOD.PERIOD_NAME)
and (select END_DATE
from GL_PERIODS
where PERIOD_NAME = HRD_REC_PERIOD.PERIOD_NAME);
exception
when others
then
V_PROFIT_LOSS := 0;
end;

V_AMOUNT :=
(NVL (V_PROFIT_LOSS, 0) - NVL (V_4000100_VALUE, 0))
+ V_AMOUNT;

if V_4000100_LINE is not null


then
L_COUNTER := L_COUNTER + 1;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_'
|| L_COUNTER
|| '>'
|| (V_PROFIT_LOSS - V_4000100_VALUE)
|| '</L_'
|| L_COUNTER
|| '>'
);
end if;
end loop;

if L_COUNTER < 14
then
loop
L_COUNTER := L_COUNTER + 1;
exit when L_COUNTER = 14;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<L_' || L_COUNTER || '/>');
end loop;
end if;

FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '<L_14>' || V_AMOUNT || '</L_14>');


FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'<L_TOTAL>'
|| (V_AMOUNT + (V_PROFIT_LOSS2 - V_LAST_YEAR_VALUE))
|| '</L_TOTAL>'
);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '</PROFIT_LOST>');
V_AMOUNT := 0;
V_PROFIT_LOSS := 0;
V_PROFIT_LOSS2 := 0;
V_LAST_YEAR_VALUE := 0;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '</EXPENSE_REPORT>');
end;

Вам также может понравиться