ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SAP生产预留全解析:MB21手动预留、OPL8自动预留与MBVR清理

SAP生产预留全解析:MB21手动预留、OPL8自动预留与MBVR清理

简介:《SAP生产预留操作》是一份面向SAP生产计划、物料管理与仓储执行人员的实操指引,围绕生产预留的创建、查询、批量处理与自动预留展开,帮助读者理清从预留编码、缺省值配置到可用性检查的关键环节。压缩包内共1个docx文件,约836KB,以图文步骤和事务码说明为主线,便于按目录快速查阅OMC2、MB21、MB23、MB25、MBBR、MBVR及OPL8等模块。内容覆盖工厂级参数配置、手动与批量创建预留、按编号或物料查询、生产订单自动预留控制及预留底表等知识点,适合作为日常操作参考和问题排查手册。目前已有697人学习,可帮助初中级用户建立较完整的生产预留操作框架,也可供有经验的顾问查漏补缺。

1. 生产预留是什么:先把“坑”占上再说

“SAP 生产预留”听起来像是“提前把东西生产出来”,其实它提前占的不是产能,而是库存里的那批物料。打个比方,公司团建订餐厅,人还没到,桌先订下,别人再想订这一桌就没戏了。预留就是系统里的一张“占座条”:告诉系统,这批物料在某天要留给某张工单或者某个成本中心,别被人随手用掉。

它值得搞明白,是因为这张条子会进入物料需求计划(MRP)的视野,直接影响“到时候到底有没有物料可用”。搞不清它,常见的结局是账面有物料、现场没物料;或者反过来,一堆早就作废的预留把可用库存占得干干净净。

2. 为什么要在系统里提前占坑:预留解决的是“到时候有没有”

物料明明躺在仓库里,工单开工却被告知“没有可用库存”——这种事在上了系统的工厂里不算稀奇。原因往往不是物料真的没了,而是这批物料已经被别的单据以“预留”的名义占住了;或者反过来,该占的没占,被别的订单先领走了。

2.1 MRP 只认写进系统的需求

物料需求计划这套逻辑非常“死心眼”:它不会读心,也不会去问车间下周要投什么料。它只看系统里有没有一条带物料、带数量、带需求日期的记录。有,就纳入计算;没有,就当这件事不存在。

预留就是往这个账本上写一笔。操作指引里那句“预留会被 MRP 考虑,这意味着被需求的物料在出库时将被及时获得”,说的就是这个意思:不写,MRP 不知道;写了,采购和计划才有机会提前把物料备出来。

打个比方,家里做饭,冰箱里的菜是库存,但如果你只是在脑子里想“周五晚上要做那道菜”,没人会去补货;把它写进购物清单,家里人才知道要买。预留就是这张购物清单在系统里的位置。区别在于,购物清单写在纸上,MRP 只读系统里的记录。

这也是为什么很多“缺料”追到最后,问题不在仓库,而在需求没被记录下来。工单没下、预留没建、MRP 跑出来的需求就是零,采购自然不会有动作。等到车间真的伸手要料,留给采购的只剩下紧急采购这一条路,成本和交期都难看。

2.2 发货点的那点准备,靠的是提前通知

指引里把预留的目的写得很直白:保证需要它的时候是可用的,用来简化和加快发货过程、在发货点做好准备工作。

翻译成现场语言就是:仓库提前知道某天有人要来领某批物料,可以先把物料拣出来、放到待发区、核对批次和数量;而不是人已经等在窗口,仓管还在库位之间来回找。有没有这条记录,差别很大。

这也是“预留”和“口头打招呼”的本质区别。口头打招呼只存在于两个人的记忆里,换班就断;预留写在系统里,谁查都能看到,还能被 MRP 拿去算需求。一件事情的可见范围,决定了它能不能被协调。

2.3 手动与自动:同一本账的两种写法

系统里的预留有两个来源。一个由人手工建,事务码是 MB21;另一个由生产订单在创建或下达时自动生成,开关在 OPL8。两者落到数据库里是同一种东西,都存在 RKPF(凭证头)和 RESB(行项目)两张表里,区别只在于“谁写的、能不能改”。

对比项手动预留(MB21)自动预留(生产订单)
触发方式人工填单订单创建或下达时系统生成
典型场景研发领料、成本中心投料、转储生产工单的 BOM 组件需求
数量来源人工输入BOM 组件数量按订单数量展开
能否修改可以用 MB22 修改不能用 MB22 修改,只能改订单组件
发货方式MIGO 发货MIGO 发货

这张表里最容易被忽略的是“能否修改”这一行。手动预留是你自己写的,写错了改一改很正常;自动预留是生产订单的影子,改影子不改本体没有意义,所以系统干脆把修改入口关掉。后面讲误区时还会回到这一点。

2.4 预留不是把物料锁进保险柜

很多人第一次接触预留,会以为建了预留,库存就被扣走了。并不是。物料还在库存里,数量没少,价值也没动,只是系统在“可用数量”上做了一个逻辑占位。

这个占位有松有紧:预留行上有个“M”标记,勾上才代表可以发货,不勾就不可用。所以一张预留单建了但不勾 M,相当于占了座位却不让上菜,看着有记录,实际发不出去。这个勾什么时候勾、由谁勾,正是后面要讲的重点。

3. 手动预留这条路:从 MB21 到 MBVR 的完整链路

自动预留解决的是“有工单”的场景,可现实里总有一些消耗走不了工单:研发试制、成本中心领料、临时转储。这些需求如果不管,消耗就游离在系统之外,成本归集不到对象上,物料也没人提前备。手动预留就是为这类场景准备的。

3.1 什么场景非得手动建:研发领料与成本中心投料

指引里给了一个很典型的业务场景:新品研发阶段无法对工单实施发料,又想把这种消耗纳入系统做全局控制,申请之后创建成本中心预留。适用范围写得很清楚:转储、成本中心投料。

为什么研发阶段走不了工单?因为工单背后要有 BOM、有工艺路线、有明确的产出数量,而研发试制往往这几样都不齐。但没有工单不代表没有消耗,物料领走了就是成本,不记录就只能变成一笔糊涂账。手动预留把“领料”和“成本中心”挂在一起,消耗就有了归属。

移动类型决定这笔消耗往哪走。指引里列了三组:成本中心用 201,生产用 261,研发用 Y10。前两个是系统标准移动类型,Y10 属于企业按研发业务自定义的类型,具体编号各家的配置可能不一样,看自家系统里的定义即可。

移动类型典型用途消耗对象
201成本中心领料成本中心
261生产订单领料生产订单
Y10研发领用(自定义)研发项目或成本中心

选错移动类型的后果不是报错,而是科目走错。物料是发了,成本却记到了不该记的地方,月底对账时才被发现,回头再冲销,一笔业务变成三笔。这类翻车在月末结账前特别集中,属于典型的“当时省一秒,事后忙半天”。

3.2 MB21 界面上真正要盯的几个字段

创建入口在菜单里:后勤 > 物料管理 > 库存管理 > 预留 > MB21 - 创建。界面分两层,表头管整张单,行项目管具体物料。

表头要填的是预留编号(按后台号码段自动带出)、需求日期、工厂。需求日期最关键,它决定 MRP 什么时候要这批物料,也决定后面 MBVR 清理时按哪个日期来判断超期。行项目要填物料、数量、移动类型,以及科目分配对象——成本中心预留就要把成本中心填上。

建完之后想看库存状态,用 MMBE 看库存概览,能看到当前库存、已预留数量和被预留占掉之后的可用数量。这三个数放在一起看,才能判断“到底还能不能发得出去”。只看库存总数,很容易得出错误结论。

3.3 “M”这个勾:能不能发货的分水岭

指引里有一句很实在的话:勾选 M 就可以随时发货,即使一个月以后发货,一般临近才勾选,不勾选不可用。

这句话点出了 M 标记的双重身份。它既是“允许移动”的开关,也是“这张预留还算不算数”的信号。提前很久就勾上,等于把物料长期锁死,可用库存被白白占着;一直不勾,真到要发货的时候又发不出去,得回头补勾。

实务里比较稳妥的做法是临近发货再勾。但临近是多久?后台可以配一个天数,指引里写的是“如果此处值为 10 天,可以提前发货的天数 10 天(工作日)”。也就是说,需求日期前 10 个工作日内,这张预留就进入了可以动的状态。这个值配得太小,发货窗口太窄;配得太大,物料又被过早占住。

3.4 建完怎么找:MB23 与 MB25 的两张面孔

预留建多了,查找就成了日常动作。系统给了两个入口,按不同的线索查。

MB23 是按预留编号查。手里有单号,直接输进去,能看到这张预留的头信息和行项目,也能看到它关联的生产订单。自动生成的预留同样能用 MB23 查,指引里就提到“通过生产订单 CO03 的 BOM 和预留 MB23 都可以查看物料的需求数量”。

MB25 是按物料查。想知道某个物料被哪些预留占用了、占了多少、需求日期是什么时候,用这个。排查“物料明明有库存却发不出去”时,MB25 比 MB23 更好用,因为你是从物料出发的,不是从单号出发的。

两个事务码解决的是两种思路:一个是“我知道单号,想看内容”,一个是“我知道物料,想看谁占了”。日常排查问题,后者用得更多。

3.5 批量创建与批量处理:MBBR 和 MBVR

单张单子建得多了,就有了批量工具。MBBR 用来批量创建预留,适合一次要给多个物料、多个成本中心建预留的场景,省去一张张敲的重复劳动。

MBVR 的职责更特殊:批量处理预留,包括清理超期预留和批量勾选 M。这个事务码背后有一套基于日期的判断规则,指引里写得很细。

后台先配两个值:允许移动的天数(示例是 10 天)、保持期间(示例是 30 天)。然后以运行程序时的基准日期为准:

  • 基准日期减去过去的需求日期,如果大于 30 天,说明这张预留早就过期了,MBVR 会把它从数据库里物理删除;
  • 将来的需求日期减去基准日期,如果小于 10 天,说明快到发货窗口了,MBVR 会自动把“允许的移动”勾上。

“物理删除”这四个字要留意,删掉就是数据库里没了,没有后悔药可吃。所以这套规则配之前,最好先确认业务上真的能接受 30 天这个阈值。

指引里还有一句很关键的提醒:如果没人操作,后台的设置就不起作用,系统不会自动清除超期的预留。换句话说,配置只是规则,MBVR 才是执行者。常见的做法是在后台挂两个定时作业,一个处理 30 天外的过期预留,一个处理 10 天内的自动勾选,每天各跑一次。少了这一步,超期预留会一直堆在表里,可用库存被越吃越少,查问题时还以为是库存不准。

4. 自动预留与后台开关:OPL8 决定的三种时机

生产订单是自动预留的主要来源。一张工单下有若干 BOM 组件,每个组件需要多少料,系统一清二楚,把这些需求写成预留行,就是自动预留。省掉了人工填单,也避免了漏建。

4.1 OPL8 里的三个选项:从不、下达后、立即

自动预留的开关在订单类型上。路径是 SPRO > 生产 > 生产线控制 > 主数据 > 订单 > 定义订单类型的相关参数,事务码 OPL8。里面关于预留的选项有三个:从不、下达后、立即。

“从不”就是这类订单不生成预留,物料需求靠别的途径传递,一般不用。“下达后”是状态变成 REL 之后才生成预留,好处是没下达的订单不会提前占料,坏处是下达和预留之间有个时间差。“立即”是订单一创建就生成预留,占料最早,但草稿状态的订单一多,可用库存会被压得很低。

这三个选项没有绝对的对错,取决于业务节奏。订单从创建到下达间隔很短的,选“立即”问题不大;订单经常建了又改、迟迟不下达的,选“下达后”更稳。选错了不会报错,只会让可用库存的数字长期偏离直觉,查起来很费劲。

4.2 自动预留长什么样:BOM 展开成一行行需求

一张生产订单建好,组件页签里列着要用的物料和数量,这些数据在预留里就是一行行的行项目。用 CO03 看订单的 BOM,用 MB23 看对应的预留,两边能对上。

自动预留的数量来自 BOM 组件数量乘以订单数量,需求日期跟着订单的日期走。这也是为什么改订单会影响预留:订单数量变了,预留数量跟着变;订单日期推后,预留的需求日期也推后。预留在这里不是独立存在的单据,而是订单的一个投影。

理解这一层,很多问题就不用猜了。看到预留数量和预期不符,先去看订单的组件数量和订单数量,而不是在预留界面上找原因。

4.3 自动预留不能改:MB22 改不了,只能 MIGO 发货

指引里写得很明确:自动产生的预留无法修改(MB22),但可以 MIGO 发货。

这条限制经常让新手困惑:明明看到预留数量不对,为什么改不了?因为自动预留的源头是订单组件,改预留等于绕过订单改数据,改完之后订单和预留就对不上了。正确的做法是回到订单,改组件数量或者订单数量,让系统重新生成预留。

这也解释了一个常见现象:有人发现 MB21 建不了预留,提示已经存在自动预留。因为同一张订单的同一物料,系统不允许再手工建一张重复的预留,否则需求会被算两遍。指引里那句“MB21,已自动创建预留后无法再手工创建预留”,说的就是这个约束。

4.4 编号、缺省值与可用性检查:三个容易忽略的后台

手动预留的行为,很大程度上由后台几个配置决定,它们不显眼,但决定了前台顺不顺手。

第一个是编号。OMC2 负责为预留定义号码分配,路径是 SPRO > 物料管理 > 库存管理和实际库存 > 号码分配 > 为预留定义号码分配。预留编号按号码段自动生成,号码段配得不对,建单时会直接卡住。

第二个是缺省值。路径在 SPRO > 物料管理 > 库存管理和实际库存 > 预留。里面有个 MVT 勾选,控制前台是否默认把 M 勾上;也可以在前台用菜单“编辑 > 附加功能 > 用于所有项目 > 移动开关”来批量控制多行项目的 M 标记。同一页还有几个值:天数控制提前发货的工作日窗口,保持控制预留保留多少天、超期物理删除,MRA 则是为预留自动创建存储地点库存数据,避免发货时因为缺存储地点信息卡壳。

第三个是可用性检查。路径是 SPRO > 物料管理 > 库存管理和实际库存 > 预留 > 设置动态可用性检查。这套规则由两处共同决定:物料主数据 MRP3 视图里的可用性检查分组,以及后台为事务代码分配的检查规则。指引里提到 02 和 03 决定了 MB21、MB22 的可用性检查规则,意思就是这两个事务码在保存时会按对应规则去校验可用数量。

工厂级还有一层参数,在后台“物料管理 > 库存管理和实际库存 > 工厂参数”里,按工厂维护默认行为。多层配置叠在一起,出问题时容易互相甩锅,排查顺序建议是从前台现象倒推:先看物料主数据的检查组,再看事务码规则,最后看工厂参数。

4.5 底表:RKPF 与 RESB

预留的数据落在两张表里:RKPF 是凭证头,存预留编号、关联订单、成本中心这些头信息;RESB 是行项目,存行号、物料、工厂、需求数量、已出库数量。两张表靠预留编号关联。

-- 按预留编号查凭证头与行项目 SELECT h.RSNUM, -- 预留编号,两张表的关联键 h.AUFNR, -- 关联的生产订单号,手动预留可能为空 h.KOSTL, -- 成本中心,成本中心预留会填 i.RSPOS, -- 行项目号 i.MATNR, -- 物料号 i.WERKS, -- 工厂 i.BDMNG, -- 需求数量 i.ENMNG -- 已出库数量 FROM RKPF AS h JOIN RESB AS i ON i.RSNUM = h.RSNUM WHERE h.RSNUM = '0000123456';

这段查询做的是把一张预留的头和行拼起来看。RSNUM 是预留编号,也是两表关联的唯一线索;BDMNG 是这张预留要多少,ENMNG 是已经发出去多少,两者相减就是还欠的量。手动预留的 AUFNR 通常为空,自动预留则一定挂着订单号,这也是区分两种来源的一个土办法。不同版本的字段可能有细微差异,以实际系统里看到的为准。

5. 五个最容易踩的误区:预留、承诺量与库存的边界

预留这个概念不难,难在它和周围几个概念长得像。下面五条是初学者最容易混的地方,每条都按“混在哪、为什么混、怎么分”来说。

5.1 误区一:建了预留,库存就被扣走了

易混点:把预留当成出库,以为建完单库存就少了。

为什么混:因为可用库存确实变了。建完预留再去看 MMBE,可用数量下降,直觉上就会觉得物料被拿走了。

怎么区分:看库存总数和已预留数量两个字段。库存总数没变,变的是可用数量。物料还在库里,只是被标了一个“留给谁”的记号。真正的出库要等 MIGO 发货,那时候库存才减少、成本才发生。所以预留阶段反悔,撤销预留就行;发货之后再反悔,就得走冲销,麻烦程度不是一个量级。

5.2 误区二:自动预留也能像手动预留那样改

易混点:看到预留数量不对,直接 MB22 去改,结果发现改不动。

为什么混:两种预留看起来一模一样,都在 MB23 里能查到,界面也差不多,很容易以为权限也一样。

怎么区分:看有没有关联订单。自动预留挂着生产订单号,改它的正确入口是订单组件,不是预留本身。手动预留没有订单约束,MB22 可以改。判断方法很简单:MB23 里如果看到订单号,就别在预留上折腾了,回订单去改。改完订单,预留会跟着更新,这比硬改预留靠谱得多。

5.3 误区三:预留数量想填多少填多少

易混点:以为预留只是“登记一下”,填多大都行。

为什么混:有些场景下确实填得比库存多也不报错,于是就以为没有上限。

怎么区分:看可用性检查有没有生效。指引里的例子说得很清楚:库存总数 1001,已经预留了 2 个,可用就是 999,这时候再建预留,填 1000 可以,填 1001 就不行。也就是说,预留数不能超过可用数量。但另一句也提到,库存不够的时候仍然可以创建预留——这两种情况并不矛盾,区别在于可用性检查的规则有没有对该物料、该事务码生效。规则生效就卡上限,没生效就放行。所以“能不能超”不是绝对的,取决于配置,遇到不报错的情况别急着下结论,先确认检查规则。

5.4 误区四:后台配了保持期,系统会自己清超期预留

易混点:配完 30 天保持期,就以为超期预留会自动消失。

为什么混:“保持期间 30 天,超期物理删除”这句话读起来像是系统自动行为。

怎么区分:配置只是规则,执行要靠 MBVR 这个程序。指引里那句提醒很关键:没人操作,后台设置就不起作用,系统不会自动清除超期预留。所以真正要做的是把 MBVR 挂成定时作业,让它每天跑。只配不跑,等于定了闹钟不插电。这也是很多系统里预留越堆越多、可用库存莫名其妙变少的根源。

5.5 误区五:承诺量就是预留

易混点:把销售端的承诺量和内部的预留当成一回事。

为什么混:两者都会影响“可用数量”这个数字,看报表时经常混在一起。

怎么区分:通俗地说,承诺量是对客户的交期承诺,回答的是“这单货我能不能按时给”;预留是对内部物料需求的占位,回答的是“这批料我留给哪张工单或哪个成本中心”。对象不同,来源不同,可修改的程度也不同。指引里只点了一句“承诺量与预留不一样”,没有展开,实际排查时记住一条就够:客户那边的问题去看承诺,内部领料的问题去看预留,别拿一个去解释另一个。

6. 什么时候该建预留、什么时候别建:三条判断线

预留不是越多越好。建得对,物料有保障、成本有归属;建得滥,可用库存被虚占,计划看到的需求全是噪声。判断标准可以收敛成三条线。

6.1 三条判断线

第一条线:这笔消耗有没有别的单据承载。有生产订单、BOM 完整的,交给自动预留,别手工再建一张,否则需求算两遍。没有工单的研发试制、成本中心领料,才轮到 MB21 出场。

第二条线:需求日期是不是已经明确。预留的核心字段是需求日期,日期不清楚就建单,MRP 拿到的是假需求,MBVR 清理时也没有可靠依据。日期没定下来之前,先别急着占坑。

第三条线:这批物料是不是真的要紧。大宗辅料、随时能补的物料,建预留的收益有限,反而增加维护量;关键件、长交期件、独家供货物料,预留的价值才明显。

情况建议做法
有生产订单、BOM 完整交给自动预留,OPL8 选“下达后”或“立即”
研发试制、无工单手动 MB21,挂成本中心,移动类型按业务选
一次性转储、临时借料手动 MB21,临近发货再勾 M
只想确认物料被谁占了用 MB23 或 MB25 查,不要新建
预留堆积、可用库存异常偏少检查 MBVR 作业有没有在跑

6.2 一个具体例子

某制造企业上线系统后,计划员发现某关键物料的可用库存长期低于实际库存,明明仓库里堆着料,工单却总是不够用。查了一圈,问题出在两处:一是研发部门两年前建的一批成本中心预留从未清理,需求日期早就过去了,M 标记却一直挂着;二是 OPL8 里订单类型选的是“立即”,大量还没下达的草稿订单提前把料占住了。

处理办法不复杂:先把 MBVR 挂成每日作业,按 30 天保持期清掉过期预留,同时让 10 天内的预留自动勾 M;再把订单类型的预留时机从“立即”改成“下达后”,让没下达的订单不再提前占料。两件事做完,可用库存的数字才和仓库的实际情况对上。

这里面的教训是:预留是一个会累积的东西,建的时候没人觉得多,堆上两年就是灾难。从那以后我每次接手一套新系统,第一件事就是确认 MBVR 有没有定时作业在跑,第二件事是把 OPL8 的预留时机和业务节奏对一遍,两件事都不费什么时间,但能省掉后面无数次的“库存到底去哪了”。

希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进