尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

MD01还是MD01N?S/4HANA下总MRP运行的选型与迁移实战

MD01还是MD01N?S/4HANA下总MRP运行的选型与迁移实战 做SAP PP/MM顾问的朋友对MD01和MD01N这两个事务码应该都不陌生。一个是经典的总MRP运行一个是后来基于HANA推出的MRP Live入口名字就差一个字母功能定位却差了一个时代。今天这篇不是官方文档的复述纯粹是我在几个项目里来回切换这两个事务码积累下来的一点实操认知重点放在两者到底差在哪、什么时候该用谁、以及从MD01迁到MD01N时最容易踩的坑。1. 先搞清楚这两个代码是谁MD01与MD01N的定位与来龙去脉1.1 MD01的出身经典整网MRP运行的“长子”MD01是传统ERP时代的总物料需求计划运行入口我习惯叫它“整网MRP”。它做的事情很简单给定一个工厂范围系统会扫描所有需要做物料需求计划的物料然后根据现有库存、在途库存、销售订单、预测、预留、采购申请、计划订单等各类MRP要素逐个物料跑一遍净需求计算最后输出该生产的计划订单、该采购的采购申请。在MD01之前的年代计划员如果要做全厂MRP只能一个物料一个物料地跑MD02或者按物料组跑效率极低。MD01的作用就是把这个过程批量化了让系统能“一次性”把整个工厂涉及MRP的物料全算一遍。所以直到今天还有很多企业的计划部门把MD01当成每天或每周跑批的标配工具。但MD01的问题也很明显它是基于传统数据库和ABAP内存运算的架构跑起来非常吃资源。特别是在物料数量多、MRP相关数据表庞大的企业一次MD01运行能把整个系统的对话进程占掉大半甚至导致其他业务用户操作卡顿。我见过一个上万物料的工厂跑一次全厂MD01要两三个小时期间MRP相关单据几乎不能动计划员只能干等。1.2 MD01N的出身MRP Live的先锋MD01N是后来随着HANA数据库出现的MRP Live入口。SAP在ECC 6.0 EHP4之后引入了MRP Live的概念最初是作为MD01的一个补充选项到了S/4HANA版本MD01N基本成了总MRP运行的主力入口。MRP Live的核心变化是底层技术架构传统MD01是在应用服务器上把相关数据读取到内存里一行一行做运算MD01N则把计算逻辑下推到HANA数据库层直接用SQL语句基于列式存储的表做集合运算。你可以把MD01想象成“把一大堆文件搬到办公桌上人工翻查”MD01N则是“直接在档案室的数据库里用检索工具批量查”。后者最大的好处就是快而且对应用服务器资源的占用小得多。也是从MD01N开始MRP运行不再需要全程锁定整个规划文件锁的粒度更细运行期间其他MRP相关事务可以同时进行。这对实际业务的价值远大于“运行速度快”这一个优点。1.3 一个必须明确的现实在S/4里它们并不完全对等很多刚接触S/4的人会以为MD01N只是MD01的“加速版”功能完全一致只是底层快一些。这个理解在ECC时代还算接近但在S/4HANA时代已经不成立了。S/4HANA 1809之后经典MRP运行的诸多限制越来越明显SAP逐步将MD01及相关功能退居二线MD01N成了标准的、也是推荐的总MRP运行方式。部分新版本里MD01甚至已经不再提供维护或者只在兼容模式下存在。换句话说如果你所在的项目是新建的S/4系统基本上不用纠结“用MD01还是MD01N”因为答案只有一个——MD01N。但如果是ECC升级到S/4的项目或者还在ECC阶段做日常运维那MD01和MD01N可能在你的系统里同时存在这个时候搞清楚两者的差异就非常关键了。2. 计划员视角的差异同样点“执行”背后发生了什么2.1 锁机制为什么MD01一跑全厂都在等MD01N却可以“你跑你的”这是我觉得两者最核心的差异也是业务感受最明显的一点。MD01在运行时系统会把相关物料的规划文件条目全部锁定。规划文件里记录了哪些物料需要跑MRP、上次跑MRP的时间、是否有变化等关键信息。一旦锁定其他事务如果想同时修改这些物料的MRP数据就会因为锁冲突而报错或者等待典型提示就是“物料被用户xxx锁定”。这也意味着MD01跑批期间计划员基本上不能做任何MRP相关操作比如改计划订单、改采购申请、维护独立需求全得等运行结束。MD01N则不一样。它处理的是数据库层面的数据运行过程中对单个物料的锁定时间极短甚至很多情况下是乐观锁的机制——事务处理完立即释放不需要锁住整个规划文件。所以MRP Live运行期间其他用户照常处理MRP单据互相干扰的概率大大降低。我在实施项目里测试过同一个工厂同一个物料范围MD01跑的时候MD02单物料MRP根本执行不了MD04物料库存/需求清单也打不开而MD01N跑的时候这些都正常操作几乎没有明显卡顿。这一点对计划员的日常工作节奏影响是决定性的。2.2 运行维度整网扫描与“数据库方言”MD01的运行范围由规划文件决定。系统会读取规划文件表MDVM/MDPP等找出所有需要MRP的物料然后逐条处理。如果规划文件本身维护不及时、有脏数据MD01跑出来的结果就可能漏物料或者包含一些已经不用的旧物料。MD01N的名字里带个“N”实际是New的缩写它直接基于数据库表做集合运算不再依赖传统的规划文件遍历机制。当然它也会参考规划文件的条目来判断物料是否需要MRP但因为底层处理方式不同对规划文件状态的要求没有MD01那么苛刻。结果就是同一个工厂MD01和MD01N跑出来的物料范围可能不完全一致。我遇到过一次某物料在物料主数据里MRP类型维护的是“PD”MRP但规划文件条目因为历史原因没有被正确生成MD01跑完压根没算这个物料换了MD01N之后它却被正常纳入了计算。后来查了一下是因为MD01N对规划文件条目的判断逻辑更直接某些场景下会绕过规划文件缺失的限制。需要提醒的是这不代表MD01N“更准确”只能说它“更贴近数据库当前的真实状态”。如果你的企业还在用老旧的规划文件管理逻辑强烈建议在并行测试阶段就核对两边的物料清单差异不要默认完全一致。2.3 一个容易被忽略的点MRP Live的物料并行参数MD01也支持并行处理但它的并行是基于应用服务器的RFC进程组说白了就是开多个后台作业窗口同时处理不同物料组。问题在于每个RFC进程都要占用应用服务器内存并行数开太高会把应用服务器压垮。MD01N的并行机制不一样它是数据库层面的并行通过一个关键参数PAR_PCKL_SIZ来控制每次数据库操作处理的物料包大小。这个参数设置成多少直接决定了MRP Live运行时的资源消耗和速度。我的经验是如果HANA内存充足PAR_PCKL_SIZ可以适当调大运行速度会有肉眼可见的提升但如果HANA数据库本身内存水位偏高或者有其他大型批处理在跑调得过大反而可能引发数据库内存耗尽甚至OOM。一般来说500到1000这个区间比较稳妥具体需要根据你的物料数量和数据库性能做测试。系统默认值在有些版本里偏保守实际项目中我通常会让BASIS同事先跑一个小范围测试再用SM37监控数据库负载来调整。3. 操作界面和日常工作中最直观的区别3.1 从黑白列表到ALV交互输出方式的代差MD01跑完后输出的是一份传统的列表式MRP清单格式比较死板。屏幕上的信息就是一列物料号、物料描述、MRP要素、短缺日期、短缺数量等基本只能看不能做太多交互操作。想深入分析导出到Excel慢慢弄吧。MD01N的输出是标准的ALV网格支持排序、过滤、汇总、下钻还能在清单里直接看到每个物料对应的MRP元素明细。比如你看到某个物料有短缺直接在ALV里双击就能跳转到MD04该物料的库存/需求清单查看短缺是由什么单据引起的。这个体验上的提升对计划员来说可以说是“从翻纸质台账到用Excel透视表”的差距。另外MD01N的ALV结果支持保存变式。这点太重要了。以前用MD01每次跑完想看同一组字段都要重新设置列宽、调整排序用MD01N设好一次视图变式Layout下次打开直接套用日常工作效率提升非常明显。3.2 选择范围MD01N更灵活的“部分选择”MD01虽然叫总MRP但它也支持一定范围的选择条件比如工厂、MRP控制者、物料类型等但这些条件相对粗糙粒度较粗。MD01N在选择屏幕上的选项要丰富得多支持按工厂、MRP组、物料号范围、物料类型、产品组等维度进行筛选还能指定“只处理有变化的物料”或者“仅处理特定MRP组的物料”。这在排产场景里特别有用。举个例子你只想重新计算某个产品族下的物料不想动全厂其他物料。MD01时代要么用MD02逐个物料跑要么把工厂范围拉大然后等半天。MD01N可以直接在MD01N选择界面里设定物料范围或MRP组精准控制运行范围既省时间又减少对其他物料计划订单的干扰。3.3 变式保存计划员最爱的功能MD01N还有一个让计划员爱不释手的功能选择屏幕的变式保存。你可以把常用的运行参数比如工厂、MRP组、计划模式、是否在线/后台运行等保存成一个变式Variant下次直接在初始界面输个变式名就全部带出来。这对于周期性MRP运行太关键了。企业如果每周一早上跑全厂MRP计划员可以把所有参数存成Variant “WEEKLY_MRP”然后每次只要在事务码框里输入MD01N选择变式回车执行。对比MD01时代每次都要重新填一堆屏幕字段这个体验是天壤之别。更妙的是这个变式还可以用于SM36后台作业调度。把带变式的MD01N作为步骤加进后台作业作业运行时就会按照保存的参数自动执行不需要人员在终端前操作。4. 运行结果差异与业务影响谁的结果更“准”4.1 计划模式Planning Mode选项差异MD01N在计划模式上比MD01提供了更多的选项。MD01的传统计划模式主要有三种NETCH净变更计划、NETPL计划周期内的净变更、NEUPL重新计划。这些模式决定了系统如何处理现有的计划订单和采购申请。MD01N在继承这些模式的基础上增加了更多精细化选项比如可以选择“不进行BOM展开”“不进行可用性检查”“不删除和重新安排现有计划订单”等。这些选项的实际意义在于你可以根据具体场景灵活控制MRP运行的行为。举个例子有些时候你只是临时重算一下某个物料的净需求进度并不想让它重新展开BOM更不想因为它暂时缺料就把已经确认的计划订单全部打散重排。这种情况下用MD01N的计划模式选项就能精准控制而MD01要实现同样的效果就要费很大劲甚至需要自定义增强。4.2 替代物料、BOM展开、安全库存的细节差异这里要讲一个实操中很容易踩坑的地方MD01和MD01N在某些特殊情况下的计算结果可能不一致。最常见的一个差异源头是替代物料Subcontracting/Alternative Material的处理。传统MD01在计算时对替代物料的判断和BOM展开顺序有一套固定的逻辑MD01N因为直接基于数据库表做集合运算在替代物料优先级、BOM展开时机等细节上可能与MD01存在细微差别。虽然不是所有项目都会触发这个差异但在有大量替代料管理的离散制造企业我确实遇到过两边结果不一致的情况。另一个容易产生差异的是安全库存和动态安全库存的计算。MD01对安全库存的处理沿用了一套历史逻辑MD01N在某些版本中引入了新的安全库存计算方式特别是涉及动态安全库存动态批量、补货策略时结果可能略有不同。我的建议是迁移到MD01N之前一定要选择一个数据量适中、业务复杂度高的测试工厂并行跑MD01和MD01N各一次然后对比结果。如果两边计划订单和采购申请基本一致那可以放心切换如果有差异逐笔核对差异原因确定是计划模式设置问题还是逻辑问题然后再决定是否调整参数。4.3 两个典型场景对比场景一某汽车零部件工厂物料总数八千多包含自制件、外购件、委外件。原来用MD01每周一凌晨跑批耗时约一个半小时期间计划员上午基本没法操作MRP相关事务。切换到MD01N之后同样的运行范围耗时缩短到二十多分钟而且计划员从早上八点开始就能正常操作MD04、MD02几乎没有被锁的感觉。场景二某电子组装企业业务上存在大量替代物料升级到S/4后直接从MD01切到MD01N。第一个月内计划员发现好几个物料的计划订单数量和以前MD01跑出来的不一致。逐笔分析后发现是因为MD01N对替代料的优先级判断更敏感在库存地点维度上有差异。后来通过调整物料主数据里的替代料优先级分组才让两边结果保持一致。这两个案例说明什么MD01N更快、更灵活但它不是一个“与MD01完全等价”的升级版它是一种新的MRP运行方式。上了MD01N不能只是把事务码从MD01改成MD01N还要认真对待结果校验和流程标准化。5. 迁移到MD01N的实操建议与踩坑记录5.1 不要再依赖MD01的User Exit这是我觉得最值得提醒的一点。很多老项目在MD01流程上做了大量ABAP增强最常见的做法是用USEREXIT比如USEREXIT_MRP_ BEFORE_SAVE、USEREXIT_MRP_AFTER_READ等来拦截MRP运行结果做自定义的校验或者数据补充。问题在于这些USEREXIT大多是经典MRP时代的产物MD01N的架构下它们很多不会被触发或者触发时机完全不同。我接过一个项目原有MD01增强里有一段逻辑会在MRP运行结束时自动给某些物料生成特殊采购申请。切换MD01N后这段逻辑彻底失效导致部分物料两周没有产生采购申请差点造成缺料。所以如果你要迁到MD01N建议尽早梳理现有的MRP相关增强逐条确认它们在MD01N下是否还生效。不生效的增强该改写为BADI特别是MRP Live相关的BADIMRP_LIVE的改写该废弃的废弃不要心存侥幸。5.2 并行参数与作业调度设置MD01N虽然快但不代表可以无限制地开并行。前面提到的PAR_PCKL_SIZ参数以及后台执行时的进程数设置都需要根据实际硬件配置做针对性的调优。我的习惯是这样先统计算一下工厂里纳入MRP的物料总数比如三万个然后从PAR_PCKL_SIZ 500开始测试观察单次运行耗时和HANA CPU/内存表现如果数据库资源还有余量再逐步上调到800、1000找到性价比最高的平衡点。注意这个参数不是越大越好太大了单个数据库请求处理的数据量过多一旦某个物料出问题回滚的代价也更高。后台作业调度上建议把MD01N配置成一个独立的作业步骤并且和其他高负载批处理如成本核算、期末结算错峰运行。虽然MD01N对应用服务器的压力小了但对HANA数据库的压力并不小如果和CO结算同时跑数据库可能成为瓶颈。5.3 MRP组的应用最后一个建议用MRP组来管理MRP运行范围而不要只用工厂维度。MRP组MRP Group在S/4里已经取代了传统的MRP控制者的部分功能它可以把不同工厂、不同生产线的物料按计划策略分组。使用MD01N时你可以直接按MRP组来限定运行范围实现“不同产品族不同频率跑MRP”的灵活策略。比如某集团型企业A工厂的成品按周跑MRP但B工厂的备件只需要每月跑一次。如果用MD01跑整厂备件也被一起纳入每周计算既浪费时间又可能因为误操作产生多余的采购建议。MD01N配合MRP组就可以精准控制每周一跑A工厂的成品组每月初跑B工厂的备件组。这个能力在优化计划流程的同时也减轻了计划员核对异常数据的工作量。6. 常见问题速查表现象可能原因处理办法MD01N跑完后部分物料没有纳入计算规划文件条目缺失或MRP类型未正确维护检查物料主数据MRP1视图必要时运行“规划文件重建”事务如MDDOMD01N结果与MD01结果不一致计划模式设置不同或替代物料/BOM展开逻辑差异对照两个事务的计划模式参数逐笔核查差异物料运行中提示物料被锁定其他用户在MDE/采购申请等事务上持锁用SM12查看锁对象联系对应用户释放或等待MD01N运行非常慢HANA数据库压力大并行参数设置过高或HANA统计信息过期调低PAR_PCKL_SIZ执行HANA统计更新原有MRP增强在MD01N下不生效经典MRP USEREXIT不兼容MRP Live改写为MRP Live的BADI实现重新测试后台作业调用MD01N时运行范围不对变式参数设置与实际需求不一致在MD01N初始界面重新保存变式并检查作业步骤使用的变式MD01N处理结果中计划订单日期异常计划模式选择了不进行BOM展开或未考虑提前期检查计划模式选项确认是否选择了“无BOM展开”类参数切换MD01N后计划员不会看结果ALV布局不熟悉或筛选条件不明确保存一套预定义ALV布局变式组织计划员培训最后再分享一个我个人在项目里的体会MD01N并不是一个需要“替换” MD01的对手它是MRP运行方式演化后的必然选择。企业如果还在用ECC不急着切MD01N当然可以继续用MD01毕竟它稳定、逻辑成熟、增强多但如果你的系统已经上了S/4或者正准备升级那早一天把计划流程迁移到MD01N早一天积累经验远比上线后被动切换要稳妥。给正在做迁移的朋友一个具体建议别等项目上线了再让计划员切MD01N。提前两三个月在测试系统里把MD01N的变式、后台作业、BADI增强、ALV布局全部配好然后让计划员在日常工作中就用MD01N跑真实数据和MD01的结果做对比。这个过程不仅能帮你提前发现功能差异也能让计划员在正式上线前就熟悉新工具的用法避免上线后手忙脚乱。毕竟再好的工具也得有人会用、用对了才能发挥价值。
返回列表