SAP库存调拨实战:MB1B移动类型、在途库存与MRP避坑指南
简介:面向SAP MM模块学习者、库存管理员及ERP实施人员,这份专题文档围绕库存调拨与发货流程展开,重点解决一步转储、二步转储及工厂间转储在实际操作与后台配置中的理解问题。资源包共1个docx文件,约2.25MB,以图文笔记形式整理关键事务代码与配置要点。已有1520人学习或下载,具备一定参考热度。内容覆盖MB1B下311一步转储、313/315二步转储及在途库存查看,301/303/305工厂间转储与MRP影响,309物料到物料和344/343状态转变,并结合MMBE、MB52、MB5T说明库存查询方式;后台部分则涉及库存调拨订单凭证类型、SD装运数据、一步转储勾选、转储单类型NB及UB不采用SD方式等配置。读者可据此梳理从发货、收货到在途跟踪的完整链路,理解不同转储方式对库存与需求计划的影响,为日常调拨操作和后台参数检查提供参考。
1. 一步之差:库存调拨在 MB1B 里为什么会“丢货”
库存调拨在 SAP 里是一类看着最没技术含量的操作:打开 MB1B,敲移动类型,填工厂、库存地点、物料、数量,回车过账。真到现场才发现,同一套菜单里藏着两套完全不同的账务逻辑——MVTY 311 一次过账,库存立刻从一个库存地点搬到另一个;MVTY 313 过账后货却“消失”了,仓库说没收到,账上说已发出,中间那段在途库存既不在 MMBE 的库存地点行里,也不在 MB52 的清单上,新手第一反应往往是系统出问题了。这套环境适合刚接手 MM 模块的顾问、要自己做转储配置的内部运维,以及从别的 ERP 迁到 SAP 的仓储团队。装不好的代价很直接:账实不符、MRP 需求传递断链、月结对不上。下面按我实际配置的顺序走一遍。
2. 装前清单:ECC 与 S/4HANA 的库存调拨环境差异
在动手之前得先确认一件事:这套东西不是装一个安装包,而是把后台配置、主数据、权限三样东西对齐。任何一样缺了,前台 MB1B 都会在过账那一步给你脸色看。所以顺序上我永远先做环境盘点,再碰 SPRO。盘点不是走形式,是把后面每一步的依赖提前摸清楚,省得配到一半回头补数据。
2.1 版本边界与事务码选择
ECC 6.0 和 S/4HANA 都能跑完整的一套库存调拨,差别在于入口和底层表。ECC 下 MB1B 是老式屏幕,一屏填完,字段少,熟手喜欢它快;S/4HANA 主推 MIGO,MB1B 仍然保留可用,但如果你们客户端已经统一走 Fiori 或者 MIGO,配的时候就得知道 313 发货那步在 MIGO 里对应的是“物料凭证 - 转储”还是“收货”,别拿 ECC 的操作截图去教 S/4 的用户。常见做法是:老系统留 MB1B 做批量录入,新系统一律用 MIGO,两边共用同一批移动类型,配置层不需要改。
底层差异要留意一处。ECC 里查二步转储流水主要看 MSEG,S/4HANA 里真正的明细表是 MATDOC,MSEG 成了兼容视图。做自定义报表或者对账脚本的人如果直接写 MSEG,在 S/4 上性能会难看,字段也可能对不齐。我在项目里一般要求写查询的人先确认表名,再谈逻辑。
MB1B、MIGO、MB52、MMBE、MB5T 这几个事务码本身不需要“安装”,但要在测试客户端里逐个打开确认可用。有些客户端为了瘦身会把 MIGO 的授权角色裁掉,运维进去一按就报“无此事务码”,这种问题在配置阶段发现比在上线当天发现便宜得多。
2.2 组织架构与主数据的三个关键字段
库存调拨跑不跑得通,八成取决于主数据,而不是配置。工厂、库存地点这两个组织结构必须先建好,而且转出和转入的库存地点都要存在,哪怕它当前是空的。库存地点不存在时,MB1B 不是提示“库存地点无效”这么友好,而是直接不给过账,报错指向的字段还不一定是库存地点。
物料主数据这边要看三个地方。第一是工厂视图和库存地点视图有没有维护,没维护的物料在转入库存地点时会卡住。第二是 MRP 视图,工厂间转储要不要传递需求,取决于物料在两边工厂的 MRP 类型和特殊采购类,这一步没理清,后面配转储订单就是白配。第三是评估类与价格控制,物料到物料方式(MVTY 309)之所以一般不建议用,就是因为不同工厂或仓库同一物料的移动平均价可能不同,一过账就产生价值差异,财务月末要调账。我一般会在物料上线前用 MB52 把参与调拨的物料拉一遍,确认价格控制和评估类一致,不一致的单独列出来讨论。
还有一个容易被忽略的:批次。如果物料启用了批次管理,313 发货和 315 收货必须指定同一个批次,否则在途那一笔永远配对不上。仓库实际操作里常见的情况是发货时挑了批次 A,收货时系统建议批次 B,人也没看就过了,结果 MMBE 里两个批次各多一笔、少一笔,账面上看起来总额没错,明细全乱。
2.3 权限与编号范围:别等过账才发现没权限
权限这块最典型的翻车是:配置人员用开发账号把整个流程跑通了,交给业务用户一做就报“没有授权”。库存调拨涉及的授权对象主要是 M_MSEG_WMB(工厂级物料凭证)、M_MSEG_BWA(移动类型)、M_MSEG_WWA(价值),工厂间转储还会碰到 M_MSEG_WER。给权限的时候不要只给 311,313、315、301、303、305、344、343、351 这一串都得按岗位分开放,否则业务为了省事会直接要 SAP_ALL,那是运维给自己埋雷。
编号范围也得提前看。转储单如果没有分配凭证范围,创建时会取到默认的 4500 这一档,取号失败就直接中断。我的习惯是在测试客户端做一次“空跑”——把要用的凭证类型各建一张单,能存下来再谈业务。
提示:主数据、权限、编号范围这三项,我一般放在同一个检查表里一次过完,不拆成三轮,因为它们的报错都出现在过账那一刻,分轮排查反而更慢。
2.4 上线前自检表
| 检查项 | 具体内容 | 不通过的后果 |
|---|---|---|
| 工厂 | 转出、转入工厂均已启用 | 301/303 无法过账 |
| 库存地点 | 两边库存地点都存在 | 311 报库存地点错误 |
| 物料视图 | 工厂视图、库存地点视图已维护 | 收货步骤卡住 |
| 价格控制 | 移动平均价/标准价一致(尤其 309) | 产生价值差异 |
| 批次 | 批次管理物料的批次可共用 | 在途配对不上 |
| 授权 | M_MSEG_WMB / BWA / WWA 已分配 | 业务用户无法过账 |
| 编号范围 | 凭证类型已分配范围 | 转储单创建中断 |
这张表我一般直接贴在项目群里,谁配哪一项谁签字,后面出问题能倒查。
3. 后台先配:库存调拨订单凭证类型与工厂装运数据的设置顺序
前台能不能用,取决于后台这两处配没配对。这段顺序不能反:先分配凭证类型,再定义工厂的装运数据,最后才去碰编号范围。反过来的话,你做装运数据时会发现凭证类型下拉是空的,只能回头重来。
3.1 分配凭证类型:转储单挂在哪张凭证上
路径是 SPRO 下采购模块里的“采购订单 → 设置库存调拨订单 → 分配凭证类型”。这一步做的事很简单:告诉系统,某个工厂做库存调拨时,生成的转储单用哪个凭证类型。素材里提到的 NB 和 UB 就是两个典型:NB 是标准采购订单类型,走的是标准转储单流程;UB 是库存转储订单类型,常用于同一公司内不同工厂之间的调拨。
配置的时候要填的是“工厂 + 凭证类型”的组合。有些项目图省事,只配一个默认凭证类型给所有工厂,短期能跑,长期会出问题——不同事业部对转储单的审批流、输出单据、编号范围要求不一样,全塞一个类型,后面想拆都拆不开。我的做法是按业务单元分,一个业务单元一个凭证类型,工厂挂在下面。
这里有一个反直觉的点:这一步配完,前台不会有任何变化,你依然可以在 MB1B 里手工敲 301 做工厂间转储。也就是说,配了不等于强制用。真正强制用转储订单的是流程和权限管理,不是配置。很多项目上线后依然有人手工 301,问起来就是“配置里没拦住”。
3.2 定义工厂的装运数据:那个勾决定要不要出货单
这是整套配置里最容易被低估的一处。路径在 SPRO 里搜“定义工厂的装运数据”,核心是给“供货工厂—接收工厂”这一对关系建一条记录,记录里要填几个东西:
| 配置字段 | 作用 | 常见取值 |
|---|---|---|
| 工厂 | 供货方工厂 | 转出工厂 |
| 客户 | 工厂对应的客户号(工厂客户) | 内部客户编码 |
| 一步转储标识 | 勾选则一步方式,不勾则二步 | 按业务确认 |
| 接收工厂 | 转入方工厂 | 目标工厂 |
| 供货工厂 | 供货方工厂 | 转出工厂 |
| 转储单类型 | 生成的转储单凭证类型 | NB |
“是否采用一步转储方式”这个勾选,性质是开关:勾上,工厂间转储走一步,不生成出货单;不勾,走二步,会生成出货单,也就是走了 SD 那条链路。很多项目的差异就出在这里——同一个 351,有人过完账什么都没多出来,有人过完账多了一张交货单,原因就是这个勾不一样。
我一般会把这个勾的状态写进配置文档,并且要求变更必须走审批。因为它改的不是一个显示字段,是整条业务链路要不要拉 SD 进来。
3.3 UB 与 NB 的取舍:MM 方式和 SD 方式怎么选
素材里讲得很明确:工厂间转储涉及 MRP 运算,也就是库存需求传递,所以工厂间转储应该采用转储订单方式,实现上有 MM 和 SD 两条路。这两条路的差别不在能不能转,而在转的过程中有多少单据、谁来跟进。
MM 方式,用 UB 这类转储订单,走的是采购模块的链路,不生成出货单,参与方只有 MM 和仓库。适合的场景是:同一公司内部工厂之间、没有实际运输环节、不需要出货单据和运费结算。它的好处是轻,坏处是库存移动的过程对物流侧不透明。
SD 方式,配了工厂的装运数据并且在转储单类型里填了内容,系统会生成出货单,走交货、拣配、发货过账那条线。适合有实际运输、需要出货凭证、需要跟踪在途的场景。代价是配置面变大,SD 那边的装运点、路线、交货类型都要跟着配。
素材里那个例子值得单独说:UB 采购订单,同一公司不同工厂,一步转储做 MB1B 351,系统没有给转储单分配范围,所以落在 4500 这一档。这句话背后是两个信息——一是它确实没走 SD,二是编号范围没单独配,用的是默认。上线前把编号范围按凭证类型配清楚,这一步不能省。
注意:不要在同一套客户端里既配 SD 方式的装运数据、又靠人工约定“我们不走 SD”。配置一旦生效,系统就会按它走,人拦不住。
3.4 移动类型的允许性与字段检查
移动类型本身是标准交付的,311、313、315、301、303、305、309、343、344、351 一般都在。但有些客户端做过裁剪,或者为了业务方便复制出 Z 开头的自定义移动类型,这时候就要确认你用的那个类型有没有被禁掉、字段选择是不是被改过。
检查方式不复杂:用 OMJJ 看一眼移动类型的字段选择组,重点看数量、批次、库存地点这几个字段是不是必输或者隐藏。我遇到过一种情况,某个客户端把 313 的批次字段设成了隐藏,结果批次物料发货时系统自动带了个空批次,收货那步怎么都对不上,查了半天以为是配置问题,实际是字段选择被改过。
这一步不需要改什么,但要留个记录:哪些移动类型被定制过、谁改的、为什么改。这种信息在出故障时就是黑匣子里的那段录音。
4. 前台执行:311、313/315、301/303/305 的操作与在途库存查看
后台配完,前台就是一条条过账。这一章按移动类型分组,每一组都写清楚填什么、过完之后账上变成什么样、去哪里看结果。我建议在测试客户端按顺序全跑一遍,跑完再进生产。
4.1 311:库存地到库存地的一步转储
311 是最简单的一类:同一个工厂内,A 库存地到 B 库存地,一步完成,没有在途。MB1B 里填移动类型 311、工厂、转出库存地点、转入库存地点、物料、数量,过账即可。
事务码:MB1B 移动类型:311 工厂:1000 转出库存地点:A001 转入库存地点:B001 物料:MAT-0001 数量:100过账后,MMBE 看 A001 少 100,B001 多 100,工厂总库存不变。这类操作没有中间状态,出问题基本只有两个原因:转入库存地点不存在,或者物料在转入地点没有库存地点视图。前者报错明显,后者报错指向的字段经常让人误解。
311 的一个变体是同工厂内带批次或者带特殊库存的转储,逻辑一样,只是多了几个必输字段。批量场景下我一般让人用 MIGO 的多行录入,比 MB1B 一行行敲快,但要注意 MIGO 的默认移动类型会被用户参数带偏,进界面先看一眼左上角。
4.2 313 / 315:二步转储与在途库存的产生与冲销
二步转储的核心是“货在路上”这个状态要在账上体现出来。MVTY 313 是发货,MVTY 315 是收货,中间那段时间库存算在途。
发货这一步,MB1B 填 313,转出工厂和库存地点、物料、数量。过账后,转出地库存减少,但这批货既不在转入地,也不在转出地的可用库存里——它在途。素材里给的例子很直观:总数应该是 90 个,其中 10 个为在途库存,那么过完 313 之后,转出地账面上就只剩 80 个可用。
收货这一步有两个入口:MB1B 敲 315,或者用 MIGO 做“物料凭证收货”。两种方式结果一样,差别在操作习惯。MIGO 里可以按物料凭证号把 313 那张单捞出来,系统自动带出待收数量,减少手输错误;MB1B 315 则要自己填工厂、库存地点、物料、数量,一旦数量填错,在途就多出来一块,且不会自己消失。
这里有个实操细节值得记住:315 收货时,转入的库存地点可以和 313 发货时指定的不一样,系统不会拦。这既是灵活性,也是账实不符的来源。我一般要求在 313 的凭证抬头上把目标库存地点写进文本字段,收货的人照着填。
关于在途库存能不能被查出来,这块后面 4.5 单独讲,因为查询事务码选错了,人会以为货丢了。
4.3 301 / 303 + 305:工厂间转储的两种走法
工厂间一步转储用 301:MB1B 填 301,转出工厂、转出库存地点、转入工厂、转入库存地点、物料、数量,一步完成,没有在途。账面结果是转出工厂库存减少、转入工厂库存增加,两个工厂的库存同时变。
工厂间二步转储用 303 发货加 305 收货,逻辑和 313/315 一样,只是跨了工厂。303 过账后,转出工厂的库存减少,转入工厂还没收到,中间那批货在途。这时候用 MMBE 看转出地,数字是对的;看转入地,什么都没变;想在系统里找到这批货,得用查跨工厂在途的事务码。
这两种走法选哪个,不能只看方便。301 一步到位,看起来干净,但它绕过了转储订单,MRP 那边的需求传递就可能断掉。素材里专门提示了这一句:工厂间转储涉及 MRP 运算,应当采用转储订单方式操作。我的实际做法是,只要两边工厂都参与 MRP 运算,就不允许手工 301,一律走转储订单加 351,或者 303/305 配转储订单。手工 301 只留给不参与计划的工厂,比如某些辅助仓。
303 和 305 的组合还需要注意时间差。发货和收货之间如果跨月,在途库存会挂在账上跨期,月结的时候财务会来问。这种问题不是配置能解决的,只能靠流程卡:月末最后一个工作日不再做 303 发货,或者发货后当天必须完成 305。
4.4 344 / 343 / 309 / 351:状态转移和几个特殊移动类型
物料状态转变走 MB1B,典型的是非限制到冻结用 344,冻结到非限制用 343。这类操作不改变库存总量,只改变库存的状态分类。举个例子:非限制库存 100,做 344 转 20 到冻结,那么非限制变 80,冻结变 20,总库存还是 100。所以用 MB52 看可用库存会觉得“少了”,用 MMBE 看总量才对得上。素材里提到冻结库为 0 的情形,就是过完 344 之后 MMBE 的冻结那一列应该有数,如果还是 0,八成是移动类型敲错了或者过了两张单。
MVTY 309 是物料到物料。前面说过,不同仓库或不同工厂,同一物料的移动平均价可能不同,309 一过账就会带出价值差异,财务要处理。所以一般不建议采用。真要做物料替换,我的建议是走库存转储把旧物料清出去,再用其他方式入库新物料,别用 309 图省事。
351 是走转储订单的工厂间一步转储发货。它和 301 的区别在于:351 需要有一张前置的转储订单,过账时引用订单号,库存移动和订单绑定;301 是纯手工库存移动,没有前置单据。这也是为什么配了凭证类型之后,规范的做法是 351 而不是 301。
4.5 三个查询事务码的分工:MMBE、MB52、MB5T
查库存这件事,事务码选错比配置错更常见。
MMBE 是物料库存总览,能看到一个物料在各个工厂、各个库存地点、各个特殊库存类别下的数量,包括在途那部分。它的视角是“这个物料一共有多少、分布在哪”。313 发货后想确认货在不在,MMBE 是第一个该打开的。
MB52 是库存清单,按工厂、库存地点批量列出库存,适合盘点和批量核对。它看的是同一工厂内 A 库存地转到 B 库存地的结果,也就是 311 那类操作前后的对比。注意 MB52 默认展示的是可用库存口径,冻结、在途这些不一定在列里,别看错。
MB5T 是查跨工厂在途的,A 工厂转到 B 工厂、货还在路上时,用 MB5T 能看到这批在途明细。素材里说得很清楚:不同工厂的在途库存用 MB5T,同一工厂内不同库存地之间的在途用 MMBE、MB52 就能看。
如果这三个还不够,比如要按时间段拉二步转储的全部流水做对账,那就得查表。MSEG 里按移动类型过滤是一个通用做法:
-- 查某物料一段时间内的二步转储流水,用于核对 313/315 或 303/305 是否配对 SELECT m.mblnr, m.mjahr, m.zeile, m.bwart, m.matnr, m.werks, m.lgort, m.menge, m.meins, m.budat_mkpf FROM mseg AS m WHERE m.bwart IN ('313','315','303','305') AND m.matnr = 'MAT-0001' AND m.budat_mkpf BETWEEN '20240101' AND '20240131' ORDER BY m.mblnr, m.zeile;这段的逻辑是:把发货和收货两种移动类型一起捞出来,按物料凭证号排序,成对的 313 和 315 说明这笔在途已经闭环,只有 313 没有 315 的就是还挂在路上的。参数上,bwart 决定看哪一类转储,matnr 和日期范围控制数据量。S/4HANA 环境里明细表以 MATDOC 为准,MSEG 是兼容视图,数据量大时建议换成 MATDOC 并加上更多过滤条件。
5. 踩坑记录:库存调拨上线后最常见的五个翻车现场
这一章是我自己踩过以及帮人救过的几类问题,按“现象—原因—解决”记,遇到的时候照着对。
5.1 313 发货后 MMBE 看不到货,以为丢库存
现象:仓库做了 313 发货,转出地库存减了,转入地没动静,MMBE 里翻遍所有库存地点都找不到这批货,业务直接打电话说系统丢数据了。
原因:313 产生的是在途库存,它在 MMBE 里不挂在任何一个库存地点的常规行上,而是体现在工厂层的在途或特殊库存统计里。看的人如果只盯着库存地点行,就会得出“货没了”的结论。
解决:先打开 MMBE 看工厂层的在途数量,再用 MB5T 确认跨工厂在途明细。如果确认在途存在,那就是正常的中间状态,等 315 收货即可;如果 MMBE 在途也是 0,那才是真出问题,回头查 313 那张物料凭证有没有过账成功、移动类型有没有敲错成 311。我一般会让仓库在发货单上直接写上物料凭证号,收货的人拿号去 MIGO 里捞,减少这类误会。
5.2 工厂间用了 301,MRP 需求没传过去
现象:两个工厂之间转了一批库存,账面上数字都对,但下个月跑 MRP,转入工厂还是建议采购,转出工厂还压着一堆库存,计划员说系统算错了。
原因:手工 301 是纯库存移动,没有前置转储订单,MRP 拿不到“这批货要转过去”的需求信息,两边工厂的需求和供给各算各的。
解决:把工厂间转储改走转储订单,配置上按 3.1 分配凭证类型,操作上用 351 或者 303/305 配订单。已经用 301 转过的历史数据没法追溯修正,只能在下个计划周期里通过调整计划参数消化。这类问题的成本很高,所以我在项目里宁可把 301 的权限收掉,也不靠培训去约束。
5.3 配了装运数据,结果多出一张出货单
现象:本来只想做工厂间一步转储,过完账发现系统生成了一张交货单,物流那边莫名其妙多了一条待发货任务。
原因:“定义工厂的装运数据”里“一步转储”那个勾没勾,或者转储单类型填了内容,系统判定走 SD 方式,于是生成出货单。
解决:回到配置里确认这个勾的状态。只要业务不需要实际出货环节,就勾上一步转储,并且把转储单类型那一栏清空。改配置之前先确认没有在途单据,否则改完历史单据的处理会不一致。这类改动我要求必须走变更记录,因为它是链条级的开关,不是单点字段。
5.4 转储单建不出来,报编号范围错误
现象:业务创建转储订单时直接报错,提示编号范围不存在或者无法取号。
原因:凭证类型没有分配编号范围,或者分配了但当前年度没开号段。素材里那个 4500 就是没单独配时落到的默认档,默认档一旦没维护年度,取号就断。
解决:在 SPRO 里给对应凭证类型分配编号范围,并把当前年度和下一年的号段都开出来。跨年的时候特别容易忘,12 月底配好,1 月 1 号第一单就报错。
5.5 344 过完账 MB52 数字变了,总库存却没变
现象:财务用 MB52 看可用库存,发现少了 20 个,跑来问是不是过错了账;用 MMBE 看总数,还是原来那个数,两边对不上。
原因:344 是非限制转冻结,只改状态不改总量。MB52 默认口径偏可用库存,冻结部分不进这个口径,所以看起来少了。
解决:确认业务意图是冻结而不是出库。如果确实要冻结,用 MMBE 看冻结那一列,数字应该和 344 的数量一致;如果要的是把货清出去,那应该用 551 这类出库移动类型,不是 344。这两个操作搞混过一次之后,我在培训材料里把“改状态”和“改数量”单独列了一页。
6. 验证跑通:用一张物料凭证把库存调拨链条走完整
装完配完,验证不能靠“我点了没报错”。我的做法是在测试客户端走一条完整的链路,每一步都留凭证号,最后拿数字对一遍。
先做同工厂的一步转储:MB1B 敲 311,从 A001 转 100 到 B001,记下凭证号。用 MMBE 确认 A001 减 100、B001 增 100、工厂总量不变。再做同工厂的二步:313 发货 90,这时 MMBE 的工厂层在途应该是 90,用 MB5T 或者物料凭证查能看到明细;接着用 MIGO 按凭证号收货,315 过账,在途归零,B001 增加 90。素材里那个 90 和 10 的例子可以照着套:总数 100,发出 90,其中 10 留在途,那么 315 只收 80,剩下 10 在 MMBE 里应该还显示为在途。
再做工厂间:先按第 3 章配好凭证类型和装运数据,用转储订单走 351,过完账确认转出工厂减少、转入工厂增加,并且 MRP 那边能看到需求传递。如果时间允许,再做一次 303 加 305,确认跨工厂在途在 MB5T 里可见。
| 验证项 | 操作 | 通过标准 |
|---|---|---|
| 同工厂一步 | MB1B 311 | 两边库存地一增一减,工厂总量不变 |
| 同工厂二步 | MB1B 313 + MIGO 315 | 313 后在途可见,315 后在途归零 |
| 在途查询 | MMBE / MB5T | 数量与发货量一致 |
| 工厂间一步 | 转储订单 + MB1B 351 | 两工厂库存同步变化,MRP 需求可见 |
| 工厂间二步 | MB1B 303 + 305 | 在途挂在 MB5T,收货后闭环 |
| 状态转移 | MB1B 344 / 343 | 总量不变,冻结列变化 |
最后拿物料凭证号去 MSEG(或 S/4 里的 MATDOC)里对一遍流水,确认每一笔 313 都有对应的 315,每一笔 303 都有对应的 305。对不上的那几笔,就是还在途的,也是月末要跟财务解释的那几笔。
从那以后我每次配完库存调拨,都强制走一遍这条链路,不管项目多赶,哪怕只配了一个移动类型也要跑。因为这套东西的错不会在配置界面报出来,只会在一周后的盘点表上出现。希望帮到你。
本文还有配套的精品资源,点击获取