ABAP程序读取表数据后如何显示为内部表?代码正确性求证
让我来帮你梳理下这个问题——先确认代码的正确性,再解决表格形式展示数据的需求:
一、现有代码正确性检查
你的代码整体逻辑是没问题的,能正常从CRMD_ORDERADM_H表中筛选数据并存入内表gt_output,不过有个小细节可以优化:
- 如果你的参数
Mel_Nr是用来做精确匹配的,建议把WHERE子句里的LIKE改成EQ——LIKE通常用于模糊查询(需要用户输入时带通配符如*),精确查找用EQ效率更高;如果确实需要模糊查询,保留LIKE即可,但要提醒用户输入时加通配符(比如*123*表示包含123的所有Object ID)。 - 参数的
obligatory设置正确,能确保用户必须输入值才能执行程序。
二、表格形式展示数据的两种方案
方案1:简单WRITE表格(快速测试用)
这种方式无需额外依赖,直接用WRITE语句格式化输出,适合快速验证数据:
在START-OF-SELECTION的SELECT语句之后添加以下代码:
IF gt_output IS NOT INITIAL. " 输出表头 WRITE: / 'Object ID', 20 'Created By'. " 绘制分隔线 ULINE. " 循环输出每行数据 LOOP AT gt_output INTO DATA(ls_output). WRITE: / ls_output-object_id UNDER 'Object ID', ls_output-created_by UNDER 'Created By'. ENDLOOP. ELSE. WRITE: / 'No data found for the entered Object ID.'. ENDIF.
方案2:ALV网格展示(SAP标准专业方案)
ALV是SAP系统中展示表格数据的标准方式,自带排序、筛选、导出Excel等实用功能,推荐用于正式程序。修改后的完整代码如下:
REPORT ZT_THIEMANN_TEST. TYPES : BEGIN OF ts_output, object_id TYPE CRMD_ORDERADM_H-object_id, created_by TYPE CRMD_ORDERADM_H-created_by, END OF ts_output, tt_output TYPE TABLE OF ts_output. PARAMETERS Mel_Nr TYPE CRMD_ORDERADM_H-Object_ID OBLIGATORY. DATA gt_output TYPE tt_output. " ALV字段目录类型,用来定义列的显示属性 DATA gt_fieldcat TYPE slis_t_fieldcat_alv. DATA gs_fieldcat TYPE slis_fieldcat_alv. START-OF-SELECTION. " 这里改成EQ做精确匹配,如需模糊查询改回LIKE并提示用户输入通配符 SELECT cm~object_id cm~created_by FROM CRMD_ORDERADM_H AS cm INTO CORRESPONDING FIELDS OF TABLE gt_output WHERE cm~object_id = Mel_Nr. " 构建ALV列的显示配置 gs_fieldcat-fieldname = 'OBJECT_ID'. gs_fieldcat-seltext_m = 'Object ID'. " 列的显示文本 APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat. gs_fieldcat-fieldname = 'CREATED_BY'. gs_fieldcat-seltext_m = 'Created By'. APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat. " 调用ALV网格函数展示数据 IF gt_output IS NOT INITIAL. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid " 指定当前程序为回调程序 it_fieldcat = gt_fieldcat " 传入列配置 TABLES t_outtab = gt_output " 传入要展示的内表 EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. WRITE: / 'Error displaying ALV grid:', sy-subrc. ENDIF. ELSE. WRITE: / 'No data found for the entered Object ID.'. ENDIF.
内容的提问来源于stack exchange,提问作者Teaman
相关产品推荐
相关产品推荐

