自訂報告¶
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結果是此運算式的子資料行數量。如果報表資料行具有群組依據值,這將對應於相符傳票行中不同群組索引鍵的數量。否則,將是相符傳票行的數量。
您也可以在子公式開頭放置-符號來**反轉**結果的正負號。
「彙總其他公式」引擎¶
當您需要對其他運算式獲得的金額執行算術運算時,請使用此引擎。此處的公式由對運算式的參照組成,這些參照由四種基本算術運算子之一(加法+、減法-、除法/和乘法*)分隔。若要參照運算式,請輸入其報表資料行的**程式碼**,後面跟著句點.和運算式的**標籤**(例如 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 - 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 函數的名稱,而子公式是要在此函數回傳的字典中擷取的鍵。僅在您建立自己的自訂模組時使用。
欄¶
報表可以擁有**無限數量**的直欄,以作顯示。每欄會從**資料行**上宣告的**表達式**獲取數值。直欄的欄位 expression_label 表示所顯示數值來自的表達式的標籤。如果資料行在某欄位中沒有**表達式**,該行在此直欄的位置便不會顯示任何內容。如果需要多個直欄,必須使用不同的**表達式**標籤。
在會計報告的 選項 分頁選用**期間比較**功能時,所有直欄都會在每個期間內,為每個期間重複顯示。
資料行分組¶
可以透過在日記帳項目模型上新增或使用現有欄位來進行非標準分組,前提是這些欄位是相關的且未儲存的。
備註
分組資料行需要報表具有可編輯的明確報表資料行。例如,遞延報表不支援分組資料行,因為它們使用動態產生的資料行。
在日記帳項目上建立新欄位¶
若要在日記帳項目模型中建立未儲存的相關欄位,請先前往,並按一下(除錯)圖示,然後按一下欄位。按一下新增以建立新欄位,並完成以下欄位:
欄位名稱:欄位的技術名稱
欄位標籤:欄位要顯示的標籤
欄位類型:此相關欄位應指向的欄位類型
已儲存:請不要勾選此欄位,因為只有未儲存的欄位才能用於分組資料行。
相關模型:如果欄位類型為one2many、many2many或many2one,請選擇原始欄位的模型以進行分組。
相關欄位定義:您要分組的欄位的技術路徑
Example
若要按商業合作夥伴的銷售團隊分組,請將相關欄位定義設為
move_id.team_id。
分組資料行¶
若要將資料行分組,請前往所需報表的資料行分頁,按一下要分組的資料行,然後編輯分組依據欄位。輸入要用作分組鍵的欄位技術名稱(欄位名稱)。
小訣竅
若要尋找所有模型欄位及其技術名稱的清單,請前往,然後按一下(錯誤)圖示,接著按一下欄位。每個欄位的技術名稱列於欄位名稱欄中。
其他資料
自訂稅務報表設定¶
報表配置¶
小訣竅
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框以调整其可见性。
其他資料