Zfund Managment
Zfund Managment
TYPE-POOLS: slis.
PARAMETERS p_m_area TYPE fikrs MATCHCODE OBJECT fikr DEFAULT '1000' OBLIGATORY. "
FM Area
PARAMETERS p_budcat TYPE fmbudcat-budcat OBLIGATORY DEFAULT '9G'. "Budg Catogory
PARAMETERS p_year TYPE gjahr OBLIGATORY. " Fiscal Year
PARAMETERS: p_monat TYPE monat OBLIGATORY.
PARAMETERS p_ver TYPE fmbh-version DEFAULT '0'. " VERSION
PARAMETERS p_crr TYPE tcurr-fcurr OBLIGATORY. " Currency
SELECTION-SCREEN END OF BLOCK blk1.
INITIALIZATION.
sysdate = sy-datum(4).
p_year = sysdate.
v_repid = sy-repid.
START-OF-SELECTION.
PERFORM decimal_places_for_curr.
PERFORM build_fieldcatalog.
PERFORM event_call.
PERFORM populate_event.
PERFORM get_data USING '1'.
PERFORM clc_data USING '1'.
PERFORM display_alv_report.
*&---------------------------------------------------------------------*
*& Include ZFO_BUDGET_OFFICE_F01
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
***INCLUDE ZFO_BUDGET_OFFICE_F01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_fieldcatalog .
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'FUNDSCTR'.
fieldcatalog-seltext_m = TEXT-001.
fieldcatalog-col_pos = 1.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
* fieldcatalog-tabname = 'FIN_DATA'.
* fieldcatalog-fieldname = 'FNDNAME'.
* fieldcatalog-seltext_m = text-002.
* fieldcatalog-col_pos = 2.
* fieldcatalog-outputlen = 15.
* APPEND fieldcatalog TO fieldcatalog.
* CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'BESCHR'.
fieldcatalog-seltext_m = TEXT-003.
fieldcatalog-col_pos = 3.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'TEXT1'.
fieldcatalog-seltext_m = TEXT-004.
fieldcatalog-col_pos = 4.
fieldcatalog-outputlen = 20.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'DAY'.
fieldcatalog-seltext_m = TEXT-005.
fieldcatalog-col_pos = 5.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'KURS'.
fieldcatalog-seltext_m = TEXT-006.
fieldcatalog-col_pos = 6.
fieldcatalog-outputlen = 10.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'ENTER_EA'.
fieldcatalog-seltext_m = TEXT-007.
fieldcatalog-col_pos = 7.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'SUPPL_EA'.
fieldcatalog-seltext_m = TEXT-008.
fieldcatalog-col_pos = 8.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'RETURN_EA'.
fieldcatalog-seltext_m = TEXT-011.
fieldcatalog-col_pos = 9.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'CON_BDG'.
fieldcatalog-seltext_m = TEXT-012.
fieldcatalog-col_pos = 12.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'CONS_BDG'.
fieldcatalog-seltext_m = TEXT-013.
fieldcatalog-col_pos = 13.
fieldcatalog-outputlen = 12.
IF p_tot IS INITIAL.
fieldcatalog-do_sum = 'X'.
ENDIF.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'AVL_BDG'.
fieldcatalog-seltext_m = TEXT-014.
fieldcatalog-col_pos = 14.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'AVL_PRS'.
fieldcatalog-seltext_m = TEXT-015.
fieldcatalog-col_pos = 15.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'CURR'.
fieldcatalog-seltext_m = TEXT-016.
fieldcatalog-col_pos = 16.
fieldcatalog-outputlen = 5.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'INIT'.
fieldcatalog-seltext_m = TEXT-017.
fieldcatalog-col_pos = 17.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'TOT_CONS'.
fieldcatalog-seltext_m = TEXT-018.
fieldcatalog-col_pos = 18.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'NETPR'.
fieldcatalog-seltext_m = TEXT-019.
fieldcatalog-col_pos = 18.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'PO_AV'.
fieldcatalog-seltext_m = TEXT-020.
fieldcatalog-col_pos = 18.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'PREIS'.
fieldcatalog-seltext_m = TEXT-021.
fieldcatalog-col_pos = 18.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-tabname = 'FIN_DATA'.
fieldcatalog-fieldname = 'PR_AV'.
fieldcatalog-seltext_m = TEXT-022.
fieldcatalog-col_pos = 18.
fieldcatalog-outputlen = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form CLC_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0464 text
*----------------------------------------------------------------------*
FORM clc_data USING flag TYPE char1.
REFRESH t_fmbl.
READ TABLE t_fmbl2 INDEX 1.
v_fundsctr = t_fmbl2-fundsctr.
v_cmmtitem = t_fmbl2-cmmtitem.
LOOP AT t_fmbl2.
IF v_fundsctr = t_fmbl2-fundsctr AND v_cmmtitem = t_fmbl2-cmmtitem.
APPEND t_fmbl2 TO t_fmbl.
ELSE.
PERFORM single_fund_commitment USING flag.
REFRESH t_fmbl.
PERFORM aggregate.
APPEND LINES OF fin_data TO fin_data2.
REFRESH fin_data.
v_fundsctr = t_fmbl2-fundsctr.
v_cmmtitem = t_fmbl2-cmmtitem.
APPEND t_fmbl2 TO t_fmbl.
ENDIF.
ENDLOOP.
PERFORM single_fund_commitment USING flag.
PERFORM aggregate.
APPEND LINES OF fin_data TO fin_data2.
SELECT SUM( preis ) FROM eban INTO <fs>-preis WHERE fistl = <fs>-fundsctr AND
fipos = <fs>-beschr AND frgkz = 'X' AND badat LIKE date . "po
SELECT SINGLE waers FROM eban INTO @DATA(curr) WHERE fistl = @<fs>-fundsctr AND
fipos = @<fs>-beschr AND frgkz = 'X' AND badat LIKE @date . "po
"//////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////
ENDSELECT .
ENDIF .
****************************************************************
<fs>-po_av = <fs>-con_bdg - <fs>-netpr .
<fs>-PR_av = <fs>-con_bdg - <fs>-preis .
<fs>-day = <fs>-day+0(6) .
ENDLOOP .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*& Form GET_CONSUMED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FLAG text
*----------------------------------------------------------------------*
FORM get_consumed USING flag TYPE char1.
CLEAR: bkpf,
fmifihd.
SELECT SINGLE *
FROM fmifihd
WHERE fmbelnr = fmifiit-fmbelnr
AND fikrs = '1000'.
IF sy-subrc = 0.
SELECT SINGLE *
FROM bkpf
WHERE belnr = fmifihd-awref
AND bukrs = fmifihd-bukrs
AND gjahr = fmifiit-gjahr.
ENDIF.
calc = bkpf-kursf.
IF p_crr = 'USD'.
ADD fmifiit-fkbtr TO fin_data-cons_bdg.
ELSEIF bkpf-waers = p_crr.
CLEAR cons.
cons = ( fmifiit-fkbtr * wa_tcurf-ffact ) / calc.
ADD cons TO fin_data-cons_bdg.
ELSE.
CLEAR cons.
cons = ( fmifiit-fkbtr * wa_tcurf-ffact ) / kurs.
ADD cons TO fin_data-cons_bdg.
ENDIF.
* IF calc <> kurs AND kurs <> 1 AND calc IS NOT INITIAL .
* CLEAR cons.
* cons = ( fmifiit-fkbtr * wa_tcurf-ffact ) / calc.
* ADD cons TO
* ELSE.
* CLEAR cons.
* cons = ( fmifiit-fkbtr * wa_tcurf-ffact ) / kurs.
* ADD cons TO fin_data-cons_bdg.
* ENDIF.
* fin_data-cons_bdg = fin_data-cons_bdg + fmifiit-fkbtr .
ENDSELECT.
* fin_data-cons_bdg = ( fin_data-cons_bdg * wa_tcurf-ffact ) / kurs.
CLEAR: calc .
IF p_crr <> fmioi-twaer.
SELECT SINGLE wkurs FROM ekko INTO calc WHERE ebeln = fmioi-refbn .
IF calc <> kurs AND kurs <> 1 AND calc IS NOT INITIAL .
CLEAR cons.
v_calcc = calc.
SPLIT v_calcc AT '.' INTO v_num v_dec.
IF v_num > 0.
cons = ( fmioi-trbtr * wa_tcurf-ffact ) / calc.
ELSE.
cons = ( fmioi-trbtr * wa_tcurf-ffact ) * calc.
ENDIF.
IF fmioi-twaer <> p_crr.
cons = cons / kurs.
ENDIF.
ADD cons TO fin_data-cons_bdg.
ELSE.
SELECT SINGLE ebeln
FROM eban
INTO v_ebeln
WHERE banfn = fmioi-refbn.
IF sy-subrc = 0.
SELECT SINGLE wkurs FROM ekko INTO calc WHERE ebeln = v_ebeln .
IF calc <> kurs AND kurs <> 1 AND calc IS NOT INITIAL .
CLEAR cons.
v_calcc = calc.
SPLIT v_calcc AT '.' INTO v_num v_dec.
IF v_num > 0.
cons = ( fmioi-trbtr * wa_tcurf-ffact ) / calc.
ELSE.
cons = ( fmioi-trbtr * wa_tcurf-ffact ) * calc.
ENDIF.
IF fmioi-twaer <> p_crr.
cons = cons / kurs.
ENDIF.
ADD cons TO fin_data-cons_bdg.
ENDIF.
ELSE.
CLEAR cons.
cons = ( fmioi-fkbtr * wa_tcurf-ffact ) / kurs.
ADD cons TO fin_data-cons_bdg.
ENDIF.
ENDIF.
ELSE.
CLEAR cons.
cons = fmioi-trbtr.
IF wa_curr IS NOT INITIAL.
IF wa_curr-currdec = 3.
DIVIDE cons BY 10.
ENDIF.
ENDIF.
ADD cons TO fin_data-cons_bdg.
ENDIF.
IF flag = '1'.
fin_data-tot_cons = fin_data-cons_bdg.
ELSE.
fin_data-tot_cons = fin_data-tot_cons + fin_data-cons_bdg.
ENDIF.
IF fin_data-con_bdg <> 0.
IF flag = '1'.
fin_data-init = fin_data-con_bdg.
fin_data-avl_prs = ( fin_data-avl_bdg / fin_data-con_bdg ) * 100.
IF fin_data-avl_prs LE 0.
fin_data-avl_prs = 0.
ENDIF.
ELSE.
IF wa_fin-con_bdg <> 0.
fin_data-avl_prs = ( fin_data-avl_bdg / wa_fin-con_bdg ) * 100.
ENDIF.
IF fin_data-avl_prs LE 0.
fin_data-avl_prs = 0.
ENDIF.
ENDIF.
ENDIF.
fin_data-day = fin_data-day ."+0(6).
ENDFORM. " GET_CONSUMED
*&---------------------------------------------------------------------*
*& Form GET_EXCHANGE_RATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_exchange_rate .
IF p_crr IS NOT INITIAL.
kurs = tcurr-ukurs.
SELECT SINGLE * FROM tcurf INTO wa_tcurf
WHERE kurst EQ 'M'
AND fcurr EQ p_crr
AND tcurr EQ 'USD'
AND gdatu GE t_date.
EXIT.
ENDSELECT.
ELSE.
kurs = 1.
ENDIF.
IF wa_tcurf-ffact = 0.
wa_tcurf-ffact = 1.
ENDIF.
IF kurs = 0.
kurs = 1.
ENDIF.
fin_data-kurs = kurs.
IF fin_data-ffact IS NOT INITIAL AND wa_tcurf-ffact IS NOT INITIAL
AND fin_data-ffact <> wa_tcurf-ffact.
v_ffact = fin_data-ffact.
ENDIF.
fin_data-ffact = wa_tcurf-ffact.
IF wa_fin IS NOT INITIAL.
fin_data-enter_ea = wa_fin-avl_bdg.
IF fin_data-kurs <> wa_fin-kurs.
fin_data-enter_ea = wa_fin-avl_bdg * wa_fin-kurs / fin_data-kurs.
ENDIF.
ENDIF.
ENDFORM. " GET_EXCHANGE_RATE
*&---------------------------------------------------------------------*
*& Form GET_LAST_DAY_OF_MONTH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_last_day_of_month .
fin_data-curr = p_crr.
CALL FUNCTION 'SG_PS_GET_LAST_DAY_OF_MONTH'
EXPORTING
day_in = fin_data-day
IMPORTING
last_day_of_month = v_enddate
EXCEPTIONS
day_in_not_valid = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " GET_LAST_DAY_OF_MONTH
*&---------------------------------------------------------------------*
*& Form GET_SUPPLIED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_supplied .
CLEAR fin_data-suppl_ea.
LOOP AT t_fmbl WHERE process = 'SUPL' AND budtype = 'PMS1'.
SELECT SINGLE docdate
FROM fmbh
INTO v_docdate
WHERE fm_area = t_fmbl-fm_area
AND docyear = t_fmbl-docyear
AND docnr = t_fmbl-docnr
AND docdate BETWEEN fin_data-day AND v_enddate.
IF sy-subrc = 0.
CLEAR enter_ea.
enter_ea = t_fmbl-tval01 + t_fmbl-tval02 + t_fmbl-tval03
+ t_fmbl-tval04 + t_fmbl-tval05 + t_fmbl-tval06
+ t_fmbl-tval07 + t_fmbl-tval08 + t_fmbl-tval09
+ t_fmbl-tval10 + t_fmbl-tval11 + t_fmbl-tval12.
fin_data-suppl_ea = fin_data-suppl_ea +
( abs( enter_ea ) * wa_tcurf-ffact ) / kurs.
ENDIF.
ENDLOOP.
CLEAR fin_data-return_ea.
LOOP AT t_fmbl WHERE process = 'RETN' AND budtype = 'PMS1'.
SELECT SINGLE docdate
FROM fmbh
INTO v_docdate
WHERE fm_area = t_fmbl-fm_area
AND docyear = t_fmbl-docyear
AND docnr = t_fmbl-docnr
AND docdate BETWEEN fin_data-day AND v_enddate.
IF sy-subrc = 0.
CLEAR enter_ea.
enter_ea = t_fmbl-tval01 + t_fmbl-tval02 + t_fmbl-tval03
+ t_fmbl-tval04 + t_fmbl-tval05 + t_fmbl-tval06
+ t_fmbl-tval07 + t_fmbl-tval08 + t_fmbl-tval09
+ t_fmbl-tval10 + t_fmbl-tval11 + t_fmbl-tval12.
fin_data-return_ea = fin_data-return_ea +
( enter_ea * wa_tcurf-ffact ) / kurs.
* fin_data-return_ea = fin_data-return_ea +
* ( abs( enter_ea ) * wa_tcurf-ffact ) / kurs.
ENDIF.
ENDLOOP.
CLEAR it_sort.
it_sort-spos = '02'.
it_sort-fieldname = 'BESCHR'.
it_sort-tabname = 'FIN_DATA'.
APPEND it_sort.
CLEAR it_sort.
it_sort-spos = '03'.
it_sort-fieldname = 'TEXT1'.
it_sort-tabname = 'FIN_DATA'.
APPEND it_sort.
ENDFORM. " FILL_SORT
*&---------------------------------------------------------------------*
*& Form GET_ENTER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FLAG text
*----------------------------------------------------------------------*
FORM get_enter USING flag.
DATA: v_found.
CLEAR v_found.
IF flag = '1'.
LOOP AT t_fmbl WHERE process = 'ENTR' AND budtype = 'PMS'.
SELECT SINGLE *
FROM fmbh
INTO wa_fmbh
WHERE fm_area = t_fmbl-fm_area
AND docyear = t_fmbl-docyear
AND docnr = t_fmbl-docnr
AND docdate BETWEEN fin_data-day AND v_enddate.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
v_found = 'X'.
MOVE-CORRESPONDING t_fmbl TO fin_data.
fin_data-beschr = t_fmbl-cmmtitem.
PERFORM get_description.
CLEAR enter_ea.
enter_ea = t_fmbl-tval01 + t_fmbl-tval02 +
t_fmbl-tval03 + t_fmbl-tval04 + t_fmbl-tval05 +
t_fmbl-tval06 + t_fmbl-tval07 + t_fmbl-tval08 + t_fmbl-
tval09 + t_fmbl-tval10 +
t_fmbl-tval11 + t_fmbl-tval12 .
* enter_ea = abs( enter_ea ).
enter_ea = enter_ea * -1 .
fin_data-enter_ea = fin_data-enter_ea + ( enter_ea * wa_tcurf-ffact ) /
kurs.
* fin_data-enter_ea = fin_data-enter_ea + ( abs( enter_ea ) * wa_tcurf-
ffact ) / kurs.
ENDLOOP.
IF v_found = space.
fin_data-fundsctr = v_fundsctr.
fin_data-beschr = v_cmmtitem.
PERFORM get_description.
ENDIF.
ELSE.
IF v_ffact IS NOT INITIAL AND v_ffact <> 0.
fin_data-enter_ea = fin_data-enter_ea * wa_tcurf-ffact / v_ffact.
CLEAR v_ffact.
ENDIF.
LOOP AT t_fmbl WHERE process = 'ENTR' AND budtype = 'PMS1'.
SELECT SINGLE *
FROM fmbh
INTO wa_fmbh
WHERE fm_area = t_fmbl-fm_area
AND docyear = t_fmbl-docyear
AND docnr = t_fmbl-docnr
AND docdate BETWEEN fin_data-day AND v_enddate.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
CLEAR enter_ea.
enter_ea = t_fmbl-tval01 + t_fmbl-tval02 +
t_fmbl-tval03 + t_fmbl-tval04 + t_fmbl-tval05 +
t_fmbl-tval06 + t_fmbl-tval07 + t_fmbl-tval08 + t_fmbl-
tval09 + t_fmbl-tval10 +
t_fmbl-tval11 + t_fmbl-tval12 .
* enter_ea = abs( enter_ea ).
enter_ea = enter_ea * -1 .
fin_data-enter_ea = fin_data-enter_ea + ( enter_ea * wa_tcurf-ffact ) /
kurs.
* fin_data-enter_ea = fin_data-enter_ea + ( abs( enter_ea ) * wa_tcurf-
ffact ) / kurs.
ENDLOOP.
ENDIF.
ENDFORM. " GET_ENTER
*&---------------------------------------------------------------------*
*& Form SINGLE_FUND_COMMITMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM single_fund_commitment USING flag.
DO p_monat TIMES.
CASE sy-index.
WHEN '1'.
CLEAR fin_data.
CONCATENATE p_year '0101' INTO fin_data-day.
PERFORM get_last_day_of_month.
CLEAR wa_fin.
PERFORM get_exchange_rate.
PERFORM get_enter USING flag.
PERFORM get_supplied.
PERFORM get_consumed USING flag.
APPEND fin_data.
WHEN '2'.
CLEAR fin_data.
READ TABLE fin_data INDEX 1 INTO wa_fin.
fin_data = wa_fin.
CONCATENATE p_year '0201' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_supplied.
PERFORM get_enter USING '2'.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN '3'.
CLEAR fin_data.
READ TABLE fin_data INDEX 2 INTO wa_fin.
fin_data = wa_fin.
CONCATENATE p_year '0301' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_supplied.
PERFORM get_enter USING '2'.
CLEAR wa_fin.
READ TABLE fin_data INDEX 1 INTO wa_fin.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN '4'.
CLEAR fin_data.
READ TABLE fin_data INDEX 3 INTO wa_fin.
fin_data = wa_fin.
CONCATENATE p_year '0401' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_supplied.
PERFORM get_enter USING '2'.
CLEAR wa_fin.
READ TABLE fin_data INDEX 1 INTO wa_fin.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN '5'.
CLEAR fin_data.
READ TABLE fin_data INDEX 4 INTO wa_fin.
fin_data = wa_fin.
CONCATENATE p_year '0501' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_supplied.
PERFORM get_enter USING '2'.
CLEAR wa_fin.
READ TABLE fin_data INDEX 1 INTO wa_fin.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN '6'.
CLEAR fin_data.
READ TABLE fin_data INDEX 5 INTO wa_fin.
fin_data = wa_fin.
CONCATENATE p_year '0601' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_supplied.
PERFORM get_enter USING '2'.
CLEAR wa_fin.
READ TABLE fin_data INDEX 1 INTO wa_fin.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN '7'.
CLEAR fin_data.
READ TABLE fin_data INDEX 6 INTO wa_fin.
fin_data = wa_fin.
* v_year = p_year + 1.
CONCATENATE p_year '0701' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_supplied.
PERFORM get_enter USING '2'.
CLEAR wa_fin.
READ TABLE fin_data INDEX 1 INTO wa_fin.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN '8'.
CLEAR fin_data.
READ TABLE fin_data INDEX 7 INTO wa_fin.
fin_data = wa_fin.
* v_year = p_year + 1.
CONCATENATE p_year '0801' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_supplied.
PERFORM get_enter USING '2'.
CLEAR wa_fin.
READ TABLE fin_data INDEX 1 INTO wa_fin.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN '9'.
CLEAR fin_data.
READ TABLE fin_data INDEX 8 INTO wa_fin.
fin_data = wa_fin.
CONCATENATE p_year '0901' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_supplied.
PERFORM get_enter USING '2'.
CLEAR wa_fin.
READ TABLE fin_data INDEX 1 INTO wa_fin.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN '10'.
CLEAR fin_data.
READ TABLE fin_data INDEX 9 INTO wa_fin.
fin_data = wa_fin.
CONCATENATE p_year '1001' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_supplied.
PERFORM get_enter USING '2'.
CLEAR wa_fin.
READ TABLE fin_data INDEX 1 INTO wa_fin.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN '11'.
CLEAR fin_data.
READ TABLE fin_data INDEX 10 INTO wa_fin.
fin_data = wa_fin.
CONCATENATE p_year '1101' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_supplied.
PERFORM get_enter USING '2'.
CLEAR wa_fin.
READ TABLE fin_data INDEX 1 INTO wa_fin.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN '12'.
CLEAR fin_data.
READ TABLE fin_data INDEX 11 INTO wa_fin.
fin_data = wa_fin.
CONCATENATE p_year '1201' INTO fin_data-day.
PERFORM get_last_day_of_month.
PERFORM get_exchange_rate.
PERFORM get_enter USING '2'.
PERFORM get_supplied.
CLEAR wa_fin.
READ TABLE fin_data INDEX 1 INTO wa_fin.
PERFORM get_consumed USING '2'.
APPEND fin_data.
WHEN OTHERS.
ENDCASE.
ENDDO.
* INCLUDE zfo_budget_office_f01.
*TYPE-POOLS: slis.
*
*
*
*
*PARAMETERS: fund LIKE fmfctr-fictr ,
* p_com LIKE fmci-fipex .
*
*TYPES:BEGIN OF STR,
* RFUNDSCTR TYPE FMBL-fundsctr,
* RCMMTITEM TYPE FMBL-cmmtitem ,
* MONTH(2) TYPE C ,
* TVAL01 type FMBL-tval01 ,
* TVAL02 type FMBL-tval01 ,
* TVAL03 type FMBL-tval01 ,
** TVAL04 type FMBL-tval01 ,
** TVAL05 type FMBL-tval01 ,
** TVAL06 type FMBL-tval01 ,
** TVAL07 type FMBL-tval01 ,
** TVAL08 type FMBL-tval01 ,
** TVAL09 type FMBL-tval01 ,
** TVAL10 type FMBL-tval01 ,
** TVAL11 type FMBL-tval01 ,
** TVAL12 type FMBL-tval01 ,
* netPR TYPE EKPO-NETPR ,
* PREIS type eban-PREIS ,
*
* END OF STR.
*
*
*
*DATA: it_sort TYPE slis_t_sortinfo_alv,
* wa_sort TYPE slis_sortinfo_alv.
*
* DATA IT TYPE TABLE OF STR WITH HEADER LINE .
*DATA : wa_fcat TYPE slis_fieldcat_alv,
* it_fcat TYPE slis_t_fieldcat_alv,
* wa_layout TYPE slis_layout_alv,
* wa_key TYPE slis_keyinfo_alv.
*
*
*IF fund IS NOT INITIAL .
*
*select RFUNDSCTR RCMMTITEM from FMAVCT into CORRESPONDING FIELDS OF TABLE it
where RFUNDSCTR = fund .
*
*
*ELSE .
*
*select RFUNDSCTR RCMMTITEM from FMAVCT into CORRESPONDING FIELDS OF TABLE it
where RCMMTITEM = p_com .
*
*
*
*
*ENDIF .
*
*LOOP AT IT .
*
*DO 12 TIMES .
*
*IT-rfundsctr = IT-rfundsctr .
*it-rcmmtitem = it-rcmmtitem .
*IT-month = SY-INDEX .
*CONDENSE IT-month .
*
*
*if IT-month = '1' .
*select SINGLE TSL01 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL01 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*if IT-month = '2' .
*select SINGLE TSL02 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL02 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*
*if IT-month = '3' .
*select SINGLE TSL03 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL03 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*if IT-month = '4' .
*select SINGLE TSL04 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL04 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*if IT-month = '5' .
*select SINGLE TSL05 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL05 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*if IT-month = '6' .
*select SINGLE TSL06 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL06 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*
*if IT-month = '7' .
*select SINGLE TSL07 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL07 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*if IT-month = '8' .
*select SINGLE TSL08 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL08 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*
*if IT-month = '9' .
*select SINGLE TSL09 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL09 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*if IT-month = '10' .
*select SINGLE TSL10 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL10 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*if IT-month = '11' .
*select SINGLE TSL11 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL11 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*if IT-month = '12' .
*select SINGLE TSL12 from FMAVCT into it-tval01 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '0'.
*select SINGLE TSL12 from FMAVCT into it-tval02 where RFUNDSCTR = IT-RFUNDSCTR
and RCMMTITEM = it-RCMMTITEM AND RRCTY = '1'.
*IT-TVAL03 = IT-tval01 - IT-TVAL02 .
*endif .
*
*SELECT SINGLE netPR FROM EKPO INTO it-netpr WHERE fistl = IT-RFUNDSCTR AND fipos =
it-RCMMTITEM.
*
*select SINGLE PREIS from eban into it-preis WHERE fistl = IT-RFUNDSCTR AND fipos =
it-RCMMTITEM and frgkz = 'X' .
*
*
*INSERT IT .
*
*ENDDO .
*
*ENDLOOP .
*delete it where month is INITIAL .
*
*
*
*wa_fcat-fieldname = 'RFUNDSCTR' .
*wa_fcat-tabname = 'IT' .
*wa_fcat-seltext_m = 'Fund Center'.
*APPEND wa_fcat TO it_fcat .
*CLEAR wa_fcat .
*
*wa_fcat-fieldname = 'RCMMTITEM'.
*wa_fcat-tabname = 'IT' .
*wa_fcat-seltext_m = 'Commitment Item' .
*APPEND wa_fcat TO it_fcat .
*CLEAR wa_fcat .
*
*
*
*wa_fcat-fieldname = 'MONTH'.
*wa_fcat-tabname = 'IT' .
*wa_fcat-seltext_m = 'Month' .
*APPEND wa_fcat TO it_fcat .
*CLEAR wa_fcat .
*
*
*
*wa_fcat-fieldname = 'TVAL01'.
*wa_fcat-tabname = 'IT' .
*wa_fcat-seltext_m = 'Consumed Budget' .
*wa_fcat-do_sum = 'X' .
*APPEND wa_fcat TO it_fcat .
*CLEAR wa_fcat .
*
*
*
*wa_fcat-fieldname = 'TVAL02'.
*wa_fcat-tabname = 'IT' .
*wa_fcat-seltext_m = 'Consumable Budget' .
*wa_fcat-do_sum = 'X' .
*APPEND wa_fcat TO it_fcat .
*CLEAR wa_fcat .
*
*
*
*
*wa_fcat-fieldname = 'TVAL03'.
*wa_fcat-tabname = 'IT' .
*wa_fcat-seltext_m = 'Available Amount' .
*wa_fcat-do_sum = 'X' .
*APPEND wa_fcat TO it_fcat .
*CLEAR wa_fcat .
*
*
*
*
*wa_fcat-fieldname = 'NETPR'.
*wa_fcat-tabname = 'IT' .
*wa_fcat-seltext_m = 'PO Amount' .
*wa_fcat-do_sum = 'X' .
*APPEND wa_fcat TO it_fcat .
*CLEAR wa_fcat .
*
*
*
*wa_fcat-fieldname = 'PREIS'.
*wa_fcat-tabname = 'IT' .
*wa_fcat-seltext_m = 'PR Amount' .
*wa_fcat-do_sum = 'X' .
*
*APPEND wa_fcat TO it_fcat .
*CLEAR wa_fcat .
*****************************************
*wa_sort-fieldname = 'RFUNDSCTR' .
*wa_sort-up = 'X' .
*wa_sort-subtot = 'X' .
*APPEND wa_sort TO IT_SORT .
*
*
*wa_sort-fieldname = 'RCMMTITEM' .
*wa_sort-up = 'X' .
*wa_sort-subtot = 'X' .
*APPEND wa_sort TO IT_SORT .
*****************************************
*
*CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
* EXPORTING
*i_callback_program = sy-repid
*it_fieldcat = it_fcat
*it_sort = it_sort
*
*TABLES
*t_outtab = it[]
*.
*
*
*
*
*
*
*
**loop at it ASSIGNING FIELD-SYMBOL(<fs>) .
**
**SELECT SINGLE netPR FROM EKPO INTO <fs>-netpr WHERE fistl = IT-fundsctr AND fipos
= IT-cmmtitem .
**
**select SINGLE PREIS from eban into <fs>-preis WHERE fistl = IT-fundsctr AND fipos
= IT-cmmtitem and frgkz = 'X' .
**
**
**endloop .