此BAPI的参数GMCODE 标识对应哪个Tcode的业务,如下:
* GMCODE Table T158G - 01 - MB01 - Goods Receipts for Purchase Order
*
*
*
*
*
针对用户业务需求,我这里需要三种移动类型的物料凭证:1、向PM订单发货-计划性的(非限制使用库存,标准移动类型是261,我们用自定义的Z67);2、向PM订单发货-供应商寄售库存(标准移动类型是261,特殊库存标志K,我们用Z67/K);3、向PM订单发货-随机备件(使用移动类型Z73,从451copy过来的;随机备件是使用移动类型451收货的物料)
*
*
*
*
1-向PM订单发货-计划性的和2-向PM订单发货-供应商寄售库存使用MB1A来完成,GMCODE 为 03,3-向PM订单发货-随机备件使用Tcode
MB1C完成,对应GMCODE 为 05.
不同类型的凭证对应的行项目需要的字段也是不同的,以下是这三种业务对应的行项目。
1、向PM订单发货-计划性的
CLEAR ITAB.
ITAB-MATERIAL = WA_OUT-MATNR."物料号
ITAB-PLANT = S_IWERK-LOW. "工厂
ITAB-STGE_LOC = WA_OUT-LGORT. "库存地点
ITAB-MOVE_TYPE = 'Z67'. "移动类型
ITAB-ENTRY_QNT = WA_OUT-F_LABST."非限制使用库存发料数量
ITAB-ENTRY_UOM = WA_OUT-MEINS. "单位
ITAB-ORDERID = S_AUFNR. "PM订单号
ITAB-RESERV_NO = WA_OUT-RSNUM. "订单对应的预留号
ITAB-RES_ITEM = WA_OUT-RSPOS. "预留项目号
APPEND ITAB."非限制使用库存发料明细
这种发货方式采用预留号,是计划性的,除了记账货物移动凭证外,能够更新PM订单中的已提货数量栏位,也可以将ITAB-WITHDRAWN = 'X',该预定的最后发货,将最后发货的标记栏位打勾,下面这种方式是非计划的,也能发货到PM订单,只是记录物料凭证,不更新PM订单中的已提货数量栏位,
CLEAR ITAB.
ITAB-MATERIAL = WA_OUT-MATNR."物料号
ITAB-PLANT = S_IWERK-LOW. "工厂
ITAB-STGE_LOC = WA_OUT-LGORT. "库存地点
ITAB-MOVE_TYPE = 'Z67'. "移动类型
ITAB-ENTRY_QNT = WA_OUT-F_LABST."非限制使用库存发料数量
ITAB-ENTRY_UOM = WA_OUT-MEINS. "单位
ITAB-ORDERID = S_AUFNR. "PM订单号
APPEND ITAB."非限制使用库存发料明细
2、向PM订单发货-供应商寄售库存,这种业务对应的物料凭证行项目表为:
CLEAR ITAB.
ITAB-MATERIAL = WA_OUT-MATNR."物料号
ITAB-PLANT = S_IWERK-LOW. "工厂
ITAB-STGE_LOC = WA_OUT-LGORT. "库存地点
ITAB-MOVE_TYPE = 'Z67'. "移动类型
ITAB-SPEC_STOCK = 'K'. "特殊库存标识
ITAB-VENDOR = WA_OUT-LIFNR. "供应商
ITAB-ENTRY_QNT = WA_OUT-F_SLABS."寄售库存发料数量
ITAB-ENTRY_UOM = WA_OUT-MEINS. "单位
ITAB-ORDERID = S_AUFNR-LOW. "订单
APPEND ITAB67."寄售库存发料明细
3、向PM订单发货-随机备件,这种业务对应的物料凭证行项目表为
CLEAR ITAB.
ITAB-MATERIAL = WA_OUT-MATNR."物料号
ITAB-PLANT = S_IWERK-LOW. "工厂
ITAB-STGE_LOC = WA_OUT-LGORT. "库存地点
ITAB-MOVE_TYPE = 'Z73'. "移动类型
ITAB-VENDOR = WA_OUT-LIFNR. "供应商
ITAB-ENTRY_QNT = WA_OUT-F_RETME."随机备件发料数量
ITAB-ENTRY_UOM = WA_OUT-MEINS. "单位
ITAB-ORDERID = S_AUFNR-LOW. "订单
APPEND ITAB73."随机备件发料明细
执行BAPI,判断返回消息RETURN,进行commit或rollback,如下:
LOOP AT RETURN.
IF RETURN-TYPE = 'E'.
FLAG = 'NO'.
ENDIF.
ENDLOOP.
IF FLAG = 'OK'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
*IMPORTING
*RETURN =
.
ELSEIF FLAG = 'NO'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*IMPORTING
*RETURN =
.
ENDIF.