程式資訊
- 程式 ID:
WKCALDCS - 所屬子系統:B.基本資料
- 狀態:stable
客廠送貨工作日曆¶
功能簡介¶
「客廠送貨工作日曆」針對個別廠商(客廠)維護一整年的工作日曆,並在公司的工作日曆基礎上,依該廠商在廠商主檔設定的間隔日數,自動把每隔幾個工作天標記成一個 5.送貨日。
它的用途是把「這家廠商多久送一次貨」變成排程上看得見的送貨日標記,供後續排產、備料前置期(lead time)與交期推算參考。負責採購、生管的人員會用到這支表單。
與公司工作日曆的關係
本表單不重新定義哪天上班、哪天放假——平日/週末是套用公司既有的工作日曆(透過 Util_Pdt 讀本機快取的工作日曆)。本表單只在這層基礎上,額外標出該廠商的送貨日。因此維護前請先確認公司工作日曆已建好當年度資料。
這是「廠商」日曆,不是純客戶日曆
雖然代號欄位用的是通用的客廠搜尋(可搜到客戶/廠商/部門),但本表單在儲存與帶值時會固定把類別寫成 1.廠商,且間隔日數一律從廠商主檔(spdata)讀取。實務上請以廠商代號維護。
前置需求¶
- 權限:B.基礎資料 →
B-110 客廠送貨工作日曆的新增/修改/刪除/查詢權限。 - 基礎資料:本表單的計算結果取決於下列資料是否已維護——
| 資料 | 影響什麼 |
|---|---|
| 公司工作日曆(當年度) | 決定哪些日子是工作天;送貨日只會落在工作天,且間隔以「工作天」計算 |
| 廠商主檔(spdata,含間隔日數欄位) | 帶出客廠簡稱與間隔日數;間隔日數即每隔幾個工作天送一次貨 |
客廠搜尋來源(vwseek_cusp 視圖) |
代號欄位的下拉/搜尋清單(客廠部代號/簡稱) |
操作步驟¶
新增一份廠商年度日曆¶
- 開啟「客廠送貨工作日曆」。
- 按工具列
新增。 - 在 年度 欄輸入西元年(YYYY,4 碼)。
- 在 客廠代號 欄輸入或搜尋廠商代號;系統會自動帶出右側唯讀的 客廠簡稱,並從廠商主檔帶入該廠商的 間隔日數。
- 按
查詢按鈕(畫面右上角,僅在新增狀態可按),系統會:- 先依客廠代號重新從廠商主檔讀取 客廠簡稱與間隔日數(注意:手動改過的間隔日數會在這一步被廠商主檔的值覆蓋——間隔日數實際是以廠商主檔為準,不是以欄位上輸入的值)。
- 產生該年度整年的日曆(一月到十二月,依星期對齊排版)。
- 把每個非週末日的 工作時數 預設為
8。 - 依 間隔日數 從每月第一天起,逐月往後跳算工作天,把跳到的日子標記為
5.送貨日(以粗體顯示)。
- 在年曆上點選任一天的格子,可手動把該天切換為
5.送貨日(見欄位連動與附加功能)。 - 按工具列
儲存。
查詢/修改既有資料¶
- 用工具列的上一筆/下一筆(或查詢功能)切換到要看的廠商年度資料。
- 系統會重新帶出 客廠簡稱 與 間隔日數,並把已存的整年日曆攤平到年曆上顯示。
- 進入修改狀態後,一樣可點格子調整送貨日,改完按
儲存。
改了間隔日數要重新產生
查詢 按鈕只在新增狀態作用,且間隔日數以廠商主檔為準。若要用新的間隔日數整批重算送貨日,請先到廠商主檔調整間隔日數,再刪掉這份重建一份;單純微調個別日子則直接在年曆上點格切換即可。
欄位說明¶
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。按下後依序做:
- 重讀廠商主檔:先呼叫
SetDescription依客廠代號重新帶入客廠簡稱與間隔日數(覆蓋欄位上手動輸入的間隔日數)。 - 建立整年日曆:依 年度 產生 1~12 月、依星期對齊的整年格子,並移除日期為空的空白格(
RemoveAll)。 - 間隔日數防呆:若間隔日數
< 0直接 return(連預設工時都不鋪)。 - 鋪上預設工時:把所有非週末的日子工作時數設為
8(週末維持 0,並以淡紅底標示)。 - 逐月跳算送貨日:對每個月,從該月第一天起,呼叫公司工作日曆的「往後第 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/):
wkcaldcs-step1.png— 表頭區(年度/客廠代號/簡稱/間隔日數)與右上查詢按鈕wkcaldcs-step2.png— 按查詢後產生的整年年曆(週末淡紅底、送貨日粗體)wkcaldcs-step3.png— 在年曆上點格手動標記送貨日的前後對照