☰
SAP生产预留配置与排错:MB21、OPL8、MBVR
2026/10/31 4:57:44 网站建设 项目流程

简介:SAP 生产预留操作指引文档面向已具备 SAP MM/PP 基础、需要处理工单发料与库存预留的业务顾问和生产计划人员,围绕预留的创建、查询与批量维护梳理完整操作链路。内容从预留背景讲起,依次覆盖 OMC2 预留编码、工厂级缺省值与预留参数配置、可用性检查设置,并以 MB21 手动创建、MB23 按预留编号查询、MB25 按物料查询、MBBR 批量创建及 MBVR 批量处理等事务码为主线,延伸到 OPL8 生产订单预留控制和工单自动预留逻辑,末尾补充预留底表结构、预留数不得超过库存数等要点提示。压缩包约 836KB,内含 1 个 docx 文档,正文带目录与章节编号,并配有操作界面截图,便于按模块跳转查阅和对照练习。该文档已有 697 人学习,适合作为日常操作速查手册,也可用于团队新人上手培训。

1. 工单已经下达,261 发货却报库存不足:这份 14 页指引管的就是这件事

工单已经下达,261 发货报可用库存不足,回头用 MMBE 一看明明有料——这种翻车在上了 MM/PP 的团队里几乎每个月都有人踩一次。根子往往不在库存,而在生产预留:系统里有一张凭证提前把这批料记在了某个需求名下,MRP 把它当需求算,发货时可用性检查又把它扣掉,账面有料、可用无料。这份《SAP-生产预留-操作.docx》共 14 页,围绕的正是这条链路,从 OMC2 号码段、工厂级缺省值,到 MB21 手工建、OPL8 自动建、MBVR 批量清,最后落到 RKPF/RESB 两张底表。它适合已经把单据跑通、却在预留上反复踩坑的模块顾问和关键用户,也适合刚接手库存管理、想搞清楚"预留到底扣不扣库存"的运维。下面按配置、手工、自动、排错四段拆。

2. 配置先行:OMC2 号码段、四个缺省开关与动态可用性检查

生产预留出问题,八成不是操作错,是配置没对齐。这一章把指引里散落的几处 IMG 节点串成一条线,顺序是:先给预留一个号,再定新建预留时带什么默认值,然后设可用性检查的口径,最后落到具体工厂。这条顺序不要跳,跳过任何一环,后面 MB21 建出来的预留行为都跟你想的不一样。

2.1 OMC2:预留号不是随手一个流水号

路径是 SPRO-物料管理-库存管理和实际库存-号码分配-为预留定义号码分配,事务码 OMC2。这里维护的是预留凭证号 RSNUM 的号码段,内部给号还是外部给号也在这里定。我的建议是坚持内部给号,外部给号在批量导入时极容易出现重号,一旦重号,MB21 保存时直接报"凭证号已存在",而你还得回头去查是哪张历史单占了这个号。号码段要按年度估量:一个日均 500 张预留的中型工厂,一年就是十几万张,号段区间留一个数量级余量,别等报"号码范围已满"再去扩,扩号段本身不难,难的是停机窗口。

号码段还牵扯一个隐性问题:预留在系统里是独立凭证类型,跟物料凭证、采购订单不共号段。有些团队图省事把预留号段和别的主体混在一个区间里,后期做数据抽取和对账时,光靠号段前缀区分单据类型就会非常难受。

2.2 缺省值里的四个开关:MVT、MRA、天数 M、保持

路径是 SPRO-物料管理-库存管理和实际库存-预留,这个节点决定了 MB21 新建界面打开时长什么样。指引里点了四个参数,我把它们的实际影响摊开:

配置项含义生产环境常见取值配错后的后果
MVT新建预留时 M(允许移动)默认勾选不勾勾上等于新建即放行,管控形同虚设
MRA为预留自动创建存储地点库存数据勾每行手填存储地点,行数一多必错
天数 M允许提前发货的天数(按工作日算)10MBVR 自动勾 M 的时间窗偏大或偏小
保持预留保留天数,超期物理删除30超期单永远躺在表里,占用可用量

"天数 M"和"保持"这两个参数是整个预留生命周期的时间基准,但要注意它们本身只是参数,不会自己生效。后面第 5 章会讲,真正执行删除和自动勾选的是 MBVR 这个程序,参数只是给 MBVR 判定的阈值。很多人配完这两个值就以为系统会自动清理,这是最典型的误判。

MVT 这一项值得单独说。指引里写的是"勾选,控制前台,M 全部默认勾选",也就是说勾上 MVT 之后,MB21 新建的每一行预留 M 字段都是勾好的,货随时可以发。这在一些急件场景下方便,但代价是预留失去了"临近发货才开闸"的意义。前台也有一条替代路径:菜单 编辑 - 附加功能 - 用于所有项目 - 移动开关,可以一次性控制多行项目的 M,做批量放行时比逐行点更稳。

2.3 动态可用性检查:02/03 规则与物料主档的双重门禁

路径是 SPRO-物料管理-库存管理和实际库存-预留-设置动态可用性检查。这里的规则编号会和物料主档 MRP3 视图里的"可用性检查"字段一起作用,决定 MB21/MB22 保存时到底查不查、按什么口径查。指引里明确指出 02 和 03 这两个规则编号对应 MB21/MB22 的检查逻辑,两者是叠加关系,最终生效的是更严的那一条。

落地时有一个判断顺序值得记住:先看物料主档 MRP3 的可用性检查字段是不是空的,空的话这一层门禁直接不存在,预留想建多少建多少;再看"设置动态可用性检查"里对应事务码分配了哪条规则。两边都配上了,才会出现第 2.11 节描述的效果——库存 1001、已预留 2,可用 999,你建 1000 能过,建 1001 被拦。这个数字关系建议在测试机里拿一个物料完整跑一遍,记住拦截时报的消息号,上线后看日志能一眼认出来。

2.4 工厂级参数:多工厂部署最容易漏的一层

路径是 后台 - 物料管理 - 库存管理和实际库存 - 工厂参数。这一层的作用是把全局缺省值下沉到具体工厂,比如某个工厂不允许负库存、某个工厂的预留走不同的检查强度。多工厂集团最常见的翻车是:总部把缺省值改好了,某个后来新建的工厂没同步,结果这个工厂建出来的预留不勾 M、不带存储地点,用户以为是操作问题,其实是工厂参数没继承。

排查这类问题时,我的习惯是先在出问题的工厂里建一张测试预留,看保存后 M 和存储地点这两个字段的实际值,再反查是全局缺省还是工厂参数覆盖。两张配置表对照着看,比一路点 SPRO 菜单快得多。

3. MB21 手工预留:移动类型定科目,M 标记定放行

手工预留是这套流程里最常被用到、也最容易被用错的一环。指引里给的业务场景很具体:新品研发阶段还没法对工单发料,又想把这种消耗纳入系统做全局控制,走申请后建成本中心预留。这类需求没有工单载体,预留就成了唯一的占位凭证。

3.1 三个移动类型的适用场景:201、261、Y10

MB21 建预留时第一件事是选移动类型,它决定了这张预留将来发货时走什么科目、消耗记到哪里。指引里给了三个:

移动类型典型场景消耗对象落地前要确认的事
201成本中心投料、部门领用成本中心成本中心必须已存在且当期未锁
261生产订单投料生产订单订单号必须已下达或至少已创建
Y10研发领料(自定义)研发相关科目Y10 是本地的自定义移动类型,先确认存在

Y10 这一类要特别小心。指引原文直接写了"研发 Y10",说明这是该团队本地扩展出来的移动类型,不是 SAP 标准交付内容。换一个系统照抄,很可能根本没有这个类型,保存时报"移动类型 Y10 不存在"。落地前先用 OMJJ 或 MIGO 的移动类型帮助列表确认本地有没有这个类型,没有的话要么新建,要么改用标准的 201 挂研发成本中心。

移动类型选定后,行项目里的物料、数量、需求日期、存储地点依次填。数量这里有个容易忽略的点:填的是需求数量,不是可用数量,系统会用可用性检查去判断能不能占这么多,能不能过取决于第 2.3 节的配置。

3.2 M 标记:一个勾决定这张预留能不能发货

M 字段对应"允许的移动",指引里的原话是"勾选 M 就可以随时发货,即使一个月以后发货,一般临近才勾。不勾不可用"。这句话的信息量比看上去大:不勾 M 的预留,MIGO 发货时会被直接拒绝,报的是"预留不允许移动"一类的消息,而不是库存不足。排错时区分这两类报错很关键——库存不足要去查可用量,不允许移动要去查 M 字段。

实践中的做法是新建时先不勾,等需求日期临近再放行。放行有两条路:手工在 MB22 里逐行勾,或者靠 MBVR 按"天数 M"自动勾未来 N 天内的预留。前一条路适合量小的场景,后一条适合量大且需求日期准确的场景。如果需求日期本身填得随意,MBVR 自动勾选的窗口就会失准,勾早了等于没管控,勾晚了发货被拦。

3.3 MB23、MB25、MBBR:查询与批量创建的分工

三个事务码对应三个不同维度,别混用:

事务码查询/操作维度典型用途输出内容
MB23按预留编号拿到 RSNUM 后看明细预留行项目、需求日期、已领数量
MB25按物料反查某物料被谁占了量该物料所有预留清单
MBBR批量创建(批输入)一次性建几十上百张预留批输入会话,跑完生成预留

MBBR 是批输入方式的批量创建,不是打开一个界面填多行。它的用法是先准备一个批输入会话,把多行预留数据录进去,再执行会话生成真实凭证。会话没跑之前,数据只存在于会话里,MB23 是查不到的,这是新手最容易困惑的地方——"我明明录了,怎么查不到"。解决办法是 SM35 里看会话状态,跑完再查。

MB25 的价值在排错时最明显。发货被拦、怀疑有隐藏预留,直接 MB25 输物料加工厂,把清单拉出来,看哪张预留占了这个量、需求日期是什么时候、M 有没有勾。这比一层层问业务快得多。

3.4 MB22 的修改边界与 MB24 删除

MB22 是修改预留,能改的字段取决于预留来源。手工用 MB21 建的,物料、数量、日期、M 基本都能改;生产订单自动生成的,MB22 打开基本是灰的,只能改极少数附加字段。这条边界在第 4 章会展开,这里先记住结论:自动预留的修改入口在工单,不在预留。

MB24 是删除预留,适合建错了要作废的场景。删除分标记删除和物理删除,标记删除后凭证还在表里但不再参与可用量计算,物理删除才是真没了。日常操作建议先标记,观察一个 MRP 周期确认没有下游依赖再物理删。误删一张已被工单引用的预留,恢复起来非常麻烦。

4. OPL8 自动预留:工单在什么时候把料"占"下来

手工预留解决的是没有工单载体的需求,有工单的场景则应该让系统自动生成预留。指引里把这条路径叫"生产自动预留",核心配置在 OPL8,核心观察点在 CO03 和 MB23。这一章讲清楚三件事:开关在哪、什么时候触发、改不动的时候怎么办。

4.1 从不 / 下达后 / 立即:三个值对应三种业务节奏

路径是 SPRO-生产-生产线控制-主数据-订单-定义订单类型的相关参数,也就是 OPL8。这里针对每个订单类型配置预留的生成时机,指引给了三个可选值:

取值触发时机适用场景代价
从不不自动生成预留纯手工管控的订单类型每张单都要手工补预留
下达后订单状态变为 REL 才生成下单到下达间隔长、需要反复改 BOM下达前 MRP 看不到这个需求
立即订单保存即生成需求稳定、下达快的场景BOM 改动会频繁同步预留

选哪个值本质是在"需求可见性"和"改动灵活性"之间取舍。选"下达后",草稿状态的工单不占料,MRP 跑出来是干净的,但一旦下达瞬间会一次性占掉大量可用量,容易造成短期缺口。选"立即",需求一早就能被 MRP 看见,可工单组件一改,预留跟着改,如果已经部分发货,改动还会被拦。

指引里配的是"下达后"这一类节奏,验证方法是:新建一张工单先不下达,MB23 查不到预留;下达后状态变 REL,再用 MB23 查,预留出现了,数量与工单组件一致。这个前后对比做一遍,比看十页配置文档都直观。

4.2 自动预留与手工预留的互斥判定

指引里有一句很关键的话:"MB21,已自动创建预留后无法再手工创建预留"。系统在保存手工预留时会做重复性检查,同物料、同需求日期、同账户分配已经存在预留,就拒绝新建。这个设计的出发点是防止同一笔需求被占两次,但对不熟悉的人就是"莫名其妙建不出来"。

排查顺序我一般是这样:先 MB25 按物料加工厂查一遍,看有没有已存在的预留;有的话看它的需求日期和账户分配,判断是不是同一笔需求;确认是的话就不要新建,直接 MB22 去改那张已有的,或者改工单让系统同步。反过来,如果确实需要两张独立的预留,就得在账户分配或需求日期上做区分,让系统认为是两笔需求。

4.3 自动预留改不动时的三条替代路径

MB22 里自动预留大部分字段灰掉,这是设计使然,不是权限问题。可行的替代路径有三条:

第一条是改源头。工单组件里的需求数量改了,未发货部分的预留会跟着更新。这条路最干净,前提是这张预留还没有任何发货记录。

第二条是 MIGO 直接发货。数量不对但必须发,就走 261 对着工单发,系统会按实际发货数量冲减预留的已领数量。这条路会留下"预留需求 100、实发 80"的差额,差额部分要不要清理得在月结前处理掉。

第三条是删了重建。工单组件删掉再重新加,系统会作废旧预留生成新的。这条路动静最大,只在前面两条都走不通时用,用之前确认这张预留没有被其他单据引用。

4.4 承诺量、预留、MRP 需求:三条线别混着对

指引里有一句"承诺量与预留不一样",短短七个字,是很多对账对不平的根源。承诺量是 ATP 检查算出来的可承诺数量,回答的是"我现在还能接多少单";预留是需求占位,回答的是"这批料已经被谁预定了";MRP 需求是净需求计算链路上的输入,回答的是"我还需要采购多少"。三者数据源有交叉,但口径完全不同。

最常见的误用是拿 CO09 的可承诺量去对 MB23 的预留数量,对不上就怀疑系统有问题。正确的做法是按用途分开看:接单看 CO09,查料被谁占了看 MB25,算采购看 MD04。三张报表各看各的,不要交叉验证。

5. 避坑与排查:五条踩出来的记录

配置和操作讲完了,这一章全是失败现场。每条按现象、原因、解决三段写,遇到同类问题时按顺序对一遍,比漫无目的地点菜单快。

5.1 配了保持 30 天,超期预留照样堆在表里

现象:后台"保持"配了 30 天,跑了几个月,RESB 里几个月前的预留一张没少,可用量一直被占着。

原因:这两个参数只是阈值,真正执行删除的是 MBVR 程序,而系统不会自动去跑它。指引里写得很直白——"如果没人操作,后台的设置也就不起作用了,系统不会自动清除超期的预留"。

解决:用 SM36 建周期性后台作业,每天跑一次 MBVR,选择"删除"模式。判定逻辑是:基准日期减去过去的需求日期大于 30 天,就删。这个作业必须建,配完参数不建作业,等于什么都没做。

5.2 预留数量超过可用库存,居然建成功了

现象:库存 1001,已预留 2,可用 999,按理建 1000 就该拦,结果建 1000 也过了。

原因:可用性检查没生效。要么物料主档 MRP3 的可用性检查字段是空的,要么"设置动态可用性检查"里 MB21 对应的规则编号没配或配成了不检查。

解决:两处都核对一遍,先补物料主档的检查标识,再确认事务码对应的规则。改完后拿同一个物料重跑一次边界测试,建 999 能过、建 1000 被拦,才算配对了。测试时注意要用干净的物料,别拿已经被别的单据占过量的数据去试,否则数字对不上会误导判断。

5.3 自动预留的 MB22 打开一片灰

现象:工单自动生成的预留,进 MB22 想改数量,物料、数量、日期全灰,只有一个没用的字段能改。

原因:凭证来源是工单,预留只是工单组件的投影,修改权在源头不在投影。

解决:按第 4.3 节的三条路径处理,优先改工单组件;已发货的走 MIGO 冲减;实在不行删组件重建。不要试图用权限或者调试去强行改,改完跟工单对不上,下次工单保存时又被覆盖回去。

5.4 MBBR 批量建预留,会话跑一半卡住

现象:MBBR 建了几十条,执行会话时中途报错停住,前面几条生成了,后面的没动静,MB23 查到的数量和预期不符。

原因:批输入会话是逐条提交的,中间任何一条数据有问题(物料不存在、工厂没开、移动类型不对)都会中断,已提交的不回滚。

解决:SM35 里看会话日志,定位报错的那一行,修数据后重新执行剩余部分。更好的做法是执行前先用 SM35 的"仅检查"模式空跑一遍,把所有数据问题一次性暴露出来,确认全绿再正式执行。批量操作没有后悔药,空跑这一步不要省。

5.5 工单有 BOM,MB23 却查不到预留

现象:工单组件明明有料,CO03 能看到 BOM,MB23 按订单号查却是空的。

原因:OPL8 里这个订单类型配的是"从不",或者配了"下达后"但工单还没到 REL 状态。

解决:先看工单状态,没下达就下达再看;下达了还没有,就去 OPL8 核对订单类型的配置值。还有一种少见情况是组件行的"与预留相关"标识被取消,这种要回到工单组件明细里看。

6. 用 RKPF/RESB 把预留查穿:验证与后台作业排程

界面查预留方便,但要做统计和批量验证,还是得下沉到表。指引最后给了两张底表:RKPF 是预留的凭证头,RESB 是行项目。头表存预留号、移动类型、创建人、创建日期这些;行表存每一行的物料、工厂、存储地点、需求数量、已领数量、需求日期、删除标记。做可用量分析、查"建了没发"的滞留预留,都从 RESB 入手。

6.1 两张底表的字段对应

表关键字段含义用途
RKPFRSNUM预留号关联头行
RKPFBWART移动类型区分 201/261/Y10
RESBRSNUM + RSPOS预留号 + 行号行项目唯一键
RESBBDMNG需求数量预留占了多少
RESBENMNG已领数量已经发出去多少
RESBBDTER需求日期MBVR 判定 30 天/10 天的基准
RESBXLOEK删除标记统计时必须排除

字段里最容易踩的是 XLOEK。做过标记删除的预留仍然在表里,如果不排除,统计出来的需求量会虚高一大截,而且这些量早就不参与可用性计算了。

6.2 一段 ABAP 把"建了没发"的预留捞出来

" 查询指定工厂、指定物料下,尚未发完且未删除的预留 SELECT r~rsnum, r~rspos, r~matnr, r~werks, r~lgort, r~bdmng, r~enmng, r~bdter, r~xloek FROM resb AS r INTO TABLE @DATA(lt_resb) WHERE r~werks = @p_werks " 工厂,必填,避免全表扫 AND r~matnr = @p_matnr " 物料号,按需收窄 AND r~xloek = @space " 排除标记删除的行 AND r~enmng < r~bdmng. " 只保留还有未发数量的行

这段的关键在最后一个条件。ENMNG 小于 BDMNG 说明这张预留还有没发完的量,结合 BDTER 就能看出来是"日期快到了还没发"还是"日期过了还挂着"。后者就是 MBVR 该清理的对象。参数上 p_werks 一定要传,不加工厂条件在预留量大的系统上全表扫会很慢;p_matnr 可以留空,留空就是按工厂出全量清单,适合做月度盘点。

6.3 两个 JOB 的排程参数

按第 2.2 节的参数(天数 10、保持 30),后台作业要建两个,都走 SM36:

作业程序模式频率作用
JOB_DELMBVR删除每天一次清掉需求日期早于 30 天前的预留
JOB_SETMBVR设置允许移动每天一次勾上需求日期在 10 天内的预留的 M

两个作业的执行顺序有讲究:先跑删除再跑设置,避免刚勾上 M 的预留又被判定超期。作业跑完记得看 SM37 的日志,模式选错是最常见的失误——把设置作业配成删除模式,一夜之间把未来十天的预留全清了,这种事故恢复起来只能靠备份。

6.4 我的习惯

从那以后我每次接手一套新的预留配置,都强制走一遍三件事:拿一个测试物料跑一次可用性边界(库存减已预留,多建一个看拦不拦),用 SM37 确认两个 MBVR 作业真的在跑并且日志正常,再从 RESB 拉一次"建了没发"的清单看滞留量。三步走完,这套预留到底管没管住,心里就有数了。希望帮到你。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询