access数据库怎么设计进销存
用Access做进销存,数据核心就三张表:商品表、库设进货表、计进销售表。销存别急着建查询和窗体,数据先把这三张表的库设关系理清楚,后面能省一半力气。计进
商品表最简单,销存字段就商品ID、数据名称、库设规格、计进单位、销存进价、数据售价。库设商品ID设成自动编号,计进主键。有人喜欢把库存数量也塞进商品表,我劝你别这么干。库存是动态算出来的,进货减销售,实时变。你硬存一个数字在商品表里,每次进出货都得手动改,改漏一次就对不上账。我见过一个小超市的Access库,商品表里有个“当前库存”字段,用了三个月,账实差异到了两千多块。
进货表记录每一笔入库。字段包括进货ID、商品ID、数量、进价、供应商、日期。商品ID是外键,跟商品表关联。这里有个细节:进价别从商品表里直接取,每次进货单独填。同一个商品,不同批次进价可能不一样,你统一用商品表里的进价,成本核算就糊了。销售表结构类似,销售ID、商品ID、数量、售价、客户、日期。售价同理,每笔单独记。
三张表建好,关系视图里把进货表.商品ID和销售表.商品ID都连到商品表.商品ID,勾选参照完整性。这样你没法录入一个不存在的商品ID,数据干净很多。
库存怎么算?建一个联合查询。把商品表左联接到进货表,按商品分组求和数量,得到总进货。再左联接到销售表,按商品分组求和数量,得到总销售。总进货减总销售就是当前库存。Access里写这个查询,用“总计”查询模式,分组字段选商品ID和名称,进货数量用Sum,销售数量用Sum,然后加一个计算字段:Nz(Sum(进货数量),0)-Nz(Sum(销售数量),0)。Nz函数处理空值,不然没进过货的商品库存显示空白,看着难受。
窗体这块,用“分割窗体”做商品管理最顺手。上半部分显示商品列表,下半部分显示选中商品的进货和销售子窗体。子窗体用“数据表”视图,录入快。进货和销售窗体上,商品ID用组合框,行来源选商品表的ID和名称,绑定列选ID。这样录入时看到的是商品名,存进去的是ID,不容易错。
报表别搞太花哨。一个月度进销存汇总表,按商品分组,显示期初库存、本月进货、本月销售、期末库存。期初库存需要参数查询,让用户输入起始日期。Access的报表分组和排序功能够用了,表达式字段写清楚就行。
说个实际踩过的坑。有人用Access做进销存,销售表里直接存商品名称而不是ID。后来商品改名,比如“可乐”改成“可口可乐”,历史销售记录全对不上商品表了。用ID就没这事,名称随便改,关联不断。另外,日期字段用“日期/时间”类型,格式设成“短日期”,别用文本存日期。文本存日期,排序和范围查询都出问题。
最后,Access单机用没问题,多人同时录入会锁表。小团队三四个人,每人操作不同模块,勉强能跑。再多人,趁早换SQL Server做后端,Access只做前端界面。我见过一个批发部,五个人同时用Access录单,高峰期频繁出现“无法保存;当前被另一个用户锁定”的提示,后来迁到SQL Server才消停。