跳轉到

程式資訊

  • 程式 IDVendorPerformance
  • 所屬子系統: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 取自 PRIMELGS 兩套美國子系統。若連線不通或該庫無資料,頁籤會是空的。
資料 影響的結果
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(維護出貨日)

此頁用來補登或更正採購單的要求/實際出貨日,是三個頁籤中唯一會寫回資料庫的頁。

  1. Enter Range of PO Date 後輸入採購日期起訖(兩個日期欄)。
    • 起日預設為本月 1 日、訖日預設為今天
  2. 查詢(QueryButton),格線列出區間內的採購單列(System/PO#/PODate/SKU/RequestShipDate/ActualShipDate/Notes)。
  3. 直接在格線中點選 RequestShipDateActualShipDateNotes 儲存格修改(其餘欄位唯讀)。任一欄被改動時,該列會自動標記為「已變更」。
  4. (選用)批次取代:在下方工具列——
    1. Replace 下拉選擇要取代的欄位:Request Ship DateActual Ship Date
    2. With 輸入要套用的日期。
    3. When PO# Equals 輸入要比對的 PO# 前置字串(長度需大於 7 碼才會生效)。
    4. Execute,所有 PO# 以該字串開頭的列都會被套上指定日期。
  5. Save,系統把所有列(含已變更的)寫入 poshipdatechangehistory 異動歷史檔,存檔成功後會跳出結果訊息,並把列的變更旗標清掉。
  6. 離開(ExitButton)關閉視窗。

Save 的範圍

Save 是把整個格線的每一列都打包上傳異動歷史(不是只傳改過的列),用以保留每次維護的完整快照;上傳成功後才把畫面上的變更旗標重設。

頁籤二:Vendor Performance Card(廠商績效卡)

  1. Enter Range of Request Ship Date 輸入要求出貨日起訖(起日預設本月 1 日、訖日預設今天)。
  2. 查詢,格線列出每筆採購單的績效列,並算出 DaysLate(遲交天數)
  3. 查詢完成後,右上角 Vendor 下拉會自動帶入結果中出現過的廠商清單,預設選第一個廠商
  4. 選好廠商後,按 Excel 按鈕(綠色 Excel 樣式),系統把該廠商的績效卡匯出成 Card.xlsx 並開啟。
  5. 離開 關閉視窗。

頁籤三:DI Yearly Report(年度進口金額)

  1. Year 輸入年度(4 位數,預設為今年)。
  2. 查詢,格線列出該年度按客戶(Customer)/日期(YearMonth)/廠商(Vendor)彙整的 PO$
  3. Excel 按鈕,系統把資料攤成一張 12 個月的樞紐表(每列=客戶×廠商、每欄=月份)匯出成 diYearly.xlsx 並開啟,含 Subtotal/Total、以及 PRIME 與 LGS 兩庫的分計合計。
  4. 離開 關閉視窗。

小技巧

三個頁籤各自查詢,切換頁籤不會帶條件。匯出的 Excel(Card.xlsxdiYearly.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 的程式碼。

三個頁籤的共同行為

  1. 開啟視窗時,MaintainCard 頁的日期起訖會自動帶入「本月 1 日 ~ 今天」;DI Yearly 頁的 Year 自動帶入今年。
  2. 每個頁籤的 查詢 都各自呼叫 PRIME_QRY_VENDORPERFORMANCE,以 LP_P1 區分用途:Maintain=1、Card=2、DI Yearly=3,並把起訖日當第 2/第 3 個參數傳入。
  3. 離開 按鈕只是把視窗的 DialogResult 設為 false 關窗,不會存檔;未按 Save 的 Maintain 修改會遺失。

Maintain 頁的連動

  1. 改了 RequestShipDate/ActualShipDate/Notes 任一欄,系統會偵測「新值 ≠ 舊值」並把該列的變更旗標(IsChanged)設為 1——這是 Save 時判斷哪些列被動過的依據。
  2. 查詢時的資料合併:SP 回傳三組資料——已存在的歷史維護列、PRIME 暫存採購列、LGS 暫存採購列。系統以「資料庫+PO#+SKU」為鍵,把暫存採購列中尚未有維護紀錄的補進清單(標記為已變更),再加上既有維護列,最後按「資料庫+PO#+SKU」排序顯示。
  3. Execute(批次取代):只有當 Replace 已選、When PO# Equals 已填且長度大於 7 碼時才動作;它會掃描每一列,凡 PO# 以該字串開頭者,依 Replace 的選擇把 With 的日期套到 RequestShipDate 或 ActualShipDate(透過 Binding 屬性套用,因此一樣會觸發「已變更」標記)。
  4. Save:把格線每一列組成 POShipDateChangeHistorySource 上傳到 poshipdatechangehistory(文件號固定 +++、文件日期=今天、登錄人=機器名稱、建立時間=現在)。透過舊版 AdeUploadBll(程式碼 POCHANGE)以「新增」方式上傳;成功後把所有列的變更旗標改為 -1,並彈出結果訊息。

Card 頁的連動

  1. 查詢後自動帶廠商:查詢完成後,系統用結果中出現過的 Vendor 去重組成 Vendor 下拉清單,若有資料則預設選第一個廠商;此選擇決定 Excel 匯出哪一家。
  2. Days Late(遲交天數)的算法(在 BLL 內計算):
    • 先把 Actual Ship Date 與 Request Ship Date 解析成日期。
    • Days Late = (實際出貨日 − 要求出貨日) 的天數 − 寬限天數
    • 寬限天數:客戶名稱以 OSH 開頭者寬限 10 天,其餘客戶寬限 7 天
    • 若算出來小於 0,一律歸 0(提早或準時不計負遲交)。
  3. 出貨日回補:若某列的 ActualShipDate 為空,系統會用該採購單對應的暫收(OnBoard)暫收日回補;同理,Request Ship Date 為空時也用暫收日回補,以免 Days Late 算不出來。
  4. 金額彙總:明細先以「客戶 PO/廠商/客戶/倉別/資料庫/PO#/PO 日/要求出貨日/實際出貨日/備註」分組加總 PO 金額,金額為 0 的群組會被濾掉才進績效卡。
  5. Excel:把目前 Vendor 選到的那一家的績效列匯出成 Card.xlsx(含 Customer/PO#/Order Date/Request/Actual Ship Date/Days Late/PO$/Warehouse/Notes 欄,標題列含 Vendor:廠商),存到 Excel 目錄後自動以 Excel 開啟。匯出過程若發生例外會跳錯誤訊息並寫入除錯記錄。

DI Yearly 頁的連動

  1. 查詢:以 Year/01/01 ~ Year/12/31 為區間,呼叫 PRIME_QRY_VENDORPERFORMANCELP_P1=3)取資料,程式中各取一次並分別標記成 PRIMELGS 兩個來源後合併,再按「資料庫/客戶/廠商/年月」分組加總 PO$。
  2. Excel:把資料攤成 12 個月的樞紐表——每列是一組客戶×廠商、第 3~14 欄是 1~12 月的 PO$、第 15 欄 Subtotal(該廠商年度合計)、第 16 欄 Total(該客戶年度合計,且儲存格垂直置中合併)。表尾另計 TotalPRIMELGS 兩庫的分項合計,整張表套金額格式 $#,##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/):

  1. vendorperformance-step1.png — Maintain Request Ship Date 頁(含格線與下方 Replace 工具列)
  2. vendorperformance-step2.png — Vendor Performance Card 頁(含 Vendor 下拉與 Days Late 欄)
  3. vendorperformance-step3.png — DI Yearly Report 頁與匯出的 12 個月樞紐 Excel