// 由 指定ID 得到 成品库房表中的值 。
        public 成品库房表  getInfoByID(string id)
        {
            成品库房表 mod = new 成品库房表();

            string sql = @"SELECT  金额 je,铁业配套 ty,自动化配套 zdh,设计费 sj,运输费 ys,安装费 az,
			其它 qt, 销售结余 xsjy, 国际结余 gjjy , rtrim(工作令号) , 日期 FROM 成品库房表 where id='{0}'"            ;

            sql = string.Format(sql, id);


            SqlDataReader dr = SqlHelper.ExecuteDataReader(sql);

            if (dr.HasRows)
            {
                dr.Read();
                {
                    mod.id   = id;
                    mod.金额   = decimal.Parse(dr.GetValue(0).ToString());
                    mod.ty   = decimal.Parse(dr.GetValue(1).ToString());
                    mod.zdh  = decimal.Parse(dr.GetValue(2).ToString());
                    mod.sj   = decimal.Parse(dr.GetValue(3).ToString());
                    mod.ys   = decimal.Parse(dr.GetValue(4).ToString());
                    mod.az   = decimal.Parse(dr.GetValue(5).ToString());
                    mod.qt   = decimal.Parse(dr.GetValue(6).ToString());
                    mod.xsjy = decimal.Parse(dr.GetValue(7).ToString());
                    mod.gjjy = decimal.Parse(dr.GetValue(8).ToString());
                    mod.工作令号 = dr.GetString(9);
                    mod.日期   = dr.GetDateTime(10);
                }
            }

            dr.Close();
            return(mod);
        }
        public void update成品库房表_转出(成品库房表 成品库房)
        {
            //string sql = @"update 成品库房表 set 工作令号=@p1, 日期=@p2, 金额=@p3 where id='{0}'";

            //sql = string.Format(sql, 成品库房.id);

            //SqlParameter[] parms = new SqlParameter[]
            //{
            //    new SqlParameter ("p1",成品库房.工作令号),
            //    new SqlParameter("p2", 成品库房.日期),
            //    new SqlParameter("p3", 成品库房.金额),
            //    //new SqlParameter("p4", 成品库房.ty),
            //    //new SqlParameter("p5", 成品库房.zdh),
            //    //new SqlParameter("p6", 成品库房.sj),
            //    //new SqlParameter ("p7", 成品库房.ys),
            //    //new SqlParameter ("p8", 成品库房.az ),
            //    //new SqlParameter ("p9" , 成品库房.qt),
            //    //new SqlParameter ("p10" , 成品库房.xsjy),
            //    //new SqlParameter ("p11" , 成品库房.gjjy)


            //};
            //SqlHelper.ExecuteNonQuery(sql,parms);

            del成品库房表_转出(成品库房.工作令号, 成品库房.日期);

            insert成品库房表_转出(成品库房);
        }
        //



        // 将输入框中的信息放入 成品库房表类 中
        private void get_txt(成品库房表 mod)
        {
            mod.金额   = decimal.Parse(txt_je.get_value());
            mod.ty   = decimal.Parse(txt_ty.get_value());
            mod.zdh  = decimal.Parse(txt_zdh.get_value());
            mod.sj   = decimal.Parse(txt_sj.get_value());
            mod.ys   = decimal.Parse(txt_ys.get_value());
            mod.az   = decimal.Parse(txt_az.get_value());
            mod.qt   = decimal.Parse(txt_qt.get_value());
            mod.xsjy = decimal.Parse(txt_xsjy.get_value());
            mod.gjjy = decimal.Parse(txt_gjjy.get_value());
        }
 private void set_txt_out(成品库房表 mod)
 {
     txt_je.set_value((mod.金额 * (-1)).ToString());
     txt_ty.set_value((mod.ty * (-1)).ToString());
     txt_zdh.set_value((mod.zdh * (-1)).ToString());
     txt_sj.set_value((mod.sj * (-1)).ToString());
     txt_ys.set_value((mod.ys * (-1)).ToString());
     txt_az.set_value((mod.az * (-1)).ToString());
     txt_qt.set_value((mod.qt * (-1)).ToString());
     txt_xsjy.set_value((mod.xsjy * (-1)).ToString());
     txt_gjjy.set_value((mod.gjjy * (-1)).ToString());
 }
 private void set_txt(成品库房表 mod)
 {
     txt_je.set_value(mod.金额.ToString());
     txt_ty.set_value(mod.ty.ToString());
     txt_zdh.set_value(mod.zdh.ToString());
     txt_sj.set_value(mod.sj.ToString());
     txt_ys.set_value(mod.ys.ToString());
     txt_az.set_value(mod.az.ToString());
     txt_qt.set_value(mod.qt.ToString());
     txt_xsjy.set_value(mod.xsjy.ToString());
     txt_gjjy.set_value(mod.gjjy.ToString());
 }
        // 得到指定工号可以转出的所有值
        public 成品库房表  getCostByWorkno(string workno)
        {
            成品库房表 mod = new 成品库房表();

            //         string sql = @"SELECT  SUM(金额) je,sum(铁业配套) ty,sum(自动化配套) zdh,sum(设计费) sj,sum(运输费) ys,sum(安装费) az,
            //sum(其它) qt, sum(销售结余) xsjy, sum(国际结余) gjjy FROM 成品库房表 where 工作令号='{0}'";


            string sql = @"select 
                SUM( case 材质 when '' then  je else 0 end) 分厂成本,
                SUM( case 材质 when 'I' then  je else 0 end) 铁业配套件,
                SUM( case 材质 when 'K' then  je else 0 end) 自动化配套件,
                SUM( case 材质 when '1' then  je else 0 end) 设计费,
                SUM( case 材质 when '2' then  je else 0 end) 运输费,
                SUM( case 材质 when 'N' then  je else 0 end) 安装费,
                SUM( case 材质 when 'L' then  je else 0 end) 销售其它,
                SUM( case 材质 when 'O' then  je else 0 end) 销售结余,
                SUM( case 材质 when 'U' then  je else 0 end) 国际结余 
                from (
                select id, 工作令号, 材质 , 金额 je   from (                      
                select t1.id, 工作令号 , '' 材质, 金额 from 成品库房表 t1 
                union
                select t3.id, 工作令号,     材质, 金额 from 原始凭证 t3  where 材质 in (select 材质类别 from 材质类别表 where dept ='销售')
                ) t3 ) t4 where 工作令号='{0}'";

            sql = string.Format(sql, workno);


            SqlDataReader dr = SqlHelper.ExecuteDataReader(sql);

            if (dr.HasRows)
            {
                dr.Read();
                {
                    mod.工作令号 = workno;
                    mod.金额   = decimal.Parse(dr.GetValue(0).ToString());
                    mod.ty   = decimal.Parse(dr.GetValue(1).ToString());
                    mod.zdh  = decimal.Parse(dr.GetValue(2).ToString());
                    mod.sj   = decimal.Parse(dr.GetValue(3).ToString());
                    mod.ys   = decimal.Parse(dr.GetValue(4).ToString());
                    mod.az   = decimal.Parse(dr.GetValue(5).ToString());
                    mod.qt   = decimal.Parse(dr.GetValue(6).ToString());
                    mod.xsjy = decimal.Parse(dr.GetValue(7).ToString());
                    mod.gjjy = decimal.Parse(dr.GetValue(8).ToString());
                }
            }

            dr.Close();
            return(mod);
        }
        private void btn_edit_Click(object sender, EventArgs e)
        {
            int      index;
            DateTime tmpdate;
            string   workno;
            string   tempstr;

            index = grd.get_selectrow_index();
            if (index == -1)
            {
                MessageBox.Show("请选择一条记录 !");
                return;
            }

            tempstr = grd.get_value(index, 1).ToString();
            if (tempstr.IndexOf("转出") < 0)
            {
                MessageBox.Show(" 只能对‘转出项’ 进行修改 ! ");
                return;
            }

            btn_out.Enabled    = false;
            btn_edit.Enabled   = false;
            chk_type.Enabled   = false;
            btn_search.Enabled = false;
            btn_del.Enabled    = false;

            addflag           = false;
            groupBox1.Enabled = true;

            workno  = grd.get_value(index, 0).ToString().Trim();
            tmpdate = new DateTime(int.Parse(tempstr.Substring(0, 4)), int.Parse(tempstr.Substring(5, 2)), 15);

            成品库房DAL dal = new 成品库房DAL();

            成品库房 = dal.getInfoByWorkno(workno, tmpdate);
            set_txt(成品库房);

            //workno = grd.get_value(index, 1).ToString();
            //txt_workno1.set_value(workno);

            //myid = Guid.Parse(grd.get_value(index, 0).ToString());

            //txt_je.set_value(grd.get_value(index, 3).ToString());
        }
        // 得到指定工号, 日期的转出信息
        public 成品库房表 getInfoByWorkno(string workno, DateTime mydate)
        {
            成品库房表 mod = new 成品库房表();

            string sql = @"select 
SUM( case 材质 when '' then  je else 0 end) 分厂成本,
SUM( case 材质 when 'I' then  je else 0 end) 铁业配套件,
SUM( case 材质 when 'K' then  je else 0 end) 自动化配套件,
SUM( case 材质 when '1' then  je else 0 end) 设计费,
SUM( case 材质 when '2' then  je else 0 end) 运输费,
SUM( case 材质 when 'N' then  je else 0 end) 安装费,
SUM( case 材质 when 'L' then  je else 0 end) 销售其它,
SUM( case 材质 when 'O' then  je else 0 end) 销售结余,
SUM( case 材质 when 'U' then  je else 0 end) 国际结余 
from (
select id, 工作令号, 材质 , 金额 je   from (                      
select t1.id, 工作令号 , '' 材质, 金额 from 成品库房表 t1 
where 工作令号='{0}' and year(日期)={1} and month(日期)={2} and id in (select id from 成品库房转出表)
union
select t3.id, 工作令号,     材质, 金额 from 原始凭证 t3  where 工作令号='{0}' and 材质 in (select 材质类别 from 材质类别表 
where dept ='销售') and year(日期)={1} and month(日期)={2} and id in (select id from 原始凭证转出表)) t3 ) t4 group by 工作令号";

            sql = string.Format(sql, workno, mydate.Year, mydate.Month);
            SqlDataReader dr = SqlHelper.ExecuteDataReader(sql);

            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    mod.金额   = decimal.Parse(dr.GetValue(0).ToString());
                    mod.工作令号 = workno;
                    mod.日期   = mydate;
                    mod.ty   = decimal.Parse(dr.GetValue(1).ToString());
                    mod.zdh  = decimal.Parse(dr.GetValue(2).ToString());
                    mod.sj   = decimal.Parse(dr.GetValue(3).ToString());
                    mod.ys   = decimal.Parse(dr.GetValue(4).ToString());
                    mod.az   = decimal.Parse(dr.GetValue(5).ToString());
                    mod.qt   = decimal.Parse(dr.GetValue(6).ToString());
                    mod.xsjy = decimal.Parse(dr.GetValue(7).ToString());
                    mod.gjjy = decimal.Parse(dr.GetValue(8).ToString());
                }
            }

            return(mod);
        }
        public void insert成品库房表(成品库房表 成品库房)
        {
            string sql = @"insert into 成品库房表(id, 工作令号, 日期, 金额 ) values( @p0,@p1,@p2,@p3)";

            SqlParameter[] para = new SqlParameter[]
            {
                new SqlParameter("p0", 成品库房.id),
                new SqlParameter("p1", 成品库房.工作令号),
                new SqlParameter("p2", 成品库房.日期),
                new SqlParameter("p3", 成品库房.金额),
                //new SqlParameter("p4", 成品库房.ty),
                //new SqlParameter("p5", 成品库房.zdh),
                //new SqlParameter("p6", 成品库房.sj),
                //new SqlParameter ("p7", 成品库房.ys),
                //new SqlParameter ("p8", 成品库房.az )
            };

            SqlHelper.ExecuteNonQuery(sql, para);
        }
        private void btn_out_Click(object sender, EventArgs e)
        {
            int index;
            //decimal cost;
            string workno;


            index = grd.get_selectrow_index();
            if (index == -1)
            {
                MessageBox.Show("请选择一条记录 !");
                return;
            }

            btn_out.Enabled    = false;
            btn_edit.Enabled   = false;
            chk_type.Enabled   = false;
            btn_search.Enabled = false;
            btn_del.Enabled    = false;

            addflag           = true;
            groupBox1.Enabled = true;

            workno = grd.get_value(index, 0).ToString();
            txt_workno1.set_value(workno);


            //cost = dal.getCostbyWorkno(workno)*(-1);
            //txt_je.set_value( cost.ToString());
            成品库房DAL dal = new 成品库房DAL();

            成品库房    = dal.getCostByWorkno(workno);
            成品库房.日期 = mydate.Value;

            set_txt_out(成品库房);
        }
        // 批量转出
        private void btn_export_Click(object sender, EventArgs e)
        {
            int     rowcount = mygrid.get_row_number();
            decimal mycost;
            成品库房DAL dal = new 成品库房DAL();
            成品库房表   mod = new 成品库房表();

            //foreach ( DataGridViewRow  myrow in mygri)
            for (int i = 0; i < rowcount; i++)
            {
                if (bool.Parse(mygrid.get_value(i, 0).ToString()))
                {
                    mod    = dal.getCostByWorkno(mygrid.get_value(i, 1).ToString());
                    mod.id = Guid.NewGuid().ToString();
                    mod.日期 = mydate.Value;


                    mod.金额   *= (-1);
                    mod.ty   *= (-1);
                    mod.zdh  *= (-1);
                    mod.sj   *= (-1);
                    mod.ys   *= (-1);
                    mod.az   *= (-1);
                    mod.qt   *= (-1);
                    mod.xsjy *= (-1);
                    mod.gjjy *= (-1);

                    dal.insert成品库房表_转出(mod);
                }
            }

            MessageBox.Show("转出完成!");
            fill();

            btn_export.Enabled = false;
        }
 public void update成品库房表(成品库房表 成品库房)
 {
     del成品库房表_转出(成品库房.工作令号, 成品库房.日期);
 }
        // 插入 转出数据
        public void insert成品库房表_转出(成品库房表 成品库房)
        {
            // 首先插入 成品库房表中的 金额

            string sql = @"insert into 成品库房表(id, 工作令号, 日期, 金额 ) values( @p0,@p1,@p2,@p3)";

            SqlParameter[] para = new SqlParameter[]
            {
                new SqlParameter("p0", 成品库房.id),
                new SqlParameter("p1", 成品库房.工作令号),
                new SqlParameter("p2", 成品库房.日期),
                new SqlParameter("p3", 成品库房.金额),
            };
            SqlHelper.ExecuteNonQuery(sql, para);
            sql = @"insert into 成品库房转出表 values ('{0}')";
            sql = string.Format(sql, 成品库房.id);
            SqlHelper.ExecuteNonQuery(sql);


            原始凭证    mod = new 原始凭证();
            原始凭证DAL dal = new 原始凭证DAL();

            mod.日期   = 成品库房.日期;
            mod.工作令号 = 成品库房.工作令号;
            if (成品库房.ty != 0)
            {
                mod.Id = Guid.NewGuid();
                mod.材质 = "I";
                mod.金额 = 成品库房.ty;
                mod.单位 = short.Parse(dal.getSaleDeptForWorkno(成品库房.工作令号, mod.材质));
                dal.addOut(mod);
            }

            if (成品库房.zdh != 0)
            {
                mod.Id = Guid.NewGuid();
                mod.材质 = "K";
                mod.金额 = 成品库房.zdh;
                mod.单位 = short.Parse(dal.getSaleDeptForWorkno(成品库房.工作令号, mod.材质));
                dal.addOut(mod);
            }

            if (成品库房.sj != 0)
            {
                mod.Id = Guid.NewGuid();
                mod.材质 = "1";
                mod.金额 = 成品库房.sj;
                mod.单位 = short.Parse(dal.getSaleDeptForWorkno(成品库房.工作令号, mod.材质));
                dal.addOut(mod);
            }

            if (成品库房.ys != 0)
            {
                mod.Id = Guid.NewGuid();
                mod.材质 = "2";
                mod.金额 = 成品库房.ys;
                mod.单位 = short.Parse(dal.getSaleDeptForWorkno(成品库房.工作令号, mod.材质));
                dal.addOut(mod);
            }

            if (成品库房.az != 0)
            {
                mod.Id = Guid.NewGuid();
                mod.材质 = "N";
                mod.金额 = 成品库房.az;
                mod.单位 = short.Parse(dal.getSaleDeptForWorkno(成品库房.工作令号, mod.材质));
                dal.addOut(mod);
            }

            if (成品库房.qt != 0)
            {
                mod.Id = Guid.NewGuid();
                mod.材质 = "L";
                mod.金额 = 成品库房.qt;
                mod.单位 = short.Parse(dal.getSaleDeptForWorkno(成品库房.工作令号, mod.材质));
                dal.addOut(mod);
            }

            if (成品库房.xsjy != 0)
            {
                mod.Id = Guid.NewGuid();
                mod.材质 = "O";
                mod.金额 = 成品库房.xsjy;
                mod.单位 = short.Parse(dal.getSaleDeptForWorkno(成品库房.工作令号, mod.材质));
                dal.addOut(mod);
            }

            if (成品库房.gjjy != 0)
            {
                mod.Id = Guid.NewGuid();
                mod.材质 = "U";
                mod.金额 = 成品库房.gjjy;
                mod.单位 = short.Parse(dal.getSaleDeptForWorkno(成品库房.工作令号, mod.材质));
                dal.addOut(mod);
            }
        }