3

我无法确定从哪里开始/如何获得正确的输出。我对 ABAP 编码非常陌生。我正在尝试创建一个 Infoset 查询,需要在 SQ02 中进行一些编码。

我有两个表加入 - 一个是 RBKP 作为Invoice Receipts的标题,另一个是 RBDRSEG 的Invoice Document Items

查询需要按照一些不相关的参数/变量运行,但是当它这样做时,它需要 - - -

在 RBDRSEG 中查找所有相同的文档编号 RBKP-BELNR EQ RBDRSEG-RBLNR

这样做时,RBDRSEG 可能有也可能没有每个 Doc No. 的多行结果。

我需要为每个 Doc No. Result 合计字段 RBDRSEG-DMBTR。(如果一个 Doc. No. 有 5 行;DMBTR 将有不同的值,每个需要合计)

此时,我需要输出仅显示(连同 RBKP 中的其他字段)每个 Doc 的 DMBTR 字段的 SUM 一行。不。

然后,我需要另一个字段来显示字段 RBKP - RMWWWR 的差异,即发票总计和之前为该文档计算的总计。字段 DMBTR 的编号。

如果您能提供帮助,我将不胜感激。

4

1 回答 1

3

首先,您需要定义一个包含您的选择数据的结构。您的要求的示例结构可能如下所示:

在此处输入图像描述

不要忘记激活结构并确保它不包含错误。

现在创建选择报告。要将报表用作数据选择方法,您需要添加两个注释,*<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更新列。DIFFRMWWRDMBTR

不幸的是,在我们的 SAP 系统中,该表RBDRSEG是空的,所以我无法测试报告的那一部分。但是您可以通过在第一个断点之前添加一个断点loop然后启动报表来测试系统中的报表。然后,您应该能够查看内部表中的选定行,ITAB并查看选择是否按预期工作。

示例报告中的注意事项:两者都RBKP引用RBDRSEG不同的货币字段。RMWWR因此,您的值可能使用DMBTR不同的货币(RMWWR使用文档货币,DMBTR似乎使用默认的公司货币)。如果是这种情况,您必须在计算差额之前将它们转换为适当的货币。请确保在 / 中加入并RBKP使用RBDRSEG文档编号和BELNR/RBLNR中的年份(中的字段是,不是,尽管也存在于)。GJAHRRJAHRRBDRSEGRJAHRGJAHRGJAHRRBDRSEG

当您的报告按预期工作时,根据您的报告创建信息集。然后,您可以像使用任何其他信息集一样使用该信息集。

更新:我刚刚意识到,因为您写了关于 ABAP 的新手,我立即假设您需要为您的信息集创建一个报告。根据您的实际要求,情况可能并非如此。您可以在表 RBKP 上创建一个简单的信息集查询,然后使用信息集编辑器为总行和差异添加两个字段,然后添加一些 abap 代码,选择 RBDRSEG 中所有相应行的总和并计算 RMWWR 之间的差异和那个总和。这可能比自定义的abap 报告要慢,因为必须为RBKP 中的每一行重复选择,所以这实际上取决于您的用户要查询的数据量。定制的 ABAP 报告很好,


使用信息集设计器的变体的附加信息

首先创建一个简单的信息集只读表 RBKP(因此在信息集定义中没有表连接)。现在转到特定于应用程序的增强功能:

在此处输入图像描述

在我的示例中,我已经添加了 2 个字段,LINETOTAL并且DIFFERENCE. 两者具有相同的性质RBDRSEG-DMBTR。确保包含总和的字段的RBDRSEG-DMBTR序列(此处为“1”)比包含差异的字段低。该序列确定首先计算哪些字段。

单击第一个字段的编码按钮并添加编码以选择单个RBKP条目的总和:

在此处输入图像描述

然后对差异字段执行相同操作:

在此处输入图像描述

现在您的字段列表中都有可用的两个字段,您可以将它们添加到右侧的字段组中:

在此处输入图像描述

如前所述,您刚刚输入的代码将针对 RBKP 中的每一行进行处理。因此,这可能会对运行时性能产生巨大影响,具体取决于初始结果集的大小。

于 2014-10-31T10:56:02.093 回答