Odoo 10中无需创建DC或发票且完成库存操作后关闭销售订单可行吗?
在Odoo 10中不创建交货单/发票关闭销售订单并完成库存操作的解决方案
嘿,我刚好在Odoo 10里处理过类似的需求,直接改销售订单状态为done失败是因为系统默认会校验关联的库存交货和发票状态,咱们可以分两种场景来解决:
一、非开发手动操作方案(适合少量订单)
如果只是处理个别订单,不想动代码,按这个步骤来:
- 先搞定库存出库
- 找到该销售订单关联的待处理库存调拨单(Stock Picking),如果没自动生成,就手动新建一个「客户交货」类型的调拨单,把订单里的商品加进去,确认库存数量足够后点击「验证」,完成出库操作(确保调拨单状态变成
完成)。
- 找到该销售订单关联的待处理库存调拨单(Stock Picking),如果没自动生成,就手动新建一个「客户交货」类型的调拨单,把订单里的商品加进去,确认库存数量足够后点击「验证」,完成出库操作(确保调拨单状态变成
- 调整销售订单的发票策略
- 打开销售订单进入编辑模式,找到「发票策略」字段,改成「无」(Odoo 10里这个选项会让系统不再强制要求生成发票)。
- 强制修改订单状态为完成
- 开启开发者模式(设置→开发者工具→开启开发者模式),回到销售订单编辑界面,找到「状态」字段,直接选择
完成后保存即可。
- 开启开发者模式(设置→开发者工具→开启开发者模式),回到销售订单编辑界面,找到「状态」字段,直接选择
二、开发自定义方案(适合批量或自动化需求)
如果需要批量处理或者想做个一键操作的按钮,可以写个简单的自定义模块来跳过系统校验:
核心代码示例(Python)
from odoo import models, api class SaleOrder(models.Model): _inherit = 'sale.order' @api.multi def action_mark_done_without_delivery_invoice(self): for order in self: # 自动完成所有未处理的关联库存调拨单 pending_pickings = order.picking_ids.filtered(lambda p: p.state not in ['done', 'cancel']) if pending_pickings: pending_pickings.action_done() # 标记订单为完成,并跳过发票校验 order.write({ 'state': 'done', 'invoice_status': 'invoiced' # 让系统认为已开票,避免状态冲突 })
然后在销售订单的视图里添加一个自定义按钮,绑定这个方法,以后点击按钮就能一键完成所有操作。
重要提醒
- 不管用哪种方法,一定要确保实际库存和系统库存一致,避免账实不符;
- 如果业务流程要求必须保留交货单或发票记录,建议还是走标准流程,不然后续统计或审计容易出问题;
- 修改状态前最好备份数据,以防误操作。
内容的提问来源于stack exchange,提问作者NinjaBat
相关产品推荐
相关产品推荐

