有 790 件商品半年没上架:进销存同步中库存是怎么对不上的
进销存系统里的商品目录和网站上的目录悄悄地对不上了:日志没有报错,客户也没有投诉。本文讲清楚增量同步为什么从原理上就看不到某些变化,以及如何在自己的系统里查出来。
一家贸易公司的网站与进销存系统之间一直有同步。日志干净、定时任务照常执行、没有任何报错。在我们把整个目录完整核对一遍之前,没有人察觉有问题。
结果是:161 件在售商品在网站上被当成已归档隐藏起来,353 件商品的库存数字是错的,而整整一个 790 件商品的分类从三月起就没有向客户展示过。这半年里这些货就躺在仓库中,却无法通过网站卖出去——原因只是客户根本看不到它们。
库存为什么会对不上:同步看不到全部变化
这套同步是增量式的:每隔几分钟向进销存系统询问「某个时间点之后有什么变化」,然后更新这些商品。快、省资源、思路也合理。但它在结构上是盲的。
关键在于,进销存系统对这类查询只返回在售商品,已归档的商品根本不会出现在结果里。也就是说:
- 商品被归档——同步看不到,网站上依旧保持原样;
- 商品从归档中恢复——同样看不到,网站上仍然是隐藏状态;
- 商品被删除——还是看不到,商品页会一直挂在那里。
增量同步只会做一件事:新增和更新有人动过的数据。它无法察觉「消失」。而且它从不报错——差异会安静地累积,只有做一次完整核对才能发现。
该怎么排查
需要的不是「同步是否在运行」这种检查,而是把两份清单完整比对一遍。从进销存系统取出全部商品标识——在售、已归档、套装分别取——再加上库存报表,然后与网站数据库里的数据比对,重点看三件事:归档标记、商品页是否存在、库存数量。
这一步很容易误删。我们第一次跑出来显示有「1687 个幽灵」——看似在进销存系统里已经不存在的商品页。实际上那些是套装:它们属于另一类实体,必须单独查询。如果当时相信这个数字去清理目录,就会误删一千五百件在售商品。
规则很简单:在按核对结果删除任何东西之前,先确认每一组数据来自哪个数据源。差异更常见的原因是比对方式有问题,而不是数据里真有垃圾。
我们做了什么
- 保留快速的增量同步——新品和改动能在几分钟内出现在网站上,靠的就是它。
- 增加每晚一次的完整核对,把整个目录的归档标记与库存数量重新对齐。
- 消失的商品只标记为归档,不做删除——否则历史订单里的链接会失效。
- 在核对流程本身内置了报告:恢复了多少件、隐藏了多少件、修正了多少件的库存。
第一次运行之后,790 件商品就回到了网站上,客户也不会再看到仓库里其实没有的商品。
如何检查你自己的系统
如果你的网店与进销存系统对接,请回答三个问题。
- 此刻进销存系统里有多少在售商品,网站上又展示了多少个商品页?两个数字应该对得上。
- 当一件商品被归档时,网站上会发生什么?找一件商品手动验证一次。
- 上一次完整核对库存是什么时候——不是只核对有变动的商品?
如果三个问题都答不上来,差异几乎肯定已经存在。它不会以网站崩溃的形式表现出来:只是一部分商品卖不出去,另一部分订单却下在了缺货的货品上。
最昂贵的故障不是让网站宕机的那种,而是稳定运行好几年、却悄悄少展示一半商品的那种。
更多复盘
业务流程自动化:先做哪一块,哪一块回本最快企业做自动化,常常从错的一端开始:先花钱做了好看的数据看板,而钱其实一直漏在接单环节。本文给出选择第一个环节的判断标准,以及几乎在任何公司都划算的三个方向。网站统计不工作:一个从未记录到访问的计数器统计工具装了,代码也在,控制台没有报错。可统计后台里一次访问都没有。原因是一行代码——它让浏览器用脚本标签顶替了统计函数。