You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ABAP SUBMIT将S_ALR_87013611报表数据导入内表?

解决Report Painter报表S_ALR_87013611数据导出到内表的问题

问题根源

你使用的cl_salv_bs_runtime_info仅适用于基于ALV框架开发的报表,但S_ALR_87013611是**Report Painter(报表绘制器)**报表,它的输出逻辑和ALV完全不同,因此无法通过该类捕获数据,反而会触发报表的原生界面展示。

可行解决方案

方案1:直接调用报表底层函数模块

Report Painter报表依赖预定义的报表组运行,你可以通过以下步骤定位并调用核心函数:

  1. 运行S_ALR_87013611,进入报表界面后点击菜单栏系统 → 状态,查看程序字段(即你代码中使用的gp4qlqkh46vzj3p1a40a23s3hjg300这类自动生成的程序名)。
  2. 打开该生成程序的源代码,找到它调用的Report Painter专用函数(常见如RKE_SELECT_REPORT、GRID_RUN_REPORT等)。
  3. 在你的程序中直接调用这些函数,传入选择参数即可获取结构化数据。

示例代码片段:

DATA: gt_result TYPE TABLE OF <对应函数的结果结构>,
      gs_report_params TYPE <函数要求的参数结构>.

" 填充选择参数
gs_report_params-kokrs = pkokrs.
gs_report_params-gjahr = pgjahr.
gs_report_params-periv = pperbl_f.
gs_report_params-perib = pperbl_t.
gs_report_params-verp  = pversn.

CALL FUNCTION 'RKE_SELECT_REPORT'
  EXPORTING
    i_report = '<报表编号>' " 可从报表组配置中获取
    i_params = gs_report_params
  TABLES
    t_result = gt_result.

方案2:SUBMIT结合内存导出解析报表数据

部分Report Painter报表支持将输出导出到内存,你可以通过以下方式获取并解析:

SUBMIT gp4qlqkh46vzj3p1a40a23s3hjg300
        WITH $1kokre EQ pkokrs
        WITH $1gjahr EQ pgjahr
        WITH $1periv EQ pperbl_f
        WITH $1perib EQ pperbl_t
        WITH $1verp EQ pversn
        WITH $1koset EQ pksgru
        WITH _1koset IN so_kostl
        WITH $1kstar EQ pkagru
        WITH _1kstar IN so_kstar
        EXPORTING LIST TO MEMORY
        AND RETURN.

" 从内存读取报表原始数据
DATA: gt_list TYPE TABLE OF abaplist.
CALL FUNCTION 'LIST_FROM_MEMORY'
  TABLES
    listobject = gt_list
  EXCEPTIONS
    not_found  = 1
    OTHERS     = 2.

IF sy-subrc = 0.
  " 将内存中的报表格式转换为ASCII文本
  DATA: gt_ascii TYPE TABLE OF string.
  CALL FUNCTION 'LIST_TO_ASCI'
    TABLES
      listasci = gt_ascii
      listobj  = gt_list
    EXCEPTIONS
      empty_list    = 1
      list_index_invalid = 2
      OTHERS        = 3.
  
  " 自定义解析ASCII文本为结构化内表(需根据报表格式编写逻辑)
ENDIF.

注意:这种方式得到的是报表的打印格式数据,需要额外解析才能得到结构化内表,适合快速验证但不要求高精度的场景。

方案3:使用Report Painter专用API类

SAP提供了CL_GUI_REPAINTER类用于操作Report Painter报表,可直接执行并获取数据:

DATA: lo_repainter TYPE REF TO cl_gui_repainter,
      lt_result    TYPE TABLE OF <报表结果结构>.

CREATE OBJECT lo_repainter
  EXPORTING
    report_id = '<报表编号>'. " 从报表配置中获取固定编号,避免依赖自动生成的程序名

" 设置选择参数
lo_repainter->set_selection_parameter(
  EXPORTING
    parameter = 'KOKRS'
    value     = pkokrs ).
lo_repainter->set_selection_parameter(
  EXPORTING
    parameter = 'GJAHR'
    value     = pgjahr ).
" 依次设置其他必要参数

" 执行报表并获取结果
lo_repainter->execute( ).
lt_result = lo_repainter->get_result( ).

关键注意事项

  • 不要用cl_salv_bs_runtime_info处理非ALV报表,该类仅支持SALV框架的ALV输出。
  • 自动生成的报表程序名(如gp4qlqkh46vzj3p1a40a23s3hjg300)在不同系统环境中可能不同,建议通过报表组或固定报表编号定位,避免硬编码。
  • 确保程序拥有足够权限访问成本中心、成本要素等业务数据,否则会触发权限检查错误。

内容的提问来源于stack exchange,提问作者Arfeen Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:02:09