gpt4 book ai didi

abap - 手动设置 SELECT-OPTIONS?

转载 作者:行者123 更新时间:2023-12-02 04:41:14 26 4
gpt4 key购买 nike

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

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

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

  • 如果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 是正确的值。我无法检查它的实际情况。但是原理应该很清楚。

关于abap - 手动设置 SELECT-OPTIONS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20802195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com