翻译一篇,原文在SAP BLOG中如下:
目录
- 前言
- 通过 BADIs 操作 MRP 元素
- 新的 BadI PPH_SUPPLY_DEMAND_LIST
- BADI PPH_SUPPLY_DEMAND_LIST 的示例实现
- 结论
前言
SAP S/4HANA 引入了新的 BADI PPH_SUPPLY_DEMAND_LIST,它允许我们在MRP Live 和 Classic MRP 运行中更改、添加或排除 MRP 元素。此 BADI 也在 MRP 评估事务(例如 MRP清单:MD04)和 MRP Cockpit Fiori Apps 中调用。本文提供了有关此 BADI 的更多详细信息,解释了使用它的原因以及使用的好处。
通过 BADIs 操作 MRP 元素
对于运行 MRP 的公司来说,影响 MRP 元素是一个非常常见的要求,并且经常实施增强功能以使特定元素与 MRP 无关,或者更改 MRP 元素的特定属性,例如日期和数量。
在旧的 ==ECC 版本中,我们可以使用 ==BAdI MD_CHANGE_MRP_DATA ==实现会影响 MRP 元素的自定义代码,我之前写了一篇博客解释如何使用此BAdI 来使 MRP 元素与 MRP 无关。
然而,==在 S/4HANA 版本中,此 BAdI 不再生效。==在经典的 Classic MRP中,这个BAdI在MRP从数据库读取计划元素时被调用,并且逻辑被下推到HANA数据库层,以提高MRP的性能,而MRP Live完全在HANA中运行,所以ABAP的 BAdI不能被MRP Live过程调用。
到目前为止,替代方案是使用 ABAP BAdI MD_ADD_ELEMENTS,它可以在经典 MRP 和 MRP评估事务(例如 MD04 MRP清单)中工作,以及 MRP Live 中的 AMDP BAdI PPH_MRP_RUN_BADI(AMDP 代表 for ABAP Managed Database Procedures即管理数据库过程,它是直接在 HANA 数据库中执行的过程)。
虽然这些 BAdI 非常方便,但在 SAP S/4HANA 中实现它们有两个缺点: 在大多数情况下,MRP Live 在 HANA 中计划物料,并调用 AMDP BAdI,但在某些情况下,MRP Live 需要计划物料在ABAP中,AMDP BAdI将不起作用。这意味着必须实施两个 BAdIs,从而导致额外的开发工作和成本。除此之外,ABAP BAdI 在 MRP 评估事务中被调用,例如 MD04,但在 MRP Fiori 应用程序中不会被调用,这意味着用户会根据所使用的事务或应用程序看到不同的结果。
新的 BadI PPH_SUPPLY_DEMAND_LIST
为了解决这些问题,SAP S/4HANA 2022 引入了新的 BAdI PPH_SUPPLY_DEMAND_LIST。这是一个 AMDP BAdI,这意味着它直接在 HANA 数据库中运行,并且可以在Classic MRP、MRP Live、MRP Fiori Apps和库存/需求列表 (MD04)中工作。
这个BAdI只有一个名为MODIFY_SUPPLY_DEMAND_LIST的方法,该方法由将从数据库读取计划元素的存储过程调用,这意味着我们可以更改计划元素的属性,添加新的计划元素,甚至使计划元素不相关对于 MRP。
BAdI 方法有几个导入参数,如下图所示,它们将传入有用的信息,例如用户或计划日期。有一个名为 CT_SUPPLYDEMANDITEMLIST 的变化参数,它将带来 MRP 从数据库中读取的特定物料的供需元素列表(销售订单、生产订单、计划订单、采购申请等)。
值得一提的是,由于该 BAdI 的实现对计划元素所做的更改只会在计划运行期间被 MRP 考虑,并且不会保存到数据库中。例如,如果您使用此 BAdI 更改计划订单日期,MRP 将在计划运行期间考虑此计划订单的调整日期,但表 PLAF 中的日期不会更改。
此外,MRP 在计算净需求期间会考虑此 BAdI 实施的任何更改,并且在 BAdI 执行后不会执行一致性检查。因此,如果您使用此BAdI调整计划元素的数量,MRP将在计算净需求时使用此数量,并且您的BAdI将直接影响MRP结果,因此应非常小心地使用! 例如,如果您使用此 BAdI 来减少销售订单的数量,则 MRP 将无法完全弥补此销售订单可能导致的短缺。
BADI PPH_SUPPLY_DEMAND_LIST 的示例实现
对于新的 BAdI PPH_SUPPLY_DEMAND_LIST,SAP 提供了一个示例实现类,其中包含示例代码,您可以将其用作构建自己的 BAdI 实现的示例。
此示例代码针对以下场景提出了解决方案:
-从规划中排除存储位置。
-从计划中排除过期批次。
-将客户订单的要求日期提前 2 天。
从 MRP 中排除过期批次(也称为保质期规划)是一项非常常见的要求,特别是对于制药和食品行业,以确保过期批次不会被视为可用于组件和成品。标准 MRP 在规划时不考虑批次过期,公司必须在增强 MRP 以启用此功能或实施 PP/DS 之间进行选择,因为它提供了标准启发式方法来支持保质期规划。
此 BAdI 提出的示例代码添加了计划的独立要求,以在到期日从可用数量中减少批次数量。这样,MRP 就不会将此数量视为可用,而是会创建新的补货建议来弥补短缺。
下图显示了示例实现中提供的代码,如下所示,它带有注释,因此您只能将其用作开发自己的 BAdI 实现的模型。
结论
借助可在 MRP Live、经典 MRP、库存/需求列表和 MRP Cockpit Fiori 应用程序中使用的单个 BAdI,我们将能够减少开发工作量和增强 MRP 的成本。单个 BAdI 实施还将减少错误数量,并确保不同 MRP 事务和应用程序之间的自定义逻辑保持一致。
SAP提供的示例代码还将帮助我们满足从MRP中排除过期批次的非常常见的要求,并加速增强功能的开发。
我们只需要小心地使用这个 BAdI,确保所实现的逻辑能够保持 MRP 结果一致,并且不会导致短缺或为我们的产品建立不必要的库存。
有关此 BAdI 和其他 MRP BAdI 的更多信息可以在需求计划的 IMG 活动业务插件中找到。
由 SAP S/4HANA RIG 为您提供