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

本文介绍了一个增强功能MM06E005,该功能限制了在采购订单部分收货后修改价格的能力。通过检查收货状态和价格变动,确保业务流程的准确性与合规性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

增强名:MM06E005

出口:EXIT_SAPMM06E_012 

  IF SY-TCODE <> 'ME22N' AND SY-TCODE  <> 'ME22' AND  SY-TCODE <> 'ME23N' AND SY-TCODE  <> 'ME23'.
  EXIT.
ENDIF.
DATA T_NETPR TYPE EKPO-NETPR.
DATA TT_SUM   TYPE EKBE-BPMNG.
DATA T_SUM    TYPE EKBE-BPMNG.
DATA T_SHKZG  TYPE EKBE-SHKZG.
LOOP AT TEKPO.

  SELECT SINGLE NETPR INTO T_NETPR FROM EKPO WHERE EBELN = TEKPO-EBELN
                                             AND EBELP = TEKPO-EBELP.

  IF TEKPO-NETPR <> T_NETPR.
    SELECT BPMNG SHKZG INTO (T_SUM,T_SHKZG) FROM EKBE WHERE EBELN = TEKPO-EBELN
                                      AND   EBELP = TEKPO-EBELP
                                      AND   BEWTP = 'E'.
      IF T_SHKZG = 'S'.
        TT_SUM = TT_SUM + T_SUM.
      ELSE.
        TT_SUM = TT_SUM - T_SUM.
      ENDIF.

    ENDSELECT.
    IF TT_SUM <> 0.
      MESSAGE E899(MM) WITH TEKPO-EBELN TEKPO-EBELP '由于已收货,不允许修改价格'.
    ENDIF.
  ENDIF.

  CLEAR T_NETPR.
  CLEAR TT_SUM.
  CLEAR T_SUM.
ENDLOOP.
 

<think>好的,我现在需要解决用户在SAP中配置采购订单入库后禁止修改,只有在退库后才能重新修改的问题。首先,我需要回忆一下SAP采购订单的相关配置和流程。 用户提到入库后禁止修改采购订单,这意味着在收货之后,采购订单的某些字段应该被锁定,无法更改。通常,SAP中可以通过字段状态组或者权限对象来控制字段的可编辑性。但具体如何配置可能需要更详细的步骤。 我记得在SAP中,采购订单的字段状态可以通过事务代码OMJJ或OMET来配置,可能涉及到定义字段选择组(Field Selection Groups)和分配这些组到相应的采购文档类型。当采购订单的某个状态(比如收货完成)触发时,系统自动锁定某些字段,防止修改。此外,可能需要使用用户出口(User Exit)或BADI(Business Add-Ins)来增强逻辑,确保只有在退库操作后,才能重新解锁这些字段。 另外,权限方面,可以使用权限对象比如B_EBAN(采购订单维护)来限制用户对采购订单修改权限。但需要结合状态管理,可能需要在退库时通过工作流或其他方式调整用户权限。 还需要考虑采购订单修改控制,比如在MIGO收货过账后,系统自动设置一个状态标识,之后在修改采购订单时检查该状态,如果已收货且未退库,则禁止修改。退库操作可能通过移动类型122或其他相关移动类型触发,此时系统清除或更新状态,允许再次修改。 可能还需要参考SAP的文档或相关资料,比如在采购订单配置中,如何设置收货后的字段状态为只读。例如,在采购订单的项目层级中,定义字段选择的条件,例如当收货数量已过账时,某些字段如数量、价格等不允许修改。这可能需要配置字段选择变式,并将其分配到相应的采购订单类型。 同时,用户提到的参考引用中有关于收货冲销的内容,这可能与退库流程相关。退库通常涉及冲销之前的收货,此时系统可能需要更新采购订单的状态,允许再次修改。因此,配置可能需要关联到库存管理模块,确保退库操作后触发采购订单字段的解锁。 总结可能的配置步骤: 1. 定义采购订单的字段选择组,设置收货后的字段为只读。 2. 分配字段选择组到采购订单类型。 3. 使用用户出口或BADI增强,在收货过账后自动锁定字段。 4. 配置退库操作(如移动类型122)后解锁相关字段。 5. 设置权限对象,控制用户对采购订单修改的权限。 需要验证这些步骤是否正确,可能需要查阅SAP配置指南或相关社区资料,确保配置的有效性。例如,字段状态配置可能需要通过事务代码OMET,选择相应的采购文档类型和项目类别,调整字段状态为仅显示。此外,可能需要使用增强点,比如在MIGO过账后触发字段锁定,这可能需要编写ABAP代码。 另外,用户可能希望禁止任何修改,包括价格、数量等关键字段,因此需要明确哪些字段需要锁定。在配置时,需详细检查采购订单的各个字段,确保在收货后这些字段无法被修改,除非进行退库操作。 最后,测试是关键。配置完成后,需要在测试环境中模拟收货和退库流程,确认采购订单修改权限是否符合预期,确保系统行为正确无误。</think>### 在SAP中配置采购订单入库后禁止修改的步骤 #### 1. **配置字段选择组(Field Selection Group)** - **事务代码**:`OMET`(字段选择配置)或通过SPRO路径:*物料管理 > 采购 > 采购订单 > 定义字段选择的屏幕格式*。 - **操作**: 1. 定义字段选择组,例如`Z001`,配置在收货后需锁定的字段(如订单数量、价格、供应商等)为**“仅显示”**。 2. 将该字段选择组分配到对应的**采购订单类型**(如标准类型`NB`)和**项目类别**(如`标准`)。 #### 2. **绑定字段选择组到采购订单类型** - **事务代码**:`OMJJ`(维护采购订单的文档类型)。 - **操作**: 1. 选择目标采购订单类型(如`NB`)。 2. 在“字段选择”标签页中,关联步骤1定义的字段选择组`Z001`。 #### 3. **增强逻辑:收货后自动锁定字段** - **使用用户出口**:例如`MM06E005`(采购订单保存前的增强)。 - **操作**: 1. 在出口中编写逻辑:当采购订单收货(通过检查表`EKBE`中相关条目是否存在),则调用函数`ENQUEUE_EBAN`锁定订单。 ```abap IF sy-tcode = 'ME22N' OR 'ME23N'. " 修改采购订单时触发 IF 已收货 THEN 锁定字段并抛出错误消息。 ENDIF. ENDIF. ``` #### 4. **退库后解锁字段** - **退库操作**:使用移动类型`122`(退货到供应商)冲销原收货。 - **增强逻辑**: 1. 在退库过账时(事务代码`MIGO`,移动类型122),通过BADI`MB_DOCUMENT_BADI`更新采购订单状态字段(如自定义状态`ZUNLOCK`)。 2. 在采购订单修改时检查状态`ZUNLOCK`是否存在,若存在则允许修改。 #### 5. **权限控制(可选)** - **权限对象**:`B_EBAN_XXX`(采购订单维护权限)。 - **操作**: - 在权限角色中限制用户对采购订单修改权限,仅在退库后通过动态权限调整开放。 --- ### 验证流程 1. **收货测试**: - 创建采购订单并过账收货(MIGO 101)。 - 尝试修改订单字段(如数量),系统应提示**“字段已锁定”**。 2. **退库测试**: - 执行退库(MIGO 122),冲销原收货。 - 再次尝试修改订单,此时应允许调整字段。 --- ### 相关引用 在SAP中,收货和退库操作直接影响库存水平[^1],而采购订单的字段状态控制需结合业务逻辑和增强配置实现精准管理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值