自定义报表¶
Odoo 配备了一个强大且易于使用的报表框架。该引擎允许您创建新的报表,例如 税务报表、资产负债表 和 损益表,并支持 特定的分组方式 和 布局设计。
重要
启用 开发者模式 以访问会计报表创建界面。

根报表¶
根报表可以被视为通用的、中性的会计报表。它们作为本地会计版本的基础模型。如果一个报表没有根报表,那么它本身就被视为根报表。
Example
比利时和美国的税务报告都将使用相同的通用版本作为基础,并根据各自的国内法规进行调整。
创建新根报表时,需要为其创建一个 菜单项。要执行此操作,请打开该报表,然后在该报表的同一页面上,点击
。刷新页面;现在该报表已出现在 下。注解
需要创建新根报告的情况很少,例如当某个国家的税务机关要求一种新的特定类型报告时。

变体¶
变体是根报表的国家特定版本,因此始终指向一个根报表。要创建变体,请在创建新报表时,在 根报表 字段中选择一个通用(根)报表。
当从会计应用的主要菜单中打开一个主报表时,所有相关的变体都会在视图右上角的变体选择器中显示。
Example
在下图中,增值税报告(比利时) 是根 通用税务报告 的变体。

行¶
在创建了报表(无论是主报表还是变体报表)之后,您需要为其添加行。您可以点击 添加一行 来创建新行,或者通过点击现有行来对其进行修改。所有行都 必须 包含一个 名称,如果您希望在公式中使用其值,还可以选择性地添加一个自定义的 代码。

表达式¶
每行可以包含一个或多个 表达式。表达式可以看作是报表行所需的 子变量。要创建一个表达式,请在报表行内点击 添加一行。
When creating an expression, you must attribute a label used to refer to that expression. Therefore, it has to be unique among the expressions of each line. Both a Computation Engine and a Formula must also be indicated. The engine defines how your formula(s) and subformula(s) are interpreted. It is possible to mix expressions using different computation engines under the same line if you need to.
注解
根据引擎的不同,可能还需要 子公式。
"Odoo 领域" 引擎¶
通过此引擎,公式会被解释为一个指向 account.move.line
对象的 Odoo 域。
子公式允许您定义如何使用与域匹配的分录行来计算表达式的值:
求和
结果是所有匹配分录行余额的总和。
满足条件的求和
结果是所有匹配分录行余额的总和,如果该金额为正数。否则,结果为
0
。求和如果为负
结果是所有匹配分录行余额的总和,如果该金额为负数。否则,结果为
0
。统计行数
结果是该表达式的子行数量。如果父行具有分组值,这将对应于匹配的会计分录行中不同分组键的数量。否则,这将是匹配的会计分录行的数量。
你也可以在子公式的开头添加一个 -
号,以**反转**结果的符号。

“其他公式”汇总引擎¶
在需要对其他表达式获得的金额执行算术运算时,请使用此引擎。此处的公式由用四种基本算术运算符(加法 +
、减法 -
、除法 /
和乘法 *
)分隔的表达式引用组成。要引用一个表达式,请在其父行的 代码 后面输入一个句点 .
,然后输入该表达式的 标签**(例如 **code.label)。
**子公式**可以是以下其中一种:
如果金额大于等于当前值
如果算术表达式的值大于提供的边界值,则将返回该值;否则,结果将为
0
。如果金额低于(CUR(金额))
如果算术表达式的值低于提供的上限,则会返回该值。否则,结果将为
0
。如果在(CUR1(金额1), CUR2(金额2))之间
如果算术表达式的值严格位于提供的边界范围内,将返回该值;否则,该值将被调整为最接近的边界值。
如果其他表达式在上方(LINE_CODE.表达式标签,当前(金额))
只有当由提供的行代码和表达式标签表示的表达式的值大于提供的边界值时,算术表达式的值才会被返回。否则,结果将为
0
。如果其他表达式在下方(LINE_CODE.EXPRESSION_LABEL, 当前金额)
只有当由提供的行代码和表达式标签所表示的表达式的值低于提供的边界值时,算术表达式的值才会被返回。否则,结果将为
0
。
CUR
是大写字母的货币代码,amount
是以该货币表示的金额。
你也可以使用 cross_report
子公式来匹配另一个报表中找到的表达式。
"账户代码前缀" 引擎¶
该引擎用于通过使用这些账户代码的前缀作为算术表达式中的变量,来匹配账户上的金额。
Example
21
Example
21 + 10 - 5
21
和 10
开头的会计分录的余额相加,并减去以 5
为前缀的会计分录的余额。也可以选择忽略一部分子前缀。
Example
21 + 10\(101, 102) - 5\(57)
101
、102
和 57
。你可以使用 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
)余额相加,但会忽略前缀为 101
和 102
的账户。同时,它会减去账户前缀为 5
的分录行的余额,并忽略前缀为 57
的账户。要在前缀中匹配字母 C
或 D
,并将其作为后缀使用,使用空的排除项 ()
。
Example
21D\()
21D
开头的账户,无论其余额符号如何。除了使用代码前缀来包含账户外,您还可以通过**账户标签**进行匹配。这在某些情况下特别有用,例如,如果您所在国家没有标准化的会计科目表,同一前缀可能在不同公司中用于不同的目的。
Example
标签(25)
如果所引用的标签是在数据文件中定义的,可以使用 xmlid 代替 id。
Example
标签(我的模块.我的标签)
你也可以使用带有标签的算术表达式,可能还会将它们与前缀选择结合使用。
Example
标签( my_module.my_tag ) + 标签(42) + 10
10
的账户余额相加。C
和 D
后缀可以与标签以相同的方式使用。
Example
标签(我的模块.我的标签)C
前缀排除也适用于标签。
Example
标签(我的模块.我的标签)
10
开头。“外部值”引擎¶
“外部值”引擎用于引用 手动 和 结转值。这些值不是通过 account.move.line
存储的,而是通过 account.report.external.value
存储的。每个此类对象直接指向它所影响的表达式,因此在此处对其选择所需做的工作非常少。
**公式**可以是以下其中一种:
求和
如果结果必须是该期间所有外部值的总和。
最近一次
如果结果必须是该期间最新外部值的值。
此外,**子公式**可以以两种方式使用:
四舍五入=X
将
X
替换为一个数字,表示将金额四舍五入到 X 位小数。可编辑
表示此表达式可以手动编辑,这将触发报表中图标的显示,使用户能够执行此操作。
注解
手动输入的值是在报告中当前选择的 date_to
日期创建的。
两个子公式可以通过用 ;
分隔进行混合。
Example
可编辑;四舍五入=2
“自定义 Python 函数”引擎¶
This engine is a means for developers to introduce custom computation of expressions on a case-by-case basis. The formula is the name of a python function to call, and the subformula is a key to fetch in the dictionary returned by this function. Use it only if you are making a custom module of your own.
列¶
Reports can have an indefinite number of columns to display. Each column gets its values from the expressions declared on the lines. The field expression_label of the column gives the label of the expressions whose value is displayed. If a line has no expression in that field, then nothing is displayed for it in this column. If multiple columns are required, you must use different expression labels.

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