
1. 走进MD01MRP运行时你到底在指挥什么干SAP物流和计划这行迟早要跟MRP运行较上劲。只要聊到物料需求计划绕不开那个经典事务代码MD01。很多新手第一次点开MD01对着最后一个界面愣住一堆勾选框、选项按钮每一个都认识连起来不知道选什么。更麻烦的是不同工厂、不同产品、不同供应策略用的参数组合还不一样。今天这篇文章我不打算再复述一遍标准文档里关于MRP的百科式说明而是基于多年跑计划、调参数、处理异常的实际折腾经验把MD01运行界面里那些关键控制参数逐个掰开讲清楚它到底控制什么、为什么要这么设、设错了会有什么后果。先明确一下MD01是什么。MD01是SAP ERP里执行总计划Total Planning的标准事务代码它会对指定工厂内的所有物料批量执行MRP运算。与之相对的MD02是单物料MRP运行MD03是单层级计划MD43则是单物料单层级。MD01的优势是覆盖面广适合周期性全盘运行代价是运行时间长、系统资源占用大参数一旦设置不当往往会出现海量垃圾计划订单或不应有的采购申请收拾起来非常头疼。所以在点“回车”那一刻之前你必须清楚MRP运行本身不是魔法它只是拿着主数据、库存、需求独立需求、相关需求、预留等结合你设定的参数和策略生成一张“什么时间、需要什么、需要多少、怎么补货”的计划报表工程。MD01界面上的每一个按钮都是在告诉系统“这次计划要覆盖到哪里、要不要生成单据、时间上怎么排、看哪些结果”。这些参数往往被看作是计划员的“调度手柄”手柄方向对了系统算出来的结果才靠谱。这正是问题的分水岭很多项目上线之初顾问只是把MRP运行参数照搬到一个默认配置没人深入去理解每个参数背后的业务意图。结果上线后每天半夜跑MRP第二天一早计划员被一堆异常库存、过期订单、重复采购申请包围。说到底不是MRP算错了而是你给MRP的“指令”含混不清。下面我逐一拆解MD01里最常见的控制开关。2. 核心控制参数逐项拆解处理代码、计划模式与调度MD01进入后第一屏会让你输入MRP控制参数。不同系统版本、不同行业模板界面可能略有差异但核心选项是一致的。我把它们分为三类处理范围、运行方式和时间调度逐一说透。2.1 处理代码Processing KeyNETCH、NETPL、NETP差别不是一点点MD01界面上最重要的第一个参数是“处理代码”常见的候选是NETCHNet Change in total horizon全部时界内的净变更、NETPLNet change in planning horizon计划时界内的净变更、NEUPLRegenerative planning再生式计划。很多新手总是默认选NETCH理由是“全面”但它远远不是无脑选项。NETCH会对主数据出现变化的物料、以及相关需求变动的物料全部重新计算哪怕某个物料一个月没需求只要它的安全库存或批量主数据被改过就会被重新扫一遍。如果工厂里有几十万个物料NETCH的运行时间自然明显变长。NETPL则聪明一些它只扫描“计划时界”Planning Horizon范围以内的物料变动。计划时界是一个工厂级参数定义了系统预测未来需求的长度。对于计划时界之外的物料即便有变动也不在这次运行范围内。这么做的核心逻辑是时界之外的需求大概率是模糊的、变数大的跑得太远反而容易生成一堆不稳定的订单计划员真正关心的是近期这段确定性相对较高的区间。NEUPL则是老派的完全重排计划相当于无视所有变更标记把所有物料从零开始重新计算一遍。这种模式计算量最大通常只在月初全量重排或主数据大清洗后使用。日常运行是基本不会去碰NEUPL的。实操下来我的个人推荐是这样高频日批处理用NETPL每周或者月初做一次NETCH作为兜底季度性全量重排才考虑NEUPL。要特别提醒一句如果你项目里ERP和外围系统如产销协同平台做了频繁的接口同步运行时间窗口又紧张千万别为了“全面”每夜都用NETCH否则系统资源会在凌晨被MRP吞噬掉一大块。2.2 创建采购申请Create Purchase Requisition与交货计划Delivery Plan这一组参数直接决定MRP运算后产出的单据类型。常见选项是1采购申请2采购申请 计划行3交货计划交货计划行这里的业务场景差异很关键。如果你做的是普通采购件MRP算出来净需求后通常希望直接生成采购申请后续由采购部门或审批流程接手。但如果你们跟供应商之间跑的是长期协议合同或计划协议并且供应商会按计划交货行陆续送货那么你大概率选择“交货计划行”让MRP生成或更新计划协议里的交货计划而不是一堆零散的采购申请。我见过很多工厂因为不幸把此参数选成“采购申请”导致本该进入计划协议共享的物料跑出来几百张零散的PR采购申请不仅采购员工作量暴增而且协议执行率一落千丈。等到月底对账财务拿着PR和协议的交货记录对数字那叫一个痛苦。所以选这个参数以前一定要先把物料的采购类型采购还是自产和货源清单搞清楚。MRP本质上只“建议”不“决定”。你告诉它“这个物料要走计划协议”它才会在那个方向上生成单据。参数和主数据是配套的单改一个按钮没有意义。2.3 计划模式Planning Mode与调度Scheduling计划模式选项影响的是MRP运算时对现有计划订单和采购申请的处理方式。常见设置有三种不删除计划订单删除并重新创建计划订单删除计划订单这个说法在不同版本中略有出入总的意思是对现有订单做去留处理如果把模式设成“不删除”MRP会尽量保留系统中已有的计划订单只在需求变化时调整数量或日期。这种模式相对温和适合每天都跑MRP的工厂能避免计划订单频繁被重建、号码反复跳变带来的混乱。如果设成“删除并重新创建”则系统会先砸掉原有计划订单再按最新需求重新生成。这个选项适合大量业务变动发生后的重排比如紧急插单、大批量调整安全库存之后。缺点是一旦运行订单号会变相关下游单据如生产订单转换状态可能被影响尤其当计划订单已经被转换成了生产订单删除重建会出大麻烦。调度Scheduling参数则控制MRP计算提前期/交期时是采用“基本日期”还是“精确日期”。基本日期调度只精确到天精确日期调度会考虑工厂日历、生产时间、能力时间精确到小时甚至分钟。这里要留意如果你用精确调度但工厂日历维护不全反而会在日期上算出一堆奇怪的偏移因为系统找不到有效工作日只能机械往后推。我倾向于日常计划用基本日期长期排程或瓶颈工序管理时再切换到精确调度。3. 参数背后的业务逻辑从“按钮”到“策略”的闭环很多顾问喜欢在配置文档里面罗列MD01的所有选项但很少解释“为什么”。控制参数不是孤立的它们背后必须有一整套策略支撑。下面这张表是我在几个项目里总结出来的常用组合供参考场景类型处理代码采购申请/交货计划计划模式调度备注快消品日批处理NETPL交货计划有协议不删除基本日期高频、需求波动大保留订单稳定机械制造零件NETCH采购申请删除并重建基本日期物料多、批量小插单频繁化工连续生产NETPL采购申请不删除精确日期依赖工厂日历罐容约束影响日期月度全量重排NEUPL采购申请删除并重建精确日期仅在月结前后使用资源占用高这种组合不是拍脑袋而是从业务后果反推出来的。举个例子快消品工厂每天需求变化大计划订单如果每天被删除重建系统中订单版本混乱生产排产和物料分拣都会抱怨“单子怎么又变了”。所以宁愿用NETPL不删除让MRP在既有订单上做微调少制造新号码。机械制造里插单非常普遍如果仍然保留原计划订单系统可能会因为新旧需求交错产生“僵尸订单”也就是需求已经消失但计划订单还在。这种场景下删除重建虽然粗暴但至少保证每个订单都对应真实需求。关键是要把生产订单转换状态管理好防止已发放订单被误删。化工场景比较特殊日期调度必须精确因为很多工序是按小时算反应时间的原料罐容能坚持几个小时也要算清楚。基本日期调度会出现“今天物料该到了但工厂日历算下来是后天”这种问题。如果MRP基础数据无法支撑精确调度宁可先修工厂日历也别硬开开关。3.1 计划时界Planning Horizon怎么定不能拍脑袋MD01界面有个“计划时界”字段用来限制本次运算的时间范围。注意这个字段不是可以随便给个大数就完事的它直接决定了生成订单的“视角长度”。计划时界设置过短比如只给了30天那么第35天出现的需求就不会被这次MRP运算覆盖计划订单自然也不会生成。很多厂里出现“明明有需求MRP没跑出来”的奇怪现象排查到最后往往是计划时界字段填得太短批量跑的时候没把需求囊括进去。计划时界过长也有问题一是运算量大二是远期需求本身不可靠生成了计划订单过两天需求取消或挪期单子又变成无效的造成系统垃圾数据堆积。所以计划时界应该至少覆盖“采购提前期生产提前期安全库存覆盖期”的总和再多留出10%~20%的缓冲。如果你们家的关键采购件提前期长达3个月那么计划时界至少要给4个月否则系统根本看不到“今天下采购单才能覆盖3个月后需求”这个逻辑。3.2 安全库存与批量规则MRP参数的隐藏底座MD01参数只决定了“怎么算”但“算多少”其实由物料主数据里的安全库存和批量规则决定。这里有个常见误区以为在MD01里填一个安全库存数字就全局生效了——不是的。MRP运行界面上出现的“安全库存”字段通常指的是“本次运行中是否考虑安全库存”而不是“修改安全库存”。如果你想调整物料的安全库存得去MM02/MM01维护MRP1视图或者在MD04里进行库存参数更改。批量规则也是一个容易被忽略的参数。在MD01运行层面有的系统版本会显示“批量”表示本次运行使用物料主数据中的批量规则还是临时覆盖。实际上大部分场景都是沿用主数据里的批量规则比如EX批对批、PK周期批量、SM固定批量等。但要注意如果你最近调整过批量但MRP运行没有用新批量可能就是因为运行参数里勾了“沿用旧值”或缓存数据没刷新。这种问题不常见可一旦出现很让人抓狂。3.3 BOM展开BOM Explosion与计划订单展开MRP运行是否向下展开BOM受物料主数据中的“展开方式”和相关参数影响。在MD01里你会看到一个选项叫“BOM展开”或类似字段。它正常运行时会根据BOM生成下层组件需求这也是MRP的核心动作之一。但要注意很多定制开发项目会在这里放“按工厂展开”“按计划展开”等增强选项实际用法千差万别。对于有大量重复制造Repetitive Manufacturing场景的工厂BOM展开一般沿用到生产线版本和装配收集点不是简单展开所有层阶。这里的参数如果设置不对跑出来的下层组件需求会漏掉或重复。如果你在调试期发现BOM相关的需求异常先别急着查BOM本身回头看一下MD01运行界面里的BOM展开开关是否选对了。4. 实操过程记录一次标准MD01运行的完整拆解空讲参数没有体感下面复盘一次我实际跑MD01的完整过程顺便把关键界面的操作注意事项交代清楚。4.1 运行前准备检查工厂日历、期间和物料冻结状态按下MD01之前先问自己三个问题工厂日历对不对当前期间是否已打开有没有物料被冻结或者删除了MRP视图我就是踩过工厂日历的坑。有次给一个工厂做日批处理结果发现计划订单的日期全挤到周末后来才发现工厂日历中周六被误配成了工作日而车间其实不上班。MRP调度按工厂日历算日期日历错所有单据日期全错。所以每季度至少要安排一次工厂日历与生产日历的对照检查尤其在多国工厂共享同一ERP环境时时区、节假日差异很容易埋雷。期间检查也重要。如果物料所在的记账期间还未打开MRP生成的采购申请或计划订单虽然能显示但后续转采购订单、生产订单时会报错。SAP的物料期间控制有时候是“允许MRP运行但限制单据后续处理”这会造成“跑出来了但动不了”的尴尬。运行前批量执行期间检查是一个好习惯。4.2 执行MD01的第一屏输入进入MD01后输入工厂代码。接着出现MRP控制参数界面。以我常用的配置为例处理代码NETPL日频月初跑NETCH创建采购申请2采购申请计划行计划模式3不删除计划订单调度1基本日期计划时界按最长提前期1个月缓冲BOM展开按工厂创建MRP清单勾选注意这里的“创建MRP清单”很多人不勾因为觉得没必要。但我的建议是一定勾上尤其当你要做事后复盘时。MRP清单MD05会记录这次运行的计划结果、异常消息比如某物料没有货源、BOM过期、需求日期早于今日等。没有MRP清单你只能靠MD04事后翻每个物料效率天差地别。4.3 正式运行与后台监控MD01可以前台执行也可以设置为后台Job。对于大型工厂千万不要白天前台跑。一个成熟的做法是每天晚上8点或10点由作业调度程序自动触发运行完成后发一个Spool列表或消息给计划组。如果你需要查看运行日志可以到SM37监控后台作业的Job状态。运行结束后MRP会生成一个“物料需求计划清单”记录处理的物料个数、异常消息数。我个人习惯在Job步骤里附加一个输出程序把异常消息汇总导出到Excel第二天早上计划员直接看Excel筛选No. 类型为“异常”的行而不是逐条翻MD04。4.4 运行后的检查MD04、MD05和异常处理MRP结束后用MD04看单个物料的需求与供给覆盖情况用MD05看运行清单的汇总。如果MD05里有大量“未找到货源”消息首先要看这个物料是否维护了货源清单或者货源是否在有效期。这个异常在项目上线初期极其常见尤其是在物料主数据和采购信息记录还没完全维护好的时候。千万不要用“忽略异常”去处理更不要让系统带上“自动创建采购申请”却无货源。另外特别注意MRP运行后计划订单的日期。如果计划订单的可用日期早于需求日期意味着提前期不够或者调度逻辑有问题。早到往往只是浪费库存晚到则会断料二者都要在异常清单里重点核查。5. 常见问题与排查技巧实录那些年我踩过的MD01坑这部分整理成速查表再补充几个我反复踩过的深坑给你当“避雷指南”。5.1 常见问题速查表问题现象可能原因排查思路某物料MRP后没有生成计划订单计划时界不够覆盖需求日期在时界之外检查MD05时界日期重新设定参数计划订单数量异常大几百倍需求批量规则为周期性批量或零库存/最小批量设置问题查MM02 MRP2视图批量、安全库存、舍入值采购申请跑到未认证供应商货源清单缺失或采购信息记录没建检查ME01/ME2M维护货源清单MRP运行时间越来越长物料数量增大、NETCH频繁、运行参数把大量远期物料都扫描把日频改成NETPL减少扫描范围计划订单日期落在周末工厂日历维护错误检查工厂日历和调度参数运行后MRP清单为空没有勾选创建MRP清单或物料不在运行范围重新运行并勾选清单检查过滤条件已发放的生产订单被误删计划模式选成删除重建且没做状态保护修改计划模式避免删除已转生产订单的计划订单5.2 深坑一MRP清单勾选导致运行时间爆炸有人会发现勾选“创建MRP清单”后运行时间暴增于是干脆取消。但MRP清单的价值并不仅仅是“记录”它对追踪异常消息、审计计划过程非常关键。我的做法是把MRP清单的保留天数缩短比如7天既能满足复盘又不会让表无限膨胀。系统配置里可以调整MRP清单删除周期日批处理生成的清单保留一周足够月重排的清单可以延长一点。5.3 深坑二处理代码从NETPL切到NETCH后订单乱飞某月我在一个工厂做月末全量重排用了NETCH结果大量计划订单被重建部分已经转换的生产订单因为计划模式设置成“删除并重建”而受到牵连。当时差点导致车间工单号对不上。这个教训很直接如果你把生产订单已经下达到车间MRP再次运行不能对已经转换的计划订单随便动手。最好的做法是把计划模式固定为“不删除”订单变更只通过数量日期调整并且对于“已转换订单”要有严格的保护逻辑系统有这个控制但要在后台勾上。5.4 深坑三计划时界里填写“999”并不酷在系统里填一个很大的数字比如999天看似“永远不用管远边界”其实会把大量远期需求纳入运算MRP每天都会生成一堆不可执行的远期计划订单这既占用空间又干扰决策。计划员每天早上打开MD04看到一年以后的计划订单都攒在那里反而分不清哪些单子要执行。计划时界应该有业务依据跟供应链策略挂钩。对于需求稳定、提前期长的行业时界可以长对于快速响应的消费品行业时界4~8周就够了。5.5 深坑四MRP运行的“调度”和“提前期”是两个独立变量调度参数只是决定日期计算的精度MRP真正可用的交付时间取决于物料主数据里的提前期如采购提前期、生产时间。我见过一个工厂把所有物料提前期都设成1天采购员每天应对催料电话系统却从不提前建议。检查时发现MRP参数没问题是主数据里提前期字段被批量导错。所以调试MD01时如果订单日期普遍不准先查的是物料主数据的提前期不是调度开关。6. 工具选型与自动化增强让MD01从“手动档”变成“自动档”MRP运行本身是标准功能但要做得好通常需要配合增强开发。这部分聊聊材料里不常见的“经验层”。6.1 通过变式Variant固化标准参数最基础的做法是利用SAP的变式管理功能把MD01运行参数保存为变式。比如一个“日频快速”变式处理代码NETPL、不删除计划订单一个“月频重排”变式处理代码NETCH、精确调度。后台Job调用变式计划员不需要每次手工输入。好处除了省时更重要的是“参数统一”避免每个人按习惯乱设。变式里有个小细节如果变式包含“计划时界”字段要特别注意这个日期是会过期失效的。如果你只打算在某个时间段内有效最好做成动态变式用系统变量或者用户出口去计算基于当天的日期。静态变式的一次性日期可能会在系统里莫名其妙地“跑飞”造成运行结果不覆盖未来需求。我见过不止一次因为这个原因导致断料。6.2 运行前后的数据完整性检查自动化不只是“定时运行”还要在运行前检查主数据完整性。可以开发一个简单的程序在MRP运行前检查关键物料是否缺少BOM、货源、工艺路线、工厂日历等。如果发现问题直接在Job里中止并邮件通知计划组。这比跑完后再到处查异常消息要高效得多。现实项目里MRP跑了一整夜第二天早上发现某大类原材料没有货源清单等于这一夜白跑。我做过的某项目中就做了一个“MRP运行前检查”的Z报表把所有异常主数据汇总输出并将Job分为两个阶段先检查再运行。一旦有阻断级异常立即发邮件并停止后续运行。这至少把每个月“无效MRP”的占比降下来了。6.3 与外部系统的联动参数如果你的MRP需要跟外部供应链计划系统对接要注意MD01只是企业内部需求计划生成器外部系统往往提供一个“已确定的需求计划”再通过接口写入SAP。这种情况下建议在MRP运行参数中将外部需求作为“独立需求”类型纳入计划而不是让MRP自己又生成一层相关需求。否则容易把需求翻倍。比如某项成品外部计划系统已经下发了计划订单你再跑MRP又基于销售订单生成一遍相关需求两者叠加后采购需求直接乘以二。这个坑在实施接口项目时特别常见。排查方法是看MD04里的需求行如果同一来源出现了两条需求记录分别是“独立需求”和“相关需求”就要检查MRP参数是否配置了重复展开。最佳实践是统一需求来源要么全部由SAP内销售订单驱动要么全部由外部计划订单导入不要同时开两个口子。7. 延展思考MD01参数选型背后的供应链管思维聊完具体参数再往上层看一眼。MD01不是孤立的功能点它反映的是一个工厂/公司的供应链计划策略。参数选型本质上是策略落地的过程。如果你是一家按库存生产MTS的企业MRP的关注点在于“补货到什么水平”安全库存、再订购点、批量规则会摆在核心位置。MD01参数更倾向于定期运行、保留计划订单灵活调整、精确调度串联生产线节拍。如果你是按订单生产MTOMRP关注“订单需要什么、什么时候要”处理代码和BOM展开更关键计划时界与订单交付周期也要紧密配合。混合模式则更复杂部分物料用净需求部分用预测同一工厂里不同物料甚至可以有不同MRP组。这是为什么很多人说“SAP参数设置没有唯一正确答案”但“没有唯一答案”不代表“随便设”。一个合格的计划员应该对每个参数的含义烂熟于心并能解释为你服务的工厂供应链逻辑是什么。当你面对“为什么选NETPL而不是NETCH”“为什么计划时界是90天”这类灵魂拷问时如果只能答“模板里就是这样配的”那就没有真正掌握它。7.1 从“事后救火”到“事前预防”的参数治理MD01运行完了异常清单也看了但很多问题的根源不在MRP本身上而在于主数据质量、流程规范、组织协同。MRP参数只是最后一道闸口在它之前的源头治理更重要。举个例子如果你经常遇到“货源缺失”消息这大概率不是MRP的问题而是“新物料引入流程”没有设置强制检查货源清单。物料主数据创建时就应该把货源信息、计划策略、MRP组作为必填字段校验而不是等MRP跑完爆一堆异常。类似地BOM过期问题来源于工程变更流程没有和MRP联动。如果能让ECN工程变更通知生效日期自动触发MRP重排就不需要计划员每周手动跑NETCH去碰运气。我个人的体会是MRP参数优化到一定阶段以后再抠按钮层面的细节边际收益很低。真正拉开供应链效率差距的是围绕MRP运行的流程治理和自动化监控。把MD01当作一个信号灯而不是全部把力量放在“红灯亮了能不能及时反应”以及“怎么让红灯少亮”上效果会好得多。8. 一些小技巧和我的个人经验最后分享几个我在实际项目里沉淀下来的细节不算高大上但很管用。第一永远保留上一次成功运行的MRP运行日志和参数变式名称。当出了问题你首先要能回答“昨天跑MRP用的是什么参数”。否则排查会变成大海捞针。可以在后台Job的变式名称里加入日期后缀或者记录到运维表这是成本最低的追溯方法。第二别一次性跨工厂跑MRP。跨工厂物料需求比如跨工厂调拨、公司间采购虽然支持但对计划员的业务复杂度极高。每个工厂有自己的工厂日历、计划策略、审批流程放在一个MD01里跑很难控制结果。如果确实要跑多工厂建议拆分成多个Job按工厂设置不同变式避免参数互相污染。第三运行MRP后第一时间用MD04抽查几个关键瓶颈物料看是否得到预期结果。不需要全查抽查生产提前期最长的几个物料、最贵的几个物料、以及近期需求波动最大的几个物料就能大致判断这次运行是否正常。等到异常消息报表出来再做全面分析。第四把MRP清单导出到Excel时不要只关注错误类型。有些消息虽然标着“警告”比如“需求日期在过去”但很可能意味着你有一个已经过期的紧急需求被系统忽略如果不及时处理可能导致缺料。警告不可怕可怕的是对警告习惯性忽略。第五MRP运行参数不是一成不变的。随着业务量增长比如销售额翻倍、物料编码增加、新供应商加入原来“感觉良好”的参数可能突然不合适。我建议每半年做一次MRP参数运行效果复盘指标包括平均MRP运行时间、异常消息数量、计划订单准时率、采购申请转单周期等。数据驱动调整参数比靠感觉更靠谱。差不多先写到这里。MRP参数这个话题聊聊可以很久落到实操上还是那句先理解按钮背后的业务逻辑再动手去配。别把MD01当成一个黑盒按钮它是一面镜子照出你整个计划体系是否健康。