SAP生产预留机制全解:从OMC2配置到MBVR清理的完整链路
发布时间:2026/10/13 21:39:03 锦皓数字建站

简介这是一份SAP生产预留操作指引面向制造企业的生产计划、物料管理人员及SAP实施顾问用于解决生产预留从后台配置到前台操作的关键问题。文档从预留背景入手系统梳理预留编码OMC2、缺省值、工厂级预留参数配置与可用性检查机制实操层面重点讲解MB21手动创建、MB23按预留编号查询、MB25按物料查询及MBBR批量创建等常用事务码同时也介绍了批量处理MBVR与生产自动预留等进阶内容。资源为单个docx格式文档压缩包内共1个文件大小约836KB便于直接查阅使用。通过约14页的说明读者可掌握OMC2编码含义、工厂级参数配置方法、可用性检查逻辑并按步骤完成预留的创建、查询和批量处理从而减少缺料风险、提升生产准备效率。目前已有693人学习浏览适合SAP生产模块初学者系统学习也可作为企业内部培训与日常操作的手册。1. 生产预留到底管什么一个被 MRP 纳入考虑的需求计划机制做 SAP 生产、物料或仓储模块的同事对“预留”这个词应该都不陌生。很多人起初会以为预留只是给某张工单锁住一批库存等发货时再抵消掉真正配置起来才发现SAP 生产预留是一个被 MRP 纳入需求计算、能提前占用可用库存、还能控制发货时点的完整机制。手动入口是 MB21自动来源是工单下达特殊场景可以用 MBBR 批量生成。这套机制配置点分散在 SPRO 物料管理和生产模块下真正让人翻车的往往不是功能不会用而是后台参数没成串加上没人定期跑 MBVR 清理导致超期预留越积越多、可用库存被悄悄占满。下面按配置、手动操作、自动预留、常见坑和底表验证的顺序把这条链路完整拆一遍。2. 预留参数配置OMC2 号码段、缺省值与可用性检查的三个决定项2.1 预留编码 OMC2号码分配的配置位置与常见错误预留的凭证号不是随便生成的系统靠一套号码段统一分配。配置路径在 SPRO物料管理-库存管理和实际库存-号码分配-为预留定义号码分配这组配置的事务代码是 OMC2。打开后能看到内部编号和外部编号的设置工厂创建的每张预留凭证都会从设定号码段内自动取号。生产环境下这张凭证号会出现在 MB21 创建完成后的提示栏、MB23 查询界面的抬头以及后续 MIGO 发货选择预留的清单里链路上到处都要用它所以号码段配置最好在项目初始化阶段一次规划好。实务里的常见问题是号码段还没到上限就报“号码范围用尽”。这时候优先去 OMC2 看范围上限再看当前号码状态已经跑到多少。如果范围上限留得不够宽生产订单一多、预留一夜间激增几天就能把号码空间耗尽。我一般建议在这种内部编号场景下把范围留到 9 个 9 的规模并且上线初期一次性多定义几个号码区间避免后期不停追加配置。数量统计类报表如果按凭证号段做分区也要提前跟开发确认好预留号的范围防止报表写死区间后新加号段查不到数据。2.2 缺省值天数 M、保持期与 MRA 分别控制什么SPRO 路径物料管理-库存管理和实际库存-预留里面的一组缺省值参数值得逐字段理解。很多实施文档只是让照着填没人解释这三个参数之间的配合关系结果上线后不是提前发货被拦就是旧预留清不掉。这里的核心参数用一张表可以看得更清楚。参数典型值作用允许移动的天数 M10 天工作日允许在需求日期之前提前多久发货保持期间30 天预留最多保留多少天超期后交给 MBVR 物理删除MRA勾选为预留自动创建存储地点库存数据M 和保持期是一对配合使用的规则不是独立开关。原文里说的“如果此处值为 10 天可以提前发货的天数 10 天”意思是需求日期还在 10 个工作日之外的预留系统不允许你提前把货发给生产一旦进入这 10 天的窗口且预留行项目勾选了 MMIGO 发货就能放行。保持期 30 天则针对历史遗留数据以基准日期为准过去的需求日期已经超过 30 天的预留会被判定为过期记录等待 MBVR 清理。两者同时成立时一个负责“未来临近放行”一个负责“过去超期删除”。MRA 的作用很多人忽略勾选后系统会为预留自动创建存储地点的库存数据。日常业务中如果某张预留对应多个存储地点没有 MRA仓库做发货准备时可能找不到存储地点的备货记录。另有一个细节是界面上 MVT 相关勾选项前台路径在 MB21 的菜单“编辑-附加功能-用于所有项目-移动开关”它控制当前界面多行项目是否统一勾选 M。不要以为勾了后台缺省值前台的预留行项目会自动带出 M这个开关是会话级的进一次 MB21 就要确认一次。2.3 工厂级预留参数和订单类型参数的区别后台还有一个节点容易和前面的缺省值混淆物料管理-库存管理和实际库存-工厂参数。这里的配置范围是“工厂级”影响当前工厂下所有预留数据的行为规则而 OPL8 里定义的预留生成策略是按生产订单类型生效的。两者层级不同却经常被放在一起讨论。发生过不止一次的项目现场工厂级配置已经调好某类生产订单却一直不生成预留查到最后是 OPL8 对应订单类型的“生成预留”选项配成了“从不”。所以配置顺序我建议先配工厂参数再逐订单类型核对 OPL8最后用一张测试订单走一遍下达流程验收。工厂参数里还能维护一些和预留相关的默认值比如移动类型缺省值、是否需要可用性检查提示等。这部分配置与具体业务规范关系很大没有一个放之四海皆准的模板关键是确认它不要与前台 MB21 的输入项冲突。比如前台明明选择了成本中心 201 的移动类型工厂参数里却把默认移动类型强制成 261保存时就会出现物料凭证过账归集对象和原始预期不一致的情况。此类问题经常要翻 20 多张表才能定位不如配置时就把边界理清。2.4 预留可用性检查02 与 03 规则怎么决定 MB21/MB22可用性检查配置在 SPRO物料管理-库存管理和实际库存-预留-设置动态可用性检查。这个配置决定的不是“要不要查库存”而是“按什么规则查”。系统在 MB21 创建或 MB22 修改预留时会读取物料主档 MRP3 视图中的“可用性检查”字段再结合 SPRO 里维护的动态可用性检查规则两者共同决定检查行为。原文特别点明02 和 03 决定了 MB21 / MB22 的可用性检查规则。02 号检查规则通常对应“仅检查库存”的场景它只看当前工厂和存储地点的可用库存不纳入在途采购、生产订单收货这些将来的供应。03 号规则覆盖范围更宽会把采购订单、计划订单的收货数量一并算进去适合供应来源较多的物料。遇到“手工创建预留总被拦”的反馈不要只守在 SPRO 里改规则先打开物料主档 MRP3 视图看对应工厂行的可用性检查字段是什么。很多时候物料主档里是 02SPRO 动态可用性检查跑的是 03 规则两边没对上外表看就是“配置了但总是不生效”的玄学问题。注意可用性检查规则一旦改了会影响所有使用该规则的物料和移动类型。上线后调整要挑业务低峰期并在测试工厂先验证再传输。3. 手动预留操作链路MB21 创建、查询与批量工具的完整流程3.1 MB21 创建预留移动类型选择、M 勾选与界面操作手动创建预留的典型业务场景是新品研发研发阶段没有正式生产工单但研发领料消耗需要纳入 SAP 系统做全局控制这时候就可以申请创建成本中心预留。另一种常见场景是转储和成本中心投料用到的移动类型会按业务目的区分为成本中心投料 201、生产投料 261、研发类消耗可以自定义一个移动类型比如文档中提到的 Y10。移动类型不同后续财务过账方向不同201 会把消耗归集到成本中心261 会归集到生产订单研发用的自定义移动类型则单独统计不进生产成本。操作路径是后勤-物料管理-库存管理-预留-MB21-创建。创建界面依次填物料、工厂、数量、需求日期、移动类型以及目标对象——成本中心预留填成本中心号生产预留填订单号或 WBS 元素。保存后系统返回预留号。创建过程里最重要的一个操作是勾选 M。原文的说法很直接勾选 M 就可以随时发货即使一个月以后发货一般临近才勾选不勾选不可用。其中的业务含义是M 代表了“允许移动”的放行标记后台允许提前 10 天的规则只是给了窗口真正决定这张预留能否提前发货的是行项目上的 M 标记。用户一次输入十几行物料时逐行勾选 M 容易漏。前台菜单“编辑-附加功能-用于所有项目-移动开关”可以把 M 批量应用到当前界面的全部行项目。注意这只是当前界面会话的操作不改变后台缺省值下次再进 MB21 仍要重新处理。3.2 查询链路MB23 按预留编号、MB25 按物料、MMBE 看库存预留创建之后日常操作会频繁用到三个查询入口。MB23 按预留编号查预留抬头和行项目输入预留号回车可以看到物料、数量、需求日期、移动类型、可用性检查结果以及实际发货数量MB23 还能看到这条预留是手工创建还是自动生成判断依据是界面上的修改状态和来源标识这类信息在做问题排查时非常有用。MB25 按物料查预留不确定预留号、只知道物料号时使用输入工厂和物料号系统列出该工厂下所有包含此物料的预留清单方便批量核对和筛选。MMBE 查库存则是确认“库存总数”和“已预留数”的关键入口。MMBE 的显示结果会列出库存总数如果要进一步确认预留占用情况需要切换到对应页签查看。创建预留后建议养成一个习惯用 MB23 看一眼预留号用 MMBE 看可用库存变化再去 MD04 里看这条预留是否进入需求清单。三步下来预留的状态基本就清楚了。3.3 MBBR 批量创建预留适合什么场景怎么控制边界MBBR 是预留的批量创建入口适合手动一条条敲 MB21 太慢的场景比如月末补录大批量成本中心预留或研发领料预留。常见做法是在初始屏幕先按工厂、移动类型、需求日期和维护状态过滤再录入物料清单和数量。MBBR 的界面逻辑和 MB21 蹲在同一个数据模型上系统校验规则也一样但界面交互更简略不熟悉的用户容易漏看后台返回的错误消息。批量工具的坑集中在两点。第一行项目 M 状态不一致某几行没勾选 M导致后续 MIGO 发货时部分行被拦截报“预留不允许移动”。第二需求日期和允许提前天数匹配不上批量导入时用户常常把需求日期填得很远系统运行可用性检查时不满足提前窗口即使有 M 也过不去。处理办法都是用“编辑-附加功能-用于所有项目-移动开关”批量修正再用 MB23 抽查行项目确认需求日期本身填错的必须回到 MBBR 调整后再重新创建不要试图在前台硬改。3.4 MRP 与预留的关系预留被需求计划纳入后的实际影响预留不是仓库里的一张静态占用记录它会作为独立需求进入 MRP 运算。系统在跑 MRP 时会把未删除的预留纳入净需求计算这意味着预留数量会参与生成采购申请、计划订单和后续的生产订单。原文“预留会被 MRP 考虑这意味着被需求的物料在出库时将被及时获得”就是这个逻辑物料计划员在 MD04 里看到的需求清单其中会有一行来自预留。如果预留没有被及时清理或完成发货MRP 会认为该需求仍然存在反复触发补货建议。很多用户只盯着 MB21 里的数量和库存忽略了预留对 MRP 的牵引作用。一条长期挂在那里的研发预留可能让计划员多下了好几笔采购申请。处理办法是做完手动预留后再到 MD04 中核对物料的需求清单确认预留行的数量和需求日期正确。如果预留已经使用完毕用 MB22 把剩余数量改成 0 或直接删除MRP 的净需求计算会立刻修正。4. 自动预留与批量清理OPL8 控制点、MBVR 定时 JOB 与修改边界4.1 OPL8 控制预留生成时机从不、下达后与立即的选择逻辑生产订单的预留不是手工做的而是由系统按订单组件自动生成。控制这个行为的配置点在 SPRO生产-生产线控制-主数据-订单-定义订单类型的相关参数事务代码 OPL8。配置页里有一个控制“是否生成预留”的选项原文列了三个值从不、下达后、立即语义差异很大。“从不”表示该订单类型永远不会自动生成预留适合测试性订单或借用流程场景生产投料需要走无预留发货。“下达后”是最常用的设置订单状态变成 REL 后系统才根据 BOM 组件生成预留排产人员确认订单可执行后下发仓库看到预留已建立就知道可以去备料了。“立即”表示创建订单的同时就生成预留不等状态变更。这个选项适合需求紧急、必须在审批流程完成前就占住库存的关键物料。选择哪个值取决于业务对“预留出现时点”的要求如果关单太多、预留却早已生成可以检查是否有订单类型误配成了“立即”。4.2 工单自动预留与承诺量的差异以及为什么不能用 MB22 改生产订单根据 BOM 展开自动生成预留后很多人会问“订单里的承诺量不也是需求吗和预留有什么区别”原文明确提醒了一句承诺量与预留不一样。承诺量是物料可用性检查层面给出的 ATP 结果基于可用量计算得出主要服务销售和计划的交期确认预留是执行层用来占库存、发料的记录直接对应仓库的发货动作。两者数据源不同一个在可用性检查结果里一个落在 RESB 表上不能混着解释。CO03 查看订单的物料组件页签能看到组件行的需求数量MB23 查看预留则能看到具体的预留数量、已发货量和剩余量。自动预留是系统依据 BOM 展开生成的MB22 对它基本只读。自动产生的预留无法修改这是 SAP 的默认保护逻辑因为它的数据源头是订单 BOM 组件改了预留行也很快会被重新同步覆盖。想做数量调整正确做法是回到生产订单 CO02 里改组件数量保存后系统重新生成或更新预留。如果订单已经部分发货直接改组件数量会带来已发货量与 BOM 数量不一致的问题需要先检查 MIGO 的发货历史再做调整。最忌讳的做法是绕过应用层直接去 UPDATE RESB 表这种操作一旦和订单数据不同步月结差异会非常难查。4.3 MBVR 清理逻辑前后 30 天与 10 天的两组规则MBVR 的存在就是为了解决一个长期痛点系统不会自动清除超期的预留。很多项目上线时配了“允许移动 10 天”“保持期 30 天”但没人排后台 JOB半年后一查一大把一年多以前的预留还挂在系统里。MBVR 批量处理预留的机制原文描述得很明确以基准日期为准过去的需求日期距离基准日期超过 30 天的预留运行 MBVR 时会被物理删除将来的需求日期距离基准日期不足 10 天的预留运行 MBVR 时会被自动勾选“允许的移动”。也就是说这个程序干的是两类相反方向的事清理老数据和放行临近需求。实际实施中最常见的落地方案是在后台配置两个定时 JOB一个处理“30 天外删除”一个处理“10 天内放行”每天分别跑一次。JOB 频率建议日粒度因为预留的状态每天都在变化隔天跑容易让临近 10 天窗口的预留不能被及时勾选 M仓库就无法提前备货。配置完成后一定要用真实数据验证手工造一条需求日期在 40 天前的预留跑完删除 JOB 后去 MB23 查记录确认已经物理消失再造一条需求日期在 5 天后的预留跑完放行 JOB 后确认 M 已被勾上。4.4 自动预留的修改边界MB22 能改什么不能改什么MB22 是修改预留的标准事务码但“能改什么”完全取决于预留的类型。手工创建的预留抬头和行项目大多可改数量、需求日期、移动类型、目标成本中心或订单号改完后可用量会重新计算可用性检查也会重新执行检查失败时系统会给出提示或警告。自动产生的预留则不一样移动类型、数量、需求日期基本都是灰的原因前面说过它是生产订单 BOM 组件的镜像。区分一条预留是手工创建还是自动生成最简单的方法是 MB23 查看行项目来源字段或者留意创建者与订单号是否关联。遇到用户反馈“MB22 改了数量但 MB23 查出来没变”时先判断是不是自动预留如果是回订单 CO02 改组件数量。如果是手工预留但改了没变再检查是不是只改了抬头没改行项目或者界面没点保存就离开。自动预留另一个操作限制是不能直接删除因为只要订单还是下达状态预留会反复生成。想彻底清掉要么取消订单下达要么修改 BOM 组件后再重新展开。5. 生产预留常见问题与避坑五个高频翻车点的排查记录5.1 现象一库存明明充足MB21 却提示预留数超限现象创建预留时库存显示有一千多件但数量填到一千零几件就报错提示预留数不能超过库存数量。原因系统计算的不是“库存总数”而是“可用库存”。可用库存等于库存总数减去已经被其他预留占用的数量还要扣除质检、冻结等非自由库存状态。原文给出了完整例子库存总数 1001已有预留 2可用就是 999新预留最多只能建 999建第 1000 个就报错。用户只看总库存没看预留占用自然觉得是系统出了问题。解决用 MMBE 查看预留占用情况把已经不需要的旧预留删掉或改小释放可用量后再创建。库存紧张且必须预留的场景用 MD04 检查物料需求全貌确认是否有并行的其他预留、订单或计划订单占用了同一批库存。超期预留较多时先跑一遍 MBVR 清理再操作通常能立刻释放出一批可用量。5.2 现象二MBVR 跑了 JOB超期预留还躺在系统里现象后台 JOB 明明每天都跑 MBVR但 MB23 里查几个月前的老预留还在数量也没变化。原因MBVR 的两个动作都依赖条件。删除逻辑只处理过去需求日期距离基准日期超过 30 天的预留放行逻辑只处理未来需求日期距离基准日期不足 10 天的预留。如果那张预留的需求日期不在“过去 30 天之外”而是在一两周之后它不会被删除只会被动等待临近日期后勾选 M。很多人以为“跑了 MBVR 就会清理所有超期预留”其实程序里几乎没有“无条件清理全部”的选项。解决先确认预留的需求日期在过去还是未来过去的需求日期才可能触发删除未来的需求日期只会触发勾选 M。再检查 JOB 里调用的程序变式选对没有删除和放行要分别建变式别把两个逻辑混在一个 JOB 里跑。最后核对基准日期参数基准日期设置不对前后窗口的计算结果会整体偏移。5.3 现象三工单下达了预留没有按预期生成现象生产订单从 CRTE 改成 REL状态已经是下达但 MB23 查不到这张订单的预留。原因常见原因有三个。一是 OPL8 的订单类型把预留选项设成了“从不”二是订单的 BOM 没有有效展开或组件状态异常系统没拿到组件数据自然生成不了预留三是下达动作的保存过程被自定义增强截断预留生成功能代码没被执行到这个比较隐蔽。解决先查 OPL8 订单类型的预留设置再看 CO03 的 BOM 展开页面确认组件行正常显示且数量正确。如果 BOM 没问题运行事务代码 CO41 或重新下达订单触发一次组件展开观察是否生成预留。自定义增强场景需要启用调试模式跟踪 BDC 调用定位到具体增强再处理。5.4 现象四MB22 改不了自动预留用户反复报错现象用户用 MB22 修改工单自动生成的预留数量系统报错或字段呈灰色不可输入。原因自动预留的源头是生产订单 BOM 组件系统对这些数据加了保护标识MB22 只读。用户不了解“自动预留不可改”的边界从 MB23 直接点修改自然碰壁。解决明确告知用户不要用 MB22 改自动预留。数量调整回 CO02 订单组件页面操作保存后系统重新同步预留。如果只是发货数量与预留数量有偏差用 MIGO 按预留发货时修正发货数量即可差异较大的先检查订单已发货量再决定是否做无预留发货的 261 移动类型补充过账。5.5 现象五MBBR 导入后部分预留无法发货现象批量创建预留后MIGO 按预留发货时部分行提示“预留不允许移动”或可用性检查不通过但 MB23 里数据看起来是正常的。原因MBBR 批量创建时行项目的 M 标记没有被完整写入或者写入时需求日期与允许提前天数的窗口不匹配。M 标记缺失系统认为该预留不允许提前发货需求日期超出 10 天提前窗口即使有 M 也无法通过可用性检查。解决在 MB21 或 MBBR 菜单里使用“编辑-附加功能-用于所有项目-移动开关”统一勾选全部行项目随后用 MB23 抽查几条确认 M 已置上。需求日期和发货日期距离过大的先调整需求日期或让仓库等待临近窗口不要强行修改表数据跳过检查。6. 用预留底表做验证RKPF/RESB 反查预留数与超限控制6.1 RKPF 与 RESB凭证头和行项目的分工预留的前台查询只适合少量数据真正做月度核对或报表开发重心在底表。预留凭证头存在 RKPF行项目存在 RESB两张表通过预留号 RS 号关联。要统计某物料在某工厂一共被多少条预留占用数量和已发货量直接读 RESB 的行项目数据即可不用先查头表。RKPF 主要负责存放凭证级别的属性比如创建日期、创建者、凭证抬头文本数量的计算全部落在 RESB 上这是做开发前必须分清的分工。6.2 一段可复用的 ABAP 查询从 RESB 反查预留占用下面这段查询示例可以在 SE38 里直接运行入参是工厂和物料输出未删除预留的行项目及数量。SELECT resb~rsnum 预留号 resb~rspos 行项目号 resb~matnr 物料号 resb~werks 工厂 resb~bdmng 原始需求数量 resb~enmng 已提货数量 resb~shkzg 发货/收货标识 FROM resb INTO TABLE DATA(lt_resb) WHERE resb~werks p_werks AND resb~matnr p_matnr AND resb~kzear .逻辑说明查询条件是工厂和物料过滤掉已删除的预留行kzear 空值。bdmng 是预留的原始需求数量enmng 是已经发货的数量两者相减就是这条预留尚未发出的数量也是仍然占用可用库存的部分。shkzg 用来区分正常投料和退货通常取空值或 H。参数说明p_werks 和 p_matnr 是自定义选择屏幕参数可以在程序里声明为 PARAMETERSkzear 是删除标识字段SAP 标记为删除的行不会物理消失但不应参与可用量计算。enmng 在个别转储场景可能包含其他来源的收货数量做报表核对时要注意区分不能直接把 enmng 全部当作已发货量。数据库迁移到 HANA 后也可以用 SQL 汇总但 ABAP 报表走 Open SQL 兼容性更稳调试和传输都方便。6.3 预留数不超过库存数的验证思路“预留数不能超过库存数”这个约束业务上靠可用性检查落地不在数据库层面做硬校验。验证步骤是先确认物料主档 MRP3 的可用性检查字段再看 SPRO 动态可用性检查规则然后 MB21 创建一条超过可用库存的预留测试规则是否生效。测试时选一张不重要的物料避免影响正式 MRP 运算。从那以后我每次新工厂上线都强制把 OPL8、MBVR 变式、可用性检查和 RESB 校验走一遍再放给用户用月结前也习惯拉一次预留占用与可用库存的对比表把超限记录逐条处理掉希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。