简介:面向SAP生产与物料管理岗位的《SAP-生产预留-操作》文档,围绕生产预留从后台参数配置到前台事务码操作的完整链路展开,适合刚接触物料管理、生产计划模块的顾问、关键用户及计划人员系统梳理知识点。压缩包内共1个docx文件,大小约836KB,采用章节化目录组织,便于按预留创建、查询、批量处理与自动预留等主题快速定位。正文覆盖预留编码维护、缺省值与工厂级预留参数配置、预留可用性检查,以及手动创建、按预留编号查询、按物料查询、批量创建和批量处理等常用操作;同时延伸到生产订单是否触发预留的后台控制、工单自动预留逻辑、预留底表查看、预留数量与库存数量约束等进阶内容。已有697人学习,可作为理解预留数据来源、排查预留异常和梳理自动预留配置的参考手册。
1. 到底什么是生产预留:仓库账上那张“占位纸条”
公司楼下有家小面馆,中午人多,老板会在空桌上放一个写着“已定”的小牌子。牌子本身不是面,但它把这张桌子从“谁都能坐”变成了“有人要了”。SAP 里的生产预留干的就是这件事:在系统账上给某个物料、某个数量、某个需求日期放一张占位纸条。牌子一放,账面可用量立刻变少,采购和计划就会把这份需求当回事。
很多人第一次接触 SAP 生产预留,是被现实打了一巴掌才回头的:仓库里明明有货,发货时系统却提示可用量不够;或者反过来,某个老物料账上压着一堆“预留”,实际早就没人要,占着位置占了好几年。这些说不清、道不明的差异,追到最后往往就是一张没勾选、没清理、或者被重复创建的预留。搞懂这张纸条怎么放、谁能改、什么时候会自动消失,很多日常糊涂账当场就清楚了。
2. 预留为什么存在:先占坑,再发货
2.1 一张预留单真正“占”住的三样东西
把预留想成一句话:“这个物料,这个数量,到这个日期,我要用。”这句话在系统里会牵动三条线。
第一条是需求线。预留单本身就是一条已經确定的需求记录,它带着物料号、工厂、需求数量、需求日期、移动类型。移动类型是关键,它说明这批货将来打算怎么出去:成本中心领用走 201,生产领料走 261,研发试制走 Y10,转储又是另一套。移动类型一填,系统就知道这笔消耗属于哪一类,将来发货时不会张冠李戴。
第二条是可用量线。同一批库存,一边是账面总数,一边是被各种单据占住的份额,中间那个差额才是真的能动的。预留一创建,可用量就减少,后面的发货、转储、别的预留想再占用同一批货,就得排队。这也是为什么有人抱怨“库存显示还有 999,我怎么连 10 个都留不出来”。
第三条是 MRP 线。原料正文里说得很直白:预留会被 MRP 考虑,这意味着被需求的物料在出库时将被及时获得。翻译成人话就是,计划模块看见了这张纸条,会把它算进未来的需求里,该采购的采购,该催货的催货。纸条不是仓库里的实物,但它在计划眼里跟实物一样有分量。
三条线合起来,就是预留存在的理由:不是为了多一道手续,而是为了让“将来要用”这件事提前被系统记住。发货点提前知道要发什么、发多少,准备工作能提前做,发货过程也就顺了。
2.2 手动预留与自动预留:两条路,各有各的脾气
系统支持两种预订方式,手动和自动,这是原料开篇就点明的分水岭。
手动预留是人主动去建,典型入口是 MB21。什么时候需要人出手?原料给了一个很实在的场景:新品研发阶段,还没法对工单实施发料,但又想把这种消耗纳入系统做全局控制,走完申请流程后,建一张成本中心预留。研发领料、试制投料、部门转储,这类“没有工单可挂”的消耗,靠手动预留来兜。它灵活,想建就建,想改就改。
自动预留是系统替你建。生产订单一旦满足条件,系统按 BOM 展开的需求量自动生成预留,不需要人去点。它的特点是省事,但也有脾气:自动产生的预留无法用 MB22 修改,要动只能走 MIGO 发货。为什么这么设计?因为自动预留是生产订单的“影子”,订单要多少,它就占多少,如果允许随手改数字,订单和实物就对不上了。手改一时爽,月底盘点两行泪。
这两条路的边界很清楚:有工单挂靠的走自动,没工单挂靠的走手动。把研发试制的料硬塞进生产订单,或者在已经有自动预留的情况下再手工建一张,都会制造重复占用。
2.3 为什么不能直接看库存数字说话
初学者最容易犯的错,是把库存数量当成可用数量。库存报表上的数字是“仓库里有多少”,预留关心的是“还有多少能许给别人”。
打个比方,一栋楼有 100 个车位,卖出去 80 个,剩下 20 个可售。你盯着“100”这个总数去卖第 101 个,肯定出事。系统里的逻辑一样:总数扣掉已经被预留、被订单、被其他单据占住的部分,剩下的才能再许出去。所以看到库存还有富余却建不了预留,第一反应不该是“系统坏了”,而是先去看可用量被谁占了。
这里还藏着一个设计取舍。原料里提到两种状态:库存不够时也能建预留,和库存不足时不允许建预留。前者宽松,好处是业务不被卡死,坏处是预留数字可能虚高,账面上占着一堆实际拿不出的货;后者严格,能把“预留数不超过库存数”这条线守住。原文举的例子很具体:已经预留了 2 个,库存总数 1001,可用就是 999,那么建 1000 个可以,建 1001 个不行。这个数字对比比任何定义都直观,可用量是道算术题,不是感觉题。
2.4 预留、发货、库存三者不是一回事
把三个概念摆在一起看,边界就清楚了。预留是“打算要”,发货是“真的拿走了”,库存是“现在还剩多少”。预留创建时,库存不动,只是可用量减少;发货过账时,库存才真正减少,预留也随之被消耗。
这条时间差正是预留的价值所在,也是麻烦所在。价值在于,从“打算要”到“真的拿走”这段时间里,计划、采购、仓库都有准备余地。麻烦在于,如果这张纸条放出去以后没人管,需求取消了、项目黄了、日期过了,纸条还挂在账上,可用量就一直被虚占。原料里专门讲了预留的保留期限和超期删除,就是在处理这个尾巴。
所以判断一张预留健不健康,不能只看它存不存在,要看它的需求日期是不是还合理、允许移动的标记有没有勾、对应的业务是不是还活着。这三件事任何一件出问题,预留就从“保障”变成了“包袱”。
3. 预留的几个关键开关:编号、缺省值与可用性检查
3.1 预留编号 OMC2:号码段决定这张纸条的“身份证”
每张预留都有编号,编号从哪来,由后台的号码段决定。配置路径是:SPRO-物料管理-库存管理和实际库存-号码分配-为预留定义号码分配,事务码 OMC2。
这件事听起来无聊,实际上影响不小。号码段是可以分组的,不同业务可以落在不同号码区间。好处是排错时一眼能看出这张预留大概属于哪一类操作,是人工建的还是别的入口来的;坏处是如果号码段规划得乱七八糟,后期想按号段做统计就无从下手。
打个比方,号码段就像给纸条编号的印章。印章只有一个,谁都能盖,那纸条就分不出门类;印章分了几个,各管一摊,后续翻账本的时候才理得清。刚上线时没人关心这个,等到预留攒到几万条,想区分来源就得靠号码段了。
提示:号码段属于“一次配好、长期受益”的设置,改动前先确认现有预留的编号区间,别把历史数据搅乱。
3.2 缺省值三件套:M 勾选、可提前天数、保持期
手动建预留时,界面上有个 M 字段,中文叫“允许的移动”,意思是这批货现在就可以发货。它在后台有默认值,配置路径是 SPRO-物料管理-库存管理和实际库存-预留,把 MVT 勾上,前台所有行项目的 M 就会默认勾选。前台也有入口:菜单“编辑-附加功能-用于所有项目-移动开关”,可以一次性控制多行项目的 M 状态。
这个勾看着小,影响很大。原料说得很清楚:勾选 M 就可以随时发货,即使一个月以后发货;一般临近才勾选,不勾选就不可用。也就是说,M 是一道闸门,闸门没开,货占着但发不出去。实操里常见的坑是——预留建好了,业务以为万事俱备,真到发货那天系统提示不能用,一查是 M 没勾。
缺省值里还有两个与时间相关的参数,原文给的是具体数字:天数 M 如果是 10 天,表示可以提前发货的天数是 10 个工作日;保持期如果是 30 天,表示预留可以保留 30 天,超期会被物理删除。这两个数字不是拍脑袋定的,它们要和后文的批量处理程序配合,才真正生效。
还有一项 MRA,作用是为预留自动创建存储地点库存数据。它的意义在于,让预留不只是个数量占位,还能带上具体的存储地点信息,发货时不用再补这一步。
| 参数 | 作用 | 原文示例值 | 不配的后果 |
|---|---|---|---|
| MVT 勾选 | 控制前台 M 默认状态 | 全部默认勾选 | 预留建了却发不出货 |
| 天数 M | 允许提前发货的窗口 | 10 个工作日 | 临近需求日期才放行,发货被动 |
| 保持期 | 预留保留时长 | 30 天 | 超期数据不清,可用量被虚占 |
| MRA | 自动带出存储地点库存数据 | 按需启用 | 发货时还要手工补地点 |
3.3 工厂级参数:把默认值落到具体工厂头上
同一套缺省值,放到不同工厂未必都合适。有的工厂周转快,提前 3 天就该放行;有的工厂备料周期长,10 天都嫌晚。所以后台还有一层工厂参数,路径是:物料管理-库存管理和实际库存-工厂参数。
这层配置的思路,跟很多系统里的“集团级默认 + 工厂级覆盖”是一回事。全局给一个保底值,工厂按自己的节奏微调。初学者容易只配全局、忘了工厂,结果发现某几个工厂的行为跟别处不一样,翻半天配置才发现是工厂参数在起作用。
配置这件事有个朴素的判断标准:如果一条规则对所有工厂都成立,配在全局;如果只对某类工厂成立,配在工厂级。反过来做,后期每加一个工厂就要改一次全局,改一次全公司跟着抖一次。
提示:动工厂参数前,先拿一个工厂做试点,观察一两个物料周期的实际效果,再推广。
3.4 可用性检查:02 和 03 两套规则怎么配合
预留能不能建、能建多少,背后是可用性检查在把关。配置路径是 SPRO-物料管理-库存管理和实际库存-预留-设置动态可用性检查。规则不是单独一处决定的,而是两个地方共同决定:物料主档 MRP3 视图里的可用性检查,以及动态可用性检查配置里的事务代码。原料明确指出,02 和 03 这两个规则决定了 MB21、MB22 的可用性检查行为。
通俗地说,物料主档说“这个物料要检查”,配置那边说“按哪套口径检查”,两者一碰,结果才出来。只改一边,行为不会变,这也是很多人改完配置发现没反应的原因——另一半还卡在物料主档上。
为什么要分两套规则?因为不同业务的严格程度不一样。生产领料通常要严防超领,检查得紧一点;部门领用、研发试制有时候需要先占位、后补货,检查得松一点。规则分开,才能让同一套系统服务不同节奏的业务,而不是一刀切。
注意:可用性检查是“能不能建”的闸门,M 勾选是“能不能发”的闸门,两道闸门管的是不同阶段的事,别混为一谈。
4. 四条主要操作路径:建、查、批量建、批量清
4.1 MB21:手动建预留的完整动作
MB21 是手动创建预留的入口,菜单路径:后勤 > 物料管理 > 库存管理 > 预留 > MB21 - 创建。动作本身不复杂,难在填对。
原料给的业务场景值得反复看:新品研发阶段无法对工单实施发料,又想把这种消耗纳入系统做全局控制,走完申请后创建成本中心预留,适用于转储、成本中心投料。这段话把适用边界划得很清楚——没有工单挂靠,但消耗真实发生,需要被系统看见。
填单时的关键字段包括物料、工厂、需求数量、需求日期、移动类型。移动类型决定这笔消耗的归属:成本中心领用填 201,生产领料填 261,研发试制填 Y10。填错移动类型,账就记到别的科目去了,事后想改得走调整,麻烦得很。
建完之后,用 MMBE 看库存视图,能确认这张预留占住了多少可用量。这一步很多人省掉,结果建完就走,等到发货才发现数量或日期不对。
关于 M 勾选,原文有一句很实用的经验:一般临近才勾选,不勾选就不可用。也就是说,建单时可以先不勾,把占位先放上,等真要发货那几天再放开。这样既锁住了量,又不至于让一批暂时不动的货被提前放行。
4.2 MB23 与 MB25:两种查法,对应两种排错思路
查预留有两个常用入口,区别在于你手里有什么线索。
MB23 是按预留编号查。你手上有一张单号,想知道它现在什么状态、占了多少、需求日期是哪天,用它。原料里还提到,生产订单 CO03 里的 BOM 视图和 MB23 都能看到物料的需求数量,两条路对得上,说明自动预留和订单需求是同一份数据的两面。
MB25 是按物料查。你手上没有单号,只知道“这个物料最近被谁占了”,用它。库存对不上、可用量莫名减少的时候,第一件事就是用 MB25 把这个物料的预留全捞出来,看有没有过期没清、重复建、数量离谱的记录。
这两种查法的思路不一样:MB23 是“顺着单据查业务”,MB25 是“顺着物料查占用”。日常排错更多用后者,因为问题往往不是某一张单出错,而是一堆单叠在一起把可用量吃光了。
4.3 MBVR:批量处理与超期清理的真实机制
MBVR 是批量处理预留的程序,能干两件事:清理超期预留,批量勾选 M。原料在这里讲了一段特别容易误解的机制,值得逐句拆。
后台配了“允许移动的天数 10”和“保持期间 30”之后,以基准日期为准:如果基准日期减去过去的需求日期大于 30 天,那么运行 MBVR 时,系统会把距离基准日期 30 天以外的预留从数据库里删掉;如果将来的需求日期减去基准日期小于 10 天,运行 MBVR 时,系统会给距离基准日期 10 天以内的预留自动勾上“允许的移动”。
这段机制里最容易被忽略的一句是:如果没人操作,后台的设置就不起作用,系统不会自动清除超期的预留。配置只是定了规则,规则要靠程序跑起来才生效。很多人以为配完“保持 30 天”就万事大吉,结果一年后翻账,发现三年前的预留还躺在库里。
所以原文给了一条实务经验:一般都在后台设置两个 JOB,一个管前 30 天的,一个管后 10 天内的,每天分别跑一次,让系统自动处理。用定时任务把“人记得跑”变成“系统按时跑”,这件事才算真正闭环。
| 程序动作 | 判断条件 | 结果 | 依赖 |
|---|---|---|---|
| 清理超期 | 基准日期 − 过去需求日期 > 30 天 | 删除数据库中 30 天外的预留 | 保持期配置 + 有人跑程序 |
| 自动勾 M | 将来需求日期 − 基准日期 < 10 天 | 自动勾选允许的移动 | 天数 M 配置 + 有人跑程序 |
4.4 MBBR 批量创建与底表查询
MBBR 是批量创建预留的入口。适用场景很实际:一次要给几十上百个物料建预留,逐条 MB21 手会废。批量建的前提是数据准备到位,物料、工厂、数量、日期、移动类型得先在表里排好,程序按行读。
批量建省的是手,不是脑子。批量建之前,最该做的是抽样核对:随便挑三五行,用 MB21 的逻辑手工验一遍,确认移动类型和日期口径没错,再整体导入。批量建出错,错的就是一批,回头一条条改比重建还慢。
预留的数据落在两张底表上:RKPF 是凭证头,存预留的整体信息;RESB 是行项目,存每个物料的明细。理解了这一层,很多“界面查不到但数据在”的困惑就解开了——界面是底表的视图,底表才是真身。
-- 按物料 + 工厂捞预留行项目,并带出凭证头的移动类型 -- 字段名以实际系统版本为准,这里只示意关联逻辑 SELECT h.rsnum AS 预留号, h.bwart AS 移动类型, i.matnr AS 物料, i.werks AS 工厂, i.bdmng AS 需求数量, i.enmng AS 已领数量, i.xwaok AS 允许移动标记 FROM resb i JOIN rkpf h ON h.mandt = i.mandt AND h.rsnum = i.rsnum AND h.rspos = i.rspos WHERE i.matnr = '物料号' AND i.werks = '工厂' ORDER BY h.rsnum;这段查询的逻辑是:以 RESB 行项目为主表,按客户端和行号关联 RKPF 凭证头,把分散在两张表里的信息拼成一行完整的预留记录。WHERE 里限定物料和工厂,是因为底表数据量大,不收窄范围查起来会很久。
几个参数值得说明。RSNUM 是预留号,也是两张表关联的钥匙;RSPOS 是行号,一张预留可以有多行物料,靠它区分;BDMNG 是需求数量,也就是这张纸条占了多少;ENMNG 是已领数量,发货之后会累加,用需求减已领,才是还占着的量;XWAOK 就是界面上那个 M 标记在底表里的样子。看懂这几个字段,界面上的勾勾选选就不再是黑匣子。
5. 常见易混概念:五组最容易搞混的东西
5.1 易混点一:预留号和工单号
易混在哪:两个都是单号,都在生产场景里出现,都能查到物料需求。
为什么会混:自动预留由生产订单触发生成,很多人以为是同一个东西的两个叫法;界面上又常常并排出现,看着像一家人。
怎么区分:工单号是生产订单的身份,管的是“生产什么、做多少”;预留号是物料占位的身份,管的是“料占了多少、什么时候放行”。一张工单可能对应一张或多张预留,预留是工单需求的投影,不是工单本身。查需求看工单,查占用看预留,各查各的。
5.2 易混点二:自动预留改不了,等于动不了
易混在哪:MB22 打不开自动预留,看起来像被彻底锁死。
为什么会混:提示信息只说不能修改,没说还有什么路可走。
怎么区分:改不了的是预留单本身的数量和日期,因为这些由生产订单决定,改了就跟订单对不上。但发货照常能做,用 MIGO 发货,预留随发货被消耗。也就是说,正常业务流程不受影响,受影响的是“手工调数字”这种非常规操作。真想调数量,该动的是生产订单,不是预留。
5.3 易混点三:勾了 M 就等于已经发货
易混在哪:勾上 M 之后,界面上看起来“可以了”,业务以为流程走完。
为什么会混:M 的字面意思是“允许的移动”,听起来像“已经移动”。
怎么区分:M 只是开了闸门,货还在仓库里,库存数量没变,只是从“不可发”变成“可发”。真正的出库要过 MIGO,过完账库存才减少,ENMNG 才累加。一个是许可,一个是事实,中间隔着一次过账。
5.4 易混点四:预留上限和库存数是一回事
易混在哪:都在讲数量,都用同一个库存数字做参照。
为什么会混:原文那个 1001 与 999 的例子,很容易被记成“预留不能超过库存”,其实前提是可用量。
怎么区分:库存总数是分子,可用量是扣掉已占用之后的余额。已经预留了 2 个,库存 1001,能再建的上限是 999 而不是 1001。建 1000 之所以不行,不是因为库存不够,是因为可用量不够。这条边界搞错,排错方向就全反了:该看可用量的时候去查库存,永远查不出问题。
5.5 易混点五:配了保持期,系统就会自动删
易混在哪:配置项写着“保持 30 天”,字面像是系统会自动处理。
为什么会混:大部分系统功能配完就生效,预留这块偏偏不是。
怎么区分:配置只定义了规则,删除动作由 MBVR 执行,而且得有人跑。没人跑,三年前的预留照样在。所以完整的做法是配置加定时任务,两件事都做才算闭环。只做前一半,等于定了闹钟却没插电。
6. 什么时候该用预留,什么时候别用
6.1 三种适合用预留的场景
第一种,消耗真实发生但没有工单可挂。新品研发试制是最典型的例子,料确实要领,成本要归集,可生产订单还没建起来。这时候用 MB21 建一张成本中心预留,移动类型选研发对应的那一类,把消耗纳入系统统一控制。不建这张单,料照样会没,只是没人说得清去哪了。
第二种,需要提前锁量、防备被别的业务抢走。转储、跨部门调拨这类动作,时间差比较长,今天定了下周才发。中间这段时间如果不占位,可用量就可能被别人用掉,到时候发不出去。预留在这里起的是排队牌的作用。
第三种,需要让 MRP 提前看见需求。有些物料采购周期长,等到要用才提需求就来不及。提前建预留,等于提前把需求告诉计划模块,该备的备、该订的订。
6.2 三种不适合用预留的场景
第一种,已经有自动预留覆盖的需求。原料明确说:已自动创建预留后无法再手工创建预留。这句话反过来理解就是,同一个需求不要建两次。有人怕自动预留不靠谱,手工再补一张,结果占用翻倍,可用量凭空少一半。
第二种,短期、确定、马上发货的领料。建预留、勾 M、发货,三步走完还不如直接发货来得快。预留的价值在时间差,没有时间差就没有价值,只在流程里多加一道。
第三种,需求本身还没定。数量在变、日期在变、甚至要不要用都不确定的时候建预留,等于把不确定写进账里。改来改去不说,还会误导 MRP,让计划去备一批可能根本用不上的货。
6.3 一个具体例子:试制项目撞上 1000 件的天花板
某实验室做一个试制项目,要为一个物料建预留,数量填 1000。系统拦住了。负责的同事第一反应是系统坏了,因为库存报表上明明白白写着 1001。
真正的原因藏在可用量里:这个物料已经被别的单据预留了 2 个,可用量是 999。1000 大于 999,所以建不了。把数量改成 999 或者先去处理那 2 个旧预留,问题就解决了。整个排查过程不超过五分钟,前提是你知道该看可用量而不是库存数。
这个例子还牵出另一条线。那 2 个旧预留是哪来的?大概率是早前建了没清、需求日期已过、又没人跑 MBVR 的遗留。也就是说,真正该处理的不是眼前这 1000 件,而是那批没人管的旧账。清理动作包括:用 MB25 把这个物料的预留全捞出来,看需求日期,判断哪些业务已经结束,该删的删、该勾 M 的勾。清理完再看可用量,往往豁然开朗。
判断边界可以归成一句话:预留是给“将来要用、现在还不能发”的货准备的。将来很近、现在就能发,别建;将来很远、需求还没定,也别建;只有中间那段“确定要用、但还不到发货时候”的区间,才是预留该待的地方。
从那以后我每次建预留前,都强制走一遍三问:这张单对应哪笔真实业务?需求日期还站得住吗?将来谁负责把它清掉?三个问题答不上来,就先别建。系统里最贵的从来不是配置,是没人认领的纸条。希望帮到你。
本文还有配套的精品资源,点击获取