public string OnShelves(DataTable dt, string cartonNO, string UserCode) { WarehouseFacade facade = null; InventoryFacade _Invenfacade = null; DBDateTime dbTime = FormatHelper.GetNowDBDateTime(DataProvider); object obj = null; if (facade == null) { facade = new WarehouseFacade(DataProvider); } if (_Invenfacade == null) { _Invenfacade = new InventoryFacade(DataProvider); } this.DataProvider.BeginTransaction(); try { string Stno = string.Empty; for (int j = 0; j < dt.Rows.Count; j++) { obj = facade.GetAsndetail(int.Parse(dt.Rows[j]["stline"].ToString()), dt.Rows[j]["stno"].ToString()); if (obj != null) { Stno = (obj as Asndetail).Stno; #region 更新asndetail表 更新actqty和状态 //update actqty and status Asndetail asndetail = obj as Asndetail; asndetail.ActQty = asndetail.QcpassQty; asndetail.Status = ASNDetail_STATUS.ASNDetail_Close; asndetail.MaintainDate = dbTime.DBDate; asndetail.MaintainTime = dbTime.DBTime; asndetail.MaintainUser = UserCode; facade.UpdateAsndetail(asndetail); #endregion #region 更新asndetailitem表 更新 actqty 和更新invoicedetail表,更新actqty object[] itemobjs = facade.GetASNDetailItembyStnoAndStline(asndetail.Stno, asndetail.Stline.ToString()); if (itemobjs != null) { for (int i = 0; i < itemobjs.Length; i++) { Asndetailitem asnitem = itemobjs[i] as Asndetailitem; asnitem.ActQty = asnitem.QcpassQty; asnitem.MaintainDate = dbTime.DBDate; asnitem.MaintainTime = dbTime.DBTime; asnitem.MaintainUser = UserCode; facade.UpdateAsndetailitem(asnitem); object invoiobj = _Invenfacade.GetInvoicesDetail(asnitem.Invno, int.Parse(asnitem.Invline)); InvoicesDetail inv = invoiobj as InvoicesDetail; inv.ActQty += Convert.ToInt32(asnitem.QcpassQty); inv.MaintainDate = dbTime.DBDate; inv.MaintainTime = dbTime.DBTime; inv.MaintainUser = UserCode; _Invenfacade.UpdateInvoicesDetail(inv); } } #endregion //新增数据tblstoragedetail object asnobj = facade.GetAsn(asndetail.Stno); if (asnobj == null) { this.DataProvider.RollbackTransaction(); // WebInfoPublish.Publish(this, "$Error_ASN_NO_DATA", this.languageComponent1); return("ASN 中没有数据:" + asndetail.Stno); } Asn asn = asnobj as Asn; #region 在storagedetail表中增加一条数据 StorageDetail stordetail = _Invenfacade.CreateNewStorageDetail(); stordetail.AvailableQty = asndetail.ActQty; stordetail.CartonNo = asndetail.Cartonno; stordetail.CDate = dbTime.DBDate; stordetail.CTime = dbTime.DBTime; stordetail.CUser = UserCode; stordetail.DQMCode = asndetail.DqmCode; stordetail.FacCode = (asnobj as Asn).FacCode; stordetail.FreezeQty = 0; stordetail.LastStorageAgeDate = dbTime.DBDate; stordetail.LocationCode = FormatHelper.PKCapitalFormat(FormatHelper.CleanString(cartonNO)); stordetail.Lotno = asndetail.Lotno; stordetail.MaintainDate = dbTime.DBDate; stordetail.MaintainTime = dbTime.DBTime; stordetail.MaintainUser = UserCode; stordetail.MCode = asndetail.MCode; stordetail.MDesc = asndetail.MDesc; stordetail.ProductionDate = asndetail.Production_Date; stordetail.ReworkApplyUser = (asnobj as Asn).ReworkapplyUser; stordetail.StorageAgeDate = string.IsNullOrEmpty(asndetail.StorageageDate.ToString()) ? dbTime.DBDate : int.Parse(asndetail.StorageageDate); stordetail.StorageCode = (asnobj as Asn).StorageCode; stordetail.StorageQty = asndetail.ActQty; stordetail.SupplierLotNo = asndetail.Supplier_lotno; stordetail.Unit = asndetail.Unit; _Invenfacade.AddStorageDetail(stordetail); #endregion #region 在StorageDetailSN表中增加数据 //新增数据tblStorageDetailSN object[] snobj = facade.GetASNDetailSNbyStnoandStline(asndetail.Stno, asndetail.Stline.ToString()); if (snobj == null) { this.DataProvider.RollbackTransaction(); // WebInfoPublish.Publish(this, "$Error_ASNDetail_NO_DATA", this.languageComponent1); return("ASNDetail表中没有数据:" + asndetail.Stno + "/" + asndetail.Stline.ToString()); } for (int i = 0; i < snobj.Length; i++) { StorageDetailSN storDetailSN = _Invenfacade.CreateNewStorageDetailSN(); Asndetailsn detailSN = snobj[i] as Asndetailsn; storDetailSN.CartonNo = detailSN.Cartonno; storDetailSN.CDate = dbTime.DBDate; storDetailSN.CTime = dbTime.DBTime; storDetailSN.CUser = UserCode; storDetailSN.MaintainDate = dbTime.DBDate; storDetailSN.MaintainTime = dbTime.DBTime; storDetailSN.MaintainUser = UserCode; storDetailSN.PickBlock = "N"; storDetailSN.SN = detailSN.Sn; _Invenfacade.AddStorageDetailSN(storDetailSN); } #endregion #region 在invinouttrans表中增加一条数据 InvInOutTrans trans = facade.CreateNewInvInOutTrans(); trans.CartonNO = asndetail.Cartonno; trans.DqMCode = asndetail.DqmCode; trans.FacCode = asn.FacCode; trans.FromFacCode = asn.FromfacCode; trans.FromStorageCode = asn.FromstorageCode; trans.InvNO = asn.Invno; trans.InvType = asn.StType; trans.LotNo = asndetail.Lotno; trans.MaintainDate = dbTime.DBDate; trans.MaintainTime = dbTime.DBTime; trans.MaintainUser = UserCode; trans.MCode = asndetail.MCode; trans.ProductionDate = asndetail.Production_Date; trans.Qty = asndetail.ActQty; trans.Serial = 0; trans.StorageAgeDate = int.Parse(asndetail.StorageageDate); trans.StorageCode = asn.StorageCode; trans.SupplierLotNo = asndetail.Supplier_lotno; trans.TransNO = asn.Stno; trans.TransType = "IN"; trans.Unit = asndetail.Unit; facade.AddInvInOutTrans(trans); #endregion } } #region 架完成后,检查这个stno在asndetail中的状态是否都是close,cancel,如果是将asn表的状态更新为close,cancel if (facade.JudgeASNDetailStatus(Stno, ASNDetail_STATUS.ASNDetail_Close)) { object asnobj = facade.GetAsn(Stno); if (asnobj == null) { this.DataProvider.RollbackTransaction(); //WebInfoPublish.Publish(this, "$Error_ASN_NO_DATA", this.languageComponent1); return("ASN 中没有数据:" + Stno); } Asn asn = asnobj as Asn; asn.Status = ASN_STATUS.ASN_Close; asn.MaintainDate = dbTime.DBDate; asn.MaintainTime = dbTime.DBTime; asn.MaintainUser = UserCode; facade.UpdateAsn(asn); } if (facade.JudgeASNDetailStatus(Stno, ASNDetail_STATUS.ASNDetail_Cancel)) { object asnobj = facade.GetAsn(Stno); if (asnobj == null) { this.DataProvider.RollbackTransaction(); //WebInfoPublish.Publish(this, "$Error_ASN_NO_DATA", this.languageComponent1); return("ASN中没有数据:" + Stno); } Asn asn = asnobj as Asn; asn.Status = ASN_STATUS.ASN_Cancel; asn.MaintainDate = dbTime.DBDate; asn.MaintainTime = dbTime.DBTime; asn.MaintainUser = UserCode; facade.UpdateAsn(asn); } #endregion #region 通过入库指令号,查找invno,检查actqty是否等于planqty,如果等于将finishflag=Y object asnobj1 = facade.GetAsn(Stno); if (asnobj1 == null) { this.DataProvider.RollbackTransaction(); //WebInfoPublish.Publish(this, "$Error_ASN_NO_DATA", this.languageComponent1); return("ASN中没有数据:" + Stno); } Asn asn1 = asnobj1 as Asn; if (facade.JudgeInvoiceDetailStatus(asn1.Invno)) { object invobj = _Invenfacade.GetInvoices(asn1.Invno); if (invobj == null) { this.DataProvider.RollbackTransaction(); //WebInfoPublish.Publish(this, "$Error_INV_NO_DATA", this.languageComponent1); return("INV中没有数据:" + asn1.Invno); } Invoices inv = invobj as Invoices; inv.FinishFlag = "Y"; inv.MaintainDate = dbTime.DBDate; inv.MaintainTime = dbTime.DBTime; inv.MaintainUser = UserCode; _Invenfacade.UpdateInvoices(inv); } #endregion this.DataProvider.CommitTransaction(); } catch (Exception ex) { this.DataProvider.RollbackTransaction(); } return("上架成功"); }
private string autoCreateASNFromCheckoutInfo(string invNo, Pick pick) { try { InvoicesDetail invD = (InvoicesDetail)_InventoryFacade.GetInvoicesDetail(invNo); CARTONINVOICES[] cartos = _warehouseFacade.GetGrossAndWeight(pick.PickNo); string stno = CreateStNO(); Asn asn = new Asn(); asn.Stno = stno; asn.StType = "UB"; asn.CDate = FormatHelper.TODateInt(DateTime.Now); asn.CTime = FormatHelper.TOTimeInt(DateTime.Now); asn.CUser = GetUserCode(); asn.Status = "Release"; asn.Invno = invNo; asn.FacCode = pick.FacCode; if (cartos.Length > 0) { asn.Gross_weight = (decimal)cartos[0].GROSS_WEIGHT; asn.Volume = cartos[0].VOLUME; } asn.StorageCode = invD.StorageCode ?? " "; asn.MaintainUser = GetUserCode(); asn.MaintainTime = FormatHelper.TOTimeInt(DateTime.Now); asn.MaintainDate = FormatHelper.TODateInt(DateTime.Now); CartonInvDetailMaterial[] cartonMs = _warehouseFacade.GetCartonInvDetailMaterial(pick.PickNo); MOModel.ItemFacade _itemfacade = new BenQGuru.eMES.MOModel.ItemFacade(this.DataProvider); int i = 1; this.DataProvider.BeginTransaction(); foreach (CartonInvDetailMaterial m in cartonMs) { object materobj = _itemfacade.GetMaterial(m.MCODE); Domain.MOModel.Material mater = materobj as Domain.MOModel.Material; if (materobj == null) { this.DataProvider.RollbackTransaction(); throw new Exception("物料表没有物料:" + m.MCODE); } string custMCode = _warehouseFacade.GetCustMCodeForUB(pick.PickNo, m.DQMCODE); if (mater.MCONTROLTYPE == SAP_CONTROLTYPE.SAP_ITEM_CONTROL_KEYPARTS) { ASNDetail asnd = new ASNDetail(); asnd.ActQty = 0; //asnd.CartonNo = " "; asnd.DQMCode = m.DQMCODE; asnd.Qty = (int)m.QTY; asnd.StLine = i.ToString(); asnd.CustMCode = custMCode; asnd.MCode = m.MCODE; asnd.Status = "Release"; asnd.StNo = stno; asnd.MDesc = mater.MchshortDesc; asnd.Unit = m.UNIT; asnd.CDate = FormatHelper.TODateInt(DateTime.Now); asnd.CTime = FormatHelper.TOTimeInt(DateTime.Now); asnd.CUser = GetUserCode(); asnd.MaintainDate = FormatHelper.TODateInt(DateTime.Now); asnd.MaintainTime = FormatHelper.TOTimeInt(DateTime.Now); asnd.MaintainUser = GetUserCode(); asnd.LotNo = " "; CARTONINVDETAILSN[] sns = _warehouseFacade.GetCartonInvDetailSn(m.CARTONNO, pick.PickNo); List <string> snList = new List <string>(); if (sns.Length > 0) { foreach (CARTONINVDETAILSN sn in sns) { snList.Add(sn.SN); } Asndetail detail = _warehouseFacade.GetFirstCheckInAsnDetail(snList); if (detail != null) { asnd.ProductionDate = detail.Production_Date; asnd.SupplierLotNo = detail.Supplier_lotno; asnd.LotNo = detail.Lotno; asnd.StorageAgeDate = detail.StorageageDate; } } DBDateTime dbTime = FormatHelper.GetNowDBDateTime(this.DataProvider); Asndetailitem detailitem = _warehouseFacade.CreateNewAsndetailitem(); detailitem.CDate = dbTime.DBDate; detailitem.CTime = dbTime.DBTime; detailitem.CUser = this.GetUserCode(); detailitem.MaintainDate = dbTime.DBDate; detailitem.MaintainTime = dbTime.DBTime; detailitem.MaintainUser = this.GetUserCode(); detailitem.Stline = i.ToString(); detailitem.Stno = asn.Stno; detailitem.MCode = asnd.MCode; detailitem.DqmCode = asnd.DQMCode; //查找对应的SAP单 object[] qtyobjs = _warehouseFacade.GetSAPNOandLinebyMCODE(asn.Invno, asnd.MCode, asnd.DQMCode); if (qtyobjs == null) { this.DataProvider.RollbackTransaction(); throw new Exception("入库需求" + asn.Invno + " 没有相关物料" + asnd.MCode + "," + asnd.DQMCode + "或者此行已被取消!"); } decimal sub = asnd.Qty; for (int k = 0; k < qtyobjs.Length; k++) { InvoicesDetail invdetail = qtyobjs[k] as InvoicesDetail; decimal subNeed = 0; object findNeedQTY_old = _warehouseFacade.GetNeedImportQtyOLD(invdetail.InvNo, invdetail.InvLine, asnd.StNo); //找这个invoice行已经导入了多少,和判退多少 Asndetailitem subItemOld = findNeedQTY_old as Asndetailitem; object findNeedQTY_now = _warehouseFacade.GetNeedImportQtyNow(invdetail.InvNo, invdetail.InvLine, asnd.StNo); //找这个invoice行已经导入了多少,和判退多少 Asndetailitem subItemNow = findNeedQTY_now as Asndetailitem; subNeed = invdetail.PlanQty - subItemOld.Qty + (subItemOld.Qty - subItemOld.ReceiveQty) + (subItemOld.ReceiveQty - subItemOld.QcpassQty); subNeed = subNeed - subItemNow.Qty; if (subNeed == 0) { continue; } //如果箱数量大于需求数量差---进行拆分 if (sub > subNeed) { sub = sub - subNeed; // sub是剩余的 detailitem.Qty = subNeed; detailitem.Invline = invdetail.InvLine.ToString(); detailitem.Invno = invdetail.InvNo; detailitem.ActQty = detailitem.Qty; detailitem.QcpassQty = detailitem.Qty; detailitem.ReceiveQty = detailitem.Qty; _warehouseFacade.AddAsndetailitem(detailitem); } //如果箱单数量小于等于需求数量差--直接填入 else { detailitem.Qty = sub; detailitem.Invline = invdetail.InvLine.ToString(); detailitem.Invno = invdetail.InvNo; detailitem.ActQty = detailitem.Qty; detailitem.QcpassQty = detailitem.Qty; detailitem.ReceiveQty = detailitem.Qty; _warehouseFacade.AddAsndetailitem(detailitem); sub = 0; } if (sub == 0) { break; } } //如果sub>0,说明导入数量过多,报错 if (sub > 0) { this.DataProvider.RollbackTransaction(); throw new Exception("箱单导入数量与需求数量不符!"); } foreach (CARTONINVDETAILSN sn in sns) { Asndetailsn asnSN = new Asndetailsn(); asnSN.CDate = FormatHelper.TODateInt(DateTime.Now); asnSN.CTime = FormatHelper.TOTimeInt(DateTime.Now); asnSN.CUser = GetUserCode(); asnSN.MaintainDate = FormatHelper.TODateInt(DateTime.Now); asnSN.MaintainTime = FormatHelper.TOTimeInt(DateTime.Now); asnSN.MaintainUser = GetUserCode(); asnSN.Sn = sn.SN; asnSN.Stline = i.ToString(); asnSN.Stno = stno; _warehouseFacade.AddAsndetailsn(asnSN); } _InventoryFacade.AddASNDetail(asnd); } else if (mater.MCONTROLTYPE == SAP_CONTROLTYPE.SAP_ITEM_CONTROL_LOT || mater.MCONTROLTYPE == SAP_CONTROLTYPE.SAP_ITEM_CONTROL_NOCONTROL) { ASNDetail asnd = new ASNDetail(); asnd.ActQty = 0; asnd.CustMCode = custMCode; asnd.DQMCode = m.DQMCODE; asnd.Qty = (int)m.QTY; asnd.StLine = i.ToString(); asnd.MCode = m.MCODE; asnd.StNo = stno; asnd.Status = "Release"; asnd.MDesc = mater.MchshortDesc; asnd.Unit = m.UNIT; asnd.CDate = FormatHelper.TODateInt(DateTime.Now); asnd.CTime = FormatHelper.TOTimeInt(DateTime.Now); asnd.CUser = GetUserCode(); asnd.MaintainDate = FormatHelper.TODateInt(DateTime.Now); asnd.MaintainTime = FormatHelper.TOTimeInt(DateTime.Now); asnd.MaintainUser = GetUserCode(); asnd.LotNo = " "; Pickdetailmaterial pickMaterial = (Pickdetailmaterial)_warehouseFacade.GetLotNOInformationFromDQMCODE(m.DQMCODE, pick.PickNo); if (pickMaterial != null) { asnd.ProductionDate = pickMaterial.Production_Date; asnd.SupplierLotNo = pickMaterial.Supplier_lotno; asnd.LotNo = pickMaterial.Lotno; asnd.StorageAgeDate = pickMaterial.StorageageDate; } else { throw new Exception(pick.PickNo + "没有找到检料信息!"); } _InventoryFacade.AddASNDetail(asnd); DBDateTime dbTime = FormatHelper.GetNowDBDateTime(this.DataProvider); Asndetailitem detailitem = _warehouseFacade.CreateNewAsndetailitem(); detailitem.CDate = dbTime.DBDate; detailitem.CTime = dbTime.DBTime; detailitem.CUser = this.GetUserCode(); detailitem.MaintainDate = dbTime.DBDate; detailitem.MaintainTime = dbTime.DBTime; detailitem.MaintainUser = this.GetUserCode(); detailitem.Stline = i.ToString(); detailitem.Stno = asn.Stno; detailitem.MCode = asnd.MCode; detailitem.DqmCode = asnd.DQMCode; //查找对应的SAP单 object[] qtyobjs = _warehouseFacade.GetSAPNOandLinebyMCODE(asn.Invno, asnd.MCode, asnd.DQMCode); if (qtyobjs == null) { this.DataProvider.RollbackTransaction(); throw new Exception("箱单导入数量与需求数量不符!"); } decimal sub = asnd.Qty; for (int k = 0; k < qtyobjs.Length; k++) { InvoicesDetail invdetail = qtyobjs[k] as InvoicesDetail; decimal subNeed = 0; object findNeedQTY_old = _warehouseFacade.GetNeedImportQtyOLD(invdetail.InvNo, invdetail.InvLine, asnd.StNo); //找这个invoice行已经导入了多少,和判退多少 Asndetailitem subItemOld = findNeedQTY_old as Asndetailitem; object findNeedQTY_now = _warehouseFacade.GetNeedImportQtyNow(invdetail.InvNo, invdetail.InvLine, asnd.StNo); //找这个invoice行已经导入了多少,和判退多少 Asndetailitem subItemNow = findNeedQTY_now as Asndetailitem; subNeed = invdetail.PlanQty - subItemOld.Qty + (subItemOld.Qty - subItemOld.ReceiveQty) + (subItemOld.ReceiveQty - subItemOld.QcpassQty); subNeed = subNeed - subItemNow.Qty; if (subNeed == 0) { continue; } //如果箱数量大于需求数量差---进行拆分 if (sub > subNeed) { sub = sub - subNeed; // sub是剩余的 detailitem.Qty = subNeed; detailitem.Invline = invdetail.InvLine.ToString(); detailitem.Invno = invdetail.InvNo; detailitem.ActQty = detailitem.Qty; detailitem.QcpassQty = detailitem.Qty; detailitem.ReceiveQty = detailitem.Qty; _warehouseFacade.AddAsndetailitem(detailitem); } //如果箱单数量小于等于需求数量差--直接填入 else { detailitem.Qty = sub; detailitem.Invline = invdetail.InvLine.ToString(); detailitem.Invno = invdetail.InvNo; detailitem.ActQty = detailitem.Qty; detailitem.QcpassQty = detailitem.Qty; detailitem.ReceiveQty = detailitem.Qty; _warehouseFacade.AddAsndetailitem(detailitem); sub = 0; } if (sub == 0) { break; } } //如果sub>0,说明导入数量过多,报错 if (sub > 0) { this.DataProvider.RollbackTransaction(); throw new Exception("箱单导入数量与需求数量不符!"); } } i++; } _warehouseFacade.AddAsn(asn); WarehouseFacade facade = new WarehouseFacade(base.DataProvider); #region 在invinouttrans表中增加一条数据 //ASN asn = (ASN)domainObject; DBDateTime dbTime1 = FormatHelper.GetNowDBDateTime(this.DataProvider); InvInOutTrans trans = facade.CreateNewInvInOutTrans(); trans.CartonNO = string.Empty; trans.DqMCode = string.Empty; trans.FacCode = asn.FacCode; trans.FromFacCode = asn.FromfacCode; trans.FromStorageCode = asn.FromstorageCode; trans.InvNO = asn.Invno; trans.InvType = asn.StType; trans.LotNo = string.Empty; trans.MaintainDate = dbTime1.DBDate; trans.MaintainTime = dbTime1.DBTime; trans.MaintainUser = this.GetUserCode(); trans.MCode = string.Empty; trans.ProductionDate = 0; trans.Qty = 0; trans.Serial = 0; trans.StorageAgeDate = 0; trans.StorageCode = asn.StorageCode; trans.SupplierLotNo = string.Empty; trans.TransNO = asn.Stno; trans.TransType = "IN"; trans.Unit = string.Empty; trans.ProcessType = "UBCreateASN"; facade.AddInvInOutTrans(trans); #endregion this.DataProvider.CommitTransaction(); return(stno); } catch (Exception ex) { this.DataProvider.RollbackTransaction(); throw ex; } }
protected void cmdSave_click(object sender, EventArgs e) { if (facade == null) { facade = new WarehouseFacade(base.DataProvider); } if (_Invenfacade == null) { _Invenfacade = new InventoryFacade(base.DataProvider); } DBDateTime dbTime = FormatHelper.GetNowDBDateTime(this.DataProvider); int sum = 0; int insum = 0; object[] objs_asnd = facade.GetASNDetailByStNoAndDQMCode(poStno, DQMCode); if (objs_asnd != null) { #region 检查维护的数量是否等于导入数量 for (int i = 0; i < this.gridWebGrid.Rows.Count; i++) { if (!string.IsNullOrEmpty(this.gridWebGrid.Rows[i].Items.FindItemByKey("INQTY").Value.ToString())) { try { insum += int.Parse(this.gridWebGrid.Rows[i].Items.FindItemByKey("INQTY").Value.ToString()); } catch (Exception ex) { WebInfoPublish.Publish(this, "来料数量必须是数字格式" + ex.Message, this.languageComponent1); return; } } } foreach (Asndetail asnd in objs_asnd) { sum += asnd.Qty; } if (insum != sum) { WebInfoPublish.Publish(this, "分配数量不等于导入数量", this.languageComponent1); return; } #endregion this.DataProvider.BeginTransaction(); #region 除asndetailitem表中原有的数据(stno,dqmcode) foreach (Asndetail asnd in objs_asnd) { object[] objs_asnditem = facade.GetASNDetailItembyStnoAndStline(asnd.Stno, asnd.Stline); foreach (Asndetailitem asnditem_old in objs_asnditem) { facade.DeleteAsndetailitem(asnditem_old); } } #endregion //#region 根据grid表重新写asndetailitem //int PlanQty = 0; //for (int i = 0; i < this.gridWebGrid.Rows.Count; i++) //{ // if (!string.IsNullOrEmpty(this.gridWebGrid.Rows[i].Items.FindItemByKey("POQTY").Value.ToString()) || int.Parse(this.gridWebGrid.Rows[i].Items.FindItemByKey("POQTY").Value.ToString())!=0) // { // PlanQty = int.Parse(this.gridWebGrid.Rows[i].Items.FindItemByKey("POQTY").Value.ToString()); // Asndetailitem asnditem_new = facade.CreateNewAsndetailitem(); // foreach (Asndetail asnd in objs_asnd) // { // if(asnd.Qty) // } // } //} #region 插入tblasndetailITEM foreach (Asndetail asnd in objs_asnd) { Asndetailitem detailitem = facade.CreateNewAsndetailitem(); detailitem.CDate = dbTime.DBDate; detailitem.CTime = dbTime.DBTime; detailitem.CUser = this.GetUserCode(); detailitem.MaintainDate = dbTime.DBDate; detailitem.MaintainTime = dbTime.DBTime; detailitem.MaintainUser = this.GetUserCode(); detailitem.Stline = asnd.Stline.ToString(); detailitem.Stno = asnd.Stno; detailitem.MCode = asnd.MCode; detailitem.DqmCode = asnd.DqmCode; //detailitem.ActQty = 0; //detailitem.QcpassQty = 0; //detailitem.ReceiveQty = 0; //查找对应的SAP单 decimal sub = asnd.Qty; for (int i = 0; i < this.gridWebGrid.Rows.Count; i++) { if (!string.IsNullOrEmpty(this.gridWebGrid.Rows[i].Items.FindItemByKey("INQTY").Value.ToString()) || int.Parse(this.gridWebGrid.Rows[i].Items.FindItemByKey("INQTY").Value.ToString()) != 0) { //InvoicesDetail invdetail = qtyobjs[i] as InvoicesDetail; decimal subNeed = decimal.Parse(this.gridWebGrid.Rows[i].Items.FindItemByKey("POQTY").Value.ToString()) - decimal.Parse(this.gridWebGrid.Rows[i].Items.FindItemByKey("IN1QTY").Value.ToString()); if (subNeed < decimal.Parse(this.gridWebGrid.Rows[i].Items.FindItemByKey("INQTY").Value.ToString())) { this.DataProvider.RollbackTransaction(); WebInfoPublish.Publish(this, "分配数量大于所需数量", this.languageComponent1); return; } object findNeedQTY_now = facade.GetNeedImportQtyNow(this.gridWebGrid.Rows[i].Items.FindItemByKey("invno").Value.ToString(), Int32.Parse(this.gridWebGrid.Rows[i].Items.FindItemByKey("POITEMNO").Value.ToString()), asnd.Stno); //找这个invoice行已经导入了多少,和判退多少 Asndetailitem subItemNow = findNeedQTY_now as Asndetailitem; subNeed = decimal.Parse(this.gridWebGrid.Rows[i].Items.FindItemByKey("INQTY").Value.ToString()) - subItemNow.Qty; if (subNeed == 0) { continue; } //如果箱数量大于需求数量差---进行拆分 if (sub > subNeed) { sub = sub - subNeed; // sub是剩余的 detailitem.Qty = subNeed; detailitem.Invline = this.gridWebGrid.Rows[i].Items.FindItemByKey("POITEMNO").Value.ToString(); detailitem.Invno = this.gridWebGrid.Rows[i].Items.FindItemByKey("invno").Value.ToString(); detailitem.ActQty = detailitem.Qty; detailitem.QcpassQty = detailitem.Qty; detailitem.ReceiveQty = detailitem.Qty; facade.AddAsndetailitem(detailitem); } //如果箱单数量小于等于需求数量差--直接填入 else { detailitem.Qty = sub; detailitem.Invline = this.gridWebGrid.Rows[i].Items.FindItemByKey("POITEMNO").Value.ToString(); detailitem.Invno = this.gridWebGrid.Rows[i].Items.FindItemByKey("invno").Value.ToString(); detailitem.ActQty = detailitem.Qty; detailitem.QcpassQty = detailitem.Qty; detailitem.ReceiveQty = detailitem.Qty; facade.AddAsndetailitem(detailitem); sub = 0; } if (sub == 0) { break; } } } //如果sub>0,说明导入数量过多,报错 if (sub > 0) { this.DataProvider.RollbackTransaction(); WebInfoPublish.Publish(this, "$Error_SAP_NEED_DATA_ERROR", this.languageComponent1); // BenQGuru.eMES.Common.ExceptionManager.Raise(this.GetType().BaseType, "$Error_SAP_NEED_DATA_ERROR"); return; } } #endregion } else { this.DataProvider.RollbackTransaction(); WebInfoPublish.Publish(this, "AsnDetail中没有数据", this.languageComponent1); return; } this.DataProvider.CommitTransaction(); WebInfoPublish.Publish(this, "保存成功", this.languageComponent1); this.gridHelper.RequestData(); return; }