SAPфорум.RU
https://www.sapboard.ru/forum/

Можно ли упаковать в одну ЕО две другие ЕО из разных поставок до создания транспортировки?
https://www.sapboard.ru/forum/viewtopic.php?f=95&t=97749
Страница 1 из 1

Автор:  LKU [ Пн, июл 08 2019, 12:19 ]
Заголовок сообщения:  Можно ли упаковать в одну ЕО две другие ЕО из разных поставок до создания транспортировки?

Коллеги, всем доброго дня.

Бизнес-процесс такой:
1. Есть заказы на отгрузки (sd-заказы) и к ним исходящие поставки
2. Поставки упаковываем в коробки (создаем соответствующую ЕО в функциональности упаковки исходящей поставки)
3. Коробки от двух разных поставок упаковываем на одну паллету (в одну ЕО верхнего уровня).
4. Несколько разных паллет отгружаем в машине (хотим отразить документом "транспортировка")

Вопрос в том как сделать шаг 3 отдельно от шага 4
Сейчас я вижу только способ выполнить их вместе - создать транспортировку, включить в нее две поставки и в функционале упаковки упаковать в Ео верхнего уровня.

Хотелось бы уметь упаковку на паллеты делать ДО создания транспортировок в отдельной функциональности, а потом в транспортировку добавлять уже упакованные на ЕО-паллеты поставки. Возможно ли это и если да,то как сделать?

Автор:  LKU [ Пн, июл 08 2019, 17:59 ]
Заголовок сообщения:  Re: Можно ли упаковать в одну ЕО две другие ЕО из разных поставок до создания транспортировки?

Как выяснилось, требуемую функциональность SAP реализовал для интеграции EWM с ERP, под названием cross delivery handling unit.
В результате в таблице vekp создается ЕО со значением VPOBJ = 21 (это тот самый cross delivery HU).

Без EWM в ERP удалось в первом приближении повторить эту логику с использованием ФМ BAPI_OUTB_DELIVERY_CONFIRM_DEC (заполняем HANDLING_UNIT_HEADER, HANDLING_UNIT_ITEM и HANDLING_UNIT_HEADER_CROSS ) и подмены в дебагере lf_x_hu_active= X в строке 182 ФМ V51S_CREATE_HU_HEADER.

Автор:  LKU [ Пн, сен 09 2019, 11:40 ]
Заголовок сообщения:  Re: Можно ли упаковать в одну ЕО две другие ЕО из разных поставок до создания транспортировки?

Забавно, нашел на просторах интернета документ "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.


Автор:  DED_MOROZ [ Пн, сен 09 2019, 12:05 ]
Заголовок сообщения:  Re: Можно ли упаковать в одну ЕО две другие ЕО из разных поставок до создания транспортировки?

Молодец!
Ну все, ДМЦ будет счастлив :)

Автор:  Kengur [ Пн, сен 09 2019, 15:26 ]
Заголовок сообщения:  Re: Можно ли упаковать в одну ЕО две другие ЕО из разных поставок до создания транспортировки?

А просто завернуть один HU в другой?

Автор:  LKU [ Вт, сен 10 2019, 12:58 ]
Заголовок сообщения:  Re: Можно ли упаковать в одну ЕО две другие ЕО из разных поставок до создания транспортировки?

Kengur написал(а):
А просто завернуть один HU в другой?

Можно просто создать ЕО верхнего уровня типа 12 (свободная ЕО) и положить туда ЕО нижнего уровня из двух поставок через бапи BAPI_HU_CREATE.
И в отличие от VL02N стандарт в этот момент даже не ругнется.
И даже ОМ и сторно к поставке провести будет можно.

А вот повторный ОМ к поставке - уже извините, будет дамп в стандарте.
И при попытке провалиться в просмотр этой ЕО из интерфейса упаковки транспортировки тоже будет дамп в стандарте.
Это только то что нашлось при беглом тестировании..

Автор:  Kengur [ Ср, сен 11 2019, 09:29 ]
Заголовок сообщения:  Re: Можно ли упаковать в одну ЕО две другие ЕО из разных поставок до создания транспортировки?

А как выглядит дамп?

Автор:  LKU [ Ср, сен 11 2019, 10:40 ]
Заголовок сообщения:  Re: Можно ли упаковать в одну ЕО две другие ЕО из разных поставок до создания транспортировки?

"Field symbol has not been assigned yet."
ФМ HU_CONSISTENZ_CHECK, строка 205
Code:
IF <vekp>-kzunt IS INITIAL.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/