Odoo14 CE:如何限制同目的地同产品的调拨单合并?
Odoo14 CE 禁止调拨单及产品合并的解决方法
问题背景
默认情况下Odoo14 CE会合并同目的地、同产品的调拨单。使用中转仓库执行一步式内部转移时,创建多笔从A到B的转移后,后续生成的中转至B的调拨单会合并到已有单据中,无法满足每一步扫码区分不同转移流程的需求。中转仓库配置本身无问题,该现象由系统默认合并逻辑导致。
一、是否有现成配置项禁用合并?
Odoo14 CE没有现成的系统配置项直接关闭这种合并逻辑,这是库存模块为优化操作流程设置的默认规则。
二、代码层面修改方案
要实现禁止跨原始转移单的合并,需修改库存调拨单生成时的合并判断逻辑,核心是重写stock.move模型中控制合并的方法。
1. 继承stock.move模型
创建自定义模块,重写_search_mergeable_moves方法,添加额外判断条件确保仅同原始转移单的调拨单可合并:
from odoo import models, api class StockMove(models.Model): _inherit = 'stock.move' @api.model def _search_mergeable_moves(self, move): # 先获取系统默认的可合并调拨单集合 mergeable_moves = super()._search_mergeable_moves(move) # 过滤:仅保留与当前调拨单来源原始单据一致的记录 if move.origin: mergeable_moves = mergeable_moves.filtered(lambda m: m.origin == move.origin) # 若使用库存需求组关联流程,可改用group_id判断(更稳定) # if move.group_id: # mergeable_moves = mergeable_moves.filtered(lambda m: m.group_id == move.group_id) return mergeable_moves
2. 逻辑说明
原方法仅通过目的地仓库、产品、批次等条件筛选可合并单据,添加origin(原始单据来源)或group_id(需求组)判断后,不同原始转移单(如A/INT/01、A/INT/02)生成的中转调拨单会保持独立,不再合并。
3. 部署步骤
- 将代码放入自定义模块的
models/stock_move.py文件 - 在模块
__manifest__.py中添加依赖'stock' - 安装模块后,新生成的调拨单将按规则避免跨原始转移单合并
三、补充说明
中转仓库的配置逻辑是正确的,修改代码后可保留「拣货+包装+发货」分步扫码的功能,同时让每笔原始转移单对应独立的后续调拨流程。
内容的提问来源于stack exchange,提问作者Jameel Ahmed
相关产品推荐
相关产品推荐

