自訂報告¶
Odoo 配備強大又易用的報告框架。報告引擎讓你可以建立新的報告,例如**稅務報表**,或設有**特定分組方式**及**排版方式**的**資產負債表**及**損益表**。
重要
記得啟動 開發者模式,以進入會計報表建立介面。
若要建立新報表,請開啟會計應用程式,然後前往。您可以從此處建立根報表。
根級報告¶
「根級報告」可視為通用、中立的會計報告格式。它們可當作模型使用,以建構本地會計版本。如果某個報表沒有根級報表,它本身便會視為根級報表。
Example
比利時及美國的稅務報告,會使用相同的通用版本作基礎,再根據個別國內法規調整。
建立新的根報表時,您需要為其建立選單項目。若要執行此操作,請開啟報表,然後在該報表上按一下 (動作)圖示,然後選擇建立選單項目。重新整理頁面;報表現在可在下使用。
備註
需要特別建立新根級報告的情況比較少見,例如當國家稅務機關要求呈交新的指定類型報告時。
款式變體¶
款式變體是根級報告為特定國家/地區設定的不同版本,所以必定有引用某個根級報告。要建立變體,請在建立新報告時,在 根級報告 欄位中,選擇一個通用(根級)報告。
當你從會計應用程式的任何主選單開啟根級報告時,其所有變體都會顯示在畫面右上角的變體選擇器中。
報表資料行¶
建立報表(根報表或變體報表)後,您需要為其填入報表資料行。您可以按一下加入資料行建立新資料行,或按一下現有報表資料行進行修改。所有報表資料行*必須*具有名稱,如果您希望在公式中使用其值,還可以選擇性地加入額外的程式碼(由您自行選擇)。
表達式¶
每個報表資料行可以包含一個或多個**運算式**。運算式可視為報表資料行所需的**子變數**。若要建立運算式,請在報表資料行*內*按一下加入資料行。
建立運算式時,您必須指定用於參照該運算式的標籤。因此,它在每個資料行的運算式中必須是**唯一**的。還必須指定計算引擎和公式。引擎**定義如何解釋您的**公式**和**子公式。如果需要,可以在同一資料行下混合使用不同計算引擎的運算式。
備註
視乎不同引擎,可能也需要有 子算式。
「Odoo 搜尋範圍」引擎¶
使用此引擎時,算式會被解釋為 Odoo 搜尋範圍,針對 account.move.line 物件。
子算式讓你對符合搜尋範圍的分錄資料行,定義應如何用作計算表達式的值:
sum傳回所有相符分錄資料行的數額的總和。
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 子算式,以配對另一報表中的表達式。
「賬戶代碼字首」引擎¶
此引擎使用賬戶代碼的字首,作為算術表達式中的變數,以配對賬戶金額。
Example
21Example
21 + 10 - 521 及 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\()21D 開首的賬戶,不論其金額符號屬借記或貸記。除使用代碼字首指定賬戶,還可使用**賬戶標籤**去配對所需賬戶。這可以很有用,尤其是公司所在國家/地區缺乏標準化的會計賬目總表時,因為相同的賬戶代碼字首,在不同公司可能有不同用途或含義。
Example
tag(25)如果引用的標籤是在數據檔案中定義的,可使用 xmlid 取代 id。
Example
tag(my_module.my_tag)你亦可使用帶有標籤的算術表達式,更可將它們與字首選擇結合運用。
Example
tag(my_module.my_tag) + tag(42) + 1010 的賬戶。C 及 D 字尾可透過與標籤相同的方式使用。
Example
tag(my_module.my_tag)CC)的賬戶。字首排除也適用於標籤。
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 函數**名稱,子算式就是在該函數傳回的**字典**(dictionary)中,需要讀取的**鍵**(key)。請只在需要自行編寫自訂模組時,才使用此引擎。
直欄¶
報表可以擁有**無限數量**的直欄,以作顯示。每欄會從**資料行**上宣告的**表達式**獲取數值。直欄的欄位 expression_label 表示所顯示數值來自的表達式的標籤。如果資料行在某欄位中沒有**表達式**,該行在此直欄的位置便不會顯示任何內容。如果需要多個直欄,必須使用不同的**表達式**標籤。
在會計報告的 選項 分頁選用**期間比較**功能時,所有直欄都會在每個期間內,為每個期間重複顯示。
自訂稅務報表設定¶
報表配置¶
小訣竅
Odoo 報表引擎的所有技術術語和功能均已在本頁的前幾節中說明。我們強烈建議在設定自訂稅務報表之前閱讀這些章節。
若要建立自訂稅務報表,請開啟會計應用程式,前往,然後按一下新增:
為您的報表輸入名稱。
選擇根報表。
在可用性欄位下,選擇國家/地區符合,然後選擇與您公司相符的國家/地區。
接下來,按一下加入資料行以建立報表行。建立後,按一下該報表行以進行配置:
再次按一下加入資料行以建立運算式並為其命名。
在定義分頁中,根據以下情境為該運算式選擇計算引擎:
在此情境中,您的公司使用稅務網格:
選擇稅務標籤作為計算引擎。Odoo 使用此欄位將報表行連結到您的稅務。
在公式欄位中,輸入您的簡短網格識別碼(例如
vat_sales_base)。Odoo 會自動為您產生此標籤的+和-變體,以便您在中進行對應。在子公式欄位中,輸入
base以報告未稅金額,或輸入tax以報告實際收取/支付的稅額。
視需要重複此過程。然後,儲存並關閉。
或者,您可以:
選擇彙總其他公式作為計算引擎。Odoo 使用此欄位對*已存在於*報表中的資料行執行數學運算,而不是掃描原始交易。
在公式欄位中,使用引用您的行代碼的基本代數(例如,
LINE_10 - LINE_20)。
視需要重複此過程。然後,儲存並關閉。
在此情境中,您的公司*不*使用稅務網格。而是嚴格透過總帳帳戶追蹤所有內容:
選擇帳戶代碼前綴作為計算引擎:Odoo 將其用於需要提取財務總計的資料行。Odoo 不會尋找交易標籤,而是直接從您的帳目總表中提取即時餘額。
在公式欄位中,輸入您要追蹤的帳戶的起始數字(例如,
40將提取所有以400000、401000等開頭的收入帳戶的合併總計)。
視需要重複此過程。然後,儲存並關閉。
或者,您可以:
選擇彙總其他公式作為計算引擎。Odoo 使用此引擎透過新增或減去您的其他報表行來計算小計、淨稅額或總計。
在公式欄位中,使用引用您的行代碼的基本代數(例如,
LINE_10 - LINE_20)。
視需要重複此過程。然後,儲存並關閉。
在此情境中,您的公司需要標準標籤和帳戶前綴無法處理的進階篩選、手動使用者覆寫或複雜的演算法邏輯:
選擇Odoo Domain作為計算引擎: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框以调整其可见性。
其他資料