QUERY中特征限制处加入变量(新建),再定义变量,选择用户出口,然后在SAP-CMOD增强RSR00001中加入代码
*&---------------------------------------------------------------------*
*& Include ZXRSRU01
*&---------------------------------------------------------------------*
DATA: L_S_RANGE TYPE RSR_S_RANGESID.
data: l_s_range_v like line of I_T_VAR_RANGE ,
tmp_date type d,
tmp_month(2) type n.
DATA: l_year(4) TYPE C,
l_month(2) TYPE C,
l_zzhgs(4) type n,
l_txtsh type RSTXTSH,
l_nd(4) type c,
l_zqlx(1) type c,
result type i.
CASEI_VNAM. " Variablenname
when 'ZVAR_DQKJND'."当前会计年度
IF i_step = 2.
l_s_range-low = sy-datum+0(4).
l_s_range-high = l_s_range-low.
l_s_range-opt = 'EQ'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZV_KJNDQJTB'. "会计年度期间同比
IF i_step = 2.
READ TABLE i_t_var_range INTO l_s_range_v
WITH KEY vnam = 'ZV_KJNDQJ1'.
clear tmp_date.
l_s_range-low+0(4) = l_s_range_v-low+0(4) - 1.
l_s_range-low+4(3) = l_s_range_v-low+4(3).
l_s_range-opt = 'EQ'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZV_PD_BEG'."期初日期
IF i_step = 2.
READ TABLE i_t_var_range INTO l_s_range_v
* WITH KEY vnam = '0I_CALMO'.
WITH KEY vnam = 'ZVAR_RLNYFW1'.
clear tmp_date.
if not l_s_range_v-LOW is initial.
tmp_date+0(6) = l_s_range_v-LOW.
tmp_date+6(2) = '01'.
tmp_date = tmp_date - 1.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
l_s_range-high = tmp_date.
INSERT l_s_range INTO TABLE e_t_range.
else.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
l_s_range-high = '19000101'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
endif.
when 'ZV_PD_END'."期末日期
IF i_step = 2.
READ TABLE i_t_var_range INTO l_s_range_v
* WITH KEY vnam = '0I_CALMO'.
WITH KEY vnam = 'ZVAR_RLNYFW1'.
clear tmp_date.
clear tmp_month.
if not l_s_range_v-high is initial.
tmp_month = l_s_range_v-high+4(2).
if tmp_month = '12'.
tmp_date+0(4) = l_s_range_v-high+0(4) + 1.
tmp_date+4(2) = '01'.
else.
tmp_date+0(4) = l_s_range_v-high+0(4).
tmp_date+4(2) = l_s_range_v-high+4(2) + 1.
endif.
tmp_date+6(2) = '01'.
tmp_date = tmp_date - 1.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
l_s_range-high = tmp_date.
INSERT l_s_range INTO TABLE e_t_range.
else.
tmp_date+6(2) = '01'.
tmp_date = tmp_date - 1.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
l_s_range-high = '20991231'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
endif.
when 'ZV_ZLFX_QCRQ'."账龄分析-基线日期-期初日期
if i_step = 2.
READ TABLE i_t_var_range INTO l_s_range_v
WITH KEY vnam = '0P_DYOPT'.
clear tmp_date.
tmp_date+0(6) = l_s_range_v-low+0(6).
tmp_date+6(2) = '01'.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
l_s_range-low = '19000101'.
l_s_range-high = tmp_date.
insert l_s_range into table e_t_range.
endif.
when 'ZV_ZLFX_QMRQ'."账龄分析-基线日期-期末日期
if i_step = 2.
READ TABLE i_t_var_range INTO l_s_range_v
WITH KEY vnam = '0P_DYOPT'.
clear tmp_date.
tmp_date+0(4) = l_s_range_v-low+0(4).
tmp_date+4(2) = l_s_range_v-low+4(2).
if tmp_date+4(2) = '12'.
tmp_date+6(2) = '31'.
Else.
tmp_date+4(2) = l_s_range_v-low+4(2) + 1.
tmp_date+6(2) = '01'.
tmp_date = tmp_date - 1.
endif.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
l_s_range-low = '19000101'.
l_s_range-high = tmp_date.
insert l_s_range into table e_t_range.
endif.
when 'ZV_ZLFX_YNYN'."账龄分析-基线日期_一年以内
if i_step = 2.
READ TABLE i_t_var_range INTO l_s_range_v
WITH KEY vnam = '0P_DYOPT'.
clear tmp_date.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
tmp_date+0(4) = l_s_range_v-low+0(4).
tmp_date+4(4) = l_s_range_v-low+4(4).
tmp_date = tmp_date + 1.
tmp_date+0(4) = tmp_date+0(4) - 1.
l_s_range-low = tmp_date.
l_s_range-high = l_s_range_v-low.
insert l_s_range into table e_t_range.
endif.
when 'ZV_ZLFX_2N'."账龄分析-基线日期_1-2年
if i_step = 2.
read table i_t_var_range into l_s_range_v
with key vnam = '0P_DYOPT'.
clear tmp_date.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
tmp_date = l_s_range_v-low.
tmp_date = tmp_date + 1.
tmp_date+0(4) = tmp_date+0(4) - 2.
l_s_range-low = tmp_date.
clear tmp_date.
tmp_date = l_s_range_v-low.
tmp_date = tmp_date + 1. "在闰年的解决情况,
tmp_date+0(4) = tmp_date+0(4) - 1.
tmp_date = tmp_date - 1. "在闰年的解决情况
l_s_range-high = tmp_date.
insert l_s_range into table e_t_range.
endif.
when 'ZV_ZLFX_3N'."账龄分析-基线日期_2-3年
if i_step = 2.
read table i_t_var_range into l_s_range_v
with key vnam = '0P_DYOPT'.
clear tmp_date.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
tmp_date = l_s_range_v-low.
tmp_date = tmp_date + 1.
tmp_date+0(4) = tmp_date+0(4) - 3.
l_s_range-low = tmp_date.
clear tmp_date.
tmp_date = l_s_range_v-low.
tmp_date = tmp_date + 1.
tmp_date+0(4) = tmp_date+0(4) - 2.
tmp_date = tmp_date - 1.
l_s_range-high = tmp_date.
insert l_s_range into table e_t_range.
endif.
when 'ZV_ZLFX_4N'."账龄分析-基线日期_3-4年
if i_step = 2.
read table i_t_var_range into l_s_range_v
with key vnam = '0P_DYOPT'.
clear tmp_date.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
tmp_date = l_s_range_v-low.
tmp_date = tmp_date + 1.
tmp_date+0(4) = tmp_date+0(4) - 4.
l_s_range-low = tmp_date.
clear tmp_date.
tmp_date = l_s_range_v-low.
tmp_date = tmp_date + 1.
tmp_date+0(4) = tmp_date+0(4) - 3.
tmp_date = tmp_date - 1.
l_s_range-high = tmp_date.
insert l_s_range into table e_t_range.
endif.
when 'ZV_ZLFX_5N'."账龄分析-基线日期_4-5年
if i_step = 2.
read table i_t_var_range into l_s_range_v
with key vnam = '0P_DYOPT'.
clear tmp_date.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
tmp_date = l_s_range_v-low.
tmp_date = tmp_date + 1.
tmp_date+0(4) = tmp_date+0(4) - 5.
l_s_range-low = tmp_date.
clear tmp_date.
tmp_date = l_s_range_v-low.
tmp_date = tmp_date + 1.
tmp_date+0(4) = tmp_date+0(4) - 4.
tmp_date = tmp_date - 1.
l_s_range-high = tmp_date.
insert l_s_range into table e_t_range.
endif.
when 'ZV_ZLFX_5NYS'."账龄分析-基线日期_5年以上
if i_step = 2.
read table i_t_var_range into l_s_range_v
with key vnam = '0P_DYOPT'.
clear tmp_date.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
tmp_date = l_s_range_v-low.
tmp_date = tmp_date + 1.
tmp_date+0(4) = tmp_date+0(4) - 5.
tmp_date = tmp_date - 1.
l_s_range-low = '19000101'.
l_s_range-high = tmp_date.
insert l_s_range into table e_t_range.
endif.
WHEN'C4YEAR01'."当前年(进度管理)--wangxq
IF i_step = 1.
IF sy-datum+4(2) = '01'.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-LOW+0(4) =sy-datum+0(4) - 1.
INSERT l_s_range INTO TABLE e_t_range.
ELSEIF sy-datum+4(2) = '02'.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-LOW+0(4) =sy-datum+0(4) - 1.
INSERT l_s_range INTO TABLE e_t_range.
ELSEIF sy-datum+4(2) = '03'.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-LOW+0(4) =sy-datum+0(4) - 1.
INSERT l_s_range INTO TABLE e_t_range.
ELSE.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-LOW+0(4) =sy-datum+0(4).
INSERT l_s_range INTO TABLE e_t_range.
ENDIF.
ENDIF.
WHEN 'C4MONTH01'."当前月(进度管理)--wangxq
IF i_step = 1.
IF sy-datum+4(2) = '01'.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-LOW+0(4) =sy-datum+0(4) - 1.
l_s_range-LOW+4(2) = '11'.
INSERT l_s_range INTO TABLE e_t_range.
ELSEIF sy-datum+4(2) = '02'.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-LOW+0(4) =sy-datum+0(4) - 1.
l_s_range-LOW+4(2) = '11'.
INSERT l_s_range INTO TABLE e_t_range.
ELSEIF sy-datum+4(2) = '03'.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-LOW+0(4) = sy-datum+0(4) - 1.
l_s_range-LOW+4(2) = '11'.
INSERT l_s_range INTO TABLE e_t_range.
ELSE.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-LOW+0(4) = sy-datum+0(4).
l_s_range-LOW+4(2) =sy-datum+4(2) - 1.
IF l_s_range-LOW+4(2) < 10.
CONCATENATE '0' l_s_range-LOW+4(2) INTO l_s_range-LOW+4(2).
endif.
INSERT l_s_range INTO TABLE e_t_range.
ENDIF.
ENDIF.
when 'ZHRRLN02'. "输入的日历年
IF i_step = 2.
READ TABLE i_t_var_range INTO l_s_range_v
WITH KEY vnam = 'ZHRRLN01'.
clear tmp_date.
l_s_range-low+0(4) = l_s_range_v-low+0(4).
l_s_range-low+4(4) = '0101'.
l_s_range-HIGH+0(4) = l_s_range_v-LOW+0(4).
l_s_range-HIGH+4(4) = '1231'.
l_s_range-opt = 'BT'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZHRRLN03'. "输入的日历年的上一年
IF i_step = 2.
READ TABLE i_t_var_range INTO l_s_range_v
WITH KEY vnam = 'ZHRRLN01'.
clear tmp_date.
l_s_range-low+0(4) = l_s_range_v-low+0(4) - 1.
l_s_range-low+4(4) = '0101'.
l_s_range-HIGH+0(4) = l_s_range_v-LOW+0(4) - 1.
l_s_range-HIGH+4(4) = '1231'.
l_s_range-opt = 'BT'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZHR_DATE01'. "将当前系统查询时间设置为当前年的1月1日到系统当前时间.
IF i_step = 1.
l_s_range-low+0(4) = sy-datum+0(4).
l_s_range-low+4(4) = '0101'.
l_s_range-high = sy-datum.
l_s_range-opt = 'BT'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZHR_ENDDATE01'. "将当前系统查询截止日期设置为系统当前时间.
IF i_step = 1.
l_s_range-low = sy-datum.
l_s_range-high = sy-datum.
l_s_range-opt = 'EQ'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZHR_PAYMENT01'. "将当前系统薪酬查询时间设置为当前年的1月到系统当前月.
IF i_step = 1.
l_s_range-low+0(4) = sy-datum+0(4).
l_s_range-low+4(2) = '01'.
l_s_range-high+0(6) = sy-datum.
l_s_range-opt = 'BT'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZVAR_KJND'.
IFi_step = 1.
l_s_range-low = sy-datum(4).
l_s_range-high = l_s_range-low.
l_s_range-opt = 'EQ'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZVAR_KJNDQJ3'. "将当前查询时间设置为当前年月(会计年度/期间).
IF i_step = 1.
l_s_range-low+0(4) = sy-datum+0(4).
concatenate '0' sy-datum+4(2) into l_s_range-low+4(3).
l_s_range-opt = 'EQ'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZVAR_KJND1'. "将当前查询时间设置为当前年(会计年度).
IF i_step = 1.
l_s_range-low = sy-datum+0(4).
l_s_range-opt = 'EQ'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZVAR_JZQJ1'. "将当前查询时间设置为当前月(记账期间).
IF i_step = 1.
data lc_low(3) type c.
l_s_range-low = sy-datum+4(2).
CALL 'CONVERSION_EXIT_ALPHA_INPUT' ID 'INPUT' FIELD l_s_range-low
ID 'OUTPUT' FIELD lc_low.
l_s_range-low = lc_low.
l_s_range-opt = 'EQ'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
endif.
when 'ZVAR_JZQJFW1'. "将记账期间查询范围设置为当前年的1月到系统当前月
IF i_step = 1.
l_s_range-low = '001'.
l_s_range-high = sy-datum+4(2).
CALL 'CONVERSION_EXIT_ALPHA_INPUT' ID 'INPUT' FIELD l_s_range-high
ID'OUTPUT' FIELD lc_low.
l_s_range-high = lc_low.
l_s_range-opt = 'BT'.
l_s_range-sign = 'I'.
INSERT l_s_range INTO TABLE e_t_range.
Endif.
when 'ZVAR_RLNYFW1'."将日历年/月范围设置为当年前的1月到系统当前月
if i_step = 1.
l_s_range-low+0(4) = sy-datum+0(4).
l_s_range-low+4(2) = '01'.
l_s_range-high+0(6) = sy-datum+0(6).
l_s_range-opt = 'BT'.
l_s_range-sign = 'I'.
insert l_s_range into table e_t_range.
endif.
when 'ZVAR_KJNDQJFW1'."将会计年度/记账期间范围设置为当年前的1月到系统当前月
if i_step = 1.
l_s_range-low+0(4) = sy-datum+0(4).
l_s_range-low+4(3) = '001'.
l_s_range-high+0(4) = sy-datum+0(4).
data lc_high(3) type C.
l_s_range-high+4(2) = sy-datum+4(2).
CALL 'CONVERSION_EXIT_ALPHA_INPUT' ID 'INPUT' FIELDl_s_range-high+4(2)
ID'OUTPUT' FIELD lc_high.
l_s_range-high+4(3) = lc_high.
l_s_range-opt = 'BT'.
l_s_range-sign = 'I'.
insert l_s_range into table e_t_range.
endif.
ENDCASE.