简介:围绕 SAP MM 模块库存调拨与发货主题整理的实操型文档,面向已具备一定 SAP 基础、需要厘清库存转移流程与后台配置的顾问、关键用户及企业内部运维人员。内容以 MB1B 为主线,串联库存地之间的一步转储 311、二步转储 313/315,工厂间转储 301/303/305 与 309 物料到物料、344/343 状态转变,并延伸到 MMBE、MB52、MB5T 等库存查看方式及转储订单、工厂装运数据、UB 等后台参数对单据生成的影响。资源包共 1 个 docx 文件,约 2.25MB,属于单文档专题资料,适合按章节查阅流程要点与配置逻辑。已有 1520 人学习,可用于梳理常见转储场景、理解在途库存与 MRP 传递关系,并对照后台设置排查单据与库存差异。
1. 从一次“货发了,库存没动”说起
去年帮一家做机械配件的公司梳理 SAP MM 环境,仓库同事在 MB1B 里敲完 311,单子显示保存成功,可第二天盘点两边库存地对不上。查了半天才发现,他把二步转储当成一步做了——313 发货出去,315 收货没跟上,10 个物料就那么挂在在途里,谁也没注意。库存调拨这事,在 SAP 里不算难,难的是移动类型选错、后台配置漏勾,系统不报错,账却慢慢歪掉。这篇记录按“环境准备—移动类型实操—后台配置—出问题怎么救—装完怎么验证”走一遍,适合刚接手 MM 模块、需要在测试机里把库存调拨跑通的开发者,也适合想把二步转储和在途库存搞明白的老手。版本上以 ECC 6.0 与 S/4HANA 通用逻辑为准,事务代码 MB1B、MIGO、MMBE、MB52、MB5T 全篇贯穿。
2. 环境与前置准备:跑通 MB1B 之前必须先有的东西
库存调拨看着只是 MB1B 一个事务码的事,实际上它压在一堆前置数据上。工厂、库存地点、物料主数据、移动类型允许的科目和字段状态,任何一环没配,保存时要么报“库存地点不存在”,要么报“移动类型 XX 不允许此业务”。所以正式敲命令之前,先把这套最小环境列清楚,比事后一条条排错省事得多。
2.1 版本差异与客户端准备
ECC 6.0 和 S/4HANA 在库存调拨这块的差别,主要在界面和部分移动类型的默认行为上。MB1B 在 ECC 里是经典的四段式屏幕:抬头、移动类型、物料、数量地点。S/4HANA 里 MB1B 仍然可用,但 Fiori 侧的“库存调拨”应用会走 MIGO 的底层逻辑,习惯经典 GUI 的人建议始终用 SAP GUI 或 Web GUI 连接,避免两套界面混着用导致物料凭证号和预期不符。
登录客户端用 SAP GUI for Windows 7.70 或更高,连接参数由 Basis 提供,这里不展开。进系统后先确认三件事:
- 用户有 M_MSEG_WMB、M_MSEG_BWA 相关权限,没有的话 MB1B 保存会直接抛“没有物料移动的授权”;
- 客户端是测试客户端,库存调拨会真实改库存,千万别在生产客户端上试;
- 会计期间处于打开状态,MM 过账跨期会报“期间已关闭”。
2.2 必查的主数据与后台开关
在测试机里我一般先跑一个清单页,把下面这些对象挨个确认一遍,用 MB1B 的 311 做试探性过账看是否报错。
# 在 SAP GUI 事务码栏依次执行,不是系统命令行,仅作检查清单用 MM03 # 查物料主数据:工厂视图、存储视图、会计视图 1 是否齐全 MM01 # 缺视图时补建,物料类型决定哪些视图必须存在 OX09 # 查库存地点是否已在目标工厂下创建 OMJJ # 查移动类型 311/313/315/301/303/305/309/344/343 是否启用 OMWB # 查自动记账科目确定,物料移动是否已分配到科目MM03 是整套流程的地基。物料主数据在工厂视图里必须维护 MRP 视图、采购视图和工作计划视图中的必要项,存储视图里要有存储条件;会计视图 1 缺失的话,311 过账会报“无法确定科目”。这一步新人最容易跳过,结果在 MB1B 保存时卡在 FI 侧。
OX09 决定库存地点。我见过一个典型翻车:A 库存地转到 B 库存地,结果 B 在目标工厂根本没建,系统提示“库存地点 0002 不存在于工厂 1000”。同一工厂内的 311 只需要两个库存地点都存在;跨工厂的 301 则需要两边的工厂和库存地点都齐全。
OMJJ 是移动类型的总开关。进去搜 311,确认“移动类型”处于激活状态,并检查字段选择是否允许输入“接收库存地点”。313 和 315 是一对:313 必须有接收库存地点和接收工厂字段,315 则依赖 313 生成的物料凭证号做收货参照。301/303/305 是跨工厂的那一套,305 收货时同样要参照 303 的凭证。
OMWB 管科目确定,库存调拨本身不产生会计凭证(同一公司代码内),但跨公司代码的转储会走 FI,配置缺失会直接报错。
2.3 移动类型与业务场景对照表
在 MB1B 里选错移动类型,是库存调拨最贵的错误。下面这张表是我自己贴在工位上的速查版,按“同一个工厂内 / 跨工厂 / 物料状态”三档分。
| 场景 | 移动类型 | 步数 | 在途库存 | 查看事务 |
|---|---|---|---|---|
| 同一工厂,库存地到库存地 | 311 | 一步 | 无 | MMBE、MB52 |
| 同一工厂,库存地到库存地,需在途 | 313 + 315 | 二步 | 有 | MMBE、MB52 |
| 跨工厂,直接转储 | 301 | 一步 | 无 | MMBE |
| 跨工厂,二步转储 | 303 + 305 | 二步 | 有 | MB5T |
| 物料到物料 | 309 | 一步 | 无 | MMBE |
| 非限制转冻结 | 344 | 一步 | 无 | MMBE |
| 冻结转非限制 | 343 | 一步 | 无 | MMBE |
这张表的关键不在移动类型编号,而在“在途库存”这一列。二步转储的核心价值就是让物料在运输途中可见、可控,313 发出后在 MMBE 里能看到 10 个在途,315 收货后才真正落到目标库存地。一步转储省事,但没有在途概念,适合即时完成的内部搬运。
提示:309 物料到物料方式,因为不同仓库或工厂下同一物料的移动平均价可能不同,会产生价值差异,我一般不建议在生产环境使用,除非财务侧明确接受差异科目。
3. 一步转储与二步转储:MB1B 实操全流程
环境确认完,进入正题。这一章按“库存地内一步—库存地内二步—在途查看”的顺序走,每一步都给命令、字段和过账后的验证方法。移动类型选错导致的库存歪账,八成都出在这一章。
3.1 库存地到库存地一步转储:MB1B 311
假设 A 库存地 0001 转 90 个到 B 库存地 0002,同一工厂 1000。进 MB1B,输入移动类型 311,回车后填写抬头和行项目。
事务码:MB1B 移动类型:311 抬头: 凭证日期:当天 过账日期:当天 工厂:1000 行项目: 物料:MAT-1001 数量:90 发出库存地点:0001 接收库存地点:0002保存后系统生成一个物料凭证,MMBE 查 MAT-1001,0001 减少 90,0002 增加 90,总量不变。这就是一步转储的含义——单个步骤完成库存地点间的转移,没有中间状态。
字段说明上,311 最关键的两个字段是“发出库存地点”和“接收库存地点”,两者必须在同一工厂下,且都已在 OX09 中维护。数量单位取自物料主数据的基本计量单位,如果输入的是非基本单位,系统会按物料计量单位换算。
过账成功后建议立刻用 MB52 查一次该物料在两个库存地点的库存,确认两边一减一增、总数持平。MB52 是库存余额的明细视图,比 MMBE 更适合看库存地点级的数字。
3.2 库存地二步转储:MB1B 313 发货,315 收货
二步转储把“发出”和“接收”拆成两张物料凭证。第一步 313 只减少发出库存地,物料进入在途;第二步 315 参照 313 的凭证,把在途库存落到接收库存地。前面那个翻车案例就是只做了 313,10 个物料一直挂在在途。
先做 313 发货:
事务码:MB1B 移动类型:313 抬头: 工厂:1000 行项目: 物料:MAT-1001 数量:90 # 注意:按整批发货口径过账 发出库存地点:0001 接收库存地点:0002 接收工厂:1000313 保存后,0001 库存减少 90,但 0002 不会增加,其中 10 个(按业务口径)处于在途。这里原文给的口径是:发货应为 313,总数应为 90,其中 10 个为在途库存。也就是说,如果业务上先发 90、实际只到 80,剩余 10 个要在在途里可查。
然后是 315 收货,两种做法:MB1B 315,或者 MIGO 做物料凭证收货。
# 做法一:MB1B 315 事务码:MB1B 移动类型:315 行项目: 物料:MAT-1001 数量:90 发出库存地点:0001 接收库存地点:0002 收货参照:313 生成的物料凭证号# 做法二:MIGO 物料凭证收货 事务码:MIGO 操作:A01 收货 参照:物料凭证 输入:313 的物料凭证号 行项目:确认数量与接收库存地点315 保存后,在途减少,0002 库存增加 90。MMBE 查同一工厂的在途库存,可以看到 313 发出、315 没收之前的挂账;MB52 查同一工厂 A 库存地转到 B 库存地的明细余额。这两个事务码在二步转储里是标配,一个看在途,一个看余额。
提示:315 必须参照 313 的物料凭证号,否则系统会当成一笔新的无参照收货,数量对不上时很难追。我一般把 313 的凭证号抄在转储单上再去做 315。
3.3 工厂间转储:301 一步 与 303/305 二步
跨工厂的库存调拨逻辑和同一工厂内一致,只是移动类型换了。A 工厂 1000 转 B 工厂 2000,一步用 301,二步用 303 发货、305 收货。
# 工厂间一步转储 事务码:MB1B 移动类型:301 行项目: 物料:MAT-1001 数量:50 发出工厂:1000 发出库存地点:0001 接收工厂:2000 接收库存地点:0001# 工厂间二步转储:303 发货 事务码:MB1B 移动类型:303 行项目: 物料:MAT-1001 数量:50 发出工厂:1000 发出库存地点:0001 接收工厂:2000 接收库存地点:0001303 收货侧的 305 同样可以走 MB1B 或 MIGO 参照收货。这里有一条血泪经验:工厂间转储涉及 MRP 运算,库存需求会在工厂之间传递,如果直接拿 301 做,MRP 会把接收工厂的需求算错。原文写得很明确——考虑工厂间转储涉及 MRP 运算(库存需求传递),工厂间转储应采用转储订单方式操作,实现方式有 MM 功能和 SD 功能两种。
标准做法是:走 MM 侧的库存转储订单(采购订单的一种),凭证类型 NB;或者走 SD 侧的出货单。用 MB1B 301/303 直接转的,只适合应急或 MRP 不敏感的物料。
3.4 在途库存怎么查:MMBE、MB52、MB5T 的分工
二步转储做没做对,看三个事务码就够。
- MMBE:物料库存总览,能看到同一工厂的在途库存,313 发货后 315 未收货前,在途有数;
- MB52:同一工厂内 A 库存地转到 B 库存地的余额明细,用来确认库存地点级的增减;
- MB5T:不同工厂之间的在途库存,301/303 跨工厂场景专用。
这里有个容易混的点:同一工厂内的在途用 MMBE 和 MB52 看,跨工厂的在途必须用 MB5T。有次排查一个跨工厂 303 在途挂账,有人在 MB52 里翻了半天没找到,换成 MB5T 一眼就看到了。
4. 后台配置:转储订单类型与一步/二步的开关
库存调拨能不能走转储订单、会不会生成出货单,全看后台这几处配置。前台 MB1B 报的很多“凭据类型未分配”,根子都在这里。这一章按配置路径走一遍,涉及 SPRO 的采购与装运数据两块。
4.1 分配转储订单的凭证类型
路径:SPRO → 物料管理 → 采购 → 采购订单 → 设置库存调拨订单 → 分配凭证类型给转储订单。
这一步决定工厂间转储用哪种采购凭证类型。常用的是 NB,配置后创建转储订单时默认带出 NB。原文里提到的 UB 是不同公司代码间的转储订单类型,配置要点在于“是否生成出货单”。
SPRO 路径:物料管理 > 采购 > 采购订单 > 设置库存调拨订单 > 分配凭证类型给转储订单 配置项: 工厂:1000 凭证类型:NB # 标准采购订单类型,用于库存转储订单 补充:若使用 SD 功能,需同时维护"定义工厂的装运数据"NB 和 UB 的区别要记牢:NB 用于同一公司代码内的工厂间转储,UB 用于跨公司代码的转储(会涉及公司间结算)。选错凭证类型,转储订单创建时会报“工厂 XX 不允许此凭证类型”。
4.2 定义工厂的装运数据:一步还是二步的分水岭
路径:SPRO → 物料管理 → 采购 → 采购订单 → 设置库存调拨订单 → 定义工厂的装运数据。
这一屏是整套配置里最容易漏勾的。核心字段三个:工厂客户、接收工厂、供货工厂,外加“是否采用一步转储方式”的勾选项。
SPRO 路径:物料管理 > 采购 > 采购订单 > 设置库存调拨订单 > 定义工厂的装运数据 字段: 工厂:1000 工厂客户:填入对应客户编号 接收工厂:2000 供货工厂:1000 一步转储:勾选 = 一步方式;不勾 = 二步方式 转储单类型:NB勾了“一步转储”,转储订单收货时一步到位;不勾,则走二步,会有出货单产生。原文里的例子很典型:此处填写则会生成出货单,采用的是 SD 方式;UB 采购订单在同一公司不同工厂一步转储时,发货用 MB1B 351,系统未给转储单分配范围,所以为 4500。
后半句要单独解释:351 是转储订单发货用的移动类型,配置不当或凭证类型未分配范围时,系统会落到 4500 这个默认范围,导致出货单生成不符合预期。检查办法是看转储订单保存后有没有生成出货单,有就是走了 SD 方式,没有就是纯 MM 方式。
4.3 MM 功能与 SD 功能的取舍
工厂间转储用 MM 还是 SD,是架构层面的选择,不是配置细节。
- MM 功能:用转储订单(NB/UB)加 351 发货,不生成出货单,流程短,适合内部工厂间调拨;
- SD 功能:走销售订单和出货单,需要维护工厂的装运数据、装运点和路线,流程长,但能和外部客户发货逻辑统一。
我的建议是内部调拨优先 MM 功能,只有涉及对外交付或者需要出货单做运输跟踪时才上 SD。切换方式的核心就是 4.2 里那个“一步转储”勾选和工厂客户字段的组合,改之前先在测试机验证,别在生产上直接动。
5. 避坑与排查:库存调拨最常见的五类翻车
这一章是我自己踩过、也帮别人收拾过的五类问题,每条按“现象—原因—解决”写。库存调拨的坑大多不报错,只在盘点时露头,所以排查时不要只看前台提示,要顺着移动类型和后台配置一起查。
5.1 313 发了 315 没收,在途库存长期挂账
现象:MMBE 里某物料在途库存一直有数,接收库存地不增加,仓库说货已经到了。
原因:只做了 313 发货,315 收货没做或做失败。二步转储的在途库存不会自动清理,必须手工参照 313 的物料凭证过 315。
解决:用 MB5T 或 MMBE 定位在途数量和对应的 313 凭证,再用 MIGO 参照该物料凭证做 315 收货。如果 313 本身做错了(数量、库存地点填错),先冲销 313,再重新发货,不要在错误的 313 上直接 315。
5.2 311 过账报“库存地点不存在”
现象:MB1B 311 保存时提示目标库存地点在工厂下不存在。
原因:OX09 里没有在目标工厂下创建该库存地点,或者工厂填错。
解决:MM03 查物料所在工厂,去 OX09 补建库存地点后重试。注意同一工厂内 311 只需要库存地点存在,跨工厂 301 还需要两边工厂都存在且物料在两边工厂都有主数据。
5.3 工厂间转储后 MRP 需求算错
现象:301 直接转储后,接收工厂的 MRP 需求异常,采购建议跑偏。
原因:MB1B 301 直接转储绕过了转储订单,库存需求传递没走 MRP 正常路径。
解决:停止用 301 做常规工厂间转储,改用转储订单(NB/UB)方式。已经用 301 转错的,需要在 MRP 运行前用 MRP 区域重算,或者由计划员手工调整需求。这条是原文里反复强调的,别图省事。
5.4 转储订单收货后生成了计划外的出货单
现象:工厂间转储保存后多出一张出货单,流程卡在发货环节。
原因:4.2 里“定义工厂的装运数据”中工厂客户填了值,“一步转储”未勾选,系统按 SD 方式处理。
解决:确认业务是否需要 SD 方式。不需要就把工厂客户清空、勾选一步转储,重新测试;需要就走完整出货流程。改配置前先看已有转储订单是否已产生出货单,避免历史单据卡住。
5.5 344/343 状态转换后库存对不上
现象:非限制转冻结用 344 后,冻结库存为 0 或数字不符;343 反向转回时数量异常。
原因:344 是非限制到冻结,343 是冻结到非限制,两者方向搞反,或者数量填成了全部库存而非部分。
解决:先用 MMBE 确认物料当前的非限制、冻结、在途三类库存,再决定用 344 还是 343。部分冻结时数量按实际填,不要默认带出全部库存。原文举例的“冻结库为 0”就是方向或数量填错的典型表现。
6. 装完怎么验证:一条从过账到报表的闭环检查
配置和过账都做完,别急着说“跑通了”。库存调拨的验证要做成闭环:前台过账—在途可见—报表对平—后台配置生效,四步都过才算数。我一般按下面这个顺序走一遍,全程在测试客户端完成,用一套专门的验证物料,避免污染真实库存。
第一步,用 311 做一次同工厂库存地转储,数量取小值比如 10 个。保存后立刻 MB52 查两个库存地点,确认一减一增、总数不变。再用 MMBE 确认没有在途残留。这一步验证的是一步转储和库存地点主数据。
第二步,用 313 发 10 个、315 收 6 个,故意留 4 个在途。MMBE 查同一工厂在途库存应为 4,MB52 查接收库存地只增加了 6。然后用 MB1B 315 或 MIGO 参照 313 凭证把剩余 4 个收掉,再查在途归零。这一步验证二步转储和在途库存的可见性,也是最容易出问题的一环。
第三步,跨工厂验证。先在测试环境建好转储订单(NB),用 351 发货,确认不生成出货单;再把“定义工厂的装运数据”里的工厂客户填上、取消一步转储勾选,新建一单,确认生成出货单。两次对比就能看出 MM 与 SD 方式的差别。跨工厂在途用 MB5T 查,别用 MB52。
第四步,状态转换验证。选一个物料做 344 非限制转冻结,数量填 5,MMBE 确认冻结库存为 5、非限制减少 5;再用 343 转回,确认数字还原。这一步专治“方向搞反”。
第五步,后台配置回归。OMJJ 里逐个确认 311、313、315、301、303、305、309、344、343 都处于激活状态;OMWB 确认科目确定无报错;SPRO 里查转储订单凭证类型和装运数据是否与测试结果一致。全部对齐后,这套环境才算真的装完。
| 验证项 | 事务码 | 通过标准 |
|---|---|---|
| 一步转储 | MB1B 311 + MB52 | 两边一减一增,总数不变 |
| 二步转储在途 | MB1B 313 + MMBE | 在途数量 = 发货 - 已收货 |
| 跨工厂在途 | MB1B 303 + MB5T | MB5T 可见在途,305 后归零 |
| 状态转换 | MB1B 344 / 343 + MMBE | 冻结与非限制数量互转正确 |
| 后台配置 | OMJJ / OMWB / SPRO | 移动类型激活,凭证类型与装运数据匹配 |
这套验证做完,再让仓库同事用真实业务单据跑一遍,比什么文档都管用。从那以后我每次配完库存调拨,都强制走一遍 313 留在途再 315 收掉的闭环,不看到 MMBE 里在途归零绝不签字。希望帮到你。
本文还有配套的精品资源,点击获取