跳轉到

程式資訊

  • 程式 IDFILLRATE
  • 所屬子系統:E.營業收款
  • 狀態:stable

達成率(客戶達成率)

功能簡介

「達成率」用來逐月統計每一天的訂單達交情形:以某個年度月份為單位,把當月每一張訂單明細的指定交期(ETA)對上實際出貨記錄,算出該日有多少張訂單、其中有多少張因為未交清或延遲而算作「未達成」。建立並計算後,畫面下方會列出該月 1 號到月底的每一天,方便業務/業務主管以月報的方式檢視客戶端的準交狀況,並逐日填寫原因留存。

這支表單在流程上的位置是:銷售訂單 出貨完成後的事後績效統計——它不影響訂單或出貨,只讀取訂單與出貨記錄做達交分析。

「達成率」是一份逐月存檔的單據,不是即查即丟的報表

與一般查詢報表不同,本功能會把「年度月份+每日訂單件數/未達成件數/原因」存成一張單據(單號自動為「公司代碼+類別+年度月份」)。你可以日後再叫出同一個月份的單據,逐日補填或修改原因。

前置需求

  • 權限:E.訂單 → E-190 達成率 的瀏覽/修改權限。
  • 基礎資料:計算結果完全取自下列資料,請先確認已維護——
資料 影響什麼
銷售訂單(含明細指定交期、受訂日期) 每日訂單件數的來源;指交日期決定該筆落在哪一天
出貨/交易記錄(出貨轉檔,對應 ORDETLPKID 的明細交貨量) 完納日期、交貨量——判斷訂單是否交清、是否延遲
全域參數 5001(客戶急單天數) 判定「急單」的天數門檻;未設定或 ≤0 時系統預設 5 天

急單天數來自全域參數,不是表單欄位

系統用 U_Prgpar("5001") 取「客戶急單天數」。指定交期與受訂日期相差在此天數(含)以內者標為急單。此參數在全域參數設定維護,本表單上看不到也改不了。

操作步驟

達成率是「先建單 → 計算 → 補原因 → 存檔」的流程。

一、新增當月達成率單

  1. 從主選單開啟 E.訂單 → 達成率
  2. 點工具列 新增。系統自動帶入:
    • 類別C(客戶)。
    • 公司代碼1
  3. 年度月份 輸入要統計的月份,格式 yyyy/MM(例 2024/03)。這是唯一必填、且決定整張單的關鍵欄位。
  4. 視需要填 備註

二、執行計算

  1. 在新增(或修改)狀態下,按條件列右側的 Query(計算)鈕。
  2. 系統先檢查 年度月份 是否為合法年月(會試組成 年度月份/01 解析);格式錯誤會跳「請輸入正確的日期格式」並中止。
  3. 通過後系統呼叫達交統計,把該月每一天展開成一列(1 號到月底,依當月實際天數),並填入:

    • 訂單件數:當天(依指定交期)有幾張訂單明細。
    • 未達成件數:當天訂單中被判定為延交的張數。

    在『新增』狀態下計算才會自動鋪滿整月日期

    只有當狀態為 新增 時,系統會先為當月每一天補上一列空白資料再填數字。若你在 修改 既有單後按計算,系統只會更新已存在日期列的件數,不會重鋪日期。

三、逐日補原因後存檔

  1. 在下方格線逐列檢視 訂單件數/未達成件數,於 原因 欄填寫該日未達成的說明(原因欄可編輯)。
  2. 按工具列 儲存。存檔時系統會:
    • 再次檢查 年度月份 不可空白、且必須是合法年月。
    • 自動把 單據日期 設為 年度月份/01

詳細的每欄連動、計算規則請見欄位連動與附加功能

欄位說明

主檔(單頭)

欄位 必填 說明/格式/預設
單號(Document No) 唯讀,系統產生。VFP 規則為「公司代碼+類別首字+年度月份」
年度月份(Year And Month) 格式 yyyy/MM;計算與存檔皆以此為準
類別(Category) C=客戶、S=廠商;新增預設 C(目前 C# 僅實作客戶端計算)
公司代碼(Company Code) 新增預設 1
備註(Notes) 自由文字,最長 80 字
建檔日期(Created Date) 唯讀,系統產生
異動日期(Edit Date) 唯讀,系統紀錄最後異動時間

明細(每日格線)

欄位 可編輯 說明
日期(Date) 該月某一天,格式 yyyy/MM/dd;計算時自動產生整月日期
訂單件數(Order Count) 該日(依指定交期)的訂單明細張數,數字 0 顯示為空白樣式
未達成件數(Unfulfilled Count) 該日訂單中被判為延交的張數
原因(Reason) 由使用者填寫的未達成原因,最長 60 字
備註(Notes) 該日補充說明,最長 60 字

欄位連動與附加功能

這一節說明「按某鈕、輸入某欄位後系統實際會做什麼」,全部來自程式碼(FillrateViewModel / CustomerFillRateBll / FillrateSave 與 VFP fillrate.prg)。

新增時的預設值(AfterAddNew)

當你按 新增,系統會:

  • 類別 設為 C(客戶)。
  • 公司代碼 設為 1
  • 清空下方每日明細格線。

對應 VFP addagainREPLACE 類別 WITH 'C',公司代碼 WITH USER公司代碼

Query(計算)時系統做的事

  1. 年月檢核:先把 年度月份 試著解析成 年度月份/01;不合法就跳「請輸入正確的日期格式」並停止。
  2. 抓訂單與出貨:呼叫 DARB_QRY_ORMAST(參數 7 + 年度月份)一次取回兩張表——當月訂單明細與其對應的出貨交易明細。
  3. 逐筆判定每張訂單的達交狀態(核心演算法,依訂單明細主鍵 ORDETLPKID 配對出貨):
    • 急單判定:若 指定交期 − 受訂日期 ≤ 急單天數(參數 5001,預設 5),該筆標記為急單;否則若原備註含「完納」則保留為「完納」。
    • 完納日期 / 交貨量:把該訂單所有出貨交易的交易日期取最大值當完納日期、數量累加為交貨量。
    • 是否交清
      • 交貨量 ≥ 訂貨量 → 未納量 = 0;若完納日期 ≤ 指定交期則延納日數 = 0,否則延納日數 = 完納日期 − 指定交期(日曆天)。
      • 交貨量 < 訂貨量 → 未納量 = 訂貨量 − 交貨量,清空完納日期,延納日數 = 今天 − 指定交期
    • 延交旗標:只要 未納量 > 0 延納日數 > 3(客戶延納基準天數,固定 3 天),這張訂單就算延交(未達成)
  4. 彙總成每日件數:把所有訂單依指定交期(ETA)分組,每組的張數 = 該日訂單件數,其中延交張數 = 該日未達成件數
  5. 鋪日期 / 回填:在 新增 狀態下先為當月每一天(依 DateTime.DaysInMonth 算實際天數)建立一列,再把彙總數字對日期回填到格線。

達成率=(訂單件數 − 未達成件數)÷ 訂單件數

本表單存的是「件數」與「未達成件數」兩個原始數,達成率本身在報表端換算。某日沒有任何訂單時,訂單件數與未達成件數皆為 0。

計算進度提示

延交明細逐筆計算時,後端 CustomerFillRateBll 每處理 100 筆會發出一則「Fill Rate...N」進度事件(狀態欄顯示訊息),原意是在狀態列回報進度。

目前版本未把進度顯示到畫面

新版 FillrateViewModel 呼叫計算時並未訂閱此進度事件,因此這串進度訊息目前不會出現在狀態列;計算過程畫面不會即時更新。資料量大時請耐心等候,不要因畫面無回應而誤判當機。

存檔時的連動(FillrateSave)

儲存 時:

  • 擋存檔(AllowSave)年度月份 空白會擋下並提示需輸入;年度月份不是合法年月(無法解析成 年度月份/01)也會擋下並提示「請輸入正確的日期格式」。
  • 存檔前處理(HandleDataBeforeEndEdit):自動把 單據日期 設為 年度月份/01;若為 修改 狀態,將該筆列狀態標記為已修改(E)。

VFP allowsave 另外會在新增/複製時把 單號 組成「公司代碼+類別首字+年度月份」,並把「週六/週日且訂單件數為 0」或無效日期的明細列標記為刪除。

尚未提供的 VFP 功能(規劃中)

下列 VFP 既有行為在新版 C# 尚未實作,請勿當成可用功能

  • 類別=S(廠商)達交:VFP 與新版同樣只實作 C(客戶)分支,廠商端達交統計請改用 廠商達交率(VENDORFILLRATE)。
  • 修改時保留舊原因(保留日期):VFP 在「修改」重算時可輸入保留日期,讓該日期(含)以前的訂單件數/未達成件數/原因沿用上次結果。新版 C# 的計算未實作保留日期機制,重算會以最新資料覆寫。
  • 計算後自動匯出 Excel/開啟:VFP 計算客戶分支時會把延交明細 COPY TO ...TMPFILLRATE.XLS 並用 Excel 開啟。新版尚未提供此自動匯出。
  • 列印(達成率報表):VFP 報表程式為 FILLRATE_P(對應 FILLRATEPRINT),新版 ViewModel 尚未掛報表來源,目前無內建列印。

常見問題

按了計算,每日明細卻沒有鋪出整個月份的日期?

自動鋪滿整月日期只在「新增」狀態下計算才會發生。若你是叫出舊單按 修改 後再計算,系統只會更新已存在日期列的件數、不會重新鋪日期。要重做整月,請以新增方式重建該月份單據。

某天的訂單件數是 0,但我知道那天有訂單?

件數是依訂單明細的指定交期(ETA)歸日,不是受訂日或出貨日。請確認那批訂單明細的指定交期確實落在該日;指交日期空白或落在他月,就不會計入這一天。

明明已出貨,那張訂單還是被算成『未達成』?

延交判定有兩個條件,符合任一就算未達成:未納量 > 0(交貨量小於訂貨量,尚未交清),或延納日數 > 3 天(即使交清,但完納日期晚於指定交期超過 3 天)。請核對該訂單的交貨量是否等於訂貨量、以及最後一筆出貨交易日期是否晚於指交日期 3 天以上。

為什麼有些訂單顯示『急單』?這會影響達成率嗎?

當「指定交期 − 受訂日期 ≤ 急單天數」(全域參數 5001,預設 5 天)即標為急單。急單只是備註標記,不改變延交判定——急單若也未交清或延遲,一樣計入未達成件數。

存檔時被擋,提示要輸入年度月份或日期格式?

年度月份 是必填,且必須能組成合法年月(系統會試解析 年度月份/01)。請用 yyyy/MM 格式輸入正確月份(例 2024/03),不要留空或填成不存在的月份。

我要看廠商的達交率,這支表單查不到?

本表單只統計客戶端(類別 C)。廠商達交請改用採購模組的廠商達交率(VENDORFILLRATE)。

相關功能


需補截圖清單

以下截圖待功能 runtime 驗收後補拍(放 docs/E-SalesOrder/images/):

  1. fillrate-step1.png — 新增後的單頭(年度月份/類別 C/公司代碼 1)
  2. fillrate-step2.png — 按 Query 計算後鋪滿整月的每日明細格線(含訂單件數/未達成件數)
  3. fillrate-step3.png — 逐日填寫「原因」欄並存檔的畫面