MIGO委外(外协)采购订单过账的增强
这个MIGO的BIDI增强,对外协组件的处理,主要是外协的批次赋值是在前台界面上的,导致接口无法处理。
看到博客自己直接用BADI全部写了一段代码。
https://www.cnblogs.com/pnj-owowa/p/17146943.html
CALL FUNCTION ‘BAPI_GOODSMVT_CREATE’
EXPORTING
goodsmvt_header = ls_header
IMPORTING
goodsmvt_headret = ls_headret
TABLES
goodsmvt_items = lt_goodsmvt_items
return = lt_return.
把组件的清单也放到 goodsmvt_items 里面
"上面的过账一般采购收货都是一样的 ,委外的区别就在下面这个循环,需要将bom组件的数据也写入
IF lt_outpo IS NOT INITIAL. " 该采购单是委外采购单 需要填入明细数据 移动类型为543
lv_outfz = '采购收货的数量'. " 过账的数量 用作分子READ TABLE lt_outpo INTO DATA(ls_outpo) WITH KEY ebeln = '4500000908' ebelp = '00010'.IF sy-subrc EQ 0.lv_outfm = ls_outpo-menge. " 找出采购单的数量 用作分母ENDIF.LOOP AT lt_outbom ASSIGNING FIELD-SYMBOL(<fs_outbom>) WHERE ebeln = '4500000908' AND ebelp = '00010'. " 获取bom预留lt_item-move_type = '543'. " 移动类型lt_item-material = <fs_outbom>-matnr. " 物料号lt_item-plant = <fs_outbom>-werks. " 工厂lt_item-stge_loc = <fs_outbom>-lgort. " 存储字典lt_item-spec_stock = 'O'. " 特殊库存lt_item-batch = <fs_outbom>-charg. " 内部批次lt_item-entry_qnt = lv_outfz / lv_outfm * <fs_outbom>-erfmg. " 过账的成品数量 / 采购的成品数量 * BOM组件的数量lt_item-entry_uom = <fs_outbom>-meins. " 单位lt_item-parent_id = lv_parent_id. " 父项目编码lv_line_id = lv_line_id + 1. " 子项目编号lt_item-line_id = lv_line_id.lv_line_depth = '01'.lt_item-line_depth = lv_line_depth. "bom层次APPEND lt_item.CLEAR lt_item.ENDLOOP.
ENDIF.
clear it_item.
然后直接调用BAPI_GOODSMVT_CREATE过账CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTINGgoodsmvt_header = ls_headergoodsmvt_code = lv_code
IMPORTINGmaterialdocument = lv_docmatdocumentyear = lv_year
TABLESgoodsmvt_item = lt_itemreturn = lt_ret.
IF lv_doc <> ‘’.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
ENDIF.
换句话说,就是外协的组件清单,也同步更新到BAPI_GOODSMVT_CREATE的
GOODSMVT_ITEMS(表)
其中部分字段说明:
MATERIAL:物料号,代表具体的物料。
PLANT:工厂,表明物料所处的工厂。
STGE_LOC:库存地点,即物料所在的库存位置。
MOVE_TYPE:移动类型,例如 101 表示采购收货,201 表示成本中心领用。
ENTRY_QNT:输入数量,指物料移动的数量。
ENTRY_UOM:输入单位,是数量的单位。
COSTCENTER:成本中心,用于归集物料移动的成本。
PROFIT_CTR:利润中心,和利润核算相关。
ORDERID:生产订单号,若物料移动和生产订单有关,则填写此订单号。
更多信息参考SAP的帮助。