【问题标题】:How to execute Report given the results of a previously executed Report in ABAP如何根据 ABAP 中先前执行的报告的结果执行报告
【发布时间】:2017-01-13 10:38:44
【问题描述】:

我的问题如下:
我有一份名为 Y5000112 的报告。
我的同事总是使用 selection screen variant V1 手动执行一次,然后使用 variant V2 将第一次执行的结果添加到选择中第二次执行.
在这种情况下,这些结果是PERNR

我的目标:
自动执行此操作 - 单击一次执行该查询两次,并使用第一次执行的 PERNR 结果自动填充第二次执行的 PERNR 选择。

我发现了如何触发报告执行,然后是另一个,如何将其设置为某个变体并做到了这一点 - [编辑] 在第一个答案之后我得到了一些进一步但我仍然不知道如何循环遍历我的结果并将它们放入下一个报告提交中:

DATA: t_list TYPE TABLE OF abaplist.
*      lt_seltab TYPE TABLE OF rsparams,
*      ls_selline LIKE LINE OF lt_seltab.

SUBMIT Y5000114
USING SELECTION-SET 'MA OPLAN TEST'
EXPORTING LIST TO MEMORY
AND RETURN.

CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
  listobject = t_list
EXCEPTIONS
  not_found = 1
  OTHERS = 2.
IF sy-subrc <> 0.
  WRITE 'Unable to get list from memory'.
ELSE.
* I want to fill ls_seltab here with all pernr (table pa0020) but I haven't got a clue how to do this
*  LOOP AT t_list.
*    WRITE /t_list.
*  ENDLOOP.

  SUBMIT Y5000114
*  WITH-SELECTION-TABLE ls_seltab
  USING SELECTION-SET 'MA OPLAN TEST2'
  AND RETURN.
ENDIF.

附言
我对 ABAP 不是很熟悉,所以如果我没有提供足够的信息,请在 cmets 中告诉我,我会尝试找出您需要知道的任何内容来解决这个问题。

这是我想象中的 JS 代码,它可以非常概括地表达我想要完成的事情。

function submitAndReturnExport(Reportname,VariantName,OptionalPernrSelection)
{...return resultObject;}

var t_list = submitAndReturnExport("Y5000114","MA OPLAN TEST");
var pernrArr = [];
for (var i in t_list)
{
 pernrArr.push(t_list[i]["pernr"]);
}
submitAndReturnExport("Y5000114","MA OPLAN TEST2",pernrArr);

【问题讨论】:

    标签: submit abap


    【解决方案1】:

    这并不像想象的那么容易,所以不会有任何一行sn-p。
    没有从报告中获取结果的标准方法。尝试EXPORTING LIST TO MEMORY 子句,但考虑到报告可能需要修改:

    提交 [report_name]
    WITH SELECTION-TABLE [rspar_tab]
    将列表导出到内存
    然后返回。

    上述语句的结果应该从内存中读取并适应输出:

    call function 'LIST_FROM_MEMORY'
      TABLES
       listobject       = t_list
      EXCEPTIONS
       not_found        = 1
       others           = 2.
    
    if sy-subrc <> 0.
      message 'Unable to get list from memory' type 'E'.
    endif.
    
    call function 'WRITE_LIST'
      TABLES
       listobject       = t_list
      EXCEPTIONS
       EMPTY_LIST       = 1
       OTHERS           = 2
            .
     if sy-subrc <> 0.
      message 'Unable to write list' type 'E'.
     endif.
    

    另一种(更有效的方法,恕我直言)是通过类cl_salv_bs_runtime_info 访问生成的网格。见例子here

    附:使用相互依赖的不同参数执行相同报告(第一次迭代的输出部分 = 第二次迭代的输入部分)绝对是 一个糟糕的设计,这些操作应该是内部完成。
    对于我来说,最好重新考虑一下报告的整体架构。

    【讨论】:

    • 我如何将该 t_list 放回第二个报告选择中?
    • 像往常一样:循环遍历它,提取必要的字段并为第二次提交构建 seltab。没有人告诉你这很容易。
    • 真的,谢谢所有的信息——一旦我成功了,我会接受你的回答:)
    • 糟糕设计的原因是我没有开发密钥,而且我不知道如何在我的 Query-Selection-GUI 中指定 AND 运算符 - 因此我执行首先是第一个选择器,结果是第二个选择器,然后我得到了我的 AND 运算符。现在我发现了我可以在哪里执行一些代码(尽管有一些限制),我正在那里进行试验。
    • @Cold_Class,阅读this manual仔细,它已经包含了需要的代码sn-p。您应该使用 WITH SELECTION-TABLE 加法,而不是您在提供的代码示例中使用的 USING SELECTION-SETUSING SELECTION-SET 用于变体,您不能同时提供变体和 seltab 来报告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多