Bruce_yin的专栏

bw 之路

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

周几

 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.

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bruce_yin/article/details/49892087
文章标签: BW abap
个人分类: ABAP
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭