Читайте текст материала на нескольких языках одновременно с READ_TEXT FM

Мне удалось заставить READ_TEXT FM работать только для одного cID за раз при нескольких вызовах функции read_text (например, я узнал, как получить к нему доступ для cID = 'GRUN' cObject = 'MATERIAL'. Может ли кто-нибудь посоветовать, как подключиться read_text, чтобы текст проверки (cID = 'GRUN' cObject = 'MATERIAL') отображался в моей сетке alv в той же строке с деталями материала?

Щелкните здесь для вывода

ФОРМА READTEXT.

  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.

person dragospirnut    schedule 02.11.2017    source источник
comment
Что нужно работать, когда cID = PRUE ,cID =0001, cID = IVER?   -  person forgetaboutme    schedule 02.11.2017
comment
Когда значения существуют для любого из следующих: cID = 0001. cObject = 'MVKE', cID = IVER. cObject = 'МАТЕРИАЛ, cID =' GRUN '. cObject = 'МАТЕРИАЛ'. cID = PRUE. cObject = 'МАТЕРИАЛ'. Я хочу показать их в моей выходной таблице lt_join, с которой я уже показываю другие поля в ALV.   -  person dragospirnut    schedule 03.11.2017


Ответы (2)


Вы не можете так поступать. Функциональные модули в SAP принимают только один параметр одновременно, если этот параметр не указан как тип таблицы или в разделе ТАБЛИЦЫ.

Однако здесь есть обходной путь из моего предыдущего ответа, который вы можете использовать чтобы вообще избавиться от READ_TEXT.

  1. Как сказал Forgotaboutme, поместите свои идентификаторы cID в itab вместе с TDNAME:

    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. Выбирайте тексты из таблицы db с учетом вашего itab.

    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.
    
person Suncatcher    schedule 03.11.2017
comment
Уважаемый Suncatcher, спасибо за ваш ответ, я сделал, как было сказано, но все еще сталкиваюсь с ошибкой: Fields ‹STXL› -CLUSTR is unknown. Он не входит ни в одну из указанных таблиц и не определяется оператором DATA. Пожалуйста, посмотрите мой код, измененный в моем первоначальном вопросе: - person dragospirnut; 03.11.2017
comment
Ошибка в сети: w_stxl_raw-clustr = ‹stxl› -clustr. - person dragospirnut; 03.11.2017
comment
Вам следует запустить pts. 3 и 4 внутри цикла через t_stxl таблицу, LOOP AT t_stxl ASSIGNING <stxl>., где <stxl> должен иметь тип строки t_stx. Получите все определения DATA из моего предыдущего ответа, который я дал. - person Suncatcher; 03.11.2017
comment
Еще раз спасибо. Я сделал то, что вы посоветовали, и все тот же ошибщик: LOOP AT t_stxl ASSIGNING ‹stxl›. ОЧИСТИТЬ: t_stxl_raw [], t_tline []. w_stxl_raw-clustr = ‹stxl› -clustr. w_stxl_raw-clustd = ‹stxl› -clustd. ПРИЛОЖЕНИЕ w_stxl_raw К t_stxl_raw. ИМПОРТ tline = t_tline ИЗ ВНУТРЕННЕЙ ТАБЛИЦЫ t_stxl_raw. ПЕТЛЯ НА t_tline НАЗНАЧЕНИЕ ‹tline›. wa_Report-TEXT = ‹tline› -TDLINE. добавьте wa_Report к it_Report. КОНЕЦ. КОНЕЦ. - person dragospirnut; 03.11.2017
comment
То же что означает? Вы объявили <stxl> символ поля? Попробуйте LOOP AT t_stxl ASSIGNING FIELD-SYMBOL(<stxl>). - person Suncatcher; 03.11.2017
comment
Спасибо за ответ. Вы были правы, у меня не былоt declared <stxl> . i have declared it now and i donт ошибок, но моя программа не делает то, что от нее ожидается. - person dragospirnut; 06.11.2017
comment
@ Suncatcher. Пожалуйста, найдите выше в исходном коде обновление, но по-прежнему нет вывода. Если у вас есть совет :) - person dragospirnut; 06.11.2017
comment
@dragospirnut, вы неправильно заполняете структуру wa_cids: вы заполняете строку 56 lTDNAME, но должно быть wa_cids-lTDNAME, как строка 54. И для всего этого должно быть одно ПРИЛОЖЕНИЕ, а не два! Также убедитесь, что ваш язык входа в систему (sy-langu в строке 73) совпадает с языком вашего текстового сообщения. Все остальное нормально. - person Suncatcher; 06.11.2017
comment
@dragospirnut, если вы хотите получить все языки, просто удалите строку 73. - person Suncatcher; 06.11.2017
comment
Я обновил, как показано ниже, по-прежнему нет вывода :( IF wa_cids-cid = 'GRUN'. wa_cids-cobject = 'MATERIAL'. elseif cID = '0001'. Объедините lMVKE-MATNR lMVKE-VKORG lMVKE-VTWEG в wa_cids-lTDNAME. else. wa_cids-lTDNAME = lMVKE-MATNR. endif. добавить wa_cids к it_cids. - person dragospirnut; 07.11.2017
comment
тогда ваш cID никогда не будет равен 0001 и никогда не будет GRUN, или могут быть тысячи причин. Просто удалите все условия, заполните структуру литералами, и это просто работает © - person Suncatcher; 07.11.2017
comment
Спасибо за ваш ответ. Я считаю, что это слишком сложно. Подумываю вернуться к read_text и как-нибудь вызвать функцию read_text с кодом case. - person dragospirnut; 07.11.2017
comment
@ Suncatcher.i думаю, что я буду придерживаться read_text или read_multiple_text. У вас есть какой-нибудь пример для read_text или read_multiple_text, для которого я мог бы прочитать больше нескольких идентификаторов на всех поддерживаемых языках? - person dragospirnut; 07.11.2017

Вы можете создать внутреннюю таблицу cID и cObject следующим образом:

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 / cObject, которые у вас есть, во внутреннюю таблицу:

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
person forgetaboutme    schedule 02.11.2017
comment
Привет, спасибо за ваш ответ, я хочу получить несколько cID для всех поддерживаемых языков. - person dragospirnut; 03.11.2017
comment
Привет, я попробовал то, что вы посоветовали, и не работает. Подскажите, пожалуйста, есть ли у вас другие идеи? Спасибо . - person dragospirnut; 10.11.2017