Проверить структуру по другой структуре по значению - PullRequest
3 голосов
/ 26 июня 2019

У меня есть этот кусок динамического кодирования. Где мне нужно проверить, находится ли структура ключей в другой структуре. Без проверки значения каждого поля (если возможно).

По логике это должно быть примерно так:

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.

Ответы [ 2 ]

6 голосов
/ 26 июня 2019

Чтобы сравнивать только значения компонентов обеих структур, простейшим решением является использование оператора конструктора CORRESPONDING:

IF ls_keys = CORRESPONDING tys_keys( ls_data_struc ).
  "do something
ENDIF.
0 голосов
/ 26 июня 2019

Если поля фактически выложены аналогично фрагменту в вашем вопросе,

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

Должно также работать. Вероятно, это также будет быстрее, чем использование соответствующего оператора, но будет иметь более ограниченную применимость.

...