自定义报告¶
Odoo 提供了一个强大且易于使用的报表框架。该引擎允许您创建新的报表,例如 税务报表 ,或者具有 特定分组 和 布局 的 资产负债表 和 利润表 。
重要
激活 开发者模式 以访问会计报告创建界面。
根报告¶
根报表可以被视为通用的、中立的会计报表。它们作为本地会计版本构建的模型。如果一个报表没有根报表,那么它本身就被视为根报表。
Example
比利时和美国的税务报告都将使用相同的通用版本作为基础,并根据各自的国内法规进行调整。
创建新的根报表时,您需要为其创建一个 菜单项 。要这样做,请打开报表,然后在同一报表上单击
。刷新页面;报表现在可以在 下使用。注解
需要创建新的根报告的情况很少见,例如当一个国家的税务机关需要一种新的特定类型的报告时。
变体¶
变体是根报告的特定于国家的版本,因此始终参考根报告。要创建一个变体,在创建新报告时,在 Root Report 字段中选择一个通用(根)报告。
当从会计应用程序的主菜单之一打开根报告时,所有变体都会显示在视图右上角的变体选择器中。
Example
在下面的图像中, VAT Report (BE) 是根 Generic Tax report 的变体。
行¶
在创建报表(根报表或变体报表)后,您需要填充它的行。您可以通过单击 添加行 来创建新行,或者通过单击现有行来修改。所有行都 需要 一个 名称 ,并且可以选择性地添加一个 代码 (您自己选择的代码),如果您希望在公式中使用它们的值。
表达式¶
每一行可以包含一个或多个 表达式。表达式可以看作是报表行所需的 子变量。要创建表达式,请点击行报表 内部 的 添加一行。
创建表达式时,必须为其指定一个用于引用该表达式的 label 。因此,它必须在每行的表达式中是 唯一 的。还必须指定 Computation Engine 和 Formula 。 engine 定义了如何解释您的 formula(s) 和 subformula(s) 。如果需要,可以在同一行中混合使用不同的计算引擎来进行表达式。
注解
根据引擎的不同, 子公式 也可能是必需的。
‘Odoo Domain’ 引擎¶
使用此引擎,公式将被解释为一个 Odoo domain,目标是 account.move.line
对象。
子公式允许您定义匹配域的移动行如何用于计算表达式的值:
sum
结果是匹配的账户行的所有余额之和。
sum_if_pos
结果是匹配的会计分录余额的总和,如果这个金额是正数。否则,它是
0
。sum_if_neg
结果是匹配的会计分录余额的总和,如果这个金额是负数。否则,它是
0
。count_rows
结果是此表达式的子行数。如果父行具有分组值,则这将对应于匹配的移动行中不同分组键的数量。否则,它将是匹配的移动行数。
您还可以在子公式的开头加上 -
符号来 反转 结果的符号。
‘聚合其他公式’ 引擎¶
当您需要对其他表达式获得的金额执行算术运算时,请使用此引擎。此处的公式由对表达式的引用组成,这些引用通过四种基本算术运算符(加法 +
、减法 -
、除法 /
和乘法 *
)分隔。要引用表达式,请输入其父行的 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
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
21
开头的移动行余额相加 如果 是借方 (D
),以 10
开头的移动行余额相加 如果 是贷方 (C
),但忽略前缀 101
、102
,并减去账户前缀为 5
的移动行余额,忽略前缀 57
。要匹配前缀中的字母 C
或 D
并且不将其用作后缀,请使用空的排除 ()
。
Example
21D\()
21D
开头的账户,无论其余额符号如何。除了使用代码前缀来包含账户外,您还可以通过 账户标签 来匹配它们。这在某些情况下尤其有用,例如,如果您的国家缺乏标准化的会计科目表,相同的代码前缀可能会在不同公司中被用于不同的用途。
Example
tag(25)
如果您引用的标记是在数据文件中定义的,则可以使用 xmlid 代替 id。
Example
tag(my_module.my_tag)
您还可以将算术表达式与标记一起使用,也可以将其与前缀选择相结合。
Example
tag(my_module.my_tag) + tag(42) + 10
后缀 C
和 D
的使用方法与标签相同。
Example
tag(my_module.my_tag)C
前缀排除也适用于标签。
Example
tag(my_module.my_tag)\(10)
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 字段给出了显示的表达式的标签。如果一行在该字段中没有 表达式 ,则该列中不显示任何内容。如果需要多个列,必须使用不同的 表达式 标签。
当使用会计报表的 期间比较 功能时,在 选项 选项卡下,所有列都会在每个期间中重复显示。