按值检查结构与另一个结构

Check structure against another structure by value

动态编码这块我有。我需要检查键结构是否在另一个结构中。不检查每个字段的值(如果可能)。

逻辑上应该是这样的:

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.

要只比较两个结构的组件值,最简单的解决方案是使用构造函数运算符 CORRESPONDING:

IF ls_keys = CORRESPONDING tys_keys( ls_data_struc ).
  "do something
ENDIF.

如果字段的布局实际上与您问题中的代码段类似,

If ls_keys = ls_data_struc(22). 
  “Do something
Endif.

应该也可以。它也可能比使用相应的运算符更快,但适用性更有限。