下面介绍一下使用bapi BAPI_GOODSMVT_CREATE为委外订单创建物料移动凭证。
例子代码:
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
|
*&---------------------------------------------------------------------*
*& Report YTEST_SUBCONTRACT_MIGO
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ytest_subcontract_migo.
DATA:lt_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
l_doc TYPE mseg-mblnr,
l_year TYPE mseg-mjahr,
lt_item TYPE STANDARD TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
lwa_header TYPE bapi2017_gm_head_01,
lwa_code TYPE bapi2017_gm_code.
DATA:l_line_id TYPE mseg-line_id VALUE '000000',
l_parent_id TYPE mseg-parent_id VALUE '000000',
l_line_depth TYPE mseg-line_depth VALUE '00'.
lwa_code-gm_code = '01' . "MB01
lwa_header-pstng_date = sy-datum. "凭证中的过帐日期
lwa_header-doc_date = sy-datum. "凭证中的凭证日期
lwa_header-pr_uname = sy-uname. "用户名
lwa_header-ref_doc_no = '123456'. "参考订单
lwa_header-header_txt = 'Header text'. "抬头文本
* 物料
lt_item-material = '000000410000000043'.
* 工厂
lt_item-plant = '1286'.
* 批次号
lt_item-batch = '1808031000'.
* 移动类型
lt_item-move_type = '101'.
* 库存地点
lt_item-stge_loc = '1103'.
* 基本单位数量
lt_item-entry_qnt = 57040.
* 输入单位
lt_item-entry_uom = 'KG'.
* 订单单位数量
lt_item-po_pr_qnt = 57040.
* 订单价格单位(采购)
lt_item-orderpr_un = 'KG'.
* 采购订单号
lt_item-po_number = 4400000011.
* 采购凭证的项目编号
lt_item-po_item = '00010'.
lt_item-mvt_ind = 'B'.
* 凭证行的唯一标识
l_line_id = l_line_id + 1.
l_parent_id = l_line_id.
lt_item-line_id = l_line_id.
APPEND lt_item.
CLEAR:lt_item.
lt_item-move_type = '543'.
* 物料编号
lt_item-material = '000000410000000044'.
* 工厂
lt_item-plant = '1286'.
lt_item-spec_stock = 'O'.
* 批次号
lt_item-batch = '0000000004'.
* 数量
lt_item-entry_qnt = 3600.
* 基本计量单位
lt_item-entry_uom = 'KG'.
* 上一行的识别码
lt_item-parent_id = l_parent_id.
* 凭证行的唯一标识
l_line_id = l_line_id + 1.
lt_item-line_id = l_line_id.
* 凭证中行层次结构级别
l_line_depth = '01'.
lt_item-line_depth = l_line_depth.
APPEND lt_item.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = lwa_header
goodsmvt_code = lwa_code
* TESTRUN = ' '
* GOODSMVT_REF_EWM =
* GOODSMVT_PRINT_CTRL =
IMPORTING
* GOODSMVT_HEADRET =
materialdocument = l_doc
matdocumentyear = l_year
TABLES
goodsmvt_item = lt_item
return = lt_return.
LOOP AT lt_return WHERE type CA 'AEX'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
WRITE:'Failed'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WRITE:'物料凭证号:', l_doc.
ENDIF.
|
代码不复杂,需要注意的是字段line_id,parent_id,line_depth要填写正确,
line_id是用来唯一标识行项目的,委外行要正确制定上层行项目ID,也就是把上层行项目的line_ID填到委外行的parent_ID字段中,line_depth也要按层次填入01...
如果行项目字段填写不正确有时会出现M7 387错误。
委外订单物料移动凭证创建成功后,通过MIGO查看一下:
代码中委外行项目上的批次号,一定是系统中存在的批次,要不然也会报错,如下
M7 076的错误:“这种物料的特殊库存 O 0000000005 0010000003 000000410000000044不存在”
以上。