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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:35:15