自訂報告

Odoo 配備了強大且易於使用的報表架構。此引擎可讓您建立新報表,例如稅務報表,或具有特定分組版面配置資產負債表損益表

重要

啟用:ref:`開發人員模式 <developer-mode>`以存取會計報表建立介面。

若要建立新報表,請開啟會計應用程式,然後前往配置 ‣ 會計報表。您可以從此處建立根報表

根級報告

「根級報告」可視為通用、中立的會計報告格式。它們可當作模型使用,以建構本地會計版本。如果某個報表沒有根級報表,它本身便會視為根級報表。

Example

比利時及美國的稅務報告,會使用相同的通用版本作基礎,再根據個別國內法規調整。

建立新的根報表時,您需要為其建立選單項目。若要執行此操作,請開啟報表,然後在該報表上按一下 (動作)圖示,然後選擇建立選單項目。重新整理頁面;報表現在可在會計 ‣ 報表下使用。

備註

需要特別建立新根級報告的情況比較少見,例如當國家稅務機關要求呈交新的指定類型報告時。

款式

款式變體是根級報告為特定國家/地區設定的不同版本,所以必定有引用某個根級報告。要建立變體,請在建立新報告時,在 根級報告 欄位中,選擇一個通用(根級)報告。

當從會計應用程式的其中一個主選單開啟根報表時,其所有變體都會顯示在檢視右上角的變體選擇器中。

Example

在下圖中,VAT Report (BE)`是根:guilabel:`Generic Tax report的變體。

報表資料行

建立報表(根報表或變體報表)後,您需要為其填入報表資料行。您可以按一下加入資料行建立新資料行,或按一下現有報表資料行進行修改。所有報表資料行*必須*具有名稱,如果您希望在公式中使用其值,還可以選擇性地加入額外的程式碼(由您自行選擇)。

設定資料行選項。

表達式

每個報表資料行可以包含一個或多個**運算式**。運算式可視為報表資料行所需的**子變數**。若要建立運算式,請在報表資料行*內*按一下加入資料行

建立運算式時,您必須指定用於參照該運算式的標籤。因此,它在每個資料行的運算式中必須是**唯一**的。還必須指定計算引擎公式引擎**定義如何解釋您的**公式**和**子公式。如果需要,可以在同一資料行下混合使用不同計算引擎的運算式。

備註

視乎不同引擎,可能也需要有 子算式

「Odoo 定義域」引擎

使用此引擎時,公式會被解釋為針對account.move.line物件的Odoo 定義域

子算式讓你對符合搜尋範圍的分錄資料行,定義應如何用作計算表達式的值:

sum

傳回所有相符分錄資料行的數額的總和。

sum_if_pos

傳回所有相符分錄資料行的數額的總和(如果數額為正數)。否則傳回 0

sum_if_neg

傳回所有相符分錄資料行的數額的總和(如果數額為負數)。否則傳回 0

count_rows

結果是此運算式的子資料行數量。如果報表資料行具有群組依據值,這將對應於相符傳票行中不同群組索引鍵的數量。否則,將是相符傳票行的數量。

您也可以在子公式開頭放置-符號來**反轉**結果的正負號。

資料行報告中的表達式資料行

「稅務標籤」引擎

為此引擎製作的公式由用於比對稅務標籤的名稱組成。如果在建立運算式時這些標籤不存在,將會建立它們。

計算表達式的值時,表達式的計算方法大致是:(附有 + 標籤的分錄資料行數目) - (附有 - 標籤的分錄資料行數目)

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))

只會在算術表達式的值嚴格處於所指定的範圍內時,才會傳回該值。否則,會採用最接近的邊界值。

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

21
純算術表達式也可用作單一字首,正如此例。

Example

21 + 10 - 5
此算式將代碼為 2110 開首的賬戶內的分錄資料行數額相加,然後減去代碼字首為 5 的賬戶內的分錄資料行數額。

你亦可選擇忽略指定的子字首:

Example

21 + 10\(101, 102) - 5\(57)
此算式的運作方式與之前的例子相同,但不會考慮字首 10110257

你更可在**貸記及借記**記項上套用「子篩選」,方法是使用 `C`(貸)及 `D`(借)為字尾。使用時,只會在賬戶字首相符*並且*賬戶內分錄資料行的總數額為**貸記/借記**記項,才會考慮該賬戶。

Example

假設賬戶 210001 的結餘為 -42,而賬戶 210002 結餘為 25。算式 21D 只能配對到賬戶 210002,然後傳回 25。運算此算式時,賬戶 210001 並不相符,因為其結餘屬於*貸記*金額。

排除字首功能可以與 CD 字尾混合使用:

Example

21D + 10\(101, 102)C - 5\(57)
此算式會將代碼字首為 21 的分錄資料行金額(*如果*金額屬借方,即 D)以及字首為 10 的分錄資料行金額(*如果*金額屬貸方,即 C)相加,但不會考慮字首 101102 的賬戶,然後減去字首為 5 的賬戶的金額,但不會考慮字首 57 的賬戶。

若賬戶字首中有字母 CD 要配對,不想用作貸記/借記字尾,可使用空白排除 ()

Example

21D\()
此算式會配對代碼以 21D 開首的賬戶,不論其金額符號屬借記或貸記。

除使用代碼字首指定賬戶,還可使用**賬戶標籤**去配對所需賬戶。這可以很有用,尤其是公司所在國家/地區缺乏標準化的會計賬目總表時,因為相同的賬戶代碼字首,在不同公司可能有不同用途或含義。

Example

tag(25)
此公式比對其關聯標籤包含 id 為 25 的標籤的帳戶。

如果您參照的標籤在資料檔案中定義,可以使用 xmlid 代替 id。

Example

tag(my_module.my_tag)
此算式會配對賬戶關聯標籤中,包含以 my_module.my_tag 表示的標籤的賬戶。

你亦可使用帶有標籤的算術表達式,更可將它們與字首選擇結合運用。

Example

tag(my_module.my_tag) + tag(42) + 10
此算式會將以下賬戶的金額相加:以 my_module.my_tag 標籤的賬戶、與識別碼 42 的標籤關聯的賬戶,以及代碼字首為 10 的賬戶。

CD 字尾可透過與標籤相同的方式使用。

Example

tag(my_module.my_tag)C
此算式會配對帶有標籤 my_module.my_tag 以及貸方餘額(C)的賬戶。

字首排除也適用於標籤。

Example

tag(my_module.my_tag)\(10)
此算式會配對帶有標籤 my_module.my_tag 以及代碼字首並非 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 表示所顯示數值來自的表達式的標籤。如果資料行在某欄位中沒有**表達式**,該行在此直欄的位置便不會顯示任何內容。如果需要多個直欄,必須使用不同的**表達式**標籤。

報表的不同直欄。

在會計報告的 選項 分頁選用**期間比較**功能時,所有直欄都會在每個期間內,為每個期間重複顯示。

資料行分組

可以透過在日記帳項目模型上新增或使用現有欄位來進行非標準分組,前提是這些欄位是相關的且未儲存的。

備註

分組資料行需要報表具有可編輯的明確報表資料行。例如,遞延報表不支援分組資料行,因為它們使用動態產生的資料行。

在日記帳項目上建立新欄位

若要在日記帳項目模型中建立未儲存的相關欄位,請先前往會計 ‣ 日記帳項目,並按一下(除錯)圖示,然後按一下欄位。按一下新增以建立新欄位,並完成以下欄位:

  • 欄位名稱:欄位的技術名稱

  • 欄位標籤:欄位要顯示的標籤

  • 欄位類型:此相關欄位應指向的欄位類型

  • 已儲存:請不要勾選此欄位,因為只有未儲存的欄位才能用於分組資料行。

  • 相關模型:如果欄位類型為one2manymany2manymany2one,請選擇原始欄位的模型以進行分組。

  • 相關欄位定義:您要分組的欄位的技術路徑

    Example

    若要按商業合作夥伴的銷售團隊分組,請將相關欄位定義設為 move_id.team_id

分組資料行

若要將資料行分組,請前往所需報表的資料行分頁,按一下要分組的資料行,然後編輯分組依據欄位。輸入要用作分組鍵的欄位技術名稱(欄位名稱)。

小訣竅

若要尋找所有模型欄位及其技術名稱的清單,請前往會計 ‣ 日記帳記項,然後按一下錯誤)圖示,接著按一下欄位。每個欄位的技術名稱列於欄位名稱欄中。

自訂稅務報表設定

報表配置

小訣竅

Odoo 報表引擎的所有技術術語和功能均已在本頁的前幾節中說明。我們強烈建議在設定自訂稅務報表之前閱讀這些章節。

若要建立自訂稅務報表,請開啟會計應用程式,前往配置 ‣ 會計報表,然後按一下新增

  • 為您的報表輸入名稱

  • 選擇根報表

  • 可用性欄位下,選擇國家/地區符合,然後選擇與您公司相符的國家/地區

接下來,按一下加入資料行以建立報表行。建立後,按一下該報表行以進行配置:

  • 再次按一下加入資料行以建立運算式並為其命名。

  • 定義分頁中,根據以下情境為該運算式選擇計算引擎

在此情境中,您的公司使用稅務網格:

  • 選擇稅務標籤作為計算引擎。Odoo 使用此欄位將報表行連結到您的稅務。

  • 公式欄位中,輸入您的簡短網格識別碼(例如 vat_sales_base)。Odoo 會自動為您產生此標籤的 +- 變體,以便您在配置 ‣ 稅務中進行對應。

  • 子公式欄位中,輸入 base 以報告未稅金額,或輸入 tax 以報告實際收取/支付的稅額。

視需要重複此過程。然後,儲存並關閉

或者,您可以:

  • 選擇彙總其他公式作為計算引擎。Odoo 使用此欄位對*已存在於*報表中的資料行執行數學運算,而不是掃描原始交易。

  • 公式欄位中,使用引用您的行代碼的基本代數(例如,LINE_10 - LINE_20)。

視需要重複此過程。然後,儲存並關閉

在**運算式**的選項分頁中,填入結轉至欄位並輸入公式,以始終結轉餘額或僅在金額為負數時結轉餘額。如果您不想使用此功能,請將此欄位留空。

Example

if_below(EUR(0))
此公式僅結轉低於 0.00 EUR 的金額。

稅務配置

接下来,前往Configuration ‣ Taxes并点击New以创建并configure new taxes用于您的自定义税务报表。创建您的销售采购税,并使用您之前创建的匹配税网格填充所有税的Tax Grids。最后,确保为每个税specify both a tax payable and tax receivable account

Example

税网格配置。

结账分录

要关闭税,必须在自定义税务报表中使用的每个税上指定tax group。为此,请打开Accounting应用,导航至Configuration ‣ Taxes,打开需要税组的税,点击Advanced Options选项卡,然后在Tax Group字段中选择一个组。分配后,点击(right arrow)图标,并设置Tax Payable AccountTax Receivable Account

小訣竅

  • 当一切都设置好后,请确保通过创建使用该报表特定税的发票、账单和信用票据来测试您的报表。最后,测试结账分录本身。

  • 如果您想隐藏特定账户使其不在税务结账分录中显示,请前往Configuration ‣ Taxes,选择税,然后点击(settings adjust)图标。从那里,勾选Tax Closing Entry框以调整其可见性。

其他資料

Tax closing