0

我已经设法使 READ_TEXT FM 在函数 read_text 的多次调用中一次只为一个 cID 工作(例如,我发现了如何访问它 cID = 'GRUN' cObject = 'MATERIAL'。谁能建议如何连接read_text 函数,以便检查文本(cID = 'GRUN' cObject = 'MATERIAL')将在我的 alv 网格中与材料详细信息在同一行显示?

请点击这里输出

形成阅读文本。

  data: it_MVKE type standard table of MVKE initial size 0.
  data: lMVKE like MVKE, lMAKT like MAKT, lT002 like T002 ,
        lTDNAME like THEAD-TDNAME,"text header

        it_TLINE type standard table of TLINE,
        wa_TLINE type TLINE.

  data: cObject(10) type c, cID(4) type c.


  select MATNR from MARA into corresponding fields of table it_MVKE
  where MATNR in Material order by MATNR.
  cID = 'GRUN'. cObject = 'MATERIAL'. "Text date principale "


  loop at it_MVKE into lMVKE.

    lTDNAME = lMVKE-MATNR.

    select spras from T002 into lT002.

      CALL FUNCTION 'READ_TEXT'
        EXPORTING
          CLIENT   = SY-MANDT
          ID       = cID
          LANGUAGE = lT002-SPRAS
          NAME     = lTDNAME
          OBJECT   = cObject
        TABLES
          LINES    = it_TLINE
        EXCEPTIONS
          ID       = 1
          OTHERS   = 8.

      IF SY-SUBRC EQ 0.

        select single * from MAKT into lMAKT where MATNR eq lMVKE-MATNR
         and SPRAS eq lT002-SPRAS.

        LOOP AT it_TLINE INTO wa_TLINE.
          wa_join-TEXTPRI = wa_TLINE-TDLINE.
          append wa_join to lt_join.
          clear wa_join.
        ENDLOOP.
      ENDIF.
    ENDSELECT.
  ENDLOOP.
ENDFORM.
4

2 回答 2

1

你不能这样做。SAP 中的功能模块一次只接受单个参数,除非此参数指定为表类型或在 TABLES 部分中。

但是,这是我之前回答的解决方法,您可以完全摆脱它READ_TEXT

  1. 正如forgetaboutme所说,将您的cID与TDNAME一起放入itab:

    wa_cids-cid = 'GRUN'.
    wa_cids-cobject = 'MATERIAL'.
    if cID = '0001'.
     concatenate lMVKE-MATNR lMVKE-VKORG lMVKE-VTWEG into wa_cids-lTDNAME.
    else.
     lTDNAME = lMVKE-MATNR.
    endif.
    append wa_cids to it_cids.
    
  2. 考虑到您的 itab,从 db 表中选择文本。

    SELECT l~tdname l~clustr l~clustd
     INTO CORRESPONDING FIELDS OF TABLE t_stxl
     FROM stxl AS l
     JOIN stxh AS h
      ON h~tdobject = l~tdobject
       AND h~tdname   = l~tdname
       AND h~tdid     = l~tdid
       FOR ALL ENTRIES it_cids
     WHERE l~relid    = 'TX'          "standard text
       AND h~tdobject = it_cids-cobject
       AND h~tdname   = it_cids-lTDNAME
       AND h~tdid     = it_cids-cid
       AND l~tdspras  = sy-langu.
    
  3. 将它们从原始形式转换为可读形式

    CLEAR: t_stxl_raw[], t_tline[].
    APPEND VALUE ty_stxl_raw( clustr = <stxl>-clustr clustd = <stxl>-clustd ) TO t_stxl_raw.
    IMPORT tline = t_tline FROM INTERNAL TABLE t_stxl_raw.
    
  4. 阅读它们

    LOOP AT t_tline ASSIGNING <tline>.
     wa_Report-TEXT = <tline>-TDLINE.
    append wa_Report to it_Report.
    ENDLOOP.
    
于 2017-11-03T08:36:11.893 回答
0

您可以像这样创建 cID 和 cObjects 的内部表:

types: begin of cids,
         cid(4)      type c,
         cobject(10) type c,
       end of cids.

data: wa_cids type cids.
data: it_cids type standard table of cids.

然后,您可以简单地将所有不同类型的 cID/cObjects 附加到内部表中:

wa_cids-cid = 'GRUN'.
wa_cids-cobject = 'MATERIAL'.

append wa_cids to it_cids.

然后遍历你的内部表调用函数'READ_TEXT'

loop at it_cids into wa_cids.
  call function 'READ_TEXT'
    exporting
      client   = sy-mandt
      id       = wa_cids-cid
      language = lt002-spras  "p_SPRAS
      name     = ltdname
      object   = wa_cids-cobject
    tables
      lines    = it_tline
    exceptions
      id       = 1
      others   = 8.

* Do what you need to do with it_tline here.

endloop.

* Rest of code here
于 2017-11-02T15:43:08.180 回答