跳轉到

程式資訊

  • 程式 IDMOVINGCOST
  • 所屬子系統:K.成本管理
  • 狀態:stable

移動平均成本

功能簡介

「移動平均成本」依逐日加權平均的方式,把指定截止日以前的所有庫存異動重算一次,算出每個 品號(SKU) 到該日為止的移動加權平均單位成本,並把每一筆出入庫交易應分攤的成本逐筆列出。它是成本會計在月底(或任一截止日)核對庫存單位成本、並把計算結果回寫到交易單據與品號主檔的工具。

計算上有兩個關鍵特性,理解它們才看得懂結果:

  1. 倉別只分兩群:所有倉庫被歸成 DIOTHER 兩群,分別各自跑一條移動平均線(同一個品號在 DI 與 OTHER 會有兩個不同的單位成本)。
  2. 逐日重算、不是逐筆即時:系統先取「期初(資料起始月)的結存數量與結存金額」當起點,再把每一天的入庫加進來、出庫用「當下平均單位成本」扣掉,一路滾到截止日,所以每一筆交易的單位成本=它發生當下的移動平均

詳細的逐日滾算規則、DI 與訂單單價覆蓋、進口費用重算等連動行為,請見欄位連動與附加功能

前置需求

  • 權限:K.成本管理 → 移動平均成本 的瀏覽權限(回寫成本另需該程式的編輯權限)。
  • 基礎資料:計算結果是否正確、完整,取決於下列資料的維護狀況——
資料 影響的結果
庫存異動(出入庫交易、調撥單 TRRADE) 逐日滾算的進出數量與成本、結存數量/結存金額
期初成本結存(成本計算 COST 產生的月結資料) 每個品號滾算的起點數量與起點金額;沒有期初就沒有那一群的計算
暫收單/進貨明細(PURADE)與進口費用 進貨成本的其他費用(OtherCost)重算,會回頭改寫進貨單成本後才算平均
採購單(同倉群是否存在採購單) 決定結果頁「最新採購單價」對照欄是否帶值
銷售訂單(ORMAST,含 PO 單價) DI 倉出貨且該訂單帶有 PO 單價時,會用訂單單價覆蓋當下平均成本

倉別 DI 的意義

程式把倉別固定切成 DI(直接進口/指定倉)與 OTHER(其他所有倉)兩條成本線。若貴公司沒有使用 DI 倉概念,實際資料會幾乎都落在 OTHER,DI 那一條會是空的,屬正常現象。

操作步驟

本程式是「查詢 → (可選)回寫」兩段式作業,沒有新增/修改/刪除單據的動作。

步驟① 設定查詢條件

條件面板在畫面上方:

  1. 輸入截止日期:計算會把這天(含)以前的所有異動滾算進來。預設為今天
  2. 輸入 SKU 起~訖:限定要計算的品號範圍。
    • 起始 SKU 預設為 ALL,代表全部品號(此時系統內部自動以空字串~zzzzzz 涵蓋全部,訖也可留空)。
    • 要只算某段品號時,在起、訖兩格分別填入起始與結束品號。

步驟② 執行查詢

按工具列的 查詢。系統會:

  1. 先抓期初成本結存當起點、並重算進口/進貨的其他費用(見欄位連動與附加功能)。
  2. DIOTHER 兩群分別、再對每個品號逐日滾算移動平均。
  3. 把每一筆交易連同當下單位成本、分攤成本、結存數量、結存金額列在下方格線。

查詢完成後,下方的「回寫」區(兩個勾選框與儲存鈕)才會被啟用。

小技巧

ALL 全品號+較早的截止日資料量會很大;先用 SKU 起訖縮小範圍核對個別品號,確認無誤再跑全品號。格線可由右鍵匯出 Excel。

步驟③(可選)回寫成本

確認計算結果後,可勾選要回寫的對象再按 儲存

  1. 勾選回寫交易成本(Update Cost of Transaction):把每一筆交易算出的單位成本與成本金額寫回該庫存異動單據。
  2. 勾選回寫品號主檔成本(Update Cost of Item Master):把每個品號算出的單位成本(與 DI 成本)寫回品號主檔。
  3. 兩者可單獨或同時勾選,按 儲存 後系統分別上拋到對應的暫存資料表執行回寫。

注意

回寫會改寫既有單據與品號主檔的成本欄位,屬不可逆的成本調整。請務必先在步驟②核對結果,再執行回寫;無查詢結果(格線為空)時回寫區維持停用、不會送出任何資料。

欄位說明

查詢條件

欄位 必填 說明/格式/預設
截止日期 計算滾算到此日(含)為止;格式 YYYY/MM/DD,預設今天
SKU 起 起始品號;預設 ALL=全部品號
SKU 訖 結束品號;起為 ALL 或任一格留空時自動涵蓋全部
回寫交易成本 勾選後 儲存 會把交易成本寫回單據;查詢前停用
回寫品號主檔成本 勾選後 儲存 會把單位成本寫回品號主檔;查詢前停用

結果格線欄位

欄位 說明
單據檔名(Table Name) 來源資料表名(如 TRRADE 庫存異動);用以分辨交易來源
單據號碼(Doc No) 該庫存異動的單據號
單據別(Type) 交易類別
異動日期(Date) 交易日;逐日滾算就是依此排序
入庫倉(Destination Bin) 入庫倉別,已歸群為 DIOTHER(空白代表非入庫)
出庫倉(Source Bin) 出庫倉別,已歸群為 DIOTHER(空白代表非出庫)
SKU 品號
數量(Quantity) 本筆異動數量
單價(Unit Price) 本筆異動原始單價
未稅金額(Amount Without Tax) 本位幣未稅金額
原幣未稅金額(Currency Amount Without Tax) 交易原幣未稅金額
其他金額(Other Amount) 其他費用金額
分攤費用(Other Fee) 分攤至本筆的費用(SharAmt)
單位成本(Unit Cost) 本筆交易發生當下的移動平均單位成本
最新採購單價(Latest PO Price) 對照欄。系統會查該品號是否存在同一倉群(DI/非 DI)的採購單,若有就把本筆異動的單價填到這欄當對照值,不參與移動平均計算;沒有對應採購單時為 0
成本金額(Cost Amount) 本筆交易分攤到的成本金額
倉別(Warehouse) 歸群後的成本線:DIOTHER
結存數量(Balance Quantity) 滾算到本筆後,該品號該倉的累計結存數量
結存金額(Balance Amt) 滾算到本筆後的累計結存金額(除以結存數量=下一筆的單位成本)
備註(Memo) 系統備註;數量歸零但仍有殘值時,記錄沖銷前的結存金額

為什麼有兩個「金額」欄

原幣未稅金額是交易單據上的外幣金額,未稅金額/成本金額是換算本位幣、再經移動平均重算後的成本。對單據時請以成本金額為準。

欄位連動與附加功能

這一節說明「按下查詢後,系統實際做了什麼」與「勾選回寫後會寫到哪裡」。這些行為都來自程式邏輯,使用者只需知道輸入與結果的因果關係。

查詢時的連動(按 查詢 後依序發生)

  1. 先定出計算起點(期初):系統讀成本月結資料(PRIME_QRY_MOVINGCOST),取資料最早月份當起算月、以你輸入的截止日當結束日。若完全沒有成本月結資料,查詢直接結束、格線為空。
  2. 重算進口/進貨的其他費用:在正式滾算前,系統會把區間內的暫收/進貨明細與進口費用比對(櫃號、品號、未交數量、明細鍵都吻合才配對),算出每張進貨單應分攤的其他成本(到岸成本-FOB 金額),並回頭改寫進貨單的成本金額(單價×數量+分攤其他費用+既有分攤費用)。所以同一截止日重跑,進貨單成本會被刷新——這是刻意的,目的是讓平均成本反映最新的進口費用分攤。
  3. 倉別歸群:每筆異動的入/出庫倉只要不是 DI,一律歸成 OTHER;倉別取「有入庫倉就用入庫倉,否則用出庫倉」。
  4. 逐日加權平均滾算:對 DIOTHER 兩群、每個品號:
    • 以期初結存數量/金額為起點,期初單位成本=期初金額÷期初數量。
    • 從起算日一天一天往後走,入庫就把數量與成本加進結存、出庫用「當下單位成本×數量」扣掉,每走一筆就更新結存數量與結存金額,下一筆的單位成本=最新結存金額÷結存數量。
    • 調撥(TRRADE)依有無入庫倉判斷加或減,不重算單價、直接用原成本進出。
  5. 數量歸零殘值沖銷:當某品號某日滾算後結存數量歸零、但結存金額還有殘值,系統會把當天最後幾筆同品號交易的殘值沖掉,並把沖銷前金額記到備註欄,避免結存金額卡著零庫存的尾差。

DI 倉 + 訂單單價覆蓋

當交易屬 DI 倉、且該出貨對應到一張帶有 PO 單價 的銷售訂單時,系統會用訂單上的 PO 單價覆蓋當下平均成本來算這筆的成本金額與單位成本(前提:PO 單價≠目前平均、且不為 0、訂單鍵有效)。也就是 DI 直接進口品的出貨成本,會優先採信訂單綁定的採購單價,而不是一般的移動平均。

最新採購單價(Latest PO Price)只是參考

結果頁的「最新採購單價」欄只是對照欄:系統檢查該品號有沒有同一倉群的採購單,有的話就把本筆異動單價填進這欄供對照,不參與移動平均計算,也不會覆蓋單位成本。真正影響成本的覆蓋只有上面 DI+訂單那一條。

回寫(按 儲存 後)

  • 回寫交易成本:逐筆把計算後的單位成本成本金額整理成回寫資料,上拋到 _tmp_movingcost_tran 暫存表,由 MOVINGCOSTTRAN 作業寫回該庫存異動單據。單位成本的取法:該筆若有成本金額就用「成本金額÷數量」,否則退用「結存金額÷結存數量」,四捨五入到小數 4 位。
  • 回寫品號主檔成本:把每個品號算出的 OTHER單位成本DIDI 成本,上拋到 _tmp_movingcost_sku 暫存表,由 MOVINGCOSTSKU 作業寫回品號主檔。
  • 兩個回寫各自獨立:只勾一個就只回寫那一個;沒有查詢結果時兩者都不會送出。

規劃中/尚未提供

本程式目前只提供查詢回寫。畫面上沒有列印報表、轉傳票、簽核或匯入功能;如需把成本結果產出傳票,請走傳票成本計算相關流程。

常見問題

按了查詢,格線完全是空的?

最常見的原因是沒有期初成本月結資料——系統要先有成本月結(由成本計算/成本主檔產生)當起算點才會滾算。請確認截止日之前已有完成的成本結算;另外 SKU 範圍若填錯(起>訖)也會查不到,可先把起改回 ALL 測試。

同一個品號出現兩個不同的單位成本?

這是正常的。系統把倉別分成 DIOTHER 兩條獨立的成本線,同一品號在兩群各自滾各自的移動平均,所以會看到兩個倉別、兩個單位成本。對成本時請連同倉別欄一起看。

進貨單的成本跟我原本看到的不一樣?

查詢時系統會在滾算前重算進口/進貨的其他費用並改寫進貨單成本(到岸成本與 FOB 差額分攤)。這是刻意的,目的是讓平均成本反映最新的進口費用分攤。若不希望被改寫,請勿在該截止日重跑;詳見欄位連動與附加功能

某筆出貨的單位成本不等於我看到的移動平均,反而等於採購單價?

若該筆屬 DI 倉、且對應的銷售訂單帶有有效的 PO 單價,系統會用訂單 PO 單價覆蓋當下平均成本來計算這筆。這是 DI 直接進口品的設計,請見DI 倉 + 訂單單價覆蓋

回寫的勾選框跟儲存鈕是灰的、按不下去?

回寫區要查詢出資料後才會啟用。請先按 查詢、確認格線有資料,回寫區才會解鎖。格線為空時即使送出也不會寫入任何資料。

結存數量是 0,但結存金額還有小數殘值?

滾算過程的四捨五入可能讓零庫存留下微小殘值,系統會在當日把殘值沖掉並把沖銷前金額記在備註欄。若仍看到殘值,多半是該品號當天的進出順序造成,屬正常的尾差處理。

相關功能


需補截圖清單

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

  1. movingcost-step1.png — 條件面板(截止日期、SKU 起訖、回寫勾選框與儲存鈕)
  2. movingcost-step2.png — 查詢結果格線(含結存數量/結存金額、單位成本、倉別 DI/OTHER 欄)
  3. movingcost-step3.png — 勾選回寫後按儲存的狀態(回寫區啟用)