撤销审批有收货的采购订单,并修改采购订单

一  业务背景

    在实际业务中,用户做的采购订单,包含2个行项目,已经审批完成,其中第一个行项目已经收货,第二个项目没有收货,后来用户在对第二个项目单独做收货的时候,发现其物料号写错,用户要求在原采购订单上删除错误的物料号,改为正确的物料号。


二  解决方案

   撤销该采购订单的审批,然后删除第二行物料号,再添加正确的物料号后审批做收货。

    1. 在SAP标准业务流程中,已经收货的采购订单也可以撤销审批,对于已经收货后的行项目也可以修改价格、数量和库存地点等数据,但不能修改物料号和工厂,如下图:

    2. 撤销审批后,直接删除第二个行项目的物料,再在第三行添加正确的物料号。


注意:本采购订单的审批策略中的审批标识设置的是1(1表示不能被修改),如果是2 ,表示可以不撤销审批,直接修改修改订单。如下图:

可变性的解释如下:
1:PO审批之后不能修改 
2:PO审批之后可以修改,不管改什么都不需要重新审批
3:PO审批之后可以修改,不管改什么都需要重新审批 
4:PO审批之后可以修改,如果修改的地方是审批条件里面定义的,则需要重新审批;不是审批条件定义的,则不需要重新审批 ;
在改变数量、价格、交货日期后,已经发生过的审批,要进行重新的审批。这在实际应用中比较安全。
5:PO审批之后可以修改,不管改什么都需要重新审批,打印之后再修改也需要重新审批 6:PO审批之后可以修改,如果修改的地方是审批条件里面定义的,则需要重新审批;如果打印过,不管修改过什么都需要审批 


补充:大部分项目是不允许采购订单在有收货的情况下撤销审批的,只有冲销收货后,才可以撤销审批,这需要采购订单做增强判断。

采购订单收货后不能修改价格的增强

增强名:MM06E005

出口:EXIT_SAPMM06E_012 为子屏幕参数传入出口(项目)


### SAP 中取消采购订单审批后通过 BAPI 修改SAP 系统中,当需要对已批准的采购订单 (Purchase Order, PO) 进行修改时,在执行任何操作之前必须先撤销采购订单审批状态。此过程可以通过调用特定的 BAPI 来实现。 为了完成这一目标,通常会遵循以下逻辑: #### 取消审批流程 首先,需确保采购订单处于可编辑的状态。这涉及到使用 `BAPI_PO_CHANGE` 函数模块来解锁文档以便进一步处理[^1]。 ```abap DATA: lv_po_number TYPE ekko-belnr, lt_return TYPE TABLE OF bapiret2. CALL FUNCTION 'BAPI_PO_GETDETAIL' EXPORTING purchaseorder = lv_po_number * IMPORTING * purchasdocument = wa_purdoc TABLES return = lt_return. IF NOT lt_return[] IS INITIAL. " Handle errors here ENDIF. ``` 一旦获取到详细的采购订单信息确认其可以被更改,则继续下一步骤即实际的数据更新工作。 #### 使用 BAPI 更新数据 对于具体的字段变更,同样依赖于 `BAPI_PO_CHANGE` 或者更精确地说是它的输入参数结构体 `POHEADERIN` 和其他相关表项如 `ITEMIN`, `SCHEDULELINESIN` 等来进行具体条目的调整。 ```abap DATA: ls_headerin TYPE bapi_poheader_in, ls_itemin TYPE bapi_poitem_in, lt_itemsin TYPE STANDARD TABLE OF bapi_poitem_in, lt_schedin TYPE STANDARD TABLE OF bapi_poschedline_in. ls_headerin-purchasing_group = 'NEW_GROUP'. APPEND ls_itemin TO lt_itemsin. CALL FUNCTION 'BAPI_PO_CHANGE' EXPORTING purCHASEORDER = lv_po_number poheaderin = ls_headerin TABLES itemin = lt_itemsin schedulelinesin = lt_schedin return = lt_return. CHECK lt_return IS INITIAL OR line_exists( lt_return[ type IN ('E', 'A') ] ) IS FALSE. " Proceed with commit or further processing... COMMIT WORK. ``` 上述代码片段展示了如何利用 ABAP 调用相应的 BAPI 接口以达到修改的目的,且包含了必要的错误检测机制以保证事务的一致性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值