跳轉到

程式資訊

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

移動平均成本

功能簡介

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

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

  1. 倉別只分兩群:所有倉庫被歸成 DI 與 OTHER 兩群,分別各自跑一條移動平均線(同一個品號在 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. 對 DI、OTHER 兩群分別、再對每個品號逐日滾算移動平均。
  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) 入庫倉別,已歸群為 DI/OTHER(空白代表非入庫)
出庫倉(Source Bin) 出庫倉別,已歸群為 DI/OTHER(空白代表非出庫)
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) 歸群後的成本線:DI 或 OTHER
結存數量(Balance Quantity) 滾算到本筆後,該品號該倉的累計結存數量
結存金額(Balance Amt) 滾算到本筆後的累計結存金額(除以結存數量=下一筆的單位成本)
備註(Memo) 系統備註;數量歸零但仍有殘值時,記錄沖銷前的結存金額

為什麼有兩個「金額」欄

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

欄位連動與附加功能

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

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

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

DI 倉 + 訂單單價覆蓋

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

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

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

回寫(按 儲存 後)

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

規劃中/尚未提供

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

常見問題

按了查詢,資料表格完全是空的?

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

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

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

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

查詢時系統會在滾算前重算進口/進貨的其他費用並改寫進貨單成本(到岸成本與 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 — 勾選回寫後按儲存的狀態(回寫區啟用)