SCAL函数组日历功能有以下8个函数:
1)DATE_COMPUTE_DAY 根据日期返回的星期值:根据输入一个日期,返回该日期是每周中第几个,注意周日是每周的第7天,周一是每周的第1天.其实这个函数很简单,就是利用每周7天的原理,进行除得到余数,标准的函数是以周日为第一天,所以增加了判断
IF DAY_P > 1.
DAY_P = DAY_P - 1.
ELSE.
DAY_P = DAY_P + 6.
ENDIF.
如果按我国习惯,周日为第1天时,则判断可以变成:
IF DAY_P < 1.
DAY_P = DAY_P + 7.
ENDIF.
2)DATE_CONVERT_TO_FACTORYDATE 根据日期返回工厂日历日期:有些国家有自己的传统节日,或者有些企业工作日有些不同,比如六天制,七天制,所以可以设置不同的工厂日历,该函数则是输入一个日期、工厂日历标识、工作日计算方法的标识(+与-两种情况,+表示如果输入的日期在工厂日历中并非工作日,则返回的日期为输入日期的后一个工作日,-表示如果输入的日期在工厂日历中并非工作日,则返回的日期为输入日期的前一个工作日),输出转化为工厂日历日期的日期(如果输入日期为工厂日历中的工作日,则返回输入日期,如果不是,则是前/后一个工作日)、指定日历中的工作日数(输入日期在工厂日历中的工作日的顺序,这跟工厂日期的“工厂日期开始”有关,空时默认为0,第1个工作日="工厂日期开始"+1)、表示某日期是否为工作日的标志(如果为工作日则为空,否则将是输入工作日计算方法的标识)
3)DATE_GET_WEEK 返回某日期所在的礼拜:根据输入日期,返回该日期所在年份中的周数,注意周日是第7天,如果该周日在哪一年,则相应周的其他日期也在哪一年。比如2008-12-31是周三,该周的周日是2009-01-04是2009年的第一周,所以输入2008-12-31时,返回是200901。
4)EASTER_GET_DATE 返回一个年度的复活节日期(复活节,复活节星期日):输入年份,返回当年复活节的日期。耶稣被钉死在十字架上,第三天身体复活,复活节因此得名。复活节是基督宗教最重大的节日,重要性超过圣诞节,宗教起源与节期在欧美各国。节期大致在3月22日至4月25日之间。
5)FACTORYDATE_CONVERT_TO_DATE 根据一个工厂日历日期返回的日期:输入工厂日历ID与工作日的序列号,返回工作日的日期,工作日的序列号与“工厂日期开始”相关,即输入的工作日序列号必须大于等于“工厂日期开始”,否则返回空值。
6)HOLIDAY_CHECK_AND_GET_INFO 检查日期是否是公共假日并在需要时提供信息:输入一个日期、假日日历 ID、属性标识,输出是否为假日的标记以及该假日的属性。
7)LAST_FACTORYDATE_GET Calendar function: Return last factory date for a factory calendar:输入工厂日期ID,返回最后一个工作日以及工作日数。
8)WEEK_GET_FIRST_DAY 返回一周的第一天:输入年份与周数,返回该周的第1天,注意是从周一开始算。
* 根据工厂日历添加正负N天获得新日期
DATA: return LIKE sy-subrc .
CALL FUNCTION 'BKK_ADD_WORKINGDAY'
EXPORTING
i_date = p_date1
i_days = p_days
i_calendar1 = p_cal
IMPORTING
e_date = p_date2
e_return = return.
* 根据工厂日历计算两个日期间的工作日(包含结束日期)
FORM get_work_days USING value(p_date1) value(p_date2) p_days p_cal.
DATA: no_workingday,holiday.
WHILE p_date1 < p_date2.
p_date1 = p_date1 + 1.
CALL FUNCTION 'BKK_CHECK_HOLIDAY'
EXPORTING
i_date = p_date1
i_calendar1 = p_cal
IMPORTING
e_x_no_workingday = no_workingday
e_x_is_holiday = holiday
EXCEPTIONS
not_found = 1
calendar_error = 2
OTHERS = 3.
IF no_workingday <> 'X'.
p_days = p_days + 1.
ENDIF.
ENDWHILE.
ENDFORM. "get_work_days
CALL FUNCTION ’DATE_COMPUTE_DAY‘ 返回星期几
CALL FUNCTION ’DATE_CHECK_WORKINGDAY‘ 返回是否为工作日
CALL FUNCTION 'MONTH_PLUS_DETERMINE'
EXPORTING
months = '1'
olddate = sy-datum
IMPORTING
newdate = lv_p_date.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = lt_date-first_date
IMPORTING
last_day_of_month = lt_date-last_date
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
SEPA_MANDATE_ADD_MONTH_TO_DATE
计算 日期加减几个月的函数
阅读(5123) | 评论(0) | 转发(0) |