1)入库、出库是流水帐,每发生一次入库、出库,相应的表就增加一条记录;
2)你还需要一个库存表,每发生一次入库,增加一条记录;每发生一次出库,就要对一条或几条或记录进行修改删除。举个例子:
比如你有3批青霉素V钾入库,分别是100件,80件,110件,你的库存表就增加3条记录,当需要出库80件时,按先入先出原则,你要在第一批中出库80件,此时修改第一条记录为20,若出库150件就要删除第一条记录,并修改第二条记录为30。实现的方法是用SQL语句ORDER BY,后面的参数是入库时间的字段名。然后依次用每条记录的库存数减需要出库的量直到结果大于或等于零,再修改数据。比如出260件,用QUERY控件的指针访问第一条记录用100减260,得-160,第一条的库存数就为-160,在用第二条的80来减160,得-80,第二条的库存数就为80,这样下去到最后得到30,更新数据库。然后用一个储存过程删除所有库存数不大于0的记录。
入库、出库表则记录每次发生的数据。
查询嘛,不知道你的程序有什么具体要求。你说清楚点。

解决方案 »

  1.   

    谢谢fermium(列御寇) 大哥,查询只要查出总库存、售价等简单的值就可以了,我做的程序主要注意的是退货,还有总库存即时更改。
      

  2.   

    总库存肯定要分产品的,你可以用SQL语句GROUP BY比如:
    select product_ID,sum(product_quantity) from Store_table
    group by product_ID
    记住每种产品的不同型号要各自有ID(比如青霉素V钾片剂有250mg和500mg的两重,应该有不同的ID)。另外ID的编码规则要便于理解,比如要查询所有的比如青霉素V钾片剂,不管剂量,应该可以用ID查出来,举例如下:
    编码AAAABBCCCC,其中AAAA代表成分,BB代表剂型CCCC代表规格(药品我不太懂,只是为说明问题哈);退货的情况复杂一些,你要区分退货的情况。如质量问题退货,商业原因退货(可能还有其他),退货的处理方式是不同的,不知道可以降等使用,质量问题退货还可以再入库吗(人命关天哦)?对于可以入库的情况,有两种处理方式:
    1)用同样的批号再入库;
    2)用同样的批号再出库,出库量是负值,这样你的查询可以筛选出出库量是负值的记录(从出库表中)然后可以统计退货情况,注意在库存表中批号应该是唯一的,你要把批号相同的记录合并,i.e.你原来库存中同批号的产品如果还有剩余,应该加在一起。这样对于库存表来讲就象没出库一样。退货的情况在出库表上反映。而你只需要在出库表的用户界面上加一个选择出库,退货的界面选择就可以了,退货时自动加个负号在数量前。其他的功能都没什么变化。不过这样出库时对库存表也有INSERT操作了。
      

  3.   

    退货的话你同样在出货库加一条记录,不过出库的数量为负数一般就可以了
    对于库存表的操作则需要判断,如果这个批号的药品在库存表中存在,则只要UPDATE则可以了,否则需要进行INSERT操作,和入库的操作一样
    此外,药品批发中退回来的货一般不是因为质量原因退货,退回来的货还可以销售
    如果因为质量原因的退货一般要做报损处理,先进行退货手续,然后对这批货进行短损处理
    对于药品的ID,一般可以在药品的品种库中设置一个字段作为药品的缩写,比如青霉素的缩写就是QMS,这样方便查询,如上面所说,相同品名的药品不但规格不同要有不同的ID,而且产地不同也要用不同的ID,建议直接用编号解决,不同的药品给不同的编号,查询时直接使用药名缩写来查询。
    至于对出库表的操作,再出库之前先要确认库存是否还有这么多药品,然后再进行操作
      

  4.   

    我这里有完整的SQL SERVER7的数据库,你要不要
      

  5.   

    SQL一定要自己会啊,不然谁在这里能教会你?不会就找本书抱佛脚吧。