[BAPI]使用BAPI_GOODSMVT_CREATE创建委外订单(subcontract)的物料移动凭证详解编程语言

下面介绍一下使用bapi BAPI_GOODSMVT_CREATE为委外订单创建物料移动凭证。

例子代码:

*&---------------------------------------------------------------------* 
*& 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不存在”

[BAPI]使用BAPI_GOODSMVT_CREATE创建委外订单(subcontract)的物料移动凭证详解编程语言

[BAPI]使用BAPI_GOODSMVT_CREATE创建委外订单(subcontract)的物料移动凭证详解编程语言

以上。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/19305.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论