程式資訊
- 程式 ID:
VendorPerformance - 所屬子系統:G.採購付款
- 狀態:stable
廠商交期績效(Vendor Performance)¶
功能簡介¶
「廠商交期績效」是一個跨資料庫(PRIME/LGS 美國子系統)的採購交期分析工具,把美國端採購單的「要求出貨日(Request Ship Date)」與「實際出貨日(Actual Ship Date)」拿來比對,算出每筆單的遲交天數(Days Late),並彙整成廠商別的交期績效卡與年度進口金額(DI)統計。它的對象是負責跟海外供應商追交期的採購主管/採購人員。
整個視窗以全英文呈現(資料來自美國子公司系統),分成三個頁籤,各自獨立查詢,互不影響:
| 頁籤 | 用途 |
|---|---|
Maintain Request Ship Date |
維護/補登採購單的要求出貨日、實際出貨日與備註(唯一可寫入的頁籤) |
Vendor Performance Card |
依要求出貨日區間查績效卡,算出每筆遲交天數,可依廠商匯出 Excel |
DI Yearly Report |
年度進口(DI)金額統計,按客戶/廠商攤成 12 個月的 PO$ 樞紐,可匯出 Excel |
入口位置
此功能不是主選單上的獨立程式(程式中沒有對應的 ProgramClass),而是從採購單表單內開啟的附屬視窗。開啟後會以全螢幕大小的彈窗顯示。三個頁籤都需要連得到 PRIME/LGS 資料庫才會有資料。
前置需求¶
- 權限:開啟此視窗需具備採購單
PURCH的瀏覽權限(本視窗本身無獨立權限碼)。 - 資料庫連線:三個頁籤的資料皆透過查詢 SP
PRIME_QRY_VENDORPERFORMANCE取自 PRIME 與 LGS 兩套美國子系統。若連線不通或該庫無資料,頁籤會是空的。
| 資料 | 影響的結果 |
|---|---|
| PRIME/LGS 採購單(含 PO Date、SKU、PO Amount) | 三個頁籤的所有明細列 |
| 採購單的 Request Ship Date / Actual Ship Date | Days Late 的計算、Maintain 頁要維護的欄位 |
| 進貨暫收(OnBoard 暫收日) | 績效卡在 Actual/Request 為空時用暫收日回補 |
poshipdatechangehistory 異動歷史檔 |
Maintain 頁存檔後的出貨日修改會寫入此檔並回沖到查詢結果 |
需先登錄 proc_param
本功能呼叫的查詢走 Log_Sys_Exec 動態 SP(PRIME_QRY_VENDORPERFORMANCE,以位置參數 LP_P1=1/2/3 區分三個頁籤)。若該 SP 未在 proc_param 登錄或未部署,查詢會靜默回空而非報錯,請先確認 DB 端已就緒。
操作步驟¶
頁籤一:Maintain Request Ship Date(維護出貨日)¶
此頁用來補登或更正採購單的要求/實際出貨日,是三個頁籤中唯一會寫回資料庫的頁。
- 在
Enter Range of PO Date後輸入採購日期起訖(兩個日期欄)。- 起日預設為本月 1 日、訖日預設為今天。
- 按
查詢(QueryButton),格線列出區間內的採購單列(System/PO#/PODate/SKU/RequestShipDate/ActualShipDate/Notes)。 - 直接在格線中點選 RequestShipDate、ActualShipDate 或 Notes 儲存格修改(其餘欄位唯讀)。任一欄被改動時,該列會自動標記為「已變更」。
- (選用)批次取代:在下方工具列——
Replace下拉選擇要取代的欄位:Request Ship Date或Actual Ship Date。With輸入要套用的日期。When PO# Equals輸入要比對的 PO# 前置字串(長度需大於 7 碼才會生效)。- 按
Execute,所有 PO# 以該字串開頭的列都會被套上指定日期。
- 按
Save,系統把所有列(含已變更的)寫入poshipdatechangehistory異動歷史檔,存檔成功後會跳出結果訊息,並把列的變更旗標清掉。 - 按
離開(ExitButton)關閉視窗。
Save 的範圍
Save 是把整個格線的每一列都打包上傳異動歷史(不是只傳改過的列),用以保留每次維護的完整快照;上傳成功後才把畫面上的變更旗標重設。
頁籤二:Vendor Performance Card(廠商績效卡)¶
- 在
Enter Range of Request Ship Date輸入要求出貨日起訖(起日預設本月 1 日、訖日預設今天)。 - 按
查詢,格線列出每筆採購單的績效列,並算出 DaysLate(遲交天數)。 - 查詢完成後,右上角
Vendor下拉會自動帶入結果中出現過的廠商清單,預設選第一個廠商。 - 選好廠商後,按
Excel按鈕(綠色 Excel 樣式),系統把該廠商的績效卡匯出成Card.xlsx並開啟。 - 按
離開關閉視窗。
頁籤三:DI Yearly Report(年度進口金額)¶
- 在
Year輸入年度(4 位數,預設為今年)。 - 按
查詢,格線列出該年度按客戶(Customer)/日期(YearMonth)/廠商(Vendor)彙整的 PO$。 - 按
Excel按鈕,系統把資料攤成一張 12 個月的樞紐表(每列=客戶×廠商、每欄=月份)匯出成diYearly.xlsx並開啟,含 Subtotal/Total、以及 PRIME 與 LGS 兩庫的分計合計。 - 按
離開關閉視窗。
小技巧
三個頁籤各自查詢,切換頁籤不會帶條件。匯出的 Excel(Card.xlsx/diYearly.xlsx)會存到 ERP 的 Excel 暫存目錄並自動開啟,可在 Excel 內另存或調整。
欄位說明¶
Maintain Request Ship Date(頁籤一)¶
| 欄位 | 可編輯 | 說明/預設 |
|---|---|---|
| PO Date 起訖 | ✔(條件) | 採購日期區間;起日預設本月 1 日、訖日預設今天 |
| System | — | 來源資料庫(PRIME/LGS) |
| PO# | — | 採購單號 |
| PODate | — | 採購日期 |
| SKU | — | 品號 |
| RequestShipDate | ✔ | 要求出貨日;改動時該列標記為已變更 |
| ActualShipDate | ✔ | 實際出貨日;改動時該列標記為已變更 |
| Notes | ✔ | 備註;改動時該列標記為已變更 |
| Replace / With / When PO# Equals | ✔(工具) | 批次取代用;PO# 需大於 7 碼才生效 |
Vendor Performance Card(頁籤二)¶
| 欄位 | 必填 | 說明/預設 |
|---|---|---|
| Request Ship Date 起訖 | ✔(條件) | 要求出貨日區間;起日預設本月 1 日、訖日預設今天 |
| Vendor | — | 查詢後自動帶入廠商清單,預設選第一個;決定 Excel 匯出範圍 |
| System | — | 來源資料庫(PRIME/LGS) |
| Warehouse | — | 倉別 |
| Vendor | — | 廠商 |
| Customer | — | 客戶名稱 |
| PO# | — | 採購單號 |
| PODate | — | 採購日期 |
| RequestShipDate | — | 要求出貨日 |
| ActualShipDate | — | 實際出貨日(必要時以暫收日回補,見欄位連動) |
| DaysLate | — | 遲交天數(算法見下節),最小為 0 |
| Amount | — | PO 金額(幣別格式) |
| Notes | — | 備註 |
DI Yearly Report(頁籤三)¶
| 欄位 | 必填 | 說明/預設 |
|---|---|---|
| Year | ✔(條件) | 年度(4 位數),預設今年 |
| Customer | — | 客戶 |
| Date(YearMonth) | — | 年月(YYYY-MM) |
| Vendor | — | 廠商 |
| PO $(POValue) | — | 該客戶×廠商×年月的 PO 金額(幣別格式) |
欄位連動與附加功能¶
這一節把「輸入某欄位/按某按鈕後系統實際做了什麼」全部列出,來源是三支 ViewModel 與三支 BLL 的程式碼。
三個頁籤的共同行為¶
- 開啟視窗時,Maintain 與 Card 頁的日期起訖會自動帶入「本月 1 日 ~ 今天」;DI Yearly 頁的
Year自動帶入今年。 - 每個頁籤的
查詢都各自呼叫PRIME_QRY_VENDORPERFORMANCE,以LP_P1區分用途:Maintain=1、Card=2、DI Yearly=3,並把起訖日當第 2/第 3 個參數傳入。 離開按鈕只是把視窗的 DialogResult 設為 false 關窗,不會存檔;未按 Save 的 Maintain 修改會遺失。
Maintain 頁的連動¶
- 改了 RequestShipDate/ActualShipDate/Notes 任一欄,系統會偵測「新值 ≠ 舊值」並把該列的變更旗標(IsChanged)設為 1——這是 Save 時判斷哪些列被動過的依據。
- 查詢時的資料合併:SP 回傳三組資料——已存在的歷史維護列、PRIME 暫存採購列、LGS 暫存採購列。系統以「資料庫+PO#+SKU」為鍵,把暫存採購列中尚未有維護紀錄的補進清單(標記為已變更),再加上既有維護列,最後按「資料庫+PO#+SKU」排序顯示。
Execute(批次取代):只有當Replace已選、When PO# Equals已填且長度大於 7 碼時才動作;它會掃描每一列,凡 PO# 以該字串開頭者,依Replace的選擇把With的日期套到 RequestShipDate 或 ActualShipDate(透過 Binding 屬性套用,因此一樣會觸發「已變更」標記)。Save:把格線每一列組成POShipDateChangeHistorySource上傳到poshipdatechangehistory(文件號固定+++、文件日期=今天、登錄人=機器名稱、建立時間=現在)。透過舊版AdeUploadBll(程式碼POCHANGE)以「新增」方式上傳;成功後把所有列的變更旗標改為 -1,並彈出結果訊息。
Card 頁的連動¶
- 查詢後自動帶廠商:查詢完成後,系統用結果中出現過的
Vendor去重組成Vendor下拉清單,若有資料則預設選第一個廠商;此選擇決定 Excel 匯出哪一家。 - Days Late(遲交天數)的算法(在 BLL 內計算):
- 先把 Actual Ship Date 與 Request Ship Date 解析成日期。
Days Late = (實際出貨日 − 要求出貨日) 的天數 − 寬限天數。- 寬限天數:客戶名稱以
OSH開頭者寬限 10 天,其餘客戶寬限 7 天。 - 若算出來小於 0,一律歸 0(提早或準時不計負遲交)。
- 出貨日回補:若某列的 ActualShipDate 為空,系統會用該採購單對應的暫收(OnBoard)暫收日回補;同理,Request Ship Date 為空時也用暫收日回補,以免 Days Late 算不出來。
- 金額彙總:明細先以「客戶 PO/廠商/客戶/倉別/資料庫/PO#/PO 日/要求出貨日/實際出貨日/備註」分組加總 PO 金額,金額為 0 的群組會被濾掉才進績效卡。
Excel:把目前Vendor選到的那一家的績效列匯出成Card.xlsx(含 Customer/PO#/Order Date/Request/Actual Ship Date/Days Late/PO$/Warehouse/Notes 欄,標題列含Vendor:廠商),存到 Excel 目錄後自動以 Excel 開啟。匯出過程若發生例外會跳錯誤訊息並寫入除錯記錄。
DI Yearly 頁的連動¶
- 查詢:以
Year/01/01 ~ Year/12/31為區間,呼叫PRIME_QRY_VENDORPERFORMANCE(LP_P1=3)取資料,程式中各取一次並分別標記成PRIME與LGS兩個來源後合併,再按「資料庫/客戶/廠商/年月」分組加總 PO$。 Excel:把資料攤成 12 個月的樞紐表——每列是一組客戶×廠商、第 3~14 欄是 1~12 月的 PO$、第 15 欄 Subtotal(該廠商年度合計)、第 16 欄 Total(該客戶年度合計,且儲存格垂直置中合併)。表尾另計Total、PRIME與LGS兩庫的分項合計,整張表套金額格式$#,##0與框線,存成diYearly.xlsx後自動開啟。
金額為單庫直接加總,未做匯率換算
DI Yearly 的 PO$ 是直接把 PRIME 與 LGS 的金額相加(兩庫各標記來源後彙總),程式中沒有做幣別換算;請以美國子系統本身的幣別認知解讀數字。
常見問題¶
三個頁籤都查不到任何資料?
本功能的資料來自 PRIME/LGS 兩套美國子系統,透過 PRIME_QRY_VENDORPERFORMANCE 取得。請先確認:(1) 該 SP 已部署且在 proc_param 登錄;(2) 連線連得到 PRIME/LGS 資料庫;(3) 查詢區間內該庫確實有採購單。SP 未登錄時會靜默回空,不會報錯。
在 Maintain 頁改了出貨日,關掉視窗後又變回原樣?
Maintain 頁的修改必須按 Save 才會寫回。按 離開 只是關窗、不存檔;未存檔的變更會遺失。請改完後先按 Save 看到結果訊息再離開。
Replace(批次取代)按了 Execute 卻沒反應?
Execute 只有在 Replace 已選、When PO# Equals 已填、且該字串長度大於 7 碼時才會動作,並且只會套到 PO# 以該字串開頭的列。請確認三個條件都成立、PO# 前置字串夠長。
Vendor Performance Card 的 Days Late 一直是 0?
Days Late 已內含寬限天數:一般客戶扣 7 天、客戶名以 OSH 開頭扣 10 天,且結果小於 0 一律歸 0。所以準時或提早的單會顯示 0。若要看真正的差距,請對照 Request 與 Actual Ship Date 兩欄。另外,若這兩個日期其中一個原本是空的,系統會用暫收日回補,回補不到時也可能算不出遲交。
Card 的 Excel 只匯出了一家廠商?
Excel 匯出的是目前 Vendor 下拉選到的那一家(查詢後預設選第一家)。要匯別家請先在下拉換廠商再按 Excel;目前不支援一次匯出全部廠商。
績效卡裡某些金額為 0 的單據不見了?
這是設計行為:Card 在彙總時會濾掉 PO 金額合計為 0 的群組,因此純金額為 0 的列不會出現在績效卡上。
相關功能¶
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/G-Purchasing/images/):
vendorperformance-step1.png— Maintain Request Ship Date 頁(含格線與下方 Replace 工具列)vendorperformance-step2.png— Vendor Performance Card 頁(含 Vendor 下拉與 Days Late 欄)vendorperformance-step3.png— DI Yearly Report 頁與匯出的 12 個月樞紐 Excel