程式資訊
- 程式 ID:
_PRGPAR - 所屬子系統:A.系統資料
- 狀態:stable
系統程式參數¶
功能簡介¶
「系統程式參數」(程式代號 _PRGPAR)是整套 TsERP 的全域參數設定表。系統各模組執行時,許多預設值、開關與計算口徑都不是寫死在程式裡,而是在執行時以 U_Prgpar("參數名稱") 即時讀回——例如本位幣別、各層幣別的小數位數、新單據的預設倉庫等,都來自這張表。
本表以「參數名稱」為查詢鍵(key),整個公司共用一份。維護它的人通常是系統管理員或導入顧問:在系統上線、加開模組、調整會計/庫存口徑時,到這裡新增或修改對應的參數列即可,不需要改程式或重新部署。
全域,沒有「屬於某張表單」的外鍵
_PRGPAR 是以參數名稱為 key 的全公司共用表,並沒有「這列參數屬於哪一張單據」的外鍵欄位。表上雖有一個 單據別 欄位可填關聯的程式類別,但那只是文字標註、由維護者自行填寫,系統並不靠它做主鍵關聯。各程式讀參數時是直接用參數名稱比對,與單據別無關。詳見欄位連動與附加功能。
前置需求¶
- 權限:A.系統管理 →
A-040 系統程式參數的瀏覽與修改權限。由於改錯參數會牽動全公司的計算口徑與預設值,建議只開放給系統管理員。 - 基礎資料/前置概念:
| 資料 | 影響什麼 |
|---|---|
| 參數名稱(key)規劃 | 各程式靠 U_Prgpar("參數名稱") 取值,名稱打錯該程式就讀不到,會退回空字串/預設行為 |
| 幣別主檔、小數位數政策 | 參數名稱 6(本位幣)、7/15/16/17(本位/功能/集團/系統幣小數位)會被系統啟動時讀去設定全域金額精度 |
| 倉庫主檔 | 參數名稱 3010(新訂單預設倉庫)等須先有對應的倉庫代號存在 |
| 類別(參數分類) | 決定參數在維護畫面歸到哪一類,純屬分類用途(系統設定/密碼/會計/庫存…) |
改參數等於改全系統行為
這張表的值會在「使用者登入」時載入記憶體(Context.User.ParameterList),之後各程式直接從記憶體讀。修改後若該使用者已登入,可能要重新登入才會反映新值;唯一例外是透過「目前表單參數」彈窗存檔時會同步更新記憶體快取(見欄位連動與附加功能)。
操作步驟¶
本表是標準的單筆主檔維護畫面(無明細、無條件查詢面板、無列印頁)。操作沿用系統共用的工具列(查詢/新增/修改/刪除/儲存/取消)。
查詢既有參數¶
- 從主選單開啟 A.系統管理 → 系統程式參數(A-040)。
- 按工具列
查詢,在 參數名稱 欄輸入要找的 key(例如6、3010、REPORTSROOT),或用瀏覽視窗(放大鏡)挑選。 -
系統帶出該筆的 類別、單據別、項目說明、參數 等內容。
瀏覽清單會過濾保留區間
透過瀏覽視窗或導覽查詢時,系統會自動排除 項目 介於
90000~99999的保留列(系統內部使用),只列出一般參數。
新增參數¶
- 按工具列
新增。 - 在 參數名稱 輸入這支參數的 key(這是各程式
U_Prgpar(...)會比對的字串,務必與程式約定一致)。 - 在 類別 下拉選擇分類(系統設定/密碼設定/會計/庫存/總務/訂單與客戶/採購與供應商/產品/BOM/特殊設定)。選好後 類別說明 會自動帶出對應文字。
- 在 參數 欄填入實際的值(例如倉庫代號、幣別代碼、小數位數、開關字元等)。
- 視需要填寫 單據別、項目說明、項目說明(英)、參數說明、參數說明(英) 等輔助欄位。
-
按
儲存。小技巧
可用 Ctrl+S 快速儲存。
修改/刪除¶
- 先
查詢帶出該筆,按修改進入編輯,調整 參數 等欄位後儲存。 -
要刪除整列參數則按
刪除。刪除前先確認沒有程式在讀它
若某參數名稱仍被程式以
U_Prgpar(...)引用,刪掉後該程式會讀到空字串,連帶讓預設值消失或計算口徑跑掉。刪除前請確認沒有任何功能依賴它。

從單據快速維護該單相關參數(目前表單參數)¶
除了到本作業逐筆維護,系統另提供一個「目前表單參數」彈窗,可在操作某張單據時直接調出與該單據相關的參數列做 grid 編輯:
- 在任一張表單上,從動態功能選單按「編輯本表單參數」開啟彈窗(彈窗標題顯示為「該功能名稱 - 參數設定」)。
- 按
查詢,系統以目前表單的 ProgramClass 比對_PRGPAR的 單據別 欄位,列出標註為屬於這張單的參數。 -
在 grid 內直接修改 參數/項目說明 等欄位後
儲存。存檔成功會即時更新記憶體快取,不必重新登入即可生效。彈窗只看得到有標單據別的列
此彈窗一律以目前表單的 ProgramClass 過濾,沒有對應 單據別 的參數不會出現;要編輯全部參數仍請走本作業(
_PRGPAR)。詳見欄位連動與附加功能。
欄位說明¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 參數名稱 | ✔ | 主鍵字串,各程式 U_Prgpar("參數名稱") 的比對鍵。可為數字(如 6、3010)或文字(如 REPORTSROOT)。長度上限 30 字,預設空字串 |
| 類別 | ✔ | 參數分類下拉,代碼 0~9:0系統設定/1密碼設定/2會計/3庫存/4總務/5訂單與客戶/6採購與供應商/7產品/8BOM/9特殊設定。純分類用途 |
| 類別說明 | 自動 | 由 類別 帶出的文字,存檔時自動回填(見下節),不需手動輸入 |
| 單據別 | — | 文字標註此參數關聯的程式類別(ProgramClass)。供「目前表單參數」彈窗過濾用;可多筆/自由文字,長度上限 60 字,預設空字串 |
| 項目說明 | — | 此參數用途的中文說明,長度上限 500 字 |
| 項目說明(英) | — | 英文說明,長度上限 500 字 |
| 參數 | ✔ | 參數的實際值(倉庫代號、幣別、小數位數、開關字元等)。長度上限 200 字,預設空字串 |
| 參數說明 | — | 對「參數值」格式或可用選項的補充說明,長度上限 500 字 |
| 參數說明(英) | — | 英文補充說明,長度上限 500 字 |
畫面上看不到的欄位
資料表(view Twork_sys_vw_prgpar)另含 公司代碼、項目、參數別、建檔日期、聯絡單id、工作流程、審核人員/審核日期/已審核 等欄位,但目前維護畫面並未提供這些欄位的輸入,多由系統內部維護。其中 項目 介於 90000~99999 是系統保留區,瀏覽時會被過濾掉。
欄位連動與附加功能¶
這一節把「輸入某欄位後系統會做什麼」「這張表如何被其他程式取用」整理清楚——這是理解本表的關鍵。
表單內的欄位連動¶
- 選了「類別」→ 自動帶出「類別說明」並於存檔時回寫:類別下拉用的是
ParameterClassDescriptionEnum(代碼 0~9)。在 XAML 上,類別說明會跟著下拉選擇即時顯示;存檔前_prgparSave.HandleDataBeforeEndEdit()還會再以目前 類別 反查一次列舉、把對應的描述字串寫回 類別說明 欄位,確保存進 DB 的說明與類別代碼一致。所以你不需要、也不應該手打類別說明。 - 參數名稱是主鍵:以
TsPrimaryKeyTextBox呈現,並綁定FocusExtension.IsFocused,是工具列操作(如查詢/新增)時系統指定的焦點欄位,方便直接輸入鍵值。 - 多行輸入欄:單據別、項目說明、項目說明(英)、參數說明、參數說明(英) 都是可換行(
AcceptsReturn)的多行文字框,可填較長的說明或多個關聯單據別。 - 重要欄位以醒目色標示:參數名稱 與 參數 兩欄的標籤用
ImportantColor顯示,提示這兩欄是這列參數的核心(key 與 value)。
這張表如何被全系統取用(最重要)¶
各程式不是直接查這張表,而是透過 Context.User.U_Prgpar("參數名稱") 從登入時載入的參數快取取值;查不到就回空字串。以下是程式碼中實際存在的取用範例(讓你知道改哪個 key 會動到什麼):
| 參數名稱 | 被誰讀、影響什麼 |
|---|---|
6 |
系統啟動時取前 3 碼當 本位幣別(EnvironmentSetting.SetSystemDecimalPlace) |
7 |
本位幣小數位數(金額顯示/計算精度) |
15 / 16 / 17 |
功能幣/集團幣/系統幣 的小數位數 |
3010 |
新增銷售訂單時帶入的預設倉庫(OrmastViewModel 新單預設) |
REPORTSROOT 等文字鍵 |
報表根目錄等路徑型設定 |
換句話說:改這張表的某一列,等於改掉所有讀那個參數名稱的程式的行為或預設值。這也是為何前置需求一再強調權限要收緊。
「目前表單參數」彈窗(CurrentProgramParameter)¶
系統提供另一條編輯路徑 CurrentProgramParameterViewModel / CurrentProgramParameterBll,讓使用者在操作某張單時就近維護該單相關參數:
- 以 ProgramClass 過濾:彈窗查詢時用「目前表單的 ProgramClass」精確比對
_PRGPAR.單據別欄位(單據別 = ProgramClass)。ProgramClass 為空時什麼都不查,不提供「列出全部」——要編輯全表請走本作業。 - 走取號鎖定的編輯流程:沿用
SqlEditTurn(查詢取號鎖定 → 編輯 → 存檔/取消),多人同時改同一批參數時以取號避免互蓋。 - 存檔即時同步記憶體:存檔成功後
SyncParameterList()會把改過的 參數/項目說明/類別/類別說明 直接寫回Context.User.ParameterList對應列,使U_Prgpar(...)不必重新登入就能讀到新值。 - 這也回答了一個常見疑惑:為什麼有時候改完馬上生效、有時候要重新登入——走彈窗存檔會同步快取,直接在本作業改則依快取載入時機而定。
沒有的功能(避免誤會)¶
- 無條件查詢面板:本表是單筆鍵值查詢,沒有像查詢報表那種多條件面板。
- 無列印頁/報表:程式未提供
_PRGPAR的列印或GetReports。 - 無明細子表:單一主檔列,無 detail grid。
- 無簽核/工作流程實際運作於本畫面:view 雖帶有 工作流程/審核人員/已審核 等欄位,但本維護畫面未提供其輸入或簽核動作。
常見問題¶
我改了參數,為什麼系統行為沒變?
參數值是在登入時載入記憶體(Context.User.ParameterList)後,各程式才從記憶體讀。直接在本作業(A-040)改完,已登入的使用者可能要重新登入才會反映新值。若希望立即生效,改用單據上的「目前表單參數」彈窗存檔——它會同步記憶體快取(見欄位連動與附加功能)。
某程式讀不到我設的參數(變成空白/用了預設)?
程式是用 U_Prgpar("參數名稱") 以字串完全比對取值,查不到回空字串。請確認:參數名稱與程式約定的 key 完全一致(含大小寫、不要多空白),且該列確實已存檔。例如要設新訂單預設倉庫,key 必須是程式約定的 3010,不是自訂名稱。
為什麼瀏覽清單裡看不到某些參數?
瀏覽/導覽查詢會自動過濾掉 項目 介於 90000~99999 的系統保留列,這些是系統內部使用、不對外維護的參數,屬正常現象。
「類別說明」欄要自己打嗎?
不用。類別說明 由 類別 下拉自動帶出,存檔前系統還會再以類別代碼反查列舉回填一次,確保與類別一致。手打反而可能被覆蓋。
在單據上的「編輯本表單參數」彈窗按查詢卻一片空白?
該彈窗只列出 單據別 欄位標註為「目前這張表單 ProgramClass」的參數列。若這張單還沒有任何參數把 單據別 填成它的 ProgramClass,彈窗就會是空的——要編輯所有參數請改到本作業(A-040)。
可以直接刪掉用不到的參數嗎?
可以刪,但刪前務必確認沒有任何程式以該參數名稱呼叫 U_Prgpar。一旦刪掉,引用它的功能會讀到空字串,預設值消失或計算口徑(如小數位數、本位幣)出錯。
相關功能¶
需補截圖清單
以下截圖待 runtime 驗收後補拍(放 docs/A-System/images/):
_prgpar-step1.png— 系統程式參數維護畫面(含參數名稱/類別下拉/參數欄位全貌)_prgpar-step2.png—(選)單據上的「目前表單參數」彈窗(grid 編輯畫面)