标签: sap-selection-screens

如何在SELECT中包含多个条件?

我正在使用 5 个参数从数据库表(mara, makt, marc, mard)中获取详细信息。

 PARAMETERS :number TYPE matnr MATCHCODE OBJECT MAT1 ,
             type TYPE MTART MATCHCODE OBJECT H_T134 ,
             sector TYPE MBRSH MATCHCODE OBJECT H_T137 ,
             group TYPE MATKL MATCHCODE OBJECT H_T023 ,
             unit TYPE MEINS MATCHCODE OBJECT H_T006 .
Run Code Online (Sandbox Code Playgroud)

首先,我尝试使用选择查询从MARA表中获取数据。为了检索特定记录,我必须使用WHERE条件。但我对条件部分感到困惑。我们可以使用INITIAL条件检查哪个参数具有值。

但是 2/3/4/5 参数有可能具有值。对于每种情况,我们都必须编写选择查询(如果是这样会导致性能问题),或者有什么方法可以在选择查询中使用动态条件部分?

abap where-clause opensql sap-selection-screens

3
推荐指数
1
解决办法
2万
查看次数

手动设置SELECT-OPTIONS?

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

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

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

  • 如果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 …
    Run Code Online (Sandbox Code Playgroud)

abap opensql sap-selection-screens

2
推荐指数
1
解决办法
2万
查看次数

在某个字段的值发生更改后,如何将某个字段更改为必填字段?

我正在努力找出如何将选择屏幕上的必填字段更改为必填字段,但我希望它能够根据标记的复选框动态更改。

因此,对于上下文,我有一个程序,在选择屏幕中有两个选项。因此,当我选择第一个复选框时,我希望其中一个字段成为必填字段,当我为程序的其他选项选择另一个复选框时,我不希望该字段过时,因为程序不会使用无论如何,价值所以并不重要。

示例代码:

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. 
PARAMETERS: p_sel AS CHECKBOX,
            p_num TYPE i. 
SELECTION-SCREEN END OF BLOCK b1.    
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME. 
PARAMETERS: p_del AS CHECKBOX,
            p_num2 TYPE i. 
SELECTION-SCREEN END OF BLOCK b2.
"I want to do something like
INITIALIZATION.
LOOP AT SCREEN.
 IF SCREEN-name = p_del AND p_del = abap_true.
  screen-required = 2.
 ENDIF.
MODIFY SCREEN.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用

因此,当我选择时p_del,我想p_num2成为义务。

先谢谢了。

abap sap-selection-screens

1
推荐指数
1
解决办法
4154
查看次数