☰
SAP MB1B库存调拨:移动类型与在途库存对账指南
2026/10/31 2:20:26 网站建设 项目流程

简介:面向SAP MM顾问、供应链计划与仓储管理人员,这份docx文档围绕库存调拨与发货流程展开,帮助梳理一步转储、二步转储及在途库存管理等关键场景。内容覆盖库存地间311、313/315操作,工厂间301、303/305转储,物料到物料309及非限制、冻结等状态转变,并结合MMBE、MB52、MB5T说明库存查看方式;同时讲解工厂间转储对MRP运算的影响、转储订单的推荐用法,以及采购订单凭证类型、SD装运数据、UB等后台配置要点。压缩包共1个docx文件,约2.25MB,便于按主题查阅流程与配置思路。已有1522人学习,适合需要系统理解SAP库存调拨逻辑、补强后台设置与业务场景对应关系的中级用户参考。

1. 10 个库存凭空消失那天,我才把 MB1B 的移动类型理清

某个周一早上,某公司仓库报上来一句话:转出库存地说发了 90 个,接收库存地说只到了 80 个,剩下 10 个“不见了”。查单据发现,313 已经过账,315 还没做过账,那 10 个就停在在途库存里,谁都没丢,只是没人知道该去哪儿看。库存调拨在 SAP 里看起来只是 MB1B 里敲一个移动类型,真出问题时,靠的就是你对 311/313/315、301/303/305 这几组数字背后库存视图的理解。这篇是给我自己团队新人用的实操笔记:一个事务码、五组移动类型、三个后台开关,把“发出去了但对方没收到”这件事从玄学变成可查的账。适合天天跟 MB1B、MIGO、MMBE 打交道的 MM 顾问、仓管关键用户和做库存对账的人。

2. 一步与二步转储:311、313、315 在库存表里留下的痕迹

MB1B 只是一个入口,真正决定库存怎么走的是你填的移动类型。同一个物料、同一个工厂、两个库存地之间搬 90 个,选 311 和选 313+315,账面上看起来结果一样,中间过程完全不是一回事:前者是账面上的一次转移,后者会凭空多出一个“在途”的中间状态,而这个中间状态正是所有对账争议的来源。常见做法是先看业务上要不要区分“已发出未收到”,要区分就必须走二步,不区分就走一步,别为了省事一律用 311,出问题时连追责的凭据都没有。

2.1 311 一步转储:一张凭证里的一次账面搬家

311 干的事很直接:转出库存地减少,接收库存地增加,同一张物料凭证里同时完成,中间没有停留。操作序列是这样的:MB1B → 输入移动类型 311 → 回车 → 填物料、数量、工厂、转出库存地(发出库存地)、接收库存地(收货库存地)→ 过账。过账后系统生成一张物料凭证,转出和转入各占一行,MMBE 上两个库存地的数字同时变化,不需要再补第二张单。

事务码:MB1B 移动类型:311 物料:MAT-1001 数量:90 工厂:1000 发出库存地:0001 收货库存地:0002 过账后:0001 减少 90,0002 增加 90,无在途

参数里最容易出错的是“发出库存地”和“接收库存地”两个字段的位置,MB1B 的初始屏幕里它们分别对应不同的输入框,填反了系统不一定报错,但你会得到一张方向相反的凭证。另一个常被忽略的点是价值:同一工厂、同一公司代码下的 311 不产生会计凭证,因为评估范围没变,库存价值只是从一个库存地挪到另一个库存地。如果你在测试环境里发现 311 过完账 FI 那边没动静,这不是配置漏了,本来就该这样。

提示:311 过账前先用 MMBE 看一眼转出库存地的非限制库存够不够,MB1B 只做可用性检查,不做“先占后用”的锁,两个用户同时操作同一个库存地时,后过账的那个才会撞上负库存报错。

一步转储的适用边界其实很窄:它适合同一个工厂内、库存地之间位置明确、运输时间可以忽略的场景,比如产线边仓补货到线边。一旦涉及跨工厂、跨公司代码、需要运输单据或者在途责任划分,311 就不够用了,因为你没有任何单据能证明“我发了、你没收”。

2.2 313 与 315:那 10 个在途库存到底存在哪

二步转储把一件事拆成两张凭证。313 是发货:转出库存地的库存减少,但库存没有落到任何接收库存地,而是进入一个单独的“在途”状态;315 是收货:把在途状态的数量转成接收库存地的实际库存。中间那段时间,这 10 个在 MMBE 里显示在“在途”列,既不属于转出地,也不属于接收地。

第一步:MB1B → 313 → 物料 MAT-1001,数量 90,工厂 1000,发出 0001,接收 0002 结果:0001 减少 90,在途 +90 第二步:MB1B → 315 → 物料 MAT-1001,数量 90,工厂 1000,接收 0002 结果:在途 -90,0002 增加 90

313 这一步只填发出信息,系统会问你接收库存地,这个字段是写进凭证的,315 收货时要带出来,所以 313 填错接收库存地,315 就收错了地方。315 的输入方式和 313 不一样,常见做法是直接用 MIGO 对 313 生成的物料凭证做收货,这样系统自动带出物料、数量、接收库存地,比手工再敲一遍 MB1B 315 稳得多——手工敲最常见的翻车是数量敲成另一个数,导致在途挂着一个永远收不完的尾数。

那 10 个在途库存存在哪里?库存地层面的在途记录在库存表里有一个专门的字段承载,用 SE16 看 MARD 时以字段描述里带“在途”字样的那个为准,不同版本的中文描述文字略有差异。但日常对账不用去翻表,MMBE 的在途列就是给人看的,前提是你选对了工厂和库存地展开层级。

注意:313 过完账之后如果业务上不打算收货了(比如货物在路上损坏),不能直接做 315,要走冲销或者专门的报废流程,否则在途会一直挂到年底。

2.3 MMBE 和 MB52 各自能看到什么

这两个事务码经常被混用,其实视角完全不同。MMBE 是单物料视图,按工厂→库存地→批次逐层展开,能直接告诉你在途有多少、非限制有多少、冻结有多少,适合查“这一个物料到底在哪儿”。MB52 是清单视图,一次性拉出一批物料在各个库存地的库存数量,可以导出成表格,适合做批量核对和盘点底稿。

事务码视角单次查询范围能否看到二步在途典型用途
MMBE单物料、多层展开一个物料(可跨工厂)能看到,有单独在途列定位某物料的具体库存分布
MB52批量清单、库存地维度多物料/多库存地通常不在清单里体现批量导出、盘点、月度核对
MB51凭证流水按物料/移动类型/日期看的是凭证不是余额追某笔调拨到底过没过账

实际对账的顺序通常是:先用 MB52 拉出两个库存地的期末数量,发现对不上,再用 MMBE 看这个物料有没有在途,最后用 MB51 按移动类型 313/315 过滤,看是哪张凭证只做了一半。这个顺序能解决大部分“数量对不上”的问题,比你一张张翻物料凭证快得多。

2.4 309 与 344/343:这两种“看起来像调拨”的操作

309 是物料到物料的转储,形式上也是 MB1B,但它的对象是两个不同的物料号。真正的问题在价值:不同物料、不同仓库、不同工厂的移动平均价可能不一样,309 过账时系统会按两边价格的差额产生差异,这个差异要有人认账。所以原文里说“一般不建议采用此方式”,我完全同意——除非你能说清楚差异记到哪个科目,否则宁可开一张退货单再开一张采购单,把两笔业务分开做。

344 和 343 不是调拨,是状态变更。344 是非限制使用库存转冻结,343 是冻结转回非限制,物料的物理位置没动,总量也没动,动的只是“这批货能不能用”。判断方法很简单:做完之后看 MMBE,如果某个库存地的非限制数量减少、冻结数量等量增加,位置不变,那就是状态变更;如果两个库存地之间的数量发生了一增一减,那才是调拨。把这两类操作混在一张报表里统计“本月调拨量”,数据一定是错的。

3. 工厂间调拨:301、303、305 与 MRP 需求传递的边界

工厂内调拨顶多影响库存地层面的可用性,工厂间调拨动的是需求。A 工厂的库存减少、B 工厂的库存增加,如果这两个工厂分属不同的 MRP 范围,计划部门看到的需求信号就变了。这也是为什么老顾问一听你要用 MB1B 301 做跨工厂调拨就会皱眉:财务上库存确实挪过去了,但 MRP 那边可能压根不知道这批货是给 B 工厂准备的,下次运算照样给 A 工厂下采购申请。

3.1 301 一步跨工厂:方便,但 MRP 会记账

301 的填法和 311 类似,只是把库存地换成工厂:物料、数量、转出工厂、转出库存地、接收工厂、接收库存地,一张凭证完成。它在库存账上是干净的,A 工厂减少、B 工厂增加,不产生在途,也不产生跨工厂的中间状态。

麻烦在两方面。第一是价值:如果两个工厂属于不同公司代码或者不同评估范围,跨工厂调拨会产生公司间结算相关的会计凭证,这不是 MM 一个模块能闭环的事,需要和财务确认科目和定价。第二是 MRP:301 只搬库存,不带需求。B 工厂预计下周要生产,需要 90 个料,你提前用 301 把货挪过去,B 工厂的 MRP 看到的是“库存已经有了”,不会再去买;但如果货还在路上没到,B 工厂的 MRP 依然认为缺口存在,可能又下一张采购申请,等你货到了就变成双份库存。这种双份库存的坑,我见过不止一次。

3.2 303 与 305:跨工厂二步转储的凭证链

跨工厂要做二步,用的是 303(发货)和 305(收货)。303 从 A 工厂发出,货物进入跨工厂在途;305 在 B 工厂收货,在途转成 B 工厂的实际库存。凭证链是 303 生成一张物料凭证,305 收货时通常由 MIGO 参照 303 的凭证完成,这样数量、物料、工厂都能自动带出来。

MB1B → 303 → 物料 MAT-1001,数量 90,发出工厂 1000 / 库存地 0001,接收工厂 2000 / 库存地 0001 MIGO → 收货 → 参照 303 的物料凭证 → 过账,移动类型 305 结果:1000 减少 90,跨工厂在途 +90,2000 增加 90

303 和 313 最大的区别在于,303 的在途是跨工厂的,MB52 这类按工厂或库存地看的清单根本抓不到它,你必须换工具。这也是很多新人做完 303 之后在 MB52 里怎么找都找不到那批货的原因——不是丢了,是你看错报表了。

3.3 MB5T 才是跨工厂在途的正确入口

跨工厂在途用 MB5T 看。它的输入条件通常是物料、工厂范围,输出的是在途明细,包括从哪个工厂发出、发往哪个工厂、数量多少、哪张物料凭证。日常对账时我会固定做一件事:月底把 MB5T 的结果导出来,按接收工厂分组,跟接收工厂的计划员确认这些在途是不是都在正常运输周期内,超期的单独列出来追。

同工厂、库存地之间的在途不要去 MB5T 里找,它管的是工厂间;那种场景用 MMBE 或者直接看库存表里在途字段就够了。这两类在途在系统里是分开记的,混着查只会得到“查不到”或者“数量翻倍”两种结果。

3.4 为什么我建议走 STO:UB 转储订单与需求传递

直接用 MB1B 301 或 303/305 做工厂间调拨,本质上是一次纯库存操作,没有单据载体,MRP 拿不到“这批货是给谁准备的”这个信息。正确做法是走转储订单(STO),在采购订单里用专门的凭证类型(比如 UB)创建一张库存调拨订单,收货工厂是采购方,供货工厂是供应方。

走 STO 之后,需求传递是通的:收货工厂的订单行项目本身就是一条需求,MRP 运算时能看到这批货在路上;发货可以通过 351 移动类型从供货工厂发出,收货工厂做收货,整个链条有单据可查。原文里提到“工厂间转储涉及 MRP 运算,应采用转储订单方式”,这是这份资料里最值得记住的一句话,因为它把“能过账”和“能计划”区分开了。

STO 有 MM 和 SD 两种实现方式。MM 方式在采购订单里完成,流程短,适合内部工厂之间的简单调拨;SD 方式会生成出货单,走交货流程,适合需要运输单据、需要跟踪物流节点的场景。选哪种不看技术先进程度,看你的业务要不要那张出货单。

4. 后台配置三个开关:转储单类型、工厂装运数据与 4500 范围

前台能过账不代表配置是对的。库存调拨相关的前台报错里,有相当一部分根源在后台三个地方:凭证类型没分配给工厂组合、工厂装运数据里的一步/二步开关没勾、以及转储单类型没配范围导致系统落到一个默认值。这三处配错了,前台表现各不相同,但对账的时候都很难看。

4.1 分配凭证类型:先决定用哪一种转储单

配置路径在物料管理→采购→采购订单→设置库存调拨订单→分配凭证类型。这里要填的是“工厂”和“供货工厂”的组合,然后给它分配一个转储单类型。常见的转储单类型是 UB(库存调拨订单),有些场景会用 NB。

配置的核心逻辑是:系统要知道“收货工厂向供货工厂要货”这件事该用哪种采购订单类型。如果这个组合没配,你在前台用 ME21N 创建跨工厂调拨订单时会直接报错,或者系统给你一个你不想要的默认类型。配置的时候要把所有可能的工厂组合都列出来,A→B 和 B→A 是两条记录,不能只配一个方向。

配置项路径关键字填什么配错的后果
分配凭证类型设置库存调拨订单 → 分配凭证类型工厂 + 供货工厂 → 转储单类型前台建单报错或走错类型
工厂装运数据定义工厂的装运数据工厂客户、供货工厂、一步/二步勾选发货方式与预期不符
单据范围转储单类型的号码范围对应凭证范围落默认范围,单据编号异常

4.2 工厂装运数据:一步还是二步,SD 还是 MM

“定义工厂的装运数据”这个配置项决定了转储订单发货时走一步还是二步,以及走不走 SD。里面有几个关键字段:工厂客户(决定是否按 SD 方式处理)、供货工厂、以及一个“一步转储”的勾选。

勾选了“一步转储”,发货时库存直接从供货工厂转到收货工厂,没有在途;不勾,就是二步,发货之后货在在途,收货工厂要再做一次收货。这个开关和前台用 301 还是 303/305 是同一个业务决策的两种实现方式,配置和操作必须一致,否则你会看到“配置说一步、实际操作出在途”这种自相矛盾的现象。

“工厂客户”字段填了,说明这个工厂组合走 SD 方式,发货会生成出货单;不填,走 MM 方式,不生成出货单。原文里说“UB 不采用 SD 方式,不生成出货单,正确配置如下:此处填写则会生成出货单,采用的是 SD 方式”,说的就是这个字段的作用。我一般会建议先用 MM 方式把流程跑通,确认业务确实需要出货单再加这个字段,因为一旦走 SD,交货单、拣配、发货过账这一串环节都要有人维护,运维成本明显上升。

4.3 351 发货与凭证范围 4500 的来源

351 是库存调拨订单的发货移动类型,用在供货工厂这一侧:从供货工厂的库存地发出,货权转移给收货工厂。操作上可以用 MB1B 351,也可以从采购订单里直接触发。

原文里有一个很典型的现场:同一公司、不同工厂、一步转储,用 MB1B 351 发货,系统提示“未给转储单分配范围,所以为 4500”。这句话反映的是号码范围或凭证范围没配到位,系统在找不到明确分配的时候落到了一个默认范围。遇到这种提示不要急着过账,先把配置里转储单类型对应的范围补上,否则你得到的一批凭证编号在后续查询、对账、审计时都会成为一个麻烦。

判断是否配对的简单方法:过账之后去看物料凭证的凭证类型和编号范围,和你在配置里预期的是否一致。不一致就是有地方没配全,别用“能过账就行”说服自己。

4.4 配置完的自检顺序

配置改完不要直接让业务上线测,按这个顺序自己先跑一遍:先用 ME21N 建一张跨工厂的 UB 调拨订单,看能不能建出来、建出来是什么类型;再对这张订单做 351 发货,看过账后的移动类型和工厂对不对;然后用 MMBE 看供货工厂减了没、在途有没有产生;最后在收货工厂做收货,确认库存落到正确的库存地。四步都通了,再去动“工厂客户”那个字段测 SD 方式,把两种路径分开验证。

5. 避坑记录:五条把库存调平的现场事故

下面这五条都是真实场景里反复出现的,每条我都按“现象→原因→解决”写清楚,方便你遇到时直接对号入座。

5.1 数量对不上:三个高频现场

第一条:313 发完 90,315 只收了 80,剩下 10 个在途挂了一个月。现象是转出地已经减了 90,接收地只多了 80,MMBE 上在途显示 10。原因是收货方手工做 315 时数量敲错,或者在 MIGO 里改过数量,没有参照 313 的凭证。解决办法是先用 MB51 按移动类型 313 和 315 把这批物料的凭证拉出来配对,找到数量不匹配的那一对,对差额部分补做 315 收货(或者冲销重做),别直接手工调账把在途抹平,那样凭证链就断了。

第二条:303 发货之后,MB52 里两个工厂都找不到这批货。现象是 A 工厂减了、B 工厂没加、MB52 两边都没有。原因是你用错了报表,跨工厂在途只有 MB5T 能看,MB52 抓不到。解决办法是换 MB5T 查询,确认在途存在之后,让收货工厂用 MIGO 参照 303 的物料凭证做 305 收货。

第三条:工厂间调拨做完,MRP 又下了一张采购申请,库存变成双份。现象是货已经到了 B 工厂,MRP 运算还是认为 B 工厂缺料。原因是直接用 MB1B 301 搬库存,没有订单载体,需求没有传递。解决办法是这类业务改走 STO,用 UB 类型的调拨订单,让收货工厂的订单行项目成为 MRP 能识别的需求;已经发生的双份库存,把多出来的采购申请删掉或冻结,别让它继续往下走。

5.2 配置与主数据:两个更容易被忽略的坑

第四条:建跨工厂调拨订单时报“未找到凭证类型”。现象是 ME21N 里选好供货工厂之后保存不了。原因是“分配凭证类型”里没有配这个工厂组合,或者只配了正向没配反向。解决办法是回到配置路径,把工厂 + 供货工厂的组合补全,两个方向都要配,配完清一下缓冲再试。

第五条:配置里勾了一步转储,实际发货还是出了在途。现象是后台明明勾了“一步转储”,业务做 351 发货之后 MMBE 上还是显示在途。原因是前台用的移动类型和配置不匹配——勾了一步,操作上却用了产生在途的移动类型,或者走的根本不是 STO 而是手工 MB1B。解决办法是先把“配置决定什么、移动类型决定什么”这条线捋清:配置影响的是订单发货这条路径,手工 MB1B 走的是移动类型本身的逻辑,两者不能混着理解。

注意:任何一次配置变更之后,先在测试客户端用一套完整数据跑通“建单→发货→在途→收货”,再动生产。库存类配置的错,往往要等到月底对账才暴露,那时候改的成本比测试高得多。

6. 对账手法:MMBE、MB52、MB5T 三层交叉验证的顺序

对账这件事,顺序比工具重要。我的固定做法是三层往下走,每层解决一个不同的问题,不跳步。

6.1 三层验证的具体走法

第一层用 MB52 拉期末余额,把两个库存地、两个工厂的数量摆在一起,先确认“总数对不对”。这一步只看结果,不看过程,速度快,适合月底批量跑。

第二层用 MMBE 看单个物料的分布,重点看三个数:转出地的非限制库存、接收地的非限制库存、在途。三个数加起来跟第一层的总数能对上,说明没有凭空多出来或者少掉的量;对不上,说明有状态变更(比如冻结)被漏掉了。

第三层用 MB5T 和 MB51 查凭证。跨工厂的在途去 MB5T,同工厂的在途回 MMBE 看;凭证层面用 MB51 按移动类型 313/315、303/305 过滤,把发出和收货配对,找出只有一半的那些。

SELECT h.mblnr, h.mjahr, h.budat, i.zeile, i.bwart, i.matnr, i.werks, i.lgort, i.umlgo, i.menge, i.meins FROM mkpf AS h INNER JOIN mseg AS i ON i.mblnr = h.mblnr AND i.mjahr = h.mjahr INTO TABLE @DATA(lt_doc) WHERE h.budat IN @s_budat AND i.matnr = @p_matnr AND i.bwart IN ('311','313','315','301','303','305') ORDER BY h.budat, h.mblnr, i.zeile.

这段查询取的是指定物料、指定过账区间内所有调拨类凭证的行项目。BWART是移动类型,WERKS是工厂,LGORT是发出或接收库存地,UMLGO在 313/303 这类发货行项目里记录的是接收方库存地,MENGE是数量。实际用的时候把p_matnr换成要查的物料号、s_budat换成对账区间即可;如果要按工厂过滤,在 WHERE 里加一条i.werks的条件,注意 301/303 这类跨工厂凭证的两行分属不同工厂,加条件时别把发货行过滤掉了,否则配对永远配不上。

6.2 把结果对成一张表

查出来的凭证不要直接看,先按物料 + 移动类型分组,把 313 和 315 的数量分别汇总,两者差额就是在途;303 和 305 同理。差额为 0 的对,说明这个物料的调拨闭环了;差额不为 0 的,把对应的物料凭证号单独列出来,交给业务确认是漏收货还是发错了。

我一般会把这个结果拼成一张三列的表:物料、在途数量、最老一张未闭环凭证的过账日期。第三列是关键,因为挂了一个月的在途和挂了一天的在途,处理优先级完全不一样。

血泪经验是:不要等月底才第一次跑这套对账。刚到这家公司的时候我图省事,一个月只看一次 MB52,结果二步转储的在途挂了三个多月没人认领,最后是靠翻半年的物料凭证一张张配对才理清。从那以后我每次做库存调拨相关的配置变更或者新业务上线,都强制走一遍“MB52 总数 → MMBE 结构 → MB51 凭证配对”这三层,宁可前期多花两小时,也不要在季度审计的时候补三个月的账。希望帮到你。

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

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

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

立即咨询