自由定制报告¶
Odoo 提供强大且易用的报表框架。该引擎允许您创建新报表,例如 税务报表,或具有 特定分组 和 布局 的 资产负债表 和 损益表。
重要
激活 开发者模式 以访问会计报表创建界面。
根报告¶
根报告可被视为通用的、中立的会计报告。它们是建立本地会计版本的模型。如果一个报告没有根报告,那么它本身就被视为根报告。
示例
比利时和美国的税务报告都将以相同的通用版本为基础,并根据其本地法规进行调整。
创建新的根报表时,您需要为其创建 菜单项。为此,请打开该报表,并在同一报表上点击 (操作) 图标,然后选择 创建菜单项。刷新页面后,该报表即可在 下使用。
注解
需要创建新的根报告的情况很少见,例如当一个国家/地区的税务机构要求一种新的特定类型的报告时。
变体¶
变体是根报告的特定国家/地区版本,因此总是引用根报告。要创建变体,请在创建新报告时在 根报告 字段中选择通用(根)报告。
从会计应用的任一主菜单打开根报表时,其所有变体都会显示在视图右上角的变体选择器中。
示例
在下图中,VAT Report (BE) 是根报表 通用税务报表 的变体。
报表行¶
创建报表(根报表或变体)后,您需要为其填充报表行。您可以点击添加行创建新行,或点击现有报表行进行修改。所有报表行都必须有名称,如果您希望在公式中使用其值,还可以选择添加代码(由您自行选择)。
表达式¶
每个报表行可以包含一个或多个表达式。表达式可以视为报表行所需的子变量。要创建表达式,请在报表行内点击添加行。
创建表达式时,您必须指定用于引用该表达式的标签。因此,它在每行的表达式中必须是唯一的。还必须指定计算引擎和公式。引擎定义如何解释您的公式和子公式。如果需要,可以在同一行下混合使用不同计算引擎的表达式。
注解
根据引擎的不同,可能还需要 子公式 。
“Odoo 域”引擎¶
使用此引擎时,公式会被解释为针对 account.move.line 对象的Odoo 域。
子公式允许您定义如何使用与域匹配的移动行来计算表达式的值:
总额结果是匹配移动线路的所有余额之和。
sum_if_pos如果结果为正数,则为匹配移动行的所有余额之和。否则,结果为
0。sum_if_neg如果结果为负数,传回所有相符分录资料行的余额之和。否则,传回
0。count_rows结果是此表达式的子行数。如果报表行有分组值,这将对应于匹配的移动行中不同分组键的数量。否则,将是匹配的移动行数量。
您还可以在子公式开头添加 - 符号来反转结果的符号。
“聚合其他公式”引擎¶
当您需要对其他表达式获得的金额执行算术运算时,请使用此引擎。此处的公式由通过四个基本算术运算符之一(加法 +、减法 -、除法 / 和乘法 *)分隔的表达式引用组成。要引用表达式,请输入其报表行的代码,然后输入句点 . 和表达式的标签(例如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[, force_date_scope])匹配由 xml_id 或报表 ID 本身所指向的另一报表中的表达式。如果添加了
force_date_scope,则将使用该表达式上定义的 日期范围 来计算公式所使用的所有表达式。
“科目代码前缀”引擎¶
此引擎用于匹配在科目上产生的金额,使用这些科目代码的前缀作为算术表达式中的变量。
示例
21示例
21 + 10 - 521 和 10 开头的账户内的分录资料行数额相加,然后减去代码以 5 开头的账户内的分录资料行数额。也可以忽略选定的子前缀。
示例
21 + 10\(101, 102) - 5\(57)101 、102 和 57 。您可以使用后缀 C (贷) 和 D (借) 对 贷记和借记 进行“子筛选”。在这种情况下,只有账户的前缀匹配,且该账户内的分录资料行的总余额为 贷记/借记 时,才会考虑该账户。
示例
账户 210001 余额为 -42,账户 210002 余额为 25。公式 21D 只与账户 210002 匹配,因此返回 25。210001 不匹配,因为其余额为 贷方 。
前缀排除可与 C 和 D 后缀混合使用。
示例
21D + 10\(101, 102)C - 5\(57)21 的分录资料行金额(如果 金额属借方,即 D)以及字首为 10 的分录资料行金额(如果 金额属贷方,即 C)相加,但不会考虑字首 101 、102 的账户,然后减去字首为 5 的账户的金额,但不会考虑字首 57 的账户。要匹配前缀中的字母 C 或 D ,但不将其用作后缀,请使用空排除项 () 。
示例
21D\()21D 开头的账户,不论其余额正负。除了使用代码前缀来包含账户外,还可以用 账户标记 来匹配它们。举例来说,如果你所在的国家没有标准化的会计科目表,那么相同的前缀在不同的公司可能会有不同的用途,这个方法就特别有用。
示例
tag(25)如果您引用的标签在数据文件中定义,则可以使用 xmlid 代替 id。
示例
tag(my_module.my_tag)您还可以将算术表达式与标记一起使用,也可以将其与前缀选择相结合。
示例
tag(my_module.my_tag) + tag(42) + 1010 的账户余额相加。后缀 C 和 D 的使用方法与标签相同。
示例
tag(my_module.my_tag)C前缀排除也适用于标签。
示例
tag(my_module.my_tag)\(10)10 开头的账户。“外部值”引擎¶
“外部值”引擎用于引用手动和结转值。这些值不是使用 account.move.line 存储的,而是使用 account.report.external.value 存储的。这些对象中的每一个都直接指向它影响的表达式,因此在这里关于其选择需要做的工作很少。
公式 可以是以下之一:
总额如果结果必须是该周期内所有外部值的总和。
most_recent如果结果必须是该周期内最新外部值的值。
此外, 子公式 有两种使用方法:
舍入=X将
X替换为数字,表示将金额四舍五入到小数点后 X 位。可编辑表示可以手动编辑该表达式,从而在报告中显示一个图标,允许用户执行该操作。
注解
手动值在报告中当前选择的 date_to 处创建。
这两个子公式可以混合使用,方法是用 ; 分隔。
示例
editable;rounding=2「自訂 Python 函數」引擎¶
此引擎是開發人員根據具體情況引入自訂運算式計算的一種方式。公式是要呼叫的Python 函數名稱,而子公式是要從該函數返回的字典中提取的鍵。僅當您正在製作自己的自訂模組時才使用它。
日期筛选¶
默认情况下,为每个表达式计算的值会将其考虑的日记账项目限制为严格位于报表所选区间内的项目。如需更改此行为,请修改该表达式的 日期范围 字段。
列¶
报表可显示的列数 无限 。每列会从 资料行 上宣告的 表达式 获取数值。该列的 expression_label 字段给出了显示其值的表达式的标签。如果资料行在某字段中没有 表达式 ,该行在此列的位置便不会显示任何内容。如果需要多个列,必须使用不同的 表达式 标签。
在会计报告的 选项 分页选用 期间比较 功能时,所有列都会在每个期间内,为每个期间重复显示。
行分组¶
通过在 日记账项目 模型上添加或使用现有字段(前提是这些字段是关联且非存储的),可以实现非标准分组。
注解
对行进行分组要求报告具有可编辑的显式报告行。例如,延迟报告不支持行分组,因为它们使用的是动态生成的行。
在日记账项目上创建新字段¶
要在 日记账项目 模型中创建一个非存储的关联字段,首先请前往 ,点击 (bug) 图标,然后点击 字段 。点击 新建 以创建新字段,并填写以下字段:
字段名称 :字段的技术名称
字段标签 :字段显示的标签
字段类型 :此关联字段应指向的字段类型
已存储 :请勿勾选此字段,因为只有非存储字段才能用于对行进行分组。
关联模型 :如果字段类型是 一对多 、 多对多 或 多对一 ,请选择要按其分组的原始字段所属的模型。
关联字段定义 :要按其分组的字段的技术路径
示例
例如,要按商业伙伴的销售团队进行分组,请将关联字段定义设置为
move_id.team_id。
对行进行分组¶
要對行進行分組,請前往所需報表的行分頁,點擊要分組的行,然後編輯分組依據欄位。輸入要用作分組鍵的欄位的技術名稱(欄位名稱)。
小技巧
要查找模型所有字段及其技术名称的列表,请前往 ,点击 (bug) 图标,然后点击 字段 。每个字段的技术名称列在 字段名称 列中。
更多内容
自訂稅務報表設定¶
報表配置¶
小技巧
Odoo 報表引擎的所有技術術語和功能已在本頁前面的章節中說明。我們強烈建議在設定自訂稅務報表之前閱讀這些章節。
要建立自訂稅務報表,請開啟會計應用程式,導航至,然後點擊新建:
為您的報表輸入名稱。
選擇根報表。
在可用性欄位下,選擇匹配國家,然後選擇與您公司匹配的國家。
接下來,點擊新增行建立報表行。建立後,點擊該報表行進行配置:
再次點擊新增行以建立運算式並為其命名。
在定義分頁中,根據以下情況為該運算式選擇計算引擎:
在此情況下,您的公司使用稅務格:
選擇稅務標籤作為計算引擎。Odoo 使用此欄位將報表行連結到您的稅務。
在公式欄位中,輸入您的簡短格識別碼(例如
vat_sales_base)。Odoo 會自動為您生成此標籤的+和-變體,供您在內映射。在子公式欄位中,輸入
base以報告未稅金額,或輸入tax以報告實際徵收/支付的稅額。
根據需要重複此過程。然後點擊儲存並關閉。
或者,您可以:
选择聚合其他公式作为计算引擎。Odoo 使用此字段对报表中已存在的行执行数学运算,而不是扫描原始交易。
在公式字段中,使用引用行代码的基本代数(例如,
LINE_10 - LINE_20)。
根據需要重複此過程。然後點擊儲存並關閉。
在此场景中,您的公司不使用税务网格。相反,它严格通过总账科目跟踪所有内容:
选择科目代码前缀作为计算引擎:Odoo 将其用于需要提取财务总额的行。Odoo 不查找交易标签,而是直接从您的会计科目表中提取实时余额。
在公式字段中,输入要跟踪的科目的起始数字(例如,
40将提取所有以400000、401000等开头的收入科目的合计总额)。
根據需要重複此過程。然後點擊儲存並關閉。
或者,您可以:
选择聚合其他公式作为计算引擎。Odoo 使用它通过添加或减去其他报表行来计算小计、净税额或总计。
在公式字段中,使用引用行代码的基本代数(例如,
LINE_10 - LINE_20)。
根據需要重複此過程。然後點擊儲存並關閉。
在此场景中,您的公司需要高级过滤、手动用户覆盖或标准标签和科目前缀无法处理的复杂算法逻辑:
选择Odoo 域作为计算引擎:Odoo 使用它完全绕过税务标签,并使用标准 Odoo 搜索语法过滤原始日记账分录(
account.move.line)。在公式字段中,输入以方括号开头的有效域,以隔离特定合作伙伴类别的免税交易。
或者,您可以:
选择外部值作为计算引擎。Odoo 使用它记录手动覆盖或历史结转值。
在公式字段中,输入
sum(在多期间报表中将所有手动值相加)或most_recent(仅显示最新值)。在子公式字段中,输入
editable以在实时报表上显示编辑图标,允许用户手动修改值。此外,您可以通过输入rounding=x来舍入数字。
或者,您可以:
选择自定义 Python 函数作为计算引擎。当规则涉及累进档次、循环或多层阈值时,Odoo 将其用作执行引擎,通过后端编码运行特定计算。
在公式字段中,输入自定义本地化模块中定义的 Python 方法的确切技术名称。
根據需要重複此過程。然後點擊儲存並關閉。
在表达式的选项标签中,使用公式填充结转至字段,以始终结转余额或仅在金额为负数时结转余额。如果您不想使用此功能,请将此字段留空。
示例
if_below(EUR(0))税务配置¶
接下来,前往并点击New以创建并configure new taxes用于您的自定义税务报表。创建您的销售和采购税,并使用您之前创建的匹配税网格填充所有税的Tax Grids。最后,确保为每个税specify both a tax payable and tax receivable account。
示例
结账分录¶
要关闭税,必须在自定义税务报表中使用的每个税上指定tax group。为此,请打开Accounting应用,导航至,打开需要税组的税,点击Advanced Options选项卡,然后在Tax Group字段中选择一个组。分配后,点击(right arrow)图标,并设置Tax Payable Account和Tax Receivable Account。
小技巧
当一切都设置好后,请确保通过创建使用该报表特定税的发票、账单和信用票据来测试您的报表。最后,测试结账分录本身。
如果您想隐藏特定账户使其不在税务结账分录中显示,请前往,选择税,然后点击(settings adjust)图标。从那里,勾选Tax Closing Entry框以调整其可见性。
更多内容