А, вот оно что. Это тебе в ABAP писать надо было, ну да ладно
Вот так я делал, намучался правда сильно, модуль недокументирован, но другого способа я не нашел.
ebeln - номер заказа на перемещение
ekpo_tab - внутренняя таблица позиций заказа
ekko_line - заголовок
ekpv_line - данные отгрузки
IT_KEY_LINE-PANUM = 1.
IT_KEY_LINE-VBOBJ = 'B'.
IT_KEY_LINE-VBTYP = 'V'.
IT_KEY_LINE-VBELN = ebeln.
*IT_KEY_LINE-POSNR
IT_KEY_LINE-ID = 1.
IT_KEY_LINE-KZAZU = 'X'.
IT_KEY_LINE-LEDAT = sy-datum.
IT_KEY_LINE-TABIX = 1.
*IT_KEY_LINE-ENQUE_VORG
IT_KEY_LINE-VSTEL = ekpv_line-vstel.
IT_KEY_LINE-KUNWE = ekpv_line-kunnr.
append IT_KEY_LINE to IT_KEY_TO_ENQUE.
*** Таблица IT_KOMDLGN
refresh IT_KOMDLGN.
loop at ekpo_tab.
clear IT_KOMDLGN_LINE.
move-corresponding ekko_line to IT_KOMDLGN_LINE.
move-corresponding ekpo_tab to IT_KOMDLGN_LINE.
move-corresponding ekpv_line to IT_KOMDLGN_LINE.
IT_KOMDLGN_LINE-LFART = 'NL'.
IT_KOMDLGN_LINE-DLVTP = 'TP'.
IT_KOMDLGN_LINE-VGBEL = ekpo_tab-EBELN.
IT_KOMDLGN_LINE-VGPOS = ekpo_tab-EBELP.
IT_KOMDLGN_LINE-LFIMG = ekpo_tab-MENGE.
IT_KOMDLGN_LINE-VGTYP = 'V'.
IT_KOMDLGN_LINE-KUNWE = ekpv_line-kunnr.
IT_KOMDLGN_LINE-VRKME = ekpo_tab-MEINS.
IT_KOMDLGN_LINE-LFDAT = POHEADER-VPER_START.
IT_KOMDLGN_LINE-WADAT = POHEADER-VPER_START.
IT_KOMDLGN_LINE-WADAT_IST = POHEADER-VPER_START.
IT_KOMDLGN_LINE-WERKS = ekko_line-RESWK.
* IT_KOMDLGN_LINE-VGTYP = 'V'.
* IT_KOMDLGN_LINE-VGTYP = 'V'.
append IT_KOMDLGN_LINE to IT_KOMDLGN.
endloop.
**** Создаем поставку
CALL FUNCTION 'SHP_VL10_DELIVERY_CREATE'
EXPORTING
IF_LEDAT = IF_LEDAT
IF_NUR_VORGABE_POS = 'X'
IT_KEY_TO_ENQUE = IT_KEY_TO_ENQUE
IT_KOMDLGN = IT_KOMDLGN
* IF_SEL_CRIT_IGNORE_ITEM = 'X'
* TABLES
* IT_VETVG =
* IT_LEDAT_RANGE =
* IT_VSBED_RANGE =
* IT_MATNR_RANGE =
* IT_MATKL_RANGE =
* IT_WAKTI_RANGE =
* IT_WERKS_RANGE =
* IT_LGORT_RANGE =
* IT_ABLAD_RANGE =
* IT_AULWE_RANGE =
* IT_WADAT_RANGE =
* IT_WAUHR_RANGE =
CHANGING
CX_SD_ORDER = CX_SD_ORDER
CT_VBSK_ALL = CT_VBSK_ALL
CT_VBLS = CT_VBLS
CT_KEY_LATE = CT_KEY_LATE
* CT_VORGABE_DATEN =
* CT_VORGABE_LATE =
.
**** Обрабатываем сообщения
read table CT_VBSK_ALL into VBSK_LINE index 1.
select single * from VBFS into VBFS_line
where SAMMG = VBSK_LINE-SAMMG
and MSGTY = 'E'.
**** Если были критические ошибки - записываем сообщение
if sy-subrc = 0.
endif.
Вот как-то так
