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'
EXPORTING
  goodsmvt_header  = ls_header
  goodsmvt_code    = lv_code
IMPORTING
  materialdocument = lv_doc
  matdocumentyear  = lv_year
TABLES
  goodsmvt_item    = lt_item
  return           = 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的帮助。

### SAP采购订单的创建与处理教程 #### 一、概述 在SAP系统中,采购订单是一种特殊的采购方式,用于企业将生产过程中的某些环节包给部供应商完成。这种模式下,物料可能由企业提供(即自带材料),也可能由供应商自行提供。为了支持这一业务场景,SAP提供了完整的功能模块和操作流程。 以下是关于SAP采购订单的具体操作指南: --- #### 二、基础设置与配置 1. **物料主数据配置** - 需要在物料主记录中定义该物料是否允许作为加工使用。这通常涉及维护物料类型的属性以及其对应的BOM结构[^4]。 2. **工厂参数配置** - 在事务码`OBYC`中,需激活与加工业务相关的选项,例如启用特定移动类型(如541, 543)以支持库存转移逻辑[^5]。 3. **会计科目分配** - 设置成本核算账户,确保每次执行发料或收货动作时能够正确更新财务账目。此部分可通过事务码`OB08`完成初始设定。 --- #### 三、具体操作步骤 ##### 1. 创建标准采购订单 - 使用事务码 `ME21N` 或者通过菜单路径进入【后勤→采购采购订单→创建】界面。 - 输入必要的字段信息,包括但不限于供应商编号、交货日期等基本信息;特别注意的是,在项目类别处应选择代表“”的字母L[^3]。 ```plaintext 示例截图显示:当选择了‘L’之后,页面下方会出现额区域供填写组件详情。 ``` ##### 2. 处理自带原材料情况下的发料作业 (MIGO) 对于需要先向供应商发送原料的情形,有两种主要方法可选: - 方法A: 结合具体的采购订单号实施(MIGO-A08-R01),此时指定移动类型为541; - 方法B: 不关联任何采购单据独立完成发货(MIGO-A08-R10). > 注明:无论采用哪种形式,均要确认目标位置已设定了指向相应供应商子仓库的位置编码。 ##### 3. 收回成品并同步扣减前期预投数量 一旦收到最终产品,则依据实际验收结果录入系统,并触发内部机制自动削减之前预先投放至对方手中的半制品存量。典型做法如下所示: - 如果是正常情形则选用凭证类型101进行登记; - 而针对特殊状况比如返工品等情况,则考虑改用其他替代方案像105之类。 --- #### 四、高级应用技巧 除了上述基本流程之,还可以借助ABAP脚本进一步优化整个链条运作效率。例如编写自定义程序批量生成多份相似规格但不同批次间的PO文档实例[^1]: ```abap REPORT z_create_po. DATA: lv_purchasing_group TYPE ekko-bstyp, lt_items TYPE TABLE OF ekkpoitem. START-OF-SELECTION. SELECT * INTO CORRESPONDING FIELDS OF TABLE @lt_items FROM ekkp WHERE bstyp EQ 'L'. END-OF-SELECTION. LOOP AT lt_items ASSIGNING FIELD-SYMBOL(<fs_item>). CALL FUNCTION 'BAPI_PO_CREATE' EXPORTING purchasinggroup = <fs_item>-bstyp IMPORTING purchorderno = DATA(lv_order_no) CHANGING purchaseorderhdr = DATA(ls_header) purchaseorderitm = DATA(ls_item). ENDDO. ``` 以上代码片段展示了如何利用函数模块`BAPI_PO_CREATE`自动化新购单建立的过程。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值