跳轉到

程式資訊

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

客廠送貨工作日曆

功能簡介

「客廠送貨工作日曆」針對個別廠商(客廠)維護一整年的工作日曆,並在公司的工作日曆基礎上,依該廠商在廠商主檔設定的間隔日數,自動把每隔幾個工作天標記成一個 5.送貨日

它的用途是把「這家廠商多久送一次貨」變成排程上看得見的送貨日標記,供後續排產、備料前置期(lead time)與交期推算參考。負責採購、生管的人員會用到這支表單。

與公司工作日曆的關係

本表單不重新定義哪天上班、哪天放假——平日/週末是套用公司既有的工作日曆(透過 Util_Pdt 讀本機快取的工作日曆)。本表單只在這層基礎上,額外標出該廠商的送貨日。因此維護前請先確認公司工作日曆已建好當年度資料。

這是「廠商」日曆,不是純客戶日曆

雖然代號欄位用的是通用的客廠搜尋(可搜到客戶/廠商/部門),但本表單在儲存與帶值時會固定把類別寫成 1.廠商,且間隔日數一律從廠商主檔(spdata)讀取。實務上請以廠商代號維護。

前置需求

  • 權限:B.基礎資料 → B-110 客廠送貨工作日曆 的新增/修改/刪除/查詢權限。
  • 基礎資料:本表單的計算結果取決於下列資料是否已維護——
資料 影響什麼
公司工作日曆(當年度) 決定哪些日子是工作天;送貨日只會落在工作天,且間隔以「工作天」計算
廠商主檔(spdata,含間隔日數欄位) 帶出客廠簡稱間隔日數;間隔日數即每隔幾個工作天送一次貨
客廠搜尋來源(vwseek_cusp 視圖) 代號欄位的下拉/搜尋清單(客廠部代號/簡稱)

操作步驟

新增一份廠商年度日曆

  1. 開啟「客廠送貨工作日曆」。
  2. 按工具列 新增
  3. 年度 欄輸入西元年(YYYY,4 碼)。
  4. 客廠代號 欄輸入或搜尋廠商代號;系統會自動帶出右側唯讀的 客廠簡稱,並從廠商主檔帶入該廠商的 間隔日數
  5. 查詢 按鈕(畫面右上角,僅在新增狀態可按),系統會:
    • 先依客廠代號重新從廠商主檔讀取 客廠簡稱與間隔日數(注意:手動改過的間隔日數會在這一步被廠商主檔的值覆蓋——間隔日數實際是以廠商主檔為準,不是以欄位上輸入的值)。
    • 產生該年度整年的日曆(一月到十二月,依星期對齊排版)。
    • 把每個非週末日的 工作時數 預設為 8
    • 間隔日數 從每月第一天起,逐月往後跳算工作天,把跳到的日子標記為 5.送貨日(以粗體顯示)。
  6. 在年曆上點選任一天的格子,可手動把該天切換為 5.送貨日(見欄位連動與附加功能)。
  7. 按工具列 儲存

查詢/修改既有資料

  1. 用工具列的上一筆/下一筆(或查詢功能)切換到要看的廠商年度資料。
  2. 系統會重新帶出 客廠簡稱間隔日數,並把已存的整年日曆攤平到年曆上顯示。
  3. 進入修改狀態後,一樣可點格子調整送貨日,改完按 儲存

改了間隔日數要重新產生

查詢 按鈕只在新增狀態作用,且間隔日數以廠商主檔為準。若要用新的間隔日數整批重算送貨日,請先到廠商主檔調整間隔日數,再刪掉這份重建一份;單純微調個別日子則直接在年曆上點格切換即可。

欄位說明

Master(表頭)

欄位 必填 說明/格式/預設
年度 西元年 4 碼(YYYY),如 2026;非數字無法產生日曆
客廠代號 廠商代號,可用客廠搜尋帶入;對應廠商主檔
客廠簡稱 唯讀,依客廠代號自廠商主檔帶出
間隔日數 1 碼數字(輸入框最多 1 碼),預設 0,輸入客廠代號後改由廠商主檔帶入;每隔幾個工作天標記一個送貨日。小於 0(查無此廠商時會被設成 -1)按 查詢 直接不執行;實務上應維護為 1 以上才有意義

鍵值與類別是系統自動產生

存檔時系統會把 類別 固定設為 1.廠商,並組出 鍵值年度,客廠代號,類別(例 2026,V001,1.廠商)。這兩個欄位畫面上看不到、也不需手動輸入。

明細(年曆每一格=一天)

欄位 說明
日期 該格對應的日期(yyyy/MM/dd)
工作時數 工作天預設 8、週末為 0;間隔日數的「工作天」即以工作時數 > 0 判定
日期別 1.上班日2.休假日3.例假日5.送貨日,影響顯示顏色與字重
編排位置 排版用序號
人數/工作分鐘數/總工時/說明 明細其他欄位(一般情境留預設)

欄位連動與附加功能

這一節說明「輸入某欄位後會發生什麼」「按某按鈕會做什麼」,全部來自實際程式碼。

輸入「客廠代號」→ 帶出簡稱與間隔日數

當切換或新增資料、確定客廠代號後,系統執行 SetDescription:以客廠代號到廠商主檔視圖(spdata)查 廠商簡稱間隔日數,分別填入唯讀的 客廠簡稱間隔日數 欄。

查不到廠商時

若該代號在廠商主檔查不到,簡稱會留空、間隔日數回填為 -1。間隔日數小於 0 時,按 查詢 會在鋪上預設工時前就直接 return,不會產生任何送貨日標記(也不會報錯)。請確認輸入的是已建檔的廠商代號。

按「查詢」→ 產生整年日曆並自動標送貨日

查詢 僅在新增狀態可按(QueryCanExecute),且 年度 必須能轉成整數,否則直接 return。按下後依序做:

  1. 重讀廠商主檔:先呼叫 SetDescription 依客廠代號重新帶入客廠簡稱與間隔日數(覆蓋欄位上手動輸入的間隔日數)。
  2. 建立整年日曆:依 年度 產生 1~12 月、依星期對齊的整年格子,並移除日期為空的空白格(RemoveAll)。
  3. 間隔日數防呆:若間隔日數 < 0 直接 return(連預設工時都不鋪)。
  4. 鋪上預設工時:把所有非週末的日子工作時數設為 8(週末維持 0,並以淡紅底標示)。
  5. 逐月跳算送貨日:對每個月,從該月第一天起,呼叫公司工作日曆的「往後第 N 個工作天」邏輯(Updt_BackWKDay_Lcl,N=間隔日數),把每次跳到的工作天標記為 5.送貨日,直到跨出該月為止。

送貨日只落在工作天

間隔是以工作天計算,不是日曆天——跳算時會自動略過工作時數為 0 的週末/休假日。因此實際兩個送貨日之間相隔的日曆天數,會隨中間有沒有假日而變動。

點年曆格子→ 手動切換送貨日

每個日期格都掛有點擊命令(ChangeExecute)。在編輯狀態(非瀏覽)下點任一天,系統會把該天的 日期別 設為 5.送貨日SetDayCell),並即時更新該格的字重與顏色。

點選只會「設成」送貨日,不會切回

目前點格的行為是把該天標記為送貨日(粗體),並沒有「再點一次取消」的反向切換。若要清掉,請重新按 查詢 重建,或刪除整份重來。

顏色與字重規則(顯示用)

年曆每格的外觀由 日期別 與是否週末決定:

條件 顯示
週末(六、日) 淡紅色底
日期別=1.上班日 藍字
日期別=2.休假日 桃紅字(粉紫)
日期別=3.例假日 紅字
日期別=5.送貨日 粗體
其他 黑字、正常字重

存檔→ 自動補鍵值與類別

儲存 時,存檔前置檢核(WkcaldcsSave.AllowSave)會對每筆 Master 呼叫 SetKey:把 類別 設為 1.廠商,並組出 鍵值年度,客廠代號,類別。因此同一個廠商+同一年度只會有一份日曆(以鍵值唯一)。

明細不提供逐筆刪除

本表單明細(每天的格子)刻意關閉了單列刪除功能(NeedDeleteFunction 回 false)。日曆是「整年一份」的概念,調整以重新產生或刪整份為主。

常見問題

按了「查詢」卻沒有任何送貨日被標出來?

請檢查三點:(1) 間隔日數 是否為負數——小於 0(含查無廠商被設成 -1 的情況)按 查詢 會直接不執行;(2) 客廠代號 是否為已建檔的廠商;(3) 公司工作日曆該年度是否已建立——送貨日只會落在工作時數 > 0 的工作天上。建議間隔日數維護為 1 以上。

「客廠簡稱」一直是空白?

簡稱是依客廠代號到廠商主檔(spdata)即時帶出的。若空白,代表該代號在廠商主檔查無此人——請確認輸入的是廠商代號、且該廠商已建檔。客廠搜尋雖然能搜到客戶/部門,但本表單只認得廠商。

「間隔日數」我在欄位上手動改了,產出的送貨日卻照舊?

這是正常的:按 查詢 時系統會先重讀廠商主檔、用主檔的間隔日數覆蓋你剛打的值,所以欄位上手動輸入的間隔日數不會生效。要改間隔日數請到廠商主檔(spdata)調整後再回來新增、按 查詢。另外 查詢 只在新增狀態作用,修改既有資料時不會重算整年送貨日。

為什麼兩個送貨日中間的天數忽多忽少?

間隔是以工作天計算,跳算時會略過週末與公司日曆上的假日。所以中間若卡到連假,相隔的日曆天數就會變多——這是正常設計,確保送貨日一定落在上班日。

同一家廠商可以建兩份同年度日曆嗎?

不行。存檔時鍵值=年度,客廠代號,類別(固定1.廠商),同廠商同年度只會是同一把鍵;重存會覆蓋而非新增第二份。

相關功能


需補截圖清單

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

  1. wkcaldcs-step1.png — 表頭區(年度/客廠代號/簡稱/間隔日數)與右上 查詢 按鈕
  2. wkcaldcs-step2.png — 按查詢後產生的整年年曆(週末淡紅底、送貨日粗體)
  3. wkcaldcs-step3.png — 在年曆上點格手動標記送貨日的前後對照