给定ABAP中先前执行的报表的结果,如何执行报表



我的问题如下:
我有一个名为Y5000112的报告
我的同事总是用选择屏幕变体V1手动执行一次,然后用变体V2将第一次执行的结果添加到选择中来执行第二次
在这种情况下,这些结果是PERNR

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

我发现了如何触发报告执行,之后又发现了另一个,如何将其设置为某个变体,并走到了这一步——[EDIT]在第一个答案之后,我得到了进一步的答案,但我仍然不知道如何循环我的结果,并将其放入下一个报告提交中:

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.

p.S.
我对ABAP不是很熟悉,所以如果我没有提供足够的信息,请在评论中告诉我,我会尽力找出你需要知道的任何信息来解决这个问题。

这是我想象中的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);

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

提交[report_name]
并选择表格[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.

另一种(也是更有效的方法,IMHO)是通过类cl_salv_bs_runtime_info获得对结果网格的访问。请参阅此处的示例

p.S.用相互依赖的不同参数执行相同的报告(第一次迭代的输出pars=第二次迭代的输入pars)肯定是一个糟糕的设计,这些操作应该在内部完成
对我来说,最好重新考虑一下这份报告的整个架构。

相关内容

  • 没有找到相关文章

最新更新