Odoo16采购订单自动生成账单功能失效,请求技术协助
Odoo16 采购订单按钮创建账单无效的问题排查与修复
你的代码创建account.move失败,核心原因是缺少必填字段以及未处理创建时的异常,以下是具体修复方案:
问题分析
move_type必填未设置:Odoo16中account.move必须指定move_type,比如应付账单对应'in_invoice',应收对应'out_invoice',不指定会直接导致创建失败。- 缺少异常捕获逻辑:Odoo的
create方法在字段不合法时会直接抛出异常,不会返回False,你当前的判断逻辑无法捕获真实错误原因。 - 可能缺失其他关键字段:部分场景下
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
相关产品推荐
相关产品推荐

