我无法确定从哪里开始/如何获得正确的输出。 我对ABAP编码很新。我正在尝试创建一个Infoset查询,需要在SQ02中进行一些编码。
我有两个表连接 - 一个是RBKP作为发票收据的标题另一个是发票凭证项的RBDRSEG。
查询需要按照一些不相关的参数/变体运行,但是当它这样做时需要 - - -
在RBDRSEG中查找所有相同的文档编号RBKP-BELNR EQ RBDRSEG-RBLNR
在这样做时,RBDRSEG可能会或可能不会为每个Doc No。
提供多行结果我需要为每个Doc No. Result 总计RBDRSEG-DMBTR字段。 (如果Doc.No。有5行; DMBTR对每个需要总计的值都有不同的值)
此时我需要输出仅显示(以及RBKP中的其他字段)每个Doc的DMBTR字段的SUM的一行。否
然后,我需要另一个字段显示字段RBKP的差异 - RMWWWR,即发票总计和先前为该Doc计算的总计。现场DMBTR的编号。
如果你能提供帮助,我将非常感激。
答案 0 :(得分:1)
首先,您需要定义一个包含您的选择数据的结构。您需求的示例结构可能如下所示:
不要忘记激活结构并确保它不包含错误。
现在创建选择报告。要将报告用作数据选择方法,您需要添加两条评论*<QUERY_HEAD>
和*<QUERY_BODY>
。 *<QUERY_HEAD>
必须放置在您的选择开始通常位于*<QUERY_BODY>
的循环内,该循环将选定的行放入与SE11中定义的结构同名的内部表中。 / p>
我做了一个示例报告来说明这是如何工作的:
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
的总和。之后,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
中也存在LINETOTAL
。
当您的报告按预期工作时,请根据您的报告创建信息集。然后,您可以像任何其他信息集一样使用信息集。
更新: 我刚刚意识到,因为你写过关于ABAP的新手,我立刻认为你需要为你的信息集创建一个报告。根据您的实际要求,情况可能并非如此。您可以在表RBKP上创建一个简单的信息集查询,然后使用信息集编辑器为行总数和差异添加两个字段,然后添加一些abap代码,用于选择RBDRSEG中所有相应行的总和并计算RMWWR之间的差异和总和。这可能比定制的abap报告慢,因为必须为RBKP中的每一行重复选择,因此它实际上取决于用户要查询的数据量。定制的ABAP报告很好,灵活且快速,但可能过度,并且能够更改报告的人数小于能够修改信息集的人数。
使用信息集设计器的变体的其他信息
首先创建一个简单的信息集只读表RBKP(因此在信息集定义中没有表连接)。现在转到特定于应用程序的增强功能:
在我的示例中,我已添加了两个字段DIFFERENCE
和RBDRSEG-DMBTR
。两者都具有与RBDRSEG-DMBTR
相同的属性。确保包含RBKP
总和的字段的序列(此处为&#39; 1&#39;)低于包含差异的字段。序列确定首先计算哪些字段。
单击第一个字段的编码按钮,然后添加编码以选择单个{{1}}条目的总和:
然后对差异字段执行相同的操作:
现在,您的字段列表中有两个字段,您可以将它们添加到右侧的字段组中:
如前所述,您刚刚输入的代码将在RBKP中为每一行处理。因此,这可能会对运行时性能产生巨大影响,具体取决于初始结果集的大小。