下面介紹SAP SD的銷售訂單外向交貨單按批次拆分(Batch-Managed),包括前台操作和調用bapi ‘BAPI_OUTB_DELIVERY_CHANGE’ 實現。
1, 前台操作
按批次拆分操作:
外向交貨單Tcode: VL02n
選中10行項目,點擊‘批次拆分’按鈕,填寫批次后,回車,會將項目號和庫位自動帶出(視具體配置而定)
點保存后,原來航項目10數量自動變更,變成0.
刪除批次拆分操作:
選中剛才創建的拆分項目90001和90002,點刪除按鈕。
10行項目數量會自動更新,重新變成3
2, BAPI實現
完整代碼:
其中
|
1
|
LW
_ITEM_DATA-USEHIERITM = '1'.
|
查看了domain中的固定值:‘1’代表Batch Subitem
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
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: 銷售憑證流
以上。









