财务本地化

Warning

本教程要求您了解如何在 Odoo 中构建模块(参见 入门)。

安装步骤

安装 account 模块时,系统会自动安装与公司国家代码对应的本地化模块。若未设置国家代码或找不到对应的本地化模块,则默认安装 l10n_generic_coa (美国)本地化模块。详情请查看 post init hook。

例如,如果公司的国家设置为 Switzerland,则会安装 l10n_ch。

构建本地化模块

基本 l10n_XX 模块的结构可以用以下 __manifest__.py 文件来描述:

{
    "name": "COUNTRY - Accounting",
    "version": "1.0.0",
    "category": "Accounting/Localizations/Account Charts",
    "license": "LGPL-3",
    "depends": [
        "account",
        # "l10n_multilang",
    ],
    "data": [
        # Chart of Accounts
        "data/account_chart_template_data.xml",
        "data/account_account_tag_data.xml",
        "data/account.account.template.csv",
        "data/account.group.template.csv",

        # Taxes
        "data/account_tax_group_data.xml",
        "data/account_tax_report_data.xml",
        "data/account_tax_template_data.xml",
        "data/account_fiscal_position_template_data.xml",
        "data/account_account_template_post_data.xml",

        "data/account_chart_post_data.xml",
        "data/account_chart_template_try_loading.xml",

        # Views and others
        "views/xxxmodel_views.xml"
    ],
    "demo": [
        "demo/demo_company.xml",
    ]
}

在第一个文件 data/account_chart_template_data.xml 中,我们设置科目表的名称及一些基本字段。

更多内容

科目表模板参考

Note

推荐该记录的 xmlid 为 chart_template。如果需要多个科目表,可以添加一些后缀,例如 chart_template_XXX。

会计科目表

科目标签

更多内容

科目标签参考

标签是对科目进行分类的一种方式。例如,假设您想创建一份包含多个行的财务报表,但无法找到根据科目的 code 来分配科目的规则。解决方案就是使用标签:为每个报表行设置一个标签,以便按您想要的方式筛选科目。

将标签放入 data/account_account_tag_data.xml 文件中。

科目

显然,会计科目表 不能脱离 科目 而存在。您需要在 data/account.account.template.csv 中指定它们。

首选 CSV 格式,但您也可以改用 XML 格式。

Warning

  • 避免使用流动性类的 account.account.type!实际上,银行与现金账户会在安装本地化模块时直接创建,之后再关联到某个 account.journal。

  • 对于通用情况,只需一个应付/应收类型的科目就足够了。不过,我们还需要定义一个 PoS 应收科目。(在会计科目表中关联)

  • 不要创建太多科目:200-300 个就足够了。但主要是要找到一个良好的平衡,使会计科目表在之后对大多数公司只需最少的调整。

科目表的后续设置在单独的文件中完成,因为我们需要先提供一份 科目列表。在 data/account_chart_post_data.xml 中,我们设置一些默认科目:

科目组

更多内容

科目组参考

科目组可用于描述会计科目表的层级结构。需要在报表中激活筛选器,当您展开至日记账分录时,它将显示该科目的上级科目。

它按 start/end 前缀工作:凡是科目编码以 start 与 end 之间的内容开头的科目,都会将该 account.group 作为父级组。此外,科目组还可以拥有父科目组,从而形成层级结构。

税项

更多内容

添加税之前需要先指定税组。通常每个税率只需一个税组,但 0% 税率例外,因为往往需要区分免税、0%、非应税等税种。该模型只有两个必填字段:name 和 country。创建 data/account_tax_group_data.xml 文件并列出各税组:

<odoo>
    <data noupdate="1">
        <record id="tax_group_tva_0" model="account.tax.group">
            <field name="name">TVA 0%</field>
            <field name="country_id" ref="base.ch"/>
        </record>

        ...
    </data>
</odoo>

现在您可以通过 data/account_tax_template_data.xml 文件添加税。您定义的第一项采购/销售税也会成为产品的默认采购/销售税。

如果某些科目需要使用默认税,可以在 data/account_account_template_post_data.xml 中设置。

税务报表

Enterprise feature

税务报表在 开票 (account)应用中声明,但只有在安装了 会计 (account_accountant)后才能访问该报表。

在上一节中,您注意到了 invoice_repartition_line_ids 或 refund_repartition_line_ids 字段,并且可能对它们一无所知。好消息是:对这一点感到困惑的不止您一个人。坏消息是:您必须稍微弄清它。这个话题很复杂。确实如此:

accounting_localization/tax_report.dot
> Graph not rendered because `dot` is not installed

简单来说,在税项模板中,您在发票/退款分摊行中指明是按基数还是按税的某个百分比、需要计入哪个报表行(通过 minus/plus_report_line_ids 字段)。当您在 Odoo 界面中检查税项配置时(或查看文档 税项参考、税项分摊参考),这一点也会变得清楚。

因此,一旦正确配置了税项,您只需添加 data/account_tax_report_data.xml 文件,并为您的 account.report 添加一条记录。要使其被视为税务报表,您需要为其提供正确的 root_report_id。

<odoo>
    <record id="tax_report" model="account.report">
        <field name="name">Tax Report</field>
        <field name="root_report_id" ref="account.generic_tax_report"/>
        <field name="country_id" ref="base.XX"/>
    </record>

    ...
</odoo>

……随后声明其各行,作为 account.report.line 记录。

税务规则

请在 data/account_fiscal_position_template_data.xml 文件中指定税务位置。

最后步骤

安装本地化模块的最后一步,是尝试将其科目表应用到当前公司(如果该公司尚无科目表)。该工作由 data/account_chart_template_try_loading.xml 文件负责。

最后,您可以添加一个演示公司,以便在演示模式下轻松测试本地化。

财务报表

Enterprise feature

更多内容

财务报表

会计报表应通过独立模块 l10n_XX_reports 添加,该模块应放入 企业版代码仓库。

此类模块的基本 __manifest__.py 文件如下所示:

{
    "name": "COUNTRY - Accounting Reports",
    "category": "Accounting/Localizations/Reporting",
    "version": "1.0.0",
    "license": "OEEL-1",
    "depends": [
        "l10n_XX", "account_reports"
    ],
    "data": [
        "data/balance_sheet.xml",
        "data/profit_and_loss.xml",
    ],
    "auto_install": True,
}

财务报表的功能概述见此处:财务报表。

一些不错的示例:

您可以在此处查看字段的含义:

如果为您的报表指定了 root_report_id,那么它现在会出现在其变体选择器中。如果没有指定,您仍需为其添加菜单项。可以在报表的表单视图中点击 操作 ‣ 创建菜单项 来创建默认菜单项。之后您需要刷新页面才能看到它。或者,要在 报表 菜单中为全新的报表创建专用分区,您需要创建一个新的 ir.ui.menu 记录(通常在主要的 l10n_XX 模块中)和一个新的 ir.actions.client (通常在新的报表 XML 文件中),以使用新的 报表 ID 调用 account.report。然后,在动作模型中把新菜单设置为 parent_id 字段。