精华内容
下载资源
问答
  • 企业采购进销存管理系统的设计与实现(,MySQL)(含录像)(论文7000字,程序代码,MySQL数据库)本文采用PHP技术开发了基于php的物资销售管理系统,并且对该系统的技术方案的选择、系统功能的设计和实现等进行了介绍。...

    企业采购进销存管理系统的设计与实现(,MySQL)(含录像)(论文7000字,程序代码,MySQL数据库)

    本文采用PHP技术开发了基于php的物资销售管理系统,并且对该系统的技术方案的选择、系统功能的设计和实现等进行了介绍。在这个系统中,采用的是PHP动态网页设计技术和mysql数据库,主要实现物资类型管理, 物资管理, 物资进货管理,物资销售管理, 财务查询等模块

    关键字:物资;物资销售;PHP;mysql;管理系统

    系统功能概况

    整个系统采用了B/S设计结构,这样使人们可以在有网络的地方随时的进行物资的管理、搜索、共享。这个系统共分4大功能: 基本设置 、入库管理、资销售管理、财务/统计。

    系统具有以下功能:

        由于操作人员的计算机知识普遍较差,要求有良好的人机界面。

        由于该系统的使用对象多,要求有较好的权限管理。

        方便的数据查询,支持多条件查询。

        基础信息管理与查询(包括商品信息、客户信息、供应商信息)。

        通过计算机,能够直接“透视”仓库存储情况。

        完善的商品采购信息、商品销售信息进行管理。

        方便、健全的结账功能。

        图表分析年销售状况。

        商品销售排行统计。

        当外界环境(停电、网络病毒)干扰本系统时,系统可以自动保护原始数据的安全。

        数据计算自动完成,尽量减少人工干预。

        系统退出。

    91d8416d49a3df420d165250839d2d49.png

    1e34b76c7c5bff5d966588929a34c259.png

    4b52fb672abcaf269db49cbacbd09d58.png

    478aedb0e43e35e206499537aeab4034.png

    15b77631eff84d538908dccbc2a46405.png

    目    录

    第一章 引言    1

    1.1 选题背景    1

    1.2 系统功能概况    1

    1.3 系统相关技术与环境简介    1

    1.3.1 PHP    1

    1.3.2 Apache    2

    1.3.3 MySQL数据库    2

    1.3.4  运行环境 Windows XP    2

    1.3.5  WAMP5    3

    1.3.6  Dreamweave8    3

    1.3.7 EditPlus    3

    第二章 需求分析    4

    2.1 需求分析的基本任务    4

    2.2需求分析    4

    2.3系统的性能需求    4

    2.4 数据流程分析    5

    2.4 系统运行环境    7

    第三章 系统总体设计    7

    3.1系统的总体框架    7

    3.2 模块功能    8

    3.2 数据库设计    10

    3.2.1数据库概念结构设计    10

    3.2.2数据库逻辑结构设计    13

    第四章  详细设计    14

    4.1 主页面设计    14

    4.1.1  会员登录功能设计    14

    4.1.2 其他模块设计    15

    第五章 物资销售管理系统运行测试    15

    5.1 运行    15

    5.2 测试    15

    第六章  总 结    17

    参考文献    17

    展开全文
  • 进销存的单据量加上明细数据量相当庞大,如果要实现多帐套同时使用的话,那么所有的数据都放到一套结构里面是非常恐怖的,所以每个帐套必须独享一套结构,同时要考虑到数据量较小的实体可以共享一张 ,比如...

     

    进销存的单据量加上明细数据量相当庞大,如果要实现多帐套同时使用的话,那么所有的数据都放到一套表结构里面是非常恐怖的,所以每个帐套必须独享一套表结构,同时要考虑到数据量较小的实体可以共享一张表 ,比如用户表,组织结构表,仓库信息表等。

          通常的处理方式没注册一个新的帐套,那么系统自动创建一套表结构,那么带来的问题就是如何处理动态表的曾,删,改,查问题呢,而且我还不想去每次都拼sql。

            那么好,先说动态建表,为了不去拼写sql,那么最简单的方式就是使用Hibernate动态建表机制,根据映射文件,以及帐套(表)的序列号,每次动态的建表,如商品表 estore_2_goods,estore_3_goods, 每次只需要传递一个参数即可。

    首先在spring配置文件中配置hibernate的namingStrategy

    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
    <property name="dataSource" ref="dataSource" />  
    <property name="namingStrategy">  
        <bean  class="com.webjxc.core.orm.hibernate.MyNamingStrategy" />  
    </property>  
    <property name="hibernateProperties">  
        <props>  
            <prop key="hibernate.dialect">  
                ${hibernate.dialect}  
            </prop>  
            <prop key="hibernate.show_sql">  
                ${hibernate.show_sql}  
            </prop>  
            <prop key="hibernate.format_sql">  
                ${hibernate.format_sql}  
            </prop>  
            <prop key="hibernate.hbm2ddl.auto">none</prop>  
      
            <prop key="hibernate.query.substitutions">  
                true 1, false 0  
            </prop>  
      
            <prop key="hibernate.cache.use_query_cache">false</prop>  
            <prop key="hibernate.cache.use_second_level_cache">  
                false  
            </prop>  
        </props>  
    </property>

     

    public class MyNamingStrategy extends DefaultNamingStrategy{  
      
        public static final MyNamingStrategy Instance    = new MyNamingStrategy();  
        private static final long serialVersionUID = 1L;  
        private static Logger log = Logger.getLogger(MyNamingStrategy.class);  
        @Override  
        public String classToTableName(String className) {  
            String tag = com.webjxc.common.web.EsThreadVariable.getCurrentTableIndex();  
            if(null == tag){  
                tag = EsThreadVariable.CurrentTableIndex;  
            }  
            StringBuffer sb = new StringBuffer("estore_");  
            sb.append(tag)  
            .append("_");  
            sb.append(super.classToTableName(className));  
            return sb.toString();  
        }  
          
    }  

    EsThreadVariable.CurrentTableIndex 就是我们要传递进去的线程变量,用来表明是哪个帐套。

    public class EsThreadVariable {  
      
        public static final String CurrentTableIndex = "_currentTableIndex_";  
        // 当前表名  
        private static ThreadLocal<String> esCurrentTableIndex= new ThreadLocal<String>();  
        // 当前帐套ID  
        private static ThreadLocal<String> esAccinfoVariable = new ThreadLocal<String>();  
       
        public static String getAccinfo(){  
            return esAccinfoVariable.get();  
        }  
          
        public static void setAccinfo(String accinfo){  
            esAccinfoVariable.set(accinfo);  
        }  
          
        public  static void removeAccinfo(){  
            esAccinfoVariable.remove();  
        }  
          
        public static String getCurrentTableIndex(){  
            return esCurrentTableIndex.get();  
        }  
          
          
        public static void setCurrentTableIndex(String s ){  
            esCurrentTableIndex.set(s);  
        }  
          
        public static void removeCurrentTableIndex(){  
            esCurrentTableIndex.remove();  
        }  
          
        public static String[] convertTableIndexArray(String[] array){  
            String[] returnArray = new String[array.length];  
            for(int i = 0 ; i < array.length ; i++){  
                String str = array[i];  
                returnArray[i] = str;  
                if(str.indexOf(EsThreadVariable.CurrentTableIndex)!= -1)  
                    returnArray[i] = StringUtils.replace(str, EsThreadVariable.CurrentTableIndex, EsThreadVariable.getCurrentTableIndex());  
            }  
            return returnArray;  
        }  
          
        public static String convertTableStr(String str){  
            return StringUtils.replace(str, EsThreadVariable.CurrentTableIndex, EsThreadVariable.getCurrentTableIndex());  
        }  
          
    }  

    同时还要注意,在实体声明的时候不要指定表名:如

    @Entity  
    public class Goods {  
    private String clientid;   // 供应商  
        private String goodstypeid;  // 类别  
          
        private String code; // 编码   
        private String barCode; // 条码  
          
        private String name;  
        private String shortname;  
        private String specs; // 型号、款号  
        private String unit;  // 商品单位  
     } 

     创建表的过程比较简单,要将我们需要动态创建的表在hibernate.cfg.xml文件中进行标示:如

    <?xml version='1.0' encoding='UTF-8'?>  
    <!DOCTYPE hibernate-configuration PUBLIC  
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
      
    <!-- Generated by MyEclipse Hibernate Tools.                   -->  
    <hibernate-configuration>  
      
        <session-factory>  
        <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>  
        <property name="hibernate.format_sql">true</property>  
       
        <mapping class="com.webjxc.estore.entity.needCreate.Csale" />  
        <mapping class="com.webjxc.estore.entity.needCreate.Csaledetail" />  
        <mapping class="com.webjxc.estore.entity.needCreate.Dallot" />  
        <mapping class="com.webjxc.estore.entity.needCreate.Detailbillflow" />  
        <mapping class="com.webjxc.estore.entity.needCreate.Goods" />  
       
        </session-factory>  
      
    </hibernate-configuration>  

     然后在你的Action中调用下面的类 ,完成动态建表。

    public class TableGenerator {  
          
        private static final long serialVersionUID = 1L;  
        private static Logger log = Logger.getLogger(TableGenerator.class);  
        /** 
         * 根据hibernate.cfg.xml 描述建表 
         * 加入了 NamingStrategy 
         * @param connection 
         * @throws SQLException  
         */  
        public void createTable(Connection connection) throws SQLException {  
            log.debug("开始建表....");  
            Configuration conf = new AnnotationConfiguration();  
            MyNamingStrategy strategy = new MyNamingStrategy();  
            conf.setNamingStrategy(strategy);  
            try {  
                SchemaExport dbExport = new SchemaExport(conf.configure(), connection);  
                dbExport.create(false, true);  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                 connection.close();  
            }  
        }  
      
    }  

     

     

     

     

    转载于:https://www.cnblogs.com/ezsoft/archive/2012/06/19/2554196.html

    展开全文
  • 整个系统的数据相互关联,涉及到的数据都通过相应的字段关联在一起,实现数据的互动和完整性,进销存中的商品会根据入库、出库进行动态的改变,保证商品的数量的准确性,系统中的商品、供应商。员工等基础信息可以...
  • 复杂进销存样例

    2017-11-29 08:44:50
    为方便开发参考,实现复杂的交互及子从的操作,后面版本将提供复杂的进销存样例,并集成代码生成器生成复杂的操作主要功能:主从联合显示批量提交,批量导入弹窗选择动态计算行等等...
    为方便开发参考,实现复杂的交互及子从表的操作,后面版本将提供复杂的进销存样例,并集成代码生成器生成复杂的表操作
    主要功能:主从表联合显示
    批量提交,批量导入
    弹窗选择
    动态计算行
    等等...

    展开全文
  • 1.效果 2.报表简介:查询分销商下类别组...表头是根据条件动态变化的。 3.SQL DECLARE@stimedatetime, @etimeDatetime; SET@stime='2015/11/10:00:00' SET@etime='2015/12/423:59:59' -----------...

    1.效果

    2.报表简介:查询分销商下类别组对应的区间范围内数量统计。表头是根据条件动态变化的。

    3.SQL
    DECLARE @stime datetime,
            @etime Datetime;
     
     
    SET @stime='2015/11/1 0:00:00'
    SET @etime='2015/12/4 23:59:59'
     
      --------------------------------------------------------------天平均算法计算库存---------------------------------------------
      --1.每个分销商、每一天 每一分数段、类别 的变化量 #temp-->
    SELECT Sum(num) AS Num,
           agentid AS agentid,
           CateGDGroupID,
           CateGDGroupName,
           GoodAttrValGroup,
           Wrdname,
           MAX(wrid) AS wrid,
           DAY AS DAY,
           Max(addtime) AS AddTime INTO #temp
    FROM
      (SELECT *,
              Dateadd(DAY, Datediff(DAY, 0, Dateadd(dd, 0, addtime)), 0) AS DAY
       FROM
         (SELECT rbarcode AS barcode,
                 orderdetail_r.quantity AS num,
                 fromagentid AS fromagentid,
                 addtime
          FROM order_r
          INNER JOIN orderdetail_r ON orderno = rorderno
          WHERE addtime <= @etime
            AND addtime > @stime
          UNION ALL SELECT fbarcode AS barcode,
                           orderdetail_f.quantity AS num,
                           fagentid AS agentid,
                           addtime AS AddTime
          FROM order_f
          INNER JOIN orderdetail_f ON orderno = forderno
          AND order_f.status in(3,4)
          WHERE AddTime <= @etime
            AND AddTime > @stime
          UNION ALL SELECT fbarcode AS barcode, -orderdetail_f.quantity AS num,
                                                 fromagentid AS agentid,
                                                 addtime
          FROM order_f
          INNER JOIN orderdetail_f ON orderno = forderno
          AND order_f.status >= 2
          WHERE addtime <= @etime
            AND addtime > @stime
          UNION ALL SELECT dbarcode AS barcode,
                           orderdetail_d.quantity AS num,
                           dagentid AS agentid,
                           addtime AS addtime
          FROM order_d
          INNER JOIN orderdetail_d ON orderno = dorderno
          AND order_d.status IN(3,4)
          WHERE AddTime <= @etime
            AND AddTime > @stime
          UNION ALL SELECT dbarcode AS barcode, -orderdetail_d.quantity AS num,
                                                 fromagentid AS agentid,
                                                 addtime
          FROM order_d
          INNER JOIN orderdetail_d ON orderno = dorderno
          AND order_d.status >= 2
          WHERE addtime <= @etime
            AND addtime > @stime
          UNION ALL SELECT tbarcode AS barcode,
                           orderdetail_t.quantity AS num,
                           tagentid AS agentid,
                           addtime AS addtime
          FROM order_t
          INNER JOIN orderdetail_t ON orderno = torderno
          AND order_t.status = 4
          WHERE AddTime <= @etime
            AND AddTime > @stime
          UNION ALL SELECT tbarcode AS barcode, -orderdetail_t.quantity AS num,
                                                 fromagentid AS agentid,
                                                 addtime
          FROM order_t
          INNER JOIN orderdetail_t ON orderno = torderno
          AND order_t.status >= 2
          WHERE addtime <= @etime
            AND addtime > @stime
          UNION ALL SELECT ktbarcode AS barcode, -orderdetail_kt.quantity AS num,
                                                  fromagentid AS agentid,
                                                  addtime
          FROM order_kt
          INNER JOIN orderdetail_kt ON orderno = ktorderno
          AND order_kt.status >= 2
          WHERE addtime <= @etime
            AND addtime > @stime
          UNION ALL SELECT odbarcode AS barcode, -orderdetail_s.odquantity AS num ,
                                                  sagentid AS agentid,
                                                  addtime
          FROM order_s
          INNER JOIN orderdetail_s ON orderno = odorderno
          WHERE addtime <= @etime
            AND addtime > @stime) AS tt
       INNER JOIN
         (SELECT adminuserauthrelid
          FROM adminuserauth
          WHERE adminuserauthreltype = 4
            AND adminuserid =36) AS x ON x.adminuserauthrelid = tt.fromagentid
       INNER JOIN agent ON agent.agentid = tt.fromagentid
       WHERE agent.agentid IN (637,
                               647,
                               654,
                               655,
                               660,
                               669,
                               670,
                               671,
                               680,
                               687)) AS te
    LEFT JOIN good ON good.goodbarcode = te.barcode
    INNER JOIN
      (SELECT CateGDGroupID,
              CateGDCateID,
              CateGDGroupName
       FROM categroupdetail
       WHERE CateGDGroupID=157) AS categroupdetail ON good.GoodCateID=categroupdetail.CateGDCateID
    INNER JOIN WeightRDetail ON Good.GoodGoldWeight>=WRDFrom
    AND Good.GoodGoldWeight <= WRDTo
    INNER JOIN GoodAttrVal ON GoodDecoName=GoodAttrVal.GoodAttrValue
    WHERE WRID = 21
    GROUP BY agentid,CateGDGroupID,DAY,CateGDGroupName,
                                       WRDName,
                                       GoodAttrValGroup
    ORDER BY agentid,DAY,CateGDGroupID,
                         CateGDGroupName
     
     
      --2.生成全集 ##temp_kc_day-->
    SELECT TOP(Datediff(d, Dateadd(dd, -1, @stime), @etime)) IDENTITY(int, 1, 1) AS id INTO #date
    FROM syscolumns
    SELECT agent.agentid AS AgentID,
           agent.agentname,
           agent.agentbigarea,
           WeightRDetail.WRDName,
           CateGroupDetail.CateGDGroupID,
           CateGroupDetail.CGName,
           goodattrvalgroup,
           CateGroupDetail.CGRank,
           CateGroupDetail.CGType,
           CONVERT(DATETIME, Dateadd(d, #date.id, Dateadd(dd, -1, @stime)), 112) AS date,
           Cast(0 AS NUMERIC(12, 2)) AS stock,
           Cast(0 AS NUMERIC(12, 2)) AS stocks INTO #temp_kc_day
    FROM #date
    LEFT JOIN
      (SELECT CateGDGroupID,
              categroup.CGName,
              categroup.CGRank,
              categroup.CGType
       FROM categroupdetail
       INNER JOIN CateGroup ON categroup.CateGroupID=CateGroupDetail.CateGDGroupID
       WHERE CateGDGroupID=157
       GROUP BY CateGDGroupID,
                categroup.CGName,
                categroup.CGRank,
                categroup.CGType) AS categroupdetail ON 1=1
    LEFT JOIN agent ON agent.agentid IN
      (SELECT adminuserauthrelid
       FROM adminuserauth
       JOIN agent ON adminuserauth.adminuserauthrelid = agent.agentid
       WHERE adminuserauthreltype = 4
         AND adminuserid = 36
         AND adminuserauth.adminuserauthrelid IN (637,
                                                  647,
                                                  654,
                                                  655,
                                                  660,
                                                  669,
                                                  670,
                                                  671,
                                                  680,
                                                  687))
    LEFT JOIN WeightRDetail ON 1=1
    AND WRID =21
    LEFT JOIN
      (SELECT goodattrvalgroup
       FROM goodattrval AS x
       WHERE 1=1
         AND goodattrcode='DecoName'
         AND goodattrvalgroup !=''
         AND goodattrvalgroup IS NOT NULL
       GROUP BY goodattrvalgroup) AS x ON 1=1 DECLARE @AddTime_FromT DATETIME;
     
     
     --3.根据历史库存计算期初 ##temp_begin-->
    SET @AddTime_FromT=
      (SELECT Isnull(Max(addtime), '2014/6/1 0:00:00')
       FROM goodshis
       WHERE addtime <= @stime);
     
    SELECT * INTO #temp_begin
    FROM
      (SELECT SUM (num) AS num,
                  t.agentid AS AgentID,
                  CateGDGroupID,
                  CateGDGroupName,
                  WRDName,
                  goodattrvalgroup
       FROM
         (SELECT *
          FROM
            (SELECT od.barcode AS Barcode, od.agentid AS agentid, SUM(num) AS num,
                                                                     Max(addtime) AS addtime
             FROM
               (SELECT barcode,
                       num,
                       agentid,
                       addtime
                FROM goodshis
                WHERE addtime = @AddTime_FromT
                UNION ALL SELECT fbarcode AS barcode,
                                 orderdetail_f.quantity AS num,
                                 fagentid AS agentid,
                                 AddTime
                FROM order_f
                INNER JOIN orderdetail_f ON orderno = forderno
                WHERE ((order_f.status = 3
                        AND addtime <= @AddTime_FromT)
                       OR (order_f.status = 4
                           AND addtime <= @AddTime_FromT
                           AND confitime > @AddTime_FromT))
                UNION ALL SELECT dbarcode AS barcode,
                                 orderdetail_d.quantity AS num,
                                 dagentid AS agentid,
                                 AddTime
                FROM order_d
                INNER JOIN orderdetail_d ON orderno = dorderno
                WHERE ((order_d.status = 3
                        AND addtime <= @AddTime_FromT)
                       OR (order_d.status = 4
                           AND addtime <= @AddTime_FromT
                           AND confitime > @AddTime_FromT))
                UNION ALL SELECT tbarcode AS barcode,
                                 orderdetail_t.quantity AS num,
                                 tagentid AS agentid,
                                 AddTime
                FROM order_t
                INNER JOIN orderdetail_t ON orderno = torderno
                WHERE ((order_t.status = 3
                        AND addtime <= @AddTime_FromT)
                       OR (order_t.status = 4
                           AND addtime <= @AddTime_FromT
                           AND confitime > @AddTime_FromT))
                UNION ALL SELECT rbarcode AS barcode,
                                 orderdetail_r.quantity AS num,
                                 fromagentid AS agentid,
                                 addtime
                FROM order_r
                INNER JOIN orderdetail_r ON orderno = rorderno
                WHERE addtime <= @stime
                  AND addtime >= @stime
                UNION ALL SELECT fbarcode AS barcode,
                                 orderdetail_f.quantity AS num,
                                 fagentid AS agentid,
                                 AddTime AS AddTime
                FROM order_f
                INNER JOIN orderdetail_f ON orderno = forderno
                AND order_f.status IN(3,
                                      4)
                WHERE AddTime <= @stime
                  AND AddTime >= @AddTime_FromT
                UNION ALL SELECT fbarcode AS barcode, -orderdetail_f.quantity AS num,
                                                       fromagentid AS agentid,
                                                       addtime
                FROM order_f
                INNER JOIN orderdetail_f ON orderno = forderno
                AND order_f.status >= 2
                WHERE addtime <= @stime
                  AND addtime >= @AddTime_FromT
                UNION ALL SELECT dbarcode AS barcode,
                                 orderdetail_d.quantity AS num,
                                 dagentid AS agentid,
                                 addtime AS addtime
                FROM order_d
                INNER JOIN orderdetail_d ON orderno = dorderno
                AND order_d.status in(3,4)
                WHERE AddTime <= @stime
                  AND AddTime >= @AddTime_FromT
                UNION ALL SELECT dbarcode AS barcode, -orderdetail_d.quantity AS num,
                                                       fromagentid AS agentid,
                                                       addtime
                FROM order_d
                INNER JOIN orderdetail_d ON orderno = dorderno
                AND order_d. status >= 2
                WHERE addtime <= @stime
                  AND addtime >= @AddTime_FromT
                UNION ALL SELECT tbarcode AS barcode,
                                 orderdetail_t.quantity AS num,
                                 tagentid AS agentid,
                                 addtime AS addtime
                FROM order_t
                INNER JOIN orderdetail_t ON orderno = torderno
                AND order_t.status in(3,4)
                WHERE AddTime <= @stime
                  AND AddTime >= @AddTime_FromT
                UNION ALL SELECT tbarcode AS barcode, -orderdetail_t.quantity AS num,
                                                       fromagentid AS agentid,
                                                       addtime
                FROM order_t
                INNER JOIN orderdetail_t ON orderno = torderno
                AND order_t.status >= 2
                WHERE addtime <= @stime
                  AND addtime >= @AddTime_FromT
                UNION ALL SELECT ktbarcode AS barcode, -orderdetail_kt.quantity AS num,
                                                        fromagentid AS agentid,
                                                        addtime
                FROM order_kt
                INNER JOIN orderdetail_kt ON orderno = ktorderno
                AND order_kt.status >= 2
                WHERE addtime <= @stime
                  AND addtime >= @AddTime_FromT
                UNION ALL SELECT odbarcode AS barcode, -orderdetail_s.odquantity AS num,
                                                        sagentid AS agentid,
                                                        addtime
                FROM order_s
                INNER JOIN orderdetail_s ON orderno = odorderno
                WHERE addtime <= @stime
                  AND addtime >= @AddTime_FromT) AS od
             INNER JOIN
               (SELECT adminuserauthrelid
                FROM adminuserauth
                WHERE adminuserauthreltype = 4
                  AND adminuserid =36) AS x ON x.adminuserauthrelid = od.agentid
             INNER JOIN agent ON agent.agentid = od.agentid
             WHERE agent.agentid IN (637,
                                     647,
                                     654,
                                     655,
                                     660,
                                     669,
                                     670,
                                     671,
                                     680,
                                     687)
             GROUP BY od.agentid,
                      od.barcode) AS gh
          WHERE num != 0) AS t
       INNER JOIN good ON goodbarcode = barcode
       INNER JOIN
         (SELECT CateGDGroupID,
                 CateGDCateID,
                 CateGDGroupName
          FROM categroupdetail
          WHERE CateGDGroupID=157) AS categroupdetail ON good.GoodCateID=categroupdetail.CateGDCateID
       INNER JOIN WeightRDetail ON Good.GoodGoldWeight>=WRDFrom
       AND Good.GoodGoldWeight <= WRDTo
       AND WRID = 21
       INNER JOIN GoodAttrVal ON GoodDecoName=GoodAttrVal.GoodAttrValue
       WHERE 1=1
       GROUP BY t.agentid,
                CateGDGroupID,
                CateGDGroupName,
                WRDName,
                goodattrvalgroup) AS t1
     
     --4.将变动数据更新到全集           
    UPDATE #temp_kc_day
    SET stock =Num
    FROM #temp_kc_day
    INNER JOIN #temp ON #temp_kc_day.agentid = #temp.agentid
    AND #temp_kc_day.date = #temp.DAY
    AND #temp.CateGDGroupID=#temp_kc_day.CateGDGroupID
    AND #temp.WRDName = #temp_kc_day.WRDName
    AND #temp.GoodAttrValGroup = #temp_kc_day.GoodAttrValGroup
     
     --5.根据 库存=变动+起初 计算出每天的库存-->
     DECLARE @i INT
    SET @i=0 WHILE @i <= Datediff(dd, @stime, @etime) BEGIN
    UPDATE #temp_kc_day
    SET stocks = Isnull(x.stock, 0) + #temp_begin.Num
    FROM #temp_kc_day
    LEFT JOIN
      (SELECT SUM(Isnull(stock, 0)) AS stock,
              agentid,
              CateGDGroupID,
              WRDName,
              GoodAttrValGroup
       FROM #temp_kc_day
       WHERE Datediff(dd, @stime, date) <= @i
       GROUP BY agentid,
                CateGDGroupID,
                WRDName,
                GoodAttrValGroup)AS x ON x.agentid = #temp_kc_day.agentid
    AND x.CateGDGroupID=#temp_kc_day.CateGDGroupID
    AND x.WRDName =#temp_kc_day.WRDName
    AND x.GoodAttrValGroup =#temp_kc_day.GoodAttrValGroup
    LEFT JOIN #temp_begin ON #temp_begin.agentid = #temp_kc_day.agentid
    AND #temp_begin.CateGDGroupID=#temp_kc_day.CateGDGroupID
    AND #temp_begin.WRDName=#temp_kc_day.WRDName
    AND #temp_begin.GoodAttrValGroup=#temp_kc_day.GoodAttrValGroup
    WHERE Datediff(dd, @stime, #temp_kc_day.date) = @i
      SET @i=@i + 1 END;
     
    --6.天平均库存数
    SELECT AgentID AS goodagentid,
           CateGDGroupID,
           WRDName,
           goodattrvalgroup,
           cast(CASE count(stocks) WHEN 0 THEN cast(0.00 AS numeric(12,2)) ELSE SUM(stocks) / Count(stocks) END AS NUMERIC(12, 2)) AS goodstock INTO #teamp1
    FROM #temp_kc_day
    GROUP BY AgentID,
             CateGDGroupID,
             WRDName,
             GoodAttrValGroup
    ------------------------------------------------天平均算法计算库存 结束----------------------------------       
     
     
    --7.生成 区域,分销,分数段 全集  
    SELECT agentbigarea,
           agentname,
           x.wrdid,
           x.wrdname,
           x.goodattrvalgroup,
           isnull(goodstock,0) AS quantity INTO #END
    FROM
      (SELECT agentid,
              agentname,
              agentbigarea,
              goodattrvalgroup,
              weightrdetail.*
       FROM agent
       LEFT JOIN WeightRDetail ON 1=1
       AND wrid=21
       LEFT JOIN
         (SELECT goodattrvalgroup
          FROM goodattrval AS x
          WHERE 1=1
            AND goodattrcode='DecoName'
            AND goodattrvalgroup !=''
            AND goodattrvalgroup IS NOT NULL
          GROUP BY goodattrvalgroup) AS x ON 1=1
       WHERE 1=1
         AND agentid IN
           (SELECT AdminUserAuthRelID
            FROM AdminUserAuth
            WHERE AdminUserAuthRelType=4
              AND AdminUserID= 36)
         AND agentid IN (637,
                         647,
                         654,
                         655,
                         660,
                         669,
                         670,
                         671,
                         680,
                         687))AS x
    LEFT JOIN #teamp1 AS y ON x.agentid=y.goodagentid
    AND x.WRDName=y.WRDName
    AND x.goodattrvalgroup=y.goodattrvalgroup
     
    --8.插入区域小计
    INSERT INTO #end(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
    SELECT agentbigarea+' -小计',
                        '',
                        wrdid,
                        wrdname,
                        goodattrvalgroup,
                        sum(quantity)
    FROM #END
    GROUP BY agentbigarea,
             wrdid,
             wrdname,
             goodattrvalgroup
     
    --9.插入总合计         
    INSERT INTO #end(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
    SELECT '总合计',
           '',
           wrdid,
           wrdname,
           goodattrvalgroup,
           sum(quantity)
    FROM #END
    WHERE agentbigarea NOT LIKE '%小计%'
      AND agentbigarea NOT LIKE '%合计%'
    GROUP BY wrdid,
             wrdname,
             goodattrvalgroup
     
    --插入最后列总合计   排序在最后 wrdid写入很大的数字       
    INSERT INTO #end(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
    SELECT agentbigarea,
           agentname,
           99999,
           '总合计',
           '',
           sum(quantity)
    FROM #END
    GROUP BY agentbigarea,
             agentname
     
     
     
    -----------------------------------------------------------按销售--------------------------------------------------------     
     
     
    SELECT wrdid,
           sagentid,
           wrdname ,
           --无匹配到的默认成 其他  
           isnull(goodattrvalgroup,'其他') AS goodattrvalgroup ,
           sum(odquantity) AS quantity INTO #teamp2
    FROM
    --取区间段配置  程序里设置一个选择框默认第一组石重配置,可由操作员自己更改石重方案
      (SELECT *
       FROM WeightRDetail
       WHERE wrid=21)
       AS x 
    LEFT JOIN
     ----如果是库存数据 将整个y替换成库存算法  (如果是周转表  需要同时计算库存和销售)
      (
    --取值 这里是取销售 连接重量范围表时直接取good表数据(正数);石重按单粒计算;数量为0的补1-除数不能为0
    --所有带除法的地方 除数都要做0处理
      SELECT cast(GoodGoldWeight AS numeric(12,3)) AS goodctrange ,
              odquantity,
              order_s.sagentid ,
              gooddeconame
       FROM orderdetail_s
       INNER JOIN order_s ON odorderno=order_s.orderno
       LEFT JOIN good ON good.goodbarcode=odbarcode
       INNER JOIN agent ON agentid = SAgentID
       WHERE order_s.addtime>='2015/11/1 0:00:00'
         AND order_s.addtime <= '2015/12/4 23:59:59'
         AND agentid IN
           (SELECT AdminUserAuthRelID
            FROM AdminUserAuth
            WHERE AdminUserAuthRelType=4
              AND AdminUserID= 36)
         AND SAgentID IN (637,
                          647,
                          654,
                          655,
                          660,
                          669,
                          670,
                          671,
                          680,
                          687)
         AND goodcateid IN
           (SELECT categdcateid
            FROM CateGroupDetail
            WHERE categdgroupid =157)) AS y 
    --区间配置和数据结果关联 on用范围比较
            ON x.wrdfrom <= goodctrange
    AND x.wrdto>=goodctrange
    LEFT JOIN
      (SELECT goodattrvalue,
              goodattrvalgroup
       FROM goodattrval AS x
       WHERE 1=1
         AND goodattrcode='DecoName'
         AND goodattrvalgroup !=''
         AND goodattrvalgroup IS NOT NULL) AS z ON y.gooddeconame=z.goodattrvalue
    --分组条件  分销商代码,范围名,范围id  范围名可以忽略 传id即可
    GROUP BY sagentid,
             wrdname,
             wrdid,
             isnull(goodattrvalgroup,'其他')
    ORDER BY wrdid
     
    --生成结果全集集合;报表展示的界面是完整的 但是数据可能有null的情况 必须取一个完整集合;
    SELECT agentbigarea,
           agentname,
           x.wrdid,
           x.wrdname,
           x.goodattrvalgroup,
           isnull(quantity,0) AS quantity INTO #end1
    FROM
      (SELECT agentid,
              agentname,
              agentbigarea,
              goodattrvalgroup,
              weightrdetail.*
       FROM agent
       LEFT JOIN WeightRDetail ON 1=1
       AND wrid=21
       LEFT JOIN
         (SELECT goodattrvalgroup
          FROM goodattrval AS x
          WHERE 1=1
            AND goodattrcode='DecoName'
            AND goodattrvalgroup !=''
            AND goodattrvalgroup IS NOT NULL
          GROUP BY goodattrvalgroup) AS x ON 1=1
       WHERE 1=1
         AND agentid IN
           (SELECT AdminUserAuthRelID
            FROM AdminUserAuth
            WHERE AdminUserAuthRelType=4
              AND AdminUserID= 36)
         AND agentid IN (637,
                         647,
                         654,
                         655,
                         660,
                         669,
                         670,
                         671,
                         680,
                         687))AS x
    LEFT JOIN #teamp2 AS y ON x.agentid=y.sagentid
    AND x.wrdid=y.wrdid
    AND x.goodattrvalgroup=y.goodattrvalgroup
     
     
    --插入区域小计 
    INSERT INTO #end1(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
    SELECT agentbigarea+' -小计',
                        '',
                        wrdid,
                        wrdname,
                        goodattrvalgroup,
                        sum(quantity)
    FROM #end1
    GROUP BY agentbigarea,
             wrdid,
             wrdname,
             goodattrvalgroup
     
    --插入总合计      
    INSERT INTO #end1(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
    SELECT '总合计',
           '',
           wrdid,
           wrdname,
           goodattrvalgroup,
           sum(quantity)
    FROM #end1
    WHERE agentbigarea NOT LIKE '%小计%'
      AND agentbigarea NOT LIKE '%合计%'
    GROUP BY wrdid,
             wrdname,
             goodattrvalgroup
     
    --插入最后列总合计   排序在最后 wrdid写入很大的数字    
    INSERT INTO #end1(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
    SELECT agentbigarea,
           agentname,
           99999,
           '总合计',
           '',
           sum(quantity)
    FROM #end1
    GROUP BY agentbigarea,
             agentname
     
    --合并销售和库存数据 #tempEnd
    SELECT e.*,
           r.quantity AS quantity1,
           e.quantity/ (CASE r.quantity
                            WHEN 0 THEN 1
                            WHEN NULL THEN 1
                            ELSE r.quantity
                        END) AS quantity2 INTO #tempEnd
    FROM #end1 e
    LEFT JOIN #END r ON e.AgentName=r.AgentName
    AND e.WRDID=r.WRDID
    AND e.GoodAttrValGroup= r.GoodAttrValGroup and e.AgentBigArea=r.AgentBigArea
     
     
    --动态行转列
     DECLARE @subSql nvarchar(MAX)
    SET @subSql = 'select Row_Number() over(order by agentbigarea,agentname) as RowNumber            , 
    AgentBigArea as AgentBigArea,AgentName'
    SELECT @subSql = @subSql + ',SUM(case wrdname+goodattrvalgroup when ''' + wrdname+goodattrvalgroup+ ''' then
     quantity else 0 end) as [' + wrdname+'|'+goodattrvalgroup + '|销售]            ,SUM(case wrdname+goodattrvalgroup
      when ''' + wrdname+goodattrvalgroup+ ''' then quantity1 else 0 end) as [' + wrdname+'|'+goodattrvalgroup + '|库存]           
       ,SUM(case wrdname+goodattrvalgroup when ''' + wrdname+goodattrvalgroup+ ''' then quantity2 else 0 end) as
        [' + wrdname+'|'+goodattrvalgroup + '|周转]'
     
    FROM
      (SELECT TOP 10000 wrdname,
                        goodattrvalgroup
       FROM #tempEnd
       GROUP BY goodattrvalgroup,
                wrdname
       ORDER BY goodattrvalgroup,
                Max(wrdid)) AS a
    SET @subSql = @subSql + ' from #tempEnd group by AgentBigArea,agentname' print @subSql EXEC (@subSql)
     
     
    --select * from #tempEnd
     
    --select * from #end1
     
    --select * from #END
     
    3.技术点:天平均库存算法,动态行转列等

    转载于:https://www.cnblogs.com/tiuyi/p/5044429.html

    展开全文
  • e8进销存财务客户管理软件增强版是一款功能丰富、操作简单的进销存财务客户软件。软件将进销存管理、财务管理和客户管理集合一体化,专业为中小企业设计,功能覆盖了中小型企业财务管理和货品进销存管理的方方面面,...
  • 今天跟大家分享一张Excel仓库进销存系统,控件函数自动查询统计,动态图表一目了然。为了让大家能更稳定的下载模板,我们又开通了全新下载方式(见文章末尾),以便大家可以轻松获得免费模板和收费模板。メ大家请看...
  • 管家婆旗舰版进销存免费版 管家婆旗舰版进销存免费版功能 1) 小数位扩展至6位 小数位扩展至6位,并动态适应数字长度。比如1.000000 显示为1;12.345600显示为12.3456。最多能够支持小数位后6位。 2)窗口标签...
  • 动态表作为整个系统的模型,起个好名字很重要! 帮动态表命名是开始配置的第一步,也是...在这里推荐本次配置进销存demo的建表规则。   一、刚刚用BPMT配置完某进销存的demo,结构如下:      二、建好的...
  • 统计包括:药品库存清单、过期药品清单、药品销售报表、药品采购提示。 该系统是要对药品的基本信息进行添加、修改、删除和查询统计等操作,这样就需要有供应商数据库、库存数据库、客户基础信息数据库、操作员...
  • 一个购进数量,一个销售数量。如何即时动态得到库存数字。sql语句该怎么写?谢谢 select a.shl-b.shl as 库存数量 from (SELECT SUM(shl),spid from ywsys_ywmx where djbh like 'JHD%' and zzrq>='2015-01-01...
  • 毕业论文设计-超市进销存管理系统

    热门讨论 2008-12-17 09:38:52
    管易通进销存管理系统是一款十分人性化的优秀管理软件,为您提供最简捷最明晰的仓库管理、进销存管理解决方案。 广泛适用于: 工厂中的材料采购、领用,产品生产入库发货送货; 批发零售公司的商品采购、销售发货...
  • 慧创超市进销存、门店、连锁POS系统(SQL) V1.69 破解版 ★适用范围:适用于大中小型超市、门店、批发、书店、药店,软件灵活方便,易上手(安装包内附软件使用教学动画),是您最佳的选择。 ★后台功能: 1.拥有...
  • 包含文件在线操作,工作日志,多班次考勤,CRM,ERP进销存,项目管理,EHR,拖拽式生成问卷,日程,笔记,工作计划,行政办公,薪资模块,动态表单,摘要,公告模块,企业论坛,云售后模块,生产模块,系统同步模块...
  • JasperReport的动态报表

    2016-05-02 12:46:24
    背景:由于服装行业进销存动态表头(基于规格的横向扩展表头),需要对应开发动态报表,并且通过报表工具可以直接导出数据,以满足客户需求。 技术选型: 利用Java开源工具JasperReport 技术难度: * * * * * ...
  • 2020年直销业务员工作计划【三篇】 【第1篇】 一、健全销售管理基础 工作重点: 1、认真研究好公司下发商务政策,做好订货、进销存管理; 2、密切跟进厂方及公司市场推广; 3、通过实施品牌营销方案快速打开市场;...
  • 整个系统的数据相互关联,涉及到的数据都通过相应的字段关联在一起,实现数据的互动和完整性,进销存中的商品会根据入库、出库进行动态的改变,保证商品的数量的准确性,提高了进销存管理的效率。
  • SCX商贸进销存管理系统 v2.0源码 2013-6-14 [VS2010]源码描述:一款商贸进销存管理系统,基本功能包括:1.工作台。1.等待处理,审核,审批2.物品询价3.库存警报2.采购管理。1.本地采购2.大宗采购3.采购单列 某...
  • 商务助理个人年终总结20XX x年月加入物业公司团队,至今已有两个多月的时间,在领导和同事的指导和关心下,学习公司产品及流程,了解... 4、分公司商品的进销存管理,按总公司的要求,制作和登记商品的进销存情况...
  • 基础类 - SQL语句

    2011-04-05 17:38:00
    基础类 - SQL语句 <br />转载请标明出处: ... 已知:当前时间 ( 截取 yyyy-mm 目标 1 查询进销存表当中距离当前时间连续 3 个月内进货数量 =0...
  • 任务91: 项目实战:小型商品进销存管理系统_查询采购金额最多的前三名客户(多关联&嵌套子查询) 任务92: 项目实战:小型商品进销存管理系统_对客户按订单数量进行排序操作 任务93: 项目实战:小型商品进销存...
  • 4s店销售经理工作计划范例 一、健全销售管理基础 工作重点: 1、认真研究好公司下发商务政策,做好订货、进销存管理; 2、密切跟进厂方及公司市场推广; 3、通过实施品牌营销方案快速打开市场; 4、通过销售...
  • 4s店客服经理工作计划 【篇一】 一、健全销售管理基础 工作重点: 1、认真研究好公司下发商务政策,做好订货、进销存管理; 2、密切跟进厂方及公司市场推广; 3、通过实施品牌营销方案快速打开市场; 4、通过...
  • 2020汽车销售月度工作计划例文 一、健全销售管理基础 工作重点: 1、认真研究好公司下发商务政策,做好订货、进销存管理; 2、密切跟进厂方及公司市场推广; 3、通过实施品牌营销方案快速打开市场; 4、通过销售...
  • 进销存系统 64 OA系统 69 第八章 需求管理 78 1.什么是需求 78 2. 需求工程在做什么 78 3. ★需求变更 78 4.★需求的跟踪 78 需求跟踪矩阵的作用: 78 需求的特点: 79 需求工程 79 变更控制流程图 82 第九章 ...
  •  ·全能进销存变动、供货商进销存查询、销售回款分析;  ·进销存综合查询、销售流向查询。  GSP管理  ·报表齐全、GSP报表多达百余种;  ·GSP流程自定义、GSP单据到流程自定义、GSP单据编号样式自定义;  ...

空空如也

空空如也

1 2 3 4
收藏数 76
精华内容 30
关键字:

动态进销存表