海马汽车经销商管理系统技术解析(十七)新增出库
来源:互联网 发布:windows 定时任务工具 编辑:程序博客网 时间:2024/04/28 16:01
对出库的配件进行记录。主界面入下:
新增界面如下:
选择仓库或者配件时要注意:该仓库里是否存在该配件或该配件是否存在于该仓库。
填写数量时要注意:该仓库库存数是否充足。
从【入库新增】界面可以看到控件有:
控件
说明
文本框(TextBox)
编辑控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以设置事件。
日期控件(DateTimePicKer)
表格(DataGridView)
下拉框(ComboBox)
按钮(Button)
1、数据库功能实现
第一步:数据库
1、表和关系
表1、出入库表(PW_ComeInAndGoOutList)
列名
数据类型
主键/外键
说明
ComeInAndGoOutID
int - Identity
主键
出入库ID
ComeInAndGoOutOddNembers
nchar (20)
出入库单号
ComeInAndGoOutGross
decimal (18, 2)
出入库总数量
ComeInAndGoOutData
datetime
出入库时间
DrawUp_StaffID
int
外键
员工档案表,编制人_员工ID
ExAminePerson_StaffID
int
外键
员工档案表,审核人_员工ID
IfComeIn
bit
入库否
IfEffective
bit
有效否
表2、出入库明细表(PW_ComeInAndGoOutMinuteList)
列名
数据类型
主键/外键
说明
ComeInAndGoOutMinuteID
int
主键
出入库明细ID
ComeInAndGoOutID
int
外键
出入库表,出入库ID
PartsID
int
外键
配件表,配件ID
StorageID
int
外键
仓库表,仓库ID
AtributeMinuteID_ComeInAndGoOutType
int
外键
属性明细表,属性明细ID_出入库类型
ComeInAndGoOutQuantity
decimal (18, 2)
出入库数量
ComeInAndGoOutPrice
decimal (18, 2)
出入库单价
表3、库存表(BM_StockList)
列名
数据类型
主键/外键
说明
StockID
int - Identity
主键
库存ID
PartsID
int
外键
配件表,配件ID
StorageID
int
外键
仓库表,仓库ID
StockNumber
decimal (18, 2)
库存数
表4、仓库表(BM_StorageList)
列名
数据类型
主键/外键
说明
StorageID
int - Identity
主键
仓库ID
StorageName
nchar (20)
仓库名
Dimension
decimal (18, 2)
容积
功能实现
1、 根据配件查询所在的所有仓库
第一步:数据库存储过程
IF(@TYPE='FRM_ChuKuGuanLi_Insert_SelectPartsInStorage')BEGINSELECT BM_StockList.StorageID, BM_StorageList.StorageName FROM BM_StockList INNER JOIN BM_StorageList ON BM_StockList.StorageID = BM_StorageList.StorageID WHERE BM_StockList.PartsID=@PartsID END
第二步:逻辑层(BLL)
//根据所选配件查询该配件存在的所有仓库[OperationContract] public DataSet FRM_ChuKuGuanLi_Insert_SelectPartsInStorage(int intPartsID) { SqlParameter[] mySqlParameters = { new SqlParameter("@TYPE",SqlDbType.NChar), new SqlParameter("@PartsID",SqlDbType.Int), }; mySqlParameters[0].Value = "FRM_ChuKuGuanLi_Insert_SelectPartsInStorage"; mySqlParameters[1].Value = intPartsID; DataTable dt = myDALMethod.QueryDataTable("库存管理_FRM_ChuKuGuanLi_Insert", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; //返回数据集 }
第三步:界面层(UIL)配件名称索引改变事件
BLL海马汽车销售系统.库存管理.FRM_ChuKuGuanLi_Insert.FRM_ChuKuGuanLi_InsertClient myFRM_ChuKuGuanLi_InsertClient = new BLL海马汽车销售系统.库存管理.FRM_ChuKuGuanLi_Insert.FRM_ChuKuGuanLi_InsertClient();private void cboPartsName_SelectedIndexChanged(object sender, EventArgs e) { if(intCount==1) { //根据所选配件查询仓库 DataTable dtStorage = myFRM_ChuKuGuanLi_InsertClient.FRM_ChuKuGuanLi_Insert_SelectPartsInStorage(Convert.ToInt32(cboPartsName.SelectedValue)).Tables[0]; cboStorageName.DataSource = dtStorage;//为【仓库名称】绑定数据源 cboStorageName.DisplayMember = "StorageName";//设置显示的属性 cboStorageName.ValueMember = "StorageID";//设置下拉框中的值 } }
2、查询库存数—【增加】按钮点击事件
第一步:数据库存储过程
IF(@TYPE='FRM_RuKuGuanLi_Insert_SelectKuCun')BEGINSELECT StockID,StockNumber FROM BM_StockList WHERE PartsID=@PartsID AND StorageID=@StorageIDEND
第二步:逻辑层(BLL)
//根据配件与仓库查询库存数[OperationContract] public DataSet FRM_RuKuGuanLi_Insert_SelectKuCun(int intPartsID, int intStorageID) { SqlParameter[] mySqlParameters = { new SqlParameter("@TYPE",SqlDbType.NChar), new SqlParameter("@PartsID",SqlDbType.Int), new SqlParameter("@StorageID",SqlDbType.Int), }; mySqlParameters[0].Value = "FRM_RuKuGuanLi_Insert_SelectKuCun"; mySqlParameters[1].Value = intPartsID; mySqlParameters[2].Value = intStorageID; DataTable dt= myDALMethod.QueryDataTable("库存管理_FRM_RuKuGuanLi_Insert", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; //返回数据集 }
第三步:界面层(UIL)
BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient myFRM_RuKuGuanLi_InsertClient = new BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient();private void btnInsert_Click(object sender, EventArgs e) { if (dgvGoOutMinute.Rows.Count > 0)//dgv不为空 { for (int i = 0; i < dgvGoOutMinute.Rows.Count; i++)//循环dgv { //如果dgv中存在相同的配件以相同的出库类型从相同仓库出库的单据 if (Convert.ToInt32(cboPartsName.SelectedValue) == Convert.ToInt32(dgvGoOutMinute.Rows[i].Cells["配件ID"].Value) && Convert.ToInt32(cboStorageName.SelectedValue) == Convert.ToInt32(dgvGoOutMinute.Rows[i].Cells["仓库ID"].Value) && Convert.ToInt32(cboGoOutType.SelectedValue) == Convert.ToInt32(dgvGoOutMinute.Rows[i].Cells["出库类型ID"].Value)) { MessageBox.Show("该配件以该类型从该目标仓库出库的单据已存在"); return; } } } if (txtPrice.Text == "")//出库单价为空 { MessageBox.Show("出库单价不能为空!"); return; } if (txtQuantity.Text == "")//出库数量为空 { MessageBox.Show("出库数量不能为空!"); return; } //根据配件和仓库查询库存数 DataTable dtKunCun = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectKuCun(Convert.ToInt32(cboPartsName.SelectedValue), Convert.ToInt32(cboStorageName.SelectedValue)).Tables[0]; if (dtKunCun.Rows.Count > 0)//如果有数据 { decimal decKuCunShu = Convert.ToDecimal(dtKunCun.Rows[0]["StockNumber"]); if (decKuCunShu > Convert.ToDecimal(txtQuantity.Text))//如果库存充足 { //dgv增加一行 dgvGoOutMinute.Rows.Add(); //把信息添加到dgv中 dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["配件ID"].Value = Convert.ToInt32(cboPartsName.SelectedValue); dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["配件名称"].Value = cboPartsName.Text; dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["配件代码"].Value = txtPartsCode.Text; dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["单位"].Value = txtUnit.Text; dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["规格"].Value = txtGuiGe.Text; dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["出库类型ID"].Value = Convert.ToInt32(cboGoOutType.SelectedValue); dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["出库类型"].Value = cboGoOutType.Text; dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["仓库名称"].Value = cboStorageName.Text; dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["仓库ID"].Value = Convert.ToInt32(cboStorageName.SelectedValue); dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["出库单价"].Value = txtPrice.Text; dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["出库数量"].Value = txtQuantity.Text; dgvGoOutMinute.Rows[dgvGoOutMinute.Rows.Count - 1].Cells["出库金额"].Value = txtMoney.Text; } else//如果库存不足 { MessageBox.Show("该仓库库存不足!"); } } else//如果没数据 { MessageBox.Show("该仓库不存在该配件!"); } HeJi(); } public void HeJi() { decimal decZongJiE = 0; decimal decZongLiang = 0; if (dgvGoOutMinute.Rows.Count > 0) //dgv不为空 { for (int i = 0; i < dgvGoOutMinute.Rows.Count; i++)//循环dgv { //合计出库金额与出库数量 decZongJiE += Convert.ToDecimal(dgvGoOutMinute.Rows[i].Cells["出库金额"].Value); decZongLiang += Convert.ToDecimal(dgvGoOutMinute.Rows[i].Cells["出库数量"].Value); } } //赋值给【出库金额】与【出库数量】 txtGross.Text = decZongLiang.ToString().Trim(); txtAmount.Text = decZongJiE.ToString().Trim(); }
3、保存
第一步:数据库存储过程
IF(@TYPE='FRM_RuKuGuanLi_Insert_btnInsert_ClickInsertComeInAndGoOut')BEGININSERT PW_ComeInAndGoOutList(ComeInAndGoOutOddNembers, ComeInAndGoOutGross, ComeInAndGoOutData, DrawUp_StaffID, ExAminePerson_StaffID, IfComeIn,IfEffective) VALUES (@ComeInAndGoOutOddNembers, @ComeInAndGoOutGross, @ComeInAndGoOutData, @DrawUp_StaffID, @ExAminePerson_StaffID, @IfComeIn,1) SELECT @@IDENTITYENDIF(@TYPE='FRM_RuKuGuanLi_Insert_btnInsert_ClickInsertComeInAndGoOutMinute')BEGININSERT PW_ComeInAndGoOutMinuteList(ComeInAndGoOutID, PartsID, StorageID, AtributeMinuteID_ComeInAndGoOutType, ComeInAndGoOutQuantity, ComeInAndGoOutPrice)VALUES (@ComeInAndGoOutID, @PartsID, @StorageID, @AtributeMinuteID_ComeInAndGoOutType, @ComeInAndGoOutQuantity, @ComeInAndGoOutPrice) ENDIF(@TYPE='FRM_RuKuGuanLi_Insert_btnInsert_ClickUpdateStockNumber')BEGINUPDATE BM_StockList SET StockNumber=@StockNumber WHERE BM_StockList.StockID=@StockIDENDIF(@TYPE='FRM_RuKuGuanLi_Insert_SelectKuCun')BEGINSELECT StockID,StockNumber FROM BM_StockList WHERE PartsID=@PartsID AND StorageID=@StorageIDEND
第二步:逻辑层(BLL)
//保存出库信息[OperationContract] public int FRM_RuKuGuanLi_Insert_btnInsert_ClickInsertComeInAndGoOut(string strComeInAndGoOutOddNembers, decimal decComeInAndGoOutGross, DateTime dtmComeInAndGoOutData, int intDrawUp, int intExAminePerson, bool blnIfComeIn) { SqlParameter[] mySqlParameters = { new SqlParameter("@TYPE",SqlDbType.NChar), new SqlParameter("@ComeInAndGoOutOddNembers",SqlDbType.NChar), new SqlParameter("@ComeInAndGoOutGross",SqlDbType.Decimal), new SqlParameter("@ComeInAndGoOutData",SqlDbType.DateTime), new SqlParameter("@DrawUp_StaffID",SqlDbType.Int), new SqlParameter("@ExAminePerson_StaffID",SqlDbType.Int), new SqlParameter("@IfComeIn",SqlDbType.Bit), }; mySqlParameters[0].Value = "FRM_RuKuGuanLi_Insert_btnInsert_ClickInsertComeInAndGoOut"; mySqlParameters[1].Value =strComeInAndGoOutOddNembers; mySqlParameters[2].Value =decComeInAndGoOutGross; mySqlParameters[3].Value =dtmComeInAndGoOutData; mySqlParameters[4].Value =intDrawUp; mySqlParameters[5].Value =intExAminePerson; mySqlParameters[6].Value = blnIfComeIn; DataTable dt = myDALMethod.QueryDataTable("库存管理_FRM_RuKuGuanLi_Insert", mySqlParameters); return Convert.ToInt32(dt.Rows[0][0]); }//保存出库明细信息 [OperationContract] public int FRM_RuKuGuanLi_Insert_btnInsert_ClickInsertComeInAndGoOutMinute(int intComeInAndGoOutID, int intPartsID, int intStorageID, int intComeInAndGoOutType, decimal decComeInAndGoOutQuantity, decimal decComeInAndGoOutPrice) { SqlParameter[] mySqlParameters = { new SqlParameter("@TYPE",SqlDbType.NChar), new SqlParameter("@ComeInAndGoOutID",SqlDbType.Int), new SqlParameter("@PartsID",SqlDbType.Int), new SqlParameter("@StorageID",SqlDbType.Int), new SqlParameter("@AtributeMinuteID_ComeInAndGoOutType",SqlDbType.Int), new SqlParameter("@ComeInAndGoOutQuantity",SqlDbType.Decimal), new SqlParameter("@ComeInAndGoOutPrice",SqlDbType.Decimal), }; mySqlParameters[0].Value = "FRM_RuKuGuanLi_Insert_btnInsert_ClickInsertComeInAndGoOutMinute"; mySqlParameters[1].Value = intComeInAndGoOutID; mySqlParameters[2].Value = intPartsID; mySqlParameters[3].Value = intStorageID; mySqlParameters[4].Value =intComeInAndGoOutType; mySqlParameters[5].Value =decComeInAndGoOutQuantity; mySqlParameters[6].Value = decComeInAndGoOutPrice; return myDALMethod.UpdateData("库存管理_FRM_RuKuGuanLi_Insert", mySqlParameters); } [OperationContract]//修改库存数 public int FRM_RuKuGuanLi_Insert_btnInsert_ClickUpdateStockNumber(decimal decStockNumber, int intStockID) { SqlParameter[] mySqlParameters = { new SqlParameter("@TYPE",SqlDbType.NChar), new SqlParameter("@StockNumber",SqlDbType.Decimal), new SqlParameter("@StockID",SqlDbType.Int), }; mySqlParameters[0].Value = "FRM_RuKuGuanLi_Insert_btnInsert_ClickUpdateStockNumber"; mySqlParameters[1].Value = decStockNumber; mySqlParameters[2].Value = intStockID; return myDALMethod.UpdateData("库存管理_FRM_RuKuGuanLi_Insert", mySqlParameters); } //查询库存数 [OperationContract] public DataSet FRM_RuKuGuanLi_Insert_SelectKuCun(int intPartsID, int intStorageID) { SqlParameter[] mySqlParameters = { new SqlParameter("@TYPE",SqlDbType.NChar), new SqlParameter("@PartsID",SqlDbType.Int), new SqlParameter("@StorageID",SqlDbType.Int), }; mySqlParameters[0].Value = "FRM_RuKuGuanLi_Insert_SelectKuCun"; mySqlParameters[1].Value = intPartsID; mySqlParameters[2].Value = intStorageID; DataTable dt= myDALMethod.QueryDataTable("库存管理_FRM_RuKuGuanLi_Insert", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; }
第三步:界面层(UIL)
BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient myFRM_RuKuGuanLi_InsertClient = new BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient();private void btnSave_Click(object sender, EventArgs e) { int InsertComeInAndGoOutMinute = 0; string strXiaoShouShouKuan = "CK"; string strComeInAndGoOutOddNembers = ShengChengDanHao(strXiaoShouShouKuan);//生成出库单号 //给参数赋值 decimal decComeInAndGoOutGross = Convert.ToDecimal(txtGross.Text); DateTime dtmComeInAndGoOutData = Convert.ToDateTime(dtpGoOutData.Value); int intDrawUp = Convert.ToInt32(cboDrawUp.SelectedValue); int intExAminePerson = Convert.ToInt32(cboExAminePerson.SelectedValue); bool blnIfComeIn = false; //把出库信息保存到数据库 int intGoOut = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_btnInsert_ClickInsertComeInAndGoOut(strComeInAndGoOutOddNembers, decComeInAndGoOutGross, dtmComeInAndGoOutData, intDrawUp, intExAminePerson, blnIfComeIn); if (dgvGoOutMinute.Rows.Count > 0) //如果dav不为空 { for (int i = 0; i < dgvGoOutMinute.Rows.Count; i++)//循环dgv { //根据配件和仓库查询库存 DataTable dtKunCun = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectKuCun(Convert.ToInt32(dgvGoOutMinute.Rows[i].Cells["配件ID"].Value), Convert.ToInt32(dgvGoOutMinute.Rows[i].Cells["仓库ID"].Value)).Tables[0]; if (dtKunCun.Rows.Count > 0)//如果有数据 { //修改库存数 decimal decKuCunShu = Convert.ToDecimal(dtKunCun.Rows[0]["StockNumber"])-Convert.ToDecimal(dgvGoOutMinute.Rows[i].Cells["出库数量"].Value); int intUpdate = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_btnInsert_ClickUpdateStockNumber(decKuCunShu, Convert.ToInt32(dtKunCun.Rows[0]["StockID"])); } //给参数赋值 int intComeInAndGoOutID = intGoOut; int intPartsID = Convert.ToInt32(dgvGoOutMinute.Rows[i].Cells["配件iD"].Value); int intStorageID = Convert.ToInt32(dgvGoOutMinute.Rows[i].Cells["仓库ID"].Value); int intComeInAndGoOutType = Convert.ToInt32(dgvGoOutMinute.Rows[i].Cells["出库类型ID"].Value); decimal decComeInAndGoOutQuantity = Convert.ToDecimal(dgvGoOutMinute.Rows[i].Cells["出库数量"].Value); decimal decComeInAndGoOutPrice = Convert.ToDecimal(dgvGoOutMinute.Rows[i].Cells["出库单价"].Value); //把出库明细保存到数据库 InsertComeInAndGoOutMinute = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_btnInsert_ClickInsertComeInAndGoOutMinute(intComeInAndGoOutID, intPartsID, intStorageID, intComeInAndGoOutType, decComeInAndGoOutQuantity, decComeInAndGoOutPrice); } } if (intGoOut > 0 || InsertComeInAndGoOutMinute > 0)//如果方法调用成功 { MessageBox.Show("保存成功!"); txtGoOutOddNember.Text = strComeInAndGoOutOddNembers.Trim(); } }
以上仅供学习参考,禁止用于商业用途!!!
- 海马汽车经销商管理系统技术解析(十七)新增出库
- 海马汽车经销商管理系统技术解析(十八)修改出库
- 海马汽车经销商管理系统技术解析(四)新增预约
- 海马汽车经销商管理系统技术解析(十五)新增入库
- 海马汽车经销商管理系统技术解析(十九)新增调拨
- 海马汽车经销商管理系统技术解析(十三)结算
- 海马汽车经销商管理系统技术解析(十四)出厂
- 海马汽车经销商管理系统技术解析(三)应收管理
- 海马汽车经销商管理系统技术解析(四)保养管理
- 海马汽车经销商管理系统技术解析(一)服务配置流程
- 海马汽车经销商管理系统技术解析(一)新建项目,搭建WCF架构
- 海马汽车经销商管理系统技术解析(二)登陆验证
- 海马汽车经销商管理系统技术解析(二)维修收银
- 海马汽车经销商管理系统技术解析(五)车辆续保提醒
- 海马汽车经销商管理系统技术解析(六)顾客生日祝贺
- 海马汽车经销商管理系统技术解析(七)投诉处理
- 海马汽车经销商管理系统技术解析(五)预约修改
- 海马汽车经销商管理系统技术解析(六)定位预约单
- Linux中二进制软件包和源码软件包
- 三公能控牌吗╳Ψ【在线演示QQ:194714506】
- 谈谈移动互联网应用的用户注册登录安全考虑之不可逆加密的应用原则
- 3公控牌╯♀【在线演示QQ:194714506】
- 3公控牌技巧ξ︽【在线演示QQ:194714506】
- 海马汽车经销商管理系统技术解析(十七)新增出库
- 3公控牌教学★▄【在线演示QQ:194714506】
- 【C语言/算法之 01 背包】完全背包
- 3公控牌教程∏∑【在线演示QQ:194714506】
- C# 字符串md5加密
- 如何撤销浏览器注入JS代码的执行效果?
- 第三章四十题
- 3公控牌方法♂▄【在线演示QQ:194714506】
- 菜鸟接触sora学编程点滴1