public string GiveinDetail(DataTable dt, string stno, string giveinResult) { InventoryFacade _InventoryFacade = new InventoryFacade(this.DataProvider); WarehouseFacade _WarehouseFacade = new WarehouseFacade(this.DataProvider); if (string.IsNullOrEmpty(giveinResult)) { return("让步接收时必须填写原因"); } if (dt.Rows.Count == 0) { return(stno + "无数据"); } bool isGivein = false; ASNDetail asnDetail = null; try { ASN asn = (ASN)_InventoryFacade.GetASN(stno.Trim().ToUpper()); for (int i = 0; i < dt.Rows.Count; i++) { if (!string.IsNullOrEmpty(dt.Rows[i][0].ToString()) && dt.Rows[i][0].ToString() != "√") { continue; } string stLine = dt.Rows[i][2].ToString(); ASNDetail asnDetail1 = (ASNDetail)_InventoryFacade.GetASNDetail(int.Parse(stLine), stno); if (string.IsNullOrEmpty(asnDetail1.CartonNo)) { return("让步接收必须填写箱号!"); } if (!_WarehouseFacade.CheckAlterIncludeEQ(asn.InvNo, asnDetail1.DQMCode)) { return(asn.InvNo + ":" + ":" + asnDetail.DQMCode + "数量已超出SAP计划数量!"); } } this.DataProvider.BeginTransaction(); //算出剩余要接收的数量(入库指令行记录数减去拒收数量) for (int i = 0; i < dt.Rows.Count; i++) { if (!string.IsNullOrEmpty(dt.Rows[i][0].ToString()) && dt.Rows[i][0].ToString() != "√") { continue; } string stLine = dt.Rows[i][2].ToString(); asnDetail = (ASNDetail)_InventoryFacade.GetASNDetail(int.Parse(stLine), stno); asn = (ASN)_InventoryFacade.GetASN(stno); if (asnDetail.Status != ASNDetail_STATUS.ASNDetail_ReceiveClose) { asnDetail.InitReceiveStatus = SAP_LineStatus.SAP_LINE_GIVEIN; asnDetail.ReceiveQty = asnDetail.Qty; asnDetail.Status = ASNDetail_STATUS.ASNDetail_ReceiveClose; asnDetail.InitGIVEINDESC = giveinResult; _InventoryFacade.UpdateASNDetail(asnDetail); //接收数量(TBLASNDETAILITEM.ReceiveQTY)更新为:等于需求数量(TBLASNDETAILITEM.QTY) _InventoryFacade.UpdateASNItem(stno, stLine); asn.InitGiveInQty += 1; _InventoryFacade.UpdateASN(asn); isGivein = true; } } this.DataProvider.CommitTransaction(); if (isGivein) { return("让步接收成功!"); } return("让步接收失败没有条目需要让步接收!"); } catch (Exception ex) { this.DataProvider.RollbackTransaction(); ; throw ex; } }