IF sy-batch IS INITIAL."判断是否是后台job运行
IF so_dates[] IS INITIAL.
MESSAGE e001(00) WITH '评分日期范围必填'.
ENDIF.
ELSE.
DATA: lv_monat TYPE numc2.
DATA: lv_year TYPE numc04.
* DATA: lv_datum_s TYPE sy-datum.
lv_monat = sy-datum+4(2).
IF lv_monat EQ 1.
lv_monat = 12.
lv_year = sy-datum+0(4) - 1.
ELSE.
lv_monat = lv_monat - 1.
lv_year = sy-datum+0(4).
ENDIF.
CONCATENATE lv_year lv_monat '01' INTO so_dates-low.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = so_dates-low
IMPORTING
last_day_of_month = so_dates-high
EXCEPTIONS
day_in_no_date = 1.
so_dates-sign = 'I'.
so_dates-option = 'BT'.
APPEND so_dates.
ENDIF.
上面一段代码实现的业务逻辑是判断是否是每个月一号运行的后台job,如果是后台运行的job,日期自动生成为上个月的1号和最后一天。