首先,您需要定义一个包含您的选择数据的结构。您的要求的示例结构可能如下所示:
不要忘记激活结构并确保它不包含错误。
现在创建选择报告。要将报表用作数据选择方法,您需要添加两个注释,*<QUERY_HEAD>
并且*<QUERY_BODY>
。*<QUERY_HEAD>
必须放置在您的选择开始通常会去的地方,*<QUERY_BODY>
在一个循环内,该循环将选定的行放入一个与您在 SE11 中定义的结构同名的内部表中。
我做了一个示例报告来展示它是如何工作的:
REPORT ZSTACK_RBKP_INFOSET_QUERY.
tables:
rbkp,
ZSTACK_RBKP_INFOSET_STR.
select-OPTIONS:
so_belnr for rbkp-belnr,
so_gjahr for rbkp-gjahr.
data:
itab type standard table of ZSTACK_RBKP_INFOSET_STR,
wa_itab type ZSTACK_RBKP_INFOSET_STR.
data:
lv_diff type dmbtr.
*here your selection starts.
*<QUERY_HEAD>
select rbkp~belnr
rbkp~gjahr
rbkp~rmwwr
rbkp~waers
sum( RBDRSEG~DMBTR ) as DMBTR
from RBKP left outer join RBDRSEG
on RBDRSEG~RBLNR eq RBKP~BELNR and
RBDRSEG~RJAHR eq RBKP~GJAHR
into corresponding fields of table itab
where rbkp~belnr in so_belnr and
rbkp~gjahr in so_gjahr
group by rbkp~belnr rbkp~gjahr rbkp~rmwwr rbkp~waers.
loop at itab into wa_itab.
lv_diff = wa_itab-dmbtr - wa_itab-rmwwr.
move lv_diff to wa_itab-diff.
modify itab from wa_itab.
endloop.
* this is the part that forwards your result set to the infoset
LOOP AT itab INTO ZSTACK_RBKP_INFOSET_STR.
*<QUERY_BODY>
ENDLOOP.
示例报告首先选择RBKP
行以及 中RBDRSEG-DMBTR
每个文档的总和RBKP
。之后, a使用所选列和之间的差异loop
更新列。DIFF
RMWWR
DMBTR
不幸的是,在我们的 SAP 系统中,该表RBDRSEG
是空的,所以我无法测试报告的那一部分。但是您可以通过在第一个断点之前添加一个断点loop
然后启动报表来测试系统中的报表。然后,您应该能够查看内部表中的选定行,ITAB
并查看选择是否按预期工作。
示例报告中的注意事项:两者都RBKP
引用RBDRSEG
不同的货币字段。RMWWR
因此,您的值可能使用DMBTR
不同的货币(RMWWR
使用文档货币,DMBTR
似乎使用默认的公司货币)。如果是这种情况,您必须在计算差额之前将它们转换为适当的货币。请确保在 / 中加入并RBKP
使用RBDRSEG
文档编号和BELNR
/RBLNR
中的年份(中的字段是,不是,尽管也存在于)。GJAHR
RJAHR
RBDRSEG
RJAHR
GJAHR
GJAHR
RBDRSEG
当您的报告按预期工作时,根据您的报告创建信息集。然后,您可以像使用任何其他信息集一样使用该信息集。
更新:我刚刚意识到,因为您写了关于 ABAP 的新手,我立即假设您需要为您的信息集创建一个报告。根据您的实际要求,情况可能并非如此。您可以在表 RBKP 上创建一个简单的信息集查询,然后使用信息集编辑器为总行和差异添加两个字段,然后添加一些 abap 代码,选择 RBDRSEG 中所有相应行的总和并计算 RMWWR 之间的差异和那个总和。这可能比自定义的abap 报告要慢,因为必须为RBKP 中的每一行重复选择,所以这实际上取决于您的用户要查询的数据量。定制的 ABAP 报告很好,
使用信息集设计器的变体的附加信息
首先创建一个简单的信息集只读表 RBKP(因此在信息集定义中没有表连接)。现在转到特定于应用程序的增强功能:
在我的示例中,我已经添加了 2 个字段,LINETOTAL
并且DIFFERENCE
. 两者具有相同的性质RBDRSEG-DMBTR
。确保包含总和的字段的RBDRSEG-DMBTR
序列(此处为“1”)比包含差异的字段低。该序列确定首先计算哪些字段。
单击第一个字段的编码按钮并添加编码以选择单个RBKP
条目的总和:
然后对差异字段执行相同操作:
现在您的字段列表中都有可用的两个字段,您可以将它们添加到右侧的字段组中:
如前所述,您刚刚输入的代码将针对 RBKP 中的每一行进行处理。因此,这可能会对运行时性能产生巨大影响,具体取决于初始结果集的大小。