[非技术]工作记录_3

        今天继续聊下报表,还是以一个普通的进销存报表为例。

         情景:

         1、 销售一台手机则往销售记录表插入一条记录,状态为U。库存记录表该记录移至库存历史表。

         2、用户退机则在库存记录表里面新增一笔记录,状态为退机,同时把以前的那条销售记录置为E(失效),  同时把库存历史表该记录删除。

         3、如果门店把手机退给供货商,则把库存记录表中该记录状态修改为退机在途,同时在出入库表中新增一笔出库记录,状态为出库完成。

         4、供货商收到退的手机,则把库存记录表的归属组织改为供货商,状态改为供货商入库,同时在出入库表中新增一笔入库记录,状态为入库完成。

 

       如果按上面的情景写一张门店进销存报表,怎么写呢?

       如果你写成这样:

       门店名称      开始库存    销售量    退机量    库存结余

       测试门店         5                  2           1             4

 

       一开始我也是这么写的,但是你没有考虑下面的情况

      1、我怎么知道是什么时候统计的?所以得加上统计时间列。

      2、我想知道手机如三星 G100今天的进销存情况怎么办,统计精度得具体到手机的机型

      3、我怎么区分用户退机和退给供货商,退机量得分为用户退和返厂量。

      4、退机已出库,为什么看不到退机数? 在供货商没入库之前,该库存一直属于门店,所以为了直观的表示今天我退了3台手机给供货商,但供货商没入库,得加上退机在途。

     

       综合上述,报表的这样:

     统计时间      门店名称  机型名称  开始库存  销售量  用户退   返厂量  退机在途   库存结余

     2014-07-18    XX           XX              5            2           1            0         1                4

 

      你以为这样就完了。还有什么情况?

      这里要重点分析下销售和退机,销售量不就是

     

select count(*) from 销售记录表  where 状态='U' and record_date=统计时间

   退机量不就是:

   

select  count(*) from 库存记录表 where  状态=用户退 and 记录时间=统计时间

    下面我分以下情况:

    1、当天卖了台三星G100,且用户当天没有退,也就是无退机记录,销售量=

   

select count(*) from 销售记录表  where 状态='U' and record_date=统计时间

   2、当天用户把昨天买的三星G100退了,没有在买其他手机,则用户退=。

  

select  count(*) from 库存记录表 where  状态=用户退 and 记录时间=统计时间

   3、当天上午用户买了台三星G99,下午用户又把它退了,换了台三星G99,则销售量=

  

select count(*) from 销售记录表  where 状态='U' and record_date=统计时间

 

   用户退=

  

select  count(*) from 库存记录表 where  状态=用户退 and 记录时间=统计时间

  这样算还是有问题,如开始库存为2,上午卖了一台,销售为1,下午用户换了台手机,则用户退=1,销量=1,库存结余=2-1+1=2,实际库存为1,所以的减掉换机数

   

select count(*) from 销售记录表 a,库存记录表 b where a.状态=E and b.状态=用户退 and exists(select 1 from 销售记录表 b where b.状态='U' and b.销售时间>=a.销售时间 and b.销售时间<统计时间+1 and b.机型=a.机型)
and a.销售时间=统计时间

    这里的换机数视为销售量

 

     4、当天上午用户买了台三星G100,下午又退掉了,没买其他手机。则时候销售量=0,退机数=1,库存=开始库存2+退机数=3,凭空多了一台手机,也是不对的。

      还得统计当天买了又退了且没有再买的数量视为销售量

     

select count(*) from 销售记录表 a,库存记录表 b where a.状态=E and b.状态=用户退 and a.销售时间=统计时间 and not exists( select 1 from 销售记录表 t where t.机型=a.机型 and t.销售时间=统计时间  and t.客户姓名=a.客户姓名)

 

      综合上面的4种情况,写出来的才是正确的。我也只考虑了上面4中情况,欢迎提出更好的方法。

 

      -------------------------------------7.19修改----------------------------------

         第三和第四种情况可以合并,只需要统计卖了又退了的数量,不用管是否还有后继操作,如再销售。

 

      最终的报表可能是这样子的

      统计时间       门店名称  机型名称  开始库存  销售量  用户退   返厂量  退机在途   库存结余

       2014-07-18     XX         三星G1     2               1           0           0            0               1(情况1)

       2014-07-18     XX         三星G2     2               0           1           0            0               3(情况2)

       2014-07-18      XX        三星G3     2               2           1           0            0               1(情况3)

       2014-07-18      XX        三星G4     2               1           1           0            0               2(情况4)

     

        上面的报表只是写了一部分,还得考虑退给供货商的数量,1,当天退供货商当天入库 2,当天退供货商当天没有入库。

         啰啰嗦嗦写了这么多,不写了,Iteye的文本编辑器JS代码没写好,多写了几行就很卡,卡的编辑器变形了,按钮都不见了。

            全文完

       

  

     

     

  

   

  

    

     

   

你可能感兴趣的:(非技术)