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

Odoo16采购订单自动生成账单功能失效,请求技术协助

Odoo16 采购订单按钮创建账单无效的问题排查与修复

你的代码创建account.move失败,核心原因是缺少必填字段以及未处理创建时的异常,以下是具体修复方案:

问题分析

  1. move_type 必填未设置:Odoo16中account.move必须指定move_type,比如应付账单对应'in_invoice',应收对应'out_invoice',不指定会直接导致创建失败。
  2. 缺少异常捕获逻辑:Odoo的create方法在字段不合法时会直接抛出异常,不会返回False,你当前的判断逻辑无法捕获真实错误原因。
  3. 可能缺失其他关键字段:部分场景下journal_id(日记账)需要明确指定,否则系统可能无法自动匹配默认值,导致创建失败。

修复后的代码

def button_landed_cost(self):
    # 先校验采购订单基础信息是否完整
    if not self.partner_id or not self.name:
        print("采购订单缺少供应商或名称信息")
        return True

    try:
        # 创建应付账单(根据业务需求可改为'in_refund'等其他类型)
        account_move = self.env['account.move'].create({
            'move_type': 'in_invoice',  # 必须指定账单类型
            'partner_id': self.partner_id.id,
            'ref': self.name,
            'company_id': self.company_id.id,  # 明确关联当前公司,避免多公司场景出错
            # 若需要指定专属日记账,取消下方注释并调整查询条件
            # 'journal_id': self.env['account.journal'].search([('type', '=', 'purchase'), ('company_id', '=', self.company_id.id)], limit=1).id,
        })
        print(f"账单创建成功,ID: {account_move.id}")
        # 可选:添加跳转至新创建账单的视图逻辑
        # return {
        #     'type': 'ir.actions.act_window',
        #     'res_model': 'account.move',
        #     'res_id': account_move.id,
        #     'view_mode': 'form',
        # }
    except Exception as e:
        print(f"账单创建失败,错误信息: {str(e)}")

    return True

额外检查点

  • 确认当前操作用户拥有account.move模型的创建权限
  • 检查采购订单的partner_id是否为有效供应商(对应res.partner记录存在)
  • 若指定journal_id,需确保该日记账存在且类型与账单匹配(采购账单对应purchase类型日记账)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:07:36