程式資訊
- 程式 ID:
WKCALD - 所屬子系統:B.基本資料
- 狀態:stable
工作行事曆¶
功能簡介¶
「工作行事曆」以年度月份為單位,逐月設定公司每一天是上班日/休假日/例假日/國定假日,並登錄當天的工作時數。它是排程與工時計算的基礎主檔:生產的物料需求計畫(MRP)會以這份日曆把採購/製令日期往前推到實際的工作日,並把工作時數為 0 的天視為休假。由生管/人資或系統管理員在每年(或每月)開工前先把整年的工作日與假日維護好,後續單據才能算出正確的計劃發出日與交期。
每筆資料對應「一個年月」,明細則是該月用一張月曆呈現的每一天(固定 6 週 × 7 天 = 42 格,非當月的格子留白不顯示)。
前置需求¶
- 權限:B.基礎資料 →
B-100 工作行事曆的新增/修改/刪除/查詢權限。 - 基礎資料:本表單本身是最上游的設定主檔,不需先維護其他單據即可建立。但下列資料會影響它在流程中的作用——
| 資料 | 影響的結果 |
|---|---|
| 工作行事曆(本表單) | 生產 MRP 的計劃發出日/計劃收料日是否落在工作日;休假日的標示 |
| 部門代號/中心代號(選填於鍵值) | 同一年月可依部門/中心區分多份日曆,避免鍵值重複 |
與其他兩本日曆的差異
本表單(WKCALD)維護的是公司整體的工作日曆,類別固定為「1.生產」。
操作步驟¶
新增一個月的日曆¶
- 按工具列的
新增。 - 在上方輸入年度月份(格式
YYYY/MM,例如2026/06,套用YearAndMonth遮罩)。 - 按
Add按鈕,系統依該年月自動產生整月的月曆格子,並帶入預設的日期別與工作時數(見欄位連動與附加功能)。 - 在月曆上逐日調整:
- 點該天的日期別下拉,切換
上班日/休假日/例假日/國定假日;色點與底色會跟著日期別變色。 - 視需要在右側直接修改該天的工作時數。
- 點該天的日期別下拉,切換
- 按
儲存。
一定要先按 Add 再點月曆
新增模式下若沒有先輸入年度月份並按 Add,月曆是空白的、沒有任何可點選的日期格。Add 會依年月重建整月格子,先前的格子會被清掉重來。
修改既有月份¶
- 用工具列的上一筆/下一筆或查詢功能找到要修改的年月。
- 直接在月曆上改各天的日期別或工作時數。
- 按
儲存。
改年月要重產月曆
切換到既有資料時,系統會自動把該月的天數補滿並顯示。若你在修改模式改了年度月份再按 Add,等同重新產生整月格子(原本手動調整的假日會被預設值蓋掉),請留意。
刪除¶
- 切換到要刪除的年月。
- 按工具列的
刪除並確認。
查詢¶
以年度月份為主鍵瀏覽。逐筆移動時系統會把月曆首日之前的空格補上佔位格、再把當月各天設為可見(見 AfterMoverRecord)。
欄位說明¶
Master(年月表頭)¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 年度月份 | ✔ | YYYY/MM,套 YearAndMonth 遮罩;未填時存檔會被擋(提示「請先輸入年度月份」) |
| 類別 | — | 存檔時系統固定寫入 1.生產(程式內另有 2.財務/3.考勤的保留值,但本表單一律用生產) |
| 部門代號 | — | 併入鍵值(右補空白至 10 碼);一般留空 |
| 中心代號 | — | 併入鍵值(右補空白至 10 碼);一般留空 |
| 鍵值 | 系統 | 存檔時由系統組成=年度月份 + 部門代號(10) + 中心代號(10) + 類別,作為唯一鍵做重複檢查 |
稽核/簽核欄位
Master 另含建檔日期、審核人員、審核日期、已審核、工作流程、聯絡單id 等欄位,由系統維護,本表單畫面不直接編輯。
Detail(每日格子)¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 日期 | 系統 | YYYY/MM/DD,由 Add 依年月與星期排定 |
| 日期別 | ✔ | 1.上班日/2.休假日/3.例假日/4.國定假日;以下拉選取,預設依星期帶入 |
| 工作時數 | ✔ | 儲存精度小數 1 位(格式 3,1),月曆格內以小數 2 位顯示;預設上班日 8、假日 0;存檔時超過 24 會被強制壓回 24 |
| 編排位置 | 系統 | 0~41,月曆 42 格的排序位置;明細以此欄遞增排序 |
| 人數 | — | 小數 1 位(8,1) |
| 工作分鐘數 | — | 整數 |
| 總工時 | — | 整數 |
| 說明 | — | 最長 30 字的當日備註 |
欄位連動與附加功能¶
這是本頁最重要的一節,整理「輸入某欄位/按某按鈕後系統會做什麼」,全部對應實際程式碼。
按 Add:依年月產生整月月曆(AddExecute → SetCalendar)¶
當你輸入年度月份後按 Add,系統會:
- 以「年月 + 01 日」算出該月 1 號是星期幾,求出月初在月曆第一列的偏移格數。
- 把目前明細裡既有的每一天標記為刪除(
增刪修 = D、編排位置設 99),再重建。 - 依序新增 42 格(6 週 × 7 天)。落在偏移格之前、或不是有效日期的格子留白(不可見);有效日期的格子才填日期並設為可見。
- 依星期自動帶入日期別與工作時數:
- 週一~週五 → 日期別
1.上班日,工作時數8。 - 週六 → 日期別
2.休假日,工作時數0。 - 週日 → 日期別
3.例假日,工作時數0。
- 週一~週五 → 日期別
也就是說 Add 只是先鋪好「平日上班、週末放假」的底稿,國定假日(4.國定假日)需要你自己在月曆上手動改。
切換日期別下拉:色點與底色連動變色¶
月曆每一格的日期別是一個下拉(資料來源為 4 種日期別列舉)。當你切換日期別,該格的:
- 色點:上班日藍、休假日橘、例假日紅、國定假日紫。
- chip 底色:同色系的淺底色。
切換本身不會自動改工作時數——若把某天從上班日改成假日,記得一併把工作時數改為 0(反之亦然)。
輸入工作時數:存檔時上限 24¶
工作時數可在每格右側直接輸入(小數 2 位顯示)。存檔時若某天工作時數 > 24,系統會自動壓回 24(見 WkcaldSave)。工作時數 ≤ 0 在下游 MRP 中等同「休假、不可排工」。
新增:清空明細(AfterAddNew)¶
按工具列 新增 進入新增模式時,系統會先清空 Detail(月曆變空白),等你輸入年月並按 Add 後才重建格子。
逐筆移動:補佔位格並顯示(AfterMoverRecord)¶
瀏覽/移動到某筆年月時,系統取明細第一天的編排位置當作月初偏移量,先插入對應數量的「佔位格」(pkid 為負數,僅用來把月初推到正確的星期欄),再把當月各天設為可見。這些佔位格在存檔時會被標記為刪除,不會寫進資料庫。
儲存:年月必填、鍵值不可重複、工時夾限(WkcaldSave.AllowSave)¶
按 儲存 時系統依序檢查:
- 年度月份必填:空白會擋下並提示「請先輸入年度月份」。
- 組鍵值並設類別:把類別寫成
1.生產,鍵值組成年度月份 + 部門代號(補10) + 中心代號(補10) + 類別。 - 重複檢查:透過
Darb_chkdblBll以鍵值檢查同一年月是否已存在(新增為 A、修改為 E,修改時帶自身 pkid 排除自己)。若重複,提示「資料重複」並擋存。 - 工作時數夾限:任何一天 > 24 的工作時數壓回 24。
- 清除佔位格:把 pkid < 0 的佔位明細標記為刪除(
增刪修 = D)。
Add30years:一次產生未來 30 年(目前隱藏)¶
規劃中/目前隱藏
程式內另有一個 Add30years 按鈕(Add30Command),可從今年起一次產生 30 年 × 12 個月的整批日曆並直接上傳。此按鈕在畫面上目前設為隱藏(Visibility="Collapsed"),屬於批次初始化用途,一般操作不會用到,故不在標準操作步驟中。若日後啟用,效果是大量自動建檔(同樣套「平日上班、週末放假」規則)。
下游連動:生產 MRP 以本日曆推算工作日¶
工作行事曆是排程的時間基準。物料需求計畫(MRP)會用它把製令/採購的日期往前推到實際工作日(安全時間、前置時間的天數偏移會跳過休假),並在查詢結果上把工作時數 ≤ 0 的天標為「休」。維護假日時若漏設,會造成 MRP 把計劃發出日排在實際放假的日期上。
常見問題¶
新增後月曆是空白的,點不到任何日期?
新增模式下需要先在上方輸入年度月份(YYYY/MM)再按 Add,系統才會依該年月鋪出整月的日期格。沒按 Add 之前明細是空的。
存檔時跳「請先輸入年度月份」?
年度月份沒填。請輸入合法的 YYYY/MM 後再存。
存檔時跳「資料重複」?
同一個鍵值(年度月份+部門代號+中心代號+類別)已經有一筆。同一年月若不分部門/中心只會有一筆,請改用修改現有資料,而不是重新新增。
為什麼國定假日沒有自動帶出來?
Add 只依星期自動分平日(上班日)與週末(週六=休假日、週日=例假日),不會自動套用國定假日。國定假日(4.國定假日)需要你在月曆上逐天手動切換日期別,並把工作時數改為 0。
把工作時數打成 30 小時,存檔後怎麼變 24?
這是設計的上限保護。存檔時任何一天的工作時數超過 24 都會被壓回 24。
改了日期別,但工時沒跟著變?
切換日期別不會自動改工作時數。把某天設為假日時,請一併把該天工作時數改成 0,下游排程才會正確把它當休假。
相關功能¶
需補截圖清單
以下截圖待 runtime 驗收後補拍(放 docs/B-BasicData/images/):
wkcald-step1.png— 新增、輸入年度月份並按Add後的整月月曆全貌wkcald-step2.png— 單格的日期別下拉(含 4 種日期別與變色色點)與工作時數輸入wkcald-step3.png— 手動標好國定假日後、各色日期別並陳的月曆