You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:30:58