跳轉到

程式資訊

  • 程式 IDSliybrowdCondition
  • 所屬子系統:N.總帳管理
  • 狀態:stable

會計日記帳查詢條件

功能簡介

本頁是會計日記帳(程式 SLIYBROWD)的查詢條件面板,不是獨立程式。會計人員在開啟會計日記帳時,先在這個面板設定要撈哪段期間、哪種傳票、哪些科目的明細,按 查詢 後結果才會顯示在右側的日記帳格線。

面板只負責「組查詢條件」,所有撈資料、過濾、列印都由會計日記帳母頁完成。因此本頁的重點是把四個條件欄位的預設值、輸入格式與篩選邏輯講清楚。

與母頁的關係

本面板(SliybrowdConditionViewModel)與會計日記帳母頁(SliybrowdViewModelProgramClass.SLIYBROWD)是同一支程式的兩個部分:面板蒐集條件,母頁執行查詢。權限、結果格線、列印與樞紐分析都在會計日記帳那一頁說明,本頁只談條件。

前置需求

  • 權限:N.總帳 → N-070 會計日記帳 的瀏覽權限(與會計日記帳共用同一支程式權限)。
  • 基礎資料:查得到、撈得齊的前提是下列主檔已維護——
資料 影響的結果
總帳傳票(傳票輸入 查詢的資料來源;沒有傳票就查不到任何列
會計科目 「科目代號」條件比對的對象、結果的科目名稱
傳票種類設定 「傳票種類」條件的代碼(0 Normal/1 Closed/2 Manufacture/A Special/B TypeB)

操作步驟

  1. 開啟會計日記帳,左側(或上方)會顯示本條件面板。
  2. 設定日期起訖區間(預設帶當月 1 日 ~ 今天)。
  3. 視需要調整傳票種類字串、關係人下拉、科目代號範圍。
  4. 按工具列的 查詢,符合條件的傳票明細會載入右側日記帳格線。
  5. 想換條件重查,直接改面板欄位再按一次 查詢 即可;不需離開畫面。

小技巧

四個條件之間是 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 串接(只要符合其中一段就撈):

  1. 單一科目(例:1101):組 CHARINDEX(科目代號, '1101') > 0。注意比對方向是「科目代號(資料列)必須是你輸入值的子字串」,因此撈出的是 1111101101 這類「代碼本身包含在 1101 裡」的科目(即上層彙總科目),而不是 1101 底下的子科目。要把某段範圍的子科目一網打盡,請改用下面的「區間」寫法。
  2. 逗號清單(例:1101,1201,2101):逐段拆開,每段各自組一個 CHARINDEX(...),以 OR 串起來;空白段會略過。
  3. 區間(例:1101~1103):拆成上下界,組 (科目代號 >= '1101' AND 科目代號 <= '1103zzz')。下界用你輸入的起值,上界自動補 zzz,確保把該前置碼下所有子科目都包進來。
  4. 清單+區間混用(例:1101~1103,2201):逗號分段後,每段自行判斷是單值還是區間,全部以 OR 合併。

  5. 留空時完全不加科目條件 → 全部科目。

  6. 整個科目條件最後用括號包起來,再以 AND 接到日期+種類條件之後,所以「日期、種類」是硬篩,「科目(多段)」之間才是 OR。

查詢執行與結果(交給母頁)

  • 查詢 後,母頁 SliybrowdViewModel.Query() 會用本面板的條件 new SliybrowdBll(...) 並呼叫 JournalQuery(),透過 SP DARB_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 底下的所有子科目都納入,因此 11031110301 之類的明細科目也會出現,這是設計上的「含子科目」行為。

關係人下拉留空、選否(N)有什麼差別?

留空=完全不過濾關係人。選否(N)會排除標記為 Y 的關係人傳票,但仍包含未標記(空值)的傳票,等同「非關係人」。選是(Y)則只留 關係人傳票='Y' 的列。

改了條件,結果沒更新?

改完面板欄位要再按一次 查詢才會重新撈資料;面板只負責蒐集條件,不會即時連動結果格線。

相關功能


需補截圖清單

以下截圖待功能 runtime 驗收後補拍(放 docs/N-GeneralLedger/images/):

  1. sliybrowdcondition-step1.png — 條件面板全貌(日期、傳票種類、關係人、科目代號四欄)
  2. sliybrowdcondition-step2.png — 科目代號填入區間/逗號清單的範例
  3. sliybrowdcondition-step3.png — 按查詢後條件面板與右側日記帳結果的相對位置