简介:面向SAP实施顾问、生产计划与物料管理岗位人员,以及需要掌握生产预留操作的学习者,这份文档系统梳理了SAP生产预留的完整操作脉络,帮助解决预留创建、查询与可用性检查中的实际问题。内容覆盖预留背景、OMC2预留编码、缺省值与工厂级参数配置、预留可用性检查,并逐一讲解MB21手动创建、MB23按编号查询、MB25按物料查询、MBBR批量创建、MBVR批量处理及生产订单自动预留等事务码操作,还涉及预留底表与预留数不超过库存数等细节。资源包共1个docx文件,约836KB,以图文步骤形式编排,目录层级清晰,便于按模块查阅与对照练习。已有696人学习,适合作为日常操作手册或新人培训参考,帮助读者快速上手并减少预留环节的配置与操作失误。
1. 从一次预留数量卡壳说起:SAP 生产预留这套配置到底装什么
上周帮一个做电子组装的团队看系统,业务在 MB21 里建预留,数量填到 1001 就报错,填 1000 却过得去。他们以为是权限问题,查了半天角色,最后发现是工厂参数里那个“检查可用性”的开关在起作用——库存 1001,已经预留了 2 个,可用只剩 999,预留数自然不能超过 999。这种坑在 SAP 生产预留的配置里太常见了:不是装不上,是装完不验证,等业务跑起来才发现规则没生效。
这篇笔记记录的是 SAP 生产预留这套操作的完整落地过程,从 OMC2 号码段、工厂级缺省值、动态可用性检查,到 MB21 手动建预留、MBBR 批量建、OPL8 控制工单自动预留,再到 MBVR 后台清理超期预留。适合刚接手 SAP MM/PP 模块、需要把预留流程跑通的顾问和内部运维,也适合已经配过但被“预留删不掉”“M 勾选不生效”折腾过的熟手。装这套东西不需要额外软件,但配置顺序错了,后面每一步都会返工。
2. 预留编码与工厂级缺省值:OMC2 和 SPRO 参数怎么配
2.1 OMC2 定义预留号码段
预留编号是系统自动给的,号码段不配,MB21 一进去就报“号码段不存在”。路径是 SPRO → 物料管理 → 库存管理和实际库存 → 号码分配 → 为预留定义号码分配,事务码 OMC2。
进去之后看到的是按年度维护的号码范围,通常给预留分一个内部号段,比如 01 到 99 之间选一个没被占用的。操作上点“更改间隔”,填编号范围、起始值,勾上“外部”与否——预留一般用内部编号,不勾外部。
OMC2 界面关键字段: 编号范围 :例如 01 从号码 :0000000001 至号码 :0009999999 当前号码 :系统自动递增 外部 :不勾选(预留走内部编号)这里有个容易忽略的点:号码段是按年度维护的,跨年时如果没做年度复制,新一年建预留会直接失败。常见做法是每年底用 OMC2 的“复制”功能把上一年号段带到下一年,别等 1 月 1 号业务来报错才处理。另外号码段一旦有凭证产生,起始值就不能随便改小,改小了会和已有编号冲突,系统直接拒绝保存。
2.2 工厂级预留参数:天数、保持期、MVT 三个开关
缺省值配置在 SPRO → 物料管理 → 库存管理和实际库存 → 预留,以及工厂参数那一层。这里有三组参数直接决定预留能不能发货、会不会被自动清理。
第一组是“允许移动的天数”,对应界面上的 M 字段。配成 10 天,意思是需求日期前 10 个工作日内的预留可以提前发货。这个值不是越大越好,配太大等于放开了提前领料的口子,仓库账实不符的概率上升;配太小业务又抱怨“明明快到了却发不了货”。我一般按工厂的实际备料周期给,7 到 14 天之间取。
第二组是“保持期间”,配 30 天表示预留保留 30 天,超期由 MBVR 程序物理删除。注意是物理删除,删了数据库里就没了,没有后悔药。所以这个值要结合业务对账周期定,财务月结前删掉一批预留,对账时找不到凭证就麻烦了。
第三组是 MVT 勾选控制,对应前台“编辑 → 附加功能 → 用于所有项目 → 移动开关”。后台勾了 MVT,前台新建预留行项目默认带 M 标记;不勾则默认不带。M 标记的含义是“允许发货”,勾上就能随时 MIGO 发料,不勾就发不出去。
工厂参数关键项(SPRO 路径下): 允许移动的天数 :10(工作日) 保持期间 :30(天,超期物理删除) MVT :勾选(前台默认带 M 标记) MRA :按需,控制是否为预留自动建存储地点库存数据参数改完不是立刻对所有已有预留生效,新参数只影响之后创建的预留和之后跑的 MBVR。已经存在的预留,M 标记状态还是按创建时的规则走。这一点在排查“为什么老预留发不了货”时特别关键——不是配置没生效,是配置改晚了。
2.3 动态可用性检查:02 和 03 两个规则
可用性检查的配置在 SPRO → 物料管理 → 库存管理和实际库存 → 预留 → 设置动态可用性检查。真正决定 MB21/MB22 检查行为的,是物料主档 MRP3 视图里的“可用性检查”组,加上这里配的事务代码规则,两处共同决定。
文档里提到 02 和 03 两个规则决定 MB21/MB22 的检查逻辑。02 一般对应预留创建时的检查,03 对应修改时的检查。规则本身定义的是“检查哪些库存、按什么范围算可用量”。如果物料主档 MRP3 里可用性检查组留空,那 MB21 建预留时基本不做数量校验,填多少都过——这就是为什么有的工厂能建超库存预留,有的不能。
检查链路: 物料主档 MRP3 → 可用性检查组(如 02) ↓ SPRO 动态可用性检查 → 规则 02 的具体范围定义 ↓ MB21 保存时触发检查 → 超可用量则报错想让“预留数不超过库存数”这个控制生效,两处都得配:物料主档要有检查组,SPRO 里对应规则要定义清楚检查范围(比如是否含质检库存、是否含在途)。只配一处,检查要么不触发,要么触发得莫名其妙。这也是后面第 5 章要专门验证的原因——配完不拿真实物料试一遍,等于没配。
3. 手动与批量建预留:MB21、MB23、MB25、MBBR 实操
3.1 MB21 手动创建:M 标记和移动类型怎么选
MB21 是手动建预留的入口,菜单在后勤 → 物料管理 → 库存管理 → 预留 → MB21。业务场景很典型:新品研发阶段还没法对工单发料,但消耗要纳入系统做全局控制,就走成本中心预留。
操作顺序是:输入工厂、需求日期、移动类型,然后逐行填物料、数量、需求日期。移动类型按用途选——成本中心投料用 201,生产发料用 261,研发类有的团队自定义 Y10。移动类型选错,后续 MIGO 发货时科目就错了,改起来要冲销重来。
M 标记是这一屏最容易被问的字段。勾上 M,这行预留随时可以发货,哪怕需求日期在一个月以后;不勾,就发不出去。文档里的经验是“一般临近才勾选”,我认同这个做法:建预留时先不勾,等真正要发货前再通过 MB22 或 MBVR 批量勾上。这样既不会提前占住发货口子,也不会因为忘了勾导致仓库发不了料。
MB21 关键输入: 工厂 :必填 需求日期 :决定可用性检查和 MBVR 清理基准 移动类型 :201 成本中心 / 261 生产 / 自定义研发类 物料+数量 :逐行录入 M 标记 :建时一般不勾,临近发货再勾保存后系统给一个预留编号,拿这个编号去 MMBE 看库存、去 MB23 看明细。这里有个细节:MB21 建完如果立刻想改,用 MB22;但如果是生产订单自动带出来的预留,MB22 改不了,只能 MIGO 发货,这个差异在第 4 章 OPL8 那里会再碰到。
3.2 MB23 和 MB25:两个查询入口的分工
MB23 按预留编号查,MB25 按物料查。看起来只是查询,实际排查问题时分工很明确。
MB23 输入预留号,看到的是这张预留的所有行项目、每行的需求日期、数量、M 标记状态、已发料量。查“这张预留为什么发不了货”,先看 M 标记勾没勾,再看需求日期是不是还没到允许移动的天数窗口。查“这张预留为什么被删了”,MB23 里已经查不到,得去底表或者让 BASIS 查删除日志。
MB25 输入物料号加工厂,列出这个物料所有相关预留。适合的场景是:仓库说某个物料库存对不上,怀疑被预留占住了,用 MB25 一拉,所有占用的预留行都在,逐条核对哪些该发货、哪些该清理。比一条条问业务要预留号快得多。
查询选择: MB23 → 已知预留号,查单张预留全貌 MB25 → 已知物料,查该物料所有预留占用 MMBE → 查库存总量与预留占用关系三个事务码配合用:MB25 定位到可疑预留,MB23 看明细确认状态,MMBE 核对库存和可用量。排查“预留数不超过库存数”报错时,这个组合基本能一次定位到是哪张预留占住了可用量。
3.3 MBBR 批量创建:什么时候值得用
MBBR 是批量建预留,适合一次性给多个物料、多个成本中心建同结构的预留。比如月底给一批研发项目统一建下月投料预留,手工 MB21 一条条敲太慢,MBBR 可以按模板批量生成。
用之前要先想清楚:批量建的预留,M 标记、移动类型、需求日期都是统一带的,后续要差异化调整还得逐条 MB22。所以 MBBR 适合“结构一致、只是物料和数量不同”的场景,结构本身就不统一的,硬用批量反而增加返工。我一般只在确认这批预留的移动类型和日期规则完全一致时才用,否则宁可 MB21 分几批建。
MBBR 使用前提: - 移动类型统一 - 需求日期规则统一 - M 标记策略统一 - 仅物料/数量/成本中心不同批量建完同样要抽查:随机挑两三条去 MB23 看明细,确认移动类型和 M 标记带对了。批量操作最大的风险是“模板带错一个字段,整批都错”,抽查成本远低于事后逐条改。
4. 生产订单自动预留:OPL8 控制与工单联动
4.1 OPL8 订单类型参数:从不、下达后、立即
生产订单要不要自动生成预留,由订单类型的参数控制,路径是 SPRO → 生产 → 生产线控制 → 主数据 → 订单 → 定义订单类型的相关参数,事务码 OPL8。
找到对应订单类型(比如标准生产订单、返工订单),里面有个“预留/依赖需求”相关的控制项,三个取值:从不、下达后、立即。
- 从不:订单创建也不生成预留,适合那些不走预留发料、直接按订单领料的场景。
- 下达后:订单状态变成 REL 才生成预留。这是最常见的配置,因为未下达的订单还可能改 BOM 和数量,提前生成预留等于白占库存。
- 立即:订单保存就生成预留。适合交期紧、BOM 已冻结的场景,但代价是订单改动时预留要跟着调整,容易产生垃圾预留。
OPL8 订单类型参数(预留相关): 从不 → 不生成预留 下达后 → 状态 REL 后生成(推荐默认) 立即 → 保存即生成(慎用,易产生垃圾预留)选哪个不是拍脑袋,看业务对“库存占用时机”的要求。财务希望尽早锁定可用量,就偏“立即”;仓库希望减少无效占用,就偏“下达后”。改这个参数只影响之后创建的订单,已存在的订单不会追溯生成或删除预留。
4.2 自动预留的查看与限制:MB23 能看,MB22 改不了
订单下达后自动生成的预留,用 MB23 能查到,CO03 里看订单的 BOM 组件也能看到需求数量。两条路径看到的是同一份数据,MB23 更偏预留视角,CO03 更偏订单视角。
关键限制:自动产生的预留无法用 MB22 修改。想改数量或日期,得回到订单本身改组件或改日期,系统再同步到预留。这个设计是有意的——预留是订单的从属数据,绕过订单直接改预留会导致两边不一致。所以业务提“帮我改一下这张预留的数量”,先问清楚是手工预留还是订单带出来的,后者要走订单变更。
还有一个联动限制:MB21 手工建预留时,如果该物料在该订单下已经有自动预留,系统会阻止重复创建。文档里明确写了“已自动创建预留后无法再手工创建预留”。遇到这个报错不用查权限,是系统在防重复占用。
自动预留操作边界: 查看 :MB23 / CO03 均可 修改 :MB22 不可用,需回订单改组件 发货 :MIGO 正常发料 重复建 :MB21 会被阻止4.3 承诺量与预留的区别
文档里提了一句“承诺量与预留不一样”,这点值得展开。承诺量(commitment)是对未来发货的承诺,偏销售侧;预留是对库存的占用,偏物料侧。两者都会影响可用量计算,但来源和清理逻辑不同。排查可用量对不上时,别只盯预留,承诺量也要一起看。MMBE 里的可用量通常是库存减去预留再减去其他占用,具体减哪些取决于可用性检查规则的定义。
5. 避坑与排查:预留删不掉、M 勾不上、数量卡住的真实原因
5.1 现象:后台配了 30 天保持期,超期预留却一直不删
原因:保持期和允许移动天数只是“规则”,真正执行删除的是 MBVR 程序。系统不会自己定时跑,必须配后台 JOB。文档里写得很直白:“如果没人操作,后台的设置也就不起作用了,系统不会自动清除超期的预留。”
解决:配两个后台 JOB,一个每天跑处理 30 天外的删除,一个每天跑处理 10 天内的自动勾选 M。基准日期减过去需求日期大于 30 天,删除;将来需求日期减基准日期小于 10 天,自动勾 M。两个 JOB 分开跑,别合成一个,出问题时好定位是删除逻辑还是勾选逻辑出的岔子。
MBVR 后台 JOB 建议: JOB1:每天一次,参数指向“删除超 30 天预留” JOB2:每天一次,参数指向“勾选 10 天内预留的 M” 执行后抽查 MB23,确认删除和勾选符合预期5.2 现象:MBVR 跑了,但该删的没删、该勾的没勾
原因:MBVR 的删除和勾选都以“基准日期”为准,基准日期填错,整个结果就偏。另外,如果预留已经被部分发货或有后续凭证,删除逻辑可能跳过它。
解决:跑之前先在测试环境用相同参数试跑,看日志里哪些被处理、哪些被跳过。正式跑完抽查几条边界数据:刚好 30 天的、刚好 10 天的,确认边界处理符合预期。边界不对,多半是基准日期或天数参数理解偏了。
5.3 现象:MB21 建预留报“数量超过可用库存”
原因:物料主档 MRP3 配了可用性检查组,SPRO 动态可用性检查规则又定义了检查范围,两者叠加导致超可用量就报错。可用量 = 库存 − 已预留 − 其他占用,不是库存总数。
解决:先用 MMBE 看该物料的库存和已占用量,算出真实可用量,再核对 MB21 要建的数量。如果业务确实需要建超可用量的预留,要么调整检查规则(谨慎,影响面大),要么先补库存或清理无效预留。别第一反应去改配置,先确认是不是真的超了。
5.4 现象:预留建好了,仓库却发不了货
原因:M 标记没勾。M 标记控制“允许移动”,不勾就发不出去。手工预留建时默认不勾是常见做法,但业务忘了在临近发货时勾上,仓库就卡住。
解决:短期用 MB22 逐条勾,量大就用 MBVR 批量勾(前提是需求日期已进入允许移动的天数窗口)。长期靠 5.1 里那个 JOB2 自动勾,减少人工遗漏。排查时先看 M 标记,再看需求日期是否在窗口内,两个都排除再查移动类型和权限。
5.5 现象:想改自动预留的数量,MB22 进去字段是灰的
原因:订单带出来的预留是订单的从属数据,不允许绕过订单直接改。这是设计约束,不是权限问题。
解决:回 CO02 改订单组件数量或需求日期,保存后系统同步到预留,再用 MB23 确认。如果订单已下达且不允许改组件,走订单变更流程,别在预留层面硬绕。
6. 装完怎么验证:用一张预留把整条链路跑通
配置全部落完之后,别急着交付,拿一个真实物料走一遍完整链路,这是我最看重的验证动作。具体做法:选一个库存充足、MRP3 已配可用性检查组的物料,在测试工厂建一张 MB21 预留,数量故意填成“可用量 +1”,确认系统报错拦住;改成“可用量 −1”,确认能保存。这一步验证的是 OMC2 号码段、工厂参数、动态可用性检查三处配置是否真的串起来了。
接着验证 M 标记链路:新建一张预留不勾 M,去 MIGO 尝试发货,确认发不出去;MB22 勾上 M 再发,确认能发。然后验证自动预留:建一张生产订单,按 OPL8 配的“下达后”规则,未下达时 MB23 查不到预留,下达后能查到,且 MB22 改不了、MIGO 能发。最后验证清理链路:在测试环境把一张预留的需求日期改到 30 天以外,手动跑一次 MBVR,确认被删除;把另一张改到 10 天以内,跑 MBVR 确认 M 被自动勾上。
验证清单(逐项打勾再交付): [ ] OMC2 号码段当年有效,MB21 能取到号 [ ] 超可用量建预留被拦,可用量内能建 [ ] 不勾 M 发不了货,勾 M 能发货 [ ] 订单未下达无预留,下达后有预留 [ ] 自动预留 MB22 不可改,MIGO 可发 [ ] MBVR 删除 30 天外、勾选 10 天内 [ ] 两个后台 JOB 已配且跑过一次这张清单里最容易漏的是最后一项——JOB 配了但没跑过第一次,等于没验证。我一般要求配完当天手动触发一次,看日志和 MB23 结果都对,才算这条链路真正通了。还有个小技巧:验证删除逻辑时别拿生产环境的真实预留试,测试环境造数据,删错了不心疼。
从那以后我每次配完预留这套参数,都强制走一遍上面这张清单,尤其是“超可用量被拦”和“MBVR 边界数据”两项——这两处不出问题,业务跑起来基本不会回头找你。希望帮到你。
本文还有配套的精品资源,点击获取