财务本地化¶
警告
本教程要求您了解如何在 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",
],
"data": [
"data/other_data.xml",
"views/xxxmodel_views.xml",
],
"demo": [
"demo/demo_company.xml",
]
}
您的工作树应如下所示
l10n_xx
├── data
│ ├── template
│ │ ├── account.account-xx.csv
│ │ ├── account.group-xx.csv
│ │ └── account.tax.group-xx.csv
│ └── other_data.xml
├── views
│ └── xxxmodel_views.xml
├── demo
│ └── demo_company.xml
├── models
│ ├── template_xx.py
│ └── __init__.py
├── __init__.py
└── __manifest__.py
在第一个文件 models/template_xx.py 中,我们设置了会计科目表的名称以及一些基本字段。
更多内容
会计科目表¶
科目¶
显然,会计科目表 不能脱离 科目 而存在。您需要在 data/account.account.template.csv 中指定它们。
警告
避免使用
asset_cash这种account_type!实际上,银行和现金科目是在安装本地化模块时直接创建的,之后会链接到account.journal。对于通用情况,只需一个应付/应收类型的科目就足够了。不过,我们还需要定义一个 PoS 应收科目。(在会计科目表中关联)
不要创建太多科目:200-300 个就足够了。但主要是要找到一个良好的平衡,使会计科目表在之后对大多数公司只需最少的调整。
科目父级¶
科目父级可用于描述会计科目表的层级结构。需要在报表中启用 Subtotal 筛选器,之后它就会显示科目的父级。
税项¶
要添加税,首先需要指定财务位置和税组。通常每个税率只需一个税组,但 0% 除外,因为经常需要区分免税、0%、不征税等不同类型的税。该模型只有两个必填字段:name 和 country。创建 data/template/account.tax.group-xx.csv 文件并列出这些税组。
税至少应属于一个财务位置,但可以由多个财务位置共享。如果你希望该税由所有财务位置共享,请将该字段留空。
现在您可以通过 data/template/account.tax-xx.csv 文件添加税项。您定义的第一个采购/销售税项也将成为您产品的默认采购/销售税项。
一项税也可以替代另一项税。当使用目标财务位置时,此替代就会生效。
税务报表¶
税务报表在 开票 (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/template/account.fiscal.position-xx.csv 文件中指定财务位置。第一个与公司国家匹配的财务位置被视为国内财务位置。
最后步骤¶
最后,您可以添加一个演示公司,以便在演示模式下轻松测试本地化。
财务报表¶
更多内容
会计报表应通过单独的 l10n_XX_reports 模块添加,该模块应放入 Enterprise 代码仓库。
此类模块的基本 __manifest__.py 文件如下所示:
{
"name": "COUNTRY - Accounting Reports",
"category": "Accounting/Localizations/Reporting",
"version": "1.0.0",
"author": "Odoo S.A.",
"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 字段。