跳轉到

程式資訊

  • 程式 IDWKCALD
  • 所屬子系統:B.基本資料
  • 狀態:stable

工作行事曆

功能簡介

「工作行事曆」以年度月份為單位,逐月設定公司每一天是上班日/休假日/例假日/國定假日,並登錄當天的工作時數。它是排程與工時計算的基礎主檔:生產的物料需求計畫(MRP)會以這份日曆把採購/製令日期往前推到實際的工作日,並把工作時數為 0 的天視為休假。由生管/人資或系統管理員在每年(或每月)開工前先把整年的工作日與假日維護好,後續單據才能算出正確的計劃發出日與交期。

每筆資料對應「一個年月」,明細則是該月用一張月曆呈現的每一天(固定 6 週 × 7 天 = 42 格,非當月的格子留白不顯示)。

前置需求

  • 權限:B.基礎資料 → B-100 工作行事曆 的新增/修改/刪除/查詢權限。
  • 基礎資料:本表單本身是最上游的設定主檔,不需先維護其他單據即可建立。但下列資料會影響它在流程中的作用——
資料 影響的結果
工作行事曆(本表單) 生產 MRP 的計劃發出日/計劃收料日是否落在工作日;休假日的標示
部門代號/中心代號(選填於鍵值) 同一年月可依部門/中心區分多份日曆,避免鍵值重複

與其他兩本日曆的差異

本表單(WKCALD)維護的是公司整體的工作日曆,類別固定為「1.生產」。

操作步驟

新增一個月的日曆

  1. 按工具列的 新增
  2. 在上方輸入年度月份(格式 YYYY/MM,例如 2026/06,套用 YearAndMonth 遮罩)。
  3. Add 按鈕,系統依該年月自動產生整月的月曆格子,並帶入預設的日期別與工作時數(見欄位連動與附加功能)。
  4. 在月曆上逐日調整:
    1. 點該天的日期別下拉,切換 上班日休假日例假日國定假日;色點與底色會跟著日期別變色。
    2. 視需要在右側直接修改該天的工作時數
  5. 儲存

一定要先按 Add 再點月曆

新增模式下若沒有先輸入年度月份並按 Add,月曆是空白的、沒有任何可點選的日期格。Add 會依年月重建整月格子,先前的格子會被清掉重來。

修改既有月份

  1. 用工具列的上一筆/下一筆或查詢功能找到要修改的年月。
  2. 直接在月曆上改各天的日期別工作時數
  3. 儲存

改年月要重產月曆

切換到既有資料時,系統會自動把該月的天數補滿並顯示。若你在修改模式改了年度月份再按 Add,等同重新產生整月格子(原本手動調整的假日會被預設值蓋掉),請留意。

刪除

  1. 切換到要刪除的年月。
  2. 按工具列的 刪除 並確認。

查詢

以年度月份為主鍵瀏覽。逐筆移動時系統會把月曆首日之前的空格補上佔位格、再把當月各天設為可見(見 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:依年月產生整月月曆(AddExecuteSetCalendar

當你輸入年度月份後按 Add,系統會:

  1. 以「年月 + 01 日」算出該月 1 號是星期幾,求出月初在月曆第一列的偏移格數。
  2. 把目前明細裡既有的每一天標記為刪除(增刪修 = D、編排位置設 99),再重建。
  3. 依序新增 42 格(6 週 × 7 天)。落在偏移格之前、或不是有效日期的格子留白(不可見);有效日期的格子才填日期並設為可見。
  4. 依星期自動帶入日期別與工作時數
    • 週一~週五 → 日期別 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. 年度月份必填:空白會擋下並提示「請先輸入年度月份」。
  2. 組鍵值並設類別:把類別寫成 1.生產,鍵值組成 年度月份 + 部門代號(補10) + 中心代號(補10) + 類別
  3. 重複檢查:透過 Darb_chkdblBll 以鍵值檢查同一年月是否已存在(新增為 A、修改為 E,修改時帶自身 pkid 排除自己)。若重複,提示「資料重複」並擋存。
  4. 工作時數夾限:任何一天 > 24 的工作時數壓回 24。
  5. 清除佔位格:把 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/):

  1. wkcald-step1.png — 新增、輸入年度月份並按 Add 後的整月月曆全貌
  2. wkcald-step2.png — 單格的日期別下拉(含 4 種日期別與變色色點)與工作時數輸入
  3. wkcald-step3.png — 手動標好國定假日後、各色日期別並陳的月曆