Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Uukrul от Сентябрь 06, 2007, 04:02:28 pm
-
Ну в общем если не очень подробно то для изменения заказов есть ФМ BAPI_PO_CHANGE
Примеры объявления для этого ФМ параметров могут быть в таком виде:
DATA: bapi_number LIKE bapimepoheader-po_number VALUE space.
DATA: po_header LIKE bapimepoheader,
po_headerx LIKE bapimepoheaderx,
po_bapiret2 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,
po_addr LIKE bapimepoaddrdelivery OCCURS 5 WITH HEADER LINE,
po_extensionin LIKE bapiparex OCCURS 5 WITH HEADER LINE,
po_extensionout LIKE bapiparex OCCURS 5 WITH HEADER LINE,
po_textheader LIKE bapimepotextheader OCCURS 0 WITH HEADER LINE.
Собственно пример вызова ФМ типа так.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = ph_ebeln
poheader = po_header
poheaderx = po_headerx
* POADDRVENDOR =
* TESTRUN =
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =
* NO_PRICE_FROM_PO =
* IMPORTING
* EXPHEADER =
TABLES
return = po_bapiret2
poitem = po_items
poitemx = po_itemsx
* POADDRDELIVERY =
poschedule = po_schedule
poschedulex = po_schedulex
poaccount = po_account
* POACCOUNTPROFITSEGMENT =
poaccountx = po_accountx
* POCONDHEADER =
* POCONDHEADERX =
* POCOND =
* POCONDX =
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
extensionin = po_extensionin.
* extensionout =
* potextheader =
* POTEXTITEM =
* POPARTNER =
Параметры и поля описаны в структурах, на что следует обратить внимание, если вы изменили какое-то поле в структуре po_header, например в заголовке заказа изменили дату начала и конца действия договора.
po_header-vper_start = sy-datum.
po_header-vper_end = sy-datum+100.
То обязательно в зеркальной структуре po_headerx, для соответствующих полей поставьте = X.
po_headerx-vper_start = 'X'.
po_headerx-vper_end = 'X'.
Ну и COMMIT WORK после вызова, ну если хотите чтобы оно таки действительно сохранилось. Кстати, результат работы смотрим в структуре po_bapiret2.
-
Доброго времени суток Uukrul. Как раз мне этот БАПИ будет полезен для того чтобы изменить все заказы на поставку и поставить в них галочку Инд. последнего счета-фактуры, конечно же у все тех у кого были выписаны счета фактур. Пытаюсь сделать для проверки один заказ
tables: bapimepoheader,
bapimepoitem,
sscrfields.
data:
ret2 like bapiret2 occurs 50 with header line,
it_bapi like bapimepoitem occurs 0 with header line,
it_bapi2 like BAPIMEPOITEMX occurs 0 with header line.
bapimepoheader-po_number = '0000600121'.
it_bapi-po_item = '0010'.
it_bapi-final_inv = 'X'.
it_bapi2-PO_ITEM = 'X'.
it_bapi2-final_inv = 'X'.
call function 'BAPI_PO_CHANGE'
exporting
purchaseorder = bapimepoheader-po_number
* POHEADER =
* POHEADERX =
* IMPORTING
* EXPHEADER =
* EXPPOEXPIMPHEADER =
TABLES
RETURN = ret2
POITEM = it_bapi
POITEMX = it_bapi2.
IF ret2-type = space.
COMMIT WORK AND WAIT.
ENDIF.
Но изменения в заказе не происходят. Смотрю в отладчике табличку ret2 пишет что Данные не были изменены, тип сообщения S 06 022 Данные не были изменены, т.е. эта даже не ошибка, а просто информационное сообщение о том что ни каких действий над заказом не делались. Что я делаю не так не пойму?
-
Предыдущий вопрос вроде бы снимается, поскольку вроде бы удалось запустить и изменить заказ на поставку. Спасибо за полезный ФМ