我正在使用 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 参数有可能具有值。对于每种情况,我们都必须编写选择查询(如果是这样会导致性能问题),或者有什么方法可以在选择查询中使用动态条件部分?
我有一个程序,除其他外,它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)我正在努力找出如何将选择屏幕上的必填字段更改为必填字段,但我希望它能够根据标记的复选框动态更改。
因此,对于上下文,我有一个程序,在选择屏幕中有两个选项。因此,当我选择第一个复选框时,我希望其中一个字段成为必填字段,当我为程序的其他选项选择另一个复选框时,我不希望该字段过时,因为程序不会使用无论如何,价值所以并不重要。
示例代码:
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
成为义务。
先谢谢了。