新增调拨
调拨是各个仓库间的货物调动。主界面见下图:
新增调拨单
选择调入仓要注意仓库的容量。
选择调出仓要注意该仓库的配件库存数。
调入仓与调出仓不能相同。
从【调拨新增】界面看到控件有:
控件 |
说明 |
文本框(TextBox) |
编辑控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以设置事件。 |
下拉框(ComboBox) | |
日期控件(DateTimePicKer) | |
表格(DataGridView) | |
按钮(Button) |
1、数据库功能实现
第一步:数据库
1、表和关系
表1、调拨单表(PW_AllotRecordList)
列名 |
数据类型 |
主键/外键 |
说明 |
AllotRecordID |
int - Identity |
主键 |
调拨单ID |
AllotOddNumbers |
nchar (20) |
|
调拨单号 |
AllotData |
datetime |
|
调拨日期 |
AllotGross |
decimal (18, 2) |
|
调拨总量 |
DrawUp_StaffID |
int |
外键 |
员工档案表,制单人_员工ID |
ExAminePerson_StaffID |
int |
外键 |
员工档案表,核准人_员工ID |
IfEffective |
bit |
|
有效否 |
表2、调拨单明细表(PW_AllotRecordMinuteList)
列名 |
数据类型 |
主键/外键 |
说明 |
AllotRecordMinuteID |
int - Identity |
主键 |
调拨单明细ID |
AllotRecordID |
int |
外键 |
调拨单表,调拨单ID |
PartsID |
int |
外键 |
配件表,配件ID |
StorageID_ComeInStorage |
int |
外键 |
仓库表,仓库ID_调入仓 |
StorageID_GoOutStorage |
int |
外键 |
仓库表,仓库ID_调出仓 |
Quantity |
decimal (18, 2) |
|
数量 |
表3、配件表(BM_PartsList)
列名 |
数据类型 |
主键/外键 |
说明 |
PartsID |
int - Identity |
主键 |
配件ID |
PartsCoding |
nchar (20) |
|
配件代码 |
PartsName |
nchar (20) |
|
配件名称 |
CarModels |
nchar (20) |
|
车型 |
Specification |
nchar (20) |
|
规格 |
AttributeMinuteID_Unit |
int |
外键 |
属性明细表,属性明细ID_单位 |
SellPrice |
nchar (20) |
|
销售价格 |
表4:员工档案表(BM_StaffRecordList)
列名 |
数据类型 |
主键/外键 |
说明 |
StaffID |
int - Identity |
主键 |
员工ID |
StaffBasicDataID |
int |
外键 |
员工基本资料表,员工基本资料ID |
StaffNumber |
nchar (20) |
|
员工编号 |
SuperiorCode |
nchar (20) |
|
上级代码 |
StaffName |
nchar (20) |
|
员工姓名 |
TheGenusShop |
nchar (50) |
|
所属门店 |
SectionID |
int |
外键 |
部门表,部门ID |
TeamID |
int |
外键 |
班组表,班组ID |
OtherLinkWay |
nchar (50) |
|
其他联系方式 |
MonthRestDay |
datetime |
|
月休息日 |
StartWorkTime |
datetime |
|
从业时间 |
BasicWages |
decimal (18, 2) |
|
基本工资 |
OtherWages |
decimal (18, 2) |
|
其他工资 |
IfApprentice |
bit |
|
是否学徒 |
IfServiceman |
bit |
|
是否维修技工 |
IfCanGet |
bit |
|
是否可领料 |
IfInspectorGeneral |
bit |
|
是否总检人 |
IfTestRun |
bit |
|
是否试车人 |
IfSalesman |
bit |
|
是否业务员 |
IfLeaveOffice |
bit |
|
离职否 |
StaffPicture |
nchar (1000) |
|
员工照片 |
表5、仓库表(BM_StorageList)
列名 |
数据类型 |
主键/外键 |
说明 |
StorageID |
int - Identity |
主键 |
仓库ID |
StorageName |
nchar (20) |
|
仓库名 |
Dimension |
decimal (18, 2) |
|
容积 |
2、功能实现
1、增加调拨明细——【调拨新增】界面的【增加】按钮点击事件。
第三步:界面层(UIL)
BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient myFRM_RuKuGuanLi_InsertClient =
new BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient();
BLL海马汽车销售系统.库存管理.FRM_ChuKuGuanLi_Insert.FRM_ChuKuGuanLi_InsertClient myFRM_ChuKuGuanLi_InsertClient =
new BLL海马汽车销售系统.库存管理.FRM_ChuKuGuanLi_Insert.FRM_ChuKuGuanLi_InsertClient();
private void btnInsert_Click(object sender, EventArgs e)
{
if (Convert.ToInt32(cboGoOutStorage.SelectedValue) == Convert.ToInt32(cboComeInStorage.SelectedValue))//如果调出仓与调入仓相同
{
MessageBox.Show("调入仓与调出仓不能为同一仓库!");
return;
}
if (txtQuantity.Text == "")//如果调拨数量为空
{
MessageBox.Show("请输入数量!");
}
if (dgvComeInAndGoOut.Rows.Count > 0)//如果dgv不为空
{
for (int i = 0; i < dgvComeInAndGoOut.Rows.Count; i++)//循环表
{
//如果dgv中已存在该配件从该调出仓调入该调入仓的单据
if (Convert.ToInt32(cboPartsName.SelectedValue) == Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["配件ID"].Value)
&& Convert.ToInt32(cboGoOutStorage.SelectedValue) == Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["调入仓ID"].Value)
&& Convert.ToInt32(cboComeInStorage.SelectedValue) == Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["调出仓ID"].Value))
{
MessageBox.Show("该配件从该目标仓库中调出进入该目标仓库的单据已存在!");
return;
}
}
}
decimal decKuCunShu = 0;
//根据配件与调出仓查询库存数
DataTable dtKunCun = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectKuCun(Convert.ToInt32(cboPartsName.SelectedValue), Convert.ToInt32(cboGoOutStorage.SelectedValue)).Tables[0];
if (dtKunCun.Rows.Count > 0)//如果有数据
{
//提取库存数
decKuCunShu = Convert.ToDecimal(dtKunCun.Rows[0]["StockNumber"]);
}
else
{
MessageBox.Show("调出仓中没有改配件!");
return;
}
if (decKuCunShu < Convert.ToDecimal(txtQuantity.Text))//如果库存不足
{
MessageBox.Show("该配件在该仓库库存不足!");
return;
}
//根据调入仓查询仓库容量
DataTable dtKuCun = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectCangKuRoLiang(Convert.ToInt32(cboComeInStorage.SelectedValue)).Tables[0];
//提取仓库容量
decimal decKuCun = Convert.ToDecimal(dtKuCun.Rows[0]["Dimension"]);
//根据调入仓查询已用容量
DataTable dtYiYongRoLiang = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectCangkuYiYongRoLiang(Convert.ToInt32(cboComeInStorage.SelectedValue)).Tables[0];
decimal decYiYongRoLiang=0;
for (int j = 0; j < dtYiYongRoLiang.Rows.Count; j++)//循环表
{
//计算已用的容量
decYiYongRoLiang += Convert.ToDecimal(dtYiYongRoLiang.Rows[j]["StockNumber"]) * Convert.ToDecimal(dtYiYongRoLiang.Rows[j]["Specification"]);
}
//计算可用容量
decimal decKeYongRoLiang = decKuCun - decYiYongRoLiang;
if (dgvComeInAndGoOut.Rows.Count > 0)
{
for (int k = 0; k < dgvComeInAndGoOut.Rows.Count; k++)//循环dgv
{
//如果控件中的调入仓与dgv中的调入仓相同
if (Convert.ToInt32(cboComeInStorage.SelectedValue) == Convert.ToInt32(dgvComeInAndGoOut.Rows[k].Cells["调入ID"].Value))
{
//计算可用容量
decKeYongRoLiang = decKeYongRoLiang - Convert.ToDecimal(dgvComeInAndGoOut.Rows[k].Cells["数量"].Value) * Convert.ToDecimal(dgvComeInAndGoOut.Rows[k].Cells["规格"].Value);
}
}
}
if (decKeYongRoLiang > Convert.ToDecimal(txtGuiGe.Text) * Convert.ToDecimal(txtQuantity.Text))//如果仓库容量充足
{
//把调拨明细信息增加到dgv
dgvComeInAndGoOut.Rows.Add();
dgvComeInAndGoOut.Rows[dgvComeInAndGoOut.Rows.Count - 1].Cells["配件ID"].Value = cboPartsName.SelectedValue;
dgvComeInAndGoOut.Rows[dgvComeInAndGoOut.Rows.Count - 1].Cells["配件名称"].Value = cboPartsName.Text;
dgvComeInAndGoOut.Rows[dgvComeInAndGoOut.Rows.Count - 1].Cells["配件编码"].Value = txtPartsCode.Text;
dgvComeInAndGoOut.Rows[dgvComeInAndGoOut.Rows.Count - 1].Cells["规格"].Value = txtGuiGe.Text;
dgvComeInAndGoOut.Rows[dgvComeInAndGoOut.Rows.Count - 1].Cells["单位"].Value = txtUnit.Text;
dgvComeInAndGoOut.Rows[dgvComeInAndGoOut.Rows.Count - 1].Cells["调入仓ID"].Value = cboComeInStorage.SelectedValue;
dgvComeInAndGoOut.Rows[dgvComeInAndGoOut.Rows.Count - 1].Cells["调入仓"].Value = cboComeInStorage.Text;
dgvComeInAndGoOut.Rows[dgvComeInAndGoOut.Rows.Count - 1].Cells["调出仓ID"].Value = cboGoOutStorage.SelectedValue;
dgvComeInAndGoOut.Rows[dgvComeInAndGoOut.Rows.Count - 1].Cells["调出仓"].Value = cboGoOutStorage.Text;
dgvComeInAndGoOut.Rows[dgvComeInAndGoOut.Rows.Count - 1].Cells["数量"].Value = txtQuantity.Text;
}
else
{
MessageBox.Show("调入仓剩余空间不足!");
}
HeJi();//调用自定义方法
}
public void HeJi()
{
decimal decZongLiang = 0;
if (dgvComeInAndGoOut.Rows.Count > 0)//如果dgv不为空
{
for (int i = 0; i < dgvComeInAndGoOut.Rows.Count; i++)//循环dgv
{
//计算总数量
decZongLiang += Convert.ToDecimal(dgvComeInAndGoOut.Rows[i].Cells["数量"].Value);
}
}
//给【总量】赋值
txtGross.Text = decZongLiang.ToString().Trim();
}
2、保存调拨信息
第一步:界面层(UIL)
BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient myFRM_RuKuGuanLi_InsertClient =
new BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient();
BLL海马汽车销售系统.库存管理.FRM_DiaoBoGuanLi_Insert.FRM_DiaoBoGuanLi_InsertClient myFRM_DiaoBoGuanLi_InsertClient =
new BLL海马汽车销售系统.库存管理.FRM_DiaoBoGuanLi_Insert.FRM_DiaoBoGuanLi_InsertClient();
private void btnSave_Click(object sender, EventArgs e)
{
int intInsertAllotRecordMinute=0;
//给变量赋值
string strXiaoShouShouKuan="DB";
string strAllotOddNumbers = ShengChengDanHao(strXiaoShouShouKuan);//生成单号
DateTime dtmAllotData = dtpComeInAndGoOutData.Value;
decimal decAllotGross =Convert.ToDecimal(txtGross.Text);
int intDrawUp = Convert.ToInt32(cboDrawUp.SelectedValue);
int intExAminePerson = Convert.ToInt32(cboExAminePerson.SelectedValue);
bool blnIfEffective = true;
//把调拨信息保存到数据库
int intInsertAllotRecord = myFRM_DiaoBoGuanLi_InsertClient.FRM_DiaoBoGuanLi_btnSave_ClickAllotRecord(strAllotOddNumbers,dtmAllotData,decAllotGross,
intDrawUp,intExAminePerson, blnIfEffective);
if (dgvComeInAndGoOut.Rows.Count > 0)//如果dgv不为空
{
for (int i = 0; i < dgvComeInAndGoOut.Rows.Count; i++)//循环dgv
{
//根据配件与调入仓查询库存数
DataTable dtKunCun = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectKuCun(Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["配件ID"].Value), Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["调入仓ID"].Value)).Tables[0];
if (dtKunCun.Rows.Count > 0)//如果存在数据
{
//计算库存数并保存进数据库
decimal decKuCunShu = Convert.ToDecimal(dgvComeInAndGoOut.Rows[i].Cells["数量"].Value) + Convert.ToDecimal(dtKunCun.Rows[0]["StockNumber"]);
int intUpdate = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_btnInsert_ClickUpdateStockNumber(decKuCunShu, Convert.ToInt32(dtKunCun.Rows[0]["StockID"]));
}
else//如果没有数据
{
//新增库存配件
int intInsertStock = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_InsertStock(Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["配件ID"].Value), Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["调入仓ID"].Value), Convert.ToDecimal(dgvComeInAndGoOut.Rows[i].Cells["数量"].Value));
}
//根据配件与调出仓查询库存数
DataTable dtKunCun1 = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectKuCun(Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["配件ID"].Value), Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["调出仓ID"].Value)).Tables[0];
if (dtKunCun1.Rows.Count > 0)
{
//计算库存数并保存进数据库
decimal decKuCunShu = Convert.ToDecimal(dtKunCun1.Rows[0]["StockNumber"])-Convert.ToDecimal(dgvComeInAndGoOut.Rows[i].Cells["数量"].Value) ;
int intUpdate = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_btnInsert_ClickUpdateStockNumber(decKuCunShu, Convert.ToInt32(dtKunCun1.Rows[0]["StockID"]));
}
//给变量赋值
int intAllotRecordID = intInsertAllotRecord;
int intPartsID=Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["配件ID"].Value) ;
int intComeInStorage = Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["调入仓ID"].Value);
int intGoOutStorage = Convert.ToInt32(dgvComeInAndGoOut.Rows[i].Cells["调出仓ID"].Value);
decimal decQuantity=Convert.ToDecimal(dgvComeInAndGoOut.Rows[i].Cells["数量"].Value);
//把调拨明细信息保存进数据库
intInsertAllotRecordMinute = myFRM_DiaoBoGuanLi_InsertClient.FRM_DiaoBoGuanLi_btnSave_ClickInsertAllotRecordMinute(intAllotRecordID, intPartsID, intComeInStorage, intGoOutStorage, decQuantity);
}
}
if(intInsertAllotRecord>0||intInsertAllotRecordMinute>0)//如果调用方法成功
{
MessageBox.Show("新增成功!");
}
}
以上仅供学习参考,禁止用于商业用途!!!