导读:月末盘点,账上库存 500 件,实盘只有 460,40 件去哪了说不清;盘点单改来改去,财务对不上。库存盘点的核心是三张表:盘点单、盘点明细、盈亏调整,外加一个"复盘再复核"的动作。本文给出可直接复制的表结构与盘点流程。
盘点不能直接把实盘数盖到库存表上,要先记录"账面数 vs 实盘数",确认后再调整。拆成盘点主表 + 盘点明细表:
CREATE TABLE stocktake (
id BIGINT PRIMARY KEY,
store_id BIGINT, status VARCHAR(16), -- drafting/confirming/done
created_at DATETIME
);
CREATE TABLE stocktake_item (
id BIGINT PRIMARY KEY,
stocktake_id BIGINT,
product_id BIGINT,
book_qty INT, -- 账面数
actual_qty INT, -- 实盘数
diff_qty INT -- 差异 = actual - book
);要点:盘点单状态机是"草稿 → 确认中 → 完成",完成前可以反复修改;差异字段由系统计算,不让店员手填,避免笔误。
盘点差异不是"把库存改成实盘数"就完事,要能解释差异来源:漏录、损耗、错发、盗窃还是系统 bug。盈亏调整单独记账:
# 差异确认后生成调整记录
调整原因: 盘点差异(漏录/损耗/错发/其他)
调整数量: diff_qty
调整后: 库存表 = 实盘数要点:差异超过阈值(如单品差异 >5%)要触发复核,不能直接确认;调整记录要留操作人、时间、原因,月底对账全靠它。
边卖边盘是盘点数据不准的头号原因。盘点期间要冻结该品类的出入库操作,盘点完成后再解冻:
# 盘点开始:锁定盘点范围库存
UPDATE product_stock SET locked = 1 WHERE store_id = ? AND category = ?;
# 盘点结束:解冻并写入实盘数
UPDATE product_stock SET qty = 实际数, locked = 0 WHERE ...;要点:大店按品类分批盘点,避免全店停业;锁库期间销售单据要暂存,盘点完再补录;盘点过程要有第二人复核,单人盘点容易漏。
一次盘点完成不代表结束,要和上一次盘点对比:两次盘点差异同方向(都盘亏),说明有系统性漏录;差异集中在同一品类,说明该品类流程有问题。复盘表记录连续盘点结果:
# 复盘查询:连续两次盘点差异
SELECT product_id, SUM(diff_qty) FROM stocktake_item
WHERE stocktake_id IN (上次ID, 本次ID) GROUP BY product_id HAVING ABS(SUM(diff_qty)) > 0;要点:连续盘亏的品类要追查根源(进货短装、门店偷漏、系统并发漏记);盘点差异率(差异金额/库存金额)控制在 0.5% 以内算健康,超过要复盘流程。
库存盘点按「主表管流程 → 差异可解释 → 先封库再盘 → 连续复盘」落地,三张表管住数据、状态机管住流程、阈值复核管住质量、复盘追查管住根源。同类分层在乔拓云门店系统的库存盘点模块中有对应实现,连锁门店可直接参照该模块的盘点流程与差异处理起步。
盘点不是"改个数",是"查清账":表结构管住数据、流程管住过程、复核管住质量、复盘管住根源。四步走稳,月底盘点就不再是财务和店长的噩梦。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。