进销存中多计量单位解决方法
一、
我觉得这个问题可以从微软关于货币的字段类型得到一些启发。微软的货币型字段其实和数字的一个区别就是可以按照不同国家的币种进行数值转换。
你看,不管是什么方式,都作为一个属性来看待,但是这个属性值可以不一样,而且可以用一个函数,根据不同的参数进行转化。
1 用一个表保存所有的单位(不管是计价还是计量,还是其他的单位)
2 再用一个表保存不同单位之间的换算关系(如果有必要的话,其实是否可以用一个全局常量基本确定下来?)
3 然后用一个函数去搞定,什么地方需要不一样的数据你就传入不同的参数好了。
这样做的好处是通用性很强,维护性好,扩展性好。
二、
单位太多的解决方案:
建立一个“单位换算表”,其中一个是主计量单位,其它的单位是换算到该单位的换算率,
再建立一个“品种档案”保存“采购主计量单位”,“生产主计量单位”,“BOM主计量单位”,各模块的单据中采用各自的主计量单位进行出入库或者使用的单位,
做帐表统计和查询的时候按照换算关系进行运算。
在用户想做查询的时候,系统可以自动按照是属于哪个部门,然后把单位换算到该部门所
对应的主计量单位后再进行运算,并显示出来。
三、
计量单位:至少支持销售,生产计量,最好采购也支持,主要看你什么行业了;有时同一个计量单位间的换算是不一样的,比如:两种针剂,第一种 1盒 = 10支;地二种 1盒 = 5支;这样计量单位换算关系要把物料编号包括进去;而且换算关系是不能随便改动的,否则帐本对不起来很正常
四、
1、可以在用户输入时弹出一个下拉选框,例如输入一个“加”就把所有“加”开头的都列出来,接着输了“拿大”,就把所有“加拿大”开头的列出来,供用户选择。这样对用户来说也方便快捷。
2、原料编号可以做成字符串,随用户怎么定义,只要保证不重复就行了。但是千万不要把原料编号作为关键字,唯一性并不是关键字的充分条件,还必须具有不变性。比如说,你的系统已经使用一段时间,在库存、工艺等表里都是使用原料编号,突然用户觉得现有的编号体系不好,想改一改,你就会头痛了。就算不是大改,平常的增加删除,要是不注意,都会弄出很多问题。比如说,通常编号总是按顺序的,用户删除一种原料后,再增加新原料时,可能会使用原先被删除的编号,但是如果原先删除该原料编号时仓库里还有这种原料,而你程序疏忽了,没做检查,那你现在就死定了,而且这种错误让你摸不着头绪。所以原料还得有个系统编号,这是一个内部的流水号,对用户不可见的,这个才是关键字
五、肯定可以支持不同的单位呀。而且在单位之间还可以互相转换呢!
每一种物料都一有一个基本单位,其余可能是什么转换单位或辅助单位之类的,每个转换单位或辅助单位都与基本单位有一个转换比率。
但有一点就是你必须注意,与库存、成本等打交道的资料都应该要用基本单位进行计算,否则出错了还不知道错在哪里。
关于单位的问题也是一个比较难以处理的问题,有的用户在开了单之后,还要求对单位进行自由转换,也就是你所说的那样。
不过我在处理这些问题还是没有遇到什么大问题,因为如果你的数据库设计的好的话,这些问题还是比较好处理的。
六、我一点也不觉得你的客户的要求离谱啊。我以前做的系统就是物料编码是20位的,物料名称30位,物料规格30位,和你客户的要求一样(不会他们以前用的是我以前公司的产品吧);而且也支持多单位,计量单位和计价单位可以不同。我们的做法是:在物料表中共有3个单位,这3个单位中有一个是基本单位,另外两个是换算单位,并在换算单位和基本单位之间定义换算率(换算率还包括固定换算率和变动换算率的区分),在库存系统中包括两个单位:基本单位(小单位)和一个换算单位(大单位)。比如说物料A,可在库存系统中定义他的基本单位是‘只’,换算单位是‘盒’,在定义它们的换算率:10只/盒,这样在库存进、出料的时候就可以发X盒Y只,而不需换算成只来做;其他的系统也可支持两个单位,一个作为基本单位(不一定和库存的基本单位一致),另一个是换算单位。例如在采购系统中,对物料A的采购的计价单位是‘盒’,计价的大单位可以是‘箱’,10盒/箱。采购时就可以用N箱M盒来采购,付款依据盒数来付,销售系统的定义的方法也是一样