钟表维修管理系统技术解析(五) 销售单录入中的再录一条、结账功能
2015-05-31 21:07
441 查看
再录一条功能实现
第一步:存储过程代码
第二步:逻辑层代码
第三步:界面层代码
(1)再录一条按钮的单击事件
(图9)
第一步:结账按钮的单击事件
第二步:结账窗体代码
(1)存储过程代码
(2)逻辑层代码
(3)结账窗体的构造方法
(4)结账窗体的Load事件
(5)折扣文本框的,在控件有焦点时,按下并释放某个键时触发的事件
(6)折扣文本框的,当控件不再是窗体的活动控件时发生的事件
(7)折扣文本框的,Text值改变时发生的事件
(8) 实收金额文本框的,Text值改变时发生的事件
(9)确认结账按钮的单击事件
注:此文章只供学习参考,禁止用于商业用途。
第一步:存储过程代码
<span style="font-size:18px;">IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunZuiDaDanJuShu') BEGIN BEGIN TRAN UPDATE DangRiZuiDaDanShu SET XiaoShouDanHao+=1 --最大库存数加一 SELECT XiaoShouDanHao FROM DangRiZuiDaDanShu --查询最大库存数 COMMIT TRAN END IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDan') BEGIN BEGIN TRAN INSERT pw_XiaoShouDan(LuRuYuanID,KeHuID, XiaoShouLeiXingID, XiaoShouDanBianHao, XiaoShouRiQi,BeiZhu,PinPaiID,ZhongBiaoKuanShiID,DiKeHao,YingShouJinE) VALUES (@LuRuYuanID, @KeHuID, @XiaoShouLeiXingID,@XiaoShouDanBianHao, @XiaoShouRiQi, @BeiZhu,@PinPaiID,@ZhongBiaoKuanShiID,@DiKeHao,@YingShouJinE) SELECT @@IDENTITY --查询刚刚新增的行的主键(ID) COMMIT TRAN END if @type='frmCaiGouGuanLi_Select_ChuKuDanJuHao' begin begin tran update DangRiZuiDaDanShu set DangRiZuiDaDanShu.ChuKuDanHao=ChuKuDanHao+1 select ChuKuDanHao from DangRiZuiDaDanShu commit tran end if @type='frmCaiGouGuanLi_Insert_RuKuDan' begin insert pw_ChuRuKuDanJu( LuRuYuanID, GongZuoZhanID, DanJuBianHao, RuKuFou,BeiZhu) values (@LuRuYuanID, 4,@DanJuBianHao, 'true',@BeiZhu) select @@IDENTITY end IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi') BEGIN BEGIN TRAN INSERT pw_XiaoShouDanMingXi(XiaoShouDanID, ChanPinID, CangWeiID, DanJia, ShuLiang,BaoXiuQiID) VALUES (@XiaoShouDanID, @ChanPinID, @CangWeiID, @DanJia, @ShuLiang,@BaoXiuQiID) UPDATE sys_KuCun SET KuCunShuLiang-=@ShuLiang,GengXinShiJian=GETDATE() WHERE CangWeiID=@CangWeiID and ChanPinID=@ChanPinID COMMIT TRAN END if @type='frmCaiGouTuiHuo_Insert_ChuKuMingXi' begin insert pw_ChuRuKuDanJuMingXi(ChuRuKuDanJuID, ChanPinID, CangWeiID, ShuLiang, JinE) values (@ChuRuKuDanJuID, @ChanPinID, @CangWeiID, @ShuLiang, @JinE) end </span>
第二步:逻辑层代码
<span style="font-size:18px;">public DataTable frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunZuiDaDanJuShu() { SqlParameter[] mySqlParameters ={ new SqlParameter("@TYPE",SqlDbType.Char) }; mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunZuiDaDanJuShu"; return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters); } public DataTable frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDan(int intLuRuYuanID, int intKeHuID, int intXiaoShouLeiXingID, string strXiaoShouDanBianHao, DateTime dtmXiaoShouRiQi, string strBeiZhu, int intPinPaiID, int intZhongBiaoKuanShiID, string strDiKeHao, decimal decYingShouJinE) { SqlParameter[] mySqlParameters ={ new SqlParameter("@TYPE",SqlDbType.Char), new SqlParameter("@LuRuYuanID",SqlDbType.Int), new SqlParameter("@KeHuID",SqlDbType.Int), new SqlParameter("@XiaoShouLeiXingID",SqlDbType.Int), new SqlParameter("@XiaoShouDanBianHao",SqlDbType.Char), new SqlParameter("@XiaoShouRiQi",SqlDbType.Date), new SqlParameter("@BeiZhu",SqlDbType.Char), new SqlParameter("@PinPaiID",SqlDbType.Int), new SqlParameter("@ZhongBiaoKuanShiID",SqlDbType.Int), new SqlParameter("@DiKeHao",SqlDbType.Char), new SqlParameter("@YingShouJinE",SqlDbType.Decimal), }; mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDan"; mySqlParameters[1].Value = intLuRuYuanID; mySqlParameters[2].Value = intKeHuID; mySqlParameters[3].Value = intXiaoShouLeiXingID; mySqlParameters[4].Value = strXiaoShouDanBianHao; mySqlParameters[5].Value = dtmXiaoShouRiQi; mySqlParameters[6].Value = strBeiZhu; mySqlParameters[7].Value = intPinPaiID; mySqlParameters[8].Value = intZhongBiaoKuanShiID; mySqlParameters[9].Value = strDiKeHao; mySqlParameters[10].Value = decYingShouJinE; return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters); } public DataTable frmCaiGouGuanLi_Select_ChuKuDanJuHao() { SqlParameter[] mySqlParameters = { new SqlParameter("@type",SqlDbType.Char), }; mySqlParameters[0].Value = "frmCaiGouGuanLi_Select_ChuKuDanJuHao"; return myDALMethod.QueryDataTable("frmCaiGouGuanLi", mySqlParameters); } public DataTable frmCaiGouGuanLi_Insert_RuKuDan(int intLuRuYuanID, string strDanJuBianHao,string strBeiZhu) { SqlParameter[] mySqlParameters = { new SqlParameter("@type",SqlDbType.Char), new SqlParameter("@LuRuYuanID",SqlDbType.Int), new SqlParameter("@DanJuBianHao",SqlDbType.Char), new SqlParameter("@BeiZhu",SqlDbType.Char), }; mySqlParameters[0].Value = "frmCaiGouGuanLi_Insert_RuKuDan"; mySqlParameters[1].Value = intLuRuYuanID; mySqlParameters[2].Value = strDanJuBianHao; mySqlParameters[3].Value = strBeiZhu; return myDALMethod.QueryDataTable("frmCaiGouGuanLi", mySqlParameters); } public int frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi(int intXiaoShouDanID, int intChanPinID, int intCangWeiID, decimal decDanJia, int intShuLiang,int intBaoXiuQiID) { SqlParameter[] mySqlParameters ={ new SqlParameter("@TYPE",SqlDbType.Char), new SqlParameter("@XiaoShouDanID",SqlDbType.Int), new SqlParameter("@ChanPinID",SqlDbType.Int), new SqlParameter("@CangWeiID",SqlDbType.Int), new SqlParameter("@DanJia",SqlDbType.Decimal), new SqlParameter("@ShuLiang",SqlDbType.Int), new SqlParameter("@BaoXiuQiID",SqlDbType.Int), }; mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi"; mySqlParameters[1].Value = intXiaoShouDanID; mySqlParameters[2].Value = intChanPinID; mySqlParameters[3].Value = intCangWeiID; mySqlParameters[4].Value = decDanJia; mySqlParameters[5].Value = intShuLiang; mySqlParameters[6].Value = intBaoXiuQiID; return myDALMethod.UpdateData("frmXiaoShouKaiDan_Insert", mySqlParameters); } public DataTable frmCaiGouTuiHuo_Insert_ChuKuMingXi(int intChuRuKuDanJuID, int intChanPinID, int intCangWeiID, int intShuLiang) { SqlParameter[] mySqlParameters = { new SqlParameter("@type",SqlDbType.Char), new SqlParameter("@ChuRuKuDanJuID",SqlDbType.Int), new SqlParameter("@ChanPinID",SqlDbType.Int), new SqlParameter("@CangWeiID",SqlDbType.Int), new SqlParameter("@ShuLiang",SqlDbType.Int), }; mySqlParameters[0].Value = "frmCaiGouTuiHuo_Insert_ChuKuMingXi"; mySqlParameters[1].Value = intChuRuKuDanJuID; mySqlParameters[2].Value = intChanPinID; mySqlParameters[3].Value = intCangWeiID; mySqlParameters[4].Value = intShuLiang; return myDALMethod.QueryDataTable("frmCaiGouTuiHuo", mySqlParameters); } </span>
第三步:界面层代码
(1)再录一条按钮的单击事件
BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Insert myfrmXiaoShouKaiDan_Insert = new BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Insert(); BLL.BLLCaiGouGuanLi.frmCaiGouGuanLi myfrmCaiGouGuanLi = new BLL.BLLCaiGouGuanLi.frmCaiGouGuanLi(); BLL.BLLCaiGouGuanLi.frmCaiGouTuiHuo myfrmCaiGouTuiHuo = new BLL.BLLCaiGouGuanLi.frmCaiGouTuiHuo(); int intKeHuID = 0; int intPinPaiID = 0; int intGeShu = 0; int[] intXiaoShouDanIDs; int intFanHui = 0; private void btnZaiLuYiTiao_Click(object sender, EventArgs e) { #region 保存前判断 if (intKeHuID == 0 || txtKeHuXingMing.Text == "") { MessageBox.Show("请按绿色加号按钮选择客户!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); intFanHui = 0; return; } if (intPinPaiID == 0 || txtPinPai.Text == "") { MessageBox.Show("请按绿色加号按钮选择品牌!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); intFanHui = 0; return; } if (txtDiKeHao.Text == "") { MessageBox.Show("请填写底壳号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); intFanHui = 0; return; } if (dgvChanPinMingXi.Rows.Count < 1) { MessageBox.Show("请录入产品!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); intFanHui = 0; return; } for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++) { try { intFanHui = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value); if (intFanHui == 0) { MessageBox.Show("第【" + (i + 1).ToString() + "】行的【保修期】还没选择!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } } catch { MessageBox.Show("第【"+(i+1).ToString()+"】行的【保修期】还没选择!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); intFanHui = 0; return; } } #endregion #region 获取界面填入的值 int intLuRuYuanID = Convert.ToInt32(index2.strYuanGongXinXi[0]);//登录人 int intXiaoShouLeiXingID = Convert.ToInt32(cboXiaoShouLeiXing.SelectedValue); string strXiaoShouDanBianHao = DangRiXiaoShouZuiDaDanJuShu("XD");//获取销售单编号 DateTime dtmXiaoShouRiQi = dtpXiaoShouRiQi.Value; string strBeiZhu = txtBeiZhu.Text; int intZhongBiaoKuanShiID = Convert.ToInt32(cboKuanShi.SelectedValue); string strDiKeHao = txtDiKeHao.Text; decimal decYingShouJinE = 0; #endregion for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++) { decYingShouJinE += Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["小计"].Value);//应收金额 } int intXiaoShouDanID = Convert.ToInt32(myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDan(intLuRuYuanID, intKeHuID, intXiaoShouLeiXingID, strXiaoShouDanBianHao, dtmXiaoShouRiQi, strBeiZhu, intPinPaiID, intZhongBiaoKuanShiID, strDiKeHao, decYingShouJinE).Rows[0][0]);//新增销售单 if (intXiaoShouDanID > 0) { #region 新增出库记录 string strY = DateTime.Now.Year.ToString();//获取当前年份 string strM = (DateTime.Now.Month.ToString().Length < 2 ? "0" + DateTime.Now.Month.ToString() : DateTime.Now.Month.ToString());//获取当前月份,如果是一位数,则前面加0 string strD = (DateTime.Now.Day.ToString().Length < 2 ? "0" + DateTime.Now.Day.ToString() : DateTime.Now.Day.ToString());//获取当前日,如果是一位数,则前面加0 string strDanHao = myfrmCaiGouGuanLi.frmCaiGouGuanLi_Select_ChuKuDanJuHao().Rows[0][0].ToString();//获取今日最大单号 if (strDanHao.Length == 1) { strDanHao = "000" + strDanHao;//如果是一位数,则在前面加000 } else if (strDanHao.Length == 2) { strDanHao = "00" + strDanHao; } else if (strDanHao.Length == 3) { strDanHao = "0" + strDanHao; } string strPab = "CK" + strY + strM + strD + strDanHao;//拼接出入库单号 DataTable dtRuKuDan = myfrmCaiGouGuanLi.frmCaiGouGuanLi_Insert_RuKuDan(Convert.ToInt32(index2.strYuanGongXinXi[0]), strPab, "销售出库(" + strXiaoShouDanBianHao + ")");//新增出入库单据 #endregion intGeShu++;//已经录入的销售单条数加一 int[] intZhuanHuans = new int[intGeShu-1];//创建一个int型数组,用来存放之前录入的销售单ID intZhuanHuans = intXiaoShouDanIDs; intXiaoShouDanIDs = new int[intGeShu];//重新实例化销售单ID集合 for (int i = 0; i < intGeShu - 1; i++)//循环把暂时存放销售单ID的数组,赋值给销售单ID集合 { intXiaoShouDanIDs[i] = intZhuanHuans[i]; } intXiaoShouDanIDs[intGeShu - 1] = intXiaoShouDanID;//最后一个位置存放刚保存的一个销售单的ID int intMingXiChengGongCiShu = 0; for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++) { int intChanPinID = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["产品ID"].Value); int intCangWeiID = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["所在仓位ID"].Value); decimal decDanJia = Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value); int intShuLiang = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value); int intBaoXiuQiID = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value); //添加销售单明细,同时修改库存数 if (myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi(intXiaoShouDanID, intChanPinID, intCangWeiID, decDanJia, intShuLiang,intBaoXiuQiID) > 0)//新增销售单明细,和改变库存 { myfrmCaiGouTuiHuo.frmCaiGouTuiHuo_Insert_ChuKuMingXi(Convert.ToInt32(dtRuKuDan.Rows[0][0]), intChanPinID, intCangWeiID, intShuLiang);//新增出入库单明细 intMingXiChengGongCiShu++; } } if (intMingXiChengGongCiShu != dgvChanPinMingXi.Rows.Count)//判断是否全部操作都执行成功 { MessageBox.Show("新增销售单成功,销售单编号【" + strXiaoShouDanBianHao + "】\n【" + (dgvChanPinMingXi.Rows.Count - intMingXiChengGongCiShu).ToString() + "】条明细添加失败!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } dtpXiaoShouRiQi.Value = DateTime.Now;//保留客户信息,并且清空其他信息 txtBeiZhu.Text = ""; txtDiKeHao.Text = ""; txtPinPai.Text = ""; cboXiaoShouLeiXing.SelectedIndex = 0; cboKuanShi.SelectedItem = 0; intPinPaiID = 0; dgvChanPinMingXi.Rows.Clear(); intFanHui = 1; return; } else { MessageBox.Show("新增失败!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Error); intFanHui = 0; return; } } private string DangRiXiaoShouZuiDaDanJuShu(string strQianZhui) { string strDanJuShu = (Convert.ToInt32(myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunZuiDaDanJuShu().Rows[0][0])).ToString(); if (strDanJuShu.Length == 1) { strDanJuShu = "000" + strDanJuShu; } if (strDanJuShu.Length == 2) { strDanJuShu = "00" + strDanJuShu; } if (strDanJuShu.Length == 3) { strDanJuShu = "0" + strDanJuShu; } string Nian = DateTime.Now.Year.ToString(); string Yue = DateTime.Now.Month.ToString(); Yue = (Yue.Length < 2) ? ("0" + Yue) : Yue; string Ri = DateTime.Now.Day.ToString(); Ri = (Ri.Length < 2) ? ("0" + Ri) : Ri; return strQianZhui + Nian + Yue + Ri + strDanJuShu; }结账功能实现,如(图9)所示
(图9)
第一步:结账按钮的单击事件
<span style="font-size:18px;">private void btnBaoCun_Click(object sender, EventArgs e) { bool bolBaoXiu = false; for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++) { try { Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value); } catch { bolBaoXiu = true; break; } } if ((bolBaoXiu == true || intPinPaiID == 0 || txtPinPai.Text == "" || txtDiKeHao.Text == "" || dgvChanPinMingXi.Rows.Count < 1) && intGeShu > 0)//判断是否填写完成 { if (MessageBox.Show("当前单据还未填写完整,是否跳过此单进行结账?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes)//如果没填写完,则提示是否跳过此单据,结账前面录入的单据 { frmXiaoShouKaiDan_JieZhang myfrmXiaoShouKaiDan_JieZhang = new frmXiaoShouKaiDan_JieZhang(intXiaoShouDanIDs, intGeShu);//实例化结账窗体,把销售单ID集合,个数传过去 myfrmXiaoShouKaiDan_JieZhang.ShowDialog();//弹出窗体 intGeShu = 0; intKeHuID = 0; dtpXiaoShouRiQi.Value = DateTime.Now; txtKeHuXingMing.Text = ""; txtLianXiDianHua.Text = ""; txtLianXiDiZhi.Text = ""; txtBeiZhu.Text = ""; txtDiKeHao.Text = ""; txtPinPai.Text = ""; cboXiaoShouLeiXing.SelectedIndex = 0; cboKuanShi.SelectedItem = 0; intPinPaiID = 0; dgvChanPinMingXi.Rows.Clear(); return; } } btnZaiLuYiTiao_Click(null, null);//如果填写的资料完整,则调用再录一条按钮的单击事件 if (intFanHui== 1)//如果录入成功,intFanHui的值为1 { frmXiaoShouKaiDan_JieZhang myfrmXiaoShouKaiDan_JieZhang = new frmXiaoShouKaiDan_JieZhang(intXiaoShouDanIDs, intGeShu);//实例化结账窗体,把销售单ID集合,个数传过去 myfrmXiaoShouKaiDan_JieZhang.ShowDialog();//弹出窗体 intGeShu = 0; intKeHuID = 0; dtpXiaoShouRiQi.Value = DateTime.Now; txtKeHuXingMing.Text = ""; txtLianXiDianHua.Text = ""; txtLianXiDiZhi.Text = ""; txtBeiZhu.Text = ""; txtDiKeHao.Text = ""; txtPinPai.Text = ""; cboXiaoShouLeiXing.SelectedIndex = 0; cboKuanShi.SelectedItem = 0; intPinPaiID = 0; dgvChanPinMingXi.Rows.Clear(); } } </span>
第二步:结账窗体代码
(1)存储过程代码
<span style="font-size:18px;">IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi') BEGIN SELECT BaoXiuQiID, RTRIM(BaoXiuQiMingCheng) AS BaoXiuQiMingCheng,YouXiaoFou --查询的列 FROM sys_BaoXiuQi --从哪个表查询 END IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectFuKuanLeiXing') BEGIN SELECT ShuXingMingXiID AS ShuXingMingXiID,LTRIM(RTRIM(ShuXingMingXiMingCheng))AS ShuXingMingXiMingCheng FROM sys_ShuXingMingXi WHERE ShuXingJiHeID=20 AND YouXiaoFou=1 END IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouFangShi') BEGIN SELECT ShuXingMingXiID AS ShuXingMingXiID,LTRIM(RTRIM(ShuXingMingXiMingCheng))AS ShuXingMingXiMingCheng FROM sys_ShuXingMingXi WHERE ShuXingJiHeID=21 AND YouXiaoFou=1 END IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectFuKuanFangShi') BEGIN SELECT ShuXingMingXiID AS ShuXingMingXiID,LTRIM(RTRIM(ShuXingMingXiMingCheng))AS ShuXingMingXiMingCheng FROM sys_ShuXingMingXi WHERE ShuXingJiHeID=7 AND YouXiaoFou=1 END IF (@TYPE = 'frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi') BEGIN SELECT pw_XiaoShouDanMingXi.ChanPinID, pw_XiaoShouDanMingXi.CangWeiID, RTRIM(sys_CangWei.CangWeiMingCheng) AS CangWeiMingCheng, sys_KuCun.KuCunShuLiang, pw_XiaoShouDanMingXi.DanJia, pw_XiaoShouDanMingXi.ShuLiang, sys_ChanPinZiLiao.ChanPinZhongLeiID, sys_ChanPinZiLiao.ChanPinPinPaiID, RTRIM(sys_ChanPinZiLiao.ChanPinMingCheng) AS ChanPinMingCheng, RTRIM(sys_ChanPinZiLiao.ChanPinBianHao) AS ChanPinBianHao, pw_XiaoShouDanMingXi.XiaoShouDanMingXiID, RTRIM(sys_PinPai.PinPaiMingCheng) AS PinPaiMingCheng, RTRIM(sys_PinZhong.PinZhongMingCheng) AS PinZhongMingCheng, pw_XiaoShouDanMingXi.BaoXiuQiID, RTRIM(pw_XiaoShouDan.XiaoShouDanBianHao) AS XiaoShouDanBianHao, pw_XiaoShouDanMingXi.XiaoShouDanID FROM pw_XiaoShouDanMingXi INNER JOIN sys_ChanPinZiLiao ON pw_XiaoShouDanMingXi.ChanPinID = sys_ChanPinZiLiao.ChanPinID INNER JOIN sys_CangWei ON pw_XiaoShouDanMingXi.CangWeiID = sys_CangWei.CangWeiID INNER JOIN sys_KuCun ON sys_CangWei.CangWeiID = sys_KuCun.CangWeiID AND sys_ChanPinZiLiao.ChanPinID = sys_KuCun.ChanPinID INNER JOIN sys_PinPai ON sys_ChanPinZiLiao.ChanPinPinPaiID = sys_PinPai.PinPaiID INNER JOIN sys_PinZhong ON sys_ChanPinZiLiao.ChanPinZhongLeiID = sys_PinZhong.PinZhongID INNER JOIN pw_XiaoShouDan ON pw_XiaoShouDanMingXi.XiaoShouDanID = pw_XiaoShouDan.XiaoShouDanID WHERE pw_XiaoShouDanMingXi.XiaoShouDanID=@XiaoShouDanID END IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunJieZhangZuiDaDanJuShu') BEGIN BEGIN TRAN UPDATE DangRiZuiDaDanShu SET JieZhangDanHao+=1 SELECT JieZhangDanHao FROM DangRiZuiDaDanShu COMMIT TRAN END IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_XiaoShouDanFuKuan') BEGIN UPDATE pw_XiaoShouDan SET FuKuanZhuangTaiID =@FuKuanZhuangTaiID, XiaoShouFangShiID =@XiaoShouFangShiID, FuKuanFangShiID =@FuKuanFangShiID, FuKuanLeiXingID =@FuKuanLeiXingID, YingShouJinE =@YingShouJinE, ShiShouJinE =@ShiShouJinE, JieZhangBianHao =@JieZhangBianHao WHERE XiaoShouDanID=@XiaoShouDanID END </span>
(2)逻辑层代码
<span style="font-size:18px;">public DataTable frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi()//方法名称 { SqlParameter[] mySqlParameters ={ new SqlParameter("@TYPE",SqlDbType.Char)//声明变量数组 }; mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi";//给变量数组的第一个赋值 return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);//第一个参数是数据库名称,第二个参数是数组 } public DataTable frmXiaoShouKaiDan_Insert_Load_SelectFuKuanLeiXing() { SqlParameter[] mySqlParameters ={ new SqlParameter("@TYPE",SqlDbType.Char) }; mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectFuKuanLeiXing"; return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters); } public DataTable frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouFangShi() { SqlParameter[] mySqlParameters ={ new SqlParameter("@TYPE",SqlDbType.Char) }; mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouFangShi"; return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters); } public DataTable frmXiaoShouKaiDan_Insert_Load_SelectFuKuanFangShi() { SqlParameter[] mySqlParameters ={ new SqlParameter("@TYPE",SqlDbType.Char) }; mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectFuKuanFangShi"; return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters); } public DataTable frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi(int intXiaoShouDanID) { SqlParameter[] mySqlParameters ={ new SqlParameter("@TYPE",SqlDbType.Char), new SqlParameter("@XiaoShouDanID",SqlDbType.Int) }; mySqlParameters[0].Value = "frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi"; mySqlParameters[1].Value = intXiaoShouDanID; return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Update", mySqlParameters); } public DataTable frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunJieZhangZuiDaDanJuShu() { SqlParameter[] mySqlParameters ={ new SqlParameter("@TYPE",SqlDbType.Char) }; mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunJieZhangZuiDaDanJuShu"; return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters); } public int frmXiaoShouKaiDan_Insert_btnBaoCun_XiaoShouDanFuKuan(int intFuKuanZhuangTaiID, int intXiaoShouFangShiID, int intFuKuanFangShiID, int intFuKuanLeiXingID, decimal decYingShouJinE, decimal decShiShouJinE, string strJieZhangBianHao, int intXiaoShouDanID) { SqlParameter[] mySqlParameters ={ new SqlParameter("@TYPE",SqlDbType.Char), new SqlParameter("@FuKuanZhuangTaiID",SqlDbType.Int), new SqlParameter("@XiaoShouFangShiID",SqlDbType.Int), new SqlParameter("@FuKuanFangShiID",SqlDbType.Int), new SqlParameter("@FuKuanLeiXingID",SqlDbType.Int), new SqlParameter("@YingShouJinE",SqlDbType.Decimal), new SqlParameter("@ShiShouJinE",SqlDbType.Decimal), new SqlParameter("@JieZhangBianHao",SqlDbType.Char), new SqlParameter("@XiaoShouDanID",SqlDbType.Int), }; mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_XiaoShouDanFuKuan"; mySqlParameters[1].Value = intFuKuanZhuangTaiID; mySqlParameters[2].Value = intXiaoShouFangShiID; mySqlParameters[3].Value = intFuKuanFangShiID; mySqlParameters[4].Value = intFuKuanLeiXingID; mySqlParameters[5].Value = decYingShouJinE; mySqlParameters[6].Value = decShiShouJinE; mySqlParameters[7].Value = strJieZhangBianHao; mySqlParameters[8].Value = intXiaoShouDanID; return myDALMethod.UpdateData("frmXiaoShouKaiDan_Insert", mySqlParameters); } </span>
(3)结账窗体的构造方法
<span style="font-size:18px;">BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Insert myfrmXiaoShouKaiDan_Insert = new BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Insert(); BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Update myfrmXiaoShouKaiDan_Update = new BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Update(); int[] intXiaoShouDanIDs;//销售单ID集合 int intGeShu = 0;//销售单ID个数 int intFuKuanPanDuan = 0;//用于判断是不是销售记录的付款按钮单击事件,弹出来的窗体 DataTable dtBaoXiuQi = new DataTable();//全部保修期 DataTable dtBaoXiuQiWeiShanChu = new DataTable();//未删除保修期 public frmXiaoShouKaiDan_JieZhang(int[] XiaoShouDanIDs, int GeShu) { intGeShu = GeShu; intXiaoShouDanIDs = new int[intGeShu]; intXiaoShouDanIDs = XiaoShouDanIDs; InitializeComponent(); btnBaoCun.BackColor = Color.FromArgb(80, 225, 225, 225);//重写Button控件的外观 } </span>
(4)结账窗体的Load事件
<span style="font-size:18px;">private void frmXiaoShouKaiDan_JieZhang_Load(object sender, EventArgs e) { txtJieZhangDanBianHao.Text = "自动生成"; dgvChanPinMingXi.AllowUserToAddRows = false; dgvChanPinMingXi.AutoGenerateColumns = false; dgvChanPinMingXi.ReadOnly = true; dtBaoXiuQi = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi();//查询保修期表,查询出保修期ID和保修期名称和有效否 dtBaoXiuQiWeiShanChu.Columns.Add("BaoXiuQiMingCheng", typeof(string));//给dtBaoXiuQiWeiShanChu添加列,第一个参数是列名,第二个参数是数据类型 dtBaoXiuQiWeiShanChu.Columns.Add("BaoXiuQiID", typeof(int)); dtBaoXiuQiWeiShanChu.Columns.Add("YouXiaoFou", typeof(bool)); for (int i = 0; i < dtBaoXiuQi.Rows.Count; i++) { if (Convert.ToBoolean(dtBaoXiuQi.Rows[i]["YouXiaoFou"]))//循环判断dtBaoXiuQi,把有效否(YouXiaoFou)为True的添加到dtBaoXiuQiWeiShanChu中 { dtBaoXiuQiWeiShanChu.Rows.Add();//添加一行空行 dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiMingCheng"] = dtBaoXiuQi.Rows[i]["BaoXiuQiMingCheng"].ToString().Trim();//赋值 dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiID"] = Convert.ToInt32(dtBaoXiuQi.Rows[i]["BaoXiuQiID"]); dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["YouXiaoFou"] = true; } } //保修期为什么不只是,把有效否为True的查出来?因为这里是修改,而旧单据中选择的保修期可能已经被删除,赋值环节没有被删除的保修期,会出错 保修期.DataSource = dtBaoXiuQiWeiShanChu;//绑定数据源 保修期.DisplayMember = "BaoXiuQiMingCheng";//绑定显示文本 保修期.ValueMember = "BaoXiuQiID";//绑定ID cboFuKuanZhuangTai.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectFuKuanZhuangTai(); cboFuKuanZhuangTai.DisplayMember = "ShuXingMingXiMingCheng"; cboFuKuanZhuangTai.ValueMember = "ShuXingMingXiID"; cboFuKuanLeiXing.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectFuKuanLeiXing(); cboFuKuanLeiXing.DisplayMember = "ShuXingMingXiMingCheng"; cboFuKuanLeiXing.ValueMember = "ShuXingMingXiID"; cboXiaoShouFangShi.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouFangShi(); cboXiaoShouFangShi.DisplayMember = "ShuXingMingXiMingCheng"; cboXiaoShouFangShi.ValueMember = "ShuXingMingXiID"; cboFuKuanFangShi.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectFuKuanFangShi(); cboFuKuanFangShi.DisplayMember = "ShuXingMingXiMingCheng"; cboFuKuanFangShi.ValueMember = "ShuXingMingXiID"; for (int i = 0; i < intGeShu; i++) { DataTable dtXiaoShouDanMingXi = myfrmXiaoShouKaiDan_Update.frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi(intXiaoShouDanIDs[i]); for (int j = 0; j < dtXiaoShouDanMingXi.Rows.Count; j++) { dgvChanPinMingXi.Rows.Add(1); dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["产品ID"].Value = dtXiaoShouDanMingXi.Rows[j]["ChanPinID"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["所在仓位ID"].Value = dtXiaoShouDanMingXi.Rows[j]["CangWeiID"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["销售单ID"].Value = dtXiaoShouDanMingXi.Rows[j]["XiaoShouDanID"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["销售单编号"].Value = dtXiaoShouDanMingXi.Rows[j]["XiaoShouDanBianHao"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["编号"].Value = dtXiaoShouDanMingXi.Rows[j]["ChanPinBianHao"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["名称"].Value = dtXiaoShouDanMingXi.Rows[j]["ChanPinMingCheng"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["品牌"].Value = dtXiaoShouDanMingXi.Rows[j]["PinPaiMingCheng"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["品种"].Value = dtXiaoShouDanMingXi.Rows[j]["PinZhongMingCheng"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["所在仓位"].Value = dtXiaoShouDanMingXi.Rows[j]["CangWeiMingCheng"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["库存数"].Value = dtXiaoShouDanMingXi.Rows[j]["KuCunShuLiang"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["销售价格"].Value = dtXiaoShouDanMingXi.Rows[j]["DanJia"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["销售数量"].Value = dtXiaoShouDanMingXi.Rows[j]["ShuLiang"]; dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["小计"].Value = Convert.ToDecimal(dtXiaoShouDanMingXi.Rows[j]["DanJia"]) * Convert.ToDecimal(dtXiaoShouDanMingXi.Rows[j]["ShuLiang"]); dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["保修期"].Value = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[j]["BaoXiuQiID"]); try//try{}catch{}代码,try中如果有出错,直接跳到catch{}中,防止系统崩溃 { for (int k = 0; k < dtBaoXiuQi.Rows.Count; k++) { if (Convert.ToInt32(dtXiaoShouDanMingXi.Rows[j]["BaoXiuQiID"]) == Convert.ToInt32(dtBaoXiuQi.Rows[k]["BaoXiuQiID"]))//循环判断dtBaoXiuQi中,与销售单明细中保修期ID相等的行 { if (Convert.ToBoolean(dtBaoXiuQi.Rows[k]["YouXiaoFou"]))//如果此行有效否为True { dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["保修期"].Value = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[j]["BaoXiuQiID"]);//直接绑定到销售单的产品明细 } else//如果不是为True { dtBaoXiuQiWeiShanChu.Rows.Add();//dtBaoXiuQiWeiShanChu中增加一行空行 dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiMingCheng"] = dtBaoXiuQi.Rows[k]["BaoXiuQiMingCheng"].ToString().Trim() + "(已删除)";//保修期名称中加上"(已删除)"赋值给新添加的行 dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiID"] = Convert.ToInt32(dtBaoXiuQi.Rows[k]["BaoXiuQiID"]);//赋值保修期ID dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["YouXiaoFou"] = false;//赋值有效否 dtBaoXiuQi.Rows[k]["YouXiaoFou"] = true;//这一行添加到[dtBaoXiuQiWeiShanChu]后,把有效否改为真,避免重复添加 dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["保修期"].Value = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[j]["BaoXiuQiID"]);//最后绑定到销售单的产品明细 } break; } } } catch { } } } txtZheKou.Text = "10"; txtYouHuiJinE.Text = "0"; JiSuanZongJinE();//调用计算总金额方法 } private void JiSuanZongJinE() { decimal decZongJinE = 0;//总金额 for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)//循环产品明细表 { decimal decJiaGe = 0;//价格 try { decJiaGe = Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value);//获取价格,如果转化形态出错,则跳到catch{} if (decJiaGe < 0) { MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售价格】不能小于零!");//价格不能小于0 dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value = 0; decJiaGe = 0; } } catch { MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售价格】填写不正确!"); dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value = 0; decJiaGe = 0; } decimal decShuLiang = 0;//数量 try { decShuLiang = Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value);//获取数量,如果转化形态出错,则跳到catch{} if (decShuLiang < 1) { MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售数量】不能小于一!");//数量不能小于1 dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value = 1; decShuLiang = 1; } Convert.ToInt32(decShuLiang); } catch { MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售价格】填写不正确!"); dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value = 1; decShuLiang = 1; } dgvChanPinMingXi.Rows[i].Cells["小计"].Value = decJiaGe * decShuLiang;//每行的小计 decZongJinE += Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["小计"].Value);//累加总金额 } txtYingShouJinE.Text = decZongJinE.ToString();//把计算出的总金额赋值到应收金额文本框 if (cboFuKuanLeiXing.SelectedIndex == 1)//如果当前付款类型是"免费" { txtShiShouJinE.Text = "0";//实收金额为0 txtZheKou.Text = "0";//折扣为0 txtYouHuiJinE.Text = txtYingShouJinE.Text;//优惠金额等于应收金额 } JiSuanZhaoLing();//调用计算找零方法 } private void JiSuanZhaoLing() { try { if (Convert.ToDecimal(txtShiShouJinE.Text) < 0)//判断实收金额是否为负数 { MessageBox.Show("实收金额不能为负数!"); txtShiShouJinE.Text = "0"; } decimal decZhaoLing = (Convert.ToDecimal(txtShiShouJinE.Text) + Convert.ToDecimal(txtYouHuiJinE.Text) - Convert.ToDecimal(txtYingShouJinE.Text));//实收金额+优惠金额-应收金额=找零金额 txtZhaoLing.Text = decZhaoLing >= 0 ? decZhaoLing.ToString() : "0";//如果找零计算后为负数,改为0 } catch { if (txtShiShouJinE.Text != "") { MessageBox.Show("实收金额输入错误!"); } txtShiShouJinE.Text = "0"; } } </span>
(5)折扣文本框的,在控件有焦点时,按下并释放某个键时触发的事件
<span style="font-size:18px;">private void txtZheKou_KeyPress(object sender, KeyPressEventArgs e) { if (char.IsDigit(e.KeyChar) || e.KeyChar == '.' || (Keys)e.KeyChar == Keys.Back)//限制只能输入数字和小数点,和点击Backspace按钮 { } else { e.Handled = true; } } </span>
(6)折扣文本框的,当控件不再是窗体的活动控件时发生的事件
<span style="font-size:18px;">private void txtZheKou_Leave(object sender, EventArgs e) { if (txtZheKou.Text == "") { MessageBox.Show("折扣不能为空!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); txtZheKou.Focus(); txtZheKou.Text = "0"; return; } } </span>
(7)折扣文本框的,Text值改变时发生的事件
<span style="font-size:18px;">private void txtZheKou_TextChanged(object sender, EventArgs e) { try { if (Convert.ToDecimal(txtZheKou.Text) > 10) { MessageBox.Show("折扣不能超过10!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); txtZheKou.Text = "10"; JiSuanYouHuiJinE();//调用计算优惠金额方法 return; } else if (Convert.ToDecimal(txtZheKou.Text) < 0) { MessageBox.Show("折扣不能小于0!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); txtZheKou.Text = "10"; JiSuanYouHuiJinE();//调用计算优惠金额方法 return; } else if (txtZheKou.Text == "0")//如果折扣是0,则把付款类型改为免费,以及设置实收金额文本框不能输入 { cboFuKuanLeiXing.SelectedIndex = 1; txtShiShouJinE.ReadOnly = true; txtShiShouJinE.Text = "0"; } else { cboFuKuanLeiXing.SelectedIndex = 0; txtShiShouJinE.ReadOnly = false; } JiSuanYouHuiJinE();//调用计算优惠金额方法 } catch { if (txtZheKou.Text != "") { MessageBox.Show("请正确输入折扣!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); txtZheKou.Text = "10"; JiSuanYouHuiJinE(); return; } } } private void JiSuanYouHuiJinE() { try { decimal decYingShouJinE = Convert.ToDecimal(txtYingShouJinE.Text);//获取应收金额 decimal decZheKou = 1 - (Convert.ToDecimal(txtZheKou.Text) / 10);//获取折扣 txtYouHuiJinE.Text = (decYingShouJinE * decZheKou).ToString("0.0000");//计算优惠金额 JiSuanZhaoLing();//调用计算找零方法 } catch { } } </span>
(8) 实收金额文本框的,Text值改变时发生的事件
<span style="font-size:18px;">private void txtShiShouJinE_TextChanged(object sender, EventArgs e) { JiSuanZhaoLing();//调用计算找零方法 } </span>
(9)确认结账按钮的单击事件
<span style="font-size:18px;">private void btnBaoCun_Click(object sender, EventArgs e) { for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)//循环产品明细DGV { for (int j = 0; j < dtBaoXiuQiWeiShanChu.Rows.Count; j++)//循环未删除保修期表 { if (Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value) == Convert.ToInt32(dtBaoXiuQiWeiShanChu.Rows[j]["BaoXiuQiID"]) && Convert.ToBoolean(dtBaoXiuQiWeiShanChu.Rows[j]["YouXiaoFou"]) == false)//找出保修期相等的,判断有效否是否为真 { MessageBox.Show("第【" + (i + 1).ToString() + "】行的【保修期】已删除,请修改销售单再结账!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);//如果保修期已删除,则提示修改 return; } } } try { if ((Convert.ToDecimal(txtYingShouJinE.Text) - Convert.ToDecimal(txtYouHuiJinE.Text) - Convert.ToDecimal(txtShiShouJinE.Text)) > 0)//判断实收金额是否真确 { if (MessageBox.Show("收入实收金额不符,确定要完成付款吗?", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.No) { return; } } } catch { MessageBox.Show("金额输入不正确!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } int intFuKuanZhuangTaiID = 44;//默认为已付款 int intXiaoShouFangShiID = Convert.ToInt32(cboXiaoShouFangShi.SelectedValue);//获取销售方式ID int intFuKuanFangShiID = Convert.ToInt32(cboFuKuanFangShi.SelectedValue);//获取付款方式ID int intFuKuanLeiXingID = Convert.ToInt32(cboFuKuanLeiXing.SelectedValue);//获取付款类型ID decimal decYingShouJinE = Convert.ToDecimal(txtYingShouJinE.Text);//获取应收金额 decimal decShiShouJinE = Convert.ToDecimal(txtShiShouJinE.Text)-Convert.ToDecimal(txtZhaoLing.Text);//获取实收金额 string strJieZhangBianHao = DangRiJieZhangZuiDaDanJuShu("JZ");//获取结账单编号 int intChengGongCiShu = 0;//保存成功次数 for(int i=0;i<intGeShu;i++) { int intXiaoShouDanID = intXiaoShouDanIDs[i];//获取销售单ID decimal decYingShou = 0; for (int j = 0; j < dgvChanPinMingXi.Rows.Count; j++)//循环产品明细DGV { if (intXiaoShouDanID == Convert.ToInt32(dgvChanPinMingXi.Rows[j].Cells["销售单ID"].Value)) { decYingShou += Convert.ToDecimal(dgvChanPinMingXi.Rows[j].Cells["小计"].Value);//把销售单ID一样的小计累加起来,作为应收金额 } } if (Convert.ToInt32(cboFuKuanLeiXing.SelectedValue) == 52)//如果付款类型为免费,则应收金额为0 { decYingShou = 0; } decimal decShiShou = decYingShou * Convert.ToDecimal(txtZheKou.Text) / 10;//计算实收金额 if ((decShiShou > decShiShouJinE) || (i == (intGeShu - 1)))//如果少收了钱的情况下,会出现实收金额过少,则剩下的单据的实收金额,就等于等下的钱了 { decShiShou = decShiShouJinE; } if (myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_XiaoShouDanFuKuan(intFuKuanZhuangTaiID, intXiaoShouFangShiID, intFuKuanFangShiID, intFuKuanLeiXingID, decYingShou, decShiShou, strJieZhangBianHao, intXiaoShouDanID) > 0)//修改销售单为付款,和付款的各项属性,金额 { intChengGongCiShu++;//成功次数累加 decShiShouJinE -= decShiShou; } } if (intChengGongCiShu == intGeShu) { if (intFuKuanPanDuan == 0)//判断是不是销售记录打开的付款窗体 { if (MessageBox.Show("付款成功,结账单编号【" + strJieZhangBianHao + "】是否继续录入?", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes) { this.Dispose(); this.Close(); } else { this.Dispose(); this.Close(); myTabControlp.Controls.RemoveAt(myTabControlp.SelectedIndex); } } else { MessageBox.Show("付款成功!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.Dispose(); this.Close(); } } else { MessageBox.Show("付款失败!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } private string DangRiJieZhangZuiDaDanJuShu(string strQianZhui) { string strDanJuShu = (Convert.ToInt32(myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunJieZhangZuiDaDanJuShu().Rows[0][0]) + 1).ToString();//获取当日最大单据数 if (strDanJuShu.Length == 1)//判断长度 { strDanJuShu = "000" + strDanJuShu;//如果长度为1,则在前面加000 } if (strDanJuShu.Length == 2) { strDanJuShu = "00" + strDanJuShu;//如果长度为2,则在前面加00 } if (strDanJuShu.Length == 3) { strDanJuShu = "0" + strDanJuShu;//如果长度为3,则在前面加0 } string Nian = DateTime.Now.Year.ToString();//获取年份 string Yue = DateTime.Now.Month.ToString();//获取月份 Yue = (Yue.Length < 2) ? ("0" + Yue) : Yue;//如果月份位数为1,则前面加0 string Ri = DateTime.Now.Day.ToString();//获取天数 Ri = (Ri.Length < 2) ? ("0" + Ri) : Ri;//如果天数位数为1,则前面加0 return strQianZhui + Nian + Yue + Ri + strDanJuShu;//返回一个拼接完成的结账单号 } </span>
注:此文章只供学习参考,禁止用于商业用途。
相关文章推荐
- 聚类集成中差异性测量方法
- 人人都是架构师: 约束和原则
- Linux python 配置
- 千山万水之Hibernate(八)——继承映射
- [C/C++标准库]_[初级]_[计算结构体成员的偏移量]
- ZigBee入门之Z-Stack协议栈总体设计
- so文件的编译
- 会员卡管理系统技术解析(六) 会员卡退卡
- [C/C++标准库]_[初级]_[计算结构体成员的偏移量]
- 网络新闻评论观点挖掘系统实现
- csu - 1566: The Maze Makers (bfs)
- MySQL 命令汇总
- 消息队列处理方式
- iOS7/8 UIButton高亮状态延迟有关问题全解
- ANSIC和Unicode之间的转换
- COJ 0501 取数游戏(TPM)
- 一.计算机网络概述
- 任务调度系统
- Java 正则表达式
- 网上找到的JNI用法