如何在Odoo中配置科目伙伴校验规则,管控特定科目伙伴操作
没问题,我来给你搞定Odoo里这个科目与伙伴的校验需求,完全匹配你说的场景——比如指定科目只能绑定特定伙伴、部分科目禁止关联任何伙伴,下面是具体的实现步骤:
1. 给科目添加规则配置字段
首先我们需要在科目模型里新增两个配置项,用来定义每个科目的伙伴关联规则:
- 允许的唯一伙伴:指定后该科目仅能与这个伙伴绑定
- 禁止关联伙伴:勾选后该科目不能绑定任何客户/供应商
在自定义模块里添加以下代码:
from odoo import models, fields, api, _ from odoo.exceptions import ValidationError class AccountAccount(models.Model): _inherit = 'account.account' allowed_partner_id = fields.Many2one('res.partner', string='允许的唯一伙伴', help="设置后,该科目仅能与指定伙伴关联") forbid_partner = fields.Boolean(string='禁止关联伙伴', default=False, help="勾选后,该科目不能绑定任何客户/供应商")
2. 实现分录行的校验逻辑
接下来在发票分录行(account.move.line)中添加校验约束,在保存前检查是否符合科目设置的规则:
class AccountMoveLine(models.Model): _inherit = 'account.move.line' @api.constrains('account_id', 'partner_id') def _check_partner_account_restriction(self): for line in self: account = line.account_id # 校验禁止关联伙伴的科目 if account.forbid_partner and line.partner_id: raise ValidationError(_("科目 %s(%s)禁止关联任何伙伴,请移除该分录行的客户/供应商。") % (account.code, account.name)) # 校验仅允许指定伙伴的科目 if account.allowed_partner_id and line.partner_id != account.allowed_partner_id: raise ValidationError(_("科目 %s(%s)仅允许关联伙伴 %s,请修改该分录行的客户/供应商。") % (account.code, account.name, account.allowed_partner_id.name))
3. 配置科目规则
代码部署生效后,进入「会计」->「配置」->「科目」,编辑对应的科目:
- 针对科目401111:在「允许的唯一伙伴」字段选择BNA
- 针对科目700000:勾选「禁止关联伙伴」选项
4. 测试验证
现在可以测试以下场景:
- 当发票分录行选择700000并添加伙伴时,系统会弹出错误提示,阻止保存
- 当分录行选择401111并添加非BNA的伙伴时,同样会触发报错
- 只有选401111+BNA,或者无规则限制的普通科目(可自由添加/不添加伙伴),才能正常保存
额外注意事项
- 如果系统中已有不合规的旧分录,启用规则后打开旧发票保存会触发报错,需要先清理这些历史数据
- 如果需要批量设置多个科目的规则,可以用Odoo的「批量编辑」或导入功能高效完成
内容的提问来源于stack exchange,提问作者haffis asma
相关产品推荐
相关产品推荐

