| | |
| | | { |
| | | this.View.ShowErrMessage(ex.Message.ToString()); |
| | | } |
| | | finally { |
| | | finally |
| | | { |
| | | this.View.ShowMessage("操作成功!"); |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | //预留 |
| | | if (e.BarItemKey.ToUpper() == "TBRESERVE") |
| | |
| | | { |
| | | FDayPlanWorkID += Convert.ToString(dr["FID"]) + ","; |
| | | } |
| | | |
| | | FDayPlanWorkID = FDayPlanWorkID.Substring(0, FDayPlanWorkID.Length - 1); |
| | | |
| | | //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量 |
| | | sql = string.Format(@" |
| | | |
| | | exec [提料计划预处理] '{0}' |
| | | ", FDayPlanWorkID.Replace(",", "-")); |
| | | |
| | | DBServiceHelper.Execute(Context, sql); |
| | | //采购订单数据 |
| | | sql = @" |
| | |
| | | "; |
| | | List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>(); |
| | | LogHelper.Info("采购订单数据" + sql); |
| | | |
| | | sql = string.Format(@" |
| | | /*dialect*/ |
| | | SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId FROM SC_WORKBILLSORTBILLMAIN T1 |
| | |
| | | LogHelper.Info("提料数据" + sql); |
| | | DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); |
| | | List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>(); |
| | | |
| | | //所有物料的库存 |
| | | ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ select sum(FBASEQTY)FBASEQTY,FMATERIALID,FStockOrgId from T_STK_Inventory group by FMATERIALID, FStockOrgId "); |
| | | ListInventoryByStockOrgId = ds.ToModelList<PRD_Inventory>(); |
| | |
| | | { |
| | | FDayPlanWorkID += Convert.ToString(dr["FID"]) + ","; |
| | | } |
| | | |
| | | FDayPlanWorkID = FDayPlanWorkID.Substring(0, FDayPlanWorkID.Length - 1); |
| | | |
| | | //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量 |
| | | sql = string.Format(@" |
| | | /*dialect*/ |
| | | exec [提料计划预处理] '{0}' |
| | | ", FDayPlanWorkID.Replace(",", "-")); |
| | | |
| | | DBServiceHelper.Execute(Context, sql); |
| | | //采购订单数据 |
| | | sql = @" |
| | |
| | | "; |
| | | List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>(); |
| | | LogHelper.Info("采购订单数据" + sql); |
| | | |
| | | sql = string.Format(@" |
| | | /*dialect*/ |
| | | SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId FROM SC_WORKBILLSORTBILLMAIN T1 |
| | |
| | | LogHelper.Info("提料数据" + sql); |
| | | DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); |
| | | List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>(); |
| | | |
| | | //物料+库存组织分类 |
| | | var MaterialIDList = DayPlanPpbom.GroupBy(p => new { p.FMATERIALID, p.FStockOrgId }).Select(x => new PODemandPlanTemp { FMATERIALID = x.Key.FMATERIALID, FStockOrgId = x.Key.FStockOrgId }).ToList(); |
| | | var _MaterialIDList = MaterialIDList.Where(p => p.FMATERIALID == "105773").ToList(); |
| | | |
| | | LogHelper.Info("物料行数" + MaterialIDList.Count); |
| | | |
| | | //提料计划数据集临时存储集合 |
| | | List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>(); |
| | | //sql集合 更新采购订单占用的提料计划数量 |
| | |
| | | //MaterialIDList = new List<string> { "105773" }; |
| | | foreach (var item in MaterialIDList) |
| | | { |
| | | LogHelper.Info(item.FMATERIALID.ToString()); |
| | | //当前物料没有采购订单时 直接跳出 |
| | | List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList(); |
| | | if (_PurchaseInventory.Count == 0) |
| | | { |
| | | LogHelper.Info("当前物料无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId); |
| | | continue; |
| | | } |
| | | //LogHelper.Info(item.FMATERIALID.ToString()); |
| | | //当前物料和库存组织对应的需进行提料计划的数据 |
| | | List<DayPlanPpbom> _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId).ToList(); |
| | | |
| | | decimal FMINPOQTY = _DayPlanPpbom.FirstOrDefault().FMINPOQTY;//最小起订量 |
| | | double FFIXLEADTIME = _DayPlanPpbom.FirstOrDefault().FFIXLEADTIME;//提前期 |
| | | string FJITmaterialGroup = _DayPlanPpbom.FirstOrDefault().FJITmaterialGroup;//jit物料分类 |
| | | string FJITMaterielDemand = _DayPlanPpbom.FirstOrDefault().FJITMaterielDemand; //JIT物料需求供货周期 |
| | | string FJITSafeStock = _DayPlanPpbom.FirstOrDefault().FJITSafeStock; //JIT安全库存 |
| | | decimal NeedQty = 0; |
| | | DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE; |
| | | DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE;//第一个订货起始日期 |
| | | int i = 1; |
| | | //记录在最小采购量需求下的日计划明细FentyrID |
| | | List<int> FEntryIdList = new List<int>(); |
| | |
| | | continue; |
| | | if (NeedQty >= FMINPOQTY) |
| | | { |
| | | /*修改前 判断方式 |
| | | List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList(); |
| | | if (_PurchaseInventory.Count == 0) |
| | | { |
| | | NeedQty = 0; |
| | | break; |
| | | } |
| | | */ |
| | | foreach (var Purchase in _PurchaseInventory) |
| | | { |
| | | LogHelper.Info("Purchase"); |
| | | LogHelper.Info("物料:" + Purchase.FMATERIALID + ",数量:" + Purchase.FQTY); |
| | | //LogHelper.Info("Purchase"); |
| | | //LogHelper.Info("物料:" + Purchase.FMATERIALID + ",数量:" + Purchase.FQTY); |
| | | if (Purchase.FQTY >= NeedQty) |
| | | { |
| | | List<int> mmm = new List<int>(); |
| | | foreach (int id in FEntryIdList) |
| | | { |
| | | mmm.Add(id); |
| | | var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); |
| | | PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | //更新总需求数量 |
| | | NeedQty = NeedQty - Purchase.FQTY; |
| | | decimal _NeedQty = Purchase.FQTY;//采购订单数量 |
| | | List<int> mmm = new List<int>(); |
| | | foreach (int id in FEntryIdList) |
| | | { |
| | | var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); |
| | | decimal Qty = DayPlanPpbomls.NeedQty; |
| | | decimal Qty = DayPlanPpbomls.NeedQty;//订单数量 |
| | | if (Qty > _NeedQty) |
| | | Qty = _NeedQty; |
| | | Qty = _NeedQty; //订单数量>采购订单数量 取采购订单 |
| | | _NeedQty = _NeedQty - DayPlanPpbomls.NeedQty; |
| | | PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp |
| | | { |
| | |
| | | FStockOrgId = Purchase.FStockOrgId, //采购组织 |
| | | FORGNumber = Purchase.FORGNumber |
| | | }); |
| | | //更新计划数量(剩余需要排的) 继续去计算下一个采购订单 |
| | | DayPlanPpbomls.NeedQty -= Qty; |
| | | //更新采购订单 |
| | | sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}"); |
| | |
| | | } |
| | | NeedQty = 0; |
| | | } |
| | | |
| | | #region 剩下不足时按最小采购批次生成 |
| | | //剩下不足时按最小采购批次生成 |
| | | //else if (i == _DayPlanPpbom.Count && NeedQty > 0) |
| | |
| | | // NeedQty = 0; |
| | | // break; |
| | | // } |
| | | |
| | | // foreach (var Purchase in _PurchaseInventory) |
| | | // { |
| | | // if (Purchase.FQTY >= NeedQty) |
| | | // { |
| | | |
| | | // List<int> mmm = new List<int>(); |
| | | // foreach (int id in FEntryIdList) |
| | | // { |
| | |
| | | // FNumber = DayPlanPpbomls.FNumber, |
| | | // OLDDATE = DayPlanPpbomls.FHMASTERDATE, |
| | | // FFIXLEADTIME = FFIXLEADTIME, |
| | | |
| | | // PurchseFID = Purchase.FID, |
| | | // PurchseFentryID = Purchase.FENTRYID, |
| | | // FSUPPLIERID = Purchase.FSUPPLIERID, |
| | | // PurchseFNUMBER = Purchase.FNUMBER, |
| | | // PurchseFBillNo = Purchase.FBillNo, |
| | | // PurchseFqty = Purchase.FQTY |
| | | |
| | | // }); |
| | | // //扣除日计划明细已被分配的数量 |
| | | // DayPlanPpbomls.NeedQty = 0; |
| | |
| | | // List<int> mmm = new List<int>(); |
| | | // foreach (int id in FEntryIdList) |
| | | // { |
| | | |
| | | // var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); |
| | | // decimal Qty = DayPlanPpbomls.NeedQty; |
| | | // if (Qty > _NeedQty) |
| | |
| | | // FNumber = DayPlanPpbomls.FNumber, |
| | | // OLDDATE = DayPlanPpbomls.FHMASTERDATE, |
| | | // FFIXLEADTIME = FFIXLEADTIME, |
| | | |
| | | |
| | | // PurchseFID = Purchase.FID, |
| | | // PurchseFentryID = Purchase.FENTRYID, |
| | | // FSUPPLIERID = Purchase.FSUPPLIERID, |
| | | // PurchseFNUMBER = Purchase.FNUMBER, |
| | | // PurchseFBillNo = Purchase.FBillNo, |
| | | // PurchseFqty = Purchase.FQTY |
| | | |
| | | |
| | | // }); |
| | | // DayPlanPpbomls.NeedQty -= Qty; |
| | | // //更新采购订单 |
| | | // sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}"); |
| | | |
| | | // //更新Model |
| | | // var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault(); |
| | | // ls.FQTY -= Qty; |
| | | |
| | | // if (_NeedQty < 0) |
| | | // { |
| | | // foreach (var mm in mmm) |
| | |
| | | // } |
| | | // break; |
| | | // } |
| | | |
| | | // mmm.Add(id); |
| | | // } |
| | | // foreach (var mm in mmm) |
| | | // { |
| | | // FEntryIdList.Remove(mm); |
| | | // } |
| | | |
| | | // } |
| | | // } |
| | | // NeedQty = 0; |
| | |
| | | i++; |
| | | } |
| | | } |
| | | |
| | | var PODemandPlanList222 = PODemandPlanTemp.GroupBy(p => new PODemandPlanTemp { PurchseFNUMBER = p.PurchseFNUMBER, FHMASTERDATE = p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList(); |
| | | |
| | | var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList(); |
| | | |
| | | |
| | | foreach (var item in PODemandPlanList) |
| | | { |
| | | DateTime date = item.FHMASTERDATE; |
| | | string PurchseFNUMBER = item.PurchseFNUMBER; |
| | | |
| | | JObject model = new JObject(); |
| | | model.Add("FHDate", date); |
| | | model.Add("FHRemark", "生产订单号:" + "测试呢呢"); |
| | | model.Add("FSupplierID", new JObject() { ["Fnumber"] = PurchseFNUMBER }); |
| | | JArray Fentity = new JArray(); |
| | | |
| | | List<PODemandPlanTemp> _PODemandPlanList = PODemandPlanTemp.Where(x => x.FHMASTERDATE == date && x.PurchseFNUMBER == PurchseFNUMBER).ToList(); |
| | | foreach (var _item in _PODemandPlanList) |
| | | { |
| | | JObject FentityModel = new JObject(); |
| | | |
| | | FentityModel.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织 |
| | | |
| | | FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = _item.FNumber });//物料 |
| | | FentityModel.Add("FHQty", _item.FQty);//数量 |
| | | FentityModel.Add("FHSourceInterID", _item.FID);//日计划工单FID |
| | |
| | | var result = cloudClient.Save("paez_PODemandPlan", jsonRoot.ToString()); |
| | | JObject saveObj = JObject.Parse(result); |
| | | string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); |
| | | |
| | | LogHelper.Info("最后"); |
| | | LogHelper.Info(jsonRoot.ToString()); |
| | | if (saveIsSuc == "TRUE") |
| | | { |
| | | } |
| | | else |
| | | { |
| | | if (saveIsSuc != "TRUE") |
| | | LogHelper.Error(saveIsSuc); |
| | | |
| | | } |
| | | } |
| | | DBServiceHelper.ExecuteBatch(Context, sqlList); |
| | | // var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new {p.FSUPPLIERID, p.FHMASTERDATE }).ToList(); |
| | |
| | | Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); |
| | | //单据体信息转换为列表集合 |
| | | DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); |
| | | EntryGrid grid = this.View.GetControl<EntryGrid>("FEntity"); |
| | | DynamicObjectCollection filterResult = entityDataObjoct.Clone(); |
| | | filterResult.Clear(); |
| | | entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x)); |
| | | if (filterResult.Count == 0) |
| | | { |
| | | this.View.ShowMessage("请选择需要预留的单据!"); |
| | | return; |
| | | } |
| | | //总库存 物料+库存组织+库存数量 |
| | | DataSet ds = DBServiceHelper.ExecuteDataSet(Context, @" |
| | | /*dialect*/ |
| | |
| | | } |
| | | sql = string.Format(@"/*dialect*/ |
| | | --生产用料清单列表 |
| | | SELECT T1.FID,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,FPRDORGID FStockOrgId, |
| | | SELECT T1.FID,T1.FBillNo,T2.FENTRYID,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,FPRDORGID FStockOrgId, |
| | | T2.FMATERIALID FMATERIALID2,T4.FNumber,T2.FNeedQty,convert(decimal(18,2),FNeedQty/T1.FQty ) as dwyl, |
| | | t5.FBASEUNITID,t6.FSTOREUNITID,t7.FID FSTKID,t7.FOwnerID,t7.FOwnerTypeID,t7.FSTOCKID,t7.FBASEQTY |
| | | --,isnull(t3.FBASEQTY,0)FBASEQTY |
| | |
| | | foreach (DataRow dr in skDt.Rows) |
| | | { |
| | | LockStockArgs lockStockArgs = new LockStockArgs(); |
| | | lockStockArgs.ObjectId = "SAL_SaleOrder"; |
| | | lockStockArgs.BillId = Convert.ToString(current["FHMainSourceInterID"]); //生产订单ID |
| | | lockStockArgs.BillNo = Convert.ToString(current["FSCOrderNo"]);//生产订单号 |
| | | lockStockArgs.FID = Convert.ToInt32(current["FHMainSourceInterID"]); //生产订单ID |
| | | lockStockArgs.ObjectId = "PRD_PPBOM"; //字段 FDEMANDFORMID = 'PRD_PPBOM' |
| | | lockStockArgs.BillId = dr["FID"].ToString(); //生产用料清单主表ID |
| | | lockStockArgs.BillDetailID = dr["FENTRYID"].ToString();//生产用料清单明细表ID |
| | | lockStockArgs.BillNo = dr["FBillNo"].ToString();//生产用料清单单据号 |
| | | lockStockArgs.FEntryID = Convert.ToInt32(current["FHMainSourceEntryID"]); ; |
| | | lockStockArgs.FID = Convert.ToInt32(current["FHMainSourceInterID"]); //生产订单行ID |
| | | lockStockArgs.BaseQty = decimal.Parse(dr["FBASEQTY"].ToString());//基本单位数量 |
| | | lockStockArgs.BaseUnitID = int.Parse(dr["FBASEUNITID"].ToString());//基本单位 |
| | | lockStockArgs.BillDetailID = Convert.ToString(current["FHMainSourceEntryID"]); |
| | | lockStockArgs.FEntryID = Convert.ToInt32(current["FHMainSourceEntryID"]); ; |
| | | //lockStockArgs.Lot = Convert.ToString(current["FBatch"]); ;//批次 FBatch |
| | | lockStockArgs.MaterialID = long.Parse(dr["FMATERIALID2"].ToString()); |
| | | lockStockArgs.OwnerID = long.Parse(dr["FOwnerID"].ToString()); |
| | |
| | | list.Add(lockStockArgs); |
| | | } |
| | | var sa = StockServiceHelper.SaveLockInfo(Context, list, "Inv", false); |
| | | sql = @"/*dialect*/ |
| | | update a set |
| | | FPARENTFORMID ='PRD_MO', |
| | | FPARENTINTERID =b.FMOID, |
| | | FPARENTENTRYID =b.FMOENTRYID, |
| | | FPARENTBILLNO = b.FMOBILLNO, |
| | | FSRCFORMID = 'PRD_MO', |
| | | FSRCINTERID = b.FMOID, |
| | | FSRCENTRYID = b.FMOENTRYID, |
| | | FSRCBILLNO = b.FMOBILLNO |
| | | from T_PLN_RESERVELINK a |
| | | join T_PRD_PPBOM b on a.FDEMANDINTERID = b.FID |
| | | where a.FPARENTINTERID = '' and a.FPARENTENTRYID =''"; |
| | | DBServiceHelper.Execute(Context, sql); |
| | | this.View.ShowMessage("操作成功!"); |
| | | } |
| | | } |
| | |
| | | DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); |
| | | DynamicObjectCollection filterResult = entityDataObjoct.Clone(); |
| | | filterResult.Clear(); |
| | | entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x=> filterResult.Add(x)); |
| | | foreach (DynamicObject current in entityDataObjoct) |
| | | entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x)); |
| | | if (filterResult.Count == 0) |
| | | { |
| | | this.View.ShowMessage("请选择需要预留的单据!"); |
| | | return; |
| | | } |
| | | foreach (DynamicObject current in filterResult) |
| | | { |
| | | if (Convert.ToString(current["FFOCUS"]) == "False") |
| | | continue; |
| | | string sql = string.Format(@"/*dialect*/ update Sc_WorkBillSortBillSub set FReservedCount = 0 where FID='{0}'", current["FDayPlanWorkID"].ToString()); |
| | | DBServiceHelper.Execute(Context, sql); |
| | | |
| | | //删除锁库表(不用更新库存 库存表没有更) |
| | | sql = string.Format(@"/*dialect*/ |
| | | delete T_PLN_RESERVELINKENTRY where FID IN (SELECT FID FROM T_PLN_RESERVELINK WHERE FPARENTINTERID='{0}' AND FPARENTENTRYID='{1}') |
| | | delete T_PLN_RESERVELINK WHERE FPARENTINTERID='{0}' AND FPARENTENTRYID='{1}'", Convert.ToString(current["FHMainSourceInterID"]), Convert.ToString(current["FHMainSourceEntryID"])); |
| | | } |
| | | this.View.ShowMessage("操作成功!"); |
| | | } |