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

REPORT j_1ainfw MESSAGE-ID 8z.

* post inflation adjustment for open items in foreign currency


* runs in 2 steps:
* 1) run modified foreign currency revaluation
* 2) post rei-rt split by reading db table filled in step 1
* The open item valuation must run before and fill table J_1AOIFWVL

TABLES: j_1aoifwvl,
t001,
skb1,
lfa1,
kna1,
j_1ainfmet,
j_1ainfsks,
j_1a030if,
bkpf,
bseg,
t030h,
t044a, "#EC NEEDED
j_1ainfw_files.

CONSTANTS: con_appl LIKE j_1ainft10-j_1aapplkp VALUE '01'.

TYPES: BEGIN OF t001i.


INCLUDE STRUCTURE t001.
TYPES: j_1ainfmet LIKE j_1ainfmet-j_1ainfmet,
j_1afiact LIKE j_1ainfmet-j_1afiact,
j_1atbeapp LIKE j_1ainfmet-j_1atbeapp,
j_1aipmng LIKE j_1ainfmet-j_1aipmng,
j_1anotrt LIKE j_1ainfmet-j_1anotrt,
j_1aiblart LIKE j_1ainfmet-j_1aiblart,
j_1afwblat LIKE j_1ainfmet-j_1afwblat,
j_1acbschl LIKE j_1ainfmet-j_1acbschl,
j_1adbschl LIKE j_1ainfmet-j_1adbschl,
j_1aimwskz LIKE j_1ainfmet-j_1aimwskz,
j_1aomwskz LIKE j_1ainfmet-j_1aomwskz,
j_1aposmet LIKE j_1ainfmet-j_1aposmet,
END OF t001i.

* SKB1 fields + fields from the assigned inflation key


TYPES: BEGIN OF skb1i.
INCLUDE STRUCTURE skb1.
TYPES: j_1aifsks LIKE j_1ainfsks-j_1aifsks,
j_1amonacc LIKE j_1ainfsks-j_1amonacc,
j_1ametinf LIKE j_1ainfsks-j_1ametinf,
j_1aindxsp LIKE j_1ainfsks-j_1aindxsp,
j_1atbedep LIKE j_1ainfsks-j_1atbedep,
j_1aposti LIKE j_1ainfsks-j_1aposti,
j_1aonlysp LIKE j_1ainfsks-j_1aonlysp,
END OF skb1i.

*----- company code with inflation data


DATA: xt001i TYPE t001i.

*----- G/L account with inflation data


DATA: xskb1i TYPE skb1i.

*----- items that were revaluated


DATA: documents LIKE j_1aoifwvl OCCURS 100 WITH HEADER LINE.

*---- output list of standard list


DATA: list LIKE abaplist OCCURS 100 WITH HEADER LINE.

DATA: xblntab LIKE blntab OCCURS 1 WITH HEADER LINE.


DATA: xfttax LIKE fttax OCCURS 1 WITH HEADER LINE.

DATA: BEGIN OF result OCCURS 100, "#EC NEEDED


bukrs LIKE bseg-bukrs,
belnr LIKE bseg-belnr,
gjahr LIKE bseg-gjahr,
rei_amount LIKE bseg-dmbtr,
rt_account LIKE bseg-hkont,
rei_account LIKE bseg-hkont,
index LIKE j_1ainfmet-j_1aipmng,
postingerror(1) TYPE c,
errorinfo(10) TYPE c,
END OF result.

*---- posting data


DATA: xftpost LIKE ftpost OCCURS 100 WITH HEADER LINE.

DATA: error(1) TYPE c, "error for current entry?


lock_user LIKE sy-uname,
x_fimsg LIKE fimsg,
first_posting(1) TYPE c VALUE 'X', "Flag: first posting
func TYPE c,
datum(8) TYPE c,
"char_amount(16) TYPE c,
char_amount TYPE AFLEXC16, "AFLE Change
bschl1 LIKE bseg-bschl,
bschl2 LIKE bseg-bschl,
xcurtp LIKE t001a-curtp,
rei_account LIKE bseg-hkont, "account to post rei amount
rt_account LIKE bseg-hkont, "this account will contain rt
"amount after run of program
old_bukrs LIKE t001-bukrs,
old_hkont LIKE bseg-hkont,
rei_amount LIKE bseg-dmbtr,
x_sgtxt LIKE bseg-sgtxt,
x_subrc LIKE sy-subrc,
b_mappe LIKE sy-repid.

* Processing mode -----------------------------------------------------


DATA: mode TYPE c.

DATA: x_valuid TYPE j_1avaluid,


x_filename LIKE j_1ainfw_files-file.

RANGES: range_bukrs FOR bkpf-bukrs.

DATA: x_file TYPE f100xfil,


x_file_data TYPE f100file OCCURS 0 WITH HEADER LINE.

* ALV output ----------------------------------------------------------


TYPE-POOLS: slis.
INCLUDE <icon>.
INCLUDE <symbol>.
DATA: i_alvhdr LIKE j_1ainalvhdr OCCURS 0 WITH HEADER LINE.

DATA: i_alvitm LIKE j_1ainalvitm OCCURS 0 WITH HEADER LINE.


* ---- error message information at line item level ---- *
DATA: errorinfo LIKE j_1ainalvitm-errorinfo. " Note 536242

DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,


gs_layout TYPE slis_layout_alv,
gs_keyinfo TYPE slis_keyinfo_alv,
gt_events TYPE slis_t_event.
DATA: g_repid LIKE sy-repid,
g_formname TYPE slis_formname,
g_pf_formname TYPE slis_formname, "#EC NEEDED
gc_formname_top_of_page TYPE slis_formname.
DATA: g_save TYPE c,
g_tabname_header TYPE slis_tabname,
g_tabname_item TYPE slis_tabname,
g_variant LIKE disvariant.

* Tables for error messages --------------------------------------------


DATA: i_alvmess LIKE j_1amsgm2 OCCURS 0 WITH HEADER LINE, "#EC NEEDED
x_fimsg_tab LIKE fimsg OCCURS 0 WITH HEADER LINE.

DATA: g_selo TYPE c. "ACC30


* - SELECTION SCREEN --------------------------------------------------

SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE text-000.


PARAMETERS: bukrs LIKE bkpf-bukrs OBLIGATORY.

PARAMETER: x_ap LIKE rfpdo-f010kred


USER-COMMAND x_ap. "ACC30
SELECT-OPTIONS: kkonto FOR bseg-lifnr MATCHCODE OBJECT kred
MODIF ID xap. "ACC30
PARAMETER: x_ar LIKE rfpdo-f010debi
USER-COMMAND x_ar. "ACC30
SELECT-OPTIONS: dkonto FOR bseg-kunnr MATCHCODE OBJECT debi
MODIF ID xar, "ACC30
curr FOR bkpf-waers
MODIF ID xar. "ACC30
SELECTION-SCREEN END OF BLOCK b0.

* Block: Key date and valuation method ---------------------------


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: date LIKE j_1asinff-keydate OBLIGATORY,
bwmet LIKE rfpdo1-f100meth."CC method
SELECTION-SCREEN END OF BLOCK b1.

* Block: Processing mode -----------------------------------------


SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text-pa0 FOR FIELD mode_all.
PARAMETERS: mode_all RADIOBUTTON GROUP g1 LIKE j_1asinff-fwdirect
USER-COMMAND fmod.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text-pa1 FOR FIELD mode_one.
PARAMETERS: mode_one RADIOBUTTON GROUP g1 LIKE j_1asinff-fwstep1.
SELECTION-SCREEN COMMENT 34(28) text-pa3 FOR FIELD valuid_n.
PARAMETERS: valuid_n TYPE j_1avaluid MODIF ID 001. "ACC30
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (31) text-pa2 FOR FIELD mode_two.
PARAMETERS: mode_two RADIOBUTTON GROUP g1 LIKE j_1asinff-fwstep2.
SELECTION-SCREEN COMMENT 34(28) text-pa4 FOR FIELD valuid_o.
PARAMETERS: valuid_o LIKE j_1ainfw_files-valuid MODIF ID 002.
* OBLIGATORY. "ACC30
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b3.

* Block: Postings settings ---------------------------------------


SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS: updpost LIKE j_1asinff-updpost DEFAULT 'X',
budat LIKE bkpf-budat DEFAULT sy-datum,
buper LIKE bkpf-monat.
SELECTION-SCREEN END OF BLOCK b2.
xcurtp = '10'. "always first local currency

*----------------------------------------------------------------------
* INITIALIZATION
*----------------------------------------------------------------------
INITIALIZATION.
PERFORM init_alv.

*-----------------------------------------------------------------------
* AT SELECTION-SCREEN
*-----------------------------------------------------------------------
AT SELECTION-SCREEN ON bwmet. "ACC30 >>>
IF mode_one NE 'X'.
IF bwmet = ' '.
MESSAGE e227.
* Please enter a valuation method
ELSE.
SELECT SINGLE * FROM t044a WHERE bwmet = bwmet.
IF sy-subrc NE 0.
MESSAGE e362(fr).
* Valuation method does not exist
ENDIF.
ENDIF.
ENDIF. "ACC30 <<<

AT SELECTION-SCREEN ON valuid_n. "ACC30 >>>


IF g_selo = '1' AND valuid_n IS INITIAL AND
mode_one IS NOT INITIAL.
MESSAGE e272.
ENDIF. "ACC30 <<<

AT SELECTION-SCREEN ON valuid_o. "ACC30 >>>


IF g_selo = '2' AND valuid_o IS INITIAL AND
mode_two IS NOT INITIAL.
MESSAGE e273.
ENDIF. "ACC30 <<<

AT SELECTION-SCREEN.

* check company code settings


SELECT SINGLE * FROM t001
WHERE bukrs = bukrs.
MOVE-CORRESPONDING t001 TO xt001i.
* check if company code has an inflation method
IF t001-infmt IS INITIAL.
MESSAGE e250 WITH t001-bukrs.
ENDIF.
SELECT SINGLE * FROM j_1ainfmet
WHERE land1 = t001-land1
AND j_1ainfmet = t001-infmt.
MOVE-CORRESPONDING j_1ainfmet TO xt001i.

IF xt001i-j_1afiact IS INITIAL.
MESSAGE e232 WITH bukrs.
* Inflation adjustment is not acitvated for company code &; see long t
ENDIF.
IF xt001i-j_1aipmng IS INITIAL.
MESSAGE e211 WITH bukrs.
* No general index is defined
ENDIF.

IF date IS INITIAL.
MESSAGE e228.
* Please enter a valuation key date
ENDIF.

* New file handling


IF mode_one = 'X'.
SELECT SINGLE * FROM j_1ainfw_files
WHERE valuid = valuid_n.
IF sy-subrc = 0.
MESSAGE e274 WITH valuid_n.
ENDIF.

ELSEIF mode_two = 'X'.


IF valuid_o NE space.
SELECT SINGLE * FROM j_1ainfw_files
WHERE valuid = valuid_o.
IF sy-subrc NE 0.
MESSAGE e275 WITH valuid_o.
ENDIF.
ENDIF.
ENDIF.

IF budat IS INITIAL AND updpost = 'X'.


MESSAGE e210.
* Please enter a posting date for the adjustment postings
ENDIF.
* Check valuid----------------------------------------------------------
* Integrated valuation
IF mode_all = 'X'.
x_valuid = 'X_001'.
SELECT SINGLE * FROM j_1ainfw_files
WHERE valuid = x_valuid.
IF sy-subrc = 0. "X_001 still used
MESSAGE w271.
ENDIF.
ENDIF.
* Only foreign currency val.: use user-input for valuid --------------
IF mode_one = 'X'.
x_valuid = valuid_n.
IF x_valuid = space.

ENDIF.
ENDIF.
* Only inflation valuation: Check if input ID was enteres ------------
IF mode_two = 'X'.
x_valuid = valuid_o.
IF x_valuid = space.

ENDIF.
ENDIF.

AT SELECTION-SCREEN OUTPUT.
IF mode_one IS NOT INITIAL.
g_selo = '1'.
ELSEIF mode_two IS NOT INITIAL.
g_selo = '2'.
ELSE.
g_selo = '0'.
ENDIF.
PERFORM modify_screen.

*----------------------------------------------------------------------
* START-OF-SELECTION.
*---------------------------------------------------------------------
START-OF-SELECTION.

* Processing mode
IF mode_all = 'X'.
mode = '1'. "integrated mode
ELSEIF mode_one = 'X'.
mode = '2'. "only foreign.curr. valuat.
ELSEIF mode_two = 'X'.
mode = '3'. "only inflation valuation
ENDIF.

* enqueue of index values in case of postings


IF updpost = 'X' AND mode NE '2'.
CALL FUNCTION 'ENQUEUE_EJ_1AT10'
EXPORTING
mode_j_1ainft10 = 'E'
mandt = sy-mandt
j_1aapplkp = con_appl
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc NE 0.
lock_user = sy-msgv1.
CASE sy-subrc.
WHEN '1'.
MESSAGE s222 WITH sy-repid lock_user.
STOP.
WHEN '2'.
MESSAGE s836.
STOP.
WHEN OTHERS.
MESSAGE s836.
STOP.
ENDCASE.
ENDIF.
ENDIF.

* Integrated mode: Use internal valuation ID --------------------------


IF mode = '1'.
x_valuid = 'X_001'.
SELECT SINGLE * FROM j_1ainfw_files
WHERE valuid = x_valuid.
IF sy-subrc = 0. "X_001 still used
MESSAGE e271.
STOP.
ENDIF.
ENDIF.
* Only foreign currency val.: use user-input for valuid --------------
IF mode = '2'.
x_valuid = valuid_n.
IF x_valuid = space.
MESSAGE e272.
STOP.
ENDIF.
ENDIF.
* Only inflation valuation: Check if input ID was enteres ------------
IF mode = '3'.
x_valuid = valuid_o.
IF x_valuid = space.
MESSAGE e273.
STOP.
ENDIF.
ENDIF.
* Step 1 **************************************************************
IF mode = '1' OR mode = '2'.
range_bukrs-sign = 'I'.
range_bukrs-option = 'EQ'.
range_bukrs-low = bukrs.
APPEND range_bukrs.
IF updpost = 'X'.
b_mappe = sy-repid.
ENDIF.
PERFORM build_file_name CHANGING x_filename.

SUBMIT sapf100 AND RETURN EXPORTING LIST TO MEMORY


WITH bukrs IN range_bukrs
WITH stichtag = date
WITH bwmet1 = bwmet
WITH post_upd = updpost
WITH x_ap = x_ap
WITH kkonto IN kkonto
WITH x_ar = x_ar
WITH dkonto IN dkonto
WITH waehrung IN curr
WITH par_bnam = b_mappe
WITH par_bi = updpost
WITH p_bbudat = budat
WITH p_bbupem = buper
WITH filename = x_filename.
* Update control table J_1AINFW_FILES
IF updpost = 'X'.
j_1ainfw_files-valuid = x_valuid.
j_1ainfw_files-file = x_filename.
j_1ainfw_files-usnam = sy-uname.
j_1ainfw_files-cpudt = sy-datum.
j_1ainfw_files-cputm = sy-uzeit.
j_1ainfw_files-f100stag = date.
INSERT j_1ainfw_files.
ENDIF.

ENDIF.

* Step 2 **************************************************************
* Read data from file produced by SAPF100
* Then, select document item data into table documents
IF ( mode = '1' AND updpost = 'X' ) OR mode = '3'.

PERFORM read_file TABLES documents


USING x_valuid.

* Get company code data


SELECT SINGLE * FROM t001
WHERE bukrs = bukrs.

*---------------------------------------------------------------------
* LOOP over selected items
*---------------------------------------------------------------------
LOOP AT documents.
* Refresh internal tables
REFRESH xblntab.
CLEAR error.
CLEAR errorinfo. " Note 536242

MOVE-CORRESPONDING documents TO i_alvhdr.


IF documents-koart = 'K'.
i_alvhdr-hkont = documents-lifnr.
ELSE.
i_alvhdr-hkont = documents-kunnr.
ENDIF.
COLLECT i_alvhdr.
MOVE-CORRESPONDING documents TO i_alvitm.
i_alvitm-hkont = i_alvhdr-hkont.

* Get account data


IF documents-bukrs NE old_bukrs
OR documents-hkont NE old_hkont.
CLEAR xskb1i.
SELECT SINGLE * FROM skb1
WHERE bukrs = documents-bukrs
AND saknr = documents-hkont.
MOVE-CORRESPONDING skb1 TO xskb1i.
IF skb1-infky IS INITIAL. "account not relevant for infl.
x_fimsg-msgno = '230'.
x_fimsg-msgv1 = skb1-saknr.
error = 'X'.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '230'.
MESSAGE e230 WITH skb1-saknr INTO errorinfo+18.
* Reconciliation account & is maintained as not relevant for inflation
i_alvitm-errorinfo = errorinfo.
* ---- Note 536242: end ---- *
ELSE.
CLEAR j_1ainfsks.
SELECT SINGLE * FROM j_1ainfsks
WHERE land1 = xt001i-land1
AND j_1aifsks = skb1-infky.
MOVE-CORRESPONDING j_1ainfsks TO xskb1i.
ENDIF.
ENDIF.

* check main inflation master record data of reconcil. account


IF xskb1i-j_1aposti IS INITIAL. "do not post inflation for acc.
x_fimsg-msgno = '231'.
x_fimsg-msgv1 = xskb1i-saknr.
error = 'X'.
* ELSEIF SKB1-J_1AMETINF NE '4'.
* not checked for the moment
ENDIF.
IF error = 'X'.
x_fimsg-msgid = '8Z'.
x_fimsg-msgty = 'E'.
CALL FUNCTION 'FI_MESSAGE_COLLECT'
EXPORTING
i_fimsg = x_fimsg.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '231'.
MESSAGE e231 WITH xskb1i-saknr INTO errorinfo+18.
* The indicator for inflation posting is not set for reconcil. account
i_alvitm-errorinfo = errorinfo.
* ---- Note 536242: end ---- *
APPEND i_alvitm.
CONTINUE.
ENDIF.

* Inflation calculation -----------------------------------------------


PERFORM calculate_rei USING xt001i
xskb1i
documents
CHANGING rei_amount
error
errorinfo. " Note 536242
IF error = 'X'.
i_alvitm-errorinfo = errorinfo. " Note 536242
APPEND i_alvitm.
CONTINUE.
ELSE.

i_alvitm-rei_amount = rei_amount.
i_alvitm-waers = t001-waers.
i_alvitm-fwaer = documents-waers.
* ---- Note 536242: start ---- *
i_alvitm-specif_index = xt001i-j_1aipmng.
i_alvitm-start_date = documents-startdate.
* ---- Note 536242: end ---- *
ENDIF.

* Account determination -----------------------------------------------


* 1) determine foreign currency gain/loss account
PERFORM fw_account USING documents
t001-ktopl
CHANGING rt_account
error
errorinfo. " Note 536242
IF error = 'X'.
i_alvitm-errorinfo = errorinfo. " Note 536242
APPEND i_alvitm.
CONTINUE.
ELSE.
*2) determine REI account
IF documents-bukrs NE old_bukrs
AND documents-hkont NE old_hkont.
PERFORM rei_account USING documents
t001-ktopl
CHANGING rei_account
error
errorinfo. " Note 536242
IF error = 'X'.
i_alvitm-errorinfo = errorinfo. " Note 536242
APPEND i_alvitm.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
*----------------------------------------------------------------------

* determine posting keys ----------------------------------------------


IF rei_amount > 0.
bschl1 = xt001i-j_1adbschl. "debit posting on rt account
bschl2 = xt001i-j_1acbschl. "credit posting on rei account
ELSE.
bschl1 = xt001i-j_1acbschl. "credit posting on rt account
bschl2 = xt001i-j_1adbschl. "debit posting on rei account
ENDIF.

* posting -------------------------------------------------------------
IF updpost = 'X'. "check if posting is required
IF rei_amount NE 0.
IF first_posting = 'X'. "open transaction
func = 'C'. "only call transaction
CALL FUNCTION 'POSTING_INTERFACE_START'
EXPORTING
i_function = func
i_group = space
i_user = sy-uname.
CLEAR first_posting.
ENDIF.

* prepare line item text


x_sgtxt(4) = documents-bukrs.
x_sgtxt+4(1) = '-'.
x_sgtxt+5(4) = documents-gjahr.
x_sgtxt+9(1) = '-'.
x_sgtxt+10(10) = documents-belnr.
x_sgtxt+20(1) = '-'.
x_sgtxt+21 = text-114.

REFRESH xftpost.
* document header
xftpost-stype = 'K'.
xftpost-count = '1'.
WRITE budat TO datum.
PERFORM set_fields USING 'BKPF-BLDAT' datum.
PERFORM set_fields USING 'BKPF-BUDAT' datum.
PERFORM set_fields USING 'BKPF-BLART' xt001i-j_1afwblat.
* perform set_fields using 'BKPF-MONAT' ...
PERFORM set_fields USING 'BKPF-WAERS' documents-waers.
PERFORM set_fields USING 'BKPF-BUKRS' documents-bukrs.

* first line item: posting on fw account that will contain the rt


* amount in the end
xftpost-stype = 'P'.
xftpost-count = '1'.
PERFORM set_fields USING 'BSEG-BSCHL' bschl1.
PERFORM set_fields USING 'BSEG-HKONT' rt_account.
WRITE rei_amount CURRENCY documents-waers NO-SIGN TO char_amount.
PERFORM set_fields USING 'BSEG-DMBTR' char_amount.
PERFORM set_fields USING 'BSEG-WRBTR' 0.
PERFORM set_fields USING 'BSEG-SGTXT' x_sgtxt.
* GSBER, KOSTL ???

* second line item: REI account


xftpost-stype = 'P'.
xftpost-count = '2'.
PERFORM set_fields USING 'BSEG-BSCHL' bschl2.
PERFORM set_fields USING 'BSEG-HKONT' rei_account.
PERFORM set_fields USING 'BSEG-DMBTR' char_amount.
PERFORM set_fields USING 'BSEG-WRBTR' 0.
PERFORM set_fields USING 'BSEG-SGTXT' x_sgtxt.
* GSBER, KOSTL ???

CALL FUNCTION 'POSTING_INTERFACE_DOCUMENT'


EXPORTING
i_tcode = 'FBB1'
IMPORTING
e_msgid = sy-msgid
e_msgno = sy-msgno
e_msgty = sy-msgty
e_msgv1 = sy-msgv1
e_msgv2 = sy-msgv2
e_msgv3 = sy-msgv3
e_msgv4 = sy-msgv4
e_subrc = x_subrc
TABLES
t_blntab = xblntab
t_ftpost = xftpost
t_fttax = xfttax
EXCEPTIONS
OTHERS = 4.
IF sy-subrc = 0 AND x_subrc = 0.
result-bukrs = documents-bukrs.
READ TABLE xblntab INDEX 1.
i_alvitm-new_belnr = xblntab-belnr.
i_alvitm-new_gjahr = xblntab-gjahr.
* result-belnr = xblntab-belnr.
* result-gjahr = xblntab-gjahr.
* result-rei_amount = rei_amount.
* APPEND result.
* update item -----------------------------------------------------
SELECT SINGLE FOR UPDATE * FROM bseg
WHERE bukrs = documents-bukrs
AND belnr = documents-belnr
AND gjahr = documents-gjahr
AND buzei = documents-buzei.

bseg-linfv = documents-enddate.
UPDATE bseg.

ELSE.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = sy-msgid.
errorinfo+12(3) = sy-msgno.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO errorinfo+18.
i_alvitm-errorinfo = errorinfo.
* ---- Note 536242: end ---- *

x_fimsg-msgid = sy-msgid.
x_fimsg-msgty = 'E'.
x_fimsg-msgno = sy-msgno.
CALL FUNCTION 'FI_MESSAGE_COLLECT'
EXPORTING
i_fimsg = x_fimsg.

* result-postingerror = 'X'.
* result-errorinfo(2) = sy-msgid.
* result-errorinfo+3 = sy-msgno.
* APPEND result.
* exceptions = documents.
* APPEND exceptions.
ENDIF.
ENDIF.
ENDIF.

APPEND i_alvitm.

* -----------------------------------------------------------------

old_bukrs = documents-bukrs.
old_hkont = documents-hkont.

ENDLOOP.

* Update control table J_1AINFW_FILES in case of successful run


IF updpost = 'X'.
LOOP AT i_alvitm WHERE errorinfo NE space.
ENDLOOP.
IF sy-subrc NE 0. "no error occurred
DELETE FROM j_1ainfw_files WHERE
valuid = x_valuid.
ENDIF.

* dequeue of index values, setting of lock dates


CALL FUNCTION 'DEQUEUE_EJ_1AT10'
EXPORTING
mode_j_1ainft10 = 'E'
mandt = sy-mandt
j_1aapplkp = con_appl
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
MESSAGE e837.
ENDIF.
CALL FUNCTION 'J_1A_SET_LOCK_DATE'
EXPORTING
application_call = con_appl.
ENDIF.

ENDIF.

* Output *************************************************************
* Output of the standard foreign currency revaluation
IF mode = '1' OR mode = '2'.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = list
EXCEPTIONS
not_found = 1.
IF sy-subrc = 0.
CALL FUNCTION 'DISPLAY_LIST'
EXPORTING
fullscreen = 'X'
TABLES
listobject = list
EXCEPTIONS
empty_list = 1.
IF sy-subrc NE 0.
WRITE: /, text-112.
ENDIF.
ELSE.
WRITE: /, text-112.
ENDIF.
ENDIF.
* Output of postings and results of the inflation program
IF ( mode = '1' AND updpost = 'X' ) OR mode = '3'.
* PERFORM output.
PERFORM output_alv.
ELSEIF mode = '1' AND updpost = ' '.
WRITE / text-t09.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FW_ACCOUNT
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fw_account USING value(i_documents) LIKE documents
value(i_ktopl) LIKE t001-ktopl
CHANGING o_account LIKE bseg-hkont
o_error TYPE c
errorinfo LIKE j_1ainalvitm-errorinfo.
* " Note 536242
* (see also form FI-RWZ in J_1AOI1)
* this account will contain the rt amount in the end

SELECT SINGLE * FROM t030h


WHERE ktopl = i_ktopl
AND waers = i_documents-waers
AND hkont = i_documents-hkont
AND curtp = xcurtp.
IF sy-subrc NE 0.
SELECT SINGLE * FROM t030h
WHERE ktopl = i_ktopl
AND waers = space
AND hkont = i_documents-hkont
AND curtp = xcurtp.
IF sy-subrc NE 0.
SELECT SINGLE * FROM t030h
WHERE ktopl = i_ktopl
AND waers = i_documents-waers
AND hkont = i_documents-hkont
AND curtp = space.
IF sy-subrc NE 0.
SELECT SINGLE * FROM t030h
WHERE ktopl = i_ktopl
AND waers = space
AND hkont = i_documents-hkont
AND curtp = space.
IF sy-subrc NE 0.
x_fimsg-msgid = '8Z'.
x_fimsg-msgty = 'E'.
x_fimsg-msgno = '223'.
x_fimsg-msgv1 = i_ktopl.
x_fimsg-msgv2 = documents-hkont.
* No account for gain/loss from valuation defined for account & - &.
CALL FUNCTION 'FI_MESSAGE_COLLECT'
EXPORTING
i_fimsg = x_fimsg.
o_error = 'X'.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '223'.
MESSAGE e223 WITH i_ktopl documents-hkont INTO errorinfo+18.
* No account for profit/loss from valuation defined for account &1 - &
* ---- Note 536242: end ---- *
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF i_documents-delta1 < 0.
o_account = t030h-lsbew.
ELSE.
o_account = t030h-lhbew.
ENDIF.

ENDFORM. " FW_ACCOUNT

*&---------------------------------------------------------------------*
*& Form REI_ACCOUNT
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM rei_account USING value(i_documents) LIKE documents
value(i_ktopl) LIKE t001-ktopl
CHANGING o_account LIKE bseg-hkont
o_error TYPE c
errorinfo LIKE j_1ainalvitm-errorinfo.
* " Note 536242
SELECT SINGLE * FROM j_1a030if
WHERE ktopl = i_ktopl
AND hkont = i_documents-hkont.
IF sy-subrc NE 0.
x_fimsg-msgid = '8Z'.
x_fimsg-msgty = 'E'.
x_fimsg-msgno = '254'.
x_fimsg-msgv1 = i_documents-hkont.
CALL FUNCTION 'FI_MESSAGE_COLLECT'
EXPORTING
i_fimsg = x_fimsg.
o_error = 'X'.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '254'.
MESSAGE e254 WITH i_documents-hkont INTO errorinfo+18.
* Account determination (inflation processing) incomplete for account
* ---- Note 536242: end ---- *
ELSE.
o_account = j_1a030if-j_1adrei.
IF o_account IS INITIAL.
* ---- Note 536242: start ---- *
o_error = 'X'.
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '254'.
MESSAGE e254 WITH i_documents-hkont INTO errorinfo+18.
* Account determination (inflation processing) incomplete for account
* ---- Note 536242: end ---- *
ENDIF.
ENDIF.
ENDFORM. " REI_ACCOUNT
*&---------------------------------------------------------------------*
*& Form CALCULATE_REI
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM calculate_rei USING value(i_t001i) TYPE t001i
value(i_skb1i) TYPE skb1i
value(i_documents) LIKE documents
CHANGING o_amount LIKE bseg-dmbtr
o_error TYPE c
errorinfo LIKE j_1ainalvitm-errorinfo.
* " Note 536242

DATA: x_tbe LIKE j_1ainfsks-j_1atbedep.

* check if account is relevant for inflation

* determine time base


IF i_skb1i-j_1atbedep IS INITIAL.
x_tbe = i_t001i-j_1atbeapp.
ELSE.
x_tbe = i_skb1i-j_1atbedep.
ENDIF.

CALL FUNCTION 'J_1A_INFLATION_CALCULATION_FI'


EXPORTING
amount = i_documents-dmshb
origin_tbep = x_tbe
origin_date = i_documents-startdate
final_tbep = x_tbe
final_date = i_documents-enddate
specific_index = i_t001i-j_1aipmng
IMPORTING
adjustment = o_amount
EXCEPTIONS
time_base_data_not_found = 1
exposure_date_not_found = 2
index_definition_not_found = 3
index_values_not_found = 4
definitive_values_not_found = 5
OTHERS = 8.

IF sy-subrc NE 0.
CASE sy-subrc.
WHEN '1'.
x_fimsg-msgty = 'E'.
x_fimsg-msgno = '214'.
x_fimsg-msgv1 = x_tbe.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '214'.
MESSAGE e214 WITH x_tbe INTO errorinfo+18.
* No data maintained for time base variant &
* ---- Note 536242: end ---- *
WHEN '2'.
x_fimsg-msgty = 'E'.
x_fimsg-msgno = '215'.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '215'.
MESSAGE e215 INTO errorinfo+18.
* Error in finding the exposure dates
* ---- Note 536242: end ---- *
WHEN '3'.
x_fimsg-msgty = 'E'.
x_fimsg-msgno = '110'.
x_fimsg-msgv1 = sy-msgv1.
x_fimsg-msgv2 = sy-msgv2.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '110'.
MESSAGE e110 WITH sy-msgv1 sy-msgv2 INTO errorinfo+18.
* There is no definition for country & index &
* ---- Note 536242: end ---- *
WHEN '4'.
x_fimsg-msgty = 'E'.
x_fimsg-msgno = '111'.
x_fimsg-msgv1 = sy-msgv1.
x_fimsg-msgv2 = sy-msgv2.
x_fimsg-msgv3 = sy-msgv3.
x_fimsg-msgv4 = sy-msgv4.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '111'.
MESSAGE e111 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO errorinfo+18.
* No index values exist for & & & or for next and previous dates (&)
* ---- Note 536242: end ---- *
WHEN '5'.
x_fimsg-msgty = 'E'.
x_fimsg-msgno = '114'.
x_fimsg-msgv1 = sy-msgv1.
x_fimsg-msgv2 = sy-msgv2.
x_fimsg-msgv3 = sy-msgv3.
x_fimsg-msgv4 = sy-msgv4.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '114'.
MESSAGE e114 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO errorinfo+18.
* No definitive index values for & & & or for next and previous dates
* ---- Note 536242: end ---- *
WHEN OTHERS.
x_fimsg-msgty = 'E'.
x_fimsg-msgno = '140'.
* ---- Note 536242: start ---- *
errorinfo(8) = text-e05.
errorinfo+9(2) = '8Z'.
errorinfo+12(3) = '140'.
MESSAGE e140 INTO errorinfo+18.
* Internal error in inflation calculation routine
* ---- Note 536242: end ---- *
ENDCASE.
x_fimsg-msgid = '8Z'.
CALL FUNCTION 'FI_MESSAGE_COLLECT'
EXPORTING
i_fimsg = x_fimsg.
o_error = 'X'.
ENDIF.
ENDFORM. " CALCULATE_REI
*&---------------------------------------------------------------------*
*& Form SET_FIELDS
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_fields USING fieldname TYPE any
fieldvalue TYPE any.

CHECK fieldvalue NE space.


xftpost-fnam = fieldname.
xftpost-fval = fieldvalue.
APPEND xftpost.

ENDFORM. " SET_FIELDS


*&---------------------------------------------------------------------*
*& Form MODIFY_SCREEN
*&---------------------------------------------------------------------*
FORM modify_screen.
LOOP AT SCREEN.
IF screen-group1 NE space.
IF mode_one = 'X'.
IF screen-group1 = '002'.
screen-input = 0.
ENDIF.
ELSEIF mode_two = 'X'.
IF screen-group1 = '001'.
screen-input = 0.
ENDIF.
ELSE.
IF screen-group1 = '001' OR
screen-group1 = '002'.
screen-input = 0.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

ENDFORM. " MODIFY_SCREEN

*&---------------------------------------------------------------------*
*& Form READ_FILE
*&---------------------------------------------------------------------*
FORM read_file TABLES p_documents STRUCTURE j_1aoifwvl
USING p_valuid TYPE j_1avaluid.

SELECT SINGLE * FROM j_1ainfw_files


WHERE valuid = p_valuid.
x_file = j_1ainfw_files-file.

*boi 1786539
CALL FUNCTION 'FILE_VALIDATE_NAME'
EXPORTING
* CLIENT = SY-MANDT
LOGICAL_FILENAME = 'J_1AINFW'
* OPERATING_SYSTEM = SY-OPSYS
* PARAMETER_1 = ' '
* PARAMETER_2 = ' '
* PARAMETER_3 = ' '
* WITH_FILE_EXTENSION = ' '
* USE_BUFFER = ' '
* ELIMINATE_BLANKS = 'X'
* IMPORTING
* VALIDATION_ACTIVE =
* TS_ALIAS =
CHANGING
PHYSICAL_FILENAME = x_file
EXCEPTIONS
LOGICAL_FILENAME_NOT_FOUND = 1
VALIDATION_FAILED = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
*eoi 1786539

OPEN DATASET x_file FOR INPUT IN BINARY MODE.


IF sy-subrc NE 0.
MESSAGE e276 WITH x_file.
STOP.
ENDIF.
DO.
READ DATASET x_file INTO x_file_data.
IF sy-subrc NE 0.
EXIT.
ELSE.
APPEND x_file_data.
ENDIF.
ENDDO.

CLOSE DATASET x_file.

* In case of a rerun, some entries might have been processes


* successfully before --> deselect them
LOOP AT x_file_data.
SELECT SINGLE * FROM bseg
WHERE bukrs = x_file_data-bukrs
AND belnr = x_file_data-belnr
AND gjahr = x_file_data-gjahr
AND buzei = x_file_data-buzei.

CHECK bseg-linfv NE j_1ainfw_files-f100stag. "entry already proc.?

p_documents-mandt = bseg-mandt.
p_documents-bukrs = bseg-bukrs.
p_documents-waers = x_file_data-waers.
p_documents-koart = bseg-koart.
p_documents-lifnr = bseg-lifnr.
p_documents-kunnr = bseg-kunnr.
p_documents-hkont = bseg-hkont.
p_documents-belnr = bseg-belnr.
p_documents-gjahr = bseg-gjahr.
p_documents-buzei = bseg-buzei.
p_documents-delta1 =
x_file_data-newbdiff - x_file_data-oldbdiff.
IF bseg-shkzg = 'S'.
p_documents-dmshb = bseg-dmbtr.
ELSE. "shkzg = 'H'.
p_documents-dmshb = - bseg-dmbtr.
p_documents-delta1 = - p_documents-delta1.
ENDIF.
* BSEG-LINFV not yet updated by SAPF100
IF bseg-linfv IS INITIAL.
SELECT SINGLE * FROM bkpf
WHERE bukrs = bseg-bukrs
AND belnr = bseg-belnr
AND gjahr = bseg-gjahr.
p_documents-startdate = bkpf-budat.
ELSE.
p_documents-startdate = bseg-linfv.
ENDIF.
p_documents-enddate = j_1ainfw_files-f100stag.
APPEND p_documents.
ENDLOOP.
ENDFORM. " READ_FILE

*&---------------------------------------------------------------------*
*& Form BUILD_FILE_NAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_X_FILENAME text
*----------------------------------------------------------------------*
FORM build_file_name CHANGING p_x_filename TYPE f100xfil.
DATA: file_one(50) TYPE c,
file_two(10) TYPE c.
CALL FUNCTION 'FILE_GET_NAME'
EXPORTING
logical_filename = 'J_1AINFW'
IMPORTING
file_name = file_one
EXCEPTIONS
file_not_found = 1.

IF sy-subrc <> 0.
MESSAGE E276 WITH file_one.
ENDIF.

file_two = x_valuid.
file_two+5(1) = '_'.
file_two+6(3) = 'INF'.

CONCATENATE file_one file_two INTO p_x_filename.


ENDFORM. " BUILD_FILE_NAME

*&---------------------------------------------------------------------*
*& Form OUTPUT_ALV
*&---------------------------------------------------------------------*
FORM output_alv.

LOOP AT i_alvhdr.
IF i_alvhdr-koart = 'K'.
SELECT SINGLE * FROM lfa1
WHERE lifnr = i_alvhdr-hkont.
i_alvhdr-name1 = lfa1-name1.
i_alvhdr-ort01 = lfa1-ort01.
ELSE.
SELECT SINGLE * FROM kna1
WHERE kunnr = i_alvhdr-hkont.
i_alvhdr-name1 = kna1-name1.
i_alvhdr-ort01 = kna1-ort01.
ENDIF.
MODIFY i_alvhdr.
ENDLOOP.

* Build up table of error messages


CALL FUNCTION 'FI_MESSAGE_GET'
TABLES
t_fimsg = x_fimsg_tab
EXCEPTIONS
OTHERS = 1.

IF sy-subrc = 0.
LOOP AT x_fimsg_tab.
MOVE-CORRESPONDING x_fimsg_tab TO i_alvmess.
APPEND i_alvmess.
ENDLOOP.
ENDIF.

* Build ALV layout


gs_layout-colwidth_optimize = 'X'. " optimizes columns width.

g_save = 'A'.

* output list :

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'


EXPORTING
i_callback_program = g_repid
i_callback_user_command = g_formname
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
i_save = g_save
is_variant = g_variant
it_events = gt_events[]
i_tabname_header = g_tabname_header
i_tabname_item = g_tabname_item
is_keyinfo = gs_keyinfo
TABLES
t_outtab_header = i_alvhdr
t_outtab_item = i_alvitm
EXCEPTIONS
program_error = 1.

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. " OUTPUT_ALV

*&---------------------------------------------------------------------*
*& Form INIT_ALV
*&---------------------------------------------------------------------*
FORM init_alv.
* ALV values -----------------------------------------------------------
g_tabname_header = 'I_ALVHDR'.
g_tabname_item = 'I_ALVITM'.
g_repid = sy-repid.
g_formname = 'USER_COMMAND'.
g_pf_formname = 'SET_PF_STATUS'.
gc_formname_top_of_page = 'ALV_TOP_OF_PAGE'.

* ALV keys for internal tables ( header and items ) --------------------


CLEAR gs_keyinfo.
gs_keyinfo-header01 = 'HKONT'. " G//L account nb
gs_keyinfo-item01 = 'HKONT'.
gs_keyinfo-header02 = space.
gs_keyinfo-item02 = 'FWAER'. " Currency of FW item
gs_keyinfo-header02 = space.
gs_keyinfo-item03 = 'BELNR'. " document nb
gs_keyinfo-header03 = space.
gs_keyinfo-item04 = 'GJAHR'. " fiscal year
gs_keyinfo-header04 = space.
gs_keyinfo-item05 = 'BUZEI'. " item nb. in document

* Save variants user-specific or general


g_save = 'A'.
CLEAR g_variant.
g_variant-report = g_repid.
g_variant-username = sy-uname.

* Fields definition :
PERFORM fieldcat_init USING gt_fieldcat[].

* Event tab
PERFORM eventtab_build USING gt_events[].

ENDFORM. " INIT_ALV

*&---------------------------------------------------------------------*
*& Form FIELDCAT_INIT
*&---------------------------------------------------------------------*
FORM fieldcat_init USING i_fieldcat TYPE slis_t_fieldcat_alv.

DATA: wa_fieldcat TYPE slis_fieldcat_alv.

CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'HKONT'.
wa_fieldcat-tabname = g_tabname_header.
wa_fieldcat-reptext_ddic = text-h04.
wa_fieldcat-seltext_m = text-h01.
wa_fieldcat-seltext_s = text-h02.
wa_fieldcat-seltext_l = text-h03. " text = Business partner
APPEND wa_fieldcat TO i_fieldcat.

CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'SAKNR'.
wa_fieldcat-tabname = g_tabname_header.
wa_fieldcat-tech = 'X'. " field not to be displayed
APPEND wa_fieldcat TO i_fieldcat.

CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'TXT20'.
wa_fieldcat-tabname = g_tabname_header.
wa_fieldcat-tech = 'X'. " field not to be displayed
APPEND wa_fieldcat TO i_fieldcat.

CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'GSBER'.
wa_fieldcat-tabname = g_tabname_header.
wa_fieldcat-tech = 'X'. " field not to be displayed
APPEND wa_fieldcat TO i_fieldcat. " for header

CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'HKONT'.
wa_fieldcat-tabname = g_tabname_item.
wa_fieldcat-tech = 'X'. " field not to be displayed
APPEND wa_fieldcat TO i_fieldcat. " for item

CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'GSBER'.
wa_fieldcat-tabname = g_tabname_item.
wa_fieldcat-tech = 'X'. " field not to be displayed
APPEND wa_fieldcat TO i_fieldcat. " for item

CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'DMBTR'.
wa_fieldcat-tabname = g_tabname_item.
wa_fieldcat-tech = 'X'. " field not to be displayed
APPEND wa_fieldcat TO i_fieldcat. " for item

CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'RT_AMOUNT'.
wa_fieldcat-tabname = g_tabname_item.
wa_fieldcat-tech = 'X'. " field not to be displayed
APPEND wa_fieldcat TO i_fieldcat. " for item

CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'REI_RT_AMOUNT'.
wa_fieldcat-tabname = g_tabname_item.
wa_fieldcat-tech = 'X'. " field not to be displayed
APPEND wa_fieldcat TO i_fieldcat. " for item

CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'J_1AINDXSP'.
wa_fieldcat-tabname = g_tabname_item.
wa_fieldcat-tech = 'X'. " field not to be displayed
APPEND wa_fieldcat TO i_fieldcat. " for item

*CLEAR WA_FIELDCAT.
* WA_FIELDCAT-ROW_POS = 2.
* WA_FIELDCAT-FIELDNAME = 'ERRORINFO'.
* WA_FIELDCAT-TABNAME = G_TABNAME_ITEM.
* WA_FIELDCAT-SELTEXT_L = TEXT-H14. " type of error (calc. ...)
* WA_FIELDCAT-REPTEXT_DDIC = TEXT-H14.
* WA_FIELDCAT-SELTEXT_M = TEXT-H14.
* WA_FIELDCAT-SELTEXT_S = TEXT-H14.
* APPEND WA_FIELDCAT TO I_FIELDCAT.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'


EXPORTING
i_internal_tabname = g_tabname_header
i_structure_name = 'J_1AINALVHDR'
CHANGING
ct_fieldcat = i_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'


EXPORTING
i_internal_tabname = g_tabname_item
i_structure_name = 'J_1AINALVITM'
CHANGING
ct_fieldcat = i_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.

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. " FIELDCAT_INIT

*&---------------------------------------------------------------------*
*& Form EVENTTAB_BUILD
*&---------------------------------------------------------------------*
FORM eventtab_build USING i_lt_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = i_lt_events.
READ TABLE i_lt_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
ls_event-form = gc_formname_top_of_page.
APPEND ls_event TO i_lt_events.
ENDIF.

ENDFORM. " EVENTTAB_BUILD

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