我有一段动态编码。我需要检查键的结构是否在另一个结构中。无需检查每个字段的值(如果可能)。
逻辑上应该是这样的:
IF ls_keys IN ls_data_struc.
"do stuff
ENDIF.
是的,我知道编码段不起作用,但是我认为这最能说明我的要求。
TYPES: BEGIN OF tys_keys,
matnr TYPE matnr,
vkorg TYPE vkorg,
END OF tys_keys.
TYPES: BEGIN OF tys_data,
matnr TYPE matnr,
vkorg TYPE vkorg,
mtpos TYPE mtpos,
END OF tys_data.
DATA: ls_keys TYPE tys_keys,
ls_data_struc TYPE tys_data.
应该起作用的示例:
ls_keys-matnr = '009988776655443322'.
ls_keys-vkorg = '0001'.
ls_data_struc-matnr = '009988776655443322'.
ls_data_struc-vkorg = '0001'.
ls_data_struc-mtpos = 'ALEN'.
IF ls_keys IN ls_data_struc.
"do something
ENDIF.
不起作用的示例:
ls_keys-matnr = '112233445566778899'.
ls_keys-vkorg = '3145'.
ls_data_struc-matnr = '009988776655443322'.
ls_data_struc-vkorg = '0001'.
ls_data_struc-mtpos = 'ALEN'.
IF ls_keys IN ls_data_struc.
"do something
ENDIF.
答案 0 :(得分:6)
仅比较两个结构的组件值,最简单的解决方案是使用构造函数运算符CORRESPONDING
:
IF ls_keys = CORRESPONDING tys_keys( ls_data_struc ).
"do something
ENDIF.
答案 1 :(得分:0)
如果字段的布局与问题中的代码段相似,则
If ls_keys = ls_data_struc(22).
“Do something
Endif.
也应该起作用。它可能也比使用相应的运算符要快,但适用范围更有限。