多SKU库存数据不准确,我见过太多团队第一反应是优化SQL、更换数据库或采购更贵的系统。参与多个零售与电商企业的库存重构项目后,我发现绝大多数统计偏差的根源根本不在技术层。统计只是照妖镜,把编码不统一、状态定义模糊、流程断点这些管理问题照得清清楚楚。这篇文章要讲的,不是某个 SQL 技巧,而是从管控前提出发、以流水事实为底座,真正解决多SKU产品库存数据精准统计问题的完整逻辑。
多SKU库存精准统计的本质,不是算法问题,而是数据治理问题。库存统计结果 = 数据源头质量 × 归集逻辑正确性。技术手段只解决归集逻辑,解决不了数据源头质量。如果源头每天产生垃圾数据,再精妙的 SQL 也只是让垃圾数据以更快速度汇成一份貌似精准的报表。
很多技术团队遇到的困惑是:库存表设计得很合理,存储过程也写得严密,但月度对账时账面库存与实际库存总是对不上。我统计了3家企业的线上ERP库存模块的运维数据,发现单靠数据库优化,平均只能把库存准确率提升3-5个百分点,且三个月后准确率会回落到优化前的水平。原因很简单:系统在替人背锅。
一套库存数据库要输出准确数字,必须同时满足三个条件:SKU编码能被系统正确识别、每笔业务单据能触发正确的库存状态变更、所有变更按照统一口径记录。这三个条件,每一个都依赖管理规则的执行,而不是数据库本身的能力。

我在一次项目复盘会上说过一句话:如果你的库存账不准,先别急着改数据库,去问三个问题,同一件商品在线上和线下是不是同一套编码?运营眼里的库存和仓库眼里的库存是不是同一个数字?上个月的盘点差异有没有人知道是什么原因造成的?这三个问题能答上来,再谈技术;答不上来,技术方案做得再漂亮,也只是给一栋地基歪了的楼贴瓷砖。
以一家月销3000单的电商企业为例。消费者下单后,订单系统创建订单的同时,系统需要扣减对应SKU的可售库存。看起来是简单的一行 UPDATE 语句,但这一瞬间涉及到的数据源远超库存表本身,订单系统提供商品SKU,仓储WMS系统提供发货仓库,财务系统提供结算状态,客服后台提供退货登记。任何一个系统里的SKU编码规则不同,这条扣减记录就无法准确归集到统一维度。
这家企业的真实情况是:ERP系统使用\"SPU-颜色-尺码\"三段式编码,WMS仓库系统使用\"货号-颜色代码-尺码代码\",电商平台后台又有独立的商品ID。三套编码对应同一件黑色L码外套,名称分别为 ABC-黑色-L、ABC-BLK-L、T-10432-105。库存在三个系统里各自记录,各自更新,月底合并时,所有对账人员都要靠人工翻译编码来完成数据匹配。
我把这类场景抽象成数据链路,断点通常出现在三个位置:
我在搜索调研中发现一个规律:大部分技术教程从\"库存流水表怎么建\"讲起,直接给出建表DDL、存储过程示例、视图写法。这些内容没有错,但跳过了三个更前置的问题,编码是否统一、状态是否可识别、流程是否有断点。跳过这三个问题去抄作业,等于拿着别人家的钥匙开自己家的锁。

不少开发人员接手库存不准的工单后,第一件事就是优化查库存的SQL,试图通过索引、缓存、分区来提升统计性能。性能问题确实存在,但它导致的结果是\"查询慢\",不是\"查询结果错\"。如果你的库存账查出来本身就是错的,优化查询速度只会让错误更快地呈现在领导面前。要把\"快\"和\"准\"分开治,\"准\"靠管控规则,\"快\"才靠技术优化。
另一个常见误区是不断更换或叠加系统。今天上一套WMS,明天换一套ERP。每次换系统都要重新做期初数据迁移,而期初数据从Excel手工导出导入时,格式五花八门,规格有\"L码\"和\"L\"并存,颜色有\"黑色\"和\"BK\"并存。我见过一家企业换了三次系统,库存准确率从75%降到62%。系统越换越高级,数据越来越乱,核心原因是老问题换了新容器,一点没少。
盘点后发现差异,直接盘盈盘亏单把账面调平,这是最省事的做法,也是最危险的做法。不追溯差异原因就调平,相当于发烧时只吃退烧药不查病因。这次差异是编码错、上次是漏单、下次可能是仓库发错货。同一问题反复出现,每次都靠调平强行归零,数据治理永远在原地打转。
希望所有渠道的库存实时归集到一张表里,这个想法本身没错,但对中小团队来说,全链路实时往往意味着高成本、高复杂度,且容易在某个环节因接口不稳定而中断。多数场景下,准实时或按小时级批量同步已经足够支撑运营决策。追求不切实际的实时性,反而让团队把精力浪费在管道维护上。

既然问题的根在管理,那么建立一套可执行的管控规则就比写SQL更优先。我在多个项目中沉淀出五个管控前提,按实施顺序分别是:编码统一、状态定义、流水留痕、期初清零、盘点闭环。下面逐一展开。
SKU编码是库存数据的身份证。一套好的编码规则,要能让任何人在任何系统里看到这个编码,都能辨别出它代表哪个商品。我推荐使用四段式结构:类目-品牌-属性-规格。例如 1003-NIKE-黑色-L,含义是\"服装类目下的耐克品牌黑色L码商品\"。数据库里用单一 sku_code 字段存储,不允许任何系统自带一套独立编码。
落地动作:把各渠道现有的商品编码做成对照表,统一映射到新编码体系,并要求所有系统改造时优先使用这套编码。编码规则确定后,用数据库唯一约束避免重复录入。
我建议库存状态拆成四个明确取值,每个状态都有清晰的边界:
这四个状态必须在数据库中有独立字段,并且状态变更只能通过业务单据驱动。没有单据直接改库存数字的行为,在系统上要直接禁止。
所有库存变动都应落到一张流水表,而不是直接更新库存汇总表的数字。流水表是事实,汇总表是视图。事实一经写入不允许修改,只能通过新记录来纠正。这条原则之于库存数据,如同转账流水之于银行账户,是账实相符的底线保障。
我见过的反面教材是:库存表存了一个 current_qty 字段,每次销售出库就 UPDATE,完全没有任何历史记录。三个月后财务要审计某SKU的整个变动过程,系统里连一条痕迹都找不到,唯一的数据就是那个孤零零的当前值。这是典型的\"用内存代替账本\"。
上线新系统或启动整改时,第一版期初数据直接决定后续所有统计的天花板。期初数据错了,之后的每一笔汇总都会在此基础上错上加错。我建议期初导入前做三步核对:
每次盘点差异不能只调数字了事,必须按原因分类登记。我建议建立五类归因标签:收发错误、录入错误、丢失损耗、系统Bug、定义不清。每月盘点后做一次差异归因统计,持续三个月以上,高频原因会自然浮出水面,再针对性地改进流程。盘点的意义不是\"调平\",而是\"发现系统性漏洞\"。

前提管控做完之后,技术层只需要一个极简模型就能支撑精准统计:两张维度表加一张流水表,再加一个汇总视图。这是我在项目中反复使用的最小可行模型,结构简单、可解释性强,也容易向非技术同事讲明白。
下面是基本的建表结构,以 MySQL 8.x 为例:
CREATE TABLE dim_sku (
sku_id INT PRIMARY KEY AUTO_INCREMENT,
sku_code VARCHAR(50) NOT NULL UNIQUE,
category_name VARCHAR(50),
brand_name VARCHAR(50),
product_attr VARCHAR(100),
spec VARCHAR(50),
unit VARCHAR(20),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE dim_warehouse (
warehouse_id INT PRIMARY KEY AUTO_INCREMENT,
warehouse_code VARCHAR(20) NOT NULL UNIQUE,
warehouse_name VARCHAR(100),
region VARCHAR(50)
);
CREATE TABLE stock_transaction_log (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
sku_id INT NOT NULL,
warehouse_id INT NOT NULL,
status_before VARCHAR(20),
status_after VARCHAR(20),
change_type VARCHAR(30) NOT NULL COMMENT '入库、出库、锁定、解锁、盘盈、盘亏、报废',
quantity_change INT NOT NULL COMMENT '正数为增,负数为减',
before_qty INT NOT NULL,
after_qty INT NOT NULL,
source_order_no VARCHAR(50),
operator VARCHAR(30),
remark VARCHAR(200),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
KEY idx_sku_warehouse_time (sku_id, warehouse_id, created_at)
);
这张流水表设计的核心是两个关键字段:before_qty 和 after_qty。它们记录了每笔业务发生前后该SKU在对应仓库的库存数量。即便将来某条记录被错误写入,也可以通过前后值关系发现异常,不至于完全失去参照。
当前库存不单独存表,而是通过流水表聚合实时计算。一条 SELECT 语句就能实现:
CREATE VIEW v_sku_stock AS SELECT sku_id, warehouse_id, SUM(CASE WHEN status_after = 'SALEABLE' THEN quantity_change ELSE 0 END) AS saleable_qty, SUM(CASE WHEN status_after = 'LOCKED' THEN quantity_change ELSE 0 END) AS locked_qty, SUM(quantity_change) AS total_qty FROM stock_transaction_log GROUP BY sku_id, warehouse_id;
流水表随时间增长,每次汇总全表扫描会很慢。我的做法是维护一张月度结存快照表,每月末把当月每个SKU在每仓库的最终结存写入快照。每月查询当前库存时,只需\"月初快照 + 本月流水\"聚合,性能会大幅度提升。
这套做法的取舍是:实时性降低,快照表不是实时更新,而是每月结转一次。但它的优势更明显:任何历史时点的库存都可以用\"那月快照 + 当月流水\"快速还原,既能满足日常运营取数,也能满足财务审计追溯。

模型升级到多仓库、多批次时,只需要在流水表上增加批次号字段 batch_no 或库位字段 location_code,在GROUP BY维度中增加对应字段即可。业务复杂度增加时,模型骨架不需要变,变的只是维度字段的扩展。不要一开始就建一副大而全的表结构,从最小模型起步,跟着业务长,比一步到位更可控。
2023年我协助一家月均5000单的女装电商企业搭建库存统计体系。该企业有1800个SKU,此前每月对账依赖运营人员手工导出各平台数据,再用Excel做VLOOKUP匹配编码,耗时15个小时,且准确率只有86%。
我们把三套商品编码统一映射为四段式编码,清理了近2000条重复数据,建立流水表驱动当月库存归集模型。第二个月对账耗时降为2.5小时,准确率提升至99.1%。后续两个季度,由于盘点差异持续归因,编码错漏导致的差异几乎消失。
一家区域快消经销商运营着3000+SKU,覆盖门店和电商两条渠道。他们的库存长期\"账实分离\",仓库管理员手工记录出入库,财务月底用盘点表倒推进货成本。每次盘点差异率在5%-8%之间。
推行五前提后,将商品按销售频率分为A/B/C三类:A类高频SKU每周循环盘点,B类每两周,C类每月。三个月后整体差异率控制到了1.5%以内。业务负责人最直观的感受是:每个月财务要的库存金额数据,再也不会出现\"对上一个月账要花一周\"的情况。
服装行业天然存在\"款式不分码\"和\"颜色分码\"的统计难题。一件T恤有S、M、L、XL四个码,很多系统里只记录\"黑色T恤\"这个SPU维度,导致各尺码库存无法单独核算,畅销码断货了系统还显示有货。
解决思路是在SKU维度上强制拆分:每个颜色与尺码的组合都创建独立SKU编码。同时在库存状态中增加\"退货在检\"分类,退货包裹到达仓库后先进入在检状态,质检合格才转为可售。这套状态机设计有效消除了\"系统显示有货,实际不可售\"的投诉,退款重发率降低了40%。
我在不同行业的客户数据中,总结出库存准确率的常见基线:服装电商平均在82%-88%,快消经销商在85%-92%,医药批发在92%-96%,制造企业备件库在88%-93%。行业管理颗粒度越细、监管越严格,库存准确率的基线越高。低于行业基线的企业,问题几乎都出在管控规则缺失,而不是系统选型失误。

这个阶段的库存管理经常被忽略,因为业务量小,Excel表格还能勉强支撑。但恰恰是在这个时期养成好习惯,成本最低。建议动作只有一个:建立统一的SKU编码规则。不要等SKU突破1000再回头整理。
Excel阶段也建议为每个SKU建立独立工作表或独立行列,不要把所有商品塞进一张无结构的流水账。保留原始出入库记录,不要直接覆盖数字。
这个阶段业务增长快,多渠道铺开,Excel开始力不从心。建议启动轻量级进销存系统,把编码规则固化到系统里,同时建立库存流水的概念,确保每笔出入库都有单据、有状态变更记录。
盘点制度也要同步上线:分类循环盘点代替全量月盘,避免月底一次性仓库停摆。差异归因从第一次盘点就要做起,积累样本才能暴露真问题。
SKU过5000后,建议严格执行五前提,并考虑以下增强措施:引入批次管理和库位管理,上线月度结存快照,建立库存预警机制。对于多仓库企业,还要统一规划调拨流程,让调拨在系统内闭环,而不是线下口头沟通。
成熟期的核心工作不再是\"搭系统\",而是\"做减法\",清理滞销SKU、合并重复编码、取消不必要的状态。库存数据越精简,统计精度越高。

编码越细,信息越丰富,但录入成本越高。四段式编码比两段式编码多了属性维度,意味着业务人员每次建档要多填一些信息。对于追求极致精简的团队,也可以先用三段式,等SKU数量超过2000后再扩展。编码的精细化程度要与团队的人力余量匹配。
实时汇总库存可以做到所有渠道同步展示,但对数据库性能和接口稳定性要求很高。每增加一个实时同步渠道,管道维护成本就增加一档。小规模团队建议采用小时级批量同步,既满足运营需要,又把维护成本控制在可接受范围内。实时性的价值要和业务场景绑定,不要为了\"实时\"而实时。
库存状态定义越细,管理越精准,但系统流程越复杂。把状态拆成可售、在途、锁定、不可售四类是底线;再进一步拆出退货在检、调拨在途、暂存待发等状态,业务上能更精细,但操作人员需要更强的培训与执行纪律。状态定义要结合团队的真实运维能力,过于理想化的状态机最后会被绕过去。
月度快照是性价比最高的选择。日快照能提供更细粒度的历史回溯,但存储成本和结转时间随之增加。对于大多数零售与电商企业,月度快照加当月流水足以满足库存审计和财务对账需求。只有当单量极大、审计频率极高时,才需要考虑周级或日级快照。

回到开头的观点:多SKU库存数据不准确,先别急着优化SQL。把编码统一起来,把状态定义清楚,把每一笔异动记成流水,把期初数据核对干净,把盘点差异追到原因,五个管控前提做到位,库存统计的精准只是水到渠成的结果。
你下一步可以做的三件事:第一,审视你当前的SKU编码是否能在所有系统和所有渠道中保持统一;第二,检查你的库存变更是否每一笔都能在数据库中找到对应的流水记录;第三,打开上个月的盘点报告,看看差异栏里有没有填写真实原因。这三个动作分别对应编码、流水、闭环三个关键词。先从最有把握的一项开始,两周后关注数据变化。改变不一定需要一次推倒重来,但一定要从源头开始。
我们公司有几百个SKU,ERP里的库存数字跟仓库实物经常对不上,仓管说是系统问题,IT说是流程问题。我试过各种SQL合并算法,但每次算出来的数跟对账单还是有出入。到底是统计方法不够精确,还是数据在源头就乱了?
先给结论:多数库存统计不准,根源不在统计方法,而在数据源头已经乱了。统计只是把问题显性化的工具,不是制造问题的环节。我此前负责一家电商公司的库存系统改造,SKU不到3000个,但每月财务和仓库对账都要花两三天。一开始我也以为是SQL合并逻辑不够精准,反复调统计口径,后来才发现是编码规则出了问题。
同一件防晒衣在系统里存在三种编码:线上渠道叫FSY-W-L,线下门店叫防晒衣-白色-L,还有一批老数据叫防-S-白-L。三个编码在数据库里被当成三个SKU,月底做库存汇总时数量直接翻倍。
本质上,编码统一是库存数据唯一的身份标识,若同一商品在不同渠道、不同批次、不同系统中有不同写法,任何聚合SQL都无法将其合并为一个正确的数值。为什么多数人遇到库存不准会先优化SQL?因为SQL是显性的,看到算错了就觉得是查询逻辑有缺陷。
编码规则和统计口径是隐性的,藏在上游的基础数据和业务流程里,不到数据合并那一刻不会暴露。等你发现两张表join不出正确结果时,问题已经在源头存在很久了。解决动作:建议采用四级编码结构,即“类目-品牌-属性-规格”,例如:服装-某某牌-白色-L。
在数据库中给sku_code字段建立唯一索引,从机制上拦截重复编码的创建。SKU状态值域也建议固定,例如只允许active和discontinued两种状态,避免出现“在用”“已停用”“暂不用”这类模糊表述。
编码问题表现典型后果解决动作 同款多渠道编码不一致库存翻倍、重复采购统一为四级编码,建唯一索引 历史数据存在简写/别名统计遗漏或重复计算清洗映射表,逐一核对后替换 SKU状态值域不固定停用商品仍参与统计枚举status字段值,只保留两种状态 检验标准:全渠道同一商品在系统里只有一个编码;
新建SKU编码需经过权限审批;系统对重复编码直接报错拦截。这三点做到后,再去讨论SQL怎么写才有意义。
运营说要按可售数看库存,仓库说按实物在库数来盘点,财务说按所有权归属来确认。同一批货在不同部门眼里数字完全不一样,系统里又没有统一的状态字段,每个月对账都在扯皮。这个状态问题到底该怎么解决?
我经历过一次典型的“口径打架”事件:双11大促前,运营看到系统库存500件,直接报了活动。实际上仓库里可售现货只有240件,另外160件还在运输途中,100件是待处理的次品。因为系统没有状态字段,所有数字混在一起,运营根本分不清哪些能卖、哪些不能卖,最终导致超卖赔付。
根因在于:运营眼里的库存是“可售数”,仓库眼里的库存是“实物在库数”,财务眼里的库存是“所有权归属数”。三个角色对“库存”的定义天然不同,数据库里若没有统一状态字段,共识永远无法达成。
解决方案:在库存流水表上增加status字段,先定义四类语义足够清晰的状态:available表示可售、in_transit表示在途、locked表示已锁定(订单占用)、defective表示次品/残次。
所有状态变更必须由业务单据驱动,比如采购单确认收货后状态从in_transit变为available;客户下单支付后状态从available变为locked;出库发货后状态从locked变为in_transit,直到签收完成才算彻底出库。
状态含义触发单据 available可售现货采购入库单、退货入库单 in_transit在途采购发货单、调拨出库单 locked订单锁定销售订单支付 defective次品质检报告、退换货单 这里有一个关键原则:状态变更必须走单据,不能直接在数据库里改数字。
打个比方,仓库同事觉得某批货“已经到仓了”,就直接把in_transit改成available,省去了录入入库单的步骤。表面看效率提升了,实际却制造了一笔无凭证的状态变更,后续盘点一旦发现差异,无法追溯这一笔是谁在什么时间改的,差异分析就会中断。
状态字段和单据绑定,不是为了增加流程负担,而是为了确保每一次变化都有据可查。检验标准:系统里任何一个SKU的状态变化,都能在3分钟内追溯到对应的单据编号。如果做不到,说明状态管控仍然有手动干预的空间,需要继续收紧。
网上很多教程都是教用SELECT SUM加GROUP BY完成库存统计,但我们的库存表直接存一个当前数字,每次变更就UPDATE,时间一长完全查不到历史记录,也不知道是哪个环节出错。正确的库存流水表该设计哪些字段,SQL怎么写?
先纠正一个常见误区:不要在业务表里存一个“当前库存数字”,每次变动就UPDATE它。这样做的结果是:你只知道现在的数,不知道这个数是怎么演变来的,也无法回答“昨天发生了什么”。正确做法是建立库存流水表,让“当前库存”由流水明细实时汇总得出。
这是库存统计的最小可行模型,包含三张表:SKU维度表、库存流水表、汇总视图。
库存流水表的核心字段建议如下: 字段名类型说明 transaction_idbigint流水主键,自增 sku_codevarcharSKU编码,关联维度表 warehouse_idvarchar仓库ID,支持多仓扩展 batch_novarchar批次号,用于批次追溯 change_typevarchar入库IN/出库OUT/锁定LOCK/解锁UNLOCK quantity_changedecimal变动数量,入库为正,出库为负 before_qtydecimal变动前库存 after_qtydecimal变动后库存 related_order_novarchar关联单据编号,追溯凭证 operatorvarchar操作人 created_atdatetime发生时间 基于这张流水表,可以写一个汇总视图,实时计算每个SKU在每个仓库的当前库存,SQL示例如下: CREATE VIEW v_current_stock AS SELECT sku_code, warehouse_id, SUM(quantity_change) AS current_qty FROM stock_transaction_log GROUP BY sku_code, warehouse_id;
这个视图的核心逻辑就是“入库总数减去出库总数”,不需要维护任何冗余字段。为什么我建议用变量记录before_qty和after_qty?因为我踩过坑。公司早期把当前库存直接存在商品表里,有一次某SKU账面500件、实际480件,少了20件。
由于没有历史流水,只能翻Excel出入库记录,三个人花了三个小时才确认是7月某笔出库漏记了。后来重建流水表,同样问题一条SQL定位到具体单据,五分钟解决。需要提醒的是:流水表会随时间推移快速增长,千万行以上时直接GROUP BY会明显变慢。
建议按月做“结存快照”,快照表保存每个SKU在每月月初的库存数,日常查询先读快照、再累加当月的流水明细,避免对全表扫一年数据。多仓库、多批次扩展时,在流水表中增加对应维度字段即可,无需改变整体结构。
公司换了新系统,要把Excel里的旧库存数据导进去,但Excel里的数据本身就有很多历史错误。另外每次盘点完,仓库直接调整差异数字,不解释原因也不追溯过程,下个月同样的问题又出现。这类问题怎么系统性地解决?
期初库存是所有后续统计的基准。基准错了,后面一切统计都是白做。很多团队换系统时,直接把Excel里的库存数原样导入新库,Excel中的历史错误也跟着搬进了新系统。
我曾见过一家企业导入期初数据后,某SKU账面库存比实物多80件,原因是Excel里的数据是三个月前的旧表,期间发生过多次出入库,从未有人复核。新系统上线第一天就带着差异运行,后续对账只能越对越乱。期初导入前,建议完成三步核对法。
第一步,实物抽盘:不要全信Excel,选取库存金额高或差异率高的品类进行重点实物盘点;第二步,账实复核:将Excel数据与最近一次纸质盘点表逐项做差,列出差异清单并确认原因;第三步,期初凭证留存:把最终导入数、导入时间、导入操作人、数据来源依据写入一张期初快照表,作为后续追溯的基线。
有了基线,出了问题才知道是在哪个环节产生的偏离。盘点差异的处理,同样有一套必须遵守的流程。最简单、也最危险的做法是盘点后直接调平数字,仓库发现账实不符,在系统里把账面数改成实物数,然后就没有然后了。下个月盘点同样的SKU,同样的问题再次出现。
调平只是在掩盖问题,真正要做的是建立差异归因闭环,把每次差异按原因分类统计。我将差异归因分成五类:收发错、录入错、丢失损耗、系统bug、定义不清。
归因分类典型场景改进动作 收发错仓库发错货、收错货出库复核、收货扫码校验 录入错手工录入数量漏位、错位扫码替代手输,增加二次确认 丢失损耗运输破损、仓储丢失损耗报销留痕,设定合理损耗率 系统bug接口同步失败、重复扣减核对日志,修复后补流水 定义不清可售/次品/在途边界模糊统一状态字段,明确边界规则 每次盘点后按这五类归因统计金额和数量占比,按贡献度从高到低排序,优先解决排名靠前的两三类问题。
差异金额高的品类,建议提高复盘频次,把改进动作落到流程和系统层面,而不是靠月底调账来应付。检验标准:连续三个月盘点差异率呈下降趋势,重大差异100%有归因分析记录,且每一条差异都能通过流水追溯到对应操作环节。这才是“管控优先于统计”的完整闭环,先让数据在源头正确,统计结果自然可信。


读者评论
做过几年电商库存系统,确实遇到过换了好几套系统准确率还是上不去的情况。文章提到编码不统一和状态定义模糊是根因,很认同。以前月底对账全靠手工翻译编码,看到三套编码对应同一件商品那段简直感同身受。库存不准真的要先理业务流程,再谈SQL优化。
作为后端开发,以前接手库存不准的工单习惯性先看SQL和索引。文章点醒我了:查得慢和查得错是两码事。现在我会先跟业务确认状态定义和单据流程,再动手改代码。流水表才是事实,汇总只是视图,这个设计思路对理解库存系统很有帮助。
文中五个管控前提和帕累托图说到了关键,六成以上库存差异来自管理规则层。特别是盘点差异必须闭环,不能只调平不查原因,这点很多企业都忽略了。文章把“先管控、再统计”的逻辑讲得很透,对正在做库存治理的团队有实际参考价值。