程式資訊
- 程式 ID:
DATATPL - 所屬子系統:A.系統資料
- 狀態:stable
資料模板¶
功能簡介¶
「資料模板」(DATATPL,A-120)是一份可重複使用的動態欄位定義表。一筆主檔代表一個模板(以資料模板號為主鍵),底下的明細逐列定義「這個模板要長出哪些欄位」——欄位名、資料型態、長度、小數位數、標題、輸入遮罩、驗證方法、公式、參照資料、輸入方式、搜尋方式、權限等。
系統其他表單不會把欄位寫死在程式裡,而是在執行時讀取對應的資料模板,動態產生格線欄位。例如人事資料的「聯絡人/其他/學歷/工作經歷」子表(模板 P1),以及供應商資料的動態欄位(模板 SP1),都是靠這支表單維護的定義產生的。換句話說,資料模板是給系統管理者用來「不改程式就能調整某些表單欄位結構」的設定主檔。
誰會用這支表單
一般操作人員不會直接維護資料模板。它屬於系統建置/顧問導入階段的設定,調整後會影響所有引用該模板的表單欄位,請由系統管理者謹慎維護。
前置需求¶
- 權限:A.系統資料 →
A-120 資料模板的對應權限(瀏覽/新增/修改/刪除)。 - 相關認知:因為模板會被別的表單引用,調整前需了解下列對應關係——
| 資料 | 影響什麼 |
|---|---|
| 資料模板號 | 程式以此代號(如 P1、SP1)讀取整份模板,決定要長出的欄位 |
| 明細的 欄位(英文欄名) | 動態格線實際產生的欄位識別碼,引用端依此填值,改名等於換欄位 |
明細的 資料型態(C/N) |
決定該欄是文字欄或數值欄,影響存值與格式 |
明細的 備註 分群前綴(如 P1_1、P1_2) |
引用端用前綴把同一模板切成多個子表,並取最後一段 _ 之後文字當子表標題 |
改動會擴散到引用端
模板被多支表單共用。新增或刪除欄位、改欄名、改型態,會直接改變引用該模板之表單的欄位結構與既有資料對應。請先確認哪些表單引用了此模板再動手。
操作步驟¶
本表單為標準的主檔+明細維護畫面(上方主檔欄位、下方明細格線),透過上方工具列的 新增/修改/刪除/查詢/儲存 操作。

查詢既有模板¶
- 按工具列
查詢,輸入或挑選資料模板號。 - 系統載入該模板的主檔(資料模板號、說明)與所有明細欄位定義。
新增模板¶
- 按
新增。 - 在上方主檔輸入:
- 資料模板號:模板的唯一代號(主鍵,最長 6 碼),引用端就是用這個代號讀模板。
- 說明:模板用途說明(最長 200 字)。
- 在下方明細格線逐列定義欄位(欄位意義見欄位說明)。每一列就是模板長出來的一個欄位。
- 按
儲存寫回。
修改/刪除¶
- 先
查詢出模板,按修改進入編輯。 - 可增列、改列或調整既有欄位定義。
- 要移除某欄位定義時,把該明細列的 欄位 清空即可標記刪除(見欄位連動與附加功能)。
- 按
儲存。
審核欄位
主檔資料表保留工作流程/審核人員/審核日期/已審核等審核欄位(與系統其他單據一致)。目前資料模板畫面以欄位維護為主,審核相關欄位在本頁未提供直接操作介面。
欄位說明¶
主檔欄位¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 資料模板號 | ✔ | 模板主鍵,最長 6 碼;引用端以此代號讀取整份模板 |
| 說明 | — | 模板用途說明,最長 200 字 |
明細欄位(每列=模板的一個欄位定義)¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 序號 | ✔ | 明細排序碼,最長 6 碼 |
| 欄位 | ✔ | 欄位的英文識別碼(最長 10 碼)。引用端以此存取值;清空代表刪除此列 |
| 資料型態 | ✔ | 單一字元:C=文字、N=數值。決定該欄存文字內容或數字內容 |
| 長度 | — | 欄位長度(數值,0–255) |
| 小數位數 | — | 小數位數(數值,0–255),數值型態才有意義 |
| 標題 | — | 顯示用欄位標題(最長 30 字),動態格線的欄頭文字 |
| 說明(說明d) | — | 欄位補充說明(最長 80 字) |
| 輸入遮罩 | — | 輸入格式遮罩(最長 250 字) |
| valid方法 | — | 欄位驗證方法/運算式(最長 250 字) |
| 公式 | — | 欄位計算公式(最長 250 字) |
| 參照資料 | — | 參照來源定義(最長 250 字) |
| 輸入方式 | — | 輸入方式設定(最長 10 字) |
| 輸入內容 | — | 輸入內容/選項定義(最長 250 字) |
| 允許輸入 | — | 是否允許輸入旗標(單一字元) |
| 搜尋方式 | — | 搜尋方式設定(最長 250 字) |
| 權限 | — | 欄位層級權限設定(最長 30 字) |
備註欄是引用端的分群鍵
明細另有一個 備註 欄位(最長 80 字)。它在動態格線本身不顯示,但引用端會用它的前綴把同一模板切成多個子表(見欄位連動與附加功能)。維護時若引用端有分子表需求,需依約定填入正確前綴。
欄位連動與附加功能¶
這一節說明「資料模板被存下來後,系統怎麼用它」,因為模板本身的價值在於被引用端動態展開。以下行為都來自實際程式碼(DataGridCreator、Vwseek_datatpl、TsTemplateDataTable)。
明細列「欄位」欄清空=刪除該定義¶
當你把某明細列的 欄位 清空(空白)時,該列被視為「需刪除」並在儲存時移除。這是來源端 NeedDeleteFunction 以 欄位 是否空白判定的——所以新增一列卻沒填欄位名,存檔時不會被保留。
引用端如何讀取模板(資料模板號的去向)¶
- 引用該模板的程式呼叫
GetVwseek_datatpl(dataEvent, 資料模板號),以 資料模板號 為條件抓出整份明細定義。 - 系統依 資料型態 把每個 欄位 對應成格線欄:
C→ 文字欄、N→ 數值(decimal)欄。 - 載入後會自動補上三個系統欄(
序號為唯讀可見欄,NeedDelete、IsVirtualEmpty為隱藏欄),其中IsVirtualEmpty預設False。這些都是系統自動加上的,不需在模板裡定義。
備註前綴:把一個模板切成多個子表¶
引用端常把同一模板依 備註 前綴拆成數個子表,並用前綴最後一段(_ 之後的文字)當子表標題。實際例子:
- 人事資料(PERDATA) 讀模板
P1,再依備註前綴分成四個子表:P1_1→ 聯絡人P1_2→ 其他P1_3→ 學歷P1_4→ 工作經歷
- 供應商資料(SPDATA) 讀模板
SP1,整份當成一組動態欄位。
也就是說:同一模板要分成幾個區塊、各區塊叫什麼名字,是靠你在 備註 填的前綴決定的;子表標題=備註裡最後一個 _ 後面的文字。
文字欄 vs 數值欄的存值¶
引用端把使用者填的值依 資料型態 分流存放:C 型欄位存進「文字內容」,N 型欄位 decimal.TryParse 後存進「數字內容」。所以型態填錯(例如金額欄填成 C)會讓該欄無法以數值方式運算或排序。
型態與既有資料
既有引用端資料是依舊的 資料型態 存放的。事後把欄位從 C 改成 N(或反向)不會回頭轉換既有資料,可能造成新舊資料解讀不一致,調整前請評估影響。
valid方法/公式/輸入遮罩等欄位
這些欄位是模板定義裡帶的設定字串,由各引用端自行解讀套用,效果視引用端實作而定;本表單只負責「維護這些定義字串」,不在資料模板畫面內即時執行驗證或公式。
常見問題¶
新增了一列明細,存檔後卻不見了?
明細列以 欄位 欄是否有值判定是否保留。若該列的 欄位 留空,會被視為「需刪除」而不寫入。請確認每一筆要保留的欄位定義都有填 欄位 英文識別碼。
改了模板,但引用的表單(如人事資料、供應商資料)沒變?
引用端是在開啟表單時才讀取模板。請關閉並重新開啟引用該模板的表單,讓它重新呼叫 GetVwseek_datatpl 取得最新定義。
人事資料的子表(聯絡人/學歷…)怎麼分出來的?
那是同一個模板 P1 依明細 備註 的前綴(P1_1、P1_2、P1_3、P1_4)切出來的子表,子表標題取自備註最後一個 _ 之後的文字。要新增或調整子表,需在對應前綴下維護欄位並由引用端對應。
某欄位無法做數值運算或排序?
請檢查該明細列的 資料型態。C 是文字、N 才是數值;金額、數量這類欄位要設成 N,引用端才會以 decimal 存放與運算。
模板號可以隨意改名嗎?
不建議。資料模板號 是引用端用來讀模板的代號,改了代號會讓原本引用舊代號的表單讀不到模板(欄位變空)。同理,明細的 欄位 英文識別碼也等同欄位身分,改名等於換成另一個欄位。
相關功能¶
- 人事資料(PERDATA) — 引用模板
P1動態展開聯絡人/其他/學歷/工作經歷子表 - 供應商資料(SPDATA) — 引用模板
SP1的動態欄位 - 檢查項目表(AUDIT) — A 模組同屬系統設定主檔
- A.系統資料模組首頁
需補截圖清單
以下截圖待 runtime 驗收後補拍(放 docs/A-System/images/):
datatpl-step1.png— 資料模板主畫面(上方主檔:資料模板號/說明;下方明細欄位定義格線)