自定义报告

Odoo comes with a powerful and easy-to-use reporting framework. The engine allows you to create new reports, such as tax reports, or balance sheets and income statements with specific groupings and layouts.

重要

Activate the developer mode to access the accounting report creation interface.

To create a new report, open the Accounting app and navigate to Configuration ‣ Accounting Reports. From here, you can either create a root report or a variant.

根报告

根报告可被视为通用的、中立的会计报告。它们是建立本地会计版本的模型。如果一个报告没有根报告,那么它本身就被视为根报告。

Example

比利时和美国的税务报告都将以相同的通用版本为基础,并根据其本地法规进行调整。

When creating a new root report, you need to create a menu item for it. To do so, open the report and, on that same report, click the (Actions) icon, then select Create Menu Item. Refresh the page; the report is now available under Accounting ‣ Reporting.

注解

需要创建新的根报告的情况很少见,例如当一个国家/地区的税务机构要求一种新的特定类型的报告时。

变体

变体是根报告的特定国家/地区版本,因此总是引用根报告。要创建变体,请在创建新报告时在 根报告 字段中选择通用(根)报告。

When a root report is opened from one of the accounting app’s main menus, all its variants are displayed in the variant selector in the top right corner of the view.

Example

In the following image, VAT Report (BE) is the variant of the root Generic Tax report.

报表行

创建报表(根报表或变体)后,您需要为其填充报表行。您可以点击添加行创建新行,或点击现有报表行进行修改。所有报表行都必须名称,如果您希望在公式中使用其值,还可以选择添加代码(由您自行选择)。

引擎行选项。

表达式

每个报表行可以包含一个或多个表达式。表达式可以视为报表行所需的子变量。要创建表达式,请在报表行点击添加行

创建表达式时,您必须指定用于引用该表达式的标签。因此,它在每行的表达式中必须是唯一的。还必须指定计算引擎公式引擎定义如何解释您的公式子公式。如果需要,可以在同一行下混合使用不同计算引擎的表达式。

注解

根据引擎的不同,可能还需要 子公式

“Odoo 域”引擎

使用此引擎时,公式会被解释为针对 account.move.line 对象的Odoo 域

子公式允许您定义如何使用与域匹配的移动行来计算表达式的值:

总额

结果是匹配移动线路的所有余额之和。

sum_if_pos

如果结果为正数,则为匹配移动行的所有余额之和。否则,结果为`0`。

sum_if_neg

如果结果为负数,传回所有相符分录资料行的余额之和。否则,传回 0

count_rows

结果是此表达式的子行数。如果报表行有分组值,这将对应于匹配的移动行中不同分组键的数量。否则,将是匹配的移动行数量。

您还可以在子公式开头添加 - 符号来反转结果的符号。

资料行报告中的表达式资料行

“税务标签”引擎

为此引擎制作的公式包含用于匹配税务标签的名称。如果在创建表达式时此类标签不存在,则会创建它们。

在评估表达式时,表达式计算可大致表示为:(带有 + 标记的分录资料行数目)**`-` **(带有 - 标记的分录资料行数目)

Example

如果公式是 tag_name,引擎会匹配税务标签 +tag_name-tag_name,必要时创建它们。进一步举例说明:公式匹配两个标签。如果公式是 A,它将需要(并在需要时创建)标签 +A-A

“聚合其他公式”引擎

当您需要对其他表达式获得的金额执行算术运算时,请使用此引擎。此处的公式由通过四个基本算术运算符之一(加法 +、减法 -、除法 / 和乘法 *)分隔的表达式引用组成。要引用表达式,请输入其报表行的代码,然后输入句点 . 和表达式的标签(例如code.label)。

**子公式**可以是以下其中之一:

if_above(CUR(amount))

只有当算术表达式的值大于所提供的界限时,才会返回该值。否则,结果将是 0

if_below(CUR(amount))

只有当算术表达式的值小于所提供的界限时,才会返回该值。否则,结果将为 0

if_between(CUR1(amount1), CUR2(amount2))

只有当算术表达式的值严格位于所提供的界限之间时,才会返回该值。否则,将返回最接近的界限。

if_other_expr_above(LINE_CODE.EXPRESSION_LABEL, CUR(amount))

只有当所提供的行代码和表达式标签所表示的表达式值大于所提供的界限时,才会返回算术表达式的值。否则,结果将为 0

if_other_expr_below(LINE_CODE.EXPRESSION_LABEL, CUR(amount))

只有当所提供的行代码和表达式标签所表示的表达式值小于所提供的界限时,才会返回算术表达式的值。否则,结果将为 0

CUR 是大写的货币代码,amount 是以该货币表示的绑定金额。

cross_report(xml_id | report_id)

此方法用于匹配通过 xml_id 或报告ID本身指定的、来自另一报告的表达式。

“科目代码前缀”引擎

此引擎用于匹配在科目上产生的金额,使用这些科目代码的前缀作为算术表达式中的变量。

Example

21
算术表达式也可以是一个前缀,如此处。

Example

21 + 10 - 5
该公式将代码以 2110 开头的账户内的分录资料行数额相加,然后减去代码以 `5`开头的账户内的分录资料行数额。

也可以忽略选定的子前缀。

Example

21 + 10\(101, 102) - 5\(57)
该公式的运作方式与上一示例相同,但不会考虑前缀 10110257

您可以使用后缀 `C`(贷) 和 `D`(借) 对**贷记和借记**进行“子筛选”。在这种情况下,只有账户的前缀匹配,且该账户内的分录资料行的总余额为**贷记/借记**时,才会考虑该账户。

Example

账户 210001 余额为 -42,账户 210002 余额为 25。公式 21D 只与账户 210002 匹配,因此返回 25。210001 不匹配,因为其余额为*贷方*。

前缀排除可与`C`和`D`后缀混合使用。

Example

21D + 10\(101, 102)C - 5\(57)
该公式会将代码字首为 21 的分录资料行金额(*如果*金额属借方,即 D)以及字首为 10 的分录资料行金额(*如果*金额属贷方,即 C)相加,但不会考虑字首 101102 的账户,然后减去字首为 5 的账户的金额,但不会考虑字首 57 的账户。

要匹配前缀中的字母 CD,但不将其用作后缀,请使用空排除项 ()

Example

21D\()
该公式匹配以`21D`开头的账户,不论其余额正负。

除了使用代码前缀来包含账户外,还可以用**账户标记**来匹配它们。举例来说,如果你所在的国家没有标准化的会计科目表,那么相同的前缀在不同的公司可能会有不同的用途,这个方法就特别有用。

Example

tag(25)
此公式匹配其关联标签包含 id 为25的标签的科目。

如果您引用的标签在数据文件中定义,则可以使用 xmlid 代替 id。

Example

tag(my_module.my_tag)
该公式匹配的账户,其关联标记包括 my_module.my_tag 所表示的标记。

您还可以将算术表达式与标记一起使用,也可以将其与前缀选择相结合。

Example

tag(my_module.my_tag) + tag(42) + 10
标记为 my_module.my_tag 的账户余额将与 ID 为 42 的标记所链接的账户余额以及代码前缀为`10`的账户余额相加。

后缀 CD 的使用方法与标签相同。

Example

tag(my_module.my_tag)C
该公式可匹配带有 my_module.my_tag 标记和贷方余额的账户。

前缀排除也适用于标签。

Example

tag(my_module.my_tag)\(10)
该公式匹配标记为 my_module.my_tag 和代码不是以 10 开头的账户。

“外部值”引擎

“外部值”引擎用于引用手动结转值。这些值不是使用 account.move.line 存储的,而是使用 account.report.external.value 存储的。这些对象中的每一个都直接指向它影响的表达式,因此在这里关于其选择需要做的工作很少。

**公式**可以是以下之一:

总额

如果结果必须是该周期内所有外部值的总和。

most_recent

如果结果必须是该周期内最新外部值的值。

此外,**子公式**有两种使用方法:

舍入=X

X 替换为数字,表示将金额四舍五入到小数点后 X 位。

可编辑

表示可以手动编辑该表达式,从而在报告中显示一个图标,允许用户执行该操作。

注解

手动值在报告中当前选择的 date_to 处创建。

这两个子公式可以混合使用,方法是用 ; 分隔。

Example

editable;rounding=2
是混合两种行为的正确子公式。

「自訂 Python 函數」引擎

此引擎是開發人員根據具體情況引入自訂運算式計算的一種方式。公式是要呼叫的Python 函數名稱,而子公式是要從該函數返回的字典中提取的。僅當您正在製作自己的自訂模組時才使用它。

报表可显示的列数**无限**。每列会从**资料行**上宣告的**表达式**获取数值。该列的 expression_label 字段给出了显示其值的表达式的标签。如果资料行在某字段中没有**表达式**,该行在此列的位置便不会显示任何内容。如果需要多个列,必须使用不同的**表达式**标签。

报告栏。

在会计报告的 选项 分页选用**期间比较**功能时,所有列都会在每个期间内,为每个期间重复显示。

行分组

通过在*日记账项目*模型上添加或使用现有字段(前提是这些字段是关联且非存储的),可以实现非标准分组。

注解

对行进行分组要求报告具有可编辑的显式报告行。例如,延迟报告不支持行分组,因为它们使用的是动态生成的行。

在日记账项目上创建新字段

要在*日记账项目*模型中创建一个非存储的关联字段,首先请前往 会计 ‣ 日记账项目,点击 (bug) 图标,然后点击 字段。点击 :guilabel:`新建`以创建新字段,并填写以下字段:

  • 字段名称:字段的技术名称

  • 字段标签:字段显示的标签

  • 字段类型:此关联字段应指向的字段类型

  • 已存储:请勿勾选此字段,因为只有非存储字段才能用于对行进行分组。

  • 关联模型:如果字段类型是 一对多多对多多对一,请选择要按其分组的原始字段所属的模型。

  • 关联字段定义:要按其分组的字段的技术路径

    Example

    例如,要按商业伙伴的销售团队进行分组,请将关联字段定义设置为`move_id.team_id`。

对行进行分组

要對行進行分組,請前往所需報表的分頁,點擊要分組的行,然後編輯分組依據欄位。輸入要用作分組鍵的欄位的技術名稱(欄位名稱)。

小技巧

要查找模型所有字段及其技术名称的列表,请前往 会计 ‣ 日记账项目,点击 (bug)`图标,然后点击 :guilabel:`字段。每个字段的技术名称列在 :guilabel:`字段名称`列中。

自訂稅務報表設定

報表配置

小技巧

Odoo 報表引擎的所有技術術語和功能已在本頁前面的章節中說明。我們強烈建議在設定自訂稅務報表之前閱讀這些章節。

要建立自訂稅務報表,請開啟會計應用程式,導航至配置 ‣ 會計報表,然後點擊新建

  • 為您的報表輸入名稱

  • 選擇根報表

  • 可用性欄位下,選擇匹配國家,然後選擇與您公司匹配的國家

接下來,點擊新增行建立報表行。建立後,點擊該報表行進行配置:

  • 再次點擊新增行以建立運算式並為其命名。

  • 定義分頁中,根據以下情況為該運算式選擇計算引擎

在此情況下,您的公司使用稅務格:

  • 選擇稅務標籤作為計算引擎。Odoo 使用此欄位將報表行連結到您的稅務。

  • 公式欄位中,輸入您的簡短格識別碼(例如 vat_sales_base)。Odoo 會自動為您生成此標籤的 +- 變體,供您在配置 ‣ 稅務內映射。

  • 子公式欄位中,輸入 base 以報告未稅金額,或輸入 tax 以報告實際徵收/支付的稅額。

根據需要重複此過程。然後點擊儲存並關閉

或者,您可以:

  • 选择聚合其他公式作为计算引擎。Odoo 使用此字段对报表中已存在的行执行数学运算,而不是扫描原始交易。

  • 公式字段中,使用引用行代码的基本代数(例如,LINE_10 - LINE_20)。

根據需要重複此過程。然後點擊儲存並關閉

表达式选项标签中,使用公式填充结转至字段,以始终结转余额或仅在金额为负数时结转余额。如果您不想使用此功能,请将此字段留空。

Example

if_below(EUR(0))
此公式仅结转低于 0.00 欧元的金额。

税务配置

接下来,前往Configuration ‣ Taxes并点击New以创建并configure new taxes用于您的自定义税务报表。创建您的销售采购税,并使用您之前创建的匹配税网格填充所有税的Tax Grids。最后,确保为每个税specify both a tax payable and tax receivable account

Example

税网格配置。

结账分录

要关闭税,必须在自定义税务报表中使用的每个税上指定tax group。为此,请打开Accounting应用,导航至Configuration ‣ Taxes,打开需要税组的税,点击Advanced Options选项卡,然后在Tax Group字段中选择一个组。分配后,点击(right arrow)图标,并设置Tax Payable AccountTax Receivable Account

小技巧

  • 当一切都设置好后,请确保通过创建使用该报表特定税的发票、账单和信用票据来测试您的报表。最后,测试结账分录本身。

  • 如果您想隐藏特定账户使其不在税务结账分录中显示,请前往Configuration ‣ Taxes,选择税,然后点击(settings adjust)图标。从那里,勾选Tax Closing Entry框以调整其可见性。

其他资料

Tax closing