OlegDm написал(а):
Вот программка которая работает с подробным текстом. Переделать под загрузку - думаю не проблема:
Code:
REPORT ZPM_ASSIGN_LONGTEXT_TO_MAT MESSAGE-ID VX.
type-pools: vrm.
* Tables
TABLES:     mara,
            STXH,
            STXL,
            TTXOB,
            TTXID,
            TTXIT.
* Data Definition
DATA: BEGIN OF XTHEAD OCCURS 1.
        INCLUDE STRUCTURE THEAD.
DATA: END OF XTHEAD.
DATA: THEADER LIKE THEAD.
DATA  BEGIN OF TLINETAB OCCURS 10.
        INCLUDE STRUCTURE TLINE.
DATA: END OF TLINETAB.
DATA: SD_EDITOR_TITLE LIKE TTXIT-TDTEXT,
      SD_FUNCTION.
DATA: TEXT_IS_EXIST LIKE SY-TFILL.
data: t_txid_vrm type vrm_values,
      gs_txid_vrm type vrm_value.
data mat(18) type n.
data: gt_ttxit type standard table of ttxit with header line.
* Parameters
PARAMETERS: OBJEKT   LIKE THEAD-TDOBJECT DEFAULT 'MATERIAL'.
selection-screen begin of line.
selection-screen comment (33) text-001 for field txid.
parameters txid like THEAD-TDID obligatory as listbox visible length 30 default 'GRUN'.
selection-screen end of line.
PARAMETERS: SPRA   LIKE THEAD-TDSPRAS  DEFAULT SY-LANGU,
            NAME   LIKE THEAD-TDNAME   OBLIGATORY.
* at selection-screen output
at selection-screen output.
  perform create_txid.
  loop at screen.
    if screen-name = 'OBJEKT'.
      screen-input = 0.
      modify screen.
    endif.
  endloop.
end-of-selection.
* Processing
  REFRESH: XTHEAD,
           TLINETAB.
* Если текст.объект = MATERIAL, проверка есть ли такой материал
  perform material_is_exist.
* Проверка на существование текстового объекта (MATERIAL)
  perform text_object_is_exist.
* Проверка на существование ID для текстового объекта (MATERIAL)
  perform text_id_is_exist.
* Проверка введен ли подробный текст для соответствующего объекта/ID
  perform text_is_exist.
* Если текст не существует, то создание
  IF TEXT_IS_EXIST = 0.
    perform text_init.
* Если текст существует, то чтение
  ELSE.
    perform text_read.
  ENDIF.
* Редактирование текста
  perform text_edit_on_screen.
* Сохранение текста
  perform text_save.
*&---------------------------------------------------------------------*
*&      Form  text_object_is_exist
*&---------------------------------------------------------------------*
FORM text_object_is_exist .
  SELECT SINGLE * FROM TTXOB
                       WHERE TDOBJECT = OBJEKT.
  IF SY-SUBRC <> 0.
    MESSAGE A014 WITH OBJEKT.
  ENDIF.
ENDFORM.                    " text_object_is_exist
*&---------------------------------------------------------------------*
*&      Form  text_id_is_exist
*&---------------------------------------------------------------------*
FORM text_id_is_exist .
  SELECT SINGLE * FROM TTXID
                       WHERE TDOBJECT = OBJEKT
                         AND TDID     = TXID.
  IF SY-SUBRC <> 0.
    MESSAGE A020 WITH TXID OBJEKT.
  ELSE.
    SELECT SINGLE * FROM TTXIT
                         WHERE TDSPRAS  = SY-LANGU
                           AND TDOBJECT = OBJEKT
                           AND TDID     = TXID.
    SD_EDITOR_TITLE = TTXIT-TDTEXT.
  ENDIF.
  IF NAME CA '*' OR NAME CA '&'.
    MESSAGE A021 WITH '&' '*'.
  ENDIF.
ENDFORM.                    " text_id_is_exist
*&---------------------------------------------------------------------*
*&      Form  text_is_exist
*&---------------------------------------------------------------------*
FORM text_is_exist .
  CALL FUNCTION 'SELECT_TEXT'
    EXPORTING
      ID         = TXID
      LANGUAGE   = SPRA
      NAME       = NAME
      OBJECT     = OBJEKT
    IMPORTING
      ENTRIES    = TEXT_IS_EXIST
    TABLES
      SELECTIONS = XTHEAD.
ENDFORM.                    " text_is_exist
*&---------------------------------------------------------------------*
*&      Form  text_init
*&---------------------------------------------------------------------*
FORM text_init .
  CALL FUNCTION 'INIT_TEXT'
    EXPORTING
      ID       = TXID
      LANGUAGE = SPRA
      NAME     = NAME
      OBJECT   = OBJEKT
    IMPORTING
      HEADER   = THEADER
    TABLES
      LINES    = TLINETAB
    EXCEPTIONS
      ID       = 01
      LANGUAGE = 02
      NAME     = 03
      OBJECT   = 04.
  IF SY-SUBRC <> 0.
    MESSAGE A017.
  ENDIF.
ENDFORM.                    " text_init
*&---------------------------------------------------------------------*
*&      Form  text_read
*&---------------------------------------------------------------------*
FORM text_read .
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      CLIENT                  = SY-MANDT
      ID                      = TXID
      LANGUAGE                = SPRA
      NAME                    = NAME
      OBJECT                  = OBJEKT
    IMPORTING
      HEADER                  = THEADER
    TABLES
      LINES                   = TLINETAB
    EXCEPTIONS
      ID                      = 01
      LANGUAGE                = 02
      NAME                    = 03
      NOT_FOUND               = 04
      OBJECT                  = 05
      REFERENCE_CHECK         = 06
      WRONG_ACCESS_TO_ARCHIVE = 07.
  IF SY-SUBRC <> 0.
    MESSAGE A017.
  ENDIF.
ENDFORM.                    " text_read
*&---------------------------------------------------------------------*
*&      Form  text_edit_on_screen
*&---------------------------------------------------------------------*
FORM text_edit_on_screen .
  CALL FUNCTION 'EDIT_TEXT'
    EXPORTING
      DISPLAY      = ' '
      EDITOR_TITLE = SD_EDITOR_TITLE
      HEADER       = THEADER
      SAVE         = 'X'
    IMPORTING
      FUNCTION     = SD_FUNCTION
      NEWHEADER    = THEADER
    TABLES
      LINES        = TLINETAB
    EXCEPTIONS
      ID           = 01
      LANGUAGE     = 02
      LINESIZE     = 03
      NAME         = 04
      OBJECT       = 05.
  IF SY-SUBRC <> 0.
    MESSAGE A017.
  ENDIF.
ENDFORM.                    " text_edit_on_screen
*&---------------------------------------------------------------------*
*&      Form  text_save
*&---------------------------------------------------------------------*
FORM text_save .
  CALL FUNCTION 'SAVE_TEXT'
    EXPORTING
      HEADER          = THEADER
      INSERT          = ' '
      SAVEMODE_DIRECT = 'X'
    IMPORTING
      FUNCTION        = SD_FUNCTION
      NEWHEADER       = THEADER
    TABLES
      LINES           = TLINETAB
    EXCEPTIONS
      ID              = 01
      LANGUAGE        = 02
      NAME            = 03
      OBJECT          = 04.
  IF SY-SUBRC <> 0.
    MESSAGE A017.
  ENDIF.
ENDFORM.                    " text_save
*&---------------------------------------------------------------------*
*&      Form  create_txid
*&---------------------------------------------------------------------*
FORM create_txid .
  refresh: t_txid_vrm.
  if gt_ttxit[] is initial.
    select * into table gt_ttxit from ttxit
                                where tdspras  = sy-langu
                                  and tdobject = objekt.
    if sy-subrc = 0.
      loop at gt_ttxit.
        clear: gs_txid_vrm.
        gs_txid_vrm-key  = gt_ttxit-tdid.
        gs_txid_vrm-text = gt_ttxit-tdtext.
        append gs_txid_vrm to t_txid_vrm.
      endloop.
    endif.
  endif.
  call function 'VRM_SET_VALUES'
    EXPORTING
      id     = 'TXID'
      values = t_txid_vrm.
ENDFORM.                    " create_txid
*&---------------------------------------------------------------------*
*&      Form  material_is_exist
*&---------------------------------------------------------------------*
FORM material_is_exist .
  if objekt eq 'MATERIAL'.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = name
      IMPORTING
        OUTPUT = mat.
    move mat to name.
    select single * from mara where matnr eq mat.
    if sy-subrc ne 0.
      message e305(m3) with mat.
      exit.
    endif.
  endif.
ENDFORM.                    " material_is_exist
Спасибо за комменты! Выкрутился по-другому: написал загрузку с экселя таблицы из 2ух полей (номер материала и длинное имя), а затем этим кодом в цикле проставил материалам длинные наименования:
DATA:lv_header TYPE thead,
                      lv_xerfmg TYPE string,
                      lt_lines TYPE STANDARD TABLE OF tline WITH HEADER LINE.
                      lv_header-tdobject = 'MATERIAL'.
                      lv_header-tdname = wa_record-f1.  "Код материала
                      lv_header-tdid  = 'GRUN'.
                      lv_header-tdspras = 'R'.
                    lt_lines-tdline = wa_record-f2.   "Длинное наименование материала
                    APPEND lt_lines.
                    CALL FUNCTION 'CREATE_TEXT'
                        EXPORTING
                          fid       = lv_header-tdid
                          flanguage = lv_header-tdspras
                          fname     = lv_header-tdname
                          fobject   = lv_header-tdobject
                        TABLES
                          flines    = lt_lines[].
вроде работает, но не знаю с какой скоростью будет грузиться для нескольких десятков тысяч позиций материалов.....