進銷存系統設計:庫存數字不準的根本原因
「系統上的庫存跟倉庫實際的數量對不起來。」這是進銷存系統最常見的抱怨,而多數老闆的第一反應是怪人:店員忘了刷、倉管偷懶、盤點不認真。我們營運自己的進銷存 SaaS 好幾年,支撐實體加盟體系每天的進貨、出貨與門市銷售,可以很肯定地說:庫存不準,九成是流程設計問題,不是人的問題。把「靠人自覺」當成系統設計的前提,數字就注定會飄。
這篇分享我們踩過坑之後,沉澱下來的幾個設計原則。不管你是要委託開發、還是評估市面上的現成系統,這些原則都可以當成檢查清單。
原則一:庫存數字必須是「算出來的」,不是「填進去的」
最根本的一條。庫存不應該是一個可以直接編輯的欄位,而應該是所有異動紀錄加總的結果:期初 + 進貨 − 銷貨 − 報廢 ± 調整 = 現在庫存。每一筆異動都有單據、有時間、有經手人。
為什麼這麼堅持?因為一旦開放「直接改庫存數字」,你就永遠不知道現在這個數字是怎麼來的。數字對不上時,你只能兩手一攤重盤;而異動制之下,你可以把某段期間的紀錄攤開,找到分歧發生的那一天、那一單。這就是會計「借貸要平」的邏輯,套用在貨上面而已。
庫存不準的系統,共同點都是允許某個環節「直接改數字」。只要有一扇後門,所有人最後都會走後門。
原則二:每一種貨的流動,都要有對應的單據類型
實務上貨的流動遠比「進」跟「銷」複雜:廠商進貨、門市叫貨、門市之間調貨、客人退貨、瑕疵報廢、活動贈品、內部自用。我們早期犯過的錯,是讓不同性質的異動共用同一種單據——例如把贈品出貨記成一般銷貨、金額填零。短期看沒事,長期報表全毀:毛利率算不準、銷量統計失真,月底對帳時沒人說得清楚那些零元訂單是什麼。
後來我們學乖了:每種流動就是一種單據,各自有自己的欄位與規則。贈品就是贈品單,報廢就是報廢單,調撥就是調撥單(一邊減、一邊加,同一張單完成,不會出現「貨在路上兩邊都沒有」的真空)。單據種類多一點沒關係,店員操作時系統引導就好;但資料層次一定要分清楚,因為報表是從資料長出來的,資料混了,再漂亮的報表都是假的。
原則三:盤點是「校正」,不是「重設」
很多系統把盤點做成「輸入新數字,覆蓋舊數字」。這等於每次盤點都把歷史砍掉重練,你永遠不會知道差異是多少、為什麼。
正確的設計是:盤點產生「盤差」,盤差本身是一筆有紀錄的調整異動——盤盈多少、盤虧多少、由誰確認。這樣月報表上看得到「這個月盤虧了幾件」,連續幾個月盤虧同一品項,你就知道該去查是收貨流程漏刷、還是真的有貨損。盤差是最誠實的健康指標:一套好的進銷存系統,目標不是讓盤點消失,而是讓每次盤點的差異越來越小、而且每筆差異都解釋得出來。
原則四:把防呆做在輸入的當下
數字會爛,幾乎都爛在輸入端。所以我們設計自營系統時有一條內部標準:「店員不用教學也會用」。具體的做法包括:
- 能選就不要打字:品項用選的、掃的,不要手 key 品名或編號。
- 當下擋,不要事後追:出貨量大於現有庫存,存檔前就跳出來問,而不是讓庫存變負數之後再請人去查。
- 合理範圍檢查:平常進貨都是兩位數,這次打了四位數?先確認一次。多打一個零是最常見也最貴的錯。
- 異常可見:負庫存、久未異動、成本異常的品項,主動浮上檯面,不要等人想到才去查。
這些細節在後台介面上怎麼落地,我們另外寫了一篇後台系統的 UX:讓店員不用教學也會用,有興趣可以接著看。
先確認流程,再談系統
最後還是那句老話:系統只能固定流程,不能發明流程。如果你的團隊現在連「退貨要不要收回庫存」都沒有共識,先開會把規則講清楚,再來談系統,順序不能反。我們做這類案子時,第一階段一定是陪客戶把貨的每一種流動路徑畫出來,確認每條路都有名字、有負責人,然後才動手開發——這部分的做法可以參考我們的客製化系統與 SaaS 服務。如果你的庫存數字已經飄到不知道從何救起,也歡迎找我們聊聊,從一次有紀錄的盤點開始,通常三個月內就能看到盤差收斂。
這類問題,我們每天都在自己的產品上解
免費 30 分鐘線上諮詢・先釐清方向,不推銷・一個工作天內回覆