跳至內容
Astera Technology

盤點數與出入庫紀錄對不上,先查哪些貨品?

以期初數量加上出入庫變動,再對照實際盤點,找出需要覆核的差額。

先訂清楚要判斷甚麼,再準備資料

每款貨品只保留一個期初結存,入庫用正數、出庫用負數,單位也要一致。先合計變動,再與盤點數比較。差額只是查核起點;直接改結存,可能掩蓋漏記出入庫、盤點錯誤或期初數不準的原因。

以下全部是假設資料。請在新的 SQLite 測試資料庫建立各表,再執行唯讀查詢。數量以件計,金額以港元的分作整數儲存;顯示港元時除以 100。

假設輸入節錄;完整相關資料見下方 SQL
貨品編號期初數量盤點數量
A1012
B83
C66
下載可編輯 CSV ↓
可直接執行的完整假設資料(SQLite)
CREATE TABLE stock(sku TEXT PRIMARY KEY, opening_qty INTEGER, counted_qty INTEGER);
CREATE TABLE movements(id INTEGER PRIMARY KEY, sku TEXT, qty INTEGER, moved_on TEXT);
CREATE TABLE reservations(id INTEGER PRIMARY KEY, sku TEXT, qty INTEGER, status TEXT);
CREATE TABLE transfers(id INTEGER PRIMARY KEY, sku TEXT, sent_qty INTEGER, received_qty INTEGER, sent_on TEXT);
INSERT INTO stock VALUES ('A',10,12),('B',8,3),('C',6,6);
INSERT INTO movements VALUES (1,'A',5,'2026-10-01'),(2,'A',-2,'2026-10-02'),(3,'B',-5,'2026-10-03'),(4,'C',0,'2026-08-01');
INSERT INTO reservations VALUES (1,'A',8,'confirmed'),(2,'A',3,'cancelled'),(3,'B',5,'confirmed');
INSERT INTO transfers VALUES (1,'A',7,4,'2026-10-05'),(2,'B',2,2,'2026-10-06');

執行查詢,核對實際結果

SQLite 唯讀查詢
SELECT s.sku, s.opening_qty + COALESCE(SUM(m.qty),0) AS ledger_qty,
       s.counted_qty, s.counted_qty - (s.opening_qty + COALESCE(SUM(m.qty),0)) AS difference
FROM stock s LEFT JOIN movements m ON m.sku=s.sku
GROUP BY s.sku,s.opening_qty,s.counted_qty
HAVING difference <> 0 ORDER BY s.sku;
以上 SQLite 假設資料的查詢結果
貨品編號帳面數量盤點數量差額
A1312-1
下載可編輯 CSV ↓

A 的帳面結存是 13,實際只有 12,少了 1 件。B 和 C 沒有差額。應先覆核 A 的盤點表及出入庫憑證,再安排經批准的更正。數量吻合也可能是兩項錯誤互相抵銷,不能當作所有紀錄都正確。

按資料範圍使用結果

例子只設一個倉庫,每款貨品有一筆盤點數。多倉庫要按貨品及倉庫核對,並訂明截數時間,截數後的變動不能混入。

本例的建表、資料及結果已在 SQLite 執行。套用時先在系統測試副本調整欄位及狀態規則,再與流程負責人核對預期結果。其他資料庫平台未經測試。

相關資源