/// <summary> /// 绑定Grid /// </summary> protected void BindMateriel() { LMaterialBB materialBB = new LMaterialBB(); DataSet ds = new DataSet(); try { string strWhere = " 1=1 "; if (this.txtNo.Text.Trim() != "") { strWhere += " and materialNo like '%" + this.txtNo.Text.Replace("'", "''") + "%' "; } if (this.txtNm.Text.Trim() != "") { strWhere += " and materialDesc like '%" + this.txtNm.Text.Replace("'", "''") + "%' "; } ds = materialBB.GetList(strWhere); this.grvMateriel.DataSource = ds.Tables[0]; this.grvMateriel.DataBind(); } finally { materialBB.Dispose(); } }
/// <summary> /// 数据保存 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnSave_Click(object sender, EventArgs e) { string strInfo = ""; if (!this.ValidateData(out strInfo)) { strInfo = strInfo.Replace("\"", "'").Replace("\n", ""); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('" + strInfo + "');", true); return; } LMaterialData model = new LMaterialData(); LMaterialBB materialBB = new LMaterialBB(); try { if (this.State == "1") { this.SetModel(ref model); model.isrtDt = DateTime.Now.ToString(); model.isrtEmpId = this.currentUser.empId; this.IdValue = materialBB.AddRecord(model); } else if (this.State == "2") { model = materialBB.GetModel(this.IdValue); this.SetModel(ref model); model.updtDt = DateTime.Now.ToString(); model.updtEmpId = this.currentUser.empId; materialBB.ModifyRecord(model); } } catch (Exception ex) { this.ClientScript.RegisterStartupScript(this.GetType(), "ShowErr", "ShowErr(\"" + Server.UrlEncode(ex.Message) + "\",3);", true); return; } finally { materialBB.Dispose(); } Response.Redirect("LMaterialList.aspx?&itemno=" + this.itemNo + "&pTypeNo=main", false); }
protected void BindGrid() { using (LMaterialBB bb = new LMaterialBB()) { string strwhere = " 1=1 "; if (!string.IsNullOrEmpty(txtMaterialno.Text)) { strwhere += " and materialNo like '%" + txtMaterialno.Text + "%'"; } if (!string.IsNullOrEmpty(txtMaterialnm.Text)) { strwhere += " and materialDesc like '%" + txtMaterialnm.Text + "%'"; } DataSet ds = bb.GetList(strwhere); grid.DataSource = ds; grid.DataBind(); } }
/// <summary> /// 绑定Grid /// </summary> protected void BindGrid() { LMaterialBB materialBB = new LMaterialBB(); DataSet ds = new DataSet(); try { string strWhere = this.StrWhere; //物料编码 if (this.tbMaterialNo.Text.Trim() != "") { strWhere += " and materialNo like '%" + this.tbMaterialNo.Text.Trim().Replace("'", "''") + "%'"; } //物料名称 if (this.tbMaterialNm.Text.Trim() != "") { strWhere += " and materialDesc like '%" + this.tbMaterialNm.Text.Trim().Replace("'", "''") + "%'"; } //货位分类 if (this.ddlWareSort.SelectedValue != "") { strWhere += " and wareSortNo='" + this.ddlWareSort.SelectedValue + "'"; } ds = materialBB.GetVList(strWhere); this.grid.DataSource = ds.Tables[0]; this.grid.DataBind(); //赋值记录条数、页面总数 this.Label3.Text = ds.Tables[0].Rows.Count.ToString(); this.Label2.Text = this.grid.PageCount.ToString(); this.currPage.Text = (this.grid.PageIndex + 1).ToString(); } finally { materialBB.Dispose(); } }
/// <summary> /// 绑定到货物料明细表 /// </summary> protected void BindMateriel() { string strWhere = "1=1"; DataSet ds = new DataSet(); LMaterialBB materialBB = new LMaterialBB(); //物料 if (this.txtC.Text.Trim() != "") { strWhere += " and (materialNo like '%" + this.txtC.Text.Replace("'", "''") + "%' or materialDesc like '%" + this.txtC.Text.Replace("'", "''") + "%')"; } ds = materialBB.GetVList(strWhere); this.grvMateriel.DataSource = ds.Tables[0]; this.grvMateriel.DataBind(); //赋值记录条数、页面总数 this.Label3.Text = ds.Tables[0].Rows.Count.ToString(); this.Label2.Text = this.grvMateriel.PageCount.ToString(); this.currPage.Text = (this.grvMateriel.PageIndex + 1).ToString(); }
/// <summary> /// 展示数据 /// </summary> /// <param name="id">记录Id</param> private void ShowInfo(int id) { LMaterialBB materialBB = new LMaterialBB(); vLMaterialData model = new vLMaterialData(); try { model = materialBB.GetVModel(id); this.id.Text = model.id.ToString(); this.materialNo.Text = model.materialNo; this.materialDesc.Text = model.materialDesc; this.materialGroup.Text = model.materialGroup.ToString(); this.invntItem.Text = model.invntItem; this.buyUnitMsr.Text = model.buyUnitMsr; this.numInBuy.Text = model.numInBuy.ToString(); this.salUnitMsr.Text = model.salUnitMsr; this.numInSale.Text = model.numInSale.ToString(); this.isStocked.Text = model.isStocked; this.isRoutinePackage.Text = model.isRoutinePackage; this.isStandardBox.Text = model.isStandardBox; this.manBtchNum.Text = model.manBtchNum; this.validFor.Text = model.validFor; if (model.validFrom != string.Empty && model.validFrom != null) { DateTime validFrom = Convert.ToDateTime(model.validFrom); this.validFrom.Text = validFrom.ToShortDateString(); } if (model.validTo != string.Empty && model.validTo != null) { DateTime validTo = Convert.ToDateTime(model.validTo); this.validTo.Text = validTo.ToShortDateString(); } this.frozenFor.Text = model.frozenFor; if (model.frozenFrom != string.Empty && model.frozenFrom != null) { DateTime frozenFrom = Convert.ToDateTime(model.frozenFrom); this.frozenFrom.Text = frozenFrom.ToShortDateString(); } if (model.frozenTo != string.Empty && model.frozenTo != null) { DateTime frozenTo = Convert.ToDateTime(model.frozenTo); this.frozenTo.Text = frozenTo.ToShortDateString(); } this.invntryUom.Text = model.invntryUom; this.U_CNSize.Text = model.U_CNSize; this.U_ENSize.Text = model.U_ENSize; this.U_StanWiht.Text = model.U_StanWiht.ToString(); this.U_PullStan.Text = model.U_PullStan; this.U_DrawHlink.Text = model.U_DrawHlink; this.U_LablHlink.Text = model.U_LablHlink; this.U_CCVOHlink.Text = model.U_CCVOHlink; this.U_UintQty.Text = model.U_UintQty.ToString(); this.U_BoxQty.Text = model.U_BoxQty.ToString(); this.U_CodeNo.Text = model.U_CodeNo; this.U_BoxSize.Text = model.U_BoxSize; this.materialNm_CH.Text = model.materialNm_CH; this.materialNm_EN.Text = model.materialNm_EN; this.U_PackWay.Text = model.U_PackWay; this.wareSortNo.Text = model.wareSortNo; this.weightDiffWaring.Text = model.weightDiffWaring.ToString(); } finally { materialBB.Dispose(); } }
/// <summary> /// 绑定Grid /// </summary> protected void BindGrid() { LMaterialBB bOMBB = new LMaterialBB(); DataSet ds = new DataSet(); try { string wherestr = " 1=1 "; if (!string.IsNullOrEmpty(txtMaterialnm.Text)) { wherestr += " and materialDesc='%" + txtMaterialnm.Text.Replace("'", "''") + "%'"; } if (!string.IsNullOrEmpty(txtMaterialno.Text)) { wherestr += " and materialno like '%" + txtMaterialno.Text.Replace("'", "''") + "%'"; } ds = bOMBB.GetVList(wherestr); this.grid.DataSource = ds.Tables[0]; this.grid.DataBind(); //赋值记录条数、页面总数 this.Label3.Text = ds.Tables[0].Rows.Count.ToString(); this.Label2.Text = this.grid.PageCount.ToString(); this.currPage.Text = (this.grid.PageIndex + 1).ToString(); } finally { bOMBB.Dispose(); } }
/// <summary> /// 验证排托明细数据 /// </summary> /// <returns></returns> public bool ValidateArrangeDetail() { string strCustomNo = "", strFinaceNo = "", strWareSortNo = ""; bool isSameCustom = true; DataRow[] myDataRowArrayResult = null; DataRow[] myDataRowArray = null; #region 校验排托结果 myDataRowArrayResult = this.DtResult.Select(" isdel=0"); if (myDataRowArrayResult.Length == 0) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('请首先排托!');", true); return false; } foreach (DataRow dr in myDataRowArrayResult) { for (int i = 0; i <= int.Parse(txtRegionNum.Text); i++) { int regionArrangeBoxNum = 0; DataRow[] myDataRowArrayRegion = this.DtResult.Select(" isdel=0 and palletIndex=" + dr["palletIndex"] + " and region=" + i); foreach (DataRow dataRow in myDataRowArrayRegion) { regionArrangeBoxNum += Convert.ToInt32(dataRow["boxNum"]); } if (regionArrangeBoxNum > int.Parse(txtMaxNum.Text)) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('托盘【" + dr["palletIndex"] + "】的【" + i.ToString() + "】区域排托箱数超出5箱!');", true); return false; } if (i == 0 && myDataRowArrayRegion.Length > 0) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('托盘区域不能包含0区域!');", true); return false; } else { //同一托盘同一区域只有一条记录 if (myDataRowArrayRegion.Length > 1) { strCustomNo = ""; isSameCustom = true; //判断订单类型是否为按单并且是同一个供应商 foreach (DataRow dataRow in myDataRowArrayRegion) { if (strCustomNo != "" && dataRow["customNo"].ToString() != strCustomNo) { isSameCustom = false; break; } if (dataRow["customNo"].ToString() != "") { strCustomNo = dataRow["customNo"].ToString();//客户编号 } } if (!isSameCustom) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('同一托盘同一区域必须合并!');", true); return false; } } } } //每个托盘每个区域只能有一条记录 DataRow[] drs = this.DtResult.Select(" isdel=0 and palletIndex='" + dr["palletIndex"] + "'"); if (drs.Length > 0) { strFinaceNo = drs[0]["financeBillNo"].ToString();//采购订单编号 strCustomNo = drs[0]["customNo"].ToString();//客户编号 strWareSortNo = drs[0]["wareSortNo"].ToString();//库位类别 } //if (drs.Length > 0 && drs.Length <= 8) //{ // strFinaceNo = drs[0]["financeBillNo"].ToString(); //} //else //{ // this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('每个托盘的区域数不能超过8个!');", true); // return false; //} foreach (DataRow d1 in drs) { //判断是否是同一个供应商 if (d1["financeBillNo"].ToString() != strFinaceNo) { if (strCustomNo != d1["customNo"].ToString() && strWareSortNo != d1["wareSortNo"].ToString()) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('同一托盘只能放置一个采购订单或相同类别库区物料!');", true); return false; } } if (Convert.ToInt32(d1["boxNum"]) <= 0 || Convert.ToInt32(d1["boxNum"]) > int.Parse(txtMaxNum.Text)) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('箱数请输入小于最大箱数的数据!');", true); return false; } if (Convert.ToInt32(d1["region"]) > int.Parse(txtRegionNum.Text) || Convert.ToInt32(d1["region"]) <= 0) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('区域数量需要小于最大区域!');", true); return false; } } } #endregion 校验排托结果 #region 校验到货明细 foreach (DataRow drn in DtDetail.Rows) { int arrangeBoxNum = 0; myDataRowArray = this.DtResult.Select(" isdel=0 and financeBillNo='" + drn["financeBillNo"] + "' and materialNo='" + drn["materialNo"] + "'"); foreach (DataRow dataRow in myDataRowArray) { arrangeBoxNum += Convert.ToInt32(dataRow["boxNum"]); } //判断排托数量是否超出到货数量 if (arrangeBoxNum != Convert.ToInt32(drn["boxNum"])) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert1", "alert(\"采购订单【" + drn["financeBillNo"] + "】的物料【" + drn["materialNo"] + "】到货数量为【" + drn["boxNum"].ToString() + "】,排托数量为【" + arrangeBoxNum.ToString() + "】,排托数量与到货数量不相符!\");", true); return false; } if (drn["financeBillSort"].ToString() == "备货")//备货 { LMaterialBB lMaterialBB = new LMaterialBB(); try { LMaterialData lMaterialData = lMaterialBB.GetModel(drn["materialNo"].ToString()); if ((lMaterialData.wareSortNo == "B" || lMaterialData.wareSortNo == "C")) { DataRow[] drns = this.DtResult.Select(" isdel=0 and financeBillNo='" + drn["financeBillNo"] + "' and materialNo='" + drn["materialNo"] + "'"); foreach (DataRow drns1 in drns) { DataRow[] drnss = this.DtResult.Select(" isdel=0 and palletIndex=" + drns1["palletIndex"] + " and materialNo<>'" + drn["materialNo"].ToString() + "'"); if (drnss.Length > 0) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert1", "alert(\"放置高位货架托盘只允许放置同一种备货物料!\");", true); return false; } } } else if ((lMaterialData.wareSortNo == "A" || lMaterialData.wareSortNo == "D" || lMaterialData.wareSortNo == "E")) { DataRow[] drns = this.DtResult.Select(" isdel=0 and financeBillNo='" + drn["financeBillNo"] + "' and materialNo='" + drn["materialNo"] + "'"); foreach (DataRow drns1 in drns) { DataRow[] drnss = this.DtResult.Select(" isdel=0 and palletIndex=" + drns1["palletIndex"] + " and wareSortNo<>'" + drn["wareSortNo"].ToString() + "'"); if (drnss.Length > 0) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert1", "alert(\"只允许放置同一仓库类别的备货物料!\");", true); return false; } } } } catch (Exception ex) { this.ClientScript.RegisterStartupScript(this.GetType(), "ShowErr", "ShowErr(\"" + Server.UrlEncode(ex.Message) + "\",3);", true); return false; } finally { lMaterialBB.Dispose(); } } } #endregion 校验到货明细 return true; }
/// <summary> /// 新增区域 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnNewArea_Click(object sender, EventArgs e) { try { this.SaveStencilDetailViewState();//保存 bool isChecked = false; foreach (GridViewRow gvrow in this.grid.Rows) { CheckBox chkId = (CheckBox)gvrow.FindControl("chkId"); DataRow[] myDataRowArray = null; if (chkId.Checked == true) { isChecked = true; //所选采购订单信息 string materialNo = this.grid.DataKeys[gvrow.RowIndex].Values["materialNo"].ToString(); string lfinanceBillNo = this.grid.DataKeys[gvrow.RowIndex].Values["financeBillNo"].ToString(); string lCustomNo = this.grid.DataKeys[gvrow.RowIndex].Values["customNo"].ToString(); string lmaterialDesc = this.grid.DataKeys[gvrow.RowIndex].Values["materialDesc"].ToString(); string financeBillSort = this.grid.DataKeys[gvrow.RowIndex].Values["financeBillSort"].ToString(); string wareSortNo = this.grid.DataKeys[gvrow.RowIndex].Values["wareSortNo"].ToString(); string strWareSortNm = this.grid.DataKeys[gvrow.RowIndex].Values["wareSortNm"].ToString(); //判断物料是否有剩余 myDataRowArray = this.DtDetail.Select("financeBillNo='" + this.grid.DataKeys[gvrow.RowIndex].Values["financeBillNo"].ToString() + "' and materialNo='" + this.grid.DataKeys[gvrow.RowIndex].Values["materialNo"].ToString() + "'"); if (myDataRowArray.Length > 0) { if (myDataRowArray[0]["arrangeBoxNum_leaving"].ToString() == "" || myDataRowArray[0]["arrangeBoxNum_leaving"].ToString() == "0") { this.ClientScript.RegisterStartupScript(this.GetType(), "alert1", "alert(\"此物料已经没有剩余!\");", true); return; } } foreach (GridViewRow grow in this.gridDetail.Rows) { CheckBox chkId1 = (CheckBox)grow.FindControl("chkId"); if (chkId1.Checked == true) { string arriveBillNo = this.gridDetail.DataKeys[grow.RowIndex].Values["arriveBillNo"].ToString(); string financeBillNo = this.gridDetail.DataKeys[grow.RowIndex].Values["financeBillNo"].ToString(); string preMaterialNo = this.gridDetail.DataKeys[grow.RowIndex].Values["materialNo"].ToString(); string pindex = this.gridDetail.DataKeys[grow.RowIndex].Values["palletIndex"].ToString(); string pwareSortNo = this.gridDetail.DataKeys[grow.RowIndex].Values["wareSortNo"].ToString(); string strCustomNo = this.gridDetail.DataKeys[grow.RowIndex].Values["customNo"].ToString(); if (strCustomNo != lCustomNo && financeBillNo != lfinanceBillNo) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert1", "alert(\"同一托盘只允许放置同一采购订单或同一客户订单物料!\");", true); return; } LMaterialBB materialBB = new LMaterialBB(); try { LMaterialData materialModel = new LMaterialData(); //判断当前选择物料的货位分类 materialModel = materialBB.GetModel(materialNo); if (financeBillSort == "备货" && (materialModel.wareSortNo == "B" || materialModel.wareSortNo == "C") && materialNo != preMaterialNo) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert1", "alert(\"放置高位货架托盘只允许放置同一种备货物料!\");", true); return; } else if (financeBillSort == "备货" && (materialModel.wareSortNo == "A" || materialModel.wareSortNo == "D" || materialModel.wareSortNo == "E") && pwareSortNo != wareSortNo) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert1", "alert(\"此托盘只允许放置同一仓库类别的备货物料!\");", true); return; } //判断上一次选择物料的货位分类 materialModel = materialBB.GetModel(preMaterialNo); if (financeBillSort == "备货" && (materialModel.wareSortNo == "B" || materialModel.wareSortNo == "C") && materialNo != preMaterialNo) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert1", "alert(\"放置高位货架托盘只允许放置同一种备货物料!\");", true); return; } else if (financeBillSort == "备货" && (materialModel.wareSortNo == "A" || materialModel.wareSortNo == "D" || materialModel.wareSortNo == "E") && pwareSortNo != wareSortNo) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert1", "alert(\"此托盘只允许放置同一仓库类别的备货物料!\");", true); return; } } catch (Exception ex) { this.ClientScript.RegisterStartupScript(this.GetType(), "ShowErr", "ShowErr(\"" + Server.UrlEncode(ex.Message) + "\",3);", true); return; } finally { materialBB.Dispose(); } //求出最大的托盘序号 int maxnum = 1; DataRow[] drs = DtResult.Select(" isdel=0 and palletIndex=" + pindex, "region"); for (int i = 0; i < drs.Length; i++) { if (Convert.ToInt32(drs[i]["region"]) > maxnum) { break; } maxnum++; } if (maxnum > int.Parse(txtRegionNum.Text.Trim())) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert(\"区域必须小于等于设定的托盘区域!\");", true); return; } //记录添加到临时表 DataRow dr = this.DtResult.NewRow(); dr["wareSortNo"] = wareSortNo; dr["wareSortNm"] = strWareSortNm; dr["rowId"] = Guid.NewGuid().ToString(); dr["isdel"] = "0"; dr["id"] = 0; dr["boxNum"] = 0; dr["hideAmount"] = 0; dr["ischeck"] = false; dr["arrangeBillNo"] = "PT" + this.ArriveBillNo; dr["arriveBillNo"] = arriveBillNo; dr["materialDesc"] = lmaterialDesc; dr["financeBillNo"] = lfinanceBillNo; dr["materialNo"] = materialNo; dr["region"] = maxnum; dr["palletIndex"] = pindex;//托盘序号 dr["customNo"] = lCustomNo;//客户编号 this.DtResult.Rows.Add(dr); } } } } if (isChecked == false) { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert(\"请选择采购物料和托盘记录!\");", true); return; } } finally { this.BindDetailTable();//绑定排托明细列表 this.BindGrid();//绑定到货明细列表 } }
public DataTable GetMaterial(string strMaterialNo) { LMaterialBB materialBB = new LMaterialBB(); try { DataTable dt = new DataTable(); dt = materialBB.GetList("materialNo='" + strMaterialNo + "'").Tables[0]; return dt; } finally { materialBB.Dispose(); } }
/// <summary> /// 展示数据 /// </summary> /// <param name="id">记录Id</param> private void ShowInfo(int id) { LMaterialBB materialBB = new LMaterialBB(); vLMaterialData model = new vLMaterialData(); try { model = materialBB.GetVModel(id); this.lbMaterialNo.Text = model.materialNo;//物料编码 this.lbMaterialDesc.Text = model.materialDesc;//物料描述 this.lbIsRoutinePackageDesc.Text = model.isRoutinePackageDesc;//是否常规包装 this.lbIsStandardBoxDesc.Text = model.isStandardBoxDesc;//是否标准箱 this.lbInvntryUom.Text = model.invntryUom;//计量单位 this.lbU_CNSize.Text = model.U_CNSize;//规格型号 this.lbU_UintQty.Text = model.U_UintQty.ToString();//单体数量 this.lbU_BoxQty.Text = model.U_BoxQty.ToString();//整箱数量 this.lbU_Material.Text = model.U_Material.ToString();//材质 this.lbU_StanWiht.Text = model.U_StanWiht.ToString();//标准重量 this.tbSystemWeight.Text = model.systemWeight.ToString(); this.tbWeightDiffWaring.Text = model.weightDiffWaring.ToString();//单个称重差异预警值(KG) this.ddlWareSort.SelectedValue = model.wareSortNo;//库位分类 } finally { materialBB.Dispose(); } }
/// <summary> /// 手动填写 增加拣货计划 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnSaveDetail_Click(object sender, EventArgs e) { LWareLocatorBB wareLocatorBB = new LWareLocatorBB(); LMaterialBB materialBB = new LMaterialBB(); UStockBB stockBB = new UStockBB(); SCommBB commBB = new SCommBB(); LMaterialRelationBB materialRelationBB = new LMaterialRelationBB(); try { string strErrorInfo = "", strWareNo = "", strWareNm = "", strWareLocatorNm = "", strMaterialDesc = ""; DataTable dtWareLocator = new DataTable(); DataTable dtMaterial = new DataTable(); DataTable dtStock = new DataTable(); DataTable dtStockUpDetail = new DataTable(); if (this.txtWareLocarorNo.Value.Trim() == "") { strErrorInfo = "请首先填写库位!"; this.txtWareLocarorNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } dtWareLocator = wareLocatorBB.GetVList("wareLocatorNo='" + this.txtWareLocarorNo.Value.Trim() + "'").Tables[0]; if (dtWareLocator.Rows.Count == 0) { strErrorInfo = "请首先填写正确库位!"; this.txtWareLocarorNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } strWareNo = dtWareLocator.Rows[0]["wareNo"].ToString();//库区编码 strWareNm = dtWareLocator.Rows[0]["wareNm"].ToString();//库区名称 strWareLocatorNm = dtWareLocator.Rows[0]["wareLocatorNm"].ToString();//库位名称 if (strWareNo != "GLHJ01" && strWareNo != "GLHJ02" && this.txtPalletNo.Value.Trim() == "") { strErrorInfo = "请首先填写托盘号!"; this.txtPalletNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } if (this.txtMaterialNo.Value.Trim() == "") { strErrorInfo = "请首先填写物料编号!"; this.txtMaterialNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } dtMaterial = materialBB.GetVList("materialNo='" + this.txtMaterialNo.Value.Trim() + "'").Tables[0]; if (dtMaterial.Rows.Count == 0) { strErrorInfo = "请首先填写正确物料!"; this.txtMaterialNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } strMaterialDesc = dtMaterial.Rows[0]["materialNm_CH"].ToString();//物料描述 //strStockUpMaterialNo = this.txtMaterialNo.Value.Trim().ToUpper();//计划备货物料 if (this.tbNum.Text.Trim() == "") { strErrorInfo = "请首先填写数量!"; this.tbNum.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } if (!CommFunction.IsInt(this.tbNum.Text.Trim())) { strErrorInfo = "数量格式错误!"; this.tbNum.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } if (Convert.ToInt32(this.tbNum.Text.Trim()) <= 0) { strErrorInfo = "数量必须大于0!"; this.tbNum.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } DataRow drnew = this.DtResultNew.NewRow(); drnew["rowId"] = Guid.NewGuid().ToString(); drnew["id"] = 0; drnew["num"] = this.tbNum.Text.Trim(); drnew["palletIndex"] = "1"; drnew["wareNo"] = strWareNo; drnew["wareLocatorNo"] = this.txtWareLocarorNo.Value.Trim().ToUpper(); drnew["palletNo"] = this.txtPalletNo.Value.Trim(); drnew["stockUpMaterialNo"] = this.StockUpMaterialNo;//计划备货物料 drnew["materialNo"] = this.txtMaterialNo.Value.Trim();//实际拣货物料 //drnew["materialDesc"] = strMaterialDesc; drnew["instantState"] = "01"; drnew["financeBillNo"] = this.txtFinanceBillNo.Value.Trim().ToUpper();//采购合同号 //drnew["financeBillSort"] = this.txtFinanceBillNo.Value.Trim() == "" ? "备货" : "按单";//采购合同类型 drnew["saleBillNo"] = this.SaleBillNo;//销售订单号 drnew["docEntry"] = this.DocEntry;//销售订单ID drnew["lineNum"] = this.LineNum;//销售订单行号 drnew["isDel"] = false; //去除判断属性 直接进行数据的保存 将校验数据去除 this.DtResultNew.Rows.Add(drnew); this.BindGridPickOutPlan();//绑定拣货明细列表 this.btnSubmit.Enabled = true; } finally { wareLocatorBB.Dispose(); materialBB.Dispose(); stockBB.Dispose(); commBB.Dispose(); materialRelationBB.Dispose(); } }
protected void btnPlan_click(object sender, EventArgs e) { //首先要查看是否有选中的物料 如果没有选中物料 提示 并且返回 //Response.Write(this.gridSaleBill.Rows.Count.ToString()); string ids = ""; foreach (GridViewRow gvrow in this.gridSaleBill.Rows) { CheckBox chkId = (CheckBox)gvrow.FindControl("chkId"); if (chkId.Checked == true) { string id = this.gridSaleBill.DataKeys[gvrow.RowIndex].Values["id"].ToString(); ids += id + ",";//使用逗号将数据进行处理 } } if (ids == "") { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert(\"没有选中任何销售物料\");", true); return; } else { DtResultNew.Rows.Clear();//将所有的行删除掉 用来解决数据不断重复往上加的问题 string rowFilterString = ""; string[] idChoose = ids.Split(',');//将id取出来 for (int i = 0; i < idChoose.Length - 1; i++) { rowFilterString += "id = " + idChoose[i] + " or "; } DtResult.DefaultView.RowFilter = rowFilterString.Remove(rowFilterString.Length - 3, 2); DtResultCondtion = DtResult.DefaultView.ToTable(); } //首先是遍历全部的数据 //生成相应的CpickOutPlan //显示出来 UStockBB stockBB = new UStockBB(); LMaterialRelationBB materialRelationBB = new LMaterialRelationBB(); OtherOutInDetailBB otherOutInDetailBB = new OtherOutInDetailBB(); LMaterialBB materialBB = new LMaterialBB(); DataSet dsStock = new DataSet(); DataRow[] drsStock = null; foreach (DataRow drStockUpDetail in DtResultCondtion.Rows) { int needCount = Convert.ToInt32(drStockUpDetail["Number"]); string strLineNum = drStockUpDetail["lineNumber"].ToString();//行号 string strDocEntry = drStockUpDetail["SAPdocEntry"].ToString();//销售订单ID string strMaterialNo = drStockUpDetail["MaterialNo"].ToString(); string U_PCNo = drStockUpDetail["U_PCNo"].ToString();//增加采购合同号 if (string.IsNullOrEmpty(U_PCNo)) { //找到仓库内的同种物料所在的库位以及数量 //首先是判断同一个库位下的信息是否能够满足所有的需求 //不带采购合同号 dsStock = stockBB.GetVListByGroupOtherWithOutFinanceBillNo("stock.financeBillSortNo='02' and stock.isOutStocking=0 and stock.wareLocatorNo<>''"); if (dsStock.Tables[0].Rows.Count > 0) { drsStock = dsStock.Tables[0].Select("materialno='" + strMaterialNo + "' and num>=" + needCount.ToString()); } } else { //带采购合同号 dsStock = stockBB.GetVListByGroupOtherWithFinanceBillNo("stock.financeBillSortNo='02' and stock.isOutStocking=0 and stock.wareLocatorNo<>''"); if (dsStock.Tables[0].Rows.Count > 0) { drsStock = dsStock.Tables[0].Select("materialno='" + strMaterialNo + "' and num>=" + needCount.ToString() + " and financeBillNo='" + U_PCNo + "'"); } } if (drsStock.Length == 0) { if (string.IsNullOrEmpty(U_PCNo)) { dsStock = stockBB.GetVListByGroupOtherWithOutFinanceBillNo("stock.financeBillSortNo='02' and stock.isOutStocking=0 and stock.wareLocatorNo<>''"); if (dsStock.Tables[0].Rows.Count > 0) drsStock = dsStock.Tables[0].Select("materialno='" + strMaterialNo + "' and num>0"); } else { dsStock = stockBB.GetVListByGroupOtherWithFinanceBillNo("stock.financeBillSortNo='02' and stock.isOutStocking=0 and stock.wareLocatorNo<>''"); if (dsStock.Tables[0].Rows.Count > 0) drsStock = dsStock.Tables[0].Select("materialno='" + strMaterialNo + "' and num>0 and financeBillNo='" + U_PCNo + "'"); } } while (needCount > 0) { #region 原物料拣货 //2015-08-24修改 在此处增加采购合同号的判断 if (string.IsNullOrEmpty(U_PCNo)) { //找到仓库内的同种物料所在的库位以及数量 //首先是判断同一个库位下的信息是否能够满足所有的需求 //不带采购合同号 if (dsStock.Tables[0].Rows.Count > 0) { drsStock = dsStock.Tables[0].Select("materialno='" + strMaterialNo + "' and num>=" + needCount.ToString()); } } else { //带采购合同号 if (dsStock.Tables[0].Rows.Count > 0) { drsStock = dsStock.Tables[0].Select("materialno='" + strMaterialNo + "' and num>=" + needCount.ToString() + " and financeBillNo='" + U_PCNo + "'"); } } if (drsStock.Length == 0) { if (string.IsNullOrEmpty(U_PCNo)) { if (dsStock.Tables[0].Rows.Count > 0) drsStock = dsStock.Tables[0].Select("materialno='" + strMaterialNo + "' and num>0"); } else { if (dsStock.Tables[0].Rows.Count > 0) drsStock = dsStock.Tables[0].Select("materialno='" + strMaterialNo + "' and num>0 and financeBillNo='" + U_PCNo + "'"); } } if (drsStock.Length > 0) { //当前库位所拥有该物料的数量 int haveCount = Convert.ToInt32(drsStock[0]["num"]); //如果当前库位的物料数量大于备货单所需数量,就保存当前库位 DataRow drnew = this.DtResultNew.NewRow(); drnew["rowId"] = Guid.NewGuid().ToString(); drnew["id"] = 0; if (haveCount >= needCount) { drnew["num"] = needCount; } else { drnew["num"] = haveCount; } drsStock[0]["num"] = Convert.ToInt32(drsStock[0]["num"]) - Convert.ToInt32(drnew["num"]);//库存数量减去已备货数量 needCount = needCount - Convert.ToInt32(drnew["num"]); //drnew["stockUpBillNo"] = stockUpBillModel.stockUpBillNo; drnew["palletIndex"] = "1"; drnew["wareNo"] = drsStock[0]["wareNo"]; drnew["wareLocatorNo"] = drsStock[0]["wareLocatorNo"]; drnew["palletNo"] = drsStock[0]["palletNo"]; drnew["stockUpMaterialNo"] = strMaterialNo;//备货物料编号 drnew["materialNo"] = drsStock[0]["materialNo"];//实际拣货物料编号 drnew["instantState"] = "01"; drnew["financeBillNo"] = U_PCNo; drnew["docEntry"] = strDocEntry;//销售订单ID drnew["lineNum"] = strLineNum;//行号 drnew["isDel"] = false; this.DtResultNew.Rows.Add(drnew); drStockUpDetail["number"] = needCount;//重新赋值拣货数量 } else { needCount = 0; // break; } #endregion 原物料拣货 } } OtherOutInBillBB otherOutInBill = new OtherOutInBillBB(); OtherOutInDetailBB otherOutInDetailBill = new OtherOutInDetailBB(); string id2 = Request.Params["id"]; vOtherOutInBillData otherOutInBIllData = otherOutInBill.GetVModel(Convert.ToInt32(id2)); string SAPDocEntry = otherOutInBIllData.SAPDocEntry; string strInfo = ""; foreach (DataRow otherOutInBillRow in DtResultCondtion.Rows) { int planNum = 0; int factNum = 0; DataRow[] myDataRowArray = null; if (!string.IsNullOrEmpty(otherOutInBillRow["U_PCNo"].ToString())) { myDataRowArray = DtResultCondtion.Select("materialNo='" + otherOutInBillRow["materialNo"].ToString() + "' and U_PCNo = '" + otherOutInBillRow["U_PCNo"] + "'"); } else { myDataRowArray = DtResultCondtion.Select("materialNo='" + otherOutInBillRow["materialNo"].ToString() + "'"); } foreach (DataRow row in myDataRowArray) { planNum += Convert.ToInt32(row["hadNum"]); } if (!string.IsNullOrEmpty(otherOutInBillRow["U_PCNo"].ToString())) { myDataRowArray = this.DtResultNew.Select("materialNo=stockupmaterialNo and materialNo='" + otherOutInBillRow["materialNo"].ToString() + "'and financeBillNo = '" + otherOutInBillRow["U_PCNo"] + "'"); } else { myDataRowArray = this.DtResultNew.Select("materialNo=stockupmaterialNo and materialNo='" + otherOutInBillRow["materialNo"].ToString() + "'"); } foreach (DataRow row in myDataRowArray) { factNum += Convert.ToInt32(row["num"]); } if (planNum != factNum) { strInfo += "物料【" + otherOutInBillRow["materialNo"].ToString() + "】,计划拣货【" + planNum.ToString() + "】件,实际拣货【" + factNum.ToString() + "】件;"; btnSubmit.Enabled = false; } } if (strInfo != "") { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert(\"当前未完成拣货,不允许保存!提示信息:" + strInfo + "\");", true); btnSubmit.Enabled = false; } BindGridPickOutPlan(); //} }
public string GetPalletWareInfo(string strPalletNo) { string strWareLocatorNo = ""; BArrangeBillBoxBB arrangeBillBoxBB = new BArrangeBillBoxBB(); LWareBB wareBB = new LWareBB(); LWareLocatorBB wareLocatorBB = new LWareLocatorBB(); LMaterialBB materialBB = new LMaterialBB(); SCommBB commBB = new SCommBB(); try { DataTable dtArrangeBillBox = new DataTable(); DataTable dtWare = new DataTable(); DataTable dtWareLocator = new DataTable(); //获取托盘下的所有箱子 dtArrangeBillBox = arrangeBillBoxBB.GetVList("palletNo='" + strPalletNo + "' and isnull(wareNo,'')<>''").Tables[0]; if (dtArrangeBillBox.Rows.Count > 0) { string strFinanceBillSort = "", strFinanceBillNo = ""; strFinanceBillSort = dtArrangeBillBox.Rows[0]["financeBillSort"].ToString();//采购合同类型 strFinanceBillNo = dtArrangeBillBox.Rows[0]["financeBillNo"].ToString();//采购合同号 if (strFinanceBillSort == "按单" || strFinanceBillNo.IndexOf("EB16") == -1) { #region 按单 //按单的物料,放置在正式库的平面库区 dtWareLocator = wareLocatorBB.GetVList("wareSortNo='A' and wareType='03' and isUsing=0 and isDel=0").Tables[0]; if (dtWareLocator.Rows.Count > 0) { strWareLocatorNo = dtWareLocator.Rows[0]["wareNo"].ToString() + "," + dtWareLocator.Rows[0]["wareLocatorNo"].ToString();//库位 } #endregion 按单 } else if (strFinanceBillSort == "备货" || strFinanceBillNo.IndexOf("EB16") != -1) { #region 备货 string strMaterialNos = "", strUCodeNos = "", strWareSortNos = "B"; int materialNum = 1; DataTable dtMaterial = new DataTable(); //判断当前托盘是否存在多个物料 strMaterialNos = dtArrangeBillBox.Rows[0]["materialNo"].ToString();//物料编号 strUCodeNos = dtArrangeBillBox.Rows[0]["U_CodeNo"].ToString();//物料U_CodeNo foreach (DataRow row in dtArrangeBillBox.Rows) { if (strMaterialNos.IndexOf(row["materialNo"].ToString()) == -1) { materialNum++; strMaterialNos += "," + row["materialNo"].ToString();//物料编号 } if (strUCodeNos.IndexOf(row["U_CodeNo"].ToString()) == -1) { strUCodeNos += "," + row["U_CodeNo"].ToString();//物料U_CodeNo } } if (materialNum == 1)//托盘上只有一种物料 { dtMaterial = materialBB.GetList("materialNo='" + strMaterialNos + "'").Tables[0];//获取物料信息 strWareSortNos = dtMaterial.Rows[0]["wareSortNo"].ToString();//获取物料的货位分类 } else { foreach (DataRow row in dtArrangeBillBox.Rows) { dtMaterial = materialBB.GetList("materialNo='" + row["materialNo"].ToString() + "'").Tables[0];//获取物料信息 if (dtMaterial.Rows[0]["wareSortNo"].ToString() != "B")//查找货位分类为非高位货架所有类别 { if (strWareSortNos == "B")//如果当前类型为高位货架 { strWareSortNos = dtMaterial.Rows[0]["wareSortNo"].ToString();//货架分类赋新值 } else { if (strWareSortNos.IndexOf(dtMaterial.Rows[0]["wareSortNo"].ToString()) == -1) { strWareSortNos += "," + dtMaterial.Rows[0]["wareSortNo"].ToString(); } } } } } if (strWareSortNos == "D" || strWareSortNos == "E")//流利货架摆放不分库位,推荐到库区即可 { //获取推荐库区信息 dtWare = wareBB.GetVList("wareSortNo='" + strWareSortNos + "' and wareType='03' and isDel=0").Tables[0]; if (dtWare.Rows.Count > 0) { strWareLocatorNo = dtWare.Rows[0]["wareNo"].ToString() + ",";//库区 } } else//其他货架,推荐到库位 { //获取推荐库位信息 dtWareLocator = commBB.Query("exec Proc_GetSuggestWareLocator '" + strWareSortNos.Trim(',') + "','" + strUCodeNos.Trim(',') + "','" + strMaterialNos.Trim(',') + "'").Tables[0]; if (dtWareLocator.Rows.Count > 0) { strWareLocatorNo = dtWareLocator.Rows[0]["wareNo"].ToString() + "," + dtWareLocator.Rows[0]["wareLocatorNo"].ToString();//库位 } } #endregion 备货 } } } finally { arrangeBillBoxBB.Dispose(); wareBB.Dispose(); wareLocatorBB.Dispose(); materialBB.Dispose(); commBB.Dispose(); } return strWareLocatorNo; }
/// <summary> /// 自动生成拣货计划 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnPlan_click(object sender, EventArgs e) { UStockBB stockBB = new UStockBB(); CStockUpBillBB stockUpBillBB = new CStockUpBillBB(); CStockUpDetailBB stockUpDetailBB = new CStockUpDetailBB(); LMaterialRelationBB materialRelationBB = new LMaterialRelationBB(); CSaleDetailBB saleDetailBB = new CSaleDetailBB(); LMaterialBB materialBB = new LMaterialBB(); try { CStockUpBillData stockUpBillModel = new CStockUpBillData(); DataSet dsStock = new DataSet(); DataSet dsStockUpDetail = new DataSet(); DataRow[] drsStock = null; string strInfo = ""; stockUpBillModel = stockUpBillBB.GetModel(this.IdValue);//销售备货单实例 #region 生成按单的拣货信息 //如果是按单,则直接查找按单采购物料 //dsStock = stockBB.GetVListByGroup("(saleBillNo in ('" + stockUpBillModel.saleBillNos.Replace(",", "','") // + "') or substring(financeBillNo,1,charindex('-',financeBillNo)) like '%" // + this.hidCustNo.Value + "%') and isOutStocking=0 and wareLocatorNo<>''"); //如果是按单,则直接查找按单采购物料 dsStock = stockBB.GetVListByGroup_ByFinanceBillNo("(stock.saleBillNo in ('" + stockUpBillModel.saleBillNos.Replace(",", "','") + "') or '," + stockUpBillModel.financeBillNos + ",' like '%,'+stock.financeBillNo+',%') and stock.financeBillSortNo='01' and stock.isOutStocking=0 and stock.wareLocatorNo<>''"); //获取定向的备货单明细 dsStockUpDetail = stockUpDetailBB.GetMaterielVList("stockUpBillNo='" + stockUpBillModel.stockUpBillNo + "' and financeBillSort='按单'");//and isnull(financeBillNo,'')<>'' if (dsStock.Tables[0].Rows.Count > 0) { foreach (DataRow drStockUpDetail in dsStockUpDetail.Tables[0].Rows) { //备货单明细合计出来的某种物料总数量 int needCount = Convert.ToInt32(drStockUpDetail["num"]); string strMaterialNo = drStockUpDetail["materialno"].ToString();//物料号 string strFinanceBillNo = drStockUpDetail["financeBillNo"].ToString(); //string strFinanceBillSort = drStockUpDetail["financeBillSort"].ToString(); string strFinanceBillSort = "按单"; string strDocEntry = drStockUpDetail["docEntry"].ToString();//销售订单ID string strSaleBillNo = drStockUpDetail["saleBillNo"].ToString();//销售订单号 string strLineNum = drStockUpDetail["lineNum"].ToString();//行号 string strAbsEntry = drStockUpDetail["absEntry"].ToString();//提货单编号 #region 按单的需原物料拣货 while (needCount > 0) { //根据先进先出,尽量使用同一托盘原则 //找到仓库内的同种物料所在的库位以及数量 //首先查找不少于此需要物料数量的库位 drsStock = dsStock.Tables[0].Select("financeBillNo='" + strFinanceBillNo + "' and materialNo='" + strMaterialNo + "' and num>=" + needCount.ToString()); if (drsStock.Length == 0) { drsStock = dsStock.Tables[0].Select("financeBillNo='" + strFinanceBillNo + "' and materialNo='" + strMaterialNo + "' and num>0"); } if (drsStock.Length > 0) { //当前库位所拥有该物料的数量 int haveCount = Convert.ToInt32(drsStock[0]["num"]); //如果当前库位的物料数量大于备货单所需数量,就保存当前库位 DataRow drnew = this.DtResult.NewRow(); drnew["rowId"] = Guid.NewGuid().ToString(); drnew["id"] = 0; if (haveCount >= needCount) { drnew["num"] = needCount; } else { drnew["num"] = haveCount; } drsStock[0]["num"] = Convert.ToInt32(drsStock[0]["num"]) - Convert.ToInt32(drnew["num"]);//库存数量减去已备货数量 needCount = needCount - Convert.ToInt32(drnew["num"]); drnew["stockUpBillNo"] = stockUpBillModel.stockUpBillNo; drnew["palletIndex"] = drStockUpDetail["palletIndex"].ToString(); drnew["wareNo"] = drsStock[0]["wareNo"]; drnew["wareLocatorNo"] = drsStock[0]["wareLocatorNo"]; drnew["palletNo"] = drsStock[0]["palletNo"]; drnew["stockUpMaterialNo"] = strMaterialNo;//备货物料编号 drnew["materialNo"] = drsStock[0]["materialNo"];//实际拣货物料编号 drnew["wareNm"] = drsStock[0]["wareNm"]; drnew["wareLocatorNm"] = drsStock[0]["wareLocatorNm"]; drnew["materialDesc"] = drsStock[0]["materialDesc"]; drnew["financeBillNo"] = strFinanceBillNo;//采购合同号 drnew["financeBillSort"] = strFinanceBillSort;//采购合同类型 drnew["saleBillNo"] = strSaleBillNo;//销售订单号 drnew["docEntry"] = strDocEntry;//销售订单ID drnew["lineNum"] = strLineNum;//行号 drnew["absEntry"] = strAbsEntry;//提货单号 drnew["instantState"] = "01"; drnew["isDel"] = false; this.DtResult.Rows.Add(drnew); drStockUpDetail["num"] = needCount;//重新赋值拣货数量 } else { needCount = 0; } } #endregion 按单的需原物料拣货 } } #endregion 生成按单的拣货信息 #region 销售订单没有按单采购 //备货需要逐个库位查找 dsStock = stockBB.GetVListByGroup("stock.financeBillSortNo='02' and stock.isOutStocking=0 and stock.wareLocatorNo<>''"); //获取备货的备货单明细 dsStockUpDetail = stockUpDetailBB.GetMaterielVList("stockUpBillNo='" + stockUpBillModel.stockUpBillNo + "' and financeBillSort='备货'");//根据采购合同类型,不根据采购合同号判断 and (isnull(financeBillNo,'')='' if (dsStock.Tables[0].Rows.Count > 0) { foreach (DataRow drStockUpDetail in dsStockUpDetail.Tables[0].Rows) { //备货单明细合计出来的某种物料总数量 int needCount = Convert.ToInt32(drStockUpDetail["num"]); string strMaterialNo = drStockUpDetail["materialno"].ToString();//物料号 string strFinanceBillNo = ""; string strFinanceBillSort = "备货"; string strSaleBillNo = drStockUpDetail["saleBillNo"].ToString();//销售订单号 string strLineNum = drStockUpDetail["lineNum"].ToString();//行号 string strAbsEntry = drStockUpDetail["absEntry"].ToString();//提货单编号 string strDocEntry = drStockUpDetail["docEntry"].ToString();//销售订单ID while (needCount > 0) { #region 原物料拣货 //找到仓库内的同种物料所在的库位以及数量 drsStock = dsStock.Tables[0].Select("materialno='" + strMaterialNo + "' and num>=" + needCount.ToString()); if (drsStock.Length == 0) { drsStock = dsStock.Tables[0].Select("materialno='" + strMaterialNo + "' and num>0"); } if (drsStock.Length > 0) { //当前库位所拥有该物料的数量 int haveCount = Convert.ToInt32(drsStock[0]["num"]); //如果当前库位的物料数量大于备货单所需数量,就保存当前库位 DataRow drnew = this.DtResult.NewRow(); drnew["rowId"] = Guid.NewGuid().ToString(); drnew["id"] = 0; if (haveCount >= needCount) { drnew["num"] = needCount; } else { drnew["num"] = haveCount; } drsStock[0]["num"] = Convert.ToInt32(drsStock[0]["num"]) - Convert.ToInt32(drnew["num"]);//库存数量减去已备货数量 needCount = needCount - Convert.ToInt32(drnew["num"]); drnew["stockUpBillNo"] = stockUpBillModel.stockUpBillNo; drnew["palletIndex"] = drStockUpDetail["palletIndex"].ToString(); drnew["wareNo"] = drsStock[0]["wareNo"]; drnew["wareLocatorNo"] = drsStock[0]["wareLocatorNo"]; drnew["palletNo"] = drsStock[0]["palletNo"]; drnew["stockUpMaterialNo"] = strMaterialNo;//备货物料编号 drnew["materialNo"] = drsStock[0]["materialNo"];//实际拣货物料编号 drnew["wareNm"] = drsStock[0]["wareNm"]; drnew["wareLocatorNm"] = drsStock[0]["wareLocatorNm"]; drnew["materialDesc"] = drsStock[0]["materialDesc"]; drnew["instantState"] = "01"; drnew["financeBillNo"] = strFinanceBillNo;//采购合同号 drnew["financeBillSort"] = strFinanceBillSort;//采购合同类型 drnew["saleBillNo"] = strSaleBillNo;//销售订单号 drnew["docEntry"] = strDocEntry;//销售订单ID drnew["lineNum"] = strLineNum;//行号 drnew["absEntry"] = strAbsEntry;//提货单号 drnew["isDel"] = false; this.DtResult.Rows.Add(drnew); drStockUpDetail["num"] = needCount;//重新赋值拣货数量 } else { break; } #endregion 原物料拣货 } #region 根据物料对应关系拣货 while (needCount > 0) { //需要根据物料对应关系拣其他物料 DataTable dtConvertMaterial = new DataTable(); dtConvertMaterial = materialRelationBB.GetList("oldMaterialNo='" + strMaterialNo + "'").Tables[0]; if (dtConvertMaterial.Rows.Count == 0) { break; } foreach (DataRow row in dtConvertMaterial.Rows) { //找到仓库内的有对应关系物料所在的库位以及数量 drsStock = dsStock.Tables[0].Select("materialno='" + row["newMaterialNo"].ToString() + "' and num>=" + needCount.ToString()); if (drsStock.Length == 0) { drsStock = dsStock.Tables[0].Select("materialno='" + row["newMaterialNo"].ToString() + "' and num>0"); } if (drsStock.Length > 0) { //当前库位所拥有该物料的数量 int haveCount = Convert.ToInt32(drsStock[0]["num"]); //如果当前库位的物料数量大于备货单所需数量,就保存当前库位 DataRow drnew = this.DtResult.NewRow(); drnew["rowId"] = Guid.NewGuid().ToString(); drnew["id"] = 0; if (haveCount >= needCount) { drnew["num"] = needCount; } else { drnew["num"] = haveCount; } drsStock[0]["num"] = Convert.ToInt32(drsStock[0]["num"]) - Convert.ToInt32(drnew["num"]);//库存数量减去已备货数量 needCount = needCount - Convert.ToInt32(drnew["num"]); drnew["stockUpBillNo"] = stockUpBillModel.stockUpBillNo; drnew["palletIndex"] = drStockUpDetail["palletIndex"].ToString(); drnew["wareNo"] = drsStock[0]["wareNo"]; drnew["wareLocatorNo"] = drsStock[0]["wareLocatorNo"]; drnew["palletNo"] = drsStock[0]["palletNo"]; drnew["stockUpMaterialNo"] = strMaterialNo;//备货物料编号 drnew["materialNo"] = drsStock[0]["materialNo"];//实际拣货物料编号 drnew["wareNm"] = drsStock[0]["wareNm"]; drnew["wareLocatorNm"] = drsStock[0]["wareLocatorNm"]; drnew["materialDesc"] = drsStock[0]["materialDesc"]; drnew["instantState"] = "01"; drnew["financeBillNo"] = strFinanceBillNo;//采购合同号 drnew["financeBillSort"] = strFinanceBillSort;//采购合同类型 drnew["saleBillNo"] = strSaleBillNo;//销售订单号 drnew["docEntry"] = strDocEntry;//销售订单ID drnew["lineNum"] = strLineNum;//行号 drnew["absEntry"] = strAbsEntry;//提货单号 drnew["isDel"] = false; this.DtResult.Rows.Add(drnew); drStockUpDetail["num"] = needCount;//重新赋值拣货数量 } else { needCount = 0; break; } } } #endregion 根据物料对应关系拣货 } } #endregion 销售订单没有按单采购 #region 判断是否完全拣货 DataSet dsStockUpDetail_Temp = stockUpDetailBB.GetMaterielVList("stockUpBillNo='" + stockUpBillModel.stockUpBillNo + "'"); foreach (DataRow rowStockUpDetail in dsStockUpDetail_Temp.Tables[0].Rows) { int planNum = 0, factNum = 0; DataRow[] myDataRowArray = null; string strNewMaterialNo = ""; DataTable dtConvertMaterial = new DataTable(); //计算计划备货数量 myDataRowArray = dsStockUpDetail_Temp.Tables[0].Select("materialNo='" + rowStockUpDetail["materialNo"].ToString() + "'"); foreach (DataRow row in myDataRowArray) { planNum += Convert.ToInt32(row["num"]); } //计算原物料可拣货数量 //20140725 update //myDataRowArray = this.DtResult.Select("isDel=0 and materialNo='" // + rowStockUpDetail["materialNo"].ToString() + "'"); myDataRowArray = this.DtResult.Select("isDel=0 and materialNo=stockupmaterialNo and materialNo='" + rowStockUpDetail["materialNo"].ToString() + "'"); foreach (DataRow row in myDataRowArray) { factNum += Convert.ToInt32(row["num"]); } // 20140807 add if (planNum != factNum) { //获取转换物料的拣货数量 dtConvertMaterial = materialRelationBB.GetList("oldMaterialNo='" + rowStockUpDetail["materialNo"].ToString() + "'").Tables[0]; if (dtConvertMaterial.Rows.Count > 0) { // 20140725 update //strNewMaterialNo = dtConvertMaterial.Rows[0]["newMaterialNo"].ToString(); //myDataRowArray = this.DtResult.Select("isDel=0 and materialNo='" + strNewMaterialNo + "'"); strNewMaterialNo = dtConvertMaterial.Rows[0]["oldMaterialNo"].ToString(); myDataRowArray = this.DtResult.Select("isDel=0 and stockupmaterialNo='" + strNewMaterialNo + "' and materialNo<>stockupmaterialNo "); foreach (DataRow row in myDataRowArray) { factNum += Convert.ToInt32(row["num"]); } } } //判断是否完成拣货 if (planNum != factNum) { strInfo += "物料【" + rowStockUpDetail["materialNo"].ToString() + "】,计划拣货【" + planNum.ToString() + "】件,实际拣货【" + factNum.ToString() + "】件;"; } } if (strInfo != "") { this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert(\"当前未完成拣货,不允许保存!提示信息:" + strInfo + "\");", true); } #endregion 判断是否完全拣货 this.BindGridPickOutPlan();//绑定拣货计划列表 } catch (Exception ex) { this.ClientScript.RegisterStartupScript(this.GetType(), "ShowErr", "ShowErr(\"" + Server.UrlEncode(ex.Message) + "\",3);", true); return; } finally { stockBB.Dispose(); stockUpBillBB.Dispose(); stockUpDetailBB.Dispose(); materialRelationBB.Dispose(); saleDetailBB.Dispose(); materialBB.Dispose(); } }
/// <summary> /// 手工保存拣货计划 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnSaveDetail_Click(object sender, EventArgs e) { LWareLocatorBB wareLocatorBB = new LWareLocatorBB(); LMaterialBB materialBB = new LMaterialBB(); UStockBB stockBB = new UStockBB(); SCommBB commBB = new SCommBB(); CStockUpDetailBB stockUpDetailBB = new CStockUpDetailBB(); LMaterialRelationBB materialRelationBB = new LMaterialRelationBB(); try { #region 验证数据是否填写完整 string strErrorInfo = "", strWareNo = "", strWareNm = "", strWareLocatorNm = "", strMaterialDesc = "", strWhere = ""; //strStockUpMaterialNo = "", strPalletIndex = "" DataTable dtWareLocator = new DataTable(); DataTable dtMaterial = new DataTable(); DataTable dtStock = new DataTable(); DataTable dtStockUpDetail = new DataTable(); DataRow[] myDataRowArray = null; bool isRightMaterial = false; int planNum = 0, factNum = 0; #region 校验填写库位 if (this.txtWareLocarorNo.Value.Trim() == "") { strErrorInfo = "请首先填写库位!"; this.txtWareLocarorNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } dtWareLocator = wareLocatorBB.GetVList("wareLocatorNo='" + this.txtWareLocarorNo.Value.Trim() + "'").Tables[0]; if (dtWareLocator.Rows.Count == 0) { strErrorInfo = "请首先填写正确库位!"; this.txtWareLocarorNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } strWareNo = dtWareLocator.Rows[0]["wareNo"].ToString();//库区编码 strWareNm = dtWareLocator.Rows[0]["wareNm"].ToString();//库区名称 strWareLocatorNm = dtWareLocator.Rows[0]["wareLocatorNm"].ToString();//库位名称 if (strWareNo != "GLHJ01" && strWareNo != "GLHJ02" && this.txtPalletNo.Value.Trim() == "") { strErrorInfo = "请首先填写托盘号!"; this.txtPalletNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } #endregion 校验填写库位 #region 校验填写物料 if (this.txtMaterialNo.Value.Trim() == "") { strErrorInfo = "请首先填写物料编号!"; this.txtMaterialNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } dtMaterial = materialBB.GetVList("materialNo='" + this.txtMaterialNo.Value.Trim() + "'").Tables[0]; if (dtMaterial.Rows.Count == 0) { strErrorInfo = "请首先填写正确物料!"; this.txtMaterialNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } strMaterialDesc = dtMaterial.Rows[0]["materialNm_CH"].ToString();//物料描述 //strStockUpMaterialNo = this.txtMaterialNo.Value.Trim().ToUpper();//计划备货物料 #endregion 校验填写物料 #region 校验填写数量 if (this.tbNum.Text.Trim() == "") { strErrorInfo = "请首先填写数量!"; this.tbNum.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } if (!CommFunction.IsInt(this.tbNum.Text.Trim())) { strErrorInfo = "数量格式错误!"; this.tbNum.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } if (Convert.ToInt32(this.tbNum.Text.Trim()) <= 0) { strErrorInfo = "数量必须大于0!"; this.tbNum.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } //校验拣货数量是否超出计划备货数量 strWhere = "stockUpBillNo='" + this.stockUpBillNo.Text.Trim() + "' and palletIndex='" + this.PalletIndex + "' and materialNo='" + this.StockUpMaterialNo + "'"; if (this.txtFinanceBillNo.Value.Trim() != "") { strWhere += " and financeBillNo='" + this.txtFinanceBillNo.Value.Trim() + "'"; } if (this.SaleBillNo != "" && this.SaleBillNo != "0") { strWhere += " and saleBillNo='" + this.SaleBillNo + "'"; } if (this.LineNum != "" && this.LineNum != "0") { strWhere += " and lineNum='" + this.LineNum + "'"; } if (this.AbsEntry != "" && this.AbsEntry != "0") { strWhere += " and absEntry='" + this.AbsEntry + "'"; } dtStockUpDetail = stockUpDetailBB.GetList(strWhere).Tables[0]; foreach (DataRow row in dtStockUpDetail.Rows) { planNum += Convert.ToInt32(dtStockUpDetail.Rows[0]["num"]);//计算计划备货数量 } //计算实际备货数量 strWhere = "isDel=0 and stockUpBillNo='" + this.stockUpBillNo.Text.Trim() + "' and palletIndex='" + this.PalletIndex + "' and stockUpMaterialNo='" + this.StockUpMaterialNo + "'"; if (this.txtFinanceBillNo.Value.Trim() != "") { strWhere += " and financeBillNo='" + this.txtFinanceBillNo.Value.Trim() + "'"; } if (this.SaleBillNo != "" && this.SaleBillNo != "0") { strWhere += " and saleBillNo='" + this.SaleBillNo + "'"; } if (this.LineNum != "" && this.LineNum != "0") { strWhere += " and lineNum='" + this.LineNum + "'"; } if (this.AbsEntry != "" && this.AbsEntry != "0") { strWhere += " and absEntry='" + this.AbsEntry + "'"; } myDataRowArray = this.DtResult.Select(strWhere); foreach (DataRow row in myDataRowArray) { factNum += Convert.ToInt32(row["num"]); } if (factNum + Convert.ToInt32(this.tbNum.Text.Trim()) > planNum) { if (this.SaleBillNo != "" && this.SaleBillNo != "0") { strErrorInfo = "托盘【" + this.PalletIndex + "】的提货单【" + this.AbsEntry + "】销售订单【" + this.SaleBillNo + "】行号【" + this.LineNum + "】物料【" + this.StockUpMaterialNo + "】计划备货【" + planNum.ToString() + "】,已经备货【" + factNum + "】,填写数量超出还需要备货数量!"; } else { strErrorInfo = "托盘【" + this.PalletIndex + "】的物料【" + this.StockUpMaterialNo + "】计划备货【" + planNum.ToString() + "】,已经备货【" + factNum + "】,填写数量超出还需要备货数量!"; } this.tbNum.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } #endregion 校验填写数量 #region 判断是否重复拣货 strWhere = "isDel=0 and palletIndex='" + this.PalletIndex + "' and wareLocatorNo='" + this.txtWareLocarorNo.Value.Trim() + "' and materialNo='" + this.txtMaterialNo.Value.Trim() + "'"; if (this.txtFinanceBillNo.Value.Trim() != "") { strWhere += " and financeBillNo='" + this.txtFinanceBillNo.Value.Trim() + "'"; } if (this.SaleBillNo != "" && this.SaleBillNo != "0") { strWhere += " and saleBillNo='" + this.SaleBillNo + "'"; } if (this.LineNum != "" && this.LineNum != "0") { strWhere += " and lineNum='" + this.LineNum + "'"; } if (this.AbsEntry != "" && this.AbsEntry != "0") { strWhere += " and absEntry='" + this.AbsEntry + "'"; } myDataRowArray = this.DtResult.Select(strWhere); if (myDataRowArray.Length > 0) { if (this.txtFinanceBillNo.Value.Trim() == "") { if (this.SaleBillNo != "" && this.SaleBillNo != "0") { strErrorInfo = "托盘【" + this.PalletIndex + "】的提货单【" + this.AbsEntry + "】销售订单【" + this.SaleBillNo + "】行号【" + this.LineNum + "】已经从库位【" + this.txtWareLocarorNo.Value.Trim() + "】中拣出物料【" + this.txtMaterialNo.Value.Trim() + "】,请首先删除原有记录,再添加新记录!"; } else { strErrorInfo = "托盘【" + this.PalletIndex + "】已经从库位【" + this.txtWareLocarorNo.Value.Trim() + "】中拣出物料【" + this.txtMaterialNo.Value.Trim() + "】,请首先删除原有记录,再添加新记录!"; } } else { if (this.SaleBillNo != "" && this.SaleBillNo != "0") { strErrorInfo = "托盘【" + this.PalletIndex + "】的提货单【" + this.AbsEntry + "】销售订单【" + this.SaleBillNo + "】行号【" + this.LineNum + "】已经从库位【" + this.txtWareLocarorNo.Value.Trim() + "】中拣出采购合同【" + this.txtFinanceBillNo.Value.Trim() + "】的物料【" + this.txtMaterialNo.Value.Trim() + "】,请首先删除原有记录,再添加新记录!"; } else { strErrorInfo = "托盘【" + this.PalletIndex + "】已经从库位【" + this.txtWareLocarorNo.Value.Trim() + "】中拣出采购合同【" + this.txtFinanceBillNo.Value.Trim() + "】的物料【" + this.txtMaterialNo.Value.Trim() + "】,请首先删除原有记录,再添加新记录!"; } } this.txtMaterialNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } #endregion 判断是否重复拣货 #region 根据库位、物料、采购合同号,判断是否有货 strWhere = "wareLocatorNo='" + this.txtWareLocarorNo.Value.Trim() + "' and materialNo='" + this.txtMaterialNo.Value.Trim() + "'"; if (this.txtFinanceBillNo.Value.Trim() != "") { strWhere += " and financeBillNo='" + this.txtFinanceBillNo.Value.Trim() + "'"; } dtStock = stockBB.GetVList(strWhere).Tables[0]; if (dtStock.Rows.Count == 0) { if (this.txtFinanceBillNo.Value.Trim() == "") { strErrorInfo = "库位【" + this.txtWareLocarorNo.Value.Trim() + "】中不存在物料【" + this.txtMaterialNo.Value.Trim() + "】!"; } else { strErrorInfo = "库位【" + this.txtWareLocarorNo.Value.Trim() + "】中不存在采购合同【" + this.txtFinanceBillNo.Value.Trim() + "】的物料【" + this.txtMaterialNo.Value.Trim() + "】!"; } this.txtMaterialNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } #endregion 根据库位、物料、采购合同号,判断是否有货 #region 校验物料是否是需要拣出的物料 if (this.StockUpMaterialNo == this.txtMaterialNo.Value.Trim()) { isRightMaterial = true; } else { DataTable dtConvertMaterial = new DataTable(); dtConvertMaterial = materialRelationBB.GetList("newMaterialNo='" + this.txtMaterialNo.Value.Trim() + "'").Tables[0]; if (dtConvertMaterial.Rows.Count > 0) { foreach (DataRow row in dtConvertMaterial.Rows) { if (this.StockUpMaterialNo == row["oldMaterialNo"].ToString()) { isRightMaterial = true; break; } } } } if (isRightMaterial == false) { strErrorInfo = "当前物料不在备货计划内!"; this.txtMaterialNo.Focus(); this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showFloatDetail();alert('" + strErrorInfo + "');", true); return; } #endregion 校验物料是否是需要拣出的物料 #endregion 验证数据是否填写完整 DataRow myDataRow = this.DtResult.NewRow(); myDataRow["rowId"] = Guid.NewGuid().ToString(); myDataRow["id"] = 0; myDataRow["num"] = this.tbNum.Text.Trim(); myDataRow["stockUpBillNo"] = ""; myDataRow["palletIndex"] = this.PalletIndex;//托盘序号 myDataRow["wareNo"] = strWareNo; myDataRow["wareLocatorNo"] = this.txtWareLocarorNo.Value.Trim().ToUpper(); myDataRow["palletNo"] = this.txtPalletNo.Value.Trim(); myDataRow["stockUpMaterialNo"] = this.StockUpMaterialNo;//计划备货物料 myDataRow["materialNo"] = this.txtMaterialNo.Value.Trim();//实际拣货物料 myDataRow["wareNm"] = strWareNm; myDataRow["wareLocatorNm"] = strWareLocatorNm; myDataRow["materialDesc"] = strMaterialDesc; myDataRow["instantState"] = "01"; myDataRow["financeBillNo"] = this.txtFinanceBillNo.Value.Trim().ToUpper();//采购合同号 myDataRow["financeBillSort"] = this.txtFinanceBillNo.Value.Trim() == "" ? "备货" : "按单";//采购合同类型 myDataRow["saleBillNo"] = this.SaleBillNo;//销售订单号 myDataRow["docEntry"] = this.DocEntry;//销售订单ID myDataRow["lineNum"] = this.LineNum;//销售订单行号 myDataRow["absEntry"] = this.AbsEntry;//提货单号 myDataRow["isDel"] = false; this.DtResult.Rows.Add(myDataRow); this.BindGridPickOutPlan();//绑定拣货明细列表 } finally { wareLocatorBB.Dispose(); materialBB.Dispose(); stockBB.Dispose(); commBB.Dispose(); stockUpDetailBB.Dispose(); materialRelationBB.Dispose(); } }
/// <summary> /// 自动排托 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnAutoArrange_Click(object sender, EventArgs e) { //2015-10-21 董利特修改 //首先用自动排托的功能进行测试 int maxManualRegion = int.Parse(txtRegionNum.Text.Trim()); int maxManualNum = int.Parse(txtMaxNum.Text.Trim()); LMaterialBB materialBB = new LMaterialBB(); try { if (this.DtDetail == null || this.DtDetail.Rows.Count <= 0) { this.ClientScript.RegisterStartupScript(this.GetType(), "AutoArrange", "alert(\"该到货单没有任何明细,无法自动排拖!\");", true); } //判断是否已经生成排托明细 if (this.DtResult.Rows.Count > 0) { this.ClientScript.RegisterStartupScript(this.GetType(), "AutoArrange", "alert(\"该到货单已经生成排托明细,无法自动排拖!\");", true); return; } LMaterialData materialModel = new LMaterialData(); DataView dvArriveDetail = this.DtDetail.DefaultView; dvArriveDetail.Sort = "financeBillSort,wareSortNo,financeBillNo,materialNo";//customNo //遍历所有到货单的所有物料 foreach (DataRow drArriveDetail in dvArriveDetail.ToTable().Rows) { //非标准箱不予排拖 //if (drArriveDetail["isStandardBox"].ToString() == "0" // || drArriveDetail["isStandardBox"].ToString().Trim() == "N" // || drArriveDetail["isStandardBox"].ToString().Trim() == "") //{ // continue; //} if (drArriveDetail["isStandardBox"].ToString().Trim() == "N" || drArriveDetail["isStandardBox"].ToString().Trim() == "") { continue; } int leavingNum = Convert.ToInt32(drArriveDetail["arrangeBoxNum_leaving"]);//到货单明细剩余未排数量 int maxPalletIndex = 0;//最大托盘序号 //int empty = 5;//区域空余数量 int empty = maxManualNum; int maxRegion = 1;//区域 bool isNewPallet = true;//是否需要新托盘 DataView dvResult = null; //采购订单类型 备货 if (drArriveDetail["financeBillSort"].ToString() == "备货") { #region 备货订单排托 materialModel = materialBB.GetModel(drArriveDetail["materialNo"].ToString()); //物料放置高位货架的 if ((materialModel.wareSortNo == "B" || materialModel.wareSortNo == "C")) { #region 物料放置高位货架的,相同物料进行排托 dvResult = this.DtResult.DefaultView; dvResult.Sort = "wareSortNo,materialNo,palletIndex"; dvResult.RowFilter = "isdel=0 and arriveBillNo='" + drArriveDetail["arriveBillNo"] + "' and wareSortNo='" + drArriveDetail["wareSortNo"].ToString() + "'" + " and materialNo='" + drArriveDetail["materialNo"] + "'"; #endregion 物料放置高位货架的,相同物料进行排托 } else if (materialModel.wareSortNo == "A" || materialModel.wareSortNo == "D" || materialModel.wareSortNo == "E") { #region 非高位货架 同一区域的排拖 dvResult = this.DtResult.DefaultView; dvResult.Sort = "wareSortNo,palletIndex"; dvResult.RowFilter = "isdel=0 and arriveBillNo='" + drArriveDetail["arriveBillNo"] + "' and wareSortNo='" + drArriveDetail["wareSortNo"].ToString() + "'"; #endregion 非高位货架 同一区域的排拖 } #endregion 备货订单排托 } else { #region 采购订单类型为按单 //找到当前采购订单 同一物料已经排拖的数据 //同一客户的不同采购订单的相同物料可以排在同一托盘 dvResult = this.DtResult.DefaultView; dvResult.Sort = "customNo,materialNo,financeBillNo,palletIndex,region"; dvResult.RowFilter = "isdel=0 and arriveBillNo='" + drArriveDetail["arriveBillNo"] + "' and ((isnull(customNo,'')<>'' and customNo='" + drArriveDetail["customNo"] + "') or (isnull(customNo,'')='' and financeBillNo='" + drArriveDetail["financeBillNo"] + "')) "; #endregion 采购订单类型为按单 } #region 查找有剩余位置的托盘 //找到同种采购订单,同种物料,有剩余位置的托盘 if (dvResult.ToTable() != null && dvResult.ToTable().Rows.Count > 0) { foreach (DataRow dr in dvResult.ToTable().Rows) { //遍历 同采购订单的同物料并且已经排拖的数据 ,找到 最大的托盘号,以及已经排拖的总数量 if (Convert.ToInt32(dr["palletIndex"]) > maxPalletIndex || Convert.ToInt32(dr["region"]) > maxRegion) { //获取当前订单,当前物料的最大托盘号(由于自动排拖,有空余位置的托盘,是最后一个托盘号) maxPalletIndex = Convert.ToInt32(dr["palletIndex"]); maxRegion = Convert.ToInt32(dr["region"]); } } //计算最后一个托盘的空余位置数量 DataRow[] drsLastRegion = this.DtResult.Select("palletIndex='" + maxPalletIndex.ToString() + "' and region='" + maxRegion.ToString() + "'"); if (drsLastRegion.Length > 0 && drsLastRegion[0]["materialNo"] == drArriveDetail["materialNo"]) { //查找到相同物料 // empty = 5 - Convert.ToInt32(drsLastRegion[0]["boxNum"]); empty = maxManualNum - Convert.ToInt32(drsLastRegion[0]["boxNum"]); if (empty > 0) { isNewPallet = false;//不需要新托盘 } } else { if (drsLastRegion.Length > 0 && drsLastRegion[0]["materialNo"] != drArriveDetail["materialNo"]) { maxRegion++; } //if (maxRegion > 8) if (maxRegion > maxManualRegion) { maxPalletIndex = maxPalletIndex + 1; maxRegion = 1; } else { isNewPallet = false;//不需要新托盘 } } } #endregion 查找有剩余位置的托盘 #region 生成排托计划 if (isNewPallet)//需要使用新托盘 { DataView dvMaxPallet = this.DtResult.DefaultView; dvMaxPallet.RowFilter = "isdel=0 "; dvMaxPallet.Sort = "palletIndex"; foreach (DataRow drMaxPallet in dvMaxPallet.ToTable().Rows) { //遍历 同采购订单的同物料并且已经排拖的数据 ,找到 最大的托盘号,以及已经排拖的总数量 if (Convert.ToInt32(drMaxPallet["palletIndex"]) > maxPalletIndex) { //获取 最大托盘号+1为新的托盘 maxPalletIndex = Convert.ToInt32(drMaxPallet["palletIndex"]); } } maxPalletIndex = maxPalletIndex + 1; maxRegion = 1; } int lastNum = leavingNum; do { while (maxRegion <= maxManualRegion && lastNum > 0) { //把之前的托盘不足的补全 DataRow drnew = this.DtResult.NewRow(); drnew["rowId"] = Guid.NewGuid().ToString(); drnew["isdel"] = "0"; drnew["id"] = 0; drnew["boxNum"] = lastNum >= empty ? empty : lastNum;//要补全的托盘,如果剩余不足,数量就等于剩余数量 drnew["hideAmount"] = lastNum >= empty ? empty : lastNum; drArriveDetail["arrangeBoxNum_leaving"] = Convert.ToInt32(drArriveDetail["arrangeBoxNum_leaving"]) - (lastNum >= empty ? empty : lastNum);//采购订单明细扣除相应已经排拖的数量 drArriveDetail["arrangeBoxNum"] = Convert.ToInt32(drArriveDetail["arrangeBoxNum"]) + (lastNum >= empty ? empty : lastNum);//采购订单明细扣除相应已经排拖的数量 drnew["ischeck"] = false; drnew["arrangeBillNo"] = "PT" + this.ArriveBillNo; drnew["arriveBillNo"] = drArriveDetail["arriveBillNo"]; drnew["materialDesc"] = drArriveDetail["materialDesc"]; drnew["financeBillNo"] = drArriveDetail["financeBillNo"]; drnew["materialNo"] = drArriveDetail["materialNo"]; drnew["wareSortNo"] = drArriveDetail["wareSortNo"]; drnew["wareSortNm"] = drArriveDetail["wareSortNm"]; drnew["region"] = maxRegion; drnew["palletIndex"] = maxPalletIndex;//托盘序号 drnew["customNo"] = drArriveDetail["customNo"];//客户编号 this.DtResult.Rows.Add(drnew); maxRegion = maxRegion + 1; lastNum = lastNum - empty; //empty = 5; empty = maxManualNum; } maxPalletIndex += 1; maxRegion = 1; } while (lastNum > 0); #endregion 生成排托计划 } this.BindDetailTable();//绑定排托明细列表 this.SaveStencilDetailViewState();//保存 this.BindGrid();//绑定到货明细列表 } catch (Exception ex) { this.ClientScript.RegisterStartupScript(this.GetType(), "ShowErr", "ShowErr(\"" + Server.UrlEncode(ex.Message) + "\",3);", true); return; } finally { materialBB.Dispose(); } }