Забавно, нашел на просторах интернета документ "Using-bapi Outb Delivery Confirm Dec-cross-hu" где аж на 22 страницы автор объясняет, почему поставленную задачу решить ему не удалось:
https://ru.scribd.com/doc/19837595/Usin ... c-cross-huДля истории - итоговое решение выглядит так:
1. Вызов BAPI.
Важно поле HANDLE у нашей ЕО верхнего уровня (передается в таблицу HANDLING_UNIT_HEADER_CROSS).
При вызове упаковки следующей поставки в ту же ЕО надо указывать тот же handle
Генерацию HANDLE сделал так: l_handle = cl_system_uuid=>create_uuid_c22_static( ).
2. Хак ФМ V51S_CREATE_HU_HEADER, чтобы получить результат lf_x_hu_active= X в строке 182 .
Например, в самом начале читаем переменную из памяти и если она установлена, заполняем поле IS_HU_MM-LGNUM кодом склада, для которого активирован EWM.
Код к пункту 1:
Code:
FORM pack_dlv USING it_pack type ZIMK_TTMEO_PACKING_2_PALLET_V2
i_pack_matnr type matnr
iv_delivery type vbeln_vl
CHANGING CT_BALMI type BALMI_TAB.
*готовим данные для bapi
types: begin of ts_pal,
exidv type vekp-exidv,
handle type vekp-handle,
exidv2 TYPE vekp-exidv2,
END OF ts_pal.
DATA:
* wa_items TYPE zewms_packpost_items,
* wa_huheader TYPE zewms_packpost_huheader,
* wa_huitem TYPE zewms_packpost_huitem,
ls_header_data TYPE bapiobdlvhdrcon,
ls_header_control TYPE bapiobdlvhdrctrlcon,
ls_tech_control TYPE bapidlvcontrol,
ls_header_data_spl TYPE /spe/bapiobdlvhdrconf,
ls_header_control_spl TYPE /spe/bapiobdlvhdrctrlcon,
"lt_item_data TYPE TABLE OF bapiobdlvitemcon,
"wa_item_data TYPE bapiobdlvitemcon,
"lt_item_control TYPE TABLE OF bapiobdlvitemctrlcon,
"wa_item_control TYPE bapiobdlvitemctrlcon,
lt_unit_header TYPE TABLE OF bapidlvhdunhdr,
wa_unit_header TYPE bapidlvhdunhdr,
lt_unit_item TYPE TABLE OF bapidlvhdunitm,
wa_unit_item TYPE bapidlvhdunitm,
"lt_marm TYPE TABLE OF marm,
"wa_marm TYPE marm,
lv_logsys TYPE tbdls-logsys,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
ls_pal type ts_pal,
lt_pal type HASHED TABLE OF ts_pal WITH UNIQUE KEY exidv,
ls_hu_cross type BAPIDLVHDUNHDR,
lt_hu_cross type table of BAPIDLVHDUNHDR,
l_pack_matnr_meo type matnr,
LT_CURR_HEADER type table of BAPIHUHEADER,
LT_CURR_ITEM type table of BAPIHUITEM,
LT_HUOBJECTS type TABLE OF BAPIHUOBJECT
.
l_pack_matnr_meo = zcl_cmn_param=>get_param_single_value( im_parnr = 'ZIMK_PACKING_MAT_MEO' im_seqnr = 1 ).
*читаем текущую упаковку поставки в ЕО нижнего уровня
APPEND INITIAL LINE TO LT_HUOBJECTS ASSIGNING FIELD-SYMBOL(<huobj>).
<huobj>-OBJECT = '01'.
<huobj>-OBJKEY = iv_delivery.
CALL FUNCTION 'BAPI_HU_GETLIST'
EXPORTING
* NOTEXT = ' '
ONLYKEYS = ''
TABLES
* HUNUMBERS =
HUOBJECTS = LT_HUOBJECTS
* HUKEY =
HUHEADER = LT_CURR_HEADER
HUITEM = LT_CURR_ITEM
* HUHISTORY =
* NOTFOUNDHUS =
* HIGHESTLEVEL =
RETURN = LT_RETURN.
.
loop at LT_CURR_HEADER ASSIGNING FIELD-SYMBOL(<curr_header>).
*таблица заголовков Ео нижнего уровня
clear wa_unit_header.
wa_unit_header-deliv_numb = iv_delivery.
wa_unit_header-hdl_unit_exid = <curr_header>-HU_EXID.
wa_unit_header-hdl_unit_exid_ty = 'F'.
wa_unit_header-ship_mat = <curr_header>-PACK_MAT.
APPEND wa_unit_header TO lt_unit_header.
endloop.
LOOP at LT_CURR_ITEM ASSIGNING FIELD-SYMBOL(<curr_item>).
*таблица упаковки позиций поставки в ЕО нижнего уровня
clear wa_unit_item.
wa_unit_item-hdl_unit_exid_into = <curr_item>-HU_EXID.
wa_unit_item-deliv_numb = <curr_item>-OBJECT_DOC.
wa_unit_item-deliv_item = <curr_item>-OBJ_ITEM_NUMBER.
wa_unit_item-pack_qty = <curr_item>-PACK_QTY.
wa_unit_item-sales_unit = <curr_item>-BASE_UNIT_QTY.
wa_unit_item-material = <curr_item>-MATERIAL.
wa_unit_item-hu_item_type = <curr_item>-HU_ITEM_TYPE.
APPEND wa_unit_item TO lt_unit_item.
endloop.
LOOP AT it_pack ASSIGNING FIELD-SYMBOL(<pack>).
*таблица упаковки ЕО нижнего уровня в cross-delivery HU
clear wa_unit_item.
wa_unit_item-hdl_unit_exid_into = <pack>-EXIDV_PAL.
wa_unit_item-hdl_unit_exid = <pack>-EXIDV_MEO.
wa_unit_item-deliv_numb = <pack>-vbeln_vl.
"wa_unit_item-deliv_item = <ordp>-posnr_vl.
" wa_unit_item-pack_qty = <pack_pos>-kwmeng.
"wa_unit_item-sales_unit = <pack_pos>-vrkme.
"wa_unit_item-material = <pack_pos>-matnr.
wa_unit_item-hu_item_type = '3'.
APPEND wa_unit_item TO lt_unit_item.
*таблица cross-delivery HU
clear ls_pal.
ls_pal-EXIDV = <pack>-EXIDV_PAL.
ls_pal-HANDLE = <pack>-HANDLE.
ls_pal-exidv2 = <pack>-NUM12_PAL.
INSERT ls_pal into TABLE lt_pal.
ENDLOOP.
* IF sy-subrc <> 0.
* MESSAGE e000(zim_cockpit) WITH 'Пустой список позиций' INTO sy-lisel.
* zcl_utils_sbal=>appe_syst_balmi( EXPORTING level = '3' CHANGING balmi = ct_balmi ).
* RETURN.
* ENDIF.
LOOP AT lt_pal ASSIGNING FIELD-SYMBOL(<pal>).
clear ls_hu_cross.
ls_hu_cross-deliv_numb = iv_delivery.
ls_hu_cross-hdl_unit_exid = <pal>-EXIDV.
ls_hu_cross-ZZEXIDV2 = <pal>-EXIDV2.
ls_hu_cross-HDL_UNIT_GUID = <pal>-HANDLE.
ls_hu_cross-hdl_unit_exid_ty = 'F'.
ls_hu_cross-ship_mat = i_pack_matnr.
APPEND ls_hu_cross TO lt_hu_cross.
ENDLOOP.
ls_header_data-deliv_numb = iv_delivery.
ls_header_control-deliv_numb = iv_delivery.
ls_header_control-ship_cond_flg = 'X'.
CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
IMPORTING
own_logical_system = lv_logsys
EXCEPTIONS
own_logical_system_not_defined = 0.
ls_tech_control-recv_sys = lv_logsys.
ls_header_data_spl-deliv_numb = iv_delivery.
ls_header_data_spl-hu_update_request = 'A'.
ls_header_control_spl-deliv_numb = iv_delivery.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'
EXPORTING
header_data = ls_header_data
header_control = ls_header_control
delivery = iv_delivery
techn_control = ls_tech_control
header_data_spl = ls_header_data_spl
header_control_spl = ls_header_control_spl
TABLES
" item_data = lt_item_data
" item_control = lt_item_control
handling_unit_header = lt_unit_header
handling_unit_item = lt_unit_item
HANDLING_UNIT_HEADER_CROSS = lt_hu_cross
return = lt_return.
LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'.
EXIT.
ENDLOOP.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = ls_return.
*сообщение об удаче
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*сообщение об ошибке
endif.
ENDFORM.