☰
SAP WM 配置核心:仓库号、存储类型与搜索策略详解
2026/10/27 14:02:02 网站建设 项目流程

简介:面向SAP实施顾问与仓储管理人员的一份WM模块配置实操文档,围绕仓库主数据与存取策略两大主线,帮助读者理解如何通过参数设置优化物料流与库存控制。内容从仓库号控制参数、编号范围、存储类型与存储段、仓位类型及结构等基础数据入手,再延伸至存储类型搜索、固定仓位、开放存储、现有库存追加、空仓、托盘及先进先出等策略的激活与定义,并涉及危险品与作业活动相关配置,目录层次清晰,便于按章节对照系统逐步落地。资源包共1个doc文件,约572KB,属于结构完整的配置说明文档,适合作为项目实施或日常运维时的查阅手册。已有789人学习下载,对需要系统梳理WM配置逻辑、减少上线错误并提升库存可见性的读者具有较高参考价值。

1. 仓库号不是“建个仓库”:SAP WM 配置的第一层抽象到底在解决什么

很多人第一次打开 SAP WM 的配置树,会觉得它像一张被摊开的仓库平面图:仓库号、存储类型、存储段、仓位、存储单位类型,一层套一层。但真正反直觉的地方在于,SAP WM 里的“仓库”首先不是物理空间,而是一套编号与策略的命名空间。你配的不是货架,而是系统在收货、上架、拣配时用来做决策的那套坐标系。这份配置文档从Define control parameters for warehouse number开始,到Activate storage type search结束,本质上是在回答一个问题:当一张物料凭证进入 WM 时,系统凭什么知道该把它放到哪个仓位、又从哪个仓位把它取出来。搞懂这套抽象,你才能理解为什么 SAP WM 的配置顺序不能乱,也才能看懂后面那些搜索策略为什么能 work。

2. 主数据层:仓库号、存储类型、存储段与仓位如何构成寻址坐标系

2.1 仓库号控制参数:一个编号背后挂着一整套行为开关

配置文档的第一站是Define control parameters for warehouse number,事务码 SPRO,路径落在Materials Management -> Warehouse Management -> Master Data。文档里给出的系统方案是仓库号D01,重量单位KG,第一默认单位L,第二默认单位A,SU management active为Yes,Blocking method为B,Partial Picking与Capacity Check也出现在同一张参数表里。这些字段看起来零散,实际上它们决定了这个仓库号在后续所有业务里的“性格”。

SU management active打开,意味着这个仓库号启用了存储单位管理。存储单位(Storage Unit)是 WM 里对“一托、一箱”这类搬运单元的抽象,它和物料库存是分开的两层账。打开 SU 管理之后,系统在收货时不仅要知道物料进了多少,还要知道这些物料是以什么搬运单元形态存在的。Blocking method B则决定了仓位被冻结时的粒度,是冻结整个存储类型还是冻结单个仓位,这直接影响后续盘点、质检冻结时的操作范围。Partial Picking允许对同一个存储单位做部分拣配,Capacity Check则让系统在上架时检查目标仓位是否还有容量余量。

常见的实现思路是,把这些控制参数理解成仓库号的“运行时环境变量”。它们不直接产生单据,但每一个后续的搜索、上架、拣配动作都会读取它们。所以配置顺序上,仓库号控制参数必须最先落地,否则后面定义存储类型时,SU 管理是否激活这个前提就是悬空的。文档里还提到Use EC09 copy template 0001 to D001 at first,这是典型的复制参考仓库号再改的做法,好处是编号范围、存储类型这些基础结构可以继承,坏处是如果模板里带了不需要的开关,后面排查问题时很容易被这些“继承来的默认值”带偏。

2.2 编号范围:为什么 TR、TO、Quant 要各自独立编号

Define number ranges这一节,事务码 OMLW,文档把编号对象拆成四类:WhQuant、NR-TO、NR-TR、Posting Change,并给出了Assignment和Intervals两张表。分配表里D01对应01,区间表里Transfer requirement、Transfer Order、Quant、Posting change notice都从3000000001到3999999999。

这里的设计动机值得说透。WM 里的核心单据有三类:转移需求(TR)、转移单(TO)、Quant。TR 是“需要搬”的意图,TO 是“具体怎么搬”的指令,Quant 是仓位上的库存实例。三者生命周期不同,TR 可能被合并、被取消,TO 可能被确认、被拆分,Quant 则跟着仓位走。如果共用一个编号范围,单据追溯时会互相污染,出问题时你没法从单号快速判断这是哪一层对象。独立编号范围让每一层都有自己的序列,日志和排查时单号本身就是线索。

文档里Assignment表还出现了SU和VA两列,这对应存储单位和变式设置的编号分配。区间表统一用3000000001起步,是一个很典型的“给前面留空间”的做法:低段留给测试或历史数据,生产从高位起,避免和旧系统或模板仓库号的号段撞车。我一般会这么理解,编号范围配置不是形式主义,它是后面所有单据流可观测性的地基,配错了不会立刻报错,但会在某次冲销或重打时让你翻车。

2.3 存储类型与存储段:逻辑分区先于物理仓位

Define storage type这一节给出了D01下的存储类型清单:902GR Area From Vendor、911GI Area for Cost Center、914GI Area Production、916Shipping Area Deliveries、921Stock Transfers (StLoc)、922Posting Change Area、998Init. entry of stock bal.、999Differences,以及ZM1MKC Storage Area、ZM2MKC Issue Precedence Area。表格里SU mgmt active对ZM1、ZM2标了ACTIVE,Stock plcmt strategy和Stock removal strategy都填了PF。

这些 9xx 开头的存储类型是 SAP WM 里的“中间区域”或“功能区域”,它们不存放长期库存,而是承接收货、发货、差异、盘点初始化这些过渡状态。比如902是收货暂存区,货物从供应商进来先落这里,再通过上架策略转到实际存储类型;999是差异区,盘点盈亏在正式调整前先在这里体现。ZM1、ZM2则是业务自定义的实际存储区域,PF作为上架和拣配策略代码,指向后面第 2 章要展开的策略搜索。

Define storage sections把存储类型再往下切一层:D01下ZM1有001Normal Bin Area、002Interim Bin Area、003Warehouse Working Area,ZM2有001Total Area。存储段的意义在于,同一个存储类型内部可能因为物理位置、作业动线、设备可达性不同而需要区别对待。搜索策略可以先选存储类型,再选存储段,最后选仓位类型,这个逐层收窄的过程就是 WM 寻址的核心。

Define storage bin structure用事务码 LS10,给出了仓位编码模板,比如AANNNNCCCC配合起止值和增量。仓位号不是随便起的字符串,它是有结构的:前两位可能是通道,中间是排/列,后面是层。结构模板决定了系统如何批量生成仓位,也决定了仓位排序和搜索时的自然顺序。文档里D01 ZM1001到ZM1007、ZM2001各自有不同的模板,说明不同存储段用了不同的编码规则。这一步如果和实际货架编码对不上,后面搜索策略选出来的仓位在物理世界里可能根本找不到,这是血泪经验里最常见的一类翻车。

2.4 存储单位类型与仓位类型:搬运单元和容器要分开建模

Define storage unit types给出D01下S1Normal SU,Capacity usage为1。Define storage bin types给出D01下D01Normal Bin Type、E1Interim Bin、B1Repacking Bin Area、P1。然后在2.3.3 Assign Storage unit types to Storage bin type里,把S1分配给E1、B1、P1,在2.3.4里把S1分配给ZM1、ZM2。

这里有一个容易混淆的点:存储单位类型描述的是“搬的东西”,仓位类型描述的是“放的地方”。S1作为 Normal SU,容量占用为 1,代表一个标准托盘或标准箱。仓位类型D01、E1、B1、P1则是对仓位物理形态的分类。把 SU 类型分配给仓位类型,等于告诉系统“这种搬运单元可以放进这类仓位”。这个分配关系是后面仓位类型搜索(Activate storage bin type search,事务码 OMM1)的前提。如果分配缺失,搜索时系统找不到匹配的仓位类型,上架就会失败或者落到非预期区域。

文档里2.3.4 Assign Storage unit types to Storage bin types的表格把ZM1、ZM2都分配给S1,说明这两个实际存储区域接受标准存储单位。而E1、B1、P1这些中间/翻包区域也接受S1,意味着同一套搬运单元可以在不同功能区域之间流转。这种建模方式的好处是,搬运单元和容器解耦,后面换包装规格时只需要调整 SU 类型,不用动仓位结构。

3. 策略层:存储类型搜索、存储段搜索与仓位类型搜索如何逐层收窄

3.1 存储类型搜索:移动类型是第一入口

Activate storage type search用事务码 OMLY,文档表格里Wh为D01,ActTy列出现200、2K、2Q、A0、AK、AQ、E0、EK、EQ,Ind列有SS,后面跟着Stor和WP Ref。再往下是一张很长的移动类型引用表:101Goods receipt for pur.or.、103GR production order、201GI to cost center、261GI to production order、301Stock tr.plant st.rem.、311Stock tr.stor.loc.st.rem.、319Replen. for Production、601GI to delivery note、651Returns via delivery doc、911To rework Slocation (Q) 等等。

这张表是 WM 策略搜索的入口。当一张物料凭证产生时,系统先看移动类型,移动类型决定这次业务是收货、发货、转储还是冲销,然后通过ActTy找到对应的搜索标识,再进入存储类型搜索。文档里101对应200,201对应200,261对应200,319对应319,601对应601,911对应911。同一个ActTy可以被多个移动类型复用,比如200同时服务收货和部分发货场景,具体走哪个存储类型还要看后面的搜索顺序。

Stor列和WP Ref列的组合决定了搜索的候选存储类型序列。文档里D01 200 200、D01 2K 00200、D01 2Q 00200、D01 A0 0ZM2ZM1、D01 AK 00ZM1、D01 AQ 00ZM1、D01 E0 0ZM1、D01 EK 00ZM1、D01 EQ 00ZM1。这些字符串不是随便填的,每一位代表搜索顺序中的一个候选,0通常表示跳过或占位。比如A0对应0ZM2ZM1,意味着先找ZM2,再找ZM1;AK对应00ZM1,意味着前两位跳过,直接找ZM1。这种编码方式让搜索顺序可以精确控制,而不需要写代码。

常见的实现思路是,把移动类型到ActTy的映射理解成“业务类型到搜索模板”的路由表。配置时先确定哪些移动类型走哪套搜索模板,再在模板里排候选存储类型的优先级。文档里101收货走200,201发货走200,但两者的Stor序列不同,说明同一个ActTy下还可以按业务细分。这里如果映射错了,最典型的现象是收货落到了发货区,或者拣配从错误的存储类型取货,库存账上看不出问题,但物理动线全乱。

3.2 存储段搜索与仓位类型搜索:在存储类型内部继续收窄

Activate storage section search用事务码 OMLZ,文档表格里Wh为D01,NTy为ZM1,Ssec为0001,Class为002。这一层是在存储类型选定之后,决定用哪个存储段。ZM1下有001Normal Bin Area、002Interim Bin Area、003Warehouse Working Area,搜索时按Ssec的顺序找。Class字段通常和存储段指示器配合,用来做更细的分类匹配。

Activate storage bin type search用事务码 OMM1,文档在2.3.1到2.3.4里把仓位类型、存储单位类型、以及两者的分配关系又列了一遍。这一层是在存储段选定之后,决定用哪种仓位类型。2.3.3把S1分配给E1、B1、P1,2.3.4把S1分配给ZM1、ZM2。搜索时系统会拿当前搬运单元的 SU 类型去匹配允许的仓位类型,再在匹配的仓位里找空位或符合策略的仓位。

这三层搜索的关系是逐层收窄:移动类型 → 存储类型 → 存储段 → 仓位类型 → 具体仓位。每一层都有自己的配置表和搜索顺序,任何一层缺失或顺序错误,最终结果都会偏。文档里2.4 Define Sort Sequenc for Putaways (Cross-line Stock Putaway)用事务码 OMLM,表格里Wh为D01,Ty为ZM1,后面是排序字段。跨行上架排序决定了同一存储类型内多个候选仓位之间的优先级,比如按仓位号升序、按容量降序。这一步是把“候选集合”变成“最终一个”的关键。

3.3 上架与拣配策略:固定仓位、开放存储、追加库存、空仓位、托盘策略

文档第 2 章从2.5到2.17列了一长串策略:Define strategy for fixed bins、Define strategy for open storage、Define strategy for addition to existing stock、Define strategy for empty storage bin、Define strategy for pallets、Define strategy for bulk storage、Define FIFO strategy、Define strategy for "stringent FIFO"、Define LIFO strategy、Define strategy for partial pallet quantity、Define strategy for large/small quantities、Define strategy for expiration date。大部分条目写的是See 1.3 or refer directly to customising, if needed,意思是策略代码在存储类型定义时已经通过Stock plcmt strategy和Stock removal strategy字段指定,这里只是确认或补充参数。

这些策略的机制差异值得拆开看。固定仓位策略(Fixed bins)把物料和仓位做静态绑定,适合周转率稳定、需要固定拣配点的物料,好处是拣配路径可预测,坏处是仓位利用率低。开放存储策略(Open storage)不绑定,系统在候选仓位里按排序找空位,利用率高但拣配路径不固定。追加库存策略(Addition to existing stock)优先找已有同物料库存的仓位,减少碎片化。空仓位策略(Empty storage bin)优先找完全空的仓位,适合需要隔离存放的场景。托盘策略(Pallets)按托盘数量做匹配,FIFO/LIFO 按入库时间或批次时间做排序,严格 FIFO 则不允许跨批次混放。

文档里2.9.1 Define Storage type control、2.9.2 Define Bin Sections、2.9.3 Assign Bin to Storage Unit Types是托盘策略的配套配置。2.11 Develop extensions for Putaway strategies和2.18 Develop extensions for Picking strategies则留了口子:当标准策略不够用时,可以通过开发自定义策略并激活。2.11.1 Develop Strategy和2.11.2 Activate Strategy的写法说明扩展策略需要两步,先实现逻辑,再在配置里挂上去。2.18.1和2.18.2对拣配策略同理。

这里的设计取舍很明显:SAP 把策略做成可配置的搜索序列加可扩展的出口,而不是把所有逻辑写死。标准策略覆盖大多数场景,特殊场景通过开发出口接入。代价是配置项多、依赖关系复杂,好处是业务变化时不用改核心代码。我一般会这么理解,策略层的本质是一个“候选集生成 + 排序 + 取第一个”的管道,每一层配置都在影响候选集和排序规则。

4. 活动层:移动类型、转移需求与自动 TO 创建如何串起单据流

4.1 移动类型与库存转储:业务动作到 WM 指令的翻译层

文档第 4 章ACTIVITIES从4.1 Define requirement categories开始,到4.2 Define Shipment types、4.3 Define movement types、4.4 Define stock transfers and Replenishment control、4.5 Set up autom.TO creation for TRs/post.chge notices、4.6 Confirmation。这一章是把前面的主数据和策略接到实际单据流上。

移动类型在 MM 里定义业务动作,在 WM 里则通过2.1的引用表映射到搜索模板。4.3 Define movement types是对移动类型的补充配置,4.4处理库存转储和补货控制,4.5设置 TR 和过账变更通知的自动 TO 创建。自动 TO 创建是 WM 自动化的关键:当 TR 产生时,系统可以按配置自动生成 TO,不需要人工干预。4.6 Confirmation则处理 TO 确认,确认之后库存才真正从源仓位转到目标仓位。

这条链路的顺序是:物料凭证 → 移动类型 → TR → TO → 确认 → Quant 更新。每一步都有对应的配置和状态。文档里4.1 Define requirement categories的需求类别决定了 TR 的类型和后续处理方式,4.2 Shipment types则和发货场景相关。4.5的自动 TO 创建如果配错,最典型的现象是 TR 堆着不生成 TO,或者生成了 TO 但目标仓位不对。排查时先看移动类型到ActTy的映射,再看存储类型搜索序列,最后看自动创建的开关和条件。

4.2 确认与 Quant:库存可见性的最后一公里

4.6 Confirmation是 TO 确认的配置。TO 确认意味着物理搬运完成,系统据此更新 Quant。Quant 是仓位级别的库存实例,它和 MM 的物料库存是两层账:MM 看总量,WM 看每个仓位上的分布。确认环节如果出问题,会出现 MM 库存和 WM 库存不一致,或者 Quant 挂在错误的仓位上。

文档里1.2的编号范围给 Quant 独立号段,就是为了让每个 Quant 可追溯。4.5的自动 TO 创建和4.6的确认配合,构成从 TR 到 TO 到 Quant 的完整闭环。常见的实现思路是,把确认理解成“物理动作的回执”,没有确认,TO 只是计划,Quant 不会变。自动创建加自动确认可以做到无人干预,但前提是策略配置足够精确,否则自动化会把错误放大。

5. 避坑与排查:WM 配置里最容易翻车的几个点

5.1 现象:收货后货物落在 902 不动,不生成上架 TO

原因通常是存储类型搜索没有激活,或者移动类型101没有映射到正确的ActTy。文档2.1的引用表里101对应200,如果OMLY里D01 200这一行缺失或Stor序列为空,系统找不到候选存储类型,TR 就停在收货区。解决方法是先查OMLY的移动类型引用,再查ActTy对应的Stor序列,确认ZM1、ZM2在候选里。

5.2 现象:上架时提示找不到仓位,但仓位明明存在

原因多半是仓位类型搜索的分配关系缺失。文档2.3.3和2.3.4把S1分配给E1、B1、P1和ZM1、ZM2,如果某个存储类型的仓位类型没有分配对应的 SU 类型,搜索时匹配不上。解决方法是检查OMM1里的分配表,确认当前搬运单元的 SU 类型在目标仓位类型的允许列表里。

5.3 现象:仓位号生成后和实际货架编码对不上

原因是LS10的仓位结构模板和物理货架编码规则不一致。文档1.7里ZM1001到ZM1007、ZM2001用了不同模板,如果模板的起止值和增量填错,批量生成的仓位号会偏移。解决方法是先在测试仓库号里生成一批仓位,和实际编码逐位比对,确认模板的每一位含义后再上生产。

5.4 现象:自动 TO 创建不生效,TR 一直挂着手动处理

原因是4.5的自动创建开关没开,或者 TR 的类型不在自动创建范围内。文档4.1的需求类别和4.5的自动 TO 创建配置需要匹配。解决方法是先确认 TR 的需求类别,再查自动创建的配置条件,最后看 TO 创建后的确认是否也需要自动化。

5.5 现象:FIFO 策略选出来的批次不是最早入库的

原因是 FIFO 依赖入库时间字段,如果批次或 Quant 的入库时间没有正确记录,排序就失去依据。文档2.12到2.14的 FIFO、严格 FIFO、LIFO 策略都依赖时间字段。解决方法是检查 Quant 的入库时间来源,确认收货确认时时间戳正确写入,再验证策略排序结果。

6. 设计取舍:为什么 WM 要把“找仓位”拆成四层搜索

回头看这套配置,最值得琢磨的设计取舍是搜索的分层。SAP WM 没有用一个“大函数”直接算出目标仓位,而是拆成移动类型路由、存储类型搜索、存储段搜索、仓位类型搜索四层,每层有自己的配置表和排序规则。这种拆法的代价是配置项多、依赖链长,任何一层缺失都会导致搜索失败;好处是每一层都可以独立调整,业务变化时不需要动其他层。

比如收货从供应商改成生产入库,只需要改移动类型到ActTy的映射,存储类型和仓位类型的搜索逻辑可以复用。再比如新增一个存储区域,只需要在存储类型和存储段里加条目,不需要改移动类型。这种“路由与寻址分离”的思路,和网络里的路由表加 ARP 表有点像:先按目的网络选出口,再在出口内找具体地址。常见的实现思路是,把每一层搜索理解成一个候选集过滤器,前一层输出候选集,后一层继续收窄,最后一层排序取第一个。

验证这套配置是否 work,不能只看配置表填没填,要跑完整链路:建一张收货凭证,看 TR 是否生成、TO 是否自动创建、确认后 Quant 是否落在预期仓位;再跑一张发货凭证,看拣配策略是否按 FIFO 或固定仓位取货;最后跑一张转储,看存储段搜索是否按预期切换。每一步都对照文档里的配置表,确认实际行为和配置意图一致。

从那以后我每次碰 WM 配置,都会先把移动类型到ActTy的映射表打印出来,再对着OMLY的Stor序列逐位核对,最后才去动存储类型和仓位。这个习惯帮我省掉了很多“配置看起来都对但就是不走”的排查时间。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询