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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:17:35