Рассмотрим чтение длинных текстов на примере текста к основным данным материала (текстовый объект - MATERIAL, идентификатор - GRUN). Чтение длинного текста осуществляется с помощью функционального модуля READ_TEXT.
Массовое чтение длинных текстов можно выполнить следующим образом.
Неизвестный пользователь в комментариях подсказал, что есть ФМ READ_TEXT_TABLE для массового чтения текстов. ФМ присутствует в более новых версиях (в 7.40 есть, в 7.31 нет).
Текстовые объекты можно найти в ракурсе ведения V_TTXOBI (таблица TTXOB), идентификаторы к текстовым объектам - в ракурсе V_TTXID_N или V_TTXIDI (таблица TTXID), заголовок к длинному тексту - в таблице STXH, сам длинный текст - в таблице STXL.
Основные текстовые объекты:
ANLA - основное средство
BELEG - финансовый документ
EBAN - заявка
EBANH - заголовок заявки
EKKO - заголовок документа закупки
EKPO - позиция документа закупки
MATERIAL - материал
DATA: lv_id TYPE thead-tdid,
lv_name TYPE thead-tdname,
lv_object TYPE thead-tdobject,
ls_header TYPE thead,
lt_lines TYPE TABLE OF tline.
lv_id = 'GRUN'.
lv_name = p_matnr.
lv_object = 'MATERIAL'.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* client = sy-mandt
id = lv_id
language = sy-langu
name = lv_name
object = lv_object
* archive_handle = 0
* local_cat = ' '
IMPORTING
header = ls_header
TABLES
lines = lt_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 EQ 0.
" Таблица lt_lines содержит длинный текст
ENDIF.
Массовое чтение длинных текстов можно выполнить следующим образом.
TYPES: BEGIN OF ty_mara,
matnr TYPE mara-matnr,
tdname TYPE stxl-tdname,
END OF ty_mara.
TYPES: BEGIN OF ty_stxl,
tdname TYPE stxl-tdname,
clustr TYPE stxl-clustr,
clustd TYPE stxl-clustd,
END OF ty_stxl.
TYPES: BEGIN OF ty_stxl_raw,
clustr TYPE stxl-clustr,
clustd TYPE stxl-clustd,
END OF ty_stxl_raw.
DATA: lt_mara TYPE TABLE OF ty_mara,
lt_stxl TYPE TABLE OF ty_stxl,
lt_stxl_raw TYPE TABLE OF ty_stxl_raw,
ls_stxl_raw TYPE ty_stxl_raw,
lt_tline TYPE TABLE OF tline.
FIELD-SYMBOLS: <lfs_mara> LIKE LINE OF lt_mara,
<lfs_stxl> TYPE ty_stxl,
<lfs_tline> LIKE LINE OF lt_tline.
SELECT *
FROM mara
INTO CORRESPONDING FIELDS OF TABLE lt_mara
WHERE matnr IN s_matnr.
CHECK lt_mara[] IS NOT INITIAL.
LOOP AT lt_mara ASSIGNING <lfs_mara>.
<lfs_mara>-tdname = <lfs_mara>-matnr.
ENDLOOP.
SELECT tdname clustr clustd
FROM stxl
INTO TABLE lt_stxl
FOR ALL ENTRIES IN lt_mara
WHERE relid = 'TX'
AND tdobject = 'MATERIAL'
AND tdname = lt_mara-tdname
AND tdid = 'GRUN'
AND tdspras = sy-langu.
LOOP AT lt_stxl ASSIGNING <lfs_stxl>.
REFRESH: lt_stxl_raw,
lt_tline.
ls_stxl_raw-clustr = <lfs_stxl>-clustr.
ls_stxl_raw-clustd = <lfs_stxl>-clustd.
APPEND ls_stxl_raw TO lt_stxl_raw.
IMPORT tline = lt_tline FROM INTERNAL TABLE lt_stxl_raw.
" Таблица lt_tline содержит длинный текст
ENDLOOP.
Неизвестный пользователь в комментариях подсказал, что есть ФМ READ_TEXT_TABLE для массового чтения текстов. ФМ присутствует в более новых версиях (в 7.40 есть, в 7.31 нет).
DATA:
lt_thead TYPE TABLE OF thead,
ls_thead LIKE LINE OF lt_thead,
lt_text TYPE text_lh.
CLEAR ls_thead.
ls_thead-tdobject = 'MATERIAL'.
ls_thead-tdname = lv_matnr_01.
ls_thead-tdid = 'GRUN'.
ls_thead-tdspras = sy-langu.
INSERT ls_thead INTO TABLE lt_thead.
ls_thead-tdname = lv_matnr_02.
INSERT ls_thead INTO TABLE lt_thead.
CALL FUNCTION 'READ_TEXT_TABLE'
* EXPORTING
* client_specified = ' '
* archive_handle = 0
* local_cat = ' '
IMPORTING
text_table = lt_text
* error_table =
TABLES
text_headers = lt_thead
EXCEPTIONS
wrong_access_to_archive = 1
OTHERS = 2.
IF sy-subrc EQ 0.
LOOP AT lt_text ASSIGNING FIELD-SYMBOL(<lfs_text>).
" <lfs_text>-lines содержит таблицу с текстом
ENDLOOP.
ENDIF.
Текстовые объекты можно найти в ракурсе ведения V_TTXOBI (таблица TTXOB), идентификаторы к текстовым объектам - в ракурсе V_TTXID_N или V_TTXIDI (таблица TTXID), заголовок к длинному тексту - в таблице STXH, сам длинный текст - в таблице STXL.
Основные текстовые объекты:
ANLA - основное средство
BELEG - финансовый документ
EBAN - заявка
EBANH - заголовок заявки
EKKO - заголовок документа закупки
EKPO - позиция документа закупки
MATERIAL - материал
Очень помогло, спасибо!
ОтветитьУдалитьПожалуйста!
УдалитьМассовое чтение текстов выполняется стандартным ФМом:
ОтветитьУдалитьREAD_TEXT_TABLE
Спасибо. Добавил.
Удалить