简介:SAP生产预留操作指引是面向SAP实施顾问、生产计划员及仓库管理人员的实用手册,以预留功能为主线,系统讲解预留背景、预留编码OMC2、缺省值、工厂级预留参数配置、预留可用性检查,以及MB21手动创建、MB23按预留编号查询、MB25按物料查询、MBBR批量创建等核心操作,帮助解决生产过程中物料备料不及时与预留数据不统一的实际问题。整个资源包为1个DOCX格式文档,仅约836KB,目录结构清晰,既适合按模块快速查阅,也适合作为SAP生产模块内部培训材料。除基础预留操作外,文档还延伸了批量处理MBVR、生产订单自动预留(OPL8控制)、预留底表查询、预留数不超过库存数等进阶主题,便于读者从配置到执行理解完整链路,例如通过OPL8控制生产订单是否自动生成预留,利用预留底表核对后台数据。已有693人学习,对正在梳理SAP生产预留流程或需要编写操作指引的顾问有一定参考价值。
1. 生产预留是什么:为什么订单刚保存,材料就被系统“占住”了
刚接触生产模块的同事往往有这个疑问:CO01创建生产订单,保存之后去MD04一看,每个组件都凭空多出一条预留记录。这条记录就是标题里的生产预留,SAP在订单生成的瞬间按BOM自动算出的待领料单:哪个订单用料、什么物料、多少数量、哪天要、从哪个库存地点领。它不只是“备忘”,MRP把它当需求来源,仓库把它当备料依据,缺料分析绕不开它,发料过账也以它为准。这篇笔记围绕生产预留的前台操作、关键参数和常见踩坑展开,既适合刚接手的生产计划员照着操作,也希望能给中级顾问提供RESB和COGI层面的一点边界提示。看完你会发现,大部分发料问题到最后都卡在预留上。
2. 预留从哪来:订单自动生成、MB2x 手动创建与 RESB 里的硬字段
2.1 生产订单自动预留:从 BOM 到组件需求的那一步
生产订单保存时,系统按订单数量、工厂、BOM展开,逐项生成组件需求,并在RESB表里写成预留记录。这里的展开不是拍脑袋:数量取BOM基础数量×订单数量,还要考虑损耗率、替代料组、批量参数;库存地点的默认值来自物料主数据MRP4视图的预留参数,以及该物料在工厂下的库存维护情况。
我一般让用户用最笨也最稳的办法确认:CO03打开生产订单,切到“组件”页签,能看到每个物料的组件行,其中“预留号”一列就是系统自动生成的预留编号。把这个编号抄到MB23里查,能看到抬头和项目明细。注意一点,只有生产订单和流程订单会产生这类自动预留,计划订单不会;计划订单在MD04里显示为计划订单行,真要参与发料,必须先转成生产订单,转单成功的那一瞬预留才诞生。
还有一个容易被忽略的点:物料主数据MRP4视图里有个“预留”字段,维护值不同,决定了预留是按工厂、按库存地点还是按个体来创建。如果这里没设置好,组件预留可能不指定库存地点,仓库发料时就要手工补,后患很大。这个参数业务人员通常不去动,但顾问要会看——很多“发料带不出库存地点”的工单,根子就在这个字段。
2.2 手动预留:MB21 / MB22 / MB23 适用场景与字段坑
不是所有预留都来自生产订单。维修领料、研发样品、临时借用、替代料切换前的手工占料,这些场景没有正式生产订单,系统又不希望库存被现货订单抢走,最可靠的做法就是手工建预留。事务代码三个:MB21创建、MB22修改/删除、MB23显示。流程上其实比生产订单发料还简单,但坑都藏在字段里。
MB21进入后先填抬头:移动类型、工厂、用途、需求日期。移动类型决定将来过账时库存怎么出、消耗记到哪,常用的是261(生产订单发料)和201(部门领料)。如果选201,过账时会要求成本对象;如果选261,系统会问你生产订单号,等于把手工预留挂到一张订单下。我处理过的翻车案例里,最多的是移动类型填错、消耗方没填,结果过账时系统报“成本对象不存在”或者“结算对象缺失”。
项目行里必填的是物料号、数量、需求日期、库存地点。特殊库存标识务必先确认:普通库存不用填,销售订单库存(E)、客户寄售库存(K)、供应商寄售库存(W)都要显式写清,漏了系统按普通库存找,自然找不着货。MB22可以改数量和日期,也可以整条删除。删除预留不是删一个提醒那么简单,它等于把需求从MRP里拿掉,后续缺料分析立竿见影地减少一行。所以谁有MB22删除权限,在多数企业里是要单独控制的。
手动预留和订单自动预留共用同一套表和同一套逻辑,只是“预留类型”的标记不同。MB23显示界面里能看到抬头数据和项目数据,项目数据里“要求数量”是还没动的原始需求,“已提数量”是已经发货的数量,两者相减就是仓库还能继续领的量。
2.3 RESB 表:把预留从“黑匣子”变成可查的硬字段
前台界面再怎么点,终究是黑匣子。预留在后台的存储表是RESB(预留表),每一行对应一条预留的组件行项目。用SE16N直接按预留号查RESB,几秒钟能看到比前台多好几倍的字段。这里列几个我排查问题时常看的:
| 字段 | 说明 | 排查用途 |
|---|---|---|
| RSnum | 预留号抬头 | 按预留号定位整条记录 |
| RSPOS | 预留项目号 | 对应组件行,一张单多行靠它区分 |
| MATNR | 物料号 | 查哪个料被占住 |
| BDMNG | 需求数量 | 原始需求 |
| ENMNG | 已提数量 | 已发货、已过账的数量 |
| WERKS / LGORT | 工厂 / 库存地点 | 确认预留落在哪个仓库 |
| BWART | 移动类型 | 实际过账用的移动类型 |
| BDTER | 需求日期 | 看哪天要领、是否已过期 |
| SHKZG | 借/贷标记 | 确认预留是增加需求还是冲减需求 |
用RESB排查,最关键的是把“需求数量”和“已提数量”放在一起看。两者相等,预留已经清空,理论上不该再占可用库存;两者差值大,说明料没发够,仓库要么备货不足,要么卡在某个库存地点上。很多业务部门报“缺料”,其实料就在某个库位上等着,只是预留的LGORT和维护的库存地不一致,发料的人找不到行。
顺带说一句,改了RESB里的数据本质上就是绕过前台改后台,除非救场,否则不要干。真到了必须改的时候,先确认没有物料凭证和会计凭证挂在下面,改完立刻让用户去MD04复核需求。
3. 从预留到实发:261 按单发料、262 冲销与 COGI 兜底队列
3.1 261 按单发料:带出预留、部分发货与冲销闭环
仓库拿着生产订单领料单来发料,最标准的动作是MB1A,移动类型填261(生产订单发料),订单号填进去回车,系统自动把该订单所有剩余预留组件带出来,按行显示物料、需求数量、库存地点。这时候仓库可以做三件关键的事:修改数量只发一部分、修改库存地点换库位、给批次物料输入批次号。
部分发货是常态。一张订单十个组件,仓库可能先到五个,把那五行数量保留,其余行数量改成0保存。过账后,预留里已提数量增加,剩下来的需求继续挂在预留上,直到下次接着发。MB1A勾选“检查可用量”时,系统会校验库存够不够,够则放行,不够则提示且不允许过账;不勾选时,如果物料主数据允许负库存,系统会硬着头皮过到负库存账上。这个勾选习惯每家公司不一样,我一般建议正式生产发料保持勾选,避免红字库存攒一堆。
3.2 262 冲销与批次物料:什么时候不能一冲了之
发错了料,最常见的后悔药是262,它的含义是冲销261的发货。操作上我推荐不手工重输一遍数量,而是MB1A移动类型填262后,用“参照凭证”功能直接指定原来的物料凭证,系统自动按原凭证的行、数量、批次、库存地点反向过账,把库存补回去,同时已提数量回退到冲销前的状态。
但冲销不是无条件的。以下几种情况要先想清楚:物料凭证已经用于后续业务(比如已经消耗或已经被销售订单占用),冲销会造成库存负数的,系统会拦你;批次物料发货时没走批次确定,冲销时批次又不在库存里,系统会提示批次数量不够。这时候光靠262解决不了,得看业务是真实的退料还是账务调整。车间退一半、退到非原库位、退到质量冻结库,这些都不该用标准262硬冲,而应该结合实际流程选退货移动类型或质量检验库存转移,再配合预留状态手工确认。
3.3 COGI 报错兜底队列:先看错误原因再动手,别随手删
发料过账一瞬间如果出错,物料凭证不会凭空消失,而是进到COGI里“挂”起来。COGI的界面像一张排队表,每一行是一次失败的货物移动,显示了物料、数量、工厂、错误原因。常见原因包括:物料账期未开、成本对象缺失、估值类别的科目确定失败、数量超过可用库存且不允许负库存。
处理COGI有两条路:先双击进去“更正”,把缺的字段补上再重新过账;或者确认这单不要了,“删除”这条记录。我的血泪经验是,删除要极其克制——COGI里删掉的是“这次移动”,但预留的已提数量、订单组件的已发状态并不会自动复原,后面对账时账实对不上,再回头查这张订单,历史凭证已经短了一截。所以删之前务必留个截图,记录预留号、物料、数量、错误原因,删完再去MB23核一遍已提数量,确认没有产生半个数的差异。
4. 看数与 MRP 联动:MB25 未发清单、MD04 需求追溯和 ATP 占用
4.1 MB25:一张清单看全未发现货
日常管理预留,用得最多的前台报表是MB25。按物料、工厂、预留类型、期间筛选,执行出来是一张预留清单,每行包括预留号、物料、需求数量、已提数量、仍然需要数量、需求日期、库存地点。这张表最值钱的地方在于“仍然需要数量”——它是仓库每天要发的余量,也是计划员判断会不会缺料的起点。
我习惯让计划员每周一用MB25导出一份全部未发完的预留,按需求日期排序,把超出需求日期还没发完的标记出来。那个清单就是周三生产会的讨论素材:哪些是料没到,哪些是预留下错,哪些是仓库没来得及发。这样做能省掉大量“到处问”的时间,因为问题都集中在一张表上。
4.2 MD04 里的预留行:读需求、收货和可用量的口径
MD04是物料需求追溯最常用的界面。输入物料、工厂执行,能看到一串需求/收货行,其中就包含预留行,数量是“尚未发货”的剩余需求。这里特别要记住一个口径:随着261发料,预留行的数量逐步减少;全部发完后,这条预留不再作为开放需求出现在MD04里。所以别在缺料分析里把已发完的预留再算一遍,那样会重复占需求。
MD04里的预留来源可以追溯到生产订单号或预留号,双击预留行能看到明细,点进去还能看到对应的订单组件。做缺料表时,计划和仓库总会对不上:“系统显示缺料,仓库说料早发了。”这种争论十有八九出在口径上——系统里缺的是“还未发的预留需求”,仓库说的“发”是已经过账的数量。两边各拿各的数做判断,永远对不齐。这时候让双方都看MD04的预留行和MB25的仍然需要数量,口径统一,争吵立刻少一半。
4.3 预留与 ATP 可用量:系统为什么不肯给别的订单发料
可用量检查(ATP)是另一条容易栽的沟。做ATP检查时,系统把所有未清的预留都视为“已占用的需求”,这意味着库存里明明堆着100个,只要某个预留也在等这100个,第二个订单想再订,系统就会提示可用量不足。
换句话说,预留不仅影响发料,还影响销售订单交期确认、影响其他生产订单的开工判断。这也是为什么过期预留要及时处理:计划停了、订单取消了,预留还挂在那里,可用量就一直被吃掉。处理方式是MB22删除对应预留,或在生产订单里做“删除标记”“技术性完成”,让组件预留停用或失效。记住“停用”不等于“删除”,技术完成后的订单预留仍然可见,只是不再参与新业务的可用量计算。
5. 生产预留操作避坑指南:五条从现象到救场的记录
5.1 发料带不出组件,先查预留的库存地点
现象:MB1A输入生产订单号回车,组件行只带出一部分,甚至一条都不出来。 原因:组件预留的库存地点与物料在系统里的维护地点不一致,或者预留根本没指定库存地点;也可能是物料主数据MRP4视图的预留参数设置为按工厂,导致预留没有落到具体库位。 解决:先MB23看预留的库存地点字段,再用MB22把正确的库存地点补上去。如果批量发生,回到物料主数据MRP4视图检查“预留”字段和应用范围参数是不是被误改过。别一上来就怀疑BOM,BOM只决定有哪些料,不决定料在哪个库位。
5.2 262冲销后已提数量没恢复?先看COGI和参照关系
现象:做了262冲销,库存数量回正了,但MB23里预留的已提数量纹丝不动。 原因:冲销凭证本身并没有成功过账,而是挂在COGI里没处理;另一种可能是冲销时没有参照原物料凭证,系统开了一条独立移动,旧凭证状态没被反向关联。 解决:先去COGI看有没有待处理的错误行,有则按第3章的方式重处理,成功后核对MB23;没有COGI记录时,把262那笔物料凭证找出来,确认它是否关联了原261凭证。以后冲销养成习惯,一律参照原凭证操作。
5.3 手工改预留数量,最容易被低估的翻车点
现象:缺料报表显示欠料,实际仓库有库存,反复对不上账。 原因:计划员为了让某个物料“不欠料”,用MB22把预留需求数量改小了,或者直接删掉过期预留,但生产订单组件数量没同步调整。MRP跑出来的结果和订单实际需求从此分叉,报表被误导。 解决:业务上规定“改预留必须同时改订单组件数量”或“必须走订单组件变更流程”,杜绝只改预留不改订单。权限上让MB22的修改按工厂、按物料组收口,只有计划主管和顾问可动,操作留日志。别把MB22当成消停缺料提示的工具。
5.4 过账报“物料账期未开”,问题其实不在预留
现象:261发料过账一直报“物料账期未开”或者“本期不允许过账”,用户在预留上反复改需求日期,毫无作用。 原因:预留本身没问题,是MM的物料账期或工厂账期还没打开,当前日期落在未开账期内。发料过账首先要满足账期条件,预留需求日期在账期后也一样过不了。 解决:检查当前工厂的账期参数,确认本月物料账期已经开放。这种事经常发生在月初第一天,业务着急,系统还停留在上个月。等账期打开后直接在COGI里重处理即可,不需要动预留。
5.5 批次物料冲销失败,多数是因为没参照原始凭证
现象:带批次管理的物料发货后发现发错,做262冲销,系统提示“批次数量不足”或“无法确定批次”。 原因:冲销时手工输入物料、数量、库存地点,但没指定原批次;系统在库存里找不到对应的批次库存,于是报错。也可能是原始发货时批次被手工改过,冲销却让系统按批次确定规则重新跑。 解决:做262一律使用“参照凭证”,让系统从原261凭证里读取批次、数量、存储类型、特殊库存标识,逐项反向过账。如果原凭证都不在了,就不要硬冲,按退料流程走质量检验或库存转移会更合规。
6. 十分钟验证法:用 MB25 + MD04 复盘一条预留的完整闭环
前面讲得再多,不如亲手跑一遍。我建议每个新接手生产计划或仓库发料的人,用十分钟做一个“一条预留闭环验证”:挑一个用量稳定、有库存的物料,走一遍从建单到发满的完整链路,边操作边核对几组数字,跑通一次,后续再遇到预留相关的问题就有参照系。
我的验证顺序是:CO01建一张两张订单量的生产订单,进去看组件页签拿到预留号 → MB23确认需求数量正确 → MB1A用261只发一半数量 → MB25按物料查这张预留,看“仍然需要数量”是不是正好剩下另一半 → 去MD04看同一条预留行的剩余需求是否同步变小 → 再把剩下的一半发完 → MB25确认仍然需要数量为0,MD04里的该预留行不再作为开放需求显示,SE16N查RESB,BDMNG=ENMNG。每个检查点和预期结果可以记成一张自己的对照表:
| 检查点 | 看哪里 | 预期结果 |
|---|---|---|
| 预留生成 | CO03组件页签 / MB23 | 有预留号,数量与BOM展开一致 |
| 部分发料 | MB1A 261,修改数量 | 过账成功,已提数量增加 |
| 余量核对 | MB25 | 仍然需要数量=剩余未发量 |
| 需求同步 | MD04 | 预留需求行显示剩余量 |
| 全部发完 | MB25 / RESB | BDMNG=ENMNG,无开放需求 |
| 冲销验证(可选) | MB1A 262参照凭证 | 库存回退,余量恢复 |
这套验证跑完后,你对预留的敏感度会完全不同。以前跟着报错走,现在基本能猜测是哪一层出了问题:BOM展开对了但库存地点错了,是主数据问题;数量全对但MRP不跑,去看订单类型和计划相关参数;发料过不了账,去COGI看账期和成本对象;可用量不对,去清查过期预留。方向对了,处理时间至少省一半。
最后说个习惯。以前做某制造企业的上线支持,第二周缺料报表开始对不上,查下来是有人批量删了过期预留,但没有同步调整订单状态,也没有留下任何记录。后来我定了一条规矩:删除或修改预留,必须同时导出RESB对比表和MB25前后截图,权限也只放给计划主管和顾问。这条规矩后来替我们挡住了好几轮对账麻烦。预留是系统里最细小却最讲账实一致的东西,前台点一下很容易,后台影响一大片——操作前把口径想清楚,操作后把数字核一遍,这个方向就值得投入。希望帮到你。
本文还有配套的精品资源,点击获取