
1. 先从一道“净需求演算题”说起MRP到底在算什么我见过很多计划员和顾问在MD07或者MD04面前争论明明销售预测做了1500客户订单也就1000库存还有800为什么MRP还是建议我生产1600有人怪系统有人怪策略其实问题往往出在一件事上——你根本没搞清楚MRP净需求里客户订单和预测分别扮演了什么角色谁在什么时候被谁抵消了。MRP的净需求计算本质上是一道下面这种加减法的题净需求量 独立需求 相关需求 安全库存 - 库存可用量 - 计划到货量这里最容易理解错的就是“独立需求”这个篮子。独立需求包含客户订单需求、预测需求也就是计划独立需求SAP里叫PIR、集团内调拨需求等等。而相关需求是从上层物料传导下来的比如成品齿轮箱要生产1000件每件需要2个轴承那么轴承的相关需求就是2000颗这部分需求在MRP里是“跑出来的”不需要计划员手工维护。可用库存也不是简单的“库存表里的数量”。在净需求计算中可用库存 现有库存 - 已分配的库存。已分配库存包括销售订单已经承诺但还没发货的库存、收货冻结库存等。所以你会发现MRP看到的“可用”往往比仓储台账少这不是系统算错了而是你把“库存总量”和“可用量”混为一谈了。我拿一个具体案例来演算。物料FIN-1000当前库存800件其中已分配给销售订单100件。计划订单在相关期间内到货200件。安全库存设定为0。现在有一张客户订单需求在第10周要1000件预测PIR在第10周维护了1500件。先按最简单的方式算总需求 客户订单1000 预测1500 2500。可用库存 现有库存800 - 已分配100 700。净需求 2500 - 700 - 200 1600。这个数字就是MRP会建议你通过计划订单来满足的量。但请注意这是假设客户订单和预测全部同时计入需求。现实中SAP不会这样粗暴因为存在一个非常关键的“预测消耗”机制当客户订单进来后系统会先让订单去“吃掉”同期间的预测吃掉之后的预测才参与净需求计算。还是同一个例子如果客户订单1000把预测1500消耗掉1000那么第10周的预测实际上只剩余500。总需求就变成了剩余预测500 客户订单1000 1500再减可用库存700和到货200净需求变成600而不是1600。同一个物料、同一个预测、同一张订单因为“消耗”与否净需求从1600变成600这就是很多计划员看不懂MRP结果的根本原因。整篇文章要讨论的正是客户订单和预测需求通过什么规则、什么策略、什么参数来影响这个净需求结果。2. 客户订单与预测在MRP里的双重身份两类独立需求如何各就各位要理清净需求先得认清楚这两个需求来源在SAP中的数据结构。它们虽然都叫独立需求但来源路径完全不同MRP对待它们的方式也有微妙的差异。2.1 客户订单需求从销售订单到MRP需求客户订单需求由销售订单进入系统当你在VA01创建一张销售订单并输入交货数量后如果该物料在物料主数据里维护了“MRP类型”和“MRP相关需求”字段系统就会同步生成一条独立需求记录。这条记录在MD04的库存/需求清单里显示为带有销售订单号的“Cust. req.”行上会有订单号、客户编号、需求数量和需求日期。客户订单需求的特点是“刚性”。它不是计划员拍脑袋填的而是一份已经由客户确认的承诺。MRP计算时这张订单的数量是默认全量计入总需求的。除非你在需求管理里把该订单标记为“计划消耗”或者通过特定策略让它去抵消预测否则它不会凭空消失。这一点与预测不同——预测是“柔性”的可以被订单消耗掉一部分甚至在某些策略下整体退出计算。2.2 预测需求由需求计划直接维护的计划独立需求预测需求通常通过MD61创建计划独立需求来实现。计划员维护物料、工厂然后在时间轴上输入各期间的预测数量系统自动生成PIR行在MD04里显示为“Plan Ind. req.”有时候也叫“DF”即Demand Forecast。PIR可以维护在日、周或月期间级别这取决于需求管理内的期间标识设置。PIR最大的特点就是“可被消耗、可被调整”。它不是一个确定的销售承诺而是你基于历史、市场判断或销售漏斗做的预判。既然是预判就得允许后续被真实订单修正。SAP里用来修正预测的手段就是预测消耗。这里要提醒一下PIR还有一个很容易被忽视的属性叫“需求减少”。你可以用MD72调整或删除未消耗的PIR也可以用事务代码MD73归档过期需求。很多项目上线后预测数据越积越多净需求越跑越大很大原因就是没有人定期清理失效的PIR。系统不会自动判断“这个预测已经过时了”它只会把数据原封不动地接到净需求计算里。2.3 总需求中两者如何并存当一个物料同期间既有客户订单又有PIR时MRP在计算总需求时会把它们合并但合并之前先要做消耗处理。更准确地说系统按照你设定的消耗规则在特定期间范围内用客户订单去减少PIR的数量然后剩下的PIR加上全额客户订单形成当期总独立需求。这里有个新手常犯的错误以为“预测消耗”是把客户订单减掉总需求等于预测量加上订单减去订单。不是这样。实际逻辑是总需求 PIR的未消耗量 客户订单需求量也就是说客户订单数量始终保留预测只是被扣掉一部分“已经被订单证明”的量。就前面案例而言PIR 1500被订单1000消耗后剩余500总需求还是1500。净需求计算基于这1500来跑。这个并存逻辑是理解后面策略选择的基石。无论你用哪种MRP策略先把这个基石立住后面策略带来的行为差异就只是“消耗方向”、“消耗区间”和“需求来源优先级”上的变化。3. 策略选择决定需求性格MTS与MTO是怎么彻底改写净需求结论的同一个物料同一个期间同样的订单和预测如果物料主数据MRP3现在叫MRP4视图里的策略组不同MRP跑出来的净需求可能是天壤之别。这不是系统随机行为而是策略组从需求管理层面决定了“预测和订单谁说了算”。我逐个拆解几个最常见的策略。为了方便理解我统一沿用上面的物料案例库存800已分配100计划到货200客户订单1000在第10周预测1500在第10周。3.1 按库存生产MTS策略组10、11、30的判断逻辑策略10是按库存生产中的常青树。它的核心逻辑是预测作为计划的主要驱动源客户订单负责消耗预测。MRP运行后独立需求 剩余预测500 客户订单1000 1500净需求 1500 - 700 - 200 600。如果这个期间没有任何客户订单独立需求就是1500净需求会变成1500 - 700 - 200 600结果一致。不过请注意有订单和没订单虽然净需求结果相同但差异在于预测剩余量没订单时预测剩余1500有订单时剩余500。这会直接影响后续期间的需求衔接。策略11与策略10类似但多了“预测在需求期间内做平滑”的处理适合需求波动大的环境。策略30是按库存生产按批量收集需求再一起计划适合大批量、低频率的生产模式。三者共同点在于预测从来不会被无视客户订单也始终在里面参与需求合并。演示一下实际逻辑差异当客户订单进来后策略10和30都立即用订单去消耗同期间的预测消耗区间默认为1个期间正向、1个期间反向这取决于你给该策略组配置的消耗参数。如果你的策略组没配置消耗参数那么系统做净需求计算时预测和订单就是完全相加净需求直接变成1600。很多顾问排错到最后才发现问题不是策略用错了而是策略组绑定的消耗参数文件是空的。3.2 按订单生产MTO策略组20的净需求特点策略20是典型的按订单生产。它的逻辑对预测非常“不友好”预测不作为MRP的独立需求参与净需求计算。MRP运转时唯一驱动计划订单的就是客户订单需求。所以第10周的需求就是客户订单1000净需求 1000 - 700 - 200 100。在实际项目中用策略20的物料通常不维护PIR或者维护了PIR但设置了“需求关联”和“消耗标志”使得它们不被MRP纳入计算。你用MD61维护了PIR却不给策略20做消耗配置MRP会把PIR当空气吗不会。它会按照策略组里的需求参数来判断——如果你给策略20配了PIR并设置了它参与MRP预测照样会算进去。这点特别容易踩坑PLM表导出显示某物料PIR为0但MD04里有预测需求十有八九是策略组的消耗指示设置错了或者用了带预测的策略变式。3.3 策略40、52、70预测与订单先后主导的中间路线策略40是按计划生产之后按订单交货实际上很像策略10的升级版预测先驱动计划客户订单到达后消耗预测。与策略10相比策略40多了“计划消耗”的语义它允许需求计划在更长时间跨度内管理预测的消耗和再消耗而且对最终组装件的计划有更好的可追溯性。策略52介于策略20和策略50之间其特点是按订单生产但仍然维护PIR并且在订单进入后快速消耗预测。这种策略适合产品由标准化半成品组装成差异化成品的场景预测驱动半成品生产订单驱动成品组装两种需求在不同物料层级各司其职。策略70常常被拿来单独讲因为它在需求管理里属于“计划展开”范畴。当订单进入时它不直接在产成品层触发计划订单而是在上层通过“装配订单”的方式把需求传给下层物料展开系统会为下层组件创建独立的预留或计划订单。预测在这个策略里依然存在但它的消耗方式更激进订单进入后预测会被消耗同时系统会针对装配层生成汇总净需求。策略70更适合项目型制造比如飞机制造、大型设备工厂里那些按项目编码维护的物料。3.4 策略组对比表相同数据在不同策略下的净需求结果策略组计划驱动源预测是否参与净需求第10周独立需求示例第10周净需求示例10预测参与且被订单消耗150060020订单默认不参与100010040预测参与被订单消耗150060052订单预测参与被订单消耗150060070预测展开参与被装配订单消耗1500要求装配层判定这个表格不是让你背结论而是提醒你一个关键判断如果预测消耗参数生效策略10、40、52在本案例计算结果相同但如果消耗参数没配置对策略10可能变成1600策略20还是100。这就是同样的物料在A工厂和B工厂MRP结果对不上的高频原因——工厂级策略配置不一致需求管理参数没统一。4. 预测消耗机制客户订单如何一步步“吃掉”预测净需求随之变化如果说前面是在讲需求来源的“性格”那预测消耗就是在讲“行为规则”。策略组确定了大方向真正决定净需求精确数值的是消耗机制里那些参数细节。很多SAP项目上线一两年计划员还闹不明白为什么MD04里的PIR行旁边常常出现减号就是这个机制没吃透。4.1 消耗的本质用真实订单修正预测偏差预测无论做得多精细本质上都是对一个不确定未来的猜测。当销售订单实际到达后我们希望系统把“已被证明的需求”从预测里剔除避免重复计划造成过剩库存。这个剔除法就是消耗。消耗发生在MRP运行时刻。系统读取客户订单后根据消耗模式在时间轴上找到目标PIR把订单数量与其对冲。注意这里的“对冲”是发生在净需求计算之前的它不是把订单数量从PIR里物理删除而是在计算总需求时将预测量按消耗结果截断。从MD04的视角看PIR行的“消耗”列会出现一个负数表示该期间预测中有多少被订单抵消了。4.2 消耗模式与消耗区间正向、反向、还是正反向结合消耗模式有三个基础选项正向消耗、反向消耗、正反向消耗。正向消耗是指当订单日期早于预测期间时订单去消耗未来期间的预测。反向消耗是指当订单日期晚于预测期间时订单去消耗过去期间的预测。正反向结合则是允许订单在其期间前后的一定范围内“借”预测来抵消。在SAP的标准配置中消耗参数文件里可以定义“正向消耗期间数”和“反向消耗期间数”。常见配置是各自为1也就是允许订单消耗前后各一个期间的预测。比如第10周订单1000件系统会先看第10周PIR不足时再往第9周和第11周找PIR继续消耗。这里有一个很实际的案例。某工厂成品物料预测是按月维护的比如10月预测1500。9月底进来一张订单交货期在10月15日按周分割的需求日期落在10月的第3周。如果消耗区间配置为1个月订单会去消耗10月份整月预测的1500如果配置为1周但预测层级不在周级别系统消耗的粒度可能就无法对齐导致明明有预测可消耗系统却提示预测不足。这既不是订单的问题也不是预测的问题而是预测期间级别与消耗区间粒度不匹配的结构性问题。4.3 消耗参数文件和策略组的绑定关系消耗参数在SAP里通过“定义消耗参数”配置事务代码路径在IMG里通常是生产 - 需求管理 - MRP - 计划 - 定义消耗参数。配置完成后需要在策略组Strategy Group里将该消耗参数文件指派给对应策略。同时物料主数据MRP4视图的“消耗标识”字段也可以单独控制这会导致同一个策略组在不同物料上有不同表现。举个例子物料A在MRP4视图维护了“消耗标识”为1按期间消耗PIR物料B维护了“消耗标识”为2只消耗生产计划表尽管它们都用了策略10跑出来的净需求结论可能完全不同。B的PIR可能根本不被订单消耗于是预测长期按原始量参与需求计算——这种隐藏差异只有在逐项核对MD04时才会暴露。还有一个参数叫“消耗标识只用于反冲”Consumption only for backwards/forwards之类这里不展开但你在排错时必须知道物料主数据层的消耗标识会覆盖策略组层的消耗参数而且物料的维护优先级高于策略组的默认值。项目里遇到“物料A和物料B同样策略但净需求行为不一致”先查物料主数据MRP4视图的消耗标识是不是被改过。4.4 在MD04里怎么看消耗结果按我的习惯排查净需求问题时MD04是比MD07更精确的一层。MD04的库存/需求清单里把所有行展开后你会看到同一物料同一天可能存在三个不同性质的行PIR行、客户订单行、计划订单行。PIR行右侧有一个“消耗”字段如果该值为负说明有订单正在消耗这部分预测。接着点选客户订单行按“需求追溯”功能可以用事务代码MD67或者直接双击订单号系统会显示这张订单消耗了哪一期间的预测消耗了多少。如果你发现订单没有消耗预测继续查消耗参数文件和消耗标识。逻辑上常见结果是配置了消耗标识但消耗区间太小订单所在日期与预测期间之间隔了远超参数的时长导致找不到可消耗预测。5. 计划时界预测在时间维度上的“刹车片”缺了它净需求会被预测绑架计划时界Planning Time FenceSAP里常见字段叫PTF是另一个影响净需求计算的关键机制但它经常被忽略尤其在很多MM顾问只配置“收货处理天数”的项目里。简单说计划时界规定了预测在什么时间段内不再参与需求计算MRP在时界内只认客户订单需求。物料主数据MRP2视图有“计划时界”字段单位是“工作天数”。假设该字段设置为10意味着从今天起10个工作日内MRP计算净需求时PIR被放置在一个所谓的“时界内”系统不会用它来生成新的计划订单。这段时间内的需求以客户订单为准计划订单也倾向于保持相对稳定不会因为预测波动被反复调整。为什么要有这个机制因为离交货日期越近生产过程已经展开你不可能因为预测加了一百件就重新安排产线。预测是远期的“指南针”越靠近交付它就越要让位于实打实的订单。计划时界本质上就是在时间维度上为预测设置了一个“有效期”。这里必须纠正一个常见误解计划时界不是指提前期。提前期是物料从投产到完工所需的工作天数计划时界是需求管理的边界。两者可以相等也可以完全不同。很多项目把计划时界设为0结果预测在近期需求中始终全量参与计算一旦预测偏高短期净需求就会虚高计划员一边看到库存堆积一边看到系统建议超量投产就是这种配置导致的。计划时界与预测消耗的配合也很关键。如果消耗参数允许订单反向消耗过去期间同时计划时界内的PIR又被冻结那么一张近期订单可能既无法消耗时界内的预测又因为反向消耗区间够不到更早的预测结果是你看到预测还在那订单需求也还在算总需求就变成订单加全部预测。这个组合问题在项目排错中经常出现排查思路很明确先确认物料主数据计划时界是否大于0再确认消耗参数是否允许跨越时界边界消耗。我在实际项目中处理过一例成品物料计划时界设为15个工作日但预测维护是按月期间标识M反向消耗期间设了30天。账面上两者似乎兼容实际运行时系统严格按工作历和期间边界做消耗。由于计划时界内的PIR行被锁定订单反向消耗又指向近期被锁定的预测系统虽然“找到”了预测却不允许消耗最终导致该期间净需求比预期高出一截。解决方案很简单把该物料的计划时界调整为覆盖主生产计划冻结的最小时间窗口而不是简单地按提前期来设。物料主数据里的计划时界还支持“按策略组自动确定”。在策略组配置中你可以设定“MPS和MRP类型”和“计划时界”的对应关系让不同策略对时界内的处理方式不同。比如策略20的物料因为本来就是订单驱动时界设不设影响不大但策略10的物料如果时界设得太长预测被冻结的时间窗口过大会导致未来需求无法通过预测提前备料造成交付延迟。所以计划时界的值要结合策略使用不是越大越安全也不是越小越灵活。6. MD07核查与实务排查从净需求数字反推规则问题最后这部分我想结合MD07这个事务代码聊聊实务中的核查方法。MD07在SAP里是“物料需求追溯/汇总显示”的工具它可以把一个物料在某一期间内的需求来源汇总显示尤其适合在MRP运行后快速查看成品物料的净需求构成。MD04更偏“单据级”MD07更偏“期间级”。6.1 MD07到底看什么输入物料号和工厂MD07界面会按期间展示总需求、计划到货、可用库存、净需求等关键指标。双击某一期间的总需求数字系统会列出该期间所有需求来源也就是客户订单、预测、相关需求的明细。我建议日常核查时分三步走。第一步看总需求和净需求的比例关系如果净需求长期远大于真实销售节奏先怀疑预测是不是没被消耗。第二步看需求明细行中PIR和客户订单的数量如果PIR剩余量长期不为零说明订单没有有效消耗预测。第三步回到物料主数据MRP4视图和策略组核对消耗标识、消耗参数、计划时界这三项配置。6.2 一个典型的净需求偏差排查链有一次我接手一个项目某成品物料的净需求每周都会冒出几千件的多余计划。计划员反复删计划订单到下周又跑出来。查MD07发现第10周预测3000件可客户订单明明只有800件系统却建议生产2200件。第一轮排查我先把MRP4视图的消耗标识打开确认是“消耗PIR”。再查策略组消耗参数发现对应策略10下面的消耗参数文件是空的——也就是说系统没有授权任何消耗区间。订单永远找不到预测可消耗所以预测3000全额计入总需求加上客户订单800再扣掉库存和到货净需求自然居高不下。解决方法是给该策略组指派消耗参数文件设正向1个期间、反向1个期间重新跑MRP。第10周预测3000依然在但被800件客户订单消耗掉800剩余2200。此时总需求 剩余预测2200 客户订单800 3000与之前一致净需求也差不多。等等为什么改了消耗参数净需求却没怎么变原因在于该物料预测期间是月级别而订单交货期间在周级别两者粒度不匹配。系统按期间标识换算后订单800把月度PIR 3000在一周内消耗了800月度剩余预测仍有2200。总需求依然是3000表面看消耗生效了但净需求没变。这个案例说明消耗参数不是万能的需求管理的主数据粒度必须统一。最终解决方式是把PIR的期间标识改为周级别让预测按周维护订单消耗才能在更细的粒度上反映真实需求净需求才会下降。6.3 我的实操经验与几条提醒第一永远用MD04看单据级明细用MD07看期间级汇总两者结合才能定位问题是出在需求维护还是配置上。只凭MD07的净需求数字判断容易被汇总层级掩盖真实来源。第二排查净需求异常时先看“有没有消耗”而不是“配置对不对”。配置在SAP里几层嵌套策略组、消耗参数、消耗标识、计划时界任何一层都可能覆盖另一层。直接看MD04里PIR行和客户订单行之间的关系能快速判断消耗到底有没有发生再反推是哪层配置阻止了消耗。第三预测维护要有“生命周期管理”。PIR不是创建了就完事的要定期用MD72调整、用MD73归档过期预测。很多工厂净需求越跑越高不是系统坏了而是从上线第一年到现在积压的PIR从没清理过。预测作为独立需求里的柔性部分必须靠计划员持续维护才能保持合理性。最后分享一个小技巧给策略组指派消耗参数文件时可以先在测试机把一个物料的消耗区间临时调大比如正向设为5个期间跑一次MRP看净需求变化幅度用来验证该物料对预测消耗的敏感程度。这个测试只要几分钟能帮你判断主数据粒度、时界和消耗参数之间是否匹配比反复开会核对配置管用得多。MRP净需求看似是一套成熟的标准逻辑实际运行中边界情况极其丰富。客户订单和预测一个刚性一个柔性一个代表承诺一个代表预判它们之间的博弈都浓缩在策略、消耗和时界这三组参数里。把这三组参数的逻辑真正理清你在MD07面前就不会再对着一个净需求数字挠头了。