Abap 手动设置选择选项?

Abap 手动设置选择选项?,abap,opensql,sap-selection-screens,Abap,Opensql,Sap Selection Screens,我有一个程序,它基于DATS类型的bdter字段从表RESB检索数据。在选择屏幕上,用户指定范围或使用标准范围(月初-今天) 但是,如果我尝试在未填充日期的情况下重新使用为日期创建的选择选项(用户未输入日期范围),则在select语句中使用该选项时,我对此工作区域所做的更改似乎无法识别 随后是相关的代码段。经过一些测试,我得出结论: 如果用户未修改s_bdter,并随后在代码中设置,则不会过滤任何记录 如果用户修改了s_bdter,记录将被正确过滤 SELECT-OPTIONS: s_bd

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

但是,如果我尝试在未填充日期的情况下重新使用为日期创建的选择选项(用户未输入日期范围),则在select语句中使用该选项时,我对此工作区域所做的更改似乎无法识别

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

  • 如果用户未修改
    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.
    
  • 如果用户修改了
    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.
    

这种行为是否已知并记录在案?我通过创建自己的
范围
表解决了这个问题,这是你一直应该做的吗?那么,是否无法重新使用未设置的选择选项来防止代码重复?

您只填写
s\u 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
“设置间隔。
s_bdter-sign='I'。
s_bdter-option='BT'。
s_bdter-low=lc_bdter_启动。
s_bdter-high=sy基准+30。

加上s_bdter,“啊,当然。我没有考虑到选择选项仍然会使用不推荐使用的带有标题行的表对象。一种选择是:您可以在初始化期间填充范围,并强制使用选择选项。初始化期间的填充将使默认值对用户可见,并确保不会删除这些值。但是,如果在批处理中使用,请引起注意-不会执行初始化。这是因为批处理指定了一个变量,该变量在初始化步骤完成后会覆盖选择屏幕参数吗?我记得
初始化
不会在批处理中执行。但也许这是一个错误的观点,也许这些值被变量覆盖了。提交时可能会出现类似问题。