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

Odoo 15能否在stock.move.line层级实现库存预留?

问题

我正尝试为stock.picking记录预留产品。由于拣货流程的需求,我希望在stock.move.line层级进行库存预留。我曾尝试移除其他行后仅对stock.picking进行预留操作,但系统仍会尝试预留整单。由于存在需拣选多个零散数量的情况,我必须在行层级进行预留。

请问是否真的可以在stock.move.line层级实现库存预留?

我通过以下代码创建了行,该代码可正常运行:

# Update the move line associated with the move record
move_line = odoo.env['stock.move.line'].create({
    'move_id': move.id,
    'product_id': product_id,
    'qty_done': amount_picking,
    'location_id': quant_location_id,  # Use the location of the quant_id
    ##change to source location
    'location_dest_id': move.location_id.id,
    'lot_id': lot_id or False,
    'product_uom_id': move.product_uom.id,  # Add the missing 'product_uom_id' field
    'picking_id': picking_id,
})

我希望实现的效果是仅让这一行被预留。


解决方案

可以在stock.move.line层级实现库存预留,核心是通过配置行的预留字段、关联库存批次,避免触发整单预留逻辑,具体操作如下:

  • 调整move_line字段配置
    你当前的代码把qty_done设为预留数量,这是错误的——qty_done是实际拣货完成的数量,预留阶段应该用reserved_qty字段标记预留量,同时修正location_dest_id为拣货目标位置(原代码写反成了源位置)。

  • 手动关联库存批次(可选)
    如果已经明确要预留的库存批次(quant),可以直接在创建行时关联quant_id;如果需要系统自动分配,可调用专属预留方法。

  • 避免整单预留
    不要调用stock.picking的action_assign(),而是单独处理目标行或其对应的stock.move。

修改后的示例代码:

# 创建用于预留的move line
move_line = odoo.env['stock.move.line'].create({
    'move_id': move.id,
    'product_id': product_id,
    'reserved_qty': amount_picking,  # 设置预留数量
    'qty_done': 0,  # 拣货完成前留空
    'location_id': quant_location_id,
    'location_dest_id': move.location_dest_id.id,  # 修正为拣货目标位置
    'lot_id': lot_id or False,
    'product_uom_id': move.product_uom.id,
    'picking_id': picking_id,
    'quant_id': quant_id or False,  # 明确预留批次时直接关联
})

# 未指定quant_id时,触发该行的自动预留逻辑
if not quant_id:
    move_line._reserve_quant(amount_picking, move_line.location_id, move_line.location_dest_id)
  • 额外注意:
    确保对应的stock.move状态不是已完成,否则无法执行预留操作;如果需要批量处理多行,需逐行单独执行预留逻辑,避免触发整单的批量预留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:12:17