自定义报告

Odoo 提供了一个强大且易于使用的报表框架。该引擎允许您创建新的报表,例如 税务报表 ,或者具有 特定分组布局资产负债表利润表

重要

激活 开发者模式 以访问会计报告创建界面。

要创建新报告,请转到 会计 ‣ 配置 ‣ 管理:会计报告。从这里,您可以创建 一个 根报告 或一个 变体

会计报告引擎。

根报告

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

Example

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

创建新的根报表时,您需要为其创建一个 菜单项 。要这样做,请打开报表,然后在同一报表上单击 操作 ‣ 创建菜单项 。刷新页面;报表现在可以在 会计 ‣ 报告 下使用。

注解

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

创建菜单项按钮。

变体

变体是根报告的特定于国家的版本,因此始终参考根报告。要创建一个变体,在创建新报告时,在 Root Report 字段中选择一个通用(根)报告。

当从会计应用程序的主菜单之一打开根报告时,所有变体都会显示在视图右上角的变体选择器中。

Example

在下面的图像中, VAT Report (BE) 是根 Generic Tax report 的变体。

报告变体选择。

在创建报表(根报表或变体报表)后,您需要填充它的行。您可以通过单击 添加行 来创建新行,或者通过单击现有行来修改。所有行都 需要 一个 名称 ,并且可以选择性地添加一个 代码 (您自己选择的代码),如果您希望在公式中使用它们的值。

发动机线路选项。

表达式

每一行可以包含一个或多个 表达式。表达式可以看作是报表行所需的 子变量。要创建表达式,请点击行报表 内部添加一行

创建表达式时,必须为其指定一个用于引用该表达式的 label 。因此,它必须在每行的表达式中是 唯一 的。还必须指定 Computation EngineFormulaengine 定义了如何解释您的 formula(s)subformula(s) 。如果需要,可以在同一行中混合使用不同的计算引擎来进行表达式。

注解

根据引擎的不同, 子公式 也可能是必需的。

‘Odoo Domain’ 引擎

使用此引擎,公式将被解释为一个 Odoo domain,目标是 account.move.line 对象。

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

sum

结果是匹配的账户行的所有余额之和。

sum_if_pos

结果是匹配的会计分录余额的总和,如果这个金额是正数。否则,它是 0

sum_if_neg

结果是匹配的会计分录余额的总和,如果这个金额是负数。否则,它是 0

count_rows

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

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

在行报告中的表达式行

‘税标签’ 引擎

此引擎的公式由用于匹配税务标签的名称组成。如果在创建表达式时不存在这些标签,它们将被创建。

在评估表达式时,表达式的计算可以粗略地表示为: (带有 + 标签的移动行的金额) - (带有 - 标签的移动行的金额)

Example

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

‘聚合其他公式’ 引擎

当您需要对其他表达式获得的金额执行算术运算时,请使用此引擎。此处的公式由对表达式的引用组成,这些引用通过四种基本算术运算符(加法 +、减法 -、除法 / 和乘法 *)分隔。要引用表达式,请输入其父行的 code,后跟一个句点 . 和表达式的 label**(例如 **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 子公式来匹配在另一个报表中找到的表达式。

“科目代码前缀”引擎

此引擎用于使用这些账户代码的前缀作为算术表达式中的变量来匹配账户上的金额。

Example

21
算术表达式也可以是单个前缀,例如这里。

Example

需要翻译的内容是:
此公式将添加在以 2110 开头的账户上进行的会计分录的余额,并减去以 5 为前缀的账户上的余额。

还可以忽略一些子前缀的选择。

Example

21 + 10\(101, 102) - 5\(57)
这个公式的工作方式与前面的例子相同,但忽略了前缀 10110257

您可以使用 CD 后缀对 贷方和借方 应用 ‘子过滤’。在这种情况下,仅当账户的前缀匹配 该账户上的移动行总余额为 贷方/借方 时,才会考虑该账户。

Example

账户 210001 的余额为 -42,账户 210002 的余额为 25。公式 21D 只匹配账户 210002 ,因此返回 25。 210001 没有匹配到,因为它的余额是 贷方

前缀排除可以与 CD 后缀混合使用。

Example

需要翻译的内容是:
此公式将账户代码以 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 存储的。每个对象直接指向它所影响的表达式,因此在这里对它们的选择需要做很少的工作。

公式 可以是以下之一:

sum

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

most_recent

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

此外, 子公式 可以有两种使用方式:

rounding=X

X 替换为数字,指示将金额四舍五入到 X 个小数位。

editable

表示此表达式可以手动编辑,触发报表中的图标显示,允许用户执行此操作。

注解

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

通过使用 ; 将两个子公式分开,可以混合使用它们。

Example

editable;rounding=2
这是一个正确的子公式,结合了两种行为。

‘自定义 Python 函数’ 引擎

这个引擎是开发人员根据具体情况引入自定义计算表达式的一种方式。公式是要调用的 python函数 的名称,子公式是要在此函数返回的 字典 中获取的 。只有在制作自定义模块时才使用它。

列数

报告可以显示 无限数量 的列。每列从 上声明的 表达式 获取其值。列的 expression_label 字段给出了显示的表达式的标签。如果一行在该字段中没有 表达式 ,则该列中不显示任何内容。如果需要多个列,必须使用不同的 表达式 标签。

报告的列。

当使用会计报表的 期间比较 功能时,在 选项 选项卡下,所有列都会在每个期间中重复显示。