下面介紹SAP SD的銷售訂單外向交貨單按批次拆分(Batch-Managed),包括前台操作和調用bapi ‘BAPI_OUTB_DELIVERY_CHANGE’ 實現。
1, 前台操作
按批次拆分操作:
外向交貨單Tcode: VL02n
選中10行項目,點擊‘批次拆分’按鈕,填寫批次后,回車,會將項目號和庫位自動帶出(視具體配置而定)
點保存后,原來航項目10數量自動變更,變成0.
刪除批次拆分操作:
選中剛才創建的拆分項目90001和90002,點刪除按鈕。
10行項目數量會自動更新,重新變成3
2, BAPI實現
完整代碼:
其中
LW_ITEM_DATA-USEHIERITM = '1'.
查看了domain中的固定值:‘1’代表Batch Subitem
REPORT ztest_bapi_sobitch. PARAMETERS p_vbeln TYPE vbeln_vl DEFAULT '8000003765'. "測試批次拆分 DATA: lit_header_partner LIKE TABLE OF bapidlvpartnerchg , "交貨:合作伙伴更改 lit_header_deadlines LIKE TABLE OF bapidlvdeadln , "交貨截止日期 lit_item_data LIKE TABLE OF bapiobdlvitemchg , "更改外向交貨揀配數據項目等級 lit_item_control LIKE TABLE OF bapiobdlvitemctrlchg , "外向交貨項目級別控制數據 lit_ret LIKE TABLE OF bapiret2 WITH HEADER LINE , "返回參數 lit_item_data_spl LIKE TABLE OF /spe/bapiobdlvitemchg , "更改向外交貨揀配數據項目等級(SPE) is_header_data LIKE bapiobdlvhdrchg , "更改外向交貨揀配數據表頭等級 is_header_control LIKE bapiobdlvhdrctrlchg , "外向交貨標題級別控制數據 iv_delivery LIKE bapiobdlvhdrchg-deliv_numb . "交貨 DATA: lwa_header_partner LIKE bapidlvpartnerchg , "交貨:合作伙伴更改 lwa_header_deadlines LIKE bapidlvdeadln , "交貨截止日期 lwa_item_data LIKE bapiobdlvitemchg , "更改外向交貨揀配數據項目等級 lwa_item_control LIKE bapiobdlvitemctrlchg , "外向交貨項目級別控制數據 lwa_return LIKE bapiret2 . "返回參數 DATA: l_techn_control TYPE bapidlvcontrol. DATA: ls_item TYPE bapiobdlvitemchg, ls_item_t TYPE bapiobdlvitemchg, ls_item_control TYPE bapiobdlvitemctrlchg, ls_deadlines TYPE bapidlvdeadln. iv_delivery = p_vbeln. "交貨單號 "頭信息 is_header_data-deliv_numb = p_vbeln. "交貨單號 is_header_control-deliv_numb = p_vbeln. "修改原10行項目數量 CLEAR lwa_item_data. lwa_item_data-deliv_numb = p_vbeln. lwa_item_data-deliv_item = 10. "原行項目 lwa_item_data-dlv_qty = 1. lwa_item_data-dlv_qty_imunit = 1. lwa_item_data-base_uom = 'TO'. "基本單位 lwa_item_data-sales_unit = 'TO'. "銷售單位 lwa_item_data-fact_unit_nom = 1. "銷售數量轉換成SKU的分子(因子) lwa_item_data-fact_unit_denom = 1. "銷售數量轉換為 SKU 的值(除數) APPEND lwa_item_data TO lit_item_data . CLEAR lwa_item_control. lwa_item_control-deliv_numb = p_vbeln. lwa_item_control-deliv_item = 10. "原行項目 lwa_item_control-chg_delqty = 'X'. "數量修改標志 APPEND lwa_item_control TO lit_item_control. "新拆分的批次 CLEAR lwa_item_data. lwa_item_data-deliv_numb = p_vbeln. lwa_item_data-deliv_item = '900001'. "拆分后的新行項目 lwa_item_data-hieraritem = 10. "上級行項目 lwa_item_data-batch = 'YS91480001'. "新批次 lwa_item_data-dlv_qty = 1. "自己重新計算拆分后的數量, lwa_item_data-dlv_qty_imunit = 1. lwa_item_data-fact_unit_nom = 1. "銷售數量轉換成SKU的分子(因子) lwa_item_data-fact_unit_denom = 1. "銷售數量轉換為 SKU 的值(除數) lwa_item_data-base_uom = 'TO'. "基本單位 lwa_item_data-sales_unit = 'TO'. "銷售單位 lwa_item_data-usehieritm = '1'. APPEND lwa_item_data TO lit_item_data. CLEAR lwa_item_data. lwa_item_data-deliv_numb = p_vbeln. lwa_item_data-deliv_item = '900002'. "拆分后的新行項目 lwa_item_data-hieraritem = 10. "上級行項目 lwa_item_data-batch = 'YS91480002'."新批次 lwa_item_data-dlv_qty = 1. lwa_item_data-dlv_qty_imunit = 1. lwa_item_data-fact_unit_nom = 1. "銷售數量轉換成SKU的分子(因子) lwa_item_data-fact_unit_denom = 1. "銷售數量轉換為 SKU 的值(除數) lwa_item_data-base_uom = 'TO'. "基本單位 lwa_item_data-sales_unit = 'TO'. "銷售單位 lwa_item_data-usehieritm = '1'. APPEND lwa_item_data TO lit_item_data. CLEAR lwa_item_control. lwa_item_control-deliv_numb = p_vbeln. lwa_item_control-deliv_item = '900001'. "拆分后的新行項目 lwa_item_control-chg_delqty = 'X'. "數量修改標志 APPEND lwa_item_control TO lit_item_control . CLEAR lwa_item_control. lwa_item_control-deliv_numb = p_vbeln. lwa_item_control-deliv_item = '900002'."拆分后的新行項目 lwa_item_control-chg_delqty = 'X'. "數量修改標志 APPEND lwa_item_control TO lit_item_control . CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE' EXPORTING header_data = is_header_data header_control = is_header_control delivery = iv_delivery TABLES header_partner = lit_header_partner header_deadlines = lit_header_deadlines item_data = lit_item_data item_control = lit_item_control return = lit_ret * ITEM_DATA_SPL = IT_ITEM_DATA_SPL . DATA: l_msg TYPE string. IF lit_ret[] IS INITIAL. COMMIT WORK AND WAIT. WRITE:/ '批次拆分成功'. RETURN. ENDIF. LOOP AT lit_ret WHERE type = 'E'. CLEAR l_msg. MESSAGE ID lit_ret-id TYPE 'E' NUMBER lit_ret-number WITH lit_ret-message_v1 lit_ret-message_v2 lit_ret-message_v3 lit_ret-message_v4 INTO l_msg. WRITE:/ l_msg. ENDLOOP.
選擇畫面:
3, 保存批次數據庫表
外向交貨單批次的相關數據保存在表LIPS中,
LIPS-UECHA:批次拆分項目的上層項目
以上面的數據為例:
LIKP
LIPS
VBFA: 銷售憑證流
以上。