程式資訊
- 程式 ID:
Acc_selfrpt - 所屬子系統:N.總帳管理
- 狀態:stable
自訂財報執行查詢¶
功能簡介¶
「自訂財報執行查詢」依照使用者事先在報表公式設定(Acc_rpt)裡定義的報表公式,把總帳餘額、預算數字套進每一列的公式算出結果,動態組出一份完全客製的財務報表。它不受內建資產負債表、損益表格式的限制——版面、科目組合、加減邏輯、百分比基準全由報表公式控制。
適合會計/財務主管在月結後執行各種管理報表,例如「月份預算比較表」「當期損益與去年同期比較表」「T 字帳報表」等。流程上的位置是:
- 先在 Acc_rpt 報表公式設定定義好一份報表的每一列(科目名稱、公式、列印碼、層級)。
- 在本功能選擇該報表編號、設定年度與期間。
- 系統呼叫
DARB_QRY_ACC_SELFRPT取回公式與總帳彙總,逐列套公式算值,並依「資料年數」展開多個年度欄位。 - 結果可在格線上檢視、列印成各式報表版型、或匯出 Excel。
本功能只執行、不維護公式
這支表單只負責執行查詢與列印,沒有新增/修改/刪除報表列的能力。要改報表長相(新增一列、改公式、改縮排)請到 Acc_rpt 報表公式設定。
前置需求¶
- 權限:總帳 →
N-130 自訂財報的瀏覽(查詢)與列印權限(frontmatterpermissions: [瀏覽, 列印])。 - 基礎資料:查詢結果是否正確,取決於下列資料是否齊備——
| 資料 | 影響的結果 |
|---|---|
| 報表公式設定(Acc_rpt) | 必備。每一列的科目名稱、公式、列印碼、層級、百分比基準都由它決定;沒有指定報表編號就無法查詢 |
| 傳票 / 總帳餘額 | 各月份、各期間欄位的實際數字(借貸金額來源) |
| 預算資料(Budget) | 報表中「預算」相關欄位(Budget01~12、預算總計、預算當期…) |
| 會計科目分類 / 會計科目 | 公式使用 ACC_BSAUTO/ACC_BSCE 自動展開大/中/小分類時的層級與排序 |
| 部門資料 | 限定部門查詢時的篩選依據 |
操作步驟¶
本功能是「條件面板+結果格線」的查詢報表,沒有逐筆編輯。操作集中在左側查詢條件面板與工具列。
步驟① 設定查詢條件¶

- 在報表編號欄輸入或以放大鏡查詢挑選一份報表公式(資料來源為 Acc_rpt)。選定後右側會自動帶出報表名稱。此欄為必填,留空時按查詢不會有任何動作。
- 輸入年度(西元年,預設當年)。這是報表的「今年(Year0)」基準年。
- 輸入截止日期(月/日,預設
12/31)。系統以「年度+截止日期」當作查詢結束日。 - 輸入資料年數(預設 2,上限 1 位數)。代表要往回展開幾個年度欄位(今年、去年、前年…),最多到第 6 年(Year0~Year6)。
- 設定當期起始月份/當期截止月份(預設 1 ~ 當月)。系統用這個區間算出「當期」「當期月份」相關欄位;月份會自動限制在 1~12。
- 選擇幣別:
本幣/功能幣/集團幣(預設本幣)。決定金額用哪一種幣別呈現、以及小數位數。 - 視需要輸入部門代號(預設
ALL,代表全部門)。
步驟② 執行查詢¶
- 按工具列的
查詢。 - 若報表編號為空,系統會跳出提示「請輸入報表編號」並中止;補上報表編號後再查即可。
- 系統呼叫
DARB_QRY_ACC_SELFRPT,取回報表公式、總帳彙總(依年月分段成月/季/半年/全年/當期)與預算彙總,逐列套用公式算值,並依資料年數動態產生欄位。 - 結果顯示在右側格線:每一列是報表公式的一列(科目名稱依公式內的前導縮排呈現層級),欄位則是各年度的月份/季/半年/當期/預算數字。

步驟③ 列印¶
- 按
列印,從報表清單挑選版型(見欄位連動與附加功能的報表清單)後輸出。 - 結果格線本身僅供檢視(唯讀);要保留版面請走
列印產生報表。
小技巧
改了年度/期間/幣別/報表編號後直接再按一次 查詢 即可重算,欄位抬頭(如「2026/01」「2025/總計」)會跟著年度自動更新。
欄位說明¶
查詢條件(左側面板)¶
| 欄位 | 必填 | 說明 / 格式 / 預設 |
|---|---|---|
| 報表編號 | ✔ | 指定使用哪份報表公式(對應 Acc_rpt)。空白時無法查詢。挑選後自動帶出報表名稱 |
| 報表名稱 | — | 唯讀,依報表編號自動帶出 |
| 年度 | ✔ | 西元年,預設當年;作為「今年(Year0)」基準 |
| 截止日期 | — | 月/日格式,預設 12/31;與年度組成查詢結束日 |
| 資料年數 | — | 預設 2、最多 1 位數;往回展開的年度數,並決定 SP 起始年 |
| 當期起始月份 | — | 預設 1,自動限制 1~12 |
| 當期截止月份 | — | 預設當月,自動限制 1~12;決定「當期月份」取哪一個月 |
| 幣別 | — | 本幣 / 功能幣 / 集團幣,預設本幣;決定金額幣別與小數位數 |
| 部門代號 | — | 預設 ALL(全部門) |
結果格線欄位(依公式列為主、欄位隨年度動態產生)¶
格線的每一列來自報表公式的一列;欄位則由 SelfrptSource 的屬性依「年度位移」動態生成,抬頭會帶上實際年份。
| 欄位群 | 說明 |
|---|---|
| 序號 | 報表公式列的序號(LineNo_) |
| 科目名稱 | 公式列的描述,保留公式內輸入的前導縮排空格以呈現大/中/小分類層級 |
| {年度}/01 ~ /12 | 該年度各月份金額。Year0 為查詢年度、Year1 為去年、依此類推 |
| {年度}/總計 | 該年度 12 個月合計 |
| {年度}/當期 | 當期起始月份~當期截止月份的合計 |
| {年度}/當期月份 | 「當期截止月份」那一個月的金額 |
| {年度}/第一~四季 | 各季合計(1-3、4-6、7-9、10-12 月) |
| {年度}/上半年・下半年 | 1-6 月、7-12 月合計 |
| …百分比 | 上述各欄相對於「百分比基準列」同欄的占比(%),詳見下節 |
| 預算 01 ~ 12 / 總計 / 當期 / 季 / 半年 | 取自預算資料,期間切分邏輯與實際數字相同 |
| 列印碼 / 小數位數 / 特殊控制 / 加註文字 / 借貸別 / 階層 | 由報表公式列帶入,控制列印呈現(粗體、底線、小數位等) |
欄位抬頭會隨年度變動
欄位抬頭不是固定文字,而是用「查詢年度 − 年度位移」即時組出來的(例如查 2026 年、資料年數 2,就會出現 2026/... 與 2025/... 兩組欄位)。
欄位連動與附加功能¶
這一節把「輸入某欄位後會發生什麼」「按某按鈕會做什麼」完整列出,全部來自實際程式碼。
報表編號 → 帶出報表名稱、決定可否查詢¶
- 當你在報表編號欄選定一份報表,搜尋控件會把對應的報表名稱自動填到右側唯讀欄。
- 按
查詢時系統會先檢查報表編號是否為空:空白即中止並提示「請輸入報表編號」(MessageEnum.PleaseInputReportCode)。這是唯一的硬性擋查條件。
年度 / 資料年數 → 決定撈幾年、欄位抬頭、SP 起始日¶
- 資料年數決定結果格線往回展開幾個年度欄位群(Year0、Year1…),最多支援到 Year6(7 個年度)。每一列的公式會對 Year0~Year(資料年數−1) 逐年套算。
- 年度 + 截止日期組成 SP 查詢的結束日
年度/截止日期;SP 的資料起始日固定為(年度 − 1)/01/01,亦即固定多撈前一年當基期。 - 欄位抬頭會用「年度 − 位移」即時計算(例如
Year1欄抬頭=年度−1)。
當期起始 / 截止月份 → 算「當期」與「當期月份」欄¶
- 系統依當期起始~截止月份,把各月金額加總成當期欄;並把當期截止月份那一個月的金額單獨放進當期月份欄。
- 月份輸入會自動箝制在 1~12(小於 1 補 1、大於 12 補 12)。
幣別 → 換算金額與小數位數¶
- 選
本幣/功能幣/集團幣會改變金額採用的幣別欄位(借貸取本幣/功能幣/集團幣),並決定報表的小數位數(功能幣、集團幣、本幣各有自己的小數位設定)。 - 列印參數的「幣別」文字會帶入對應幣別代碼(功能幣取
_prgpar2007、集團幣取 2021、本幣取環境設定本位幣)。
科目參數的三種寫法:單一代號 / 區間 / 含子科目¶
算金額的公式函式(ACC_IS、ACC_ISA、ACC_BS、ACC_SC)第一個科目參數可以有三種寫法:
| 寫法 | 範例 | 意義 |
|---|---|---|
| 單一代號 | ACC_IS('1101') |
完全比對:只加總科目代號剛好等於 1101 的那一筆,不含任何子科目(如 110101) |
| 區間 | ACC_IS('1101~1199') |
加總科目代號落在 1101~1199 之間(含頭尾)的所有科目 |
| 含子科目(前綴) | ACC_IS('1101%') |
加總所有以 1101 開頭的科目,含 1101 本身與其下所有子科目(110101、110102…) |
母科目下掛子科目時用 %
當一個母科目(例如 1101)底下實際掛的是 110101、110102 等子科目、明細金額都記在子科目上時,用單一代號 '1101' 會算不到子科目(因為是完全比對)。這時寫 '1101%' 就能一次把 1101 家族全部加總,不必手動去湊一段區間。
% 一定要放在最後面
% 只支援放在科目代號結尾當「前綴合計」用('1101%'),不是萬用字元,不能放中間或開頭。另外要注意前綴是整段比對:'1101%' 只含 1101 開頭的科目,不會把 1102 也算進來;若要同時涵蓋 1101 與 1102,請改用它們共同的母層前綴 '110%' 或用區間 '1101~1102'。
含子科目寫法只認得檔內既有的科目
前綴合計是靠「本次查詢實際載入的科目資料」去比對出範圍的;某個子科目若這期完全沒有異動、也沒有預算與期初資料,自然不會被算進來(金額本來就是 0,結果不受影響)。
公式自動展開:ACC_BSAUTO / ACC_BSCE¶
ACC_BSAUTO 與 ACC_BSCE 跟其他公式函式(ACC_BS、ACC_IS…)不一樣:它們不是用來算某一格金額的,而是「展開指令」——你在 Acc_rpt 只設定一列、公式裡寫上它,查詢時系統會把這一列自動長成很多列,每一列才填入真正的 ACC_BSC/ACC_BS 公式去算金額。等於幫你把整段大/中/小分類的科目清單自動鋪好,不必逐科目手動建列。
兩者的差別在「展開範圍」與「依據什麼資料展開」:
| ACC_BSAUTO | ACC_BSCE("階層,分類名") | |
|---|---|---|
| 寫法 | 無參數,直接寫 ACC_BSAUTO |
帶參數,如 ACC_BSCE("1,流動資產") |
| 展開範圍 | 整張表,全部分類一次鋪完 | 只展開你指定的那一個分類節點往下 |
| 依據資料 | 本期實際有異動的科目(這期有上傳票的才會出現) | 會計科目分類表(不管有無異動,整個分類底下都鋪出來) |
| 產出 | 大分類 → 中分類 → 小分類 → 科目,逐層列出 | 該節點底下的子分類 + 科目明細 |
| 減項 | — | 公式前面加 -(例 -ACC_BSCE("1,負債"))可讓展開出來的整段都以減項計入 |
| 縮排 | 自動:中分類縮 4 格、小分類/科目縮 8 格 | 自動依層級縮排 |
ACC_BSCE 的階層參數:1 = 大分類、2 = 中分類、3 = 小分類;分類名就是該分類的名稱(需與會計科目分類裡的名稱一致)。
其餘沒有用到這兩個指令的一般公式列,則原樣保留、由文字計算器(TextCalculatorBll)逐格求值。
什麼時候用哪一個?
想要「整份資產負債表骨架自動生出來、且只列出這期真的有動到的科目」→ 用 ACC_BSAUTO。 想要「在自己排的版面中,某一段(例如『流動資產』)底下的科目自動帶出來」→ 用 ACC_BSCE 指名那一個分類。
科目名稱的縮排來自公式設定
一般(非自動展開)列的層級縮排,是你在 Acc_rpt「科目名稱」欄前面打的空格;系統讀取時刻意只去尾端空白、保留前導縮排,所以報表才有層級感(參見 2026-05-27 變更紀錄)。自動展開列(BSAUTO/BSCE)的縮排則由系統依層級自動加。
公式自動展開:ACC_SCAN(進階版,可指定目標函數)¶
ACC_SCAN 是 ACC_BSCE 的進階版——一樣是「展開指令」(在一列公式裡寫上它,查詢時自動長成很多列),但兩點更彈性:
- 目標算值函數可指定:
ACC_BSCE寫死用資產負債表餘額口徑(ACC_BSC/ACC_BS),ACC_SCAN可自選ISA/IS/BS/SC/CF,因此損益類(ACC_IS/ACC_ISA)、期初(ACC_SC)、現金流量(ACC_CF)都能掃描展開。 - 展開範圍可選層級或科目區間:大/中/小分類,或直接指定一段科目代號區間。
寫法:ACC_SCAN('目標','範圍別','範圍內容',抬頭,位數上限)(也支援一組引號的 ACC_SCAN("目標,範圍別,範圍內容,抬頭,位數上限");前面加 - 讓整段以減項計入)。
| 參數 | 意義 | 可填 |
|---|---|---|
| 目標 | 展開後每列要用的算值函數 | ISA/IS/BS/SC/CF |
| 範圍別 | 依什麼展開 | L 大分類/M 中分類/S 小分類/R 科目範圍 |
| 範圍內容 | 分類名,或 R 時的 起始科目~截止科目(無 ~ 視為單一科目) |
例:營業費用、6100~6199 |
| 抬頭 | 目前僅 1=科目名稱,省略視同 1 |
1 |
| 位數上限 | 展開到「科目代號幾碼」為止;省略= 4。必須是正整數 |
4、6… |
展開位數上限:逐科目列到「幾碼」為止(2026-07-16 起)
ACC_SCAN 依 L/M/S 分類或 R 科目範圍逐科目展開(大/中/小分類另補標頭列與層級縮排),但只列到「代號長度 ≤ 位數上限」的科目:
- 代號長度超過上限的子科目,不各自成列,金額改由其母科目(代號較短的前綴科目)那一列用
%前綴合計併入——母科目公式自動變成ACC_xxx('代號%')(例:ACC_IS('1101%')涵蓋 1101 及其所有子科目)。母科目底下若無更深子科目,公式維持ACC_xxx('代號')(不帶%)。 - 母子科目同時成列時不重複計數:若母科目(如統制科目 110)與其子科目(如 1101)都在上限內、都各自成列,母列只計「自身金額+未各自成列的子科目」,不會用
110%把已成列的 1101 再吞一次——保證每個科目金額在整份展開中恰被計入一列。 - 位數上限預設 4 碼(多數帳套的明細科目層級)。要展更細,把第 5 參數調大,例如
6就會把 6 碼子科目也各自列出。 - 孤兒保底:某個超過上限的子科目,若它的短碼母科目不在本次掃描範圍內(沒有可併入的母列),仍會個別列出,金額才不會漏掉。
分類值空白的科目(沒歸小分類/中分類)維持逐科目列出,掛在上一層底下。R 範圍別一樣套用位數上限規則(只是平鋪、不補分類標頭)。
範例
ACC_SCAN('IS','L','營業費用',1):把「營業費用」大分類逐科目展開;預設只列到 4 碼科目,更細的子科目金額併入其 4 碼母科目列(母列公式帶%)。ACC_SCAN('IS','L','營業費用',1,6):同上,但展到 6 碼——6 碼子科目也各自成列(更深的才併入)。ACC_SCAN('IS','R','6100~6199',1):科目 6100~6199 逐科目各一列(同樣受位數上限規範)。
在存檔前先看展開結果
到 Acc_rpt 報表公式設定 用「模擬表預覽」按鈕,可先看 ACC_SCAN 會展出哪些列(列號/序號/科目名稱/公式),確認無誤再查詢。
百分比基準列 → 算各欄百分比¶
- 報表公式中可指定某一列為百分比基準(PercentageBaseline =
Y,通常是「營業收入淨額」之類)。 - 查詢時系統以該基準列的「總計/當期/當期月份」當分母,算出每一列對應欄位的占比(四捨五入到小數 2 位)填入
…百分比欄。 - 若沒有任何一列被標為百分比基準,百分比欄位維持 0。
列印(GetReports)¶
按 列印 時系統提供下列內建版型(同一份查詢結果可切換不同版型輸出):
| 報表編號 | 報表抬頭 |
|---|---|
| N130-1 | 月份預算比較表 |
| N130-2 | 預算與實際比較表 |
| N130-3 | 當期損益與預算比較表 |
| N130-4 | 月份損益比較表 |
| N130-5 | 當期損益與去年同期比較表 |
| N130-6 | 依截止月份與前期比較 |
| N130-7 | T 字帳報表 % |
| N130-8 | T 字帳報表 |
| N130-9 | 當月損益與去年同月比較表 % |
| N130-7 | 當期簡表 |
列印時系統會把查詢結果、報表公式、結束日、查詢期間(年度/起月 ~ 訖月)、部門、年月、幣別等當作報表參數帶入版型。
尚未提供的動作
本功能不提供新增/修改/刪除報表列、也沒有沖帳或轉傳票。報表結構一律回到 Acc_rpt 報表公式設定維護。

常見問題¶
按了查詢卻沒有任何反應?
最常見原因是報表編號欄空白。本功能會先檢查報表編號,空白時直接中止並提示「請輸入報表編號」。請先在報表編號欄挑一份報表公式再查。
報表有些列數字是 0?
該列公式引用的科目在查詢期間沒有交易(總帳餘額為 0),或公式引用的科目代碼有誤。請到 Acc_rpt 報表公式設定檢查該列公式,並確認 傳票在查詢期間有對應的異動。
百分比欄全部是 0?
百分比是「各列 ÷ 百分比基準列 × 100」。若報表公式裡沒有任何一列被標為百分比基準(PercentageBaseline = Y),或基準列當期/總計為 0,百分比就會是 0。請在 Acc_rpt 把基準列(通常是營收)標好。
預算欄是空的?
預算數字來自預算資料(Budget)。請確認該年度、該科目已維護預算;沒有預算資料時對應欄位會是 0。
科目名稱的層級縮排不見了、變成扁平?
自訂列的縮排來自你在 Acc_rpt「科目名稱」前面打的空格。系統讀取時只去尾端空白、保留前導縮排。若縮排消失,請確認 Acc_rpt 該列科目名稱前確實有打縮排空格(此問題已於 2026-05-27 修正,需確認已更新版本)。
去年、前年的欄位沒出現?
往回展開幾個年度由資料年數控制(預設 2)。若只看到今年欄位,請把資料年數調大;數字越大,展開的年度欄位群越多。