Пример #1
0
        /// <summary>
        /// 根据输入的参数值来执行更新数据
        /// </summary>
        /// <param name="e">传入的带有数据的事件参数</param>
        /// <returns></returns>
        private bool UpdateData(FormViewUpdateEventArgs e)
        {
            //数据适配器
            //当前添加语句对象
            //当前数据库连接
            using (var da = new v_complete_lot_card_outTableAdapter())
            using (var conn = da.Connection)
            {
                //打开数据库连接
                conn.Open();
                //开启事务
                using (var tran = conn.BeginTransaction())
                {
                    //设置事务
                    da.Transaction = tran;
                    //试运行
                    try
                    {
                        //部门名称
                        string deptName = e.OldValues["dept_name"].ToString();
                        //当前行单号
                        string billNum = Convert.ToString(e.Keys[0]);
                        //获取数据
                        using (var tab = da.GetDataByBillNum(billNum))
                        {
                            //检查是否获取到行
                            if (tab.Rows.Count == 0)
                            {
                                //显示失败
                                throw new Exception("当前记录已经被其他用户删除!");
                            }
                            //数据适配器
                            using (var daHead = new t_complete_lot_card_out_headTableAdapter())
                            using (var daContent = new t_complete_lot_card_out_contentTableAdapter())
                            using (var daBalance = new t_complete_lot_card_balanceTableAdapter())
                            using (var daDept = new t_dept_lot_card_balanceTableAdapter())
                            {
                                //设置数据库连接
                                daHead.Connection = daContent.Connection = daBalance.Connection = daDept.Connection = conn;
                                //设置事务
                                daHead.Transaction = daContent.Transaction = daBalance.Transaction = daDept.Transaction = tran;
                                //将之前的单据内容写回
                                foreach (DataSetCompleteOut.v_complete_lot_card_outRow row in tab.Rows)
                                {
                                    //检测是否超过原下部门余数
                                    if (ydOperateBalanceLotCrad.IsOutstripDeptBalance(
                                        tran,
                                        row.dept_name,
                                        row.next_dept_name,
                                        row.lot_id,
                                        row.pnl_qty,
                                        row.pcs_qty,
                                        true
                                    ))
                                    {
                                        return false;
                                    }
                                    //修改原下部门lot卡余数
                                    if (!ydOperateBalanceLotCrad.UpdateBalanceAfterInsert(
                                        tran,
                                        row.dept_name,
                                        row.next_dept_name,
                                        row.lot_id,
                                        row.pnl_qty,
                                        row.pcs_qty,
                                        true
                                    ))
                                    {
                                        return false;
                                    }
                                    //执行插入到成品结存清单
                                    daBalance.InsertData(
                                        row.prev_dept_name,
                                        row.dept_name,
                                        row.lot_id,
                                        row.product_num,
                                        row.pnl_qty,
                                        row.pcs_qty,
                                        "出库单写回" + (row.IsremarkNull() ? string.Empty : ":" + row.remark),
                                        Session["user_name"].ToString()
                                    );
                                }
                                //从单据内容中删除
                                daContent.DeleteByBillNum(billNum);
                                //从单据表头中删除
                                daHead.Delete(billNum);

                                //日期
                                DateTime billDate = Convert.ToDateTime(e.NewValues["bill_date"]);
                                //下部门
                                string nextDeptName = Convert.ToString(e.NewValues["next_dept_name"]);
                                //单据备注
                                string billRemark = Convert.ToString(e.NewValues["remark"]);
                                //录入员
                                string addPerson = e.NewValues["add_person"].ToString();
                                //录入时间
                                DateTime addTime = Convert.ToDateTime(e.NewValues["add_time"]);
                                //最后修改时间
                                DateTime lastChangeTime = Convert.ToDateTime(e.NewValues["last_change_time"]);
                                //保存表头
                                daHead.Insert(
                                    billDate,
                                    billNum,
                                    deptName,
                                    nextDeptName,
                                    billRemark,
                                    addPerson,
                                    addTime,
                                    lastChangeTime
                                );
                                //遍历子表执行保存
                                for (int iRow = 0; iRow < 10; iRow++)
                                {
                                    //子表各控件
                                    var tr = tabDataListSon.Rows[iRow + 1];
                                    var litRowId = (Literal)tr.Cells[0].Controls[0];
                                    var txtPrevDeptName = (TextBox)tr.Cells[1].Controls[0];
                                    var txtLotId = (TextBox)tr.Cells[2].Controls[0];
                                    var txtProductNum = (TextBox)tr.Cells[3].Controls[0];
                                    var txtPnlQty = (TextBox)tr.Cells[4].Controls[0];
                                    var txtPcsQty = (TextBox)tr.Cells[5].Controls[0];
                                    var txtRemark = (TextBox)tr.Cells[6].Controls[0];
                                    //取得数据
                                    byte rowId = Convert.ToByte(litRowId.Text);
                                    string prevDeptName = txtPrevDeptName.Text;
                                    string lotId = txtLotId.Text;
                                    string productNum = txtProductNum.Text;
                                    Int16 pnlQty = txtPnlQty.Text.Trim().Length <= 0 ? (Int16)0 : Int16.Parse(txtPnlQty.Text.Trim());
                                    int pcsQty = txtPcsQty.Text.Trim().Length <= 0 ? 0 : int.Parse(txtPcsQty.Text.Trim());
                                    string remark = txtRemark.Text;
                                    //存在数据才保存
                                    if (lotId.Length > 0 && productNum.Length > 0 && pnlQty + pcsQty > 0)
                                    {
                                        //保存到单据内容清单
                                        daContent.Insert(
                                            billNum,
                                            rowId,
                                            prevDeptName,
                                            lotId,
                                            productNum,
                                            pnlQty,
                                            pcsQty,
                                            remark
                                        );
                                        //保存到部门lot卡结存清单
                                        daDept.Insert(
                                            deptName,
                                            nextDeptName,
                                            lotId,
                                            productNum,
                                            pnlQty,
                                            pcsQty,
                                            "出库单写入" + (remark.Length > 0 ? ":" + remark : string.Empty),
                                            true,
                                            Session["user_name"].ToString(),
                                            DateTime.Now,
                                            DateTime.Now
                                        );
                                        //从成品结存清单中扣除
                                        if (!ydOperateCompleteLotCard.DecreaseCompleteBalance(
                                            daBalance,
                                            prevDeptName,
                                            lotId,
                                            pnlQty,
                                            pcsQty
                                        ))
                                        {
                                            return false;
                                        }
                                    }
                                }
                            }
                        }
                        //提交事务
                        tran.Commit();
                        //返回成功
                        return true;
                    }
                    catch (Exception ex)
                    {
                        //回滚事务
                        tran.Rollback();
                        //非数字返回失败
                        throw new Exception(ex.Message);
                    }
                }
            }
        }
Пример #2
0
 /// <summary>
 /// 保存多条lot卡开卡记录数据到数据库
 /// </summary>
 /// <param name="e">传入的带有数据的事件参数</param>
 /// <returns></returns>
 private bool InsertData(FormViewInsertEventArgs e)
 {
     //当前用户输入的lot卡号
     string strLotIdBegin = e.Values["lot_id"].ToString();
     //正则表达式
     string strReg = @"^[1-9]\d(0[1-9]|1[012])-[1-9]\d{0,4}";
     //检测是否正确lot卡号
     if (!Regex.IsMatch(strLotIdBegin, strReg))
     {
         //非数字返回失败
         throw new Exception("您输入了一个不合格的结束lot卡号 " + strLotIdBegin + " !");
     }
     //数据适配器
     //当前添加语句对象
     //当前数据库连接
     using (var da = new t_sample_lot_cardTableAdapter())
     using (var daOrder = new t_sample_orderTableAdapter())
     using (var daBalance = new t_dept_lot_card_balanceTableAdapter())
     using (var conn = da.Connection)
     {
         //打开数据库连接
         conn.Open();
         //设置数据库连接
         daOrder.Connection = daBalance.Connection = conn;
         //开启事务
         using (var tran = conn.BeginTransaction())
         {
             //设置事务
             daOrder.Transaction = da.Transaction = daBalance.Transaction = tran;
             //试运行
             try
             {
                 //订单序号
                 string orderId = ((TextBox)fvSampleLotCardMgrAdd.FindControl("txtOrderId")).Text;
                 //取得生产编号
                 string productNum = daOrder.GetProductNumByOrderId(orderId).ToString();
                 //lot卡中的年份月份和数字索引号
                 string strYearMonth = strLotIdBegin.Substring(0, 5);
                 int iLotId = int.Parse(strLotIdBegin.Substring(5));
                 //每卡开多少pnl
                 Int16 iEveryCardPnlQty = Int16.Parse(((TextBox)fvSampleLotCardMgrAdd.FindControl("txtEveryCardPnlQty")).Text);
                 //是否补料单
                 bool isSupplement = Convert.ToBoolean(e.Values["is_supplement"]);
                 //首部门
                 string firstDeptName = ((TextBox)fvSampleLotCardMgrAdd.FindControl("txtFirstDeptName")).Text;
                 //备注
                 string remark = e.Values["remark"].ToString();
                 //录入员
                 string addPerson = e.Values["add_person"].ToString();
                 //录入时间
                 DateTime addTime = Convert.ToDateTime(e.Values["add_time"]);
                 //录入时间
                 DateTime lastChangeTime = Convert.ToDateTime(e.Values["last_change_time"]);
                 //遍历pnl数
                 foreach (var item in new string[] { "A", "B", "C", "D" })
                 {
                     //pnl开料数
                     string pnlQty = ((TextBox)fvSampleLotCardMgrAdd.FindControl("txtPnlQty" + item)).Text;
                     if (pnlQty.Length <= 0)
                     {
                         continue;
                     }
                     int iPnlQty = int.Parse(pnlQty);
                     //pnl长
                     Int16 iPnlLength = Int16.Parse(((TextBox)fvSampleLotCardMgrAdd.FindControl("txtPnlLength" + item)).Text);
                     //pnl宽
                     Int16 iPnlWidth = Int16.Parse(((TextBox)fvSampleLotCardMgrAdd.FindControl("txtPnlWidth" + item)).Text);
                     //pnl含pcs数
                     Int16 iPnlCountPcs = Int16.Parse(((TextBox)fvSampleLotCardMgrAdd.FindControl("txtPnlCountPcs" + item)).Text);
                     //开卡数
                     int iCountCard = iPnlQty / iEveryCardPnlQty;
                     //尾卡数量太多,卡数+1
                     if (iPnlQty - iCountCard * iEveryCardPnlQty >= iEveryCardPnlQty * 0.5)
                     {
                         iCountCard++;
                     }
                     //开卡数至少一张
                     if (iCountCard <= 0)
                     {
                         iCountCard = 1;
                     }
                     //lot卡逐个往数据库填写
                     for (int i = iLotId; i < iLotId + iCountCard; i++)
                     {
                         //当前lot卡号
                         string lotId = strYearMonth + i;
                         //当前卡开pnl数
                         Int16 iPnlQtyThis = i == iLotId + iCountCard - 1 ?
                            (Int16)(iPnlQty - (iCountCard - 1) * iEveryCardPnlQty) :
                             iEveryCardPnlQty;
                         //写入当前lot卡
                         if (da.Insert(
                             orderId,
                             lotId,
                             isSupplement,
                             iPnlLength,
                             iPnlWidth,
                             iPnlCountPcs,
                             iPnlQtyThis,
                             firstDeptName,
                             remark,
                             addPerson,
                             addTime,
                             lastChangeTime
                         ) <= 0)
                         {
                             //返回失败
                             throw new Exception(string.Format("插入lot卡 {0} 到数据库失败!", lotId));
                         }
                         //写入部门结存
                         if (daBalance.Insert(
                             "Sample",
                             firstDeptName,
                             lotId,
                             productNum,
                             iPnlQtyThis,
                             0,
                             null,
                             true,
                             addPerson,
                             addTime,
                             lastChangeTime
                         ) <= 0)
                         {
                             //返回失败
                             throw new Exception(string.Format("插入lot卡 {0} 到部门结存失败!", lotId));
                         }
                     }
                     //当前iLotId
                     iLotId = iLotId + iCountCard;
                 }
                 //提交事务
                 tran.Commit();
                 //返回成功
                 return true;
             }
             catch (Exception ex)
             {
                 //回滚事务
                 tran.Rollback();
                 //非数字返回失败
                 throw new Exception(ex.Message);
             }
         }
     }
 }
Пример #3
0
 /// <summary>
 /// 根据输入的LOT格式来保存多条数据到数据库
 /// </summary>
 /// <param name="e">传入的带有数据的事件参数</param>
 /// <param name="deptName">当前部门名称</param>
 /// <returns></returns>
 private bool InsertData(FormViewInsertEventArgs e, string deptName)
 {
     //日期
     DateTime billDate = Convert.ToDateTime(e.Values["bill_date"]);
     //单号
     string billNum = Convert.ToString(e.Values["bill_num"]);
     //下部门
     string nextDeptName = Convert.ToString(e.Values["next_dept_name"]);
     //单据备注
     string billRemark = Convert.ToString(e.Values["remark"]);
     //录入员
     string addPerson = e.Values["add_person"].ToString();
     //录入时间
     DateTime addTime = Convert.ToDateTime(e.Values["add_time"]);
     //最后修改时间
     DateTime lastChangeTime = Convert.ToDateTime(e.Values["last_change_time"]);
     //数据适配器
     //当前添加语句对象
     //当前数据库连接
     using (var daHead = new t_complete_lot_card_out_headTableAdapter())
     using (var daContent = new t_complete_lot_card_out_contentTableAdapter())
     using (var daBalance = new t_complete_lot_card_balanceTableAdapter())
     using (var daDept = new t_dept_lot_card_balanceTableAdapter())
     using (var conn = daHead.Connection)
     {
         //打开数据库连接
         conn.Open();
         //开启事务
         using (var tran = conn.BeginTransaction())
         {
             //设置数据库连接对象
             daContent.Connection = daBalance.Connection = daDept.Connection = conn;
             //设置事务
             daHead.Transaction = daContent.Transaction = daBalance.Transaction = daDept.Transaction = tran;
             //试运行
             try
             {
                 //保存表头
                 daHead.Insert(
                     billDate,
                     billNum,
                     deptName,
                     nextDeptName,
                     billRemark,
                     addPerson,
                     addTime,
                     lastChangeTime
                 );
                 //遍历子表执行保存
                 for (int iRow = 0; iRow < 10; iRow++)
                 {
                     //子表各控件
                     var tr = tabDataListSon.Rows[iRow + 1];
                     var litRowId = (Literal)tr.Cells[0].Controls[0];
                     var txtPrevDeptName = (TextBox)tr.Cells[1].Controls[0];
                     var txtLotId = (TextBox)tr.Cells[2].Controls[0];
                     var txtProductNum = (TextBox)tr.Cells[3].Controls[0];
                     var txtPnlQty = (TextBox)tr.Cells[4].Controls[0];
                     var txtPcsQty = (TextBox)tr.Cells[5].Controls[0];
                     var txtRemark = (TextBox)tr.Cells[6].Controls[0];
                     //取得数据
                     byte rowId = Convert.ToByte(litRowId.Text);
                     string prevDeptName = txtPrevDeptName.Text;
                     string lotId = txtLotId.Text;
                     string productNum = txtProductNum.Text;
                     Int16 pnlQty = txtPnlQty.Text.Trim().Length <= 0 ? (Int16)0 : Int16.Parse(txtPnlQty.Text.Trim());
                     int pcsQty = txtPcsQty.Text.Trim().Length <= 0 ? 0 : int.Parse(txtPcsQty.Text.Trim());
                     string remark = txtRemark.Text;
                     //存在数据才保存
                     if (lotId.Length > 0 && productNum.Length > 0 && pnlQty + pcsQty > 0)
                     {
                         //保存到单据内容清单
                         daContent.Insert(
                             billNum,
                             rowId,
                             prevDeptName,
                             lotId,
                             productNum,
                             pnlQty,
                             pcsQty,
                             remark
                         );
                         //保存到清单部门lot卡结存清单
                         daDept.Insert(
                             deptName,
                             nextDeptName,
                             lotId,
                             productNum,
                             pnlQty,
                             pcsQty,
                             "出库单写入" + (remark.Length > 0 ? ":" + remark : string.Empty),
                             true,
                             Session["user_name"].ToString(),
                             DateTime.Now,
                             DateTime.Now
                         );
                         //从成品结存清单中扣除
                         if (!ydOperateCompleteLotCard.DecreaseCompleteBalance(
                             daBalance,
                             prevDeptName,
                             lotId,
                             pnlQty,
                             pcsQty
                         ))
                         {
                             return false;
                         }
                     }
                 }
                 //提交事务
                 tran.Commit();
                 //返回成功
                 return true;
             }
             catch (Exception ex)
             {
                 //回滚事务
                 tran.Rollback();
                 //非数字返回失败
                 throw new Exception(ex.Message);
             }
         }
     }
 }