跳轉到

程式資訊

  • 程式 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),之後各程式直接從記憶體讀。修改後若該使用者已登入,可能要重新登入才會反映新值;唯一例外是透過「目前表單參數」彈窗存檔時會同步更新記憶體快取(見欄位連動與附加功能)。

操作步驟

本表是標準的單筆主檔維護畫面(無明細、無條件查詢面板、無列印頁)。操作沿用系統共用的工具列(查詢/新增/修改/刪除/儲存/取消)。

查詢既有參數

  1. 從主選單開啟 A.系統管理 → 系統程式參數(A-040)
  2. 按工具列 查詢,在 參數名稱 欄輸入要找的 key(例如 63010REPORTSROOT),或用瀏覽視窗(放大鏡)挑選。
  3. 系統帶出該筆的 類別單據別項目說明參數 等內容。

    瀏覽清單會過濾保留區間

    透過瀏覽視窗或導覽查詢時,系統會自動排除 項目 介於 90000~99999 的保留列(系統內部使用),只列出一般參數。

新增參數

  1. 按工具列 新增
  2. 參數名稱 輸入這支參數的 key(這是各程式 U_Prgpar(...) 會比對的字串,務必與程式約定一致)。
  3. 類別 下拉選擇分類(系統設定/密碼設定/會計/庫存/總務/訂單與客戶/採購與供應商/產品/BOM/特殊設定)。選好後 類別說明 會自動帶出對應文字。
  4. 參數 欄填入實際的值(例如倉庫代號、幣別代碼、小數位數、開關字元等)。
  5. 視需要填寫 單據別項目說明項目說明(英)參數說明參數說明(英) 等輔助欄位。
  6. 儲存

    小技巧

    可用 Ctrl+S 快速儲存。

修改/刪除

  1. 查詢 帶出該筆,按 修改 進入編輯,調整 參數 等欄位後 儲存
  2. 要刪除整列參數則按 刪除

    刪除前先確認沒有程式在讀它

    若某參數名稱仍被程式以 U_Prgpar(...) 引用,刪掉後該程式會讀到空字串,連帶讓預設值消失或計算口徑跑掉。刪除前請確認沒有任何功能依賴它。

系統程式參數維護畫面

從單據快速維護該單相關參數(目前表單參數)

除了到本作業逐筆維護,系統另提供一個「目前表單參數」彈窗,可在操作某張單據時直接調出與該單據相關的參數列做 grid 編輯:

  1. 在任一張表單上,從動態功能選單按「編輯本表單參數」開啟彈窗(彈窗標題顯示為「該功能名稱 - 參數設定」)。
  2. 查詢,系統以目前表單的 ProgramClass 比對 _PRGPAR單據別 欄位,列出標註為屬於這張單的參數。
  3. 在 grid 內直接修改 參數項目說明 等欄位後 儲存。存檔成功會即時更新記憶體快取,不必重新登入即可生效。

    彈窗只看得到有標單據別的列

    此彈窗一律以目前表單的 ProgramClass 過濾,沒有對應 單據別 的參數不會出現;要編輯全部參數仍請走本作業(_PRGPAR)。詳見欄位連動與附加功能

欄位說明

欄位 必填 說明/格式/預設
參數名稱 主鍵字串,各程式 U_Prgpar("參數名稱") 的比對鍵。可為數字(如 63010)或文字(如 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/):

  1. _prgpar-step1.png — 系統程式參數維護畫面(含參數名稱/類別下拉/參數欄位全貌)
  2. _prgpar-step2.png —(選)單據上的「目前表單參數」彈窗(grid 編輯畫面)