*&---------------------------------------------------------------------*
************************************************************************
*&PROGRAM :/TDK/CB00120
*&CREATED BY :Yueming.Li(SAE)
*&DATE :2011/08/03
*&DESCRIPTION :This program is used to update selection valiables
*& which are used in variant for batch job.
*&
************************************************************************
*&CHANGE LOG
*&DATE NO CHANGED BY CONTENTS
*&-------- --------- ------------- ----------------------
*&
*&---------------------------------------------------------------------*
*& Report /TDK/CB00120
*&---------------------------------------------------------------------*
REPORT /TDK/CB00120.
*----------------------------------------------------------------------*
* TABLES
*----------------------------------------------------------------------*
TABLES: TVARVC,
T001,
T100.
*----------------------------------------------------------------------*
* TYPES
*----------------------------------------------------------------------*
TYPES: BEGIN OF TYP_VARIANLIST,
NAME LIKE TVARVC-NAME, " Name of Variant Variable
TYPE LIKE TVARVC-TYPE, " Type of selection
LOW LIKE TVARVC-LOW, " Selection value (LOW or HIGH value, external format)
HIGH LIKE TVARVC-HIGH, " Selection value (LOW or HIGH value, external format)
FLG TYPE CHAR1, " Flg for update. T: sucessfully; F: Failed
END OF TYP_VARIANLIST.
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS: C_PLUS TYPE CHAR1
VALUE '+',
C_X TYPE CHAR1
VALUE 'X',
C_1 TYPE CHAR1
VALUE '1',
C_2 TYPE CHAR1
VALUE '2',
C_PNAME TYPE CHAR8 " Program name for BDC
VALUE 'SAPMS38V',
C_1100 TYPE CHAR4 " Screen number 1100
VALUE '1100',
C_1200 TYPE CHAR4 " Screen number 1200
VALUE '1200',
C_OKCODE TYPE CHAR10 " OKCODE
VALUE 'BDC_OKCODE',
C_STVARV TYPE CHAR6
VALUE 'STVARV',
C_1STDAY TYPE CHAR28 " 1st day of current period
VALUE 'WAVE_F040_CUR_PERIOD_1ST_DAY',
C_LSTDAY TYPE CHAR29 " Last day of current period
VALUE 'WAVE_F040_CUR_PERIOD_LAST_DAY',
C_RDAY TYPE CHAR28 " Range: 1st day - last day of current period
VALUE 'WAVE_F040_CUR_PERIOD_1ST_END',
C_PYEAR TYPE CHAR18 " Fiscal year for previous month
VALUE 'WAVE_F040_PRE_YEAR',
C_PPOPER TYPE CHAR20 " Fiscal period for previous month
VALUE 'WAVE_F040_PRE_PERIOD',
C_CYEAR TYPE CHAR18 " Fiscal year for current month
VALUE 'WAVE_F040_CUR_YEAR',
C_CPOPER TYPE CHAR20 " Fiscal period for current month
VALUE 'WAVE_F040_CUR_PERIOD',
C_NYEAR TYPE CHAR19 " Fiscal year for next month
VALUE 'WAVE_F040_NEXT_YEAR',
C_NPOPER TYPE CHAR21 " Fiscal period for next month
VALUE 'WAVE_F040_NEXT_PERIOD'.
*----------------------------------------------------------------------*
* DATA
*----------------------------------------------------------------------*
DATA: W_STR TYPE STRING, " Message string
W_BUKRS LIKE T001-BUKRS, " Company Code
W_SUBRC LIKE SY-SUBRC, " Return value
W_P1STDAY LIKE SY-DATUM, " 1 month later for 1st day
W_PLSTDAY LIKE SY-DATUM, " 1 month later for Last day
W_PP1STDAY LIKE SY-DATUM, " 2 month later for 1st day
W_PPLSTDAY LIKE SY-DATUM. " 2 month later for Last day
DATA: TD_VARIANLIST TYPE STANDARD TABLE OF TYP_VARIANLIST,
TH_VARIANLIST LIKE LINE OF TD_VARIANLIST,
TD_BDCDATA TYPE STANDARD TABLE OF BDCDATA,
TH_BDCDATA TYPE BDCDATA.
*----------------------------------------------------------------------*
* PARAMETERS/SELECT-OPTION
*----------------------------------------------------------------------*
PARAMETERS: P_BUKRS LIKE T001-BUKRS OBLIGATORY, " Company Code
P_FDATUM LIKE SY-DATUM OBLIGATORY, " First day
P_LDATUM LIKE SY-DATUM OBLIGATORY. " Last day
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME. TITLE TEXT-001. "Selection Variables
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (43) TEXT-002.
PARAMETERS: P_1STDAY LIKE TVARVC-NAME. " 1st day of current period
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (43) TEXT-003.
PARAMETERS: P_LSTDAY LIKE TVARVC-NAME. " Last day of current period
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (43) TEXT-004.
PARAMETERS: P_RDAY LIKE TVARVC-NAME. " Range: 1st day - last day of current period
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (43) TEXT-005.
PARAMETERS: P_PYEAR LIKE TVARVC-NAME. " Fiscal year for previous month
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (43) TEXT-006.
PARAMETERS: P_PPOPER LIKE TVARVC-NAME. " Fiscal period for previous month
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (43) TEXT-007.
PARAMETERS: P_CYEAR LIKE TVARVC-NAME. " Fiscal year for current month
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (43) TEXT-008.
PARAMETERS: P_CPOPER LIKE TVARVC-NAME. " Fiscal period for current month
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (43) TEXT-009.
PARAMETERS: P_NYEAR LIKE TVARVC-NAME. " Fiscal year for next month
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (43) TEXT-010.
PARAMETERS: P_NPOPER LIKE TVARVC-NAME. " Fiscal period for next month
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (43) TEXT-011.
PARAMETERS: P_RCPOPE LIKE TVARVC-NAME. "Range:Current Period
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
CLEAR: W_STR, " Message string
W_BUKRS, " Company Code
W_SUBRC, " Return value
W_P1STDAY, " 1 month later for 1st day
W_PLSTDAY, " 1 month later for Last day
W_PP1STDAY," 2 month later for 1st day
W_PPLSTDAY." 2 month later for Last day
CLEAR: TD_VARIANLIST,
TH_VARIANLIST.
REFRESH: TD_VARIANLIST.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
"Check Input Parameter
"Check the existence of Company code.
SELECT SINGLE BUKRS " Company Code
INTO W_BUKRS
FROM T001
WHERE BUKRS = P_BUKRS.
IF SY-SUBRC <> 0.
CONCATENATE 'Company Code'
P_BUKRS
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
"Check the existence of Selection Variables.
"1st day of current period
PERFORM. FRM_CHECK_VARIAN
USING
P_1STDAY
CHANGING
W_SUBRC.
IF W_SUBRC <> 0.
CONCATENATE 'Selection Variable'
P_1STDAY
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
"Last day of current period
PERFORM. FRM_CHECK_VARIAN
USING
P_LSTDAY
CHANGING
W_SUBRC.
IF W_SUBRC <> 0.
CONCATENATE 'Selection Variable'
P_LSTDAY
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
"Range: 1st day - last day of current period
PERFORM. FRM_CHECK_VARIAN
USING
P_RDAY
CHANGING
W_SUBRC.
IF W_SUBRC <> 0.
CONCATENATE 'Selection Variable'
P_RDAY
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
"Fiscal year for previous month
PERFORM. FRM_CHECK_VARIAN
USING
P_PYEAR
CHANGING
W_SUBRC.
IF W_SUBRC <> 0.
CONCATENATE 'Selection Variable'
P_PYEAR
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
"Fiscal period for previous month
PERFORM. FRM_CHECK_VARIAN
USING
P_PPOPER
CHANGING
W_SUBRC.
IF W_SUBRC <> 0.
CONCATENATE 'Selection Variable'
P_PPOPER
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
"Fiscal year for current month
PERFORM. FRM_CHECK_VARIAN
USING
P_CYEAR
CHANGING
W_SUBRC.
IF W_SUBRC <> 0.
CONCATENATE 'Selection Variable'
P_CYEAR
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
"Fiscal period for current month
PERFORM. FRM_CHECK_VARIAN
USING
P_CPOPER
CHANGING
W_SUBRC.
IF W_SUBRC <> 0.
CONCATENATE 'Selection Variable'
P_CPOPER
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
"Fiscal year for next month
PERFORM. FRM_CHECK_VARIAN
USING
P_NYEAR
CHANGING
W_SUBRC.
IF W_SUBRC <> 0.
CONCATENATE 'Selection Variable'
P_NYEAR
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
"Fiscal period for next month
PERFORM. FRM_CHECK_VARIAN
USING
P_NPOPER
CHANGING
W_SUBRC.
IF W_SUBRC <> 0.
CONCATENATE 'Selection Variable'
P_NPOPER
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
"Range for Current Period
PERFORM. FRM_CHECK_VARIAN
USING
P_RCPOPE
CHANGING
W_SUBRC.
IF W_SUBRC <> 0.
CONCATENATE 'Selection Variable'
P_RCPOPE
'does not exist.'
INTO W_STR
SEPARATED BY SPACE.
MESSAGE W_STR TYPE 'E'.
ENDIF.
IF TD_VARIANLIST IS INITIAL.
MESSAGE 'Please input Selection Variable.' TYPE 'E'.
ENDIF.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
" Calculate the data
PERFORM. FRM_CALCU_DATA.
" Execute batch input to update selection variables.
PERFORM. FRM_UPDATE_DATA.
" Output result
PERFORM. FRM_OUTPUT_RESULT.
*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
*----------------------------------------------------------------------*
* TOP-OF-PAGE
*----------------------------------------------------------------------*
TOP-OF-PAGE.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* *----------------------------------------------------------------------*
FORM. FRM_CHECK_VARIAN
USING
PI_NAME LIKE TVARVC-NAME
CHANGING PO_SUBRC LIKE SY-SUBRC.
DATA: LW_NAME LIKE TVARVC-NAME, " Name of Variant Variable
LW_TYPE LIKE TVARVC-TYPE. " Type of selection
CLEAR: TH_VARIANLIST.
PO_SUBRC = 0.
IF PI_NAME IS INITIAL.
EXIT.
ENDIF.
SELECT SINGLE
NAME " Name of Variant Variable
TYPE " Type of selection
INTO (LW_NAME,
LW_TYPE)
FROM TVARVC
WHERE NAME = PI_NAME.
PO_SUBRC = SY-SUBRC.
IF SY-SUBRC = 0.
TH_VARIANLIST-NAME = LW_NAME.
TH_VARIANLIST-TYPE = LW_TYPE.
APPEND TH_VARIANLIST TO TD_VARIANLIST.
ELSE.
EXIT.
ENDIF.
ENDFORM. " FRM_CHECK_VARIAN
*&---------------------------------------------------------------------*
*& Form FRM_CALCU_DATA
*&---------------------------------------------------------------------*
* text Calculate the data
*----------------------------------------------------------------------*
* --> p1 text
* *----------------------------------------------------------------------*
FORM. FRM_CALCU_DATA.
CLEAR: W_P1STDAY, " 1 month later for 1st day
W_PLSTDAY, " 1 month later for Last day
W_PP1STDAY," 2 month later for 1st day
W_PPLSTDAY." 2 month later for Last day
" Calculate 1 month later for 1st day and last day of current period.
PERFORM. FRM_CALCU_DAY
USING
P_FDATUM " First day
P_LDATUM " Last day
'1' " Range months
CHANGING
W_P1STDAY " 1 month later for 1st day
W_PLSTDAY. " 1 month later for Last day
" Calculate 2 months later for the end date of current period
PERFORM. FRM_CALCU_DAY
USING
P_FDATUM " First day
P_LDATUM " Last day
'2' " Range months
CHANGING
W_PP1STDAY " 2 months later for 1st day
W_PPLSTDAY. " 2 months later for Last day
" Determine fiscal period and fiscal year of above dates.
PERFORM. FRM_CALCU_PERIOD_YEAR
USING
p_BUKRS " Company code
P_FDATUM " First day
W_P1STDAY " 1 month later for 1st day
W_PP1STDAY. " 2 months later for 1st day
" 1st day of current period
CLEAR: TH_VARIANLIST.
READ TABLE TD_VARIANLIST
INTO TH_VARIANLIST
WITH KEY NAME = P_1STDAY.
IF SY-SUBRC = 0.
TH_VARIANLIST-LOW = W_P1STDAY. " P_FDATUM. changed by SAE IT zhang on 2011.08.18,required by Abeam Noguchi-san
MODIFY TD_VARIANLIST INDEX SY-TABIX
FROM TH_VARIANLIST
TRANSPORTING LOW.
ENDIF.
* re-calculate last day of current period.
DATA: LTH_DURATION TYPE PSEN_DURATION.
CLEAR: LTH_DURATION.
LTH_DURATION-DURDD = 1.
CALL FUNCTION 'HR_99S_DATE_ADD_SUB_DURATION'
EXPORTING
IM_DATE = W_PP1STDAY
IM_OPERATOR = '-'
IM_DURATION = LTH_DURATION
IMPORTING
EX_DATE = W_PLSTDAY.
" Last day of current period
CLEAR: TH_VARIANLIST.
READ TABLE TD_VARIANLIST
INTO TH_VARIANLIST
WITH KEY NAME = P_LSTDAY.
IF SY-SUBRC = 0.
TH_VARIANLIST-LOW = W_PLSTDAY. " P_LDATUM. changed by SAE IT zhang on 2011.08.18 .required by Abeam Noguchi-san
MODIFY TD_VARIANLIST INDEX SY-TABIX
FROM TH_VARIANLIST
TRANSPORTING LOW.
ENDIF.
" Last day of current period
CLEAR: TH_VARIANLIST.
READ TABLE TD_VARIANLIST
INTO TH_VARIANLIST
WITH KEY NAME = P_RDAY.
IF SY-SUBRC = 0.
TH_VARIANLIST-LOW = W_P1STDAY."P_FDATUM.changed by SAE IT zhang on 2011.08.18 .required by Abeam Noguchi-san
TH_VARIANLIST-HIGH = W_PLSTDAY."P_LDATUM.changed by SAE IT zhang on 2011.08.18 .required by Abeam Noguchi-san
MODIFY TD_VARIANLIST INDEX SY-TABIX
FROM TH_VARIANLIST
TRANSPORTING LOW HIGH.
ENDIF.
ENDFORM. " FRM_CALCU_DATA
*&---------------------------------------------------------------------*
*& Form FRM_CALCU_DAY
*&---------------------------------------------------------------------*
* text Calculate the data
*----------------------------------------------------------------------*
* --> p1 text
* *----------------------------------------------------------------------*
FORM. FRM_CALCU_DAY
USING
PI_FDATUM LIKE SY-DATUM " First day
PI_LDATUM LIKE SY-DATUM " Last day
PI_MM TYPE I " Range months
CHANGING
PO_1STDAY LIKE SY-DATUM " PI_MM months later for 1st day
PO_LSTDAY LIKE SY-DATUM." PI_MM months later for Last day
DATA: LTH_DURATION TYPE PSEN_DURATION.
CLEAR LTH_DURATION.
LTH_DURATION-DURMM = PI_MM.
" Calculate PI_MM months later for 1st day.
CALL FUNCTION 'HR_99S_DATE_ADD_SUB_DURATION'
EXPORTING
IM_DATE = PI_FDATUM
IM_OPERATOR = C_PLUS
IM_DURATION = LTH_DURATION
IMPORTING
EX_DATE = PO_1STDAY.
" Calculate PI_MM months later for Last day.
CALL FUNCTION 'HR_99S_DATE_ADD_SUB_DURATION'
EXPORTING
IM_DATE = PI_LDATUM
IM_OPERATOR = C_PLUS
IM_DURATION = LTH_DURATION
IMPORTING
EX_DATE = PO_LSTDAY.
ENDFORM. " FRM_CALCU_DAY
*&---------------------------------------------------------------------*
*& Form FRM_CALCU_PERIOD_YEAR
*&---------------------------------------------------------------------*
* text Determine fiscal period and fiscal year of above dates.
*----------------------------------------------------------------------*
* --> p1 text
* *----------------------------------------------------------------------*
FORM. FRM_CALCU_PERIOD_YEAR
USING
PI_BUKRS TYPE BUKRS " Company code
PI_FDATUM LIKE SY-DATUM " First day
PI_P1STDAY LIKE SY-DATUM " 1 month later for 1st day
PI_PP1STDAY LIKE SY-DATUM. " 2 months later for 1st day
DATA: LW_GJAHR TYPE GJAHR, " Fiscal year
LW_MONAT TYPE MONAT. " Fiscal period
CLEAR: LW_GJAHR, " Fiscal year
LW_MONAT. " Fiscal period
" Fiscal year and period of 1st day.
CALL FUNCTION 'FI_PERIOD_DETERMINE'
EXPORTING
I_BUDAT = PI_FDATUM
I_BUKRS = PI_BUKRS
IMPORTING
E_GJAHR = LW_GJAHR
E_MONAT = LW_MONAT
EXCEPTIONS
FISCAL_YEAR = 1
PERIOD = 2
PERIOD_VERSION = 3
POSTING_PERIOD = 4
SPECIAL_PERIOD = 5
VERSION = 6
POSTING_DATE = 7
OTHERS = 8.
IF SY-SUBRC = 0.
" Fiscal year for previous month
CLEAR TH_VARIANLIST.
READ TABLE TD_VARIANLIST
INTO TH_VARIANLIST
WITH KEY NAME = P_PYEAR.
IF SY-SUBRC = 0.
TH_VARIANLIST-LOW = LW_GJAHR.
MODIFY TD_VARIANLIST INDEX SY-TABIX
FROM TH_VARIANLIST
TRANSPORTING LOW.
ENDIF.
" Fiscal period for previous month
CLEAR TH_VARIANLIST.
READ TABLE TD_VARIANLIST
INTO TH_VARIANLIST
WITH KEY NAME = P_PPOPER.
IF SY-SUBRC = 0.
TH_VARIANLIST-LOW = LW_MONAT.
MODIFY TD_VARIANLIST INDEX SY-TABIX
FROM TH_VARIANLIST
TRANSPORTING LOW.
ENDIF.
ELSE.
MESSAGE 'Failed to determine fiscal year and period.' TYPE 'E'.
ENDIF.
CLEAR: LW_GJAHR, " Fiscal year
LW_MONAT. " Fiscal period
" Fiscal year and period of 1 month later for 1st day.
CALL FUNCTION 'FI_PERIOD_DETERMINE'
EXPORTING
I_BUDAT = PI_P1STDAY
I_BUKRS = PI_BUKRS
IMPORTING
E_GJAHR = LW_GJAHR
E_MONAT = LW_MONAT
EXCEPTIONS
FISCAL_YEAR = 1
PERIOD = 2
PERIOD_VERSION = 3
POSTING_PERIOD = 4
SPECIAL_PERIOD = 5
VERSION = 6
POSTING_DATE = 7
OTHERS = 8.
IF SY-SUBRC = 0.
" Fiscal year for current month
CLEAR TH_VARIANLIST.
READ TABLE TD_VARIANLIST
INTO TH_VARIANLIST
WITH KEY NAME = P_CYEAR.
IF SY-SUBRC = 0.
TH_VARIANLIST-LOW = LW_GJAHR.
MODIFY TD_VARIANLIST INDEX SY-TABIX
FROM TH_VARIANLIST
TRANSPORTING LOW.
ENDIF.
" Fiscal period for current month
CLEAR TH_VARIANLIST.
READ TABLE TD_VARIANLIST
INTO TH_VARIANLIST
WITH KEY NAME = P_CPOPER.
IF SY-SUBRC = 0.
TH_VARIANLIST-LOW = LW_MONAT.
MODIFY TD_VARIANLIST INDEX SY-TABIX
FROM TH_VARIANLIST
TRANSPORTING LOW.
ENDIF.
" Range for current period
CLEAR TH_VARIANLIST.
READ TABLE TD_VARIANLIST
INTO TH_VARIANLIST
WITH KEY NAME = P_RCPOPE.
IF SY-SUBRC = 0.
TH_VARIANLIST-LOW = LW_MONAT.
TH_VARIANLIST-HIGH = LW_MONAT.
MODIFY TD_VARIANLIST INDEX SY-TABIX
FROM TH_VARIANLIST
TRANSPORTING LOW HIGH.
ENDIF.
ELSE.
MESSAGE 'Failed to determine fiscal year and period.' TYPE 'E'.
ENDIF.
CLEAR: LW_GJAHR, " Fiscal year
LW_MONAT. " Fiscal period
" Fiscal year and period of 2 months later for 1st day.
CALL FUNCTION 'FI_PERIOD_DETERMINE'
EXPORTING
I_BUDAT = PI_PP1STDAY
I_BUKRS = PI_BUKRS
IMPORTING
E_GJAHR = LW_GJAHR
E_MONAT = LW_MONAT
EXCEPTIONS
FISCAL_YEAR = 1
PERIOD = 2
PERIOD_VERSION = 3
POSTING_PERIOD = 4
SPECIAL_PERIOD = 5
VERSION = 6
POSTING_DATE = 7
OTHERS = 8.
IF SY-SUBRC = 0.
" Fiscal year for previous month
CLEAR TH_VARIANLIST.
READ TABLE TD_VARIANLIST
INTO TH_VARIANLIST
WITH KEY NAME = P_NYEAR.
IF SY-SUBRC = 0.
TH_VARIANLIST-LOW = LW_GJAHR.
MODIFY TD_VARIANLIST INDEX SY-TABIX
FROM TH_VARIANLIST
TRANSPORTING LOW.
ENDIF.
" Fiscal period for previous month
CLEAR TH_VARIANLIST.
READ TABLE TD_VARIANLIST
INTO TH_VARIANLIST
WITH KEY NAME = P_NPOPER.
IF SY-SUBRC = 0.
TH_VARIANLIST-LOW = LW_MONAT.
MODIFY TD_VARIANLIST INDEX SY-TABIX
FROM TH_VARIANLIST
TRANSPORTING LOW.
ENDIF.
ELSE.
MESSAGE 'Failed to determine fiscal year and period.' TYPE 'E'.
ENDIF.
ENDFORM. " FRM_CALCU_PERIOD_YEAR
*&---------------------------------------------------------------------*
*& Form FRM_UPDATE_DATA
*&---------------------------------------------------------------------*
* text Execute batch input to update selection variables.
*----------------------------------------------------------------------*
* --> p1 text
* *----------------------------------------------------------------------*
FORM. FRM_UPDATE_DATA.
DATA: LW_INDEX LIKE SY-TABIX.
IF NOT TD_VARIANLIST IS INITIAL.
CLEAR LW_INDEX.
LOOP AT TD_VARIANLIST INTO TH_VARIANLIST.
LW_INDEX = SY-TABIX.
PERFORM. FRM_CALL_TCODE
USING
TH_VARIANLIST-NAME
TH_VARIANLIST-TYPE
TH_VARIANLIST-LOW
TH_VARIANLIST-HIGH
CHANGING
TH_VARIANLIST-FLG.
MODIFY TD_VARIANLIST
INDEX LW_INDEX
FROM TH_VARIANLIST
TRANSPORTING FLG.
ENDLOOP.
ELSE.
ENDIF.
ENDFORM. " FRM_UPDATE_DATA
*&---------------------------------------------------------------------*
*& Form FRM_CALL_TCODE
*&---------------------------------------------------------------------*
* text Call t-code STVARV to update.
*----------------------------------------------------------------------*
* --> p1 text
* *----------------------------------------------------------------------*
FORM. FRM_CALL_TCODE
USING
PI_NAME LIKE TVARVC-NAME " Name of Variant Variable
PI_TYPE LIKE TVARVC-TYPE " Type of selection
PI_LOW LIKE TVARVC-LOW " Selection value (LOW or HIGH value, external format)
PI_HIGH LIKE TVARVC-HIGH " Selection value (LOW or HIGH value, external format).
CHANGING
PO_FLG TYPE CHAR1.
DATA: LTD_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE,
LW_LINES TYPE I.
REFRESH TD_BDCDATA.
CLEAR TD_BDCDATA.
PO_FLG = 'T'.
" selection variable is parameter
IF PI_TYPE = 'P'.
" Screen 1
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1100.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=TOGGLE'.
" Screen 2
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1100.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=SEARCH'.
" Screen 3
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1200.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=ENTER'.
PERFORM. FRM_CREATE_BDC
USING
C_2
'SEARCH_NAME'
PI_NAME.
" Screen 4
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1100.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=CHNG'.
PERFORM. FRM_CREATE_BDC
USING
C_2
'I_TVARVC_PARAMS-MARK(01)'
C_X.
" Screen 5
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1100.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=SAVE'.
PERFORM. FRM_CREATE_BDC
USING
C_2
'I_TVARVC_PARAMS-LOW(01)'
PI_LOW.
ENDIF.
" selection variable is parameter
IF PI_TYPE = 'S'.
" Screen 1
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1100.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=TOGGLE'.
" Screen 2
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1100.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=SELOP'.
" Screen 3
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1100.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=SEARCH'.
" Screen 4
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1200.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=ENTER'.
PERFORM. FRM_CREATE_BDC
USING
C_2
'SEARCH_NAME'
PI_NAME.
" Screen 5
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1100.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=CHNG'.
PERFORM. FRM_CREATE_BDC
USING
C_2
'I_TVARVC_SELOPS-MARK(01)'
C_X.
" Screen 6
PERFORM. FRM_CREATE_BDC
USING
C_1
C_PNAME
C_1100.
PERFORM. FRM_CREATE_BDC
USING
C_2
C_OKCODE
'=SAVE'.
PERFORM. FRM_CREATE_BDC
USING
C_2
'I_TVARVC_SELOPS-LOW(01)'
PI_LOW.
PERFORM. FRM_CREATE_BDC
USING
C_2
'I_TVARVC_SELOPS-HIGH(01)'
PI_HIGH.
ENDIF.
IF NOT TD_BDCDATA IS INITIAL.
CALL TRANSACTION C_STVARV " STVARV
USING TD_BDCDATA
MODE 'N'
UPDATE 'S'
MESSAGES INTO LTD_MESSTAB.
LW_LINES = 0.
DESCRIBE TABLE LTD_MESSTAB LINES LW_LINES.
IF LW_LINES > 0.
PO_FLG = 'F'.
EXIT.
ENDIF.
ENDIF.
ENDFORM. " FRM_CALL_TCODE
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_BDC
*&---------------------------------------------------------------------*
* text Create BDC
*----------------------------------------------------------------------*
* --> p1 text
* *----------------------------------------------------------------------*
FORM. FRM_CREATE_BDC
USING
PI_FLG TYPE CHAR1
PI_VAR1 TYPE ANY
PI_VAR2 TYPE ANY.
CLEAR: TH_BDCDATA.
" Program information
IF PI_FLG = '1'.
TH_BDCDATA-PROGRAM = PI_VAR1.
TH_BDCDATA-DYNPRO = PI_VAR2.
TH_BDCDATA-DYNBEGIN = C_X.
ENDIF.
" Field information
IF PI_FLG = '2'.
TH_BDCDATA-FNAM = PI_VAR1.
TH_BDCDATA-FVAL = PI_VAR2.
ENDIF.
APPEND TH_BDCDATA TO TD_BDCDATA.
ENDFORM. " FRM_CREATE_BDC
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_RESULT
*&---------------------------------------------------------------------*
* text Output result
*----------------------------------------------------------------------*
* --> p1 text
* *----------------------------------------------------------------------*
FORM. FRM_OUTPUT_RESULT.
DATA: LW_TCOUNT TYPE I,
LW_FCOUNT TYPE I.
WRITE:/ 'Result:'.
SKIP 1.
IF TD_VARIANLIST IS INITIAL.
WRITE:/ '0 Selection valiables are updated.'.
EXIT.
ENDIF.
LW_TCOUNT = 0.
LW_FCOUNT = 0.
LOOP AT TD_VARIANLIST INTO TH_VARIANLIST.
CLEAR W_STR.
" Selection variable sucessfully updated.
IF TH_VARIANLIST-FLG = 'T'.
CONCATENATE 'Selection Variable'
TH_VARIANLIST-NAME
'sucessfully updated.'
INTO W_STR
SEPARATED BY SPACE.
WRITE:/ W_STR.
LW_TCOUNT = LW_TCOUNT + 1.
ENDIF.
" Failed to update selection variable
IF TH_VARIANLIST-FLG = 'F'.
CONCATENATE 'Failed to update selection variable'
TH_VARIANLIST-NAME
'.'
INTO W_STR
SEPARATED BY SPACE.
WRITE:/ W_STR.
LW_FCOUNT = LW_FCOUNT + 1.
ENDIF.
ENDLOOP.
SKIP 2.
W_STR = LW_TCOUNT.
CONCATENATE W_STR
'Selection valiables are updated.'
INTO W_STR
SEPARATED BY SPACE.
WRITE:/ W_STR.
ENDFORM. " FRM_OUTPUT_RESULT
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13973563/viewspace-752285/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13973563/viewspace-752285/