跳轉到

程式資訊

  • 程式 IDDATATPL
  • 所屬子系統:A.系統資料
  • 狀態:stable

資料模板

功能簡介

「資料模板」(DATATPL,A-120)是一份可重複使用的動態欄位定義表。一筆主檔代表一個模板(以資料模板號為主鍵),底下的明細逐列定義「這個模板要長出哪些欄位」——欄位名、資料型態、長度、小數位數、標題、輸入遮罩、驗證方法、公式、參照資料、輸入方式、搜尋方式、權限等。

系統其他表單不會把欄位寫死在程式裡,而是在執行時讀取對應的資料模板,動態產生格線欄位。例如人事資料的「聯絡人/其他/學歷/工作經歷」子表(模板 P1),以及供應商資料的動態欄位(模板 SP1),都是靠這支表單維護的定義產生的。換句話說,資料模板是給系統管理者用來「不改程式就能調整某些表單欄位結構」的設定主檔。

誰會用這支表單

一般操作人員不會直接維護資料模板。它屬於系統建置/顧問導入階段的設定,調整後會影響所有引用該模板的表單欄位,請由系統管理者謹慎維護。

前置需求

  • 權限:A.系統資料 → A-120 資料模板 的對應權限(瀏覽/新增/修改/刪除)。
  • 相關認知:因為模板會被別的表單引用,調整前需了解下列對應關係——
資料 影響什麼
資料模板號 程式以此代號(如 P1SP1)讀取整份模板,決定要長出的欄位
明細的 欄位(英文欄名) 動態格線實際產生的欄位識別碼,引用端依此填值,改名等於換欄位
明細的 資料型態CN 決定該欄是文字欄或數值欄,影響存值與格式
明細的 備註 分群前綴(如 P1_1P1_2 引用端用前綴把同一模板切成多個子表,並取最後一段 _ 之後文字當子表標題

改動會擴散到引用端

模板被多支表單共用。新增或刪除欄位、改欄名、改型態,會直接改變引用該模板之表單的欄位結構與既有資料對應。請先確認哪些表單引用了此模板再動手。

操作步驟

本表單為標準的主檔+明細維護畫面(上方主檔欄位、下方明細格線),透過上方工具列的 新增修改刪除查詢儲存 操作。

資料模板主畫面

查詢既有模板

  1. 按工具列 查詢,輸入或挑選資料模板號
  2. 系統載入該模板的主檔(資料模板號、說明)與所有明細欄位定義。

新增模板

  1. 新增
  2. 在上方主檔輸入:
    • 資料模板號:模板的唯一代號(主鍵,最長 6 碼),引用端就是用這個代號讀模板。
    • 說明:模板用途說明(最長 200 字)。
  3. 在下方明細格線逐列定義欄位(欄位意義見欄位說明)。每一列就是模板長出來的一個欄位。
  4. 儲存 寫回。

修改/刪除

  1. 查詢 出模板,按 修改 進入編輯。
  2. 可增列、改列或調整既有欄位定義。
  3. 要移除某欄位定義時,把該明細列的 欄位 清空即可標記刪除(見欄位連動與附加功能)。
  4. 儲存

審核欄位

主檔資料表保留工作流程/審核人員/審核日期/已審核等審核欄位(與系統其他單據一致)。目前資料模板畫面以欄位維護為主,審核相關欄位在本頁未提供直接操作介面。

欄位說明

主檔欄位

欄位 必填 說明/格式/預設
資料模板號 模板主鍵,最長 6 碼;引用端以此代號讀取整份模板
說明 模板用途說明,最長 200 字

明細欄位(每列=模板的一個欄位定義)

欄位 必填 說明/格式/預設
序號 明細排序碼,最長 6 碼
欄位 欄位的英文識別碼(最長 10 碼)。引用端以此存取值;清空代表刪除此列
資料型態 單一字元:C=文字、N=數值。決定該欄存文字內容或數字內容
長度 欄位長度(數值,0–255)
小數位數 小數位數(數值,0–255),數值型態才有意義
標題 顯示用欄位標題(最長 30 字),動態格線的欄頭文字
說明(說明d) 欄位補充說明(最長 80 字)
輸入遮罩 輸入格式遮罩(最長 250 字)
valid方法 欄位驗證方法/運算式(最長 250 字)
公式 欄位計算公式(最長 250 字)
參照資料 參照來源定義(最長 250 字)
輸入方式 輸入方式設定(最長 10 字)
輸入內容 輸入內容/選項定義(最長 250 字)
允許輸入 是否允許輸入旗標(單一字元)
搜尋方式 搜尋方式設定(最長 250 字)
權限 欄位層級權限設定(最長 30 字)

備註欄是引用端的分群鍵

明細另有一個 備註 欄位(最長 80 字)。它在動態格線本身不顯示,但引用端會用它的前綴把同一模板切成多個子表(見欄位連動與附加功能)。維護時若引用端有分子表需求,需依約定填入正確前綴。

欄位連動與附加功能

這一節說明「資料模板被存下來後,系統怎麼用它」,因為模板本身的價值在於被引用端動態展開。以下行為都來自實際程式碼(DataGridCreatorVwseek_datatplTsTemplateDataTable)。

明細列「欄位」欄清空=刪除該定義

當你把某明細列的 欄位 清空(空白)時,該列被視為「需刪除」並在儲存時移除。這是來源端 NeedDeleteFunction欄位 是否空白判定的——所以新增一列卻沒填欄位名,存檔時不會被保留。

引用端如何讀取模板(資料模板號的去向)

  1. 引用該模板的程式呼叫 GetVwseek_datatpl(dataEvent, 資料模板號),以 資料模板號 為條件抓出整份明細定義。
  2. 系統依 資料型態 把每個 欄位 對應成格線欄:C → 文字欄、N → 數值(decimal)欄。
  3. 載入後會自動補上三個系統欄(序號 為唯讀可見欄,NeedDeleteIsVirtualEmpty 為隱藏欄),其中 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_1P1_2P1_3P1_4)切出來的子表,子表標題取自備註最後一個 _ 之後的文字。要新增或調整子表,需在對應前綴下維護欄位並由引用端對應。

某欄位無法做數值運算或排序?

請檢查該明細列的 資料型態C 是文字、N 才是數值;金額、數量這類欄位要設成 N,引用端才會以 decimal 存放與運算。

模板號可以隨意改名嗎?

不建議。資料模板號 是引用端用來讀模板的代號,改了代號會讓原本引用舊代號的表單讀不到模板(欄位變空)。同理,明細的 欄位 英文識別碼也等同欄位身分,改名等於換成另一個欄位。

相關功能


需補截圖清單

以下截圖待 runtime 驗收後補拍(放 docs/A-System/images/):

  1. datatpl-step1.png — 資料模板主畫面(上方主檔:資料模板號/說明;下方明細欄位定義格線)