如何重置采购订单的新利润中心

107 阅读8分钟

Resetting new profit center for PO

背景描述

问题背景:门店改了利润中心,但是没有同步更改该门店下的物料利润中心。导致外部系统生成了相应的订单,传到 SAP 会报错:”利润中心 WINN/3100XXXX 对于日期 2024-XX-XX 被锁住”。

问题分析

网上有系统或者用户也是同样的问题,希望能更改采购订单中的利润中心:

  • 方案一:采取的方式是重新下生产单:点此处链接

  • 方案二:还有一个社区用户通过增强 ME22N 的用户出口 LMEPOF2I 去更改利润中心,但是没有出解决方案,点此处链接

基于业务系统已经将货物转移到门店,意味着无法重新让用户进行前台操作去生成新的业务单,所以方案一行不通。

方案二从逻辑上可以实现,但是官方系统已经将采购订单的利润中心在前台去掉,专门为了一个错误的生产单去增强标准代码也是因噎废食。

问题解决

因此,基于此出错的场景,去官方找相应的 Note 和文档,发现有个 Note 能提供程序给用户改采购订单的利润中心。

解决方案:

  1. 首先新建一个空的 Report:ZECPCAEK
  2. 找到相关的 Note:141009

  1. 点击执行,出现 Note 下载中

  1. 下载成功后,选中这一项 Note,点击执行 Implement SAP Note

  1. 然后出现选择框,点击 confirm 之后,会这个界面,接着点击执行

  1. 执行成功后:

  2. 回到报表 ZECPCAEK,可以看到已经多了如下代码:


**********************************************************************
* Report to correct purchase orders (table EKPO)
* relevant:
* - after a reorganisation of profit center assignments to materials
* - purchase orders from release 2.2 don't have a profit center
**********************************************************************


REPORT ZECPCAEK.

TABLES: EKPO.

DATA: BEGIN OF EKPO_STRUCTURE,
      EBELN LIKE EKPO-EBELN,
      EBELP LIKE EKPO-EBELP,
      MATNR LIKE EKPO-MATNR,
      WERKS LIKE EKPO-WERKS,
      KO_PRCTR LIKE EKPO-KO_PRCTR,
      END OF EKPO_STRUCTURE.

DATA L_EKPO LIKE EKPO_STRUCTURE OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF L_MARC.
        INCLUDE STRUCTURE MARC.
DATA: END OF L_MARC.

DATA: COUNTER LIKE SY-TABIX.

***********************************************************************

SELECT-OPTIONS: EBELN FOR  EKPO-EBELN OBLIGATORY.
PARAMETERS:     TEST  AS CHECKBOX      DEFAULT 'X'.

***********************************************************************

START-OF-SELECTION.

* Selection of purchase orders

  SELECT EBELN EBELP MATNR WERKS KO_PRCTR
         INTO L_EKPO FROM EKPO
         WHERE EBELN IN EBELN.

    APPEND L_EKPO.
  ENDSELECT.


  CLEAR COUNTER.

  LOOP AT L_EKPO.

* Read Material data
    CALL FUNCTION 'MARC_SINGLE_READ'
         EXPORTING
              MATNR             = L_EKPO-MATNR
              WERKS             = L_EKPO-WERKS
         IMPORTING
              WMARC             = L_MARC
         EXCEPTIONS
              LOCK_ON_MARC      = 1
              LOCK_SYSTEM_ERROR = 2
              WRONG_CALL        = 3
              NOT_FOUND         = 4
              OTHERS            = 5.

    IF SY-SUBRC = 0.

* Has the profit center changed?
      IF L_MARC-PRCTR <> L_EKPO-KO_PRCTR.

        IF TEST = SPACE.
          UPDATE EKPO
                 SET KO_PRCTR = L_MARC-PRCTR
                 WHERE EBELN  = L_EKPO-EBELN
                 AND   EBELP  = L_EKPO-EBELP.
        ENDIF.
        COUNTER = COUNTER + 1.

* Protocoll
        IF COUNTER = 1.
          WRITE /.
          WRITE AT 5 'Purchase Order'.
          WRITE AT 20 'Position'.
          WRITE AT 30 'Material no.'.
          WRITE AT 60 'Old PrCtr'.
          WRITE AT 75 'New Prctr'.
        ENDIF.

        WRITE /.
        WRITE AT 5 L_EKPO-EBELN.
        WRITE AT 20 L_EKPO-EBELP.
        WRITE AT 30 L_EKPO-MATNR.
        WRITE AT 60 L_EKPO-KO_PRCTR.
        WRITE AT 75 L_MARC-PRCTR.
      ENDIF.
    ENDIF.

  ENDLOOP.
  WRITE: /, /, COUNTER, 'entries'.
  1. 程序是可以执行的,前台操作界面如下:

  1. 今后就可以通过 SE38 执行这段程序,在正式机中找出出错的采购订单号:4500504232,测试运行,发现确实是有一个条目是错误,取消勾选 TEST,重新执行,将错误的利润中心更改过来:

  1. 至此,IDOC 重新跑一下,这个报错问题解决

总结

虽然这个程序能更改采购订单的利润中心,但仔细看 ZECPCAEK 的代码,也是执行 Update Ekpo 表来更改利润中心。官方 Note 141009 也说了使用这个程序的注意事项:报表 ZECPCAEK 只能用于不含科目分配对象的采购订单。

因此,不确定现有场景出错的采购订单是否包含科目分配对象,针对这种报错,应该从源头去解决,在业务前台至少增加一个限制:门店更改后的利润中心(T001W-PRCTR)和物料的利润中心是否一致(MARC-PRCTR) ,不一致的物料是不应该产生业务单据的。

思考:

  • 在 SAP 标准中,门店创建了利润中心,可以通过 WB02 进行修改,但是如果产生了业务单据和凭证,不确定这种更改是否符合业务逻辑。
  • 基于正确的业务逻辑,门店更改了利润中心,对应门店下的利润中心也应该进行修改。因此,已经在接口中增加了相应的逻辑,门店更改利润中心,相应更改所有MARC表中的物料的利润中心。

在实测中发现,门店下面的物料是大数据场景。所以已经通过 STARTING NEW TASK 进行异步调用,不影响更改门店接口的效率。关于 ZFM_MM_UPDATE_MARC_PRCTR 函数模块里面的内容查看对应的文档和代码。

  • 因为利润中心是属于 CO 的内容,考虑是否需要在门店新建的时候加一个财务相关同事的审批数据操作,尽量减少利润中心的修改。

参考文档

关于 141009 Note 的详情

症状

如果更改物料主数据中的利润中心分配,在更改之前创建的采购订单或计划协议不会考虑此新分配。因此,将使用旧利润中心而不是新利润中心。

其他条款

EKPO 利润中心分配

解决方案

为受影响的采购订单或计划协议执行附加程序 ZECPCAEK。这会将凭证的利润中心更改为物料主数据的利润中心。

仅当使用传统总账时才能使用此解决方案。对于新总账,利润中心重组工具可用于利润中心更改(请参阅注释 1810605)。在 S4CORE 107 版本中,可以使用组织变更工具,它支持对物料主数据和采购订单位置中的利润中心进行一致的更改。有关此工具的更多详细信息,请参阅帮助门户:管理组织更改 | SAP Help Portal

注意:报表 ZECPCAEK 只能用于不含科目分配对象的采购订单。如果您有带科目分配的采购订单,您必须手动更改采购订单。通常,应仔细测试此报表的使用情况,因为不完整流程可能会出现不一致。

Attention: you can use report ZECPCAEK only for purchase orders without account assignment objects. If you have a purchase order with accounts assignments you have to change the purchase orders manually.

如果在 S4CORE 中使用新总账或会计核算(版本 107 / S/4HANA 2022 之前),则更改采购订单中的利润中心可能会导致会计核算中的利润中心余额不正确。尤其是在收货和收发票步骤之间更改采购订单中的利润中心时,GR/IR 科目的利润中心余额会受到影响。

示例:采购订单中的初始利润中心是利润中心 A。收货通过利润中心 A 过账到 GR/IR 科目。采购订单中的利润中心更改为 B。使用新利润中心 B 将发票接收过账到 GR/IR 科目。尽管流程已完成,但这会导致两个利润中心的收货/收发票科目存在未清余额。

关于 1810605 - 有关利润中心重组的一般信息

症状

您想要执行利润中心重组,并且想要了解需要考虑的内容。

其他条款

利润中心重组;重组;业务功能 FIN_GL_REORG_1;PC 重组

解决方案

  • 作为总账会计(新)一部分的利润中心重组功能是 SAP 标准产品 SAP Landscape Transformation (SAP LT) 的组件。因此,您需要此产品的许可证才能使用这些功能。关于许可证的购买,请联系您的客户经理。有关许可证采购以及安装和使用与利润中心重组解决方案相关的 SAP LT 的详细信息,请参阅 SAP 注释 1534197。
  • 请注意,利润中心重组是复杂项目。要使此类项目成功,需要仔细计划(如有必要,在顾问的支持下)。
  • 在合适的测试环境中进行大量测试是重组项目的重要部分。如果可能,测试系统应表示包含完整且尽可能最新的数据集的生产系统副本。
  • 测试系统和生产系统都应具有最新的支持包级别。启动项目之前,请确保与利润中心重组相关的所有系统都包含利润中心重组所需的所有 SAP 注释(这些 SAP 注释在 SAP 注释 1471153 中列出)。要执行利润中心重组,需要门户或 SAP NetWeaver Business Client。
  • 只有在测试系统中成功完成重组后,才允许在生产系统中执行利润中心重组。如果在生产系统中重组期间出现问题,请注意 SAP 支持将请求访问测试系统。
  • 如果在利润中心重组测试期间遇到问题,请在组件 FI-GL-REO* 下创建客户消息。请注意,支持同事需要测试系统的标准 SAP R/3 连接(请参阅 SAP Note 35010)和 HTTP 连接(请参阅 SAP Note 592085),如有必要,还需要与生产系统连接以处理此消息。
  • 请参阅 SAP 注释 891144(“总账会计(新)/凭证拆分:后续更改风险”)中的信息。后续更改可导致 FI 对象在重组期间出现不一致和错误。

利润中心重组

参考链接: