周几
DATA: diw_first TYPE d VALUE '19790101'.
RESULT = ( ( SOURCE_FIELDS-/BIC/ZBUSDE - diw_first ) MOD 7 ) + 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(2) = P_DATE2+4(2). "如果输入日期与星期日同月(某月最前几天)
ZWEEK_MON = 1.
ELSEIF P_DATE3+4(2) = P_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(2) = L_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(2) = L_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.