下面介绍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: 销售凭证流
以上。