手动设置SELECT-OPTIONS



我有一个程序,它根据bdter字段(一种DATS类型)从表RESB中检索数据。在选择屏幕上,用户指定范围或使用标准范围(月初-今天)。

但是,如果我试图在没有填写日期(用户没有输入日期范围)的情况下重复使用我为日期创建的选择选项,当我在选择语句中使用它时,我对该工作区域的更改似乎不会被识别。

相关代码段如下。经过一些测试,我得出结论:

  • 如果用户未修改s_bdter并随后在代码中设置,则不会过滤记录

  • 如果用户修改了s_bdter,则记录被正确地过滤

  • 如果用户修改了s_bdter并随后在代码中进行了修改,则记录将被正确地过滤

    SELECT-OPTIONS: s_bdter FOR ls_itab-bdter MODIF ID sbd.
    START-OF-SELECTION.
    " Set the interval.
    s_bdter-sign = 'I'.
    s_bdter-option = 'BT'.
    s_bdter-low = lc_bdter_start.
    s_bdter-high = sy-datum + 30.
    " This select doesn't filter on bdter unless the selection parameter was set by the user.
    SELECT r~aufnr p~psphi
    FROM resb AS r
    INNER JOIN afpo AS o ON o~aufnr = r~aufnr
    INNER JOIN prps AS p ON p~pspnr = o~projn
    INTO TABLE lt_resb_ss
    WHERE r~bdter IN s_bdter.
    

这是已知的且有记录的行为吗?我通过创建自己的RANGE表解决了这个问题,这是你一直应该做的吗?那么,是否没有办法重复使用未设置的选择选项来防止代码重复?

您只填充s_bdter的标题行。您还必须附加它:

" Set the interval.
s_bdter-sign = 'I'.
s_bdter-option = 'BT'.
s_bdter-low = lc_bdter_start.
s_bdter-high = sy-datum + 30.
append s_bdter. "<- this was missing

有了这个,如果没有填充,你就不会检查。此检查必须明确进行:

" describe table s_bdter.
if sy-tfill = 0.
" Set the interval.
s_bdter-sign = 'I'.
s_bdter-option = 'BT'.
s_bdter-low = lc_bdter_start.
s_bdter-high = sy-datum + 30.
append s_bdter. "<- this was missing
endif. " sy-tfill = 0.

我希望我的代码有正确的语法,sy-tfill是正确的值。我无法核实它的真实性。但原则应该是明确的。

相关内容

  • 没有找到相关文章

最新更新