如何通过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报表依赖预定义的报表组运行,你可以通过以下步骤定位并调用核心函数:
- 运行S_ALR_87013611,进入报表界面后点击菜单栏系统 → 状态,查看程序字段(即你代码中使用的
gp4qlqkh46vzj3p1a40a23s3hjg300这类自动生成的程序名)。 - 打开该生成程序的源代码,找到它调用的Report Painter专用函数(常见如
RKE_SELECT_REPORT、GRID_RUN_REPORT等)。 - 在你的程序中直接调用这些函数,传入选择参数即可获取结构化数据。
示例代码片段:
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
相关产品推荐
相关产品推荐

