您可以反转选择顺序,首先从自定义的“模式表”开始选择,然后使用该表来选取匹配的仓库列表。首先,将所有“仓库模式”按flag
字段分组,然后执行两次选择操作。之后,根据结果表适当设置两个表的flag
标志。
利用+
字符替换自定义表中的*
字符来构建用于选择操作的范围,这遵循了SAP ABAP文档中的说明(参考链接:https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-us/abenwhere_logexp_seltab.htm)。
以下是相关示例代码:
TYPES: BEGIN OF condition,
depot TYPE depot,
flag TYPE abap_bool,
END OF condition.
DATA conditions TYPE STANDARD TABLE OF condition WITH EMPTY KEY.
" 仅作为示例,您将通过查询得到此表的数据
conditions = VALUE #( ( vpsta = 'D***' ) ).
DATA range_flagged TYPE RANGE OF depot.
" 构建范围表,将 '*' 替换为 '+'
range_flagged = VALUE #(
FOR condition IN conditions WHERE ( flag = abap_true )
( sign = 'I' option = 'CP' low = replace( val = condition-vpsta sub = '*' with = '+' ) ) ).
SELECT depot, flag
FROM my_depot_table
INTO TABLE @DATA(depots_flagged)
WHERE depot IN @range_flagged.
depots_flagged = VALUE #( FOR depots IN depots_flagged ( flag = abap_true ) ).
DATA range_unflagged TYPE RANGE OF depot.
range_unflagged = VALUE #(
FOR condition IN conditions WHERE ( flag = abap_false )
( sign = 'I' option = 'CP' low = replace( val = condition-vpsta sub = '*' with = '+' ) ) ).
SELECT depot, flag
FROM my_depot_table
INTO TABLE @DATA(depots_unflagged)
WHERE depot IN @range_unflagged.
在这段操作之后,depots_flagged
和depots_unflagged
两个变量将分别包含那些依据您自定义的“模式表”所标记的仓库列表。如果在您的自定义“模式表”中直接将*
字符替换为+
字符,将会简化构建范围表的操作。