Здравствуйте!
Использую BAPI_PR_CHANGE для обновления заявки.
Были созданы структуры CI_EBANDB, CI_EBANDBX с пользовательскими(Z) полями. Поля в CI_EBANDBX имеют тип BAPIUPDATE.
Была создана реализация BADI BAPI_PR_CUST (пока что с пустыми методами)
BAPI_PR_CHANGE возвращает следующие ошибки:
1) MEPO 082 Purchase requisition still contains items with errors
2) BAPI 003 Instance 1000000045 of object type PurchaseRequisition could not be changed
3,4,5,6) Поле Z*** на закладке Данные клиента обязательно для заполнения
Ошибка возникла после заполнения структуры CI_EBANDBX
7) ME 083 Enter Document Type
Хотя поле ls_prheader-pr_type = 'NB'
8 ) ME 887 Error transferring ExtensionIn data for enhancement CI_EBANDB
9) MEPO 080 Processing status invalid
Основное беспокойство вызывают ошибки 7,8,9
Смотрел ноту 1490525 (помогает от ошибок 8,9), но эта нота исправлена во втором пакете поддержки SAP_APPL 605, а в системе стоит 8. Т.е. нота нерелевантна.
Мой код:
Code:
DATA: lt_pritemx TYPE TABLE OF BAPIMEREQITEMX.
DATA: ls_pritemx TYPE BAPIMEREQITEMX.
DATA: lt_pritem TYPE TABLE OF BAPIMEREQITEMIMP.
DATA: ls_pritem TYPE BAPIMEREQITEMIMP.
DATA: lt_extensionin TYPE TABLE OF BAPIPAREX.
DATA: ls_extensionin TYPE BAPIPAREX.
DATA: lt_return TYPE TABLE OF BAPIRET2.
data: im_value type bapi_te_mereqitem.
DATA: im_valuex type bapi_te_mereqitemx.
DATA: wa_bapi_te_item TYPE bapi_te_mereqitem.
DATA: ls_prheader TYPE BAPIMEREQHEADER.
DATA: ls_prheaderx TYPE BAPIMEREQHEADERX.
DATA: ls_pritem_save TYPE BAPIMEREQITEM .
DATA: lt_pritem_save TYPE TABLE OF BAPIMEREQITEM .
CALL FUNCTION 'BAPI_PR_GETDETAIL'
EXPORTING
number = gs_alv-banfn
IMPORTING
PRHEADER = ls_prheader
TABLES
PRITEM = lt_pritem_save
.
READ TABLE lt_pritem_save INTO ls_pritem_save
WITH KEY preq_item = gs_alv-bnfpo.
CLEAR ls_pritem.
MOVE-CORRESPONDING ls_pritem_save TO ls_pritem.
APPEND ls_pritem TO lt_pritem.
CLEAR ls_pritemx.
ls_pritemx-PREQ_ITEM = gs_alv-bnfpo.
ls_pritemx-PREQ_ITEMX = 'X'.
APPEND ls_pritemx TO lt_pritemx.
CLEAR im_valuex.
im_valuex-preq_item = gs_alv-bnfpo.
im_valuex-ZZSEISM = 'X'.
im_valuex-ZZSAFCLASS = 'X'.
im_valuex-ZZDKPP = 'X'.
im_valuex-ZZPRIORITY_DELIV = 'X'.
im_valuex-ZZOBJECT_FI = 'X'.
im_valuex-ZZDIR_USE = 'X'.
im_valuex-ZZCERTIF = 'X'.
im_valuex-ZZLOTNUMB = 'X'.
im_valuex-ZZDUALPURP = 'X'.
im_valuex-ZZRCOMP_YEAR = 'X'.
im_valuex-ZZSAFCLASS_PURP = 'X'.
im_valuex-ZZSUM = 'X'.
im_valuex-ZZDATE = 'X'.
im_valuex-ZZPRIOR = 'X'.
im_valuex-ZZPRCPUR = 'X'.
im_valuex-ZZSTART = 'X'.
CLEAR ls_extensionin.
MOVE 'BAPI_TE_MEREQITEMX' TO ls_extensionin-structure.
MOVE im_valuex TO ls_extensionin-valuepart1.
APPEND ls_extensionin TO lt_extensionin.
CLEAR ls_extensionin.
MOVE 'BAPI_TE_MEREQITEM' TO ls_extensionin-structure.
CLEAR im_value.
MOVE-CORRESPONDING eban TO im_value.
im_value-ZZPRCPUR = gs_alv-ZZPRCPUR .
im_value-ZZSTART = gs_alv-ZZSTART.
CALL METHOD cl_abap_container_utilities=>fill_container_c
EXPORTING
im_value = im_value
IMPORTING
ex_container = ls_extensionin-valuepart1
EXCEPTIONS
illegal_parameter_type = 0
OTHERS = 0.
APPEND ls_extensionin TO lt_extensionin.
CLEAR ls_prheader.
ls_prheader-preq_no = eban-banfn.
ls_prheader-pr_type = eban-bsart.
CLEAR ls_prheaderx.
ls_prheaderx-preq_no = 'X'.
ls_prheaderx-pr_type = 'X'.
ls_prheaderx-GENERAL_RELEASE = 'X'.
ls_prheaderx-CREATE_IND = 'X'.
ls_prheaderx-ITEM_INTVL = 'X'.
ls_prheaderx-LAST_ITEM = 'X'.
CALL FUNCTION 'BAPI_PR_CHANGE'
EXPORTING
number = gs_alv-banfn
prheader = ls_prheader
prheaderx = ls_prheaderx
TABLES
RETURN = lt_return
PRITEM = lt_pritem
PRITEMX = lt_pritemx
EXTENSIONIN = lt_extensionin
.