[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不存在”
以上。