做了这么多年MM模块我一直觉得“库存类型”和“保留在库”是两个最基础但最容易被忽视的概念。很多刚接触SAP的朋友一上来就盯着MB1A、MIGO做发货把物料从仓库过掉就完事了却忽略了物料到底是在“非限制”“质检”还是“冻结”状态下被发出去的更不清楚“保留在库”其实每天都在默默影响可用量计算和物料分配。这篇笔记我想把这条线彻底讲透。全文围绕三件事展开一是把库存类型体系完整过一遍二是讲清楚“保留在库”到底是怎么来的、代表什么业务含义三是结合生产订单、成本中心领用、寄售、STO等真实场景说明保留在库的利用方式和操作细节。内容偏实战适合正在做SAP MM模块实施、运维或者准备MM认证的朋友参考。1. 库存类型到底在管什么1.1 三大基础库存类型非限制、质检与冻结SAP里的基础库存类型本质上是在回答一个问题仓库里这批货能不能用它以质量状态和业务可用性为维度把库存分成了三类。非限制使用库存Unrestricted-use stock最常见的可用库存。生产领料、销售出库、费用领用都从这个库存类型里扣减。质检库存Quality inspection stock物料收货后进入质检状态等待IQC检验或质量判定。质检库存不能直接用于生产和销售必须通过移动类型321转成非限制库存以后才能发货。冻结库存Blocked stock质量有争议、待报废、暂停使用的库存。同样有价值但业务上不可用一般通过341转入、343转出。这三类库存之间的转换在SAP里是通过移动类型实现的。这里我建议初学者不要只背移动类型而是把“库存类型状态机”记下来收货默认进非限制但质检物料会进质检库质检放行用321复检用322回到质检质量争议用341冻结判定可用再用343解除冻结。我刚做项目的时候就吃过一次亏。工厂反映明明收货了生产却领不到料查了半天发现物料进了质检库存流程上一直没人做放行货就卡在质检库里。后来我不再只看“总库存”而是打开MMBE逐列对比非限制、质检和冻结的数量问题一下就看明白了。1.2 特殊库存在途、寄售、分包与订单库存除了三种基础库存类型SAP还有一套特殊库存体系。特殊库存不是按质量状态划分的而是按物料所有权和业务场景划分的。常见的几种在途库存In-transit stock跨工厂或跨公司STO转储时发货工厂已发货、收货工厂还没收货这段时间物料挂在途库存。寄售库存Consignment stock实物在我方仓库但所有权仍属于供应商。企业只在消耗时才和供应商结算库存价值一般不计入我方存货。分包/委外库存Subcontracting stock发给供应商做委外加工的物料所有权属于我方但物理位置在供应商那里。销售订单库存/项目库存Sales order stock / Project stock按特定销售订单或WBS项目单独管理的库存。特殊库存的查询方式和基础库存不一样需要在MMBE里切换到特殊库存视图或者在MD04里展开特殊库存标识。很多财务人员第一次对账时不知道寄售库存和自有库存要分开看结果月底存货余额怎么都对不上其实问题就出在库存类型维度搞混了。1.3 库存类型是一套业务状态不是单独的数据库表这里想多说一句很多人以为SAP里“库存类型”是某张表里的一个字段比如“库存类型非限制”这种概念。严格来说库存类型是一个业务状态表现在物料凭证、库存表字段、以及各种报表的列里。比如在MARD表里LABST是非限制库存、INSME是质检库存、SPEME是冻结库存、UMLME是在途库存。系统通过把这些字段的值分别汇总再在MMBE里按列展示就成了你看到的“库存概览”。所以我在处理库存类问题时的第一习惯是先确认用户说的“库存”是指哪个类型的库存。很多业务冲突说到底不是库存数量不对而是非限制库存和质检库存没有分清楚。2. 保留在库的定义与底层逻辑2.1 “保留在库”到底保留的是什么“保留在库”在MMBE和MD04里都能看到但它不是一种独立的库存类型而是一种“承诺/锁定”状态。当系统里存在一个预留Reservation比如某个生产订单需要用的物料、维修部门申请领用的备件系统会在非限制库存里同步锁定相应数量这个被锁定的部分就是“保留在库”。用一句话概括库存类型回答“这批货能不能用”保留在库回答“这批能用的货已经被谁预定了”。这个机制在企业内部特别重要。没有保留机制生产计划排得再好BOM里的物料也可能被其他部门领走开工当天才发现缺料。有了保留库存的可用量会动态扣减谁预定了什么一目了然。2.2 预留单据与保留数量的对应关系保留在库的数量来源于预留单Reservation。预留记录的核心字段包括预留号RSNUM和行项目号RSPOS移动类型BWART比如261、201、311需求量BDMNG和已提货量ENMNG需求日期BDTER账户分配对象比如成本中心、生产订单、资产号、WBS元素在数据库层面保留数量的计算逻辑是未清预留行项目中“需求数量 - 已提货数量”的汇总。当仓管员通过MIGO按预留发货过账后预留数量会自动扣减如果只发了一部分剩余数量仍然标记为保留在库。这个逻辑既是设计的核心也是很多企业月底库存管理麻烦的来源——预留没清理可用量就一直被扣着。2.3 保留在可用量计算中的位置SAP的可用量Available quantity计算逻辑可以简化为可用量 非限制使用库存 - 保留在库 - 销售订单需求 - 其他需求这里最容易被忽略的就是“保留在库”。我曾经在一个项目里看到某颗关键物料的非限制库存明明有800个但可用量显示只有50个因为生产订单、维修工单、费用领料单一共挂了750个预留。销售部门看到可用量这么低又紧急下单采购结果库存越积越多。所以每次做MRP评审一定要看可用量而不仅仅是库存总量。MD04的清单里每一个“预留”行都是库存被占用的来源逐行核对才能搞清楚数量到底被谁锁住了。3. 生产订单组件预留制造企业最刚需的场景3.1 从MRP到生产订单的自动预留制造企业里最常见的保留场景就是生产订单组件预留。MRP跑完后计划订单转成生产订单系统会根据BOM展开组件需求自动为每一个组件生成预留移动类型通常是261。生成的这些预留数量会直接显示在MD04和MMBE的“保留在库”列里。这个机制有几个明显好处生产领料有明确依据仓管按预留号挑料、发料可用量准确生产用料不会被其他部门先领走发料成本自动归集到生产订单月底成本结算有据可查我在机械制造项目里见过一个很典型的案例某产线急用一批轴承但仓管发现这批轴承已经被另一个车间的维修工单预留了系统可用量不足无法按261发货。最后靠管理层协调先暂停维修预留才把料发给生产。如果当时没有保留机制两边都觉得自己可以领最后一定有一方要停工。3.2 BOM变更与预留同步问题生产订单组件预留最大的坑就是BOM变更后预留没有同步更新。这么说吧产品BOM里某个物料用量从10改成12但生产订单是在变更前创建的系统不会自动把预留数量改成12除非后台配置了自动重排Automatic Reassignment或者计划员手动调整。有一次我在现场就是被这个问题坑过工艺部门改完BOM生产订单还是按旧的10个发料产线装配到一半发现缺2个紧急补单既延误生产又多了一堆额外成本。所以现在我在项目里都会定一个规矩生产订单下单前计划员必须用CO02里的“组件数量和日期”功能核对预留数量确认BOM变更已经同步到生产订单再统一安排发料。这个动作看起来小却能避免很多缺料和成本归集错误。4. 成本中心、资产和项目领用预留4.1 手工预留的常规做法除了生产订单自动预留企业还有大量非生产领料需要手工做预留维修部门领备件、车间领工具、资产项目领设备、实验室领试剂等。手工预留用MB21创建核心操作逻辑是这样的输入物料号、工厂、存储地点输入移动类型常见的是201填写需求数量和需求日期填写账户分配比如成本中心、资产号、WBS元素保存后生成预留号创建这个预留后系统会立刻从非限制库存中锁定相应数量显示为保留在库。注意手工预留本身不产生任何财务凭证真正产生会计凭证的是后续的MIGO发货过账。我在项目里经常和用户说手工预留要尽量写全需求日期和备注否则过半个月再回来看根本想不起来当初为什么预留、给谁预留的。4.2 账户分配对象与移动类型的匹配用移动类型201做手工预留时账户分配对象可以是成本中心、资产、客户、项目等。但如果移动类型和账户分配不匹配系统会报错或者产生错误的会计科目。举例来说生产订单领料用261账户分配对象是生产订单成本中心领用用201账户分配对象是成本中心资产领用用201账户分配对象是资产号库存转储用311不需要账户分配因为只是库位移动实际业务里我见过有人图省事把成本中心领料也用261发货结果成本被塞进了生产订单里月底成本报表一塌糊涂。建议在后台配置里限制每个移动类型允许的账户分配对象从源头杜绝这种错误。5. 销售订单、库间转储和寄售场景下的保留逻辑5.1 销售订单可用性检查与保留销售订单场景下系统通常用可用性检查ATP确认交期但ATP并不会自动创建“预留”。它做的是一次动态检查现有库存 计划收货 - 销售订单需求 - 其他需求判断能不能满足客户交期。如果企业需要在创建销售订单时就“锁死”一部分库存情况会复杂一些。常规做法是结合计划行确认让销售订单需求进入MRP运算把库存动态占用掉。但严格来说这不算“保留在库”而是“销售订单需求”。真正需要用手工预留来锁库存的场景常见于紧急插单、客户寄存料、或者交付前必须单独留出库存的情况。这时候可以用MB21创建移动类型201、账户分配为客户或销售订单的预留人为把库存锁住避免被其他订单占用。5.2 STO转储与在途库存跨工厂库存转储STO是另一个和库存类型直接相关的高频场景。两步法STO是这样的流程发货工厂先做转储发货收货工厂这边会看到“在途库存”等货物到达收货工厂做101收货过账在途库存才转成非限制库存。在途库存不是保留在库而是特殊库存的一种。它表示商品的所有权已经从发货方转移到了收货方但实物还在路上。月底对账时如果发现总部仓库账面库存和区域仓账面库存对不上很多时候就是卡在途库存上。我做日化行业项目时总部和区域分仓之间每天都在跑STO运输周期两三天在途库存经常价值上百万。财务每个月都要单独核对在途差异确认发货工厂已经出库、收货工厂还没有入库的那部分是不是和系统里的在途记录一致。如果不理清在途库存的逻辑只看两边的账面库存对账就会非常痛苦。5.3 寄售库存的特殊性寄售库存是我特别想强调的一个场景。它的特点是实物在我方仓库但所有权在供应商。寄售库存的收货、质检、消耗和自有库存流程都不一样。消耗寄售库存时系统通过特定的移动类型组和结算流程在生成物料消耗的同时产生对供应商的应付。查询时需要在MD04或MMBE里勾选“寄售”特殊库存视图否则看不到寄售库存的真实情况。有些企业上寄售是为了“零库存采购”货在仓库但用掉才算钱。这要求库存数据极其准确一旦寄售库存和自有库存混在一个库位实物盘点根本分不清归属月底结算就会出大问题。我建议上寄售前物料主数据必须限定为寄售采购存储地点最好单独区分从源头把寄售和自有库存分开。这个规则定得越早后期对账和审计越省心。6. 实操从创建预留到发货过账的完整闭环6.1 用MB21创建预留的几个关键点MB21创建预留本身不复杂但有几个细节值得注意。移动类型的选择要慎重。生产领料用261成本中心领用用201库间调拨用311。选错了后续账户分配、会计科目、预留的显示逻辑都会跟着错。账户分配尽量一次填全。创建时如果已经知道成本中心、生产订单或资产号就填进去。如果空着后续在MB22里补操作上多一步还容易出现漏补的情况。需求日期一定要写对。这个日期直接影响MD04里的需求排序和报表里的过期预留判断。需求日期写了一周前实际下个月才领料很容易在清理过期预留时被误删。保存后系统会生成一个8位预留号这个号码要发给仓管作为后续MIGO发货的参考依据。6.2 用MB24/MB25监控预留日常监控预留我最常用的是MB24和MB25。MB24按预留号、物料、工厂等条件筛选适合查某一个预留的详细情况。MB25按移动类型、账户分配对象、需求日期范围批量展示适合做月度检查。操作上我比较推荐每月关账前用预留清单报表把所有需求日期已经过了15天但还未发货的预留列出来和业务部门逐条确认是继续保留还是删除。这个动作我坚持做了很多年。过期预留是企业库存数据的“隐形杀手”数量可能不大但它会让可用量长期偏低误导采购和计划。6.3 用MIGO按预留发货发货过账用MIGO是最标准的做法操作时选择“预留”作为参考凭证输入预留号系统自动带出物料、数量、账户分配确认无误后过账。这里有三个细节提醒系统默认带出预留数量但允许仓管修改实际发货数量如果只发一部分预留剩余数量继续保留在库过账后生成物料凭证和财务凭证成本自动归集到预留的账户分配对象如果发货时发现库存类型不是非限制而是质检或冻结系统会提示库存不足。这不一定是真的没货很可能是有货但卡在质检状态要先做质检放行再回来发货。6.4 用MMBE和MD04核对保留数量最后一步也是我每次教新人都要强调的用MMBE和MD04交叉核对保留数量。MMBE的“库存概览”里可以通过设置布局勾选“显示保留数量”这样每个存储地点除了一列列库存类型还会多一列“保留在库”。这列数据从哪里来就是从预留单汇总出来的。MD04里每个物料会显示完整的库存/需求清单其中“预留”行可以看到预留号、需求量、需求日期点击还能跳转到预留详情。我建议至少用这两种方式核对一次。MMBE展示的是存储地点级的汇总MD04展示的是需求来源的明细。如果两者对不上多半是预留数据有问题比如预留被修改但报表没刷新或者库存地点被其他地点预留占用。把明细捞出来一个个排查很快就能定位。7. 高频问题与排查技巧7.1 预留只增不减需求日期过了为什么还在这是仓管和计划员最头疼的问题之一预留创建了但业务取消了没人删除保留在库一直被占用。排查思路很清晰用MB24/MB25按物料查出所有未清预留重点看需求日期已过且长期未发货的预留和发起部门确认业务是否还要领用不要了就用MB22删除预留项目很多企业把删除预留的权限管得很严业务部门又嫌麻烦不去申请导致垃圾预留越来越多。我的建议是至少在每月关账前由MM顾问或IT支持跑一次过期预留报表统一清理一遍。这个动作能有效降低可用量严重偏低的假缺料风险。7.2 质检库存和非限制库存“打架”另一种高频情况是物料同时有非限制库存和质检库存但生产部门急着要货系统却提示可用量不足。这时候不要盲目让采购加单。先在MMBE里把物料展开看看各存储地点的库存类型分布如果非限制库存不够质检库存却一大堆说明来料一直没做质检放行货卡在质检环节。处理方式也很直接去MIGO或QA11的检验批次处理里做“使用决策”把质检库存通过321转到非限制库存然后再回MIGO按预留发货。这个流程走通以后你就能理解为什么我总是强调“先看库存类型再谈缺料”。7.3 月底关账前要处理的三件事作为MM顾问每个月结账前我都会提醒业务做三件事跑一次“未清预留清单”清理过期预留核对STO在途库存差异特别是跨公司转储检查质检库存把所有该放行的质检批处理掉这三件事不处理月底库存报表和财务存货账很容易对不齐。尤其是保留在库太多的时候可用量会被低估采购看到假缺料又下单采购积压库存就是这么一点点堆出来的。7.4 权限配置谁可以动预留最后聊一下权限控制。预留相关的操作权限建议按角色划分清楚生产计划员可以创建和修改生产订单相关预留维修部门只能创建和修改本部门成本中心领用预留仓管员只允许按预留发货不允许修改和删除预留MM顾问/IT支持负责清理过期预留和权限管理这个分工不是死板的制度而是为了避免“别人把你预留的料发走了”“预留被误删导致生产缺料”这类互相踩脚的场景。库存类型和保留在库这块内容我做了这么多年项目总觉得理解起来不难难的是在实际业务里把流程和系统机制咬合好。刚开始接触的时候我也被MMBE里一列列数字搞晕过后来养成了习惯每看一个库存问题先拆库存类型再拆保留数量最后才看移动类型和单据。顺序对了问题基本就解决了一大半。这次重点写了保留在库的利用场景从生产订单自动预留到手工预留再到STO和寄售场景下的特殊情况。如果你们公司正好在梳理可用量计算和缺料流程或者准备优化MRP运行结果建议把这篇笔记里的核心逻辑对照MD04实际跑一遍会有不少收获。后面有时间我再单独写写质检库存放行和STO在途对账的实战细节。