
简介一份面向SAP MM模块实施/运维人员与物料管理人员的实战文档围绕库存调拨与发货全流程展开系统梳理MB1B事务代码下的一步转储311、二步转储313/315、工厂间转储301/303/305、物料到物料方式309及物料状态转变344/343等典型移动类型同时说明在途库存如何通过MMBE、MB52、MB5T查看。后台部分则详解库存调拨订单凭证类型分配、SD功能下工厂装运数据定义以及不采用SD方式时的UB参数配置帮助规避MRP运算传递风险。资源整体为1个docx文档约2.25MB内容图文结合、步骤清晰适合作为查阅手册或培训材料。已有1520人学习下载尤其适合需要快速掌握SAP库存调拨配置与操作要点的中高级用户可直接对照业务场景落地实践。1. 库存调拨不是搬仓库MB1B 的三套语义决定了你会在哪一步翻车库存调拨在 SAP MM 里从来不是一个动作而是三套语义的合称转移过账、状态变化、物理地点变化。有人只记移动类型——311 一步、313315 二步、301 跨工厂以为照着输就能把货搬走。但月结对账时你就知道没那么简单313 发货做了MB52 里却在途库存看不见311 过账成功目标库存地数量还是不对跨工厂调拨没走转储订单MRP 转头又生成了采购建议。每个问题背后是同一个根源你选的移动类型决定了系统从哪张表删库存、往哪张表插库存以及中间那个在途到底由什么结构撑起来。搞懂这套机制调拨才能真正从试错变成可预测而不是把账实差异归因于玄学。2. 移动类型矩阵311、313315、301/303/305 的在途库存是怎么被做出来的2.1 311 一步转储一张物料凭证里藏着两段库存移动先看最常用的一步转储。311 是库存地到库存地严格限定在同一个工厂内部A 库存地发货B 库存地收货一次过账结束。从底层数据看这笔操作只生成一张物料凭证但 MSEG 段里同时写两行转出行记录工厂/存储地为 A 库存地、数量为负转入行记录 B 库存地、数量为正。两行共享同一个凭证号、同一个移动类型 BWART311、同一个过账日期。系统过账时先在物料主数据的存储地视图里扣减 A 库存地再增加 B 库存地两步更新发生同一张表的同一字段上中间没有任何半成品状态所以不需要在途库存这个概念。会计侧的逻辑也因为这个同表异行而非常简单。在标准配置下311 走的是库存转储记账一张物料凭证同时生成库存借、贷方总库存价值基本恒定。需要留意的是这个总价值不变成立的前提是工厂级评估且发出方和目标方的估价一致。一旦启用了分存储地评估或者物料的移动平均价在两边被维护出差异311 就可能产生价差——这一点是后面 309 物料到物料方式被单独拎出来的引子。实际操作用 MB1B输入移动类型 311、物料、数量、发出库存地和接收库存地过账即可不需要预先创建任何单据。过账后去 MMBE 看A 库存地数量减少、B 库存地数量增加两个存储地的数量之和保持不变。这是同工厂简单调拨里最省心的路径也是顾问默认推荐 311 的原因没有中间态账怎么都对得上。2.2 二步转储 313315在途库存是凭空造出的第三态二步转储在同一工厂内也能用移动类型组合是 313 发货、315 收货。沿用 A 库存地到 B 库存地的场景假设 A 仓有 90 个正常一步转储直接挪 90 个过去二步操作则只把 85 个做常规发出剩下的 10 个用 313 过账之后 MMBE 里会多出一个在途库存节点躺着 10 个。这 10 个既不挂在 A 库存地也不挂在 B 库存地而是挂在工厂维度下的在途分类里。从表结构看313 的发货凭证行同样扣减了 A 库存地的数量但它额外写入了转储伙伴字段目标存储地并在显示逻辑上被归入特殊库存类别。SAP 把在途设计成一种独立库存状态货已经从 A 库存地的账上离开但还没进入 B 库存地的账需要一个载体来记录这个悬空的数量。等到执行 MB1B 315 或 MIGO 对物料凭证收货系统才把 10 个从在途节点扣掉同步增加到 B 库存地。这里有个初学者最容易误解的点在途不是丢失的库存而是有凭证、有归属、但未落位的库存。它挂在发货工厂下月末盘点如果不专门包含在途节点就会看到账上少了 10 个的假象。反过来只要 315 还没做在途节点就一直挂在那里什么时候收完什么时候归零。所以二步转储真正考验的不是操作而是有没有一套定期清理在途的习惯。2.3 工厂间转储 301/303/305为什么 MRP 坚持让你走转储订单跨工厂调拨的选择更多301 一步转储A 工厂直接到 B 工厂303305 二步转储。二步的原理和同厂 313/315 一致但业务复杂度完全不同工厂间卷入的单位更多、运输周期更长、财务口径更独立所以正文里明确写了一条规则工厂间转储涉及 MRP 运算也就是库存需求传递应采用转储订单方式操作。理解这条规则要从 MRP 的边界说起。SAP 的 MRP 是按工厂分别运算的B 工厂算需求时只能看到 B 工厂自己的库存和供应A 工厂发往 B 工厂的货在 305 收货之前对 B 工厂来说不存在。如果只是简单地在 A 工厂做 303 发货B 工厂的 MRP 根本不知道有批货正在路上于是它可能再次生成采购建议造成重复采购。转储订单就是为了填补这个看不见的间隙。它本质上是一张跨工厂的采购订单凭证类型通常是 NB 或 UB。创建转储订单后MRP 能看到这张订单的在途数量并把它计入 B 工厂的未来供应等 303 发货、305 收货凭证闭环在途量自动清零。这样一来库存调拨的每一步都在 MRP 的可视范围内需求传递才是连续的。下表把这节的移动类型关系做个速查移动类型使用场景是否产生在途是否建议走转储订单311同工厂库存地一步否否313 315同工厂库存地二步是否301跨工厂一步否是303 305跨工厂二步是是309物料到物料否不建议343 / 344物料状态转变否否3. 凭证与数据视角MMBE、MB52、MB5T 到底在查什么库存调拨做完之后第一个问题永远是货去哪了。回答这个问题用哪个事务代码取决于你想看总量还是看分类、想查同厂还是跨厂。这一章把三个最常用的查询入口拆开看你就能明白为什么同一套库存数据换个事务代码会得出不同的结论。3.1 MMBE 与 MB52同名库存粒度差了一层很多用户习惯打开 MB52 看库存总数因为它按物料工厂存储地汇总简洁直观。但 MB52 的报表口径是有取舍的它默认展示的是常规库存汇总对特殊库存类别的展示粒度有限。MMBE 则完全不同它把库存拆成树形节点非限制、质检、冻结、在途、寄售每一类都能单独展开。这个差异在同厂二步转储的例子里体现得最明显。313 发货后那 10 个在途MB52 能看见吗能但它可能混在总量里或者需要额外调整选择变式才能单独显示。而打开 MMBE把工厂节点展开会看到在途库存节点下明明白白躺着 10 个。这也是为什么顾问排查在途时第一反应是开 MMBE 而不是 MB52——不是 MB52 不好而是它的设计目标是汇总不是分类解释。反过来MB52 的汇总价值也无可替代它给出工厂/存储地级别的总数适合做库存总量核对。两个事务代码是总量和明细的关系先看 MB52 找差异再用 MMBE 定位差异发生在哪个库存类别。这个组合拳比对着一张报表死磕高效得多。3.2 MB5T跨工厂在途库存的专用报表如果说 MMBE 是看单工厂全状态那 MB5T 就是专为跨工厂在途设计的对账工具。它针对 A 工厂发货给 B 工厂、B 工厂尚未收货的场景报表字段通常包括物料、转出工厂、转入工厂、数量、凭证日期、发货凭证号。你从 MB5T 里能直接看到谁发给谁还没到这是 MB52 和 MMBE 给不了的跨工厂视角。从数据来源看MB5T 的背后逻辑并不神秘它读取物料凭证段 MSEG过滤出二步转储相关的发货行再和已收货行做匹配。匹配的关键字段是转储伙伴字段和物料号而不是文字备注。这也解释了为什么手工操作时不要把备注当对账依据——系统只认结构化字段不认你写在抬头文本里的这批货调给 B 厂。3.3 做个对账小工具用 SQL 把在途抓出来理解了匹配逻辑你就可以自己写一个对账脚本不用在 MB5T 里一行行核对。下面这段 SQL 是兼容常见关系型数据库的示意写法核心思路把 303 跨厂发货的数量求和减去 305 跨厂收货的数量求和差值就是仍然挂在途的数量。SELECT m1.umwrk AS 接收工厂, m1.matnr AS 物料编号, SUM(CASE WHEN m1.bwart 303 THEN m1.menge ELSE 0 END) AS 已发货数, SUM(CASE WHEN m1.bwart 305 THEN m1.menge ELSE 0 END) AS 已收货数, SUM(CASE WHEN m1.bwart 303 THEN m1.menge ELSE 0 END) - SUM(CASE WHEN m1.bwart 305 THEN m1.menge ELSE 0 END) AS 在途数 FROM mseg m1 WHERE m1.bwart IN (303, 305) AND m1.umwrk IS NOT NULL GROUP BY m1.umwrk, m1.matnr HAVING SUM(CASE WHEN m1.bwart 303 THEN m1.menge ELSE 0 END) - SUM(CASE WHEN m1.bwart 305 THEN m1.menge ELSE 0 END) 0;这段 SQL 的逻辑拆开看并不复杂MSEG 是物料凭证段每一行是一条物料移动303 行的 UMWRK 字段指向接收工厂305 行同样记录发出工厂所以按 UMWRK 物料分组后两个移动类型的数量差就是尚未完成收货的在途量。实际落地时还需要加上凭证抬头表 MKPF 的过账日期过滤、以及移动原因代码等条件但核心逻辑已经足够你排查哪些转储单拖了跨月。注意二步转储的对账必须依靠移动类型 转储伙伴字段配对不要依赖文本备注。一张 303 凭证可能在后续被部分收货核对时要以数量差额是否归零为准而不是以凭证是否被冲销为准。3.4 月结前的自检路径月结前建议跑一遍 MB5T 的在途清单把跨月未收的 303/305 余额逐条清理同厂二步转储则用 MMBE 展开在途节点核对。先总量后明细先跨厂后同厂。这套路径配合 3.3 的 SQL基本能覆盖 90% 的调拨对账场景剩下的 10% 是那些已经开单但还没发货的转储订单需要在单据层面单独跟踪。4. 后台配置避坑转储订单类型、SD/MM 之争与 4500 之谜前面讲的是前台操作和数据视角这一章进入真正让人头疼的地方后台配置。同样的 UB 转储单有的人配完老老实实等 MB1B 过账有的人配完系统非要生成出货单同一个工厂有的人 311 一步到位有的人被迫分成两步走。差异全部来自几个配置点的组合。4.1 库存调拨订单的后台链路NB、UB 与凭证类型分配转储订单不是凭空来的它有自己的后台配置入口SPRO → 物料管理 → 采购 → 采购订单 → 设置库存调拨订单 → 分配凭证类型。这个配置点做的事情是把采购凭证类型与调拨流程绑定。NB 是标准采购订单类型UB 则专门用于跨工厂调拨业务。关键在于 UB 的含义正文里有一句容易被忽略的话——UB 不采用 SD 方式不生成出货单。也就是说当配置正确时用 UB 创建的转储订单只会停留在调拨需求层面后续由 MB1B 或 MIGO 完成发货过账流程到此为止。如果某个工厂的调拨订单创建后意外地冒出了交货单多半是配置把 SD 流程卷了进来而不是 UB 本身会生成出货单。4.2 SD 方式与 MM 方式一步转储勾选改变了整条流程分岔第二个关键后台点是定义工厂的装运数据配置里有一个工厂客户维度的开关是否采用一步转储方式。勾选则工厂的调拨走一步转储不勾选则认作二步转储。这个开关还会联动接收工厂、供货工厂、转储单类型 NB 的设置共同决定一张转储订单的后续单据流。为什么这个开关能改变流程分岔因为 SD 方式下转储订单会触发装运流程系统要在后台为它找到装运范围再生成交货单MM 方式下只做库存过账不生成交货单。不少项目翻车在明明只要 MM 调拨却被系统要求做发货单根源就是这里的开关被勾成了 SD 方式。正文里那个4500就是在 SD 方式下的经典现象系统没有给转储单分配范围所以最后落到 4500。具体表现是转储订单创建后后台自动去找装运点/装运范围但配置数据不完整找不到正确范围于是填了默认值 4500后续单据流越走越偏。排查时优先看这个范围字段来自哪里而不是急着改移动类型否则改完还是会绕回来。4.3 高危坑位记录现象、原因、解决坑位一跨工厂调拨用 311转出工厂过账成功转入工厂数量却奇怪。现象MB1B 输入 311 并填了两个工厂系统过账后库存数据对不上。原因311 的语义限定在同工厂库存地之间跨工厂场景应当用 301 一步转储或 303305 二步转储。解决按工厂间规则重建转储订单用 301/303305 执行已产生的错误凭证用反向移动类型冲销后重新操作。坑位二313 发货后MB52 里看不到在途的 10 个。现象二步转储发货做完MB52 的总数和存储地明细对不上。原因MB52 默认展示常规库存在途属于特殊库存类别未必在默认选择变式里。解决先用 MMBE 展开在途库存节点确认数量再调整 MB52 的选择变式把特殊库存纳入显示不要凭印象说系统丢了库存。坑位三303 发货后B 工厂 MRP 又生成了采购建议。现象跨工厂调拨明明发了货需求计划在 B 工厂还是报了缺料。原因调拨没有走转储订单MRP 无法把在途识别为 B 工厂的供应。解决先建转储订单UB/NB再执行 303 发货让 MRP 在运算时把这张订单的在途量纳入供应。坑位四UB 转储订单创建后提示装运范围 4500流程卡住。现象一张只想做 MM 调拨的订单被系统强加了一层装运流程。原因工厂装运数据里勾了 SD 方式但装运点/范围没有完整维护系统兜底落到 4500。解决回到定义工厂的装运数据按业务选择一步/二步如果确实是 MM 方式把 SD 相关勾选去掉并重新检查凭证类型分配。坑位五二步转储做了 313 却一直不做 315月底财务口径分裂。现象仓库说货早发走了财务说库存没到。原因在途库存挂在发货工厂收货工厂账面永远缺一块凭证未闭环。解决把 315/MIGO 收货动作变成标准操作流程的一部分月结前用 MB5T 强制检查在途归零。这五条坑位几乎覆盖了转储订单实施中 80% 的翻车现场按现象→原因→解决的顺序排查比对着错误消息猜要快得多。5. 设计取舍为什么 SAP 宁可造出 309 和 343/344也不做一个万能调拨按钮5.1 309 物料到物料估价差异是设计出来的警告309 允许同一物料在不同仓库或不同工厂之间转移而且不校验价格一致。按移动平均价核算时如果两边单价不同309 过账会产生价值差额。顾问手册里通常写不建议采用但系统依然保留它。原因是真实的业务里存在按账面成本转料的场景管理者希望保留转出方的历史成本而不是重新估值。系统用价值差异把这个决策暴露在报表里而不是替业务决定应不应该有差异。这是典型的取舍有些自由必须留给业务代价是账务上多出对账负担。5.2 343/344 状态转变同一个库位不同的库存身份343 和 344 不搬家只改变库存状态344 把非限制转为冻结343 把冻结转回非限制。它们的存在说明 SAP 的库存模型里状态本身就是一种维度——同一物料、同一存储地可以同时存在非限制、质检、冻结等多个子库存彼此独立核算。这不只是界面上的分类而是过账和报表都会区别对待的身份字段。回头看这几个移动类型的设计你会发现 SAP 的选择不是让用户少记而是让系统不猜地点移动、状态变化、价值变化分别用不同移动类型表达宁可移动类型多到吓人也不做一个自动判断的万能按钮。因为自动判断意味着系统替你做了语义决策而物料账是绝不允许歧义的。从那以后我每次做跨工厂调拨都强制自己走一遍完整流程先建转储订单再 303 发货305 收完货后用 MB5T 确认在途归零最后才关月结。这套习惯帮我挡掉了不少月底差几分钱的狼狈希望帮到你。本文还有配套的精品资源点击获取