日期:2014-05-17  浏览次数:20413 次

进销存流程的几个问题
程序是B/S结构,数据库Access表结构大体如下:
入库主表:JH(入库单据号、仓库名称、供应商、入库日期、备注、更新时间、用户ID)
入库明细表:JHMX(入库单据号、产品编号、数据、价格、规格......)
退货主表:JK(退货单号、退货日期、备注、更新时间、用户ID)
退货明细表:JKMX(退货单号、产品编号、退货数量、退货价格)
库存表:CK(仓库名称、产品编号、库存数量、库存成本、用户ID)
字典表:DIC(名称、用户ID)注:用来存放仓库名称
供应商表:GYS(名称、联系人、联系电话、用户ID)
进销存临时表:JXC_tmp(单号、产品编号、退货数量、退货价格、销售数量、销售价格...用户ID)
说明:此系统是一个多用户的进销存系统,每个用户都是在以上表中进行进销存的数据操作,根据“用户ID“的唯一来操作数据。单号格式为:前缀+201211230001,操作不一样且前缀就不同。

大体业务流程:
      先设置好库存表、字典表、供应商表等的数据,然后进行进销存操作。
      入库流程:在页面上填好入库单头信息,然后通过“新增”按钮弹出需要填写的货品信息窗口=》保存=》更新入库明细表。最后通过“保存单据”按钮来保存整个入库单据,同时把入库明细信息插入到库存表。
      退货流程:填好退货单单头,然后通过“选择产品”按钮选择产品=》插入到退货明细表。最后保存整个退货主表,同时从库存表中删除掉已经退货的产品记录。
说明:入库和退货...等操作页面上均有“修改单据”的功能。数据明细表格中有“修改”、“删除”的功能。

现在新增、修改入库单我都搞定了。但做到退货这一流程时,就出现了问题。我是这样做的:
1、新建退货单:先将添加的明细数据保存到jxc_tmp表,然后保存整个单据时将临时表的数据插入到退货明细表,并保存单头信息到退货主表,最后删除临时表里相关的数据。
2、修改退货单(要求可以修改单头和数据明细):先把对应单号的退货明细表数据插入到临时表(页面上读取的只是通过临时表关联进货明细表查询到的数据)=》显示临时表数据到页面=》删除临时表相关数据。但这样做问题就来了:
问题1:如果我要修改退货单的明细数据该如何操作?因为此时临时表的相关数据已经被删除掉了。
我想过另外一种办法就是:直接读取退货明细表数据到页面上,但是修改或删除明细数据时,无论单据是否有保存,退货主表和仓库库存表都要在操作时进行更新,这样就会给数据准确性带来很大的风险。
所以我想问如何用临时表来实现,我看其它进销存软件的数据库大多都有这产一个临时表,就是不知道其业务逻辑是怎样实现在。而且目前做的只是一个退货操作,如果后面的销售、销售退货、调拔等这样去操作临时表会方便更多。请指教。

再另外问两个问题:
问题2:此系统是一个多用户的系统,在设计数据库时,我把“单据号”和“用户ID”两个字段设成联合主键(有重复)。不知道这样是否合理?

问题3:如果我更新或删除字典表里的“仓库名称”数据时,其它表的关联字段是否需要更新,如果需要,请问是通过程序来更新还是数据库里设置(级联更新)?

在线等,谢谢大家了。
------最佳解决方案--------------------
问题2:此系统是一个多用户的系统,在设计数据库时,我把“单据号”和“用户ID”两个字段设成联合主键(有重复)。不知道这样是否合理?

建议单据号就自己是主键(单据一般是不允许重复的),用户id不要与用户的单据混合在一起


看了一下你设计的数据库,相当的不靠谱,比如这个

库存表:CK(仓库名称、产品编号、库存数量、库存成本、用户ID)
字典表:DIC(名称、用户ID)注:用来存放仓库名称

字典表中应该是(仓库id ,仓库名称、用户ID)仓库id为主键
库存表 ck(仓库id,产品编号,库存数量,库存成本,用户id)

每一个表必须要有自己的主键,熟练使用join来对数据库进行操作
你这样做只会让后期变的很麻烦


------其他解决方案--------------------
实际的业务相差太远,还有很多你没考虑到,
除上面说的外,出为出库主表、出库明细表都没有,如何算库存,
还有货物批次,退货,打折等
------其他解决方案--------------------
先说这个问题:
问题3:如果我更新或删除字典表里的“仓库名称”数据时,其它表的关联字段是否需要更新,如果需要,请问是通过程序来更新还是数据库里设置(级联更新)?

你其他的表中存储的不是仓库名称的id么?你修改了字典中的仓库名称,有什么影响呢!另外数据库中的数据部要进行物理上的删除,可以设置删除变量,不给用户显示,否则不一定在什么地方就会报错!
------其他解决方案--------------------
首先谢谢大家帮忙。

引用:
先说这个问题:
问题3:如果我更新或删除字典表里的“仓库名称”数据时,其它表的关联字段是否需要更新,如果需要,请问是通过程序来更新还是数据库里设置(级联更新)?

你其他的表中存储的不是仓库名称的id么?你修改了字典中的仓库名称,有什么影响呢!另外数据库中的数据部要进行物理上的删除,可以设置删除变量,不给用户显示,否则不一定在什么地方就会报错!

其它表存储的不是仓库名称的ID,直接存的仓库名称,因为考虑到有很多地方要直接显示出仓库名称,所以不想每次都要去连接字典表来查询,这样显示太复杂,而且如果存的是名称ID,那么当你删除了字典表中的一条仓库名称记录时,其它表通过ID是查不到对应名称的(不知你怎么解决这个问题?设置一个“是否删除”的字段?)。另外你说的“另外数据库中的数据部要进行物理上的删除,可以设置删除变量,不给用户显示,否则不一定在什么地方就会报错!”这个不是很理解,能否说清楚一点。

引用:
问题2:此系统是一个多用户的系统,在设计数据库时,我把“单据号”和“用户ID”两个字段设成联合主键(有重复)。不知道这样是否合理?

建议单据号就自己是主键(单据一般是不允许重复的),用户id不要与用户的单据混合在一起...

如果设单据号为主键(不允许重复),那怎么判断这个单据是哪个用户的呢,而且还会出现多个用户同时登录操作时,单据号就肯定会重复的。不知道这个怎么解决?或者是否有其它好的方法?

引用:
实际的业务相差太远,还有很多你没考虑到,
除上面说的外,出为出库主表、出库明细表都没有,如何算库存,
还有货物批次,退货,打折等

退货明细表就是你说的出库明细表的。上面我只是简单说明了一下,肯定不可能在这里把所有业务都写上去呀。现在就是问题1这个业务操作流程不知道怎样实现最合理。还请指教。
------其他解决方案--------------------
1、新建退货单:先将添加的明细数据保存到jxc_tmp表,然后保存整个单据时将临时表的数据插入到退货明细表,并保存单头信息到退货主表,最后删除临时表里相关的数据。
兄弟!你是做那个行业的进销存,有需要可以和我QQ联系!
------其他解决方案--------------------