资讯动态

Odoo 18库存位置建模全指南:物理与虚拟位置策略配置

发布时间:2026/10/21 7:51:55 来源:尧图企业网站定制
做Odoo实施这些年我有个特别深的体会十个库存项目里八个出问题根源往往不在库存模块本身而是位置Location没建模好。位置管理分两件大事一件是区分物理位置和虚拟位置——也就是搞清楚“货到底放在仓库哪个货架上”和“这批货在账务上处于什么状态”另一件是围绕位置把入库、出库、存储、补货这一整套策略设置配顺。这篇全指南就基于Odoo 18展开把位置分类逻辑和策略配置的来龙去脉讲透适合正在实施Odoo的顾问、企业IT、仓库负责人以及刚接触Odoo库存模块打算自学的开发者。我尽量不讲废话全是实操里验证过的东西。1. 位置管理没搞懂库存账迟早要乱——先从位置的本质说起1.1 位置到底是什么库存移动链上的节点Odoo的库存模块里没有传统ERP那种“库存总表”货物流转靠的全是库存移动Stock Move。每一笔移动都有一条“源位置 → 目标位置”的记录采购收货是“供应商位置 → 仓库内部位置”销售发货是“仓库内部位置 → 客户位置”生产领料是“仓库位置 → 生产位置”。所以位置在Odoo里本质上不是一张静态标签而是库存移动链上的节点。把这套机制比作交通系统位置就是站点库存移动就是跑在站与站之间的车。你可以在任意两个站点之间发车但每辆车必须明确“从哪来、到哪去”否则系统根本不知道怎么记账。这也是Odoo和很多传统ERP“货品存量表一刀切”思路的最大区别——它不关心一个产品“总量是多少”更关心“这批货现在处于什么状态、到了哪个环节”。比方说你有一批原料正在海上漂着、一批成品已经发给客户但还没确认签收、一批次品等着报废这三批货在物理上都不在你仓库里但它们的账务状态完全不同。Odoo用位置来承载这些状态所以在做库存追溯时你永远能回答“这批货是从哪来、到哪去、现在在哪”。在这个体系下位置不只是名字它还带有类型属性。Odoo用“内部位置Internal Location”这个复选框来区分物理货位和虚拟节点勾选上的代表公司自己可控的物理仓库空间没勾选的就是虚拟位置用于表达业务流转的账务节点。很多人第一次建位置就卡在这里我慢慢往下拆。1.2 物理位置与虚拟位置一张表看清本质区别很多新手一开始会被这俩概念绕晕。物理位置好理解仓库里的货架、库位、货柜、托盘位占了实体空间虚拟位置就不太好懂因为它看不见、摸不着只在单据和报表里存在。我通常用下面这张表做区分客户看完基本都能明白对比维度物理位置内部位置虚拟位置是否占用实体空间占用有货架、库位、托盘等不占用只是一个逻辑节点是否勾选“内部位置”选项必须勾选不勾选库存归属计入公司实有可用库存不计入公司可用库存作为在途、已交付等状态载体典型用途收货暂存区、原料仓、成品仓、质检冻结区供应商位置、客户位置、生产位置、库存损失位置、中转位置可操作性支持扫码、容量校验、物理盘点主要是账务流转记录不可扫码上架只看表格可能还不够直观我举一个真实项目里遇到的场景。某家公司做跨境贸易采购的大批货在运输途中财务想看“在途库存到底有多少钱”。如果没把供应商位置理解成虚拟节点这批在途货很可能被操作员随手录入到某个内部仓库账面库存立刻虚高财务结账对不上。而正确理解是供应商位置这个虚拟节点专门用来挂“已采购、未收货”的库存货物只有扫码进了公司内部位置才算真正入库。这个区分做到位了在途库存报表、资金占用分析、采购到货追踪就都顺了。还有一个细节值得注意虚拟位置里的数量虽然不计入公司可用库存但它会出现在“预计库存Forecast”里。预计库存的计算逻辑是在手库存加上未来的入库移动、减去未来的出库移动。所以虚拟位置的存在恰恰让“预计库存”变得完整——采购在途会让你看到未来能到多少货销售已发但未确认会让你看到未来库存会消耗多少。1.3 从根位置看Odoo内置的位置体系打开Odoo的位置列表设置 → 库存 → 位置默认会看到一组根位置它们就是Odoo库存模块自带的“虚拟位置大本营”。我把它们挨个说一下物理位置Physical Locations所有仓库、库区、货架的顶层根节点本身是一个父级视图节点。供应商位置Vendor Location采购收货的源头挂在它下面的库存代表“在途采购”。客户位置Customer Location销售发货的终点挂在它下面的库存代表“已交付客户”。生产位置Production Location生产领料和成品入库的账务缓冲代表“已进入制造环节”。库存损失位置Inventory Loss Location盘点差异、报废、损耗的兜底位置。中转位置Transit Locations跨仓库调拨、多步骤收发货时的在途缓冲。这些根位置不需要自己建安装库存模块后系统就带上了。创建新仓库时Odoo会自动在“物理位置”根节点下生成对应仓库的位置树比如常见的WH/Stock而供应商、客户、生产、库存损失这些虚拟位置则在采购、销售、制造模块跑流程时自动参与。理解这套根位置体系对后续做追溯和报表分析特别重要。因为任何一笔库存增减最终都能归到某一个根位置之下数据不会出现“无家可归”的情况。很多上线后库存对不上的项目排查到最后都会发现问题就出在有人绕过这套体系随手建了一堆没有父位置、没有类型的“野位置”。2. 物理位置建模实操仓库、区域、货架、库位的落地步骤2.1 先画一张仓库地图再建位置树物理位置建模这步最忌讳的就是打开Odoo直接新建位置边建边想。我在项目里带客户做的第一件事永远是先画一张仓库物理地图哪个区域放原材料哪个区域放成品哪个通道是收货暂存区哪块角落留给待报废品。画完之后再把这些区域映射成Odoo里的位置树。一个典型制造业仓库的位置树大致长这样WH仓库根父级 └── WH/Stock库存内部位置根 ├── WH/Stock/Raw原材料区 │ ├── WH/Stock/Raw/AA类原材料货架 │ └── WH/Stock/Raw/BB类原材料货架 ├── WH/Stock/Finish成品区 ├── WH/Stock/Blocked质检冻结/待处理区 └── WH/Stock/Scrap待报废区层级的核心原则是叶子节点用来放货父节点用来汇总。Odoo计算某个位置的库存时会自动把其所有子位置的数量汇总上来所以你只需要在末端货位上做入库、出库、盘点上层节点自然更新。这个设计极大的简化了日常操作操作员不需要去改父级数据系统自动汇总。画完地图之后还有两件事要一并定下来。一件是位置编码规则。我建议用一个统一的编码格式比如“仓库编码/区域/通道/货架/层”像WH/A/03/02/05这种比“A区三通道二号货架五层”在这种单据和扫码界面上直观得多。另一件是层级深度。理论上Odoo支持无限层级但实际实施我不建议超过四层仓库 → 区域 → 货架 → 库位。层级太深操作员扫码拣货要多跳好几级查询报表也会被拖慢得不偿失。2.2 创建内部位置的关键字段与层级技巧新建物理位置时在位置表单里重点要看的字段其实不多但每一个都别漏位置名称按前面定的编码规则填别用自由文本。内部位置必须勾选。勾了才代表公司内部物理库存才能在入库单、发货单里作为正式库位被选择。父位置选择上一级。位置类型会从父位置继承叶子节点只要选对父级内部位置选项一般就不用重复纠结。允许的产品 / 允许的包装如果某个位置只放特定产品或特定规格包装可以在这里限定防止操作员乱放。位置备注把存放规则、库位尺寸、是否限重等信息写进去给操作员当操作提示。这里要提醒一下父位置的选择是个容易出错但又很关键的环节。很多人图方便把所有位置都直接挂在仓库跟节点下面结果位置列表一千多行找谁都费劲。正确的做法是先建好“区域”这一层比如原料区、成品区、冻结区再在区域下面建货架和库位。这样不仅树形结构清楚后续做补货规则、存储策略、盘点分组时也可以直接按区域统一配置。另外一个实操细节如果公司有多个仓库建议把仓库编码放进位置编码第一位比如WH01/Stock/Raw和WH02/Stock/Raw。这样一张报表看多仓数据时位置能直接反映出属于哪个仓库不用再额外关联仓库字段。2.3 容量、条码、允许的产品位置定义的高级属性别小看物理位置表单里的容量相关设置。很多人上线时直接忽略等到仓库里托盘放不下、收货时才发现问题。Odoo 18里位置可以设置最大重量、最大体积等容量约束配合“允许的产品”“允许的包装类型”一起用系统在做位置分配时就能提前校验避免货到了才发现放不下。我见过一个仓库收货时操作员凭经验找位置经常找到一半发现货架满了又推着托盘满仓库找空位。后来我帮他给每个位置设置了最大托盘数和最大重量配合入库规则让系统自动推荐位置收货效率提升了大概三成。这不是什么高级功能只是位置属性配得细了一点。还建议在位置表单里填上条形码然后打印位置标签贴在货架侧面。这是移动端扫码拣货的基础。仓库同事拿出扫码枪先扫位置条码再扫产品条码库存转移就完成了基本不会出现录入错位。后续要做盘点、调拨、拣货扫码效率比手工选择位置高出一大截。还有一个容易被忽略的细节仓库表单里有“收货步骤”和“发货步骤”的设置。如果收货设为2步系统会自动创建WH/Input这类收货暂存内部位置设为3步还会再多一个中转站。这些自动创建的位置属于内部位置但千万不要把它们当成正式库位来放长期库存——它们只是流程中间暂存节点货物一到就得尽快移入正式库位。如果不约定好这个操作习惯很可能会出现货物永远堆在WH/Input不挪走的“僵尸库存”。3. 虚拟位置分类与应用场景供应商、客户、生产、报废、中转3.1 供应商位置与客户位置库存归属性流转的起点和终点采购订单确认后从“供应商位置”到仓库内部位置的入库移动会立即生成但此时它只是“预计库存”货物真正扫码入库后库存数量才会落到内部物理位置。这带来一个好处在途采购的货有一个明确的账务归属地不会和现有库存混在一起财务可以通过报表清楚看到“在途库存”的金额对资金占用一目了然。客户位置同理。销售发货完成后库存从内部位置转移到了“客户位置”在报表上代表这批货的所有权已经交给客户。很多公司退货流程乱成一团根源就是没理解这个位置的意义退货时正确的操作是做一笔“客户位置 → 内部位置”的库存移动把库存加回来。如果直接把客户位置当垃圾桶随便调整数量账和实物永远对不上。这里我想多讲一个实际业务例子。某家电商代运营公司仓库每天发货量很大退货也很多。上线前他们总抱怨Odoo退货流程难用我一看原来他们把所有退货都直接做成了“报废”存货越退越少月底账实差异大得吓人。后来把退货流程改成“客户位置 → 质检位置 → 正式库位”三步走账一下就对上了。虚拟位置用得好不只是技术正确还能直接挽回利润。3.2 生产位置与库存损失位置制造和盘点的两个“账务缓冲”生产位置可能是最被误解的虚拟位置。生产领料时系统把原料从“内部位置 → 生产位置”代表材料已经交给车间生产完成后再把产成品从“生产位置 → 内部位置”。如果只看原料库存会觉得原料“消失”了其实它是在制造过程中转化了形态。Odoo用这个位置来衔接原料到产成品的转换账务使得一张生产订单的全过程都有据可查。在企业版里生产位置通常还会跟制造模块的“完工入库”联动。原材料消耗多少、成品产了多少、中间损耗多少系统都会在移动记录里留下痕迹。做成本核算时这批数据就是最底层的依据。库存损失位置则是所有盘点、报废操作的“兜底”选项。做库存盘点如果发现账实差异盘点结算后Odoo会自动把差额转到“库存损失”这个虚拟位置。报废操作也一样系统会把废品从正式库存移到库存损失位置。这个位置记录的是企业实际发生的损耗和盘盈亏是财务做存货跌价、报损审批的基础数据。所以一般情况下这个位置不允许手动改数量否则审计上说不清楚。有一点要特别提醒库存损失位置和生产位置都是虚拟位置不要给它们建“子位置”也不要尝试在里面放物理货物。它们存在的意义就是让“不知道归哪”的库存有一个合法的账务归宿而不是让你把货物真的丢在某个角落。3.3 中转位置与多步骤流程让在途库存变得可见当启用多仓库调拨或两步/三步收发货流程时Odoo会创建“中转位置”。比如从上海仓调货到广州仓移动记录会是“上海仓库存 → 中转位置在途→ 广州仓库存”。中转位置里的货不物理存在于任何一个仓库但系统账上能明确看到“正在路上的库存”到底有多少。中转位置是虚拟位置里最容易被忽视、也最能体现Odoo追溯能力的一个。因为在途货物如果出现问题你可以直接在系统里看到这批货停留在哪个中转节点、停留了多久而不是像表格管理那样“发出去就消失了”。尤其是那些经常做跨仓调拨、门店配货的公司中转位置做好了供应链计划和库存分配会轻松很多。实操建议多仓公司务必在仓库设置里启用中转位置功能并且养成在调拨单上记录确认时间、预计到货时间的习惯。这笔在途库存数据对后续做采购计划、销售承诺、缺货预警都非常有价值。还有一个常见用法是把中转位置和“多步骤收发货”结合。比如发货设成3步库位拣货 → 发货区打包 → 中转位置 → 客户位置。每一步都是一个独立的位置节点仓库的每一个动作都能被看得很清楚。如果有一步一直没完成说明货卡在了某个环节管理上可以立刻定位责任。这就是虚拟位置在流程管理上的真正价值。4. 策略设置的底层逻辑与实战配置4.1 入库规则Putaway让货物自动找到自己的“家”入库规则Putaway Rules是位置策略里的第一个大件。它解决的核心问题是货物在收货时系统应该自动决定把它放到哪个位置而不是靠操作员在界面上手选。手选一多就会出现放错货架、混放、账实不符。Putaway规则主要由几个条件构成产品类别、源位置通常来自供应商位置或生产位置、目标操作类型收货、生产入库等、以及最终目标位置。规则按优先级顺序匹配不满足当前规则就尝试下一条全部不满足时回落到默认位置。举一个实际例子。某汽车零配件分销商把“标准件”这个产品类别设为入库到WH/Stock/Raw/A把“超大件”设为入库到WH/Stock/Raw/B。收货时系统自动检查产品类别把货物绑定到正确的货架位置。操作员根本不用想货该放哪扫码确认即可。这样既提高了收货效率也保证了库位的稳定性。落地的时候有几个细节值得注意规则匹配顺序很重要越具体的规则放越前面否则会被宽泛规则吞掉。比如先写“标准件”再写“所有产品”兜底。规则目标位置可以直接指向“父位置”让系统在其子位置中自动寻找可用库位。同一产品有多种入库来源采购、生产、退货需要分别建规则不要指望一条规则通吃所有业务。4.2 出库移除策略FIFO/LIFO/FEFO怎么选出库移除策略Removal Strategy解决的是另一个方向的问题同一个货位上有多批次货物时拣货时先出哪一批。Odoo 18内置三种主流策略策略逻辑适用场景FIFO先进先出先入库的批次先出大多数无保质期要求的工业品、品牌商品LIFO后进先出后入库的批次先出少数特定行业比如某些金属材料价格波动管理FEFO先到期先出按有效期先后出库食品、医药、化妆品等有保质期要求的品类这里有两个容易踩的坑。第一个坑是FEFO只对启用了到期日期跟踪的产品有意义。如果产品没启用有效期FEFO等于没设。所以在设置策略前先检查产品主数据里的跟踪属性批次/序列号 到期日期是否已配对。否则你配了半天策略实操时系统还是按原来的顺序出库。第二个坑是FIFO/LIFO是全局默认策略但某些产品可能需要单独覆盖。比如同一个仓库里常规件用FIFO临期促销品想强制用FEFO这时不要直接改全局设置而是在产品或产品类别上单独指定移除策略全局配置保持相对保守。给一个我常用的配置步骤先在库存设置里把默认移除策略设为FIFO再把带保质期的产品类别逐个改成FEFO最后做几单模拟出库确认临期批次确实被优先拣出。这样可以兼顾常规品和保质期敏感品。4.3 Odoo 18存储策略按编码、ABC、包装方式自动分库位如果你用的是支持新仓储策略的Odoo 18版本还能用到“存储类别Storage Category和存储策略Storage Strategy”这套相对较新的能力。它比Putaway规则更进一步Putaway规则主要靠源位置和目标操作类型决定放哪而存储策略会结合产品属性、包装方式、库存周转特征来动态选择库位。常见的业务设计有几种按产品编码区间分库位编码A开头走A区B开头走B区适合SKU多且编码有规律的分销商。按ABC分析结果分库位高周转的A类货放在离拣货口最近、最顺手的通道低周转的C类放高层或偏远通道。按包装类型分库位整托盘件放低位货架拆零件放拣货区避免每天为了几件小货翻大托盘。按特殊存储条件分库位冷藏、防爆、危化品自动分配到特定区域。这套策略的配置逻辑大致是创建存储类别定义这个类别接纳哪些产品匹配条件给每个存储类别配置可用的物理位置列表和容量限制入库时系统按策略优先级和容量余量自动推荐位置。这里要特别提醒一句存储策略在部分版本里属于额外付费能力社区版默认是没有的。如果你用的是社区版不必硬套这个概念用Putaway规则加容量约束也能实现80%的自动化分库位效果。重要的是先把“哪类货进哪个区域”的业务规则定清楚工具只是帮你落地。4.4 补货规则安全库存与内部调拨的联动位置策略里的最后一块拼图是补货规则Reordering Rules。它解决的是“库存低于安全线时系统什么时候触发补货、补多少”的问题。补货规则的核心指标就两个最低库存触发点和最高库存目标点。当某个位置的预计库存跌破最低值系统会自动生成补货建议。在Odoo 18里补货规则可以结合位置做“内部补货”。比如分店仓缺货总仓自动生成一张内部调拨单从总仓补货到分店。这时补货规则里的“位置”字段指定补货的目标位置需求来源则是分店的实际销售和预测需求。这套机制的底层逻辑就是VMI供应商管理库存和看板补货在ERP里的落地只是用位置把物理仓库和逻辑需求连接起来了。我在项目里常用的配置思路是先把安全库存测算准按过去三个月的日均出库量乘以安全天数来定最低库存再按采购或生产的提前期算出补货批量用“最低库存 一个提前期消耗量”来定最高库存。测不准的时候宁可保守一点多补几单总比断货把销售坑了强。补货规则还有一个容易被忽略的联动如果公司在多仓库之间做调拨一定要明确“总仓补货”和“分店采购”的边界。否则总仓缺货时分店会同时触发采购订单和内部调拨造成重复补货。这个场景下补货规则里的供应来源字段就很重要先把来源配置清楚再定数量。5. 常见坑位与排查思路5.1 虚拟位置被当成内部位置勾选报表直接虚高这个问题在开头案例里说过一次但因为太典型必须再强调一遍。新建位置时很多人看到“内部位置”复选框就顺手打勾结果把供应商位置、客户位置这种虚拟节点全勾成了内部位置。后果就是采购在途货、已发货货都被算进公司可用库存报表虚高一大截财务和销售对账怎么都对不上。排查方法其实很简单打开库存报表如果发现某个产品数量异常偏高切到“位置”视图看看高位数量是不是来自那些疑似虚拟位置。点进去看位置表单“内部位置”如果是勾选状态而实际操作上又不可能扫码到这个货那就该取消勾选并做一次库存修正。记住一个原则凡是“无法扫码、无法实际触碰”的位置全都不该勾内部位置。5.2 删除被引用的位置报错归档才是正路位置一旦被任何库存移动、单据引用过就不能直接删除这是Odoo的保护机制。很多新手遇到这个报错会很慌以为系统坏了。其实正确做法是“归档Archive”而不是删除。归档后位置不再出现在常规选择列表里但历史单据和追溯记录依然完整。归档的另一个好处是你可以保留完整的仓库结构变化历史。哪一天要查“这批货之前到底放在哪个旧货架”归档位置里依然能查到。所以能归档的不删除这是运营了三年以上仓库的基本素养。如果你发现某个位置被大量历史单据引用千万别为了界面干净硬删先把历史数据看明白了再说。5.3 存储策略和入库规则冲突时先测试再上线当Putaway入库规则和存储策略同时启用时系统内部有优先级和冲突处理逻辑但业务上很容易出现“规则定义了货还是放错了”的假象。实际上这种情况十有八九是上线前测试不充分导致的——仓库同事实际看到的推荐位置和预期不一致。我的经验是上线前必须做三组端到端测试。第一组测常规产品确认走正确的指定库位第二组测边界产品比如超大件、临期品、特殊存储条件的货确认能落到备用位置第三组测容量溢出场景确认目标位置放不下时会给出正确提示而不是静默放到别处。三组测试跑完再培训仓库同事基本能避开九成上线初期的位置混乱。测试数据建议单独做一个测试仓库或测试位置树别在正式数据上造不然后面清理起来很痛苦。5.4 质检区没建不合格品混入可用库存最后一个坑是业务层面的。很多公司上线Odoo时只建了原料仓、成品仓没建质检冻结库位。来料不合格时只能先把货放一边结果仓库同事随手把这批货扫进了可用库位。等到仓库拣货发货这批不合格品就被当成正常品发给了客户出了客诉才回头查。正确的做法是在内部位置树里专门建一个“质检冻结/待处理区”比如WH/Stock/Blocked并配合质量模块给相关产品设置来料检验控制点。收货后先入质检区质检通过后再移入正式库位不合格的移到报废区或做退货处理。这一步实施阶段看起来只多花了十分钟配置后面能省下无数个客诉电话和退货成本。最后说两句位置管理这件事听起来只是ERP里的基础配置但它牵一发动全身。我做了几年库存模块实施最大的感受是位置建模的成熟度直接决定库存项目的天花板。物理位置做细了仓库效率能起来虚拟位置理清了财务账能对得上策略配顺了操作员才能少做那么多“手工指定”。如果你正在筹备或刚上线Odoo 18的仓库模块我建议不要跳过位置这块。先花一个下午把仓库地图画出来把虚拟位置和物理位置的边界划清楚再逐条把Putaway规则、移除策略、存储策略、补货规则配上。后面维护起来你会感谢当初这个决定。

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

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

免费获取报价 →
↑