简介:SAP WM配置详解文档是一份面向SAP实施顾问、MM/WM模块顾问及仓库管理人员的完整配置参考,系统梳理了仓库管理中主数据、存储策略与作业活动三大层面的配置要点。内容覆盖仓库号控制参数、编号范围、存储类型与存储段定义、存储箱结构,以及固定货位、开放存储、托盘、FIFO、LIFO等策略设定,并包含活动配置、移动类型及自动补货说明。文档以章节式目录逐项展开,每个配置步骤均描述配置目的与操作要点,可直接用于项目配置蓝图设计、上线前自查或作为内部培训辅助材料。资源包共包含1个doc文件,大小约572KB,并保留版本记录与密件标识,便于追溯和按模块查阅。已有789人学习下载,适合正在实施SAP WM或需要优化仓库流程控制的顾问参考。
1. 开始配置 SAP WM 之前:先把 D01 仓库的地基画对
SAP WM(Warehouse Management)一直是 MM 模块落地时最容易被低估的一环。见过不少项目,物料账跑得顺,一到仓库执行层面就开始翻车:收货找不到仓位、TO 单创建出来库位是空的、盘盈亏永远对不上——追根溯源,十有八九不是业务问题,而是 WM 的配置在主数据阶段就埋了雷。这份 WM Configuration Documentation 最值钱的地方,是它把仓库号 D01 从控制参数到搜索策略的完整配置路径列成了一张 26 页的落地清单。
这篇文章针对的是正准备做 WM 配置、或者已经在 SPRO 里调了半天存储类型的实施顾问和开发人员。我会按配置顺序拆开讲:主数据怎么建、编号范围怎么给、存储类型和存储箱结构怎么设计、搜索策略怎么激活,最后用一套验证方法确认配置真的能跑通。看完你应该能照着 D01 这套思路,独立完成一次 WM 基础配置,而不是被 SPRO 的节点迷宫绕晕。
2. 主数据配置:仓库号、编号范围、存储类型的三板斧
2.1 仓库号控制参数:SPRO 里最容易被跳过的起点
WM 配置的起点在 Materials Management -> Warehouse Management -> Master Data -> Define control parameters for warehouse number,事务代码 SPRO。这个节点直接决定了整个仓库号的行为模式,不是简单填个名字就完事。D01 仓库号的关键参数我整理如下:
| 参数 | D01 配置值 | 说明 |
|---|---|---|
| Warehouse number | D01 | 仓库号命名 |
| Region Codes | —— | 区域码,通常留空 |
| Unit of weight | KG | 重量单位 |
| 1st default Uom | L | 第一默认单位 |
| 2nd default Uom | A | 第二默认单位 |
| Dec. warehouse active | 勾选 | 启用小数仓库库存 |
| SU management active | 勾选 | 启用存储单位管理 |
| Blocking method | 按需 | 仓位冻结方式 |
| Partial Picking | 按需 | 是否允许部分拣配 |
这里的 Blocking method 值得多说一句。D01 场景选择的是按需配置,实际项目中我一般建议先明确仓库是否要做跨仓位冻结——如果启用,后续做库存转移时会多一层检查逻辑,遇到盘点差异时处理路径完全不一样。
EC09 复制模板这一步是整套配置的地基。文档里明确写了 Use EC09 copy template 0001 to D001 at first,意思是配置 D01 之前,先找一套标准模板复制过来做底子,再在它上面改。我自己的血泪经验:跳过这步直接手工建仓库号,后面存储类型、搜索策略的激活界面会少掉一堆系统预置的参照条目,排查起来非常难受。
2.2 编号范围:OMLW 里的四组号码不能共用一段区间
编号范围配置在 Materials Management -> Warehouse Management -> Master Data -> Define number ranges,事务代码 OMLW。WM 里有四类对象需要独立编号:Transfer Requirement(TR)、Transfer Order(TO)、Quant、Posting Change Notice。D01 的实际分配如下:
Assignment 分配关系
| 对象 | WhQuant | NR-T0 | NR-TR | Posting Change | RefNo | SU |
|---|---|---|---|---|---|---|
| D01 | 01 | 01 | 01 | 01 | 01 | 01 |
Intervals 编号区间
| Interval No | From | To | Ext |
|---|---|---|---|
| Transfer Requirement | 3000000001 | 3999999999 | 是 |
| Transfer Order | 3000000001 | 3999999999 | 是 |
| Quant | 3000000001 | 3999999999 | 是 |
| Posting Change Notice | 3000000001 | 3999999999 | 是 |
注意这里四个对象的号段完全一致——看似省事,实际上是不同对象类型共用同一段数字区间。SAP 在处理时会按对象类型自动区分,所以不会真冲突,但有个隐患:如果外部系统接 SMART 接口,传 TR 号和 TO 号时如果没带对象类型前缀,很容易传串。我在集成测试阶段就遇到过这个问题,后面是靠接口映射表里强制拼上前缀解决的。
Number range 的 Ext 标识全部打勾,意味着外部给号是允许的。这个配置在 D01 场景下没问题,但如果你后续要接 ERP 外围的 WCS(仓库控制系统),外部给号会省去很多来回同步的麻烦;反之如果仓库操作全靠 SAP 内部触发,建议把 Ext 关掉,避免外部系统乱写号段把序列搞乱。
2.3 存储类型:ZM1 收货暂存区、ZM2 拣货优先区的角色差异
存储类型定义在 SPRO -> Define storage type,事务代码还是 SPRO。D01 的存储类型设计非常典型,不是按物理库区分,而是按流程角色分:
| 存储类型 | 名称 | SU管理 | 上架策略 | 下架策略 |
|---|---|---|---|---|
| 902 | GR Area From Vendor | 激活 | —— | —— |
| 911 | GI Area for Cost Center | 激活 | —— | —— |
| 914 | GI Area Production | 激活 | —— | —— |
| 916 | Shipping Area Deliveries | 激活 | —— | —— |
| 921 | Stock Transfers (StLoc) | 激活 | —— | —— |
| 922 | Posting Change Area | 激活 | —— | —— |
| 998 | Init. entry of stock bal. | 激活 | —— | —— |
| 999 | Differences | 激活 | —— | —— |
| ZM1 | MKC Storage Area | 激活 | P | F |
| ZM2 | MKC Issue Precedence Area | 激活 | P | F |
902 到 999 是系统标准的中间区域,ZM1、ZM2 才是真正干活的仓储区域。P 和 F 分别是 Stock placement strategy 和 Stock removal strategy 的策略代号,D01 里 ZM1 和 ZM2 都指向 P/F 策略,说明收货和发货的主区域走的是同一套查找逻辑。
这里要特别留意 998 和 999。998 用于初始化库存余额,999 用于差异过账,这两个类型平时业务单据不会直接命中,但盘点和期初导入时一定会用到。如果这两个类型的 Storage type indicator 配错,期初导入时系统会把差异库存当成正常库存,导致 Quant 状态混乱。我第一次配置时漏掉了 999 的策略指示器,结果模拟盘点时差异库存全部流入可用库存,账面上凭空多出一批货。
2.4 存储段:ZM1 下拆三个区,ZM2 一个区覆盖全部
存储段在 SPRO -> Define storage sections 配置,D01 的划分如下:
| 仓库号 | 存储类型 | 存储段 | 区域名 |
|---|---|---|---|
| D01 | ZM1 | 001 | Normal Bin Area |
| D01 | ZM1 | 002 | Interim Bin Area |
| D01 | ZM1 | 003 | Warehouse Working Area |
| D01 | ZM2 | 001 | Total Area |
这种设计把 ZM1 拆成了正常存储、临时存储、作业区三块,ZM2 则只保留一个 Total Area。临时存储段的典型用途是收货后待上架的中转位,作业区则对应拣货工作台附近的缓存位。
存储段的划分直接决定后续搜索策略的粒度。如果你只需要在存储类型级别控制存放位置,那不拆段也行;但 D01 这种拆法,好处是出库时可以只搜 Normal Bin Area,把临时段的库存排除在拣货范围之外,避免仓库工人跑到中转位去拣货。这个设计在文档里只有一张表,但实际项目里我一般会把"哪些存储段参与拣货、哪些只参与收货缓存"做成一张独立的段用途清单,否则配置评审时业务方根本看不出差异。
3. 存储箱结构与存储单位类型:把仓位编码规则一次定对
3.1 存储箱类型:B1 中间箱、P1 换包装区的设计意图
存储箱类型定义路径是 SPRO -> Storage bins -> Define storage bin types。D01 定义了四个标准类型:
| 存储类型 | 箱类型 | 描述 |
|---|---|---|
| D01 | D01 | Normal Bin Type |
| D01 | E1 | Interim Bin |
| D01 | B1 | Repacking Bin Area |
| D01 | P1 | Picking Bin Area |
Normal Bin 是普通货位,Interim Bin 是收货暂存位,Repacking Bin Area 是拆箱/换包装区。注意 Repacking 和 Picking 是不同的箱类型,前者服务于换包装作业,后者服务于拣货作业——如果业务上拆箱和拣货在同一区域完成,可以合并,但 D01 把它们分开了。
这个设计的实际意义在于:存储箱类型会参与到上架和下架的搜索策略里。配置搜索策略时,系统可以根据箱类型过滤仓位,比如 P1 类型的仓位在收货上架时可以被跳过,避免把货放到拣货区然后又要人工倒腾。我在项目里见过没配箱类型搜索的仓库,系统把收货货物直接放到拣货口,TO 单打印出来执行人一脸懵。
3.2 存储箱结构:LS10 模板的字符位如何拆分
存储箱结构定义在 SPRO -> Storage bins -> Define storage bin structure,事务代码 LS10。D01 的仓位模板拆法很典型:
| 存储类型 | 序号 | 模板 | 结构 | 起始 | 结束 | 增量 |
|---|---|---|---|---|---|---|
| ZM1 | 0001 | AANNNNCCCC | ABCCDD | AA0101 | AB0302 | 110101 |
| ZM1 | 0002 | AANNNNCCCC | ABCCDD | BA0101 | BD0302 | 110101 |
| ZM1 | 0003 | AANNNNCCCC | ABCCDD | CA0101 | CC0302 | 110101 |
| ZM1 | 0004 | AANNNNCCCC | ABCCDD | DA0101 | DB0302 | 110101 |
| ZM1 | 0005 | AANNNNCCCC | ABCCDD | PA0101 | PB0302 | 110101 |
| ZM1 | 0006 | CNNCCCCCCC | AAF01F99 | —— | —— | 01 |
| ZM1 | 0007 | AAACCCCCCC | ABCJGQJGQ | —— | —— | 111 |
| ZM2 | 0001 | CNNCCCCCCC | AAX01X10 | —— | —— | 01 |
以 ZM1 的 0001 号模板 AANNNNCCCC 为例,结构 ABCCDD 的含义是:
- 前两位 A(字母区):通道或巷道标识
- 中间四位 NNNN(数字区):货架列号
- 后面 CCCC(字母区):货位层次
模板中 A、N、C 分别代表字母字符位、数字字符位、字母字符位。增量值 110101 的含义是:第一位字母每次递增 1(A->B->C),第二位数字每次递增 1,以此类推。这样系统在生成仓位时可以自动从 AA0101 一直推到 AB0302,不需要手工一条条建 bin。
LS10 这里有个容易搞错的地方:模板里的 N 在 SAP 里代表数字位,C 代表字母位,但这个字母位在生成仓位时是支持滚动的——从 A 滚到 Z 后继续 AA、AB。D01 里 ZM1 的前五个模板覆盖了不同的巷道起始字母(AA、BA、CA、DA、PA),本质上是用字母段把立体库的巷道直接编进了仓位号。
至于 0006 和 0007 两个模板,结构串比较特殊,属于自动化库或者特殊区域。0006 的模板 CNNCCCCCCC 用 AAF01F99 作起止值,看起来像是从 F01 到 F99 的区间生成;0007 用 ABCJGQJGQ 做结构,字母位含 J、G、Q 这种非常规字符,这种一般用于高位货架的层位编码。复制这套模板到自己的项目时,务必对照实际的物理货架布局确认起止范围,别把 F01~F99 直接用在只有 20 列的货架上——生成出大量空仓位,后面查询和报表会被干扰。
3.3 存储单位类型与容量占用:S1 默认单位
存储单位类型定义路径为 SPRO -> Material -> Define storage unit types。D01 只定义了一个单位:
| 存储类型 | SUT | 名称 | 容量使用 |
|---|---|---|---|
| D01 | S1 | Normal SU | 1 |
S1 对应标准托盘或标准周转箱。容量使用填 1 意味着一个 S1 占一个仓位容量单位。如果仓库里同时有大托盘、小周转箱,建议按实际体积比例填容量占用,比如大托盘占 2、小箱占 0.5,否则系统在做 Capacity Check 时会把一个仓位塞满为止,容易出现超容量存放。
这里有一个隐性的前后依赖:存储箱类型、存储单位类型、存储箱结构三者必须联动。先定结构(仓位编码规则),再定箱类型(哪些仓位是普通位、哪些是暂存位),最后把存储单位类型分配到存储箱类型和存储类型。D01 在后面的章节里做了明确的分配(S1 分配给 E1、B1、P1,S1 分配给 ZM1、ZM2),顺序不能反。
4. 策略配置:搜索激活是 WM 自动化的核心开关
4.1 存储类型搜索:OMLY 里按移动类型引用定义去向
存储类型搜索激活路径是 Materials Management -> Warehouse Management -> Strategies -> Activate storage type search,事务代码 OMLY。D01 的配置分成两部分:策略定义和移动类型引用。
策略定义里根据S、S 存储类型、WP 引用编号(Ref)的不同组合,把不同场景的搜索顺序钉死。比如 D01 下 200 系列编号,对应的是收货暂存(ZM2)与正式存储区(ZM1)的先后顺序——系统收货后先找 ZM2 暂存,再由后续上架 TO 转到 ZM1。编号 200、K00、Q00 这些不同搜索编号,分别服务于不同移动类型的默认去向。
移动类型引用的范围很长,但核心逻辑是给每一个移动类型分配合适的搜索策略编号。几个常考移动类型的取值:
| 移动类型 | 含义 | 引用编号 |
|---|---|---|
| 101 | GR for purchase order | 101 |
| 103 | GR production order | 103 |
| 201 | GI to cost center | 201 |
| 261 | GI to production order | 261 |
| 301 | Stock transfer plant to plant | 301 |
| 311 | Stock transfer storage location | 311 |
| 501 | GR without purchase order | 501 |
| 521 | GR from production | 521 |
| 601 | GI to delivery note | 601 |
| 561 | Initial entry of stock | 561 |
| 711/712 | Differences negative/positive | 711/712 |
实际配置时,我一般建议 101、501、521 这类收货移动类型走同一个上架搜索编号,601 这类发货移动类型走下架搜索编号。D01 里还用 999 做取消类移动类型的引用编号——比如 102(取消 101 的收货)指向 999,这个细节很容易被忽略,但取消操作如果没配搜索策略,系统在处理反向过账时会直接报"找不到存储类型"。
这里再补充一个实战细节:WM 的 Storage type search 是按移动类型逐条配置的,但同一种业务场景可能对应多个移动类型。例如 319 在 D01 里同时出现在 Replenishment for Production 和 Line replenishment 的映射里,这就是同一个补货流程的不同触发点。配置时如果漏了后一个,产线补货会走到默认策略,结果完全不一样。
4.2 存储段和存储箱类型搜索:OMLZ 与 OMM1 的粒度控制
存储段搜索激活路径是 Strategies -> Activate storage section search,事务代码 OMLZ。D01 里 ZM1 对应的存储段 001(Normal Bin Area)被激活,搜索类别和 WPC 参数保持默认。这个配置的业务含义是:系统做上架搜索时,只在 Normal Bin Area 里找仓位,自动跳过 Interim Bin Area 和 Warehouse Working Area。
存储箱类型搜索激活路径是 Strategies -> Activate storage bin type search,事务代码 OMM1。D01 在 2.3.x 小节里把存储箱类型 D01、E1、B1、P1 全部用于搜索,并且做了两轮分配:
- Assign Storage unit types to Storage bin type:把 S1 分配给 E1、B1、P1
- Assign Storage unit types to Storage type:把 S1 分配给 ZM1、ZM2
第一轮分配决定了某种存储单位可用的箱类型范围,第二轮决定了可用的存储类型范围。这两轮分配是 WM 自动上架的核心约束:系统在搜索仓位时,先按移动类型找到存储类型,再按存储单位匹配箱类型,最后在匹配的箱类型集合里按仓位结构搜索具体 bin。
这个环节我见过最多的翻车是只配了 Storage bin type search,没配 Storage section search,导致系统在多个存储段之间随机挑位。表面看仓位能生成,但上架到 Interim Bin Area 的货物不会自动参与下架搜索,时间一长临时段的库存变成死库存。所以 OMLZ 和 OMM1 必须成对激活,缺一不可。
4.3 上架与下架策略:FIFO、LIFO、固定仓位到底怎么选
D01 在策略章节里大量使用了 See 1.3 or refer directly to customising 的写法,意思是这些策略不在文档里重复列出,直接沿用存储类型定义中的策略字段。这里真正需要注意的是策略类型的理解。
固定仓位策略(Fixed bins):适用于长期绑定 SKU 的货位,比如某些大件或高价值物料固定在指定仓位。D01 的场景里,固定仓位不是全局启用的,而是通过部分物料的仓位绑定来实现。
开放存储策略(Open storage):跟固定仓位相反,只要仓位为空或容量足够,系统可以在整个存储段内自由分配。这是 D01 里 ZM1 的主要工作方式。
现有库存追加策略(Addition to existing stock):允许新收货的物料加到已有同批次库存的仓位里。如果这个策略没配,系统会把同一 SKU 的货分散到多个仓位,等出库时才发现一个个仓位都是半托,拣货效率极低。
FIFO 策略:按入库时间先后出库。注意 D01 里 FIFO 和 "stringent FIFO"是两个不同策略,后者不仅按入库时间,还要求库位顺序必须严格遵守时间排序,连同日同批入库的物料也要按仓位号顺序出库。这种严格模式适合保质期敏感的物料,但代价是 TO 单生成时间会变长。
LIFO 策略:后进先出,适用于非保质期敏感的物料或某些特定的翻转场景。部分托盘数量策略(Partial pallet quantity):控制当一个仓位内的库存不足以满足出库需求时,是否允许拆托。如果关闭这个策略,系统只会挑选整托仓位,可能出现有库存但拣不出的情况。
配置策略时最重要的原则是:上架策略和下架策略不是同一个概念。上架策略决定货物放到哪个仓位,下架策略决定从哪个仓位取货。D01 里 ZM1 的上架和下架都指向 P/F,但如果业务上有单独的整托出库区和拆零拣货区,就一定要拆成两套策略,否则拣货员会频繁在整托区拆零,打乱整个库位规划。
5. 配置避坑:WM 实施里最常踩的五个坑
5.1 坑一:跳过 EC09 模板复制,导致搜索策略界面缺系统条目
现象:手工创建仓库号后,进入 OMLY 配置存储类型搜索,界面里没有系统预置的移动类型引用,每个移动类型都要手工建。
原因:EC09 copy template 0001 to D001 不仅复制了仓库号的基础参数,还把所有系统预置的移动类型引用、搜索策略序号一起带过来。跳过这一步,相当于从零开始,SAP 不会有任何默认参考。
解决:先执行 EC09 复制模板,再检查 OMLY 里移动类型引用完整性。文档明确写了 Use EC09 copy template 0001 to D001 at first,这一步不是建议,是强制前提。
5.2 坑二:存储段搜索未激活,临时段库存变成死库存
现象:上架 TO 单正常生成,但部分物料被放到 Interim Bin Area,之后这些物料再也搜不到,下架流程一直跳过它们。
原因:OMLZ 里存储段搜索没激活,系统在存储类型级别搜索时,把 ZM1 下所有存储段都当成可搜索区域,包括临时段。临时段的设计目的是收货缓存,不应参与常规下架,但系统并不知道这一点。
解决:按 D01 的配置,在 OMLZ 里激活 ZM1 下的 001(Normal Bin Area)存储段搜索,并确认 002、003 段没有参与搜索。改完后重新生成 TO 单,临时段的库存会被正确排除。
5.3 坑三:移动类型 999 引用丢失,取消收货直接报错
现象:执行 MBST 取消物料收货时,系统报错“无法确定存储类型”,或生成的冲销 TO 单没有仓位信息。
原因:OMLY 的移动类型引用里漏配了 999。101 收货有引用,对应的取消移动类型 102、以及通用取消 999 没有引用,导致系统反向过账时找不到去向。
解决:在 OMLY 里把 999 分配给所有取消类移动类型。D01 的引用表里 999 出现了很多次——102、202、256、262、302、312、322、332、452、502、522、552、562、602、856、964,这些全部指向 999,不要只配主移动类型忘了对应的冲销类型。
5.4 坑四:存储箱结构起止范围配太宽,生成大量空仓位
现象:LS10 配置完成后,用 LS11 批量生成仓位,结果仓位数量远超实际货架数,报表里全是空位。
原因:模板里的起止值没有按实际物理货架收敛。比如 ZM1 的 0005 号模板从 PA0101 到 PB0302,如果仓库实际只有 P 巷道 1 排,就会多出一倍仓位。
解决:配置 LS10 前,先拿物理货架图纸画出巷道、列、层的最大最小值,再对应填起止值。仓位编码规则宁缺毋滥,仓位不够可以后续手工补,仓位太多清理起来非常麻烦。
5.5 坑五:SU 管理激活后没做容量检查,仓位超量存放
现象:WM 库存显示仓位占用率超过 100%,甚至同一仓位出现多个不同物料直接摞放。
原因:仓库号控制参数里 SU management active 勾选了,但存储单位类型 S1 的容量使用没配,或者 Capacity Check 逻辑没在仓位里体现。系统认为一个仓位可以无限放。
解决:确认 S1 的 Capacity usage 为 1,存储箱结构里每个 bin 的最大容量按实际物理容量设好。D01 的场景比较简单,但如果你的仓库有大小托盘混用,一定要按体积比例把容量占用填准确。
6. 验证配置:用一个 101 收货跑完全链路再放行
配置做得再完整,不跑一个实际的仓储流程,你永远不知道主数据、策略、编号范围之间是否真的咬合。D01 文档里没有专门写验证章节,但作为实施习惯,我每次做完 WM 配置都会强制走一遍下面的验证链路。
第一步,先做最基础的号段检查。进入事务代码 OMLW,查看 TR、TO、Quant、Posting Change 四类对象的外部给号是否打开。然后执行一个 101 收货过账,用 MM 物料凭证生成一个 TR 号,确认号段落在 3000000001~3999999999 区间。如果 TR 号是空的或者落在其他区间,说明编号范围分配 (Assignment) 没绑定到正确对象上,后续所有 WM 单据都会有问题。
第二步,验证存储类型搜索。手工创建一个 TR,然后进事务代码 LT03 或直接由系统自动创建 TO。观察 TO 单的仓位建议:如果收货移动类型 101 对应的是上架到 ZM1 的 Normal Bin Area,说明 OMLY 里存储类型搜索的引用编号生效了。如果 TO 的仓位落在 Interim Bin Area,不要急着改配置,先回 OMLZ 看一眼存储段搜索是否只激活了 001 段。
第三步,验证下架流程。做一个 201 发货或 601 发货单,生成拣货 TO 单,检查系统是否优先从 ZM1 的 Normal Bin Area 拣货,而不是跑到 ZM2 或者临时段。同时观察 FIFO 策略是否生效:如果同一物料有两个批次,系统应该优先推荐先入库的批次仓位。
第四步,验证存储单位类型分配。在 WM 屏幕上查看 S1 存储单位对应的仓位类型,确认当前仓位允许 S1 存放。这个步骤很多人会漏,但实际上常见错误是存储单位类型分配了,但存储箱类型分配没做,导致系统能找到仓位但不允许存放。
第五步,也是最后一步:做一次盘点差异。用 711/712 移动类型做盘盈盘亏过账,检查 999 存储类型是否被正确引用,差异库存是否进入 999 区域,而不是混入 ZM1 的正常库存。这一步能同时验证 OMLY 里的移动类型引用、999 存储类型配置、以及存储段搜索是否把 999 区域正确隔离。
上面五步走完,WM 配置的主链路才算真正验证通过。不夸张地说,这套验证流程我每次做新项目都强制走一遍,不为别的——上次跳过第二步直接上量,结果 100 多个 TO 单全部落到临时段,仓库工人抬了一整天的货,这个教训让我后来再也不敢省略链路验证。希望这些配置方法和验证习惯能帮你在 WM 实施路上少踩几个坑,跑通一次之后,后面的优化就有底气了。
本文还有配套的精品资源,点击获取