2017 年 7 月,第一次做进销存。客户是做副食批发的,仓库在城郊,老板办公室里摞着半人高的手写单据,红的白的,一式两联。他要的东西说得很实在:别让我月底再拿计算器按一遍。
3 张表是怎么定的
第一版数据库确实只有 3 张表。
goods 存商品:id、名称、规格、单位、进价、售价,6 个字段。
orders 存单据:id、类型(进货 1 出货 2)、对方单位(文本)、日期、经手人、备注,6 个。
order_items 存明细:id、order_id、goods_id、数量、单价,5 个。
供应商没单独建表,直接写进出货单的文本字段。仓位没建,批次没建,成本算法用最简单的移动加权,每次进货重算一次平均价。这些现在看都该有,但当时老板最怕的是「系统比手工还麻烦」,多一张表就多一个要维护的地方。
录入界面比数据库难
真正花时间的是那个录单页。仓库那边只有一台旧电脑,键盘上 F1 到 F12 的标签磨没了,操作员是位大姐,用不惯鼠标。我们把录入做成了全键盘:回车跳下一格,商品名敲拼音首字母出下拉,数量输完直接回车保存并开新单。jQuery 绑了 keydown,光这个就调了两天。
有一天下午我在仓库站着看她录了 40 多张单,发现她每次都要抬头看墙上的价目表,再低头抄单价。第二天我们在下拉里带了售价自动填充,那面墙后来就没再看了。
第一版上线后
跑了一个月,数据 2000 多行。老板每天傍晚打印一张当日汇总,A4 一页,出货金额、进货金额、赊欠合计三个数。月底对账还是要做,但不用再从纸单里翻。
第五个月加了第 4 张表:suppliers。因为同一个供应商被写成了「张记」「张记副食」「张记批发」三种,对账时凑不到一起。加表那天我们把历史单据里的对方单位跑了一遍去重,人工核了 60 多条才合并完。
一点后话
后来这套东西加过门店、加过盘点、加过 Excel 导出,表慢慢多到十几张。但每次改,我们都会回到那 3 张表看一眼:单据和明细分没分开。分开了,后面怎么长都还理得清。
那摞手写单没扔,老板说留着,万一系统哪天打不开。

