Пример создания заказа ММ. В качестве данных для начальной работы берется информация из файла. Пример использования данной BAPI схематичный и простой. В случае если кому будут какие либо непонятки по заполнению каких-то особенных данных при вызове данного ФМ, спрашиваем, не стесняемся... будет время ответят. Пример работает путем получения части данных с экрана, а часть загружается из файла данных. Пример файла в атачменте, остальное ясно из кода.
*&---------------------------------------------------------------------*
*& Report YUUK_ME21N
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT yuuk_me21n MESSAGE-ID yy.
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
PARAMETERS: p_lifnr LIKE ekko-lifnr DEFAULT '5200',
p_werks LIKE mseg-werks DEFAULT '1200',
p_lgort LIKE mseg-lgort DEFAULT '0088'.
SELECTION-SCREEN END OF BLOCK block1.
PARAMETERS: p_file LIKE rlgrap-filename DEFAULT 'C:\text_ord.txt'.
DATA: BEGIN OF lt_tab OCCURS 10,
matnr LIKE ekpo-matnr,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
net_price LIKE ekpo-netwr,
END OF lt_tab.
DATA: l_bukrs LIKE ekko-bukrs,
s_datum(10) TYPE c,
bapi_number LIKE bapimepoheader-po_number VALUE space,
po_header LIKE bapimepoheader,
po_headerx LIKE bapimepoheaderx,
po_return LIKE bapiret2 OCCURS 5 WITH HEADER LINE,
po_items LIKE bapimepoitem OCCURS 5 WITH HEADER LINE,
po_itemsx LIKE bapimepoitemx OCCURS 5 WITH HEADER LINE,
po_schedule LIKE bapimeposchedule OCCURS 5 WITH HEADER LINE,
po_schedulex LIKE bapimeposchedulx OCCURS 5 WITH HEADER LINE,
po_account LIKE bapimepoaccount OCCURS 5 WITH HEADER LINE,
po_accountx LIKE bapimepoaccountx OCCURS 5 WITH HEADER LINE.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION.
*&---------------------------------------------------------------------*
START-OF-SELECTION.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = p_file
filetype = 'DAT'
TABLES
data_tab = lt_tab
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
no_authority = 10
OTHERS = 11.
IF sy-subrc <> 0. MESSAGE i000 WITH sy-subrc. ENDIF.
CLEAR: po_items[], po_schedule[], po_account[],
po_itemsx[], po_schedulex[], po_accountx[].
* Код БЕ по коду завода
CALL FUNCTION 'CJCK_CHECK_BUKRS_WERKS'
EXPORTING
i_bukrs = space
i_werks = p_werks
IMPORTING
e_bukrs = l_bukrs.
CLEAR po_header.
po_header-comp_code = l_bukrs. "БЕ
po_header-doc_type = 'NB'. "Вид документа закупки
po_header-creat_date = sy-datum. "Дата создания записи
po_header-created_by = sy-uname. "Имя исполнителя
po_header-vendor = p_lifnr. "Номер счета поставщика
po_header-langu = sy-langu. "Код языка
po_header-purch_org = '1000'. "Закупочная организация
po_header-pur_group = '004'. "Группа закупок
po_header-currency = 'USD'. "Код валюты
po_header-doc_date = sy-datum. "Дата документа закупки
po_header-ref_1 = 'REF 1'. "ваш код
po_header-our_ref = 'REF 2'. "наш номер
CLEAR po_headerx.
po_headerx-comp_code = 'X'.
po_headerx-doc_type = 'X'.
po_headerx-creat_date = 'X'.
po_headerx-created_by = 'X'.
po_headerx-vendor = 'X'.
po_headerx-langu = 'X'.
po_headerx-purch_org = 'X'.
po_headerx-pur_group = 'X'.
po_headerx-currency = 'X'.
po_headerx-doc_date = 'X'.
po_headerx-ref_1 = 'X'.
po_headerx-our_ref = 'X'.
LOOP AT lt_tab.
* Позиция,поставка,контировка
CLEAR po_items.
po_items-po_item = sy-tabix * 10.
po_items-material = lt_tab-matnr.
po_items-plant = p_werks.
po_items-stge_loc = p_lgort.
po_items-quantity = lt_tab-menge. "Объем заказа на поставку
po_items-po_unit = lt_tab-meins. "ЕИ заказа на поставку
po_items-qual_insp = ' '. "Вид запаса
po_items-item_cat = ' '. "Тип позиции
po_items-net_price = lt_tab-net_price. "Цена за единицу
po_items-info_rec = space.
APPEND po_items.
CLEAR po_itemsx.
po_itemsx-po_item = sy-tabix * 10.
po_itemsx-po_itemx = 'X'.
po_itemsx-material = 'X'.
po_itemsx-plant = 'X'.
po_itemsx-stge_loc = 'X'.
po_itemsx-quantity = 'X'.
po_itemsx-po_unit = 'X'.
po_itemsx-qual_insp = 'X'.
po_itemsx-item_cat = 'X'.
po_itemsx-net_price = 'X'. "Цена за единицу
po_itemsx-info_rec = 'X'.
APPEND po_itemsx.
CLEAR po_schedule.
WRITE sy-datum TO s_datum DD/MM/YYYY.
po_schedule-po_item = sy-tabix * 10.
po_schedule-del_datcat_ext = 'D'. "Тип даты поставки
po_schedule-delivery_date = s_datum. "Дата поставки
po_schedule-quantity = lt_tab-menge.
APPEND po_schedule.
CLEAR po_schedulex.
po_schedulex-po_item = sy-tabix * 10.
po_schedulex-del_datcat_ext = 'X'.
po_schedulex-delivery_date = 'X'.
po_schedulex-quantity = 'X'.
APPEND po_schedulex.
ENDLOOP.
CLEAR po_return[].
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = po_header
poheaderx = po_headerx
IMPORTING
exppurchaseorder = bapi_number
TABLES
return = po_return
poitem = po_items
poitemx = po_itemsx
poschedule = po_schedule
poschedulex = po_schedulex.
LOOP AT po_return WHERE type = 'E' OR type = 'A'.
ROLLBACK WORK.
MESSAGE ID po_return-id TYPE po_return-type NUMBER po_return-number
WITH po_return-message_v1
po_return-message_v2
po_return-message_v3
po_return-message_v4.
ENDLOOP.
COMMIT WORK AND WAIT.
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN ON VALUE-REQUEST
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM query_filename USING p_file.
*&---------------------------------------------------------------------*
*& Form query_filename
*&---------------------------------------------------------------------*
* Диалог выбора файла
*----------------------------------------------------------------------*
FORM query_filename USING p_file LIKE rlgrap-filename.
CLEAR p_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = p_file
def_path = 'C:\'
mask = ',*.*,*.*.'
mode = '0'
title = 'Позиции заказа'
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 01
no_batch = 02
selection_cancel = 03
selection_error = 04.
ENDFORM. " query_filename
Вообще-то данный пример тут помещен из-за одной хитрости, не знаю правда может это для меня была хитрость и новость (а так же для ряда товарищей), но если вы сами попытаетесь использовать данную BAPI, то обнаружите, что цена нетто, позиции материала из файла всегда замещается ценой из инфо-записи закупки (если инфо-записи ведутся в системе, а это обычно так и есть) и чтобы не делалось система всегда жестко переписывает переданную в функции цену. Так вот чтобы этого не происходило и цена действительно бралась из файла, путем ночного бодания с данной бапишкой одного хорошего человека, выяснилось, что нужно обязательно передать в позиции заказа следующую комбинацию полей:
po_items-info_rec = space. "Номер инфо-записи
и
po_itemsx-info_rec = 'X'. "Признак обновления поля
И вот только при этой комбинации, цена нетто будет действительно взята так которую вы зададите при вызове этой BAPI (в данном случае цена из файла данных). В других случаях система автоматически перезапишет эту цену, данными из инфо-записи.