程式資訊
- 程式 ID:
MOVINGCOST - 所屬子系統:K.成本管理
- 狀態:stable
移動平均成本¶
功能簡介¶
「移動平均成本」依逐日加權平均的方式,把指定截止日以前的所有庫存異動重算一次,算出每個 品號(SKU) 到該日為止的移動加權平均單位成本,並把每一筆出入庫交易應分攤的成本逐筆列出。它是成本會計在月底(或任一截止日)核對庫存單位成本、並把計算結果回寫到交易單據與品號主檔的工具。
計算上有兩個關鍵特性,理解它們才看得懂結果:
- 倉別只分兩群:所有倉庫被歸成
DI與OTHER兩群,分別各自跑一條移動平均線(同一個品號在 DI 與 OTHER 會有兩個不同的單位成本)。 - 逐日重算、不是逐筆即時:系統先取「期初(資料起始月)的結存數量與結存金額」當起點,再把每一天的入庫加進來、出庫用「當下平均單位成本」扣掉,一路滾到截止日,所以每一筆交易的單位成本=它發生當下的移動平均。
詳細的逐日滾算規則、DI 與訂單單價覆蓋、進口費用重算等連動行為,請見欄位連動與附加功能。
前置需求¶
- 權限:K.成本管理 →
移動平均成本的瀏覽權限(回寫成本另需該程式的編輯權限)。 - 基礎資料:計算結果是否正確、完整,取決於下列資料的維護狀況——
| 資料 | 影響的結果 |
|---|---|
| 庫存異動(出入庫交易、調撥單 TRRADE) | 逐日滾算的進出數量與成本、結存數量/結存金額 |
| 期初成本結存(成本計算 COST 產生的月結資料) | 每個品號滾算的起點數量與起點金額;沒有期初就沒有那一群的計算 |
| 暫收單/進貨明細(PURADE)與進口費用 | 進貨成本的其他費用(OtherCost)重算,會回頭改寫進貨單成本後才算平均 |
| 採購單(同倉群是否存在採購單) | 決定結果頁「最新採購單價」對照欄是否帶值 |
| 銷售訂單(ORMAST,含 PO 單價) | DI 倉出貨且該訂單帶有 PO 單價時,會用訂單單價覆蓋當下平均成本 |
倉別 DI 的意義
程式把倉別固定切成 DI(直接進口/指定倉)與 OTHER(其他所有倉)兩條成本線。若貴公司沒有使用 DI 倉概念,實際資料會幾乎都落在 OTHER,DI 那一條會是空的,屬正常現象。
操作步驟¶
本程式是「查詢 → (可選)回寫」兩段式作業,沒有新增/修改/刪除單據的動作。
步驟① 設定查詢條件¶
條件面板在畫面上方:
- 輸入截止日期:計算會把這天(含)以前的所有異動滾算進來。預設為今天。
- 輸入 SKU 起~訖:限定要計算的品號範圍。
- 起始 SKU 預設為
ALL,代表全部品號(此時系統內部自動以空字串~zzzzzz涵蓋全部,訖也可留空)。 - 要只算某段品號時,在起、訖兩格分別填入起始與結束品號。
- 起始 SKU 預設為
步驟② 執行查詢¶
按工具列的 查詢。系統會:
- 先抓期初成本結存當起點、並重算進口/進貨的其他費用(見欄位連動與附加功能)。
- 對
DI、OTHER兩群分別、再對每個品號逐日滾算移動平均。 - 把每一筆交易連同當下單位成本、分攤成本、結存數量、結存金額列在下方格線。
查詢完成後,下方的「回寫」區(兩個勾選框與儲存鈕)才會被啟用。
小技巧
ALL 全品號+較早的截止日資料量會很大;先用 SKU 起訖縮小範圍核對個別品號,確認無誤再跑全品號。格線可由右鍵匯出 Excel。
步驟③(可選)回寫成本¶
確認計算結果後,可勾選要回寫的對象再按 儲存:
- 勾選回寫交易成本(Update Cost of Transaction):把每一筆交易算出的單位成本與成本金額寫回該庫存異動單據。
- 勾選回寫品號主檔成本(Update Cost of Item Master):把每個品號算出的單位成本(與 DI 成本)寫回品號主檔。
- 兩者可單獨或同時勾選,按
儲存後系統分別上拋到對應的暫存資料表執行回寫。
注意
回寫會改寫既有單據與品號主檔的成本欄位,屬不可逆的成本調整。請務必先在步驟②核對結果,再執行回寫;無查詢結果(格線為空)時回寫區維持停用、不會送出任何資料。
欄位說明¶
查詢條件¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 截止日期 | ✔ | 計算滾算到此日(含)為止;格式 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) | 系統備註;數量歸零但仍有殘值時,記錄沖銷前的結存金額 |
為什麼有兩個「金額」欄
原幣未稅金額是交易單據上的外幣金額,未稅金額/成本金額是換算本位幣、再經移動平均重算後的成本。對單據時請以成本金額為準。
欄位連動與附加功能¶
這一節說明「按下查詢後,系統實際做了什麼」與「勾選回寫後會寫到哪裡」。這些行為都來自程式邏輯,使用者只需知道輸入與結果的因果關係。
查詢時的連動(按 查詢 後依序發生)¶
- 先定出計算起點(期初):系統讀成本月結資料(
PRIME_QRY_MOVINGCOST),取資料最早月份當起算月、以你輸入的截止日當結束日。若完全沒有成本月結資料,查詢直接結束、格線為空。 - 重算進口/進貨的其他費用:在正式滾算前,系統會把區間內的暫收/進貨明細與進口費用比對(櫃號、品號、未交數量、明細鍵都吻合才配對),算出每張進貨單應分攤的其他成本(到岸成本-FOB 金額),並回頭改寫進貨單的成本金額(單價×數量+分攤其他費用+既有分攤費用)。所以同一截止日重跑,進貨單成本會被刷新——這是刻意的,目的是讓平均成本反映最新的進口費用分攤。
- 倉別歸群:每筆異動的入/出庫倉只要不是
DI,一律歸成OTHER;倉別取「有入庫倉就用入庫倉,否則用出庫倉」。 - 逐日加權平均滾算:對
DI、OTHER兩群、每個品號:- 以期初結存數量/金額為起點,期初單位成本=期初金額÷期初數量。
- 從起算日一天一天往後走,入庫就把數量與成本加進結存、出庫用「當下單位成本×數量」扣掉,每走一筆就更新結存數量與結存金額,下一筆的單位成本=最新結存金額÷結存數量。
- 調撥(
TRRADE)依有無入庫倉判斷加或減,不重算單價、直接用原成本進出。
- 數量歸零殘值沖銷:當某品號某日滾算後結存數量歸零、但結存金額還有殘值,系統會把當天最後幾筆同品號交易的殘值沖掉,並把沖銷前金額記到備註欄,避免結存金額卡著零庫存的尾差。
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/):
movingcost-step1.png— 條件面板(截止日期、SKU 起訖、回寫勾選框與儲存鈕)movingcost-step2.png— 查詢結果格線(含結存數量/結存金額、單位成本、倉別 DI/OTHER 欄)movingcost-step3.png— 勾選回寫後按儲存的狀態(回寫區啟用)