ITPub博客

首页 > IT职业 > IT生活 > 日付算出用FORM

日付算出用FORM

原创 IT生活 作者:sapkitty 时间:2007-06-28 17:55:02 0 删除 编辑
对一个指定的日期可以进行日数的加减。[@more@]

*&---------------------------------------------------------------------*

*& 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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: subscreen的使用
下一篇: ALV LAYOUT的设置
请登录后发表评论 登录
全部评论

注册时间:2008-08-04

  • 博文量
    62
  • 访问量
    213957