程式資訊
- 程式 ID:
SliybrowdCondition - 所屬子系統:N.總帳管理
- 狀態:stable
會計日記帳查詢條件¶
功能簡介¶
本頁是會計日記帳(程式 SLIYBROWD)的查詢條件面板,不是獨立程式。會計人員在開啟會計日記帳時,先在這個面板設定要撈哪段期間、哪種傳票、哪些科目的明細,按 查詢 後結果才會顯示在右側的日記帳格線。
面板只負責「組查詢條件」,所有撈資料、過濾、列印都由會計日記帳母頁完成。因此本頁的重點是把四個條件欄位的預設值、輸入格式與篩選邏輯講清楚。
與母頁的關係
本面板(SliybrowdConditionViewModel)與會計日記帳母頁(SliybrowdViewModel,ProgramClass.SLIYBROWD)是同一支程式的兩個部分:面板蒐集條件,母頁執行查詢。權限、結果格線、列印與樞紐分析都在會計日記帳那一頁說明,本頁只談條件。
前置需求¶
- 權限:N.總帳 →
N-070 會計日記帳的瀏覽權限(與會計日記帳共用同一支程式權限)。 - 基礎資料:查得到、撈得齊的前提是下列主檔已維護——
| 資料 | 影響的結果 |
|---|---|
| 總帳傳票(傳票輸入) | 查詢的資料來源;沒有傳票就查不到任何列 |
| 會計科目 | 「科目代號」條件比對的對象、結果的科目名稱 |
| 傳票種類設定 | 「傳票種類」條件的代碼(0 Normal/1 Closed/2 Manufacture/A Special/B TypeB) |
操作步驟¶
- 開啟會計日記帳,左側(或上方)會顯示本條件面板。
- 設定日期起訖區間(預設帶當月 1 日 ~ 今天)。
- 視需要調整傳票種類字串、關係人下拉、科目代號範圍。
- 按工具列的
查詢,符合條件的傳票明細會載入右側日記帳格線。 - 想換條件重查,直接改面板欄位再按一次
查詢即可;不需離開畫面。
小技巧
四個條件之間是 AND 關係(同時成立才會撈出)。條件留空 = 不限制該欄位(科目代號、關係人留空即代表全部)。
欄位說明¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 日期(起) | ✔ | 比對傳票的傳票日期下限。預設為「今天所在月份的 1 日」(由 GetMonthFirstDate 依結束日推算)。格式 yyyy/MM/dd。 |
| 日期(迄) | ✔ | 比對傳票日期上限。預設為今天(TodayYYYYMMDD)。 |
| 傳票種類 | — | 一串種類代碼,預設 012(同時納入 0 Normal、1 Closed、2 Manufacture)。寬度僅 44,最多放幾個代碼字元。 |
| 關係人 | — | 是/否下拉(YesNoComboBox)。預設空白=不限制。 |
| 科目代號 | — | 單一科目、逗號清單或 ~ 區間皆可,預設空白=全部科目。ToolTip 提示「輸入單一科目或是區間」。 |
欄位連動與附加功能¶
這節把「每個條件實際怎麼被組成 SQL、怎麼篩資料」逐條講白話。所有邏輯來源是 SliybrowdBll.GetSqlData() 與 SliybrowdQueryParameters.ResetToDefault()。
進入畫面時的預設值(SetNewData 等效)¶
當你開啟面板,系統會把條件初始化成:
- 日期迄=今天、日期起=今天所在月份的 1 日 → 一進來就是「查本月」。
- 傳票種類=
012。 - 關係人=空(不限制)、科目代號=空(全部科目)。
日期條件¶
- 兩個日期一定會帶入查詢,組成
傳票日期 BETWEEN '起' AND '迄'。 - 它比對的是傳票主檔的傳票日期(檢視欄位
傳票日期),不是建檔日或過帳日。 - 日期是必填且永遠生效;其餘三個條件才有「留空=不限制」的彈性。
傳票種類條件(字串包含比對)¶
- 條件組成
CHARINDEX(傳票種類, '你輸入的字串') > 0,意思是:傳票本身的種類代碼,必須是你輸入字串裡的其中一個字元。 - 因此預設
012= 撈出種類為 0、1 或 2 的傳票;代碼 A(Special)、B(TypeB)預設不在內。 - 想多撈特殊傳票,就把字串改成例如
012A;想只看正常傳票,改成0。 - 種類代碼對照(
GLTypeEnum):0=Normal、1=Closed、2=Manufacture、A=Special、B=TypeB。
注意
傳票種類欄是「字元集合」不是區間。輸入順序不影響結果,但不要打逗號或空白——它整串被當成 CHARINDEX 的比對字串,多餘字元會讓比對失準。
關係人條件(三態下拉)¶
YesNoComboBox 有三種狀態,分別組成不同 SQL:
- 留空(預設):不加任何關係人條件,全撈。
- 是(Y):加上
關係人傳票 = 'Y',只撈關係人交易傳票。 - 否(N):加上
(關係人傳票 = 'N' OR 關係人傳票 = ''),撈非關係人(含未標記)的傳票。
科目代號條件(單筆/清單/區間)¶
科目代號欄位最靈活,SliybrowdBll 會依你輸入的形態組不同條件,多個條件之間以 OR 串接(只要符合其中一段就撈):
- 單一科目(例:
1101):組CHARINDEX(科目代號, '1101') > 0。注意比對方向是「科目代號(資料列)必須是你輸入值的子字串」,因此撈出的是1、11、110、1101這類「代碼本身包含在1101裡」的科目(即上層彙總科目),而不是1101底下的子科目。要把某段範圍的子科目一網打盡,請改用下面的「區間」寫法。 - 逗號清單(例:
1101,1201,2101):逐段拆開,每段各自組一個CHARINDEX(...),以 OR 串起來;空白段會略過。 - 區間(例:
1101~1103):拆成上下界,組(科目代號 >= '1101' AND 科目代號 <= '1103zzz')。下界用你輸入的起值,上界自動補zzz,確保把該前置碼下所有子科目都包進來。 -
清單+區間混用(例:
1101~1103,2201):逗號分段後,每段自行判斷是單值還是區間,全部以 OR 合併。 -
留空時完全不加科目條件 → 全部科目。
- 整個科目條件最後用括號包起來,再以 AND 接到日期+種類條件之後,所以「日期、種類」是硬篩,「科目(多段)」之間才是 OR。
查詢執行與結果(交給母頁)¶
- 按
查詢後,母頁SliybrowdViewModel.Query()會用本面板的條件new SliybrowdBll(...)並呼叫JournalQuery(),透過 SPDARB_BD_SLIY(事件ABOOK1)撈資料,結果依傳票日期排序後填入日記帳格線。 - 結果格線、欄位、可編輯欄、列印(會計日記帳中/英文、整批付款單、部門費用統計表)與樞紐分析,全部在會計日記帳說明。
報表是否需要全部科目(條件物件上有此旗標)是列印/報表階段才會用到的選項,會把accl × dept全部科目補進報表底稿(即使該科目本期沒有異動);它不在本條件面板的輸入欄位中。
規劃中/尚未提供
報表是否需要全部科目 旗標在程式碼中存在,但本條件面板的 XAML 目前沒有對應的勾選框,需由報表流程設定。若你在面板上找不到此選項屬正常現象。
常見問題¶
按了查詢卻一筆都沒有?
先確認日期區間內真的有傳票(預設只查當月)。再檢查傳票種類字串:若你要找的傳票種類是 A 或 B,預設 012 不會撈到,需把字串改成含 A/B 的組合。科目代號若打錯前置碼也會撈不到。
傳票種類要怎麼填才對?
它是一串代碼字元的集合,不是區間也不用分隔符號。要同時看正常+結轉+製造就維持 012;只看正常傳票填 0;要加特殊傳票填 012A。代碼對照:0 Normal、1 Closed、2 Manufacture、A Special、B TypeB。
科目代號填區間(1101~1103)為什麼會帶出比 1103 更多的科目?
區間上界會自動補成 1103zzz,目的是把 1103 底下的所有子科目都納入,因此 11031、110301 之類的明細科目也會出現,這是設計上的「含子科目」行為。
關係人下拉留空、選否(N)有什麼差別?
留空=完全不過濾關係人。選否(N)會排除標記為 Y 的關係人傳票,但仍包含未標記(空值)的傳票,等同「非關係人」。選是(Y)則只留 關係人傳票='Y' 的列。
改了條件,結果沒更新?
改完面板欄位要再按一次 查詢才會重新撈資料;面板只負責蒐集條件,不會即時連動結果格線。
相關功能¶
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/N-GeneralLedger/images/):
sliybrowdcondition-step1.png— 條件面板全貌(日期、傳票種類、關係人、科目代號四欄)sliybrowdcondition-step2.png— 科目代號填入區間/逗號清單的範例sliybrowdcondition-step3.png— 按查詢後條件面板與右側日記帳結果的相對位置