资讯动态

SAP库存调拨:MB1B移动类型与二步转储在途库存解析

发布时间:2026/10/27 13:23:03 来源:尧图企业网站定制
简介《SAP 库存调拨与发货》面向SAP MM顾问、库存仓储人员及ERP学习者聚焦MB1B库存调拨、发货过账与后台配置帮助理解一步/二步转储、工厂间转储和物料状态变更。压缩包含1个docx文件约2.25MB便于集中查阅。内容覆盖311、313/315、301、303/305、309等移动类型结合MMBE、MB52、MB5T查看库存与在途状态并说明344/343状态转变及MRP影响。后台部分讲到采购订单库存调拨凭证类型、SD工厂装运数据、一步转储判定、转储单类型NB与UB差异以及351等场景的出货单生成条件。已有1520人学习适合需要系统掌握SAP库存调拨流程、对照配置并查漏补缺的初中级用户。1. 移动类型才是真正的主角同一个 MB1B 为什么能拆出 311、313 和 301库存调拨看着像把物料从一个地方挪到另一个地方这么朴素的动作但真正决定账怎么记的往往是屏幕角落那个三位数的移动类型。同样一个 MB1B 界面敲 311 是一次过账、账面上干干净净敲 313 就凭空多出一段已发出、未收货的在途敲 301 跨过了工厂边界敲 309 甚至会把物料的移动平均价一起搬走。绝大多数库存对不上的事故追到最后不是操作员手滑而是移动类型选歪了、后台配置没跟上。MB1B 只是入口移动类型才是账本上那条真正的指令——搞清楚它背后的记账逻辑才谈得上把库存调拨跑稳。2. 一步与二步库存数字背后那笔「在途」账先给一个容易被忽略的现象做一次二步转储313 发完货、315 还没收货的那段时间里你去 MB52 看发出库存地的数量已经减了接收库存地的数量却一点没加两边加起来的总数比操作前少了。新人第一次看到这个往往会慌以为库存丢了。其实没丢它只是从某个库存地变成了一段状态。理解这条分界线就能理解整个库存调拨模块的设计骨架系统中的库存不是只有有和没有两种形态中间还存在一种所有权还归我、但物理位置已经模糊的过渡态。一步转储把这个过渡态压缩到一次过账里消掉二步转储则把它显式地保留下来让你能用报表看见、能用时间窗口管理。2.1 311 一步转储为什么一次过账就够一步转储移动类型 311处理的场景是物料、工厂都不变只是从一个库存地挪到另一个库存地。因为物理位置的变化在系统看来可以瞬间完成——库管员推个小车走过去几秒钟的事——所以系统也只记一次账。过账后生成的是一张物料凭证凭证下挂两个行项目一个是发出库存地的负数SHKZG S一个是接收库存地的正数SHKZG H。两行金额、数量在凭证内部自洽工厂层级的库存总量纹丝不动。这里有个设计上的取舍值得注意为什么不用两条独立的凭证分别记发出和收入因为一旦拆成两张凭证中间就必然出现已发未收的时间差而这个时间差对同工厂场景毫无业务意义——物料就在同一栋楼里。把它压缩成一张凭证等于用凭证的原子性换掉了业务上的多余状态记账干净对账也简单。代价是它不记录过程。一旦 311 过账完成你没法从系统里看出这批货是几点从 A 库位出发、几点进的 B 库位只知道某一刻它已经在 B 了。这在同工厂场景下无所谓但跨工厂、跨公司、甚至跨法人主体的调拨就必须留痕了——这就是二步转储存在的理由。MB1B 下311 的必填要素是物料 工厂 发出库存地 接收库存地 数量。发出地和接收地如果填成同一个系统会直接报错这个校验看起来废话实际拦住了不少批量导入脚本里的低级错误。2.2 313/315 二步转储在途库存到底存在哪一张表里二步转储把一次物理移动拆成两个动作、两张凭证313 负责发出315 负责接收。中间这段时间库存处于在途状态。关键问题是这段在途库存物理上记录在哪答案可能和直觉相反——它不存在于任何一个真实的库存地点里。SAP 并没有为同工厂二步转储准备一个专门的在途库存地让货停在那里。313 过账后发生的事情是发出库存地的库存被实实在在地扣减了而接收库存地什么也没发生。至于报表上你看到的那个在途量是系统在查询时动态算出来的——它去扫描所有已发货但未收货的转储凭证把差额汇总出来给你看。这个设计非常克制。如果真搞一个虚拟库存地来存货那就需要维护这个库存地的容量、盘点、库龄等于凭空造出一个管理成本极高的影子仓库。而动态计算只需要维护一条未清关系313 的凭证号被 315 引用引用解除在途归零。下面这段查询能直接把这层关系看穿-- 313 发货与 315 收货是两张独立凭证靠物料移动类型时间窗口关联 SELECT mblnr, -- 物料凭证号 mjahr, -- 凭证年度跨年查询必须带上 zeile, -- 行项目号 bwart, -- 移动类型313 发货 / 315 收货 werks, -- 工厂 lgort, -- 库存地313 时是发出地315 时是接收地 matnr, -- 物料号 menge, -- 数量 shkzg -- 借贷标识S发出负H收入正 FROM mseg WHERE matnr MAT-0001 AND bwart IN (313, 315) AND budat BETWEEN 20240101 AND 20240131 ORDER BY budat, mblnr, zeile;几个参数值得说清楚shkzg是判断方向的关键313 那行一定是 S315 那行一定是 Hlgort在两张凭证里含义不同313 记的是发出库存地315 记的是接收库存地所以别拿 lgort 去做两行之间的等值关联那样永远对不上mjahr必须带上物料凭证号是按年度循环的跨年对账时不带年份会捞出重号。较新的版本里物料凭证行收敛到了MATDOC这类表字段名有差异但两行一对、借贷相对的结构没变。315 收货这一步MB1B 315 和 MIGO 走的是同一套过账逻辑区别只在界面。MIGO 的好处是可以直接把 313 的凭证号填进参考凭证字段系统自动带出物料、数量、库存地减少手工输入导致的错配。血泪经验是大批量的二步转储尽量走 MIGO 带参考凭证的形式手工敲 315 时数量填错、库存地填错的比例高得吓人。2.3 MMBE、MB52、MB5T三个报表看到的不是同一份库存这一段是很多人的认知盲区。三个报表名字都叫查库存但它们统计的维度完全不同混着用就会得出矛盾结论。报表统计维度能看到在途吗典型用途MMBE物料 × 工厂 × 库存地含状态细分能有专门的在途列单物料全景查某一笔转储卡在哪MB52物料 × 工厂 × 库存地批量列表不能只算已落地的库存大批量盘点、导出对账MB5T跨工厂的在途只看跨工厂在途工厂间转储的追踪MMBE 是在途库存的主战场。它把同一工厂内 313 已发未收的量单独列出来你一眼就能看出少了的那部分去哪了。而 MB52 是落地库存的视角它在设计上就不关心过程所以二步转储进行到一半时用 MB52 对账必然会发现总数对不上——这不是数据错了是你用错了报表。MB5T 的边界更窄它只处理跨工厂的在途。同工厂的 313 在途它根本不看因为那是工厂内部的事不涉及工厂间的库存归属转移。这个分工很清晰工厂内的过程用 MMBE工厂间的过程用 MB5T落地的结果用 MB52。理解了这三者的分工前面那个总数凭空少了的现象就自然解释了你缺的不是库存你缺的是把 MMBE 的在途列加进来一起算。3. 工厂间转储为什么 301 能跑通却不是推荐做法工厂间转储表面上只是一步和二步的区别但它牵动的东西比同工厂调拨多一个量级——工厂是 MRP 运算的基本单位也是库存归属、成本核算、甚至法人主体的边界。跨过这条线库存就不只是换了个地方而是换了个账本。3.1 301 与 303/305工厂边界上的两张脸301 是工厂间一步转储。MB1B 里填物料、发出工厂与库存地、接收工厂与库存地、数量一次过账一张物料凭证两个行项目发出工厂减、接收工厂加同时完成。303/305 是工厂间二步。303 发货发出工厂扣减货进入跨工厂在途305 收货接收工厂增加在途解除。这段时间的在途就是 MB5T 里能看到的那部分。从记账效率看301 明显更省事。但从业务可控性看301 有个致命弱点它没有中间态也就没有拦截点。货一旦过账发出工厂的账已经减了接收工厂的账已经加了中间没有任何环节允许你确认这批货真的到了吗。如果运输途中发生损耗、错发、被截留系统里完全看不出来只能靠事后盘亏去倒推。二步转储把这段路程显式化了。303 之后货在系统里处于已发出、未接收MB5T 上挂着一笔在途。这笔在途是有账龄的——挂了三天、三周还是三个月一眼可见。对于跨城市、跨区域甚至跨境的长距离调拨这个账龄就是管理抓手超过阈值的在途必须有人去追。我一般的理解是一步转储适合物理距离短、风险可控的场景二步转储适合运输周期长、需要责任划分的场景。这个判断标准跟系统能力无关纯粹是业务风险的成本核算。还有一个细节容易翻车303 发货后发出工厂的库存已经扣了如果这时候接收工厂那边发现物料有问题拒收你需要做的是冲销或者反向移动而不是简单地不做 305 了。挂着不动的在途会一直占着发出工厂的账时间久了没人记得这笔货是什么状态——这就是典型的历史遗留问题越拖越难清。3.2 MRP 视角下的转储订单需求为什么必须留痕这是整个模块里最容易被低估的一点工厂间转储会参与 MRP 运算。MRP 的逻辑是看供给、看需求、算缺口。当你用 301 把 100 个物料从 A 工厂挪到 B 工厂MRP 看到的是A 工厂库存突然少了 100B 工厂库存突然多了 100。它会认为 B 工厂供给充足同时认为 A 工厂出现了缺口——但这个缺口是怎么来的、要不要补、什么时候补系统一无所知因为它看不到任何需求单据。结果就是A 工厂莫名其妙被建议采购B 工厂却囤着货。这种一边缺料一边压库存的局面是手工转储最典型的后遗症。转储订单Stock Transport OrderSTO解决的正是这个问题。它用一张采购订单的壳子把我要从 A 工厂调 100 个到 B 工厂这件事变成一条有开始、有结束、有数量的需求记录。MRP 读到这张单就知道 A 工厂有 100 个的供应责任、B 工厂有 100 个的需求供给需求两头都对上了。所以原文那句考虑工厂间转储涉及 MRP 运算库存需求传递工厂间转储应采用转储订单方式操作不是一句建议是一条硬约束。凡是会进入 MRP 视野的物料工厂间转储就不该用 301 裸奔。STO 有两条实现路径MM 功能和 SD 功能。MM 路径下STO 就是一张特殊的采购订单发货走移动类型 351或 303/305收货走 101 之类SD 路径下STO 会触发销售订单和交货单走完整的装运流程适合需要运输单据、需要计费、需要外部承运商的场景。大部分纯内部调拨用 MM 路径就够了SD 路径是为了那些调拨本身也要走商务流程的场景准备的。3.3 309 物料到物料移动平均价差异从哪冒出来309 处理的是物料号变了的转储——同一批东西在系统里从物料 A 记成物料 B。它最典型的用途是同一物料在不同工厂或仓库之间移动平均价不一致时做价值调整。机制是这样的物料在工厂层级维护移动平均价不同工厂的采购历史不同价格自然不同。309 过账时发出方按自己的移动平均价把价值转出接收方按自己的移动平均价把价值接收两边一减差额就出来了。这个差额不会凭空消失它会进到差异科目里去。发出方数量 N × 发出方移动平均价 P1 → 转出价值 V1 N × P1 接收方数量 N × 接收方移动平均价 P2 → 接收价值 V2 N × P2 差额ΔV V2 - V1 → 过账到价格差异科目这段推导解释了为什么一般不建议采用此方式每一次 309 都在制造一笔差异差异累积起来会让成本分析变得极其难读。你以为只是挪了批货财务那边多出一堆差异凭证要解释。如果物料用的是标准价而不是移动平均价情况会更糟——标准价物料的 309 会把全部差额推进差异科目数量和金额的对应关系彻底断掉。所以这条路只在确实需要改物料号的极少数场景下用绝不能当成日常调拨工具。4. 后台配置的因果链转储单类型、装运数据与 SD 开关前台操作能不能跑通、跑出来是什么形态几乎完全由后台几个配置节点决定。这几个节点之间是因果串联的凭证类型决定这张单子是什么身份装运数据决定它走不走 SD号码范围决定它的单号落在哪。任何一个环节没配上前台就会出现能过账但结果不对的诡异现象。4.1 采购订单凭证类型给转储业务一个身份转储订单本质是一张采购订单所以它必须先有一个凭证类型。配置路径在采购模块下核心动作是给库存调拨订单分配凭证类型。这里的关键是单据类别和凭证类型的组合。凭证类型决定号码范围、字段控制、审批策略单据类别决定这张单在系统里被当成标准采购订单还是库存转储订单处理。UB 这类凭证类型之所以特殊就是它的单据类别被定义为库存转储系统据此知道这张单不产生对外采购只产生内部调拨。配置错位的典型症状是单子能建但发货时移动类型带不出来或者带出来的是采购收货的移动类型而不是转储发货的移动类型。这时候别在前台反复试直接回去看凭证类型分配对不对——前台的一切异常八成能在后台找到根。4.2 工厂装运数据里的「一步/二步」开关这是整个配置链里最有意思的一个节点。它要维护的信息包括工厂、对应的客户内部客户代表收货方、是否采用一步转储、转储单类型。那个是否一步转储的勾选框本质上是一个流程分支开关勾上STO 发货时直接一步过账不生成交货单走的是 MM 内部的移动类型。不勾STO 发货时会生成交货单走 SD 的装运流程需要拣配、包装、发货过账一整套动作。这个设计的动机很实在。一步转储适合自己的车、自己的人、几公里路的场景没必要为一段短途运输生成一堆单据二步转储适合要走第三方物流、要出运输单据、要跟踪的场景交货单就是那个跟踪载体。配置里的客户字段是另一个隐形开关。这个客户不是真实的外部客户而是系统里代表收货工厂的内部客户。填了它系统才知道收货方是谁才可能生成交货单不填这条路就走不通。原文提到此处填写则会生成出货单采用的是 SD 方式说的就是这个机制。转储单类型比如 NB则是告诉系统生成交货单时用哪种单据类型。NB 是标准采购订单的类型配在这里意味着这条 STO 链路会借用标准采购的装运逻辑。4.3 UB 与 NB 的分野351 为什么会掉进 4500UB 和 NB 最核心的区别在于走不走 SD。UB 不采用 SD 方式不生成出货单整条链路封闭在 MM 内部NB 配合工厂装运数据里的客户配置会触发交货单把 SD 拉进来。这个区别直接决定了发货时用哪个移动类型。走 MM 内部一步转储的用 351 这类移动类型走 SD 的交货单发货过账时会用另一套移动类型。同一个业务动作因为配置不同落到账上的移动类型就不同——这也是为什么两个人做同样一件事物料凭证长得完全不一样。至于原文提到的 351 过账后单号落到 4500 这个号段常见的实现思路是这类凭证的号码范围对象没有被显式维护系统退回默认段分配。单号能生成凭证能过账看起来一切正常但对账时会发现这批单据混在一个不属于它们的号段里按号段归集业务时怎么都对不上。提示号码范围这类不影响过账、只影响追溯的配置是最容易被跳过的一类。它不会让流程报错只会让你在半年后做数据归集时抓瞎。排查顺序建议固定下来先确认凭证类型分配再确认工厂装运数据里的客户和一步转储勾选最后确认号码范围。这个顺序对应身份 → 流程 → 编号三层从粗到细避免在细节里打转。5. 排查与避坑五类把库存搞丢的典型现场库存调拨的问题有个共同特点过账当时一切正常问题在几天甚至几周后才浮现。等发现时当事人早忘了当时点了什么。下面这几类是踩得最多的按现象 → 原因 → 解决记下来能省不少排查时间。5.1 现象313 发了315 迟迟没做在途越挂越多现象很直观MB5T 或者 MMBE 的在途列数字持续上涨发出工厂的可用库存被吃掉接收工厂却一直缺料。原因通常不是忘了做而是没人认领这个动作。313 是发出方做的315 是接收方做的跨了部门甚至跨了工厂责任链在中间断了。发出方认为我发完了接收方认为我没收到货凭什么收两边都没错货就挂在中间。解决要分两层。系统层面建立按账龄分档的在途报表超过阈值自动推给责任人别等人想起来流程层面把 315 收货和实物签收绑定签收单没回来就不许过账。我见过更狠的做法是把在途账龄挂到部门考核里效果立竿见影。还有一个技术性坑315 收货时如果数量填错冲销重做比直接改要安全。改历史凭证的连锁反应很难预估尤其是在已经参与过 MRP 运算之后。5.2 现象工厂间转储做完MRP 突然报 A 工厂缺料现象是 MRP 运行后A 工厂冒出一堆采购建议而这些物料明明刚从 A 工厂调走B 工厂那边还堆着。原因是用了 301 这类无单据的裸转储。MRP 看不到任何需求记录只看到 A 工厂库存凭空减少于是判定为缺口。B 工厂那边库存凭空增加MRP 判定为供给充足不会再建议补货。解决办法是把这类业务切到转储订单上。已经用 301 做过的历史数据短期可以在 MRP 参数里做特殊处理把需求补回来但这是打补丁长期必须改流程。切换时要注意STO 建单到发货之间也有时间差这段差量同样会被 MRP 感知所以转储订单的交期要填得贴近实际别随手填个遥远的日期那样需求会被推到很远的将来等于没填。5.3 现象同一物料在两个工厂金额对不上现象是财务对账时发现同一物料在 A 工厂和 B 工厂的库存金额按数量折算出来的单价差异明显而且这个差异在持续扩大。原因是用了 309 做物料到物料的转储每次过账都在制造价格差异。移动平均价物料还好差异分摊进单价里标准价物料就麻烦了差额全进差异科目库存金额和数量彻底脱钩。处理思路是先停用 309 走日常调拨再清理历史差异。清理时不要直接调账先把每一笔 309 的差异来源列出来确认哪些是合理的价格差、哪些是操作失误。合理的部分保留失误的部分走冲销。这个活很枯燥但跳过它后面的成本分析永远做不准。5.4 现象351 过账后单号跳到一个陌生号段现象是过账成功但生成的凭证号不在预期的号段里落在 4500 这个看着很陌生的段上。单子能用也能冲销就是对账时按号段归集怎么都对不上。原因是号码范围配置缺失系统退回了默认段。这类问题不影响业务流转所以最容易被忽略往往是几个月后做数据治理时才被发现。解决办法是回到号码范围维护节点确认这类凭证对应的号码范围对象是否已经分配了区间。分配之后新产生的凭证会进正确号段但历史凭证不会自动迁移需要单独处理。所以这类配置最好在系统上线前就一次性配全别等到跑了一年再补。5.5 现象冻结库存解冻后数量对不上现象是用 344 把非限制库存转成冻结再用 343 转回来两次操作的数量加起来和原始数量不一致。原因多半是中间有人在冻结状态下做了其他操作比如盘点、或者又做了一次状态转换。冻结库存虽然不可用于 MRP 和发货但它仍然是一个可以被操作的状态不是保险箱。解决办法是给状态转换加上审批或者至少加上日志。344 和 343 这类移动类型看着无害实际上每一次都在改库存的状态归属链条长了就对不上。排查时直接查物料凭证里这两个移动类型的完整序列按时间排序哪一步数量跳变一目了然。6. 设计取舍二步转储的价值不在「多一步」回到最开始那个问题既然一步转储又快又干净为什么系统还要费力设计二步转储甚至为它专门维护在途状态、专门的报表、专门的责任链因为二步转储真正提供的不是多一次过账而是一个可以被观测和干预的时间窗口。一步转储的哲学是结果导向只要最终库存对中间过程不重要。这在同工厂、短距离、低风险的场景下完全成立甚至是更优解——少一次操作就少一次出错机会。但它把风险藏起来了一旦运输途中出问题系统里没有任何痕迹可查只能靠事后盘亏倒推。二步转储的哲学是过程可见它承认物理世界存在运输时间承认这段时间里货物处于一种模糊状态然后把这种模糊状态显式建模。在途库存、账龄、MB5T 报表、315 收货确认全都是围绕这个窗口长出来的。这个取舍可以推广到整个系统的设计思路凡是存在物理延迟、责任转移、风险敞口的环节都值得在系统里留一个显式的中间态。反过来凡是瞬时的、同主体的、低风险的动作压缩成一步反而更好。判断标准不是哪种更规范而是这段过程需不需要有人负责。再看 309 和 301 的设计也是同一个逻辑的不同侧面。309 之所以不建议采用不是因为它技术上有缺陷而是因为它把价值差异这个副作用暴露给了操作者而这个副作用本应由定价或成本核算去处理不该由调拨动作承担。301 之所以不建议用于 MRP 相关物料是因为它绕过了需求留痕让计划系统失去了输入。这些取舍背后有一条共同的线系统设计者把业务语义拆成了移动类型用三位数字编码了这是什么性质的移动、涉不涉及价值、涉不涉及需求、要不要留痕。你在 MB1B 里敲的那个数字其实是在选择一整套后续行为。从那以后我每次做库存调拨方案都会强制走一遍三个问题的自查这段过程有没有物理延迟有没有责任转移会不会进入 MRP 视野三个问题里只要有一个是是就老老实实走转储订单加二步别图省事用 301 裸奔。图省事省下来的那点操作时间迟早会在某次对账或者某次缺料事故里加倍还回去。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑