在 CODE 区域中,我可以使用哪些变量?
据我所知,只有您在连接条件中定义的选择表的标题行在编码块中可用。IE 如果您从 ITOB 中选择加入 ANLA,则标题行ITOB 和 ANLA 都可用。(这仅在记录处理块中相关)。但是,您可以在 DATA 块中定义自己的变量。
选择后如何访问数据集和限制记录:
免责声明:这感觉非常像 hack,它不适用于所有输出类型,但它确实显示了您如何访问数据集。
在代码块 INITIALIZATION 中添加以下语句:
* Dummy comment to force generation
* of END-OF-SELECTION Block
任何注释都可以——所有这些都是强制程序生成器生成我们需要访问数据集的 END-OF-SELECTION 块。
在代码块 END-OF-SELECTION 中添加以下内容:
data: lv_table type char100 value '%G00[]'.
field-symbols: <table> type any table.
assign (lv_table) to <table>.
if <table> is assigned.
sort <table>.
delete adjacent duplicates from <table>.
endif.
%G00 是生成程序中结果集的变量名(使用 [] 访问表格,而不仅仅是标题行)。由于生成的程序变量在 Infoset 中不可用,因此您必须使用字段符号来访问任何变量。如果变量不存在,分配检查将避免任何运行时错误。
限制: 在“ABAP 列表模式”下执行查询时,此代码不起作用,这是因为在这种情况下,列表是在选择数据时写入的,因此任何事后的操作都为时已晚。
我最终做了什么:
我在 ITOB (EQUI->EQUZ->ILOA) 中手动连接了相关的单个表,并将 IFLOT 和 IFLOTX 排除在外,这只需要我对结束日期施加额外的限制。我想在大多数情况下,可以通过使用正确的 WHERE 子句将数据解构到可以避免重复的水平。当您真正需要保持开放状态时如何执行 SELECT DISTINCT 的问题......