自定义报告¶
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 . 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 .
注解
需要创建新的根报告的情况很少见,例如当一个国家/地区的税务机构要求一种新的特定类型的报告时。
变体¶
变体是根报告的特定国家/地区版本,因此总是引用根报告。要创建变体,请在创建新报告时在 根报告 字段中选择通用(根)报告。
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结果是此表达式的子行数。如果报表行有分组值,这将对应于匹配的移动行中不同分组键的数量。否则,将是匹配的移动行数量。
您还可以在子公式开头添加 - 符号来反转结果的符号。
“聚合其他公式”引擎¶
当您需要对其他表达式获得的金额执行算术运算时,请使用此引擎。此处的公式由通过四个基本算术运算符之一(加法 +、减法 -、除法 / 和乘法 *)分隔的表达式引用组成。要引用表达式,请输入其报表行的代码,然后输入句点 . 和表达式的标签(例如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
21Example
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
要匹配前缀中的字母 C 或 D,但不将其用作后缀,请使用空排除项 ()。
Example
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 存储的。这些对象中的每一个都直接指向它影响的表达式,因此在这里关于其选择需要做的工作很少。
**公式**可以是以下之一:
总额如果结果必须是该周期内所有外部值的总和。
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)。
根據需要重複此過程。然後點擊儲存並關閉。
在此场景中,您的公司不使用税务网格。相反,它严格通过总账科目跟踪所有内容:
选择科目代码前缀作为计算引擎:Odoo 将其用于需要提取财务总额的行。Odoo 不查找交易标签,而是直接从您的会计科目表中提取实时余额。
在公式字段中,输入要跟踪的科目的起始数字(例如,
40将提取所有以400000、401000等开头的收入科目的合计总额)。
根據需要重複此過程。然後點擊儲存並關閉。
或者,您可以:
选择聚合其他公式作为计算引擎。Odoo 使用它通过添加或减去其他报表行来计算小计、净税额或总计。
在公式字段中,使用引用行代码的基本代数(例如,
LINE_10 - LINE_20)。
根據需要重複此過程。然後點擊儲存並關閉。
在此场景中,您的公司需要高级过滤、手动用户覆盖或标准标签和科目前缀无法处理的复杂算法逻辑:
选择Odoo 域作为计算引擎:Odoo 使用它完全绕过税务标签,并使用标准 Odoo 搜索语法过滤原始日记账分录(
account.move.line)。在公式字段中,输入以方括号开头的有效域,以隔离特定合作伙伴类别的免税交易。
或者,您可以:
选择外部值作为计算引擎。Odoo 使用它记录手动覆盖或历史结转值。
在子公式字段中,输入
editable以在实时报表上显示编辑图标,允许用户手动修改值。此外,您可以通过输入rounding=x来舍入数字。
或者,您可以:
选择自定义 Python 函数作为计算引擎。当规则涉及累进档次、循环或多层阈值时,Odoo 将其用作执行引擎,通过后端编码运行特定计算。
在公式字段中,输入自定义本地化模块中定义的 Python 方法的确切技术名称。
根據需要重複此過程。然後點擊儲存並關閉。
在表达式的选项标签中,使用公式填充结转至字段,以始终结转余额或仅在金额为负数时结转余额。如果您不想使用此功能,请将此字段留空。
Example
if_below(EUR(0))税务配置¶
接下来,前往并点击New以创建并configure new taxes用于您的自定义税务报表。创建您的销售和采购税,并使用您之前创建的匹配税网格填充所有税的Tax Grids。最后,确保为每个税specify both a tax payable and tax receivable account。
Example
结账分录¶
要关闭税,必须在自定义税务报表中使用的每个税上指定tax group。为此,请打开Accounting应用,导航至,打开需要税组的税,点击Advanced Options选项卡,然后在Tax Group字段中选择一个组。分配后,点击(right arrow)图标,并设置Tax Payable Account和Tax Receivable Account。
小技巧
当一切都设置好后,请确保通过创建使用该报表特定税的发票、账单和信用票据来测试您的报表。最后,测试结账分录本身。
如果您想隐藏特定账户使其不在税务结账分录中显示,请前往,选择税,然后点击(settings adjust)图标。从那里,勾选Tax Closing Entry框以调整其可见性。
其他资料