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

Odoo 14社区版三步配送中,如何从打包单获取拣货单?

从打包单关联对应拣货单的方法

在Odoo的多步配送流程(拣货>打包>发货)中,你可以通过以下两种方式从打包单关联到对应的拣货单stock_picking对象:

方法一:通过库存移动的上下游关联(精准匹配)

打包单的库存移动(move_ids)会关联上游拣货环节的原始移动(move_orig_ids),通过这个关联可以定位到对应的拣货单:

# 假设当前打包单对象为 packing_picking
target_pickings = set()
# 遍历打包单的所有库存移动
for move in packing_picking.move_ids:
    # 遍历每条移动对应的上游原始移动
    for orig_move in move.move_orig_ids:
        # 根据实际拣货单的类型和状态筛选,比如拣货单是出库类型且已完成
        if orig_move.picking_id.picking_type_code == 'outgoing' and orig_move.picking_id.state == 'done':
            target_pickings.add(orig_move.picking_id)
# 提取唯一的拣货单(按你的流程应该仅存在一个)
pick_picking = target_pickings.pop() if target_pickings else None

方法二:通过库存组(group_id)关联(简洁高效)

同一配送流程下的拣货单、打包单、发货单会共享同一个group_id(库存组),可以直接通过这个字段筛选:

# 假设当前打包单对象为 packing_picking
pick_picking = self.env['stock.picking'].search([
    ('group_id', '=', packing_picking.group_id.id),
    ('picking_type_code', '=', 'outgoing'),  # 替换为你实际的拣货单类型
    ('state', '=', 'done'),  # 筛选已完成的拣货单
    ('id', '!=', packing_picking.id)  # 排除当前打包单本身
], limit=1)

注意事项

  • 请根据你的实际配置调整picking_type_code的值,比如内部拣货可能用'internal',入库用'incoming'
  • 方法一适用于同一库存组下存在多套单据的场景,匹配更精准;方法二更适合单套流程的场景,代码更简洁

内容的提问来源于stack exchange,提问作者holydragon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:42:47