SAP PP 生产订单创建添加定制组件的ABAP实现方法

背景

此文适合对SAP PP模块生产订单业务有一定了解的PP顾问和ABAP开发人员阅读。

所在项目中遇到一个特殊需求,创建拆解工单时,拆除整机得到半成品和原材料。

这时候不是增加组件预留数量,而是减少预留数量(因为半成品和原材料增多了),业务方的要求是,这种特殊类型工单,组件数量默认是负数。说实话这种需求我见过,这种解决方案我是第一次听说(更别提见)。为什么不用物料凭证移动类型配置,同仓转储之类的成熟解决方案,我不知道,大概是财务科目配不明白吧。

OK,我的任务是实现需求,别的咱也不知道,咱也不敢问。

需求是通过接口创建拆解工单,组件物料是定制的,数量是负的。

有点绕的解决方案

我之前(差不多10年前)一直用一个标准BAPI处理PP生产订单的增删改,就是BAPI_ALM_ORDER_MAINTAIN。

实际上这是一个PM模块维修/服务工单使用的BAPI,SAP的PP,PM,PS模块使用了同一套底表来存储业务数据(问就是架构原因,我也不知道为什么),所以这个API也能够用来处理PP生产订单。为什么非得用PM的API来改PP的数据呢,因为PP模块没有相应功能的API,自带的BAPI_PRODORD_CREATE没有什么考虑定制组件之类的功能,SAP就是摆烂,OK?

SAP曾推出过一系列Note补丁,禁止客户开发人员使用这个BAPI改生产订单,都被我司的BASIS同事屏蔽了,所以我们一直这么用。

我在目前项目的系统一看,BAPI_ALM_ORDER_MAINTAIN这个BAPI不能用了。Note打了好几波,摘都摘不掉。

接口使用的账号不是dialog账号,不能支持BDC的CO01方式,只能另想办法。

最终考虑,使用COXT函数组的CO_XT_COMPONENT_ADD来添加定制组件和加工数量(负数)。

方案细节

  1. 先调用BAPI_PRODORD_CREATE创建生产订单,这一步会自动生成加工组件,不能定制。

这一步会根据表头的物料,工厂,订单类型,数量,计划起始/截止日期生成生产订单,同时会根据订单物料对应的生产BOM自动计算加工组件物料和数量,按常规方式不能改(非常规可以,我们下面聊)。

我们需要做的是,删除不需要的“自动计算”出来的组件,替换成需要的定制组件。

FORM create_ppo.
  DATA:ls_orderdata    TYPE bapi_pp_order_create,
       ls_return       TYPE bapiret2,
       lv_order_number TYPE aufnr.

* 创建生产订单
  CLEAR:ls_orderdata.
  ls_orderdata-material = gs_h-matnr.
  ls_orderdata-plant = gs_h-dwerk.
  ls_orderdata-order_type = gs_h-auart.
  ls_orderdata-quantity = gs_h-pgmng.
  ls_orderdata-basic_start_date = gs_h-gstrp.
  ls_orderdata-basic_end_date = gs_h-gltrp.
  CALL FUNCTION 'BAPI_PRODORD_CREATE'
    EXPORTING
      orderdata    = ls_orderdata
    IMPORTING
      return       = ls_return
      order_number = lv_order_number.
  IF ls_return-type = 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    MESSAGE ID ls_return-id
            TYPE ls_return-type
            NUMBER ls_return-number
            WITH ls_return-message_v1
                 ls_return-message_v2
                 ls_return-message_v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andrew.Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值