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[].
вроде работает, но не знаю с какой скоростью будет грузиться для нескольких десятков тысяч позиций материалов.....