*&---------------------------------------------------------------------*
*& Form CLAC_WORKDAY
*&---------------------------------------------------------------------*
* 日付算出
*----------------------------------------------------------------------*
* U_DATE : 処理日付
* U_YMDKEY : 処理対象指定キー
* U_YMDSU : 処理日数
* U_OPERATOR : 算出方法
* C_DATE : 算出日
* C_MLAST : 算出月末日
*----------------------------------------------------------------------*
FORM CLAC_WORKDAY USING U_DATE LIKE SY-DATUM
U_YMDKEY TYPE C
U_YMDSU TYPE N
U_OPERATOR TYPE C
CHANGING C_DATE LIKE SY-DATUM
C_MLAST LIKE SY-DATUM.
DATA: BEGIN OF LW_DATE1,
YYYY(4) TYPE N,
MM(2) TYPE N,
DD(2) TYPE N,
END OF LW_DATE1.
DATA: LW_DATE2 LIKE SY-DATUM,
LW_MM TYPE P DECIMALS 0,
LW_DIV TYPE P DECIMALS 0,
LW_MOD TYPE P DECIMALS 0.
IF U_YMDKEY <> 'Y' AND
U_YMDKEY <> 'M' AND
U_YMDKEY <> 'D'.
WRITE '「処理対象指定キー」エラー'.
EXIT.
ENDIF.
IF U_OPERATOR <> '+' AND
U_OPERATOR <> '-'.
WRITE '「算出方法」エラー'.
EXIT.
ENDIF.
* 計算処理
CASE U_YMDKEY.
* 年計算時
WHEN 'Y'.
LW_DATE1 = U_DATE.
IF U_OPERATOR = '+'.
LW_DATE1-YYYY = LW_DATE1-YYYY + U_YMDSU.
ELSE.
LW_DATE1-YYYY = LW_DATE1-YYYY - U_YMDSU.
ENDIF.
LW_DATE2 = LW_DATE1.
* 月計算時
WHEN 'M'.
LW_DATE1 = U_DATE.
IF U_OPERATOR = '+'.
LW_MM = LW_DATE1-MM + U_YMDSU.
ELSE.
LW_MM = LW_DATE1-MM - U_YMDSU.
ENDIF.
LW_DIV = LW_MM DIV 12. "商
LW_MOD = LW_MM MOD 12. "余
IF LW_MOD = 0.
LW_DATE1-YYYY = LW_DATE1-YYYY + ( LW_DIV - 1 ).
LW_DATE1-MM = 12.
ELSE.
LW_DATE1-YYYY = LW_DATE1-YYYY + LW_DIV.
LW_DATE1-MM = LW_MOD.
ENDIF.
LW_DATE2 = LW_DATE1.
* 日計算時
WHEN 'D'.
IF U_OPERATOR = '+'.
LW_DATE2 = U_DATE + U_YMDSU.
ELSE.
LW_DATE2 = U_DATE - U_YMDSU.
ENDIF.
ENDCASE.
* 日付妥当性チェック
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
DATE = LW_DATE2
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
OTHERS = 2.
IF SY-SUBRC = 0.
C_DATE = LW_DATE2. "算出日付
* 算出月末日取得
IF LW_DATE2+4(2) <> 12.
LW_DATE2+4(2) = LW_DATE2+4(2) + 1.
ELSE.
LW_DATE2+0(4) = LW_DATE2+0(4) + 1.
LW_DATE2+4(2) = '01'.
ENDIF.
LW_DATE2+6(2) = '01'.
LW_DATE2 = LW_DATE2 - 1.
C_MLAST = LW_DATE2. "算出月末日
ENDIF.
ENDFORM. "CLAC_WORKDAY
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8214011/viewspace-921904/ ,如需转载,请注明出处,否则将追究法律责任。