关闭

如何取某日的周几,月周,年周(转换例程)

标签: BWabap
379人阅读 评论(0) 收藏 举报
分类:

周几

 DATAdiw_first TYPE VALUE '19790101'.
  RESULT SOURCE_FIELDS-/BIC/ZBUSDE diw_first MOD 1.


月周

=====

FM 

ZGET_WEEK_INFO_BASED_ON_DATE

参考 ECC中的

GET_WEEK_INFO_BASED_ON_DATE

因为BW中没有这个FM

=====

FM:

import: date

export: ZWEEK_MON  type /BIC/OIZWEEK_MON( numc 2)

ZWEEK_YEAR type  /BIC/OIZWEEK_YER   (numc 2)





FUNCTION ZGET_MONTH_WEEK.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(DATE) TYPE  SY-DATUM DEFAULT SY-DATUM
*"  EXPORTING
*"     REFERENCE(ZWEEK_MON) TYPE  /BIC/OIZWEEK_MON
*"     REFERENCE(ZWEEK_YEAR) TYPE  /BIC/OIZWEEK_YER
*"----------------------------------------------------------------------
DATA:
  ZFLAG TYPE /BIC/OIZFLAG,
  p_date1 type sy-datum,
  p_date2 type sy-datum,
  p_date3 type sy-datum,
  P_DATE5 TYPE SY-DATUM,
  P_DATE6 TYPE SY-DATUM,
  P_DATE7 TYPE SY-DATUM,
  P_DATE8 TYPE SY-DATUM,
  L_DATE TYPE SY-DATUM,
  L_DATE1 TYPE SY-DATUM,
  current_week type scal-week,
  current_week1 type scal-week,
  previous_week type scal-week.

  p_date3 DATE.
  CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date =  p_date3
  IMPORTING
  week current_week
  monday p_date1
  sunday p_date2.
ZWEEK_YEAR current_week+4(2).
* 输入日期的年周,周一与周日。

"判断1日是否跨月
* CONCATENATE p_date3+0(6) '01' INTO L_DATE1.
*  CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
*  EXPORTING
*  date = L_DATE1
*  IMPORTING
*  week = CURRENT_WEEK1
*  monday = p_date7
*  sunday = p_date8.
*  IF P_DATE7+4(2) <> P_DATE3+4(2). "1日跨月
*    ZFLAG = 'X'.
*  ELSE.
*    ZFLAG = 'Y'.
*  ENDIF.

  If p_date1+4(2<> p_date2+4(2)."如果跨月
    IF DATE+4(2P_DATE2+4(2)"如果输入日期与星期日同月(某月最前几天)
  ZWEEK_MON 1.
     ELSEIF P_DATE3+4(2P_DATE1+4(2)."如果输入日期与星期一同月(某月最后几天)
       p_date3 p_date3 7.
       CALL FUNCTION 'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date =  p_date3
  IMPORTING
  week current_week1
  monday p_date5
  sunday p_date6."取出上周的周一和周日
 L_date p_date3.
       WHILE p_date6+4(2L_DATE+4(2).

       CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date p_date3
  IMPORTING
  week previous_week
  monday p_date5
  sunday p_date6.
  P_DATE3 P_DATE3 7.
  ENDWHILE.
IF CURRENT_WEEK+0(4> PREVIOUS_WEEK+0(4)"如果跨年
    CONCATENATE CURRENT_WEEK+0(4'01' INTO PREVIOUS_WEEK.
    ZWEEK_MON CURRENT_WEEK PREVIOUS_WEEK + 1.
  ELSE.
  ZWEEK_MON current_week previous_week.
  ENDIF.
 ENDIF.


  ELSE."如果不跨月
    L_DATE P_DATE3.
  WHILE p_date2+4(2L_DATE+4(2)"只要周日月份等于输入日月份
  p_date3 p_date3 7.
  CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date p_date3
  IMPORTING
  week previous_week
  monday p_date1
  sunday p_date2.
  ENDWHILE.
  IF CURRENT_WEEK+0(4> PREVIOUS_WEEK+0(4)"如果跨年
    CONCATENATE CURRENT_WEEK+0(4'01' INTO PREVIOUS_WEEK.
    ZWEEK_MON CURRENT_WEEK PREVIOUS_WEEK + 2.
  ELSE.
  ZWEEK_MON current_week previous_week."不跨年,不跨月
  ENDIF.
  ENDIF.







ENDFUNCTION.

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:47154次
    • 积分:1917
    • 等级:
    • 排名:千里之外
    • 原创:143篇
    • 转载:58篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论