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

Odoo13多公司场景下OCA薪资规则自动创建及关联会计科目咨询

Odoo 13多公司薪资规则/结构自动配置原生方案

Odoo原生提供多个可复用机制,可以简化该需求的开发,不需要从零实现全量逻辑:

核心实现思路

  • 提前维护一套无公司归属的公共薪资规则、薪资结构模板,仅存储通用配置(计算逻辑、关联科目编码、规则编码等),不需要绑定具体公司
  • 复用Odoo原生的记录复制方法、公司创建钩子完成多公司适配,核心依赖「同一套会计科目表下,相同业务含义的科目编码跨公司一致」的特性自动匹配科目

具体实现方案

1. 模块安装时批量生成现有公司的对应记录

你可以基于原生copy方法简化代码,不需要逐字段赋值,完整示例如下:

@api.model
def create_payroll_data_for_every_company(self):
    """
    为每个公司创建对应薪资规则、薪资结构,自动绑定对应公司的会计科目
    """
    # 获取所有已激活的业务公司
    all_companies = self.env['res.company'].search([('active', '=', True)])
    # 获取提前维护的公共模板数据(模板的company_id字段设为空即可)
    template_rules = self.env['hr.salary.rule'].search([('company_id', '=', False)])
    template_structs = self.env['hr.payroll.structure'].search([('company_id', '=', False)])

    for company in all_companies:
        # 批量创建当前公司的薪资规则
        for rule in template_rules:
            # 按编码匹配当前公司的对应借贷科目
            debit_acc = self.env['account.account'].search([
                ('company_id', '=', company.id),
                ('code', '=', rule.debit_account_id.code)
            ], limit=1)
            credit_acc = self.env['account.account'].search([
                ('company_id', '=', company.id),
                ('code', '=', rule.credit_account_id.code)
            ], limit=1)
            # 调用原生copy方法复制模板,仅替换公司和科目字段
            rule.copy(default={
                'company_id': company.id,
                'debit_account_id': debit_acc.id if debit_acc else False,
                'credit_account_id': credit_acc.id if credit_acc else False
            })
        # 批量创建当前公司的薪资结构
        for struct in template_structs:
            # 匹配当前公司下的对应薪资规则
            company_rules = self.env['hr.salary.rule'].search([
                ('company_id', '=', company.id),
                ('code', 'in', struct.rule_ids.mapped('code'))
            ])
            struct.copy(default={
                'company_id': company.id,
                'rule_ids': [(6, 0, company_rules.ids)]
            })

你依然可以通过XML数据文件在模块安装时触发该函数,模板数据也可以通过XML定义并设置noupdate="1"避免模块升级时被覆盖。

2. 新增公司时自动生成对应数据

不需要单独手动触发,直接继承res.company模型重写create方法,新增公司完成后自动调用上述逻辑即可,后续新加入公司无需额外操作。

注意事项

  • 确保所有公司使用的会计科目表中,相同业务含义的科目编码完全一致,这是自动匹配科目无需额外配置的核心前提
  • 公共模板数据建议设置company_id为空,不要绑定任何公司,避免跨公司权限问题

内容的提问来源于stack exchange,提问作者Houssem Chouia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:02