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

如何在ABAP中拼接READ_TEXT输出以替换物料长文本列

技术解决方案:物料长文本读取与展示

一、内部表GT_NAZIV_MAT的正确定义

READ_TEXT函数返回的文本行结构是TDLINE,你需要定义一个关联物料号与拼接后长文本的自定义结构,再基于该结构创建内部表,这样能精准对应每个物料的长文本数据:

TYPES: BEGIN OF ty_naziv_mat,
         matnr TYPE mseg-matnr,  " 物料号,用于关联原数据
         long_text TYPE string,  " 存储拼接后的完整长文本
       END OF ty_naziv_mat.

DATA: gt_naziv_mat TYPE STANDARD TABLE OF ty_naziv_mat WITH KEY matnr.
DATA: gs_naziv_mat TYPE ty_naziv_mat.
DATA: gt_lines TYPE STANDARD TABLE OF tdline.  " 临时存储READ_TEXT返回的单行文本
DATA: gs_line TYPE tdline.

二、INITIALIZATION代码段的适用性判断

INITIALIZATION是程序/屏幕初始化阶段执行的代码块,仅当你需要在程序启动时预加载所有物料长文本时才适合用它。如果是在筛选特定物料范围后才需要读取文本,建议把读取逻辑放在START-OF-SELECTION或数据处理主逻辑块中,避免提前加载冗余数据拖慢性能。

三、完整的长文本读取与拼接逻辑示例

以下是核心代码片段,包含去重读取、文本拼接及异常处理:

START-OF-SELECTION.
  " 假设已获取待处理的物料清单(比如从MSEG中筛选)
  DATA: gt_mseg TYPE STANDARD TABLE OF mseg.
  SELECT matnr FROM mseg INTO TABLE gt_mseg WHERE ... " 你的业务筛选条件

  " 物料号去重,避免重复调用READ_TEXT浪费资源
  SORT gt_mseg BY matnr.
  DELETE ADJACENT DUPLICATES FROM gt_mseg COMPARING matnr.

  " 循环读取每个物料的长文本
  LOOP AT gt_mseg INTO DATA(gs_mseg).
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        client                  = sy-mandt
        id                      = 'GRUN'
        language                = 'HR'
        name                    = gs_mseg-matnr
        object                  = 'MATERIAL'
      TABLES
        lines                   = gt_lines
      EXCEPTIONS
        id                      = 1
        language                = 2
        name                    = 3
        not_found               = 4
        object                  = 5
        reference_check         = 6
        wrong_access_to_archive = 7
        OTHERS                  = 8.

    IF sy-subrc = 0.
      " 拼接所有文本行为单行,用空格分隔(可按需替换成换行符等)
      CLEAR gs_naziv_mat-long_text.
      LOOP AT gt_lines INTO gs_line.
        CONCATENATE gs_naziv_mat-long_text gs_line-tdline INTO gs_naziv_mat-long_text SEPARATED BY space.
      ENDLOOP.
      gs_naziv_mat-matnr = gs_mseg-matnr.
      APPEND gs_naziv_mat TO gt_naziv_mat.
    ELSE.
      " 处理无长文本的情况,可自定义默认值
      gs_naziv_mat-matnr = gs_mseg-matnr.
      gs_naziv_mat-long_text = '无长文本描述'.
      APPEND gs_naziv_mat TO gt_naziv_mat.
    ENDIF.
    CLEAR gt_lines.
  ENDLOOP.

  " 后续可将gt_naziv_mat与STXH/STHL原数据关联,替换原40字符列

四、关键注意事项

  • 性能优化:必须对物料号去重,大批量物料场景下,可考虑批量调用READ_TEXT或并行处理提升效率。
  • 语言适配:如果是多语言系统,建议用sy-langu动态获取当前登录语言,替代固定的'HR'。
  • 异常处理:不要忽略READ_TEXT的异常分支,尤其是NOT_FOUND(物料无长文本)的情况,需做友好处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:17:38