創建一個帶有自定義公式的報告?

Odoo配備了一個強大且易于使用的報告框架。該引擎允許您創建新報告,例如 稅務報告 ,或具有 特定分組布局資產負債表利潤表 。

重要

激活 開發者模式 以訪問會計報告創建界面。

要創建新報告,請轉到 會計 ? 配置 ? 管理:會計報告 。從這里,您可以創建一個 根報告 或一個 變體 。

會計報告引擎。

根報告?

根報表可以被視為通用的、中立的會計報表。它們作為本地會計版本構建的模型。如果一個報表沒有根報表,那么它本身就被視為根報表。

Example

比利時和美國的稅務報告都將使用相同的通用版本作為基礎,并根據各自的國內法規進行調整。

創建新的根報表時,需要為其創建一個 菜單項 。為此,請打開報表,然后在同一報表上單擊 操作 ? 創建菜單項 。刷新頁面;報表現在可在 會計 ? 報告 下使用。

注解

需要創建新的根報告的情況很少見,例如當一個國家的稅務機關需要一種新的特定類型的報告時。

創建菜單項按鈕。

變體?

變體是根報告的特定于國家的版本,因此始終指向根報告。要創建變體,請在創建新報告時在 根報告 字段中選擇通用(根)報告。

當從會計應用程序的主菜單之一打開根報告時,所有變體都會顯示在視圖右上角的變體選擇器中。

Example

在下面的圖片中, VAT Report (BE) 是根 Generic Tax report 的變體。

報告變體選擇。

?

創建報表(根報表或變體報表)后,您需要填充它。您可以通過單擊“添加行”創建新行,也可以通過單擊現有行來修改它。所有行都 需要 一個 名稱 ,并且可以有一個可選的附加 代碼 (由您選擇),如果您希望在公式中使用它們的值。

發動機線路選項。

表達式?

每行可以包含一個或多個 表達式 。表達式可以看作是報表行所需的 子變量 。要創建表達式,請在行報表內單擊 添加行 。

創建表達式時,必須指定一個 標簽 用于引用該表達式。因此,它必須在每行表達式中是 唯一的 。同時還必須指定一個 計算引擎 和一個 公式 。 引擎 定義了如何解釋您的 公式子公式 。如果需要,可以在同一行中混合使用不同的計算引擎來處理表達式。

注解

根據引擎的不同,可能還需要 子公式 。

‘Odoo Domain’ 引擎?

使用此引擎,公式將被解釋為針對 account.move.line 對象的 Odoo 域 。

子公式允許您定義匹配域的移動行如何用于計算表達式的值:

sum

結果是匹配的賬戶行的所有余額之和。

sum_if_pos

如果匹配的賬目余額總和為正數,則結果為所有匹配的賬目余額總和。否則,結果為 0 。

sum_if_neg

如果匹配的賬目行的余額總和為負數,則結果為該值。否則,結果為 0 。

count_rows

結果是此表達式的子行數。如果父行具有分組值,則這將對應于匹配的移動行中不同分組鍵的數量。否則,它將是匹配的移動行數。

您還可以在子公式的開頭加上 - 符號來 反轉 結果的符號。

在行報告中的表達式行

‘稅標簽’ 引擎?

此引擎的公式由用于匹配稅務標簽的名稱組成。如果在創建表達式時不存在這些標簽,它們將被創建。

When evaluating the expression, the expression computation can roughly be expressed as: (帶有 ** `+` **標簽的移動行的金額總和) ** `-` **(帶有 ** `-` **標簽的移動行的金額總和) 。

Example

如果公式是 tag_name ,引擎將匹配稅務標簽 +tag_name-tag_name ,如有必要將創建它們。進一步舉例說明:公式匹配兩個標簽。如果公式是 A ,它將需要(如有必要)創建標簽 +A-A 。

‘聚合其他公式’ 引擎?

當您需要對其他表達式獲得的金額執行算術運算時,請使用此引擎。這里的公式由對表達式的引用組成,這些引用由四個基本算術運算符之一(加法 + ,減法 - ,除法 / 和乘法 ` ` )分隔。要引用一個表達式,請輸入其父行的 * 代碼 ** ,后跟一個句點 . 和表達式的 ** 標簽 ** (例如 ** code.label**)。

**子公式 ** 可以是以下之一:

if_above(CUR(amount))

只有當算術表達式的值大于提供的邊界時,才會返回該值。否則,結果將為 0 。

if_below(CUR(amount))

只有當算術表達式的值低于提供的界限時,才會返回結果。否則,結果將為 0 。

if_between(CUR1(amount1), CUR2(amount2))

只有當算術表達式的值嚴格在提供的范圍之間時,才會返回該值。否則,它將被調整為最接近的范圍邊界。

CUR 是大寫的貨幣代碼, amount 是以該貨幣表示的綁定金額。

您還可以使用 cross_report 子公式來匹配在另一個報表中找到的表達式。

“科目代碼前綴”引擎?

此引擎用于使用這些賬戶代碼的前綴作為算術表達式中的變量來匹配賬戶上的金額。

Example

21
算術表達式也可以是單個前綴,例如這里。

Example

21 + 10 - 5
此公式將添加代碼以 2110 開頭的賬戶上的移動行余額,并減去以 5 為前綴的賬戶上的余額。

還可以忽略一些子前綴的選擇。

Example

21 + 10\(101, 102) - 5\(57)
這個公式與前面的例子相同,但忽略了前綴 101 、 10257 。

您可以使用 CD 后綴對 借方和貸方 進行 ‘子過濾’。在這種情況下,只有當賬戶的前綴匹配,并且在該賬戶上進行的所有分錄的總余額為 借方/貸方 時,才會考慮該賬戶。

Example

賬戶 210001 的余額為-42,賬戶 210002 的余額為25。公式 21D 只匹配賬戶 210002 ,因此返回25。 210001 沒有匹配,因為它的余額是 貸方 。

前綴排除可以與 CD 后綴混合使用。

Example

21D + 10\(101, 102)C - 5\(57)
該公式將以借方( D )為條件,將代碼以 21 開頭的賬戶的余額相加,以貸方( C )為條件,將代碼以 10 開頭的賬戶的余額相加,但會忽略前綴為 101 、 102 的賬戶,并減去代碼以 5 開頭的賬戶的余額,同時忽略前綴為 57 的賬戶。

要匹配前綴中的字母 CD 并且不將其用作后綴,請使用空排除 () 。

Example

21D\()
此公式匹配以 21D 開頭的賬戶,無論其余額符號如何。

‘外部值’ 引擎?

“外部值”引擎用于指代 手動結轉值 。這些值不是使用 account.move.line 存儲的,而是使用 account.report.external.value 。每個這樣的對象直接指向它所影響的表達式,因此在這里對它們的選擇需要做的很少。

**公式 ** 可以是以下之一:

sum

如果結果必須是該期間所有外部值的總和。

most_recent

如果結果必須是該期間內最新外部值的價值。

此外, 子公式 可以有兩種使用方式:

rounding=X

X 替換為數字,指示將金額四舍五入到 X 個小數位。

editable

表示此表達式可以手動編輯,觸發報表中的圖標顯示,允許用戶執行此操作。

注解

手動值是在當前報告中選擇的“截止日期”創建的。

兩個子公式可以通過用“;”分隔符混合使用。

Example

editable;rounding=2
這是一個正確的子公式,結合了兩種行為。

‘自定義 Python 函數’ 引擎?

此引擎是開發人員根據情況引入自定義表達式計算的一種方式。公式是要調用的 Python函數 ** 的名稱,而子公式是在此函數返回的 ** 字典 ** 中獲取的 ** 鍵 。僅在制作自己的自定義模塊時使用它。

列數?

報表可以顯示 無限數量 的列。每一列都從 中聲明的 表達式 中獲取其值。列的 expression_label 字段給出了顯示值的表達式的標簽。如果一行在該字段中沒有 表達式 ,則在該列中不顯示任何內容。如果需要多個列,則必須使用不同的 表達式 標簽。

報告的列。

在會計報表的 選項 標簽下使用 期間比較 功能時,所有列都會在每個期間中重復出現。