| | |
| | | using Kingdee.BOS.ServiceHelper; |
| | | using Kingdee.BOS.ServiceHelper.FileServer; |
| | | using Kingdee.BOS.Util; |
| | | using Kingdee.K3.Core.SCM.STK; |
| | | using Kingdee.K3.SCM.ServiceHelper; |
| | | using Newtonsoft.Json.Linq; |
| | | using NPOI.HSSF.UserModel; |
| | | using NPOI.SS.Formula.Functions; |
| | |
| | | if (e.BarItemKey.ToUpper() == "BTEXPORT") |
| | | { |
| | | ExportExcel(); |
| | | //this.View.ShowMessage("测试啦"); |
| | | |
| | | |
| | | string path = PathUtils.GetServerPath(KeyConst.TEMPFILEPATH, PathName); |
| | | |
| | | DynamicFormShowParameter dynamicForm = new DynamicFormShowParameter(); |
| | | dynamicForm.FormId = "BOS_FileDownLoad"; |
| | | dynamicForm.OpenStyle.ShowType = ShowType.Modal; |
| | | dynamicForm.CustomParams.Add("IsExportData", "true"); |
| | | dynamicForm.CustomParams.Add("url", path); |
| | | |
| | | this.View.ShowForm(dynamicForm); |
| | | |
| | | |
| | | //ShowDownload(); |
| | | |
| | | } |
| | | |
| | | if (e.BarItemKey.ToUpper() == "TBSEARCH") |
| | | { |
| | | SearchList(); |
| | | } |
| | | |
| | | if (e.BarItemKey.ToUpper() == "TBLOCK") |
| | | { |
| | | Lock(); |
| | |
| | | //提料计划 |
| | | if (e.BarItemKey.ToUpper() == "TBEXTRACTION") |
| | | { |
| | | Extraction(); |
| | | } |
| | | try |
| | | { |
| | | COMPLETE(); |
| | | DayPlanPPBomBill(); |
| | | Extraction(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | this.View.ShowErrMessage(ex.Message.ToString()); |
| | | } |
| | | finally |
| | | { |
| | | this.View.ShowMessage("操作成功!"); |
| | | |
| | | } |
| | | |
| | | } |
| | | //预留 |
| | | if (e.BarItemKey.ToUpper() == "TBRESERVE") |
| | | { |
| | | Reserve(); |
| | | } |
| | | //释放 |
| | | if (e.BarItemKey.ToUpper() == "TBRELEASE") |
| | | { |
| | | |
| | | Release(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | { |
| | | 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>(); |
| | |
| | | ModelEnty.Add("FHSourceID", new JObject() { ["Fnumber"] = _item.FHSourceID });//生产资源FHSourceID |
| | | ModelEnty.Add("FNumerator", _item.FNumerator);//分母 |
| | | ModelEnty.Add("FDenominator", _item.FDenominator);//分子 |
| | | ModelEnty.Add("FDwyl", Convert.ToDecimal(_item.FNumerator) / Convert.ToDecimal(_item.FDenominator));//单位用料 |
| | | ModelEnty.Add("FFIXSCRAPQTY", _item.FFIXSCRAPQTY);//固定损耗 |
| | | ModelEnty.Add("FHQtyScrap", _item.FHQtyScrap);//变动损耗率% |
| | | Entry.Add(ModelEnty); |
| | |
| | | { |
| | | 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 |
| | |
| | | FentityModel.Add("FDayPlanDate", _item.OLDDATE);//日计划工单类型 |
| | | FentityModel.Add("FHRelationQty", _item.PurchseFqty);//关联数量 |
| | | FentityModel.Add("FFIXLEADTIME", _item.FFIXLEADTIME);//提前期 |
| | | |
| | | |
| | | FentityModel.Add("FPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织 |
| | | FentityModel.Add("FHPOOrderInterID", _item.PurchseFID);// 采购订单内码:FHPOOrderInterID |
| | | FentityModel.Add("FHPOOrderEntryID", _item.PurchseFentryID); //采购订单子内码:FHPOOrderEntryID |
| | |
| | | ["IsVerifyBaseDataField"] = "false", |
| | | ["Model"] = model |
| | | }; |
| | | |
| | | CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); |
| | | 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); |
| | | this.View.ShowMessage("操作成功"); |
| | | // var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new {p.FSUPPLIERID, p.FHMASTERDATE }).ToList(); |
| | | } |
| | | /// <summary> |
| | | /// 1.锁库,具体字段根据业务单据决定,‘Inv’表示即时库存,‘FInvDetailID’为即时库存ID |
| | | /// </summary> |
| | | public void Reserve() |
| | | { |
| | | try |
| | | { |
| | | decimal ReserveCount = Convert.ToDecimal((this.Model.GetValue("FReservedCount"))); |
| | | if (ReserveCount == 0) |
| | | { |
| | | this.View.ShowMessage("请输入预留数量"); |
| | | return; |
| | | } |
| | | //获取单据体信息 |
| | | Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); |
| | | //单据体信息转换为列表集合 |
| | | 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)); |
| | | if (filterResult.Count == 0) |
| | | { |
| | | this.View.ShowMessage("请选择需要预留的单据!"); |
| | | return; |
| | | } |
| | | //总库存 物料+库存组织+库存数量 |
| | | DataSet ds = DBServiceHelper.ExecuteDataSet(Context, @" |
| | | /*dialect*/ |
| | | select sum(isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0))FBASEQTY,T1.FStockOrgId,T1.FMATERIALID from |
| | | ( |
| | | select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a |
| | | join SC_WORKBILLSORTBILLSub b on a.FID = b.FID |
| | | join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID |
| | | LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY |
| | | group by FMATERIALID,FID) T2 on T1.FID = t2.FID |
| | | group by a.FHPRDORGID,T2.FMATERIALID |
| | | ) T1 |
| | | LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID |
| | | LEFT JOIN JIT_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID |
| | | --where T1.FMATERIALID in (105773) |
| | | group by T1.FStockOrgId,T1.FMATERIALID |
| | | "); |
| | | ListInventoryByStockOrgId = ds.ToModelList<PRD_Inventory>(); |
| | | foreach (DynamicObject current in entityDataObjoct) |
| | | { |
| | | if (Convert.ToString(current["FFOCUS"]) == "False") |
| | | continue; |
| | | string sql = string.Format(@" |
| | | /*dialect*/ |
| | | --生产用料清单列表 |
| | | SELECT T1.FID,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,FPRDORGID FStockOrgId, |
| | | T2.FMATERIALID FMATERIALID2,T4.FNumber,T2.FNeedQty,convert(decimal(18,2),FNeedQty/FQty ) as dwyl |
| | | --,isnull(t3.FBASEQTY,0)FBASEQTY |
| | | FROM T_PRD_PPBOM T1 |
| | | LEFT JOIN (select FID,MAX(FENTRYID)FENTRYID,SUM(FNeedQty)FNeedQty,FMATERIALID from T_PRD_PPBOMENTRY where FMoId='{0}' |
| | | group by FMATERIALID,FID ) T2 on T1.FID=t2.FID |
| | | --LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID |
| | | LEFT JOIN T_BD_MATERIAL T4 on T2.FMATERIALID=T4.FMATERIALID |
| | | where t1.FMoId='{0}' and T1.FMaterialID='{1}' |
| | | ", current["FHMainSourceInterID"].ToString(), current["FMatrailId_Id"].ToString()); |
| | | ds = DBServiceHelper.ExecuteDataSet(Context, sql); |
| | | var PpbomList = ds.ToModelList<PRD_PPBOM>(); |
| | | //当前最大齐套数 下层需求数量/父级需求数量=单位用料 |
| | | //var SumGetComplete = Math.Floor(PpbomList.Min(t => t.FBASEQTY / (t.FNeedQty / t.FQty))); |
| | | //最大齐套数 |
| | | var result = (from a in PpbomList |
| | | join b in ListInventoryByStockOrgId |
| | | on new { materialId = a.FMATERIALID2, stockOrgId = a.FStockOrgId } |
| | | equals new { materialId = b.FMATERIALID, stockOrgId = b.FStockOrgId } |
| | | into g |
| | | from b in g.DefaultIfEmpty() |
| | | select new |
| | | { |
| | | value = (b?.FBASEQTY / a.dwyl) ?? 0 |
| | | }).ToList().Min(x => x.value); |
| | | if (result < ReserveCount) |
| | | { |
| | | this.View.ShowErrMessage("当前库存超出可预留最大数:" + result + ""); |
| | | return; |
| | | }; |
| | | //将预留数量分配到日计划工单 |
| | | sql = string.Format(@"/*dialect*/select FEntryID,FHQTY from Sc_WorkBillSortBillSub |
| | | where FID='{0}' and isnull(FCOMPLETE,'未齐套')='未齐套'", current["FDayPlanWorkID"].ToString()); |
| | | DataTable dayPlanDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; |
| | | var count = ReserveCount; |
| | | List<string> sqlList = new List<string>(); |
| | | if (dayPlanDt.Rows.Count > 0) |
| | | { |
| | | foreach (DataRow dr in dayPlanDt.Rows) |
| | | { |
| | | if (count > 0) |
| | | { |
| | | sql = string.Format("/*dialect*/ update Sc_WorkBillSortBillSub set FReservedCount = {0} where FEntryID = {1}", count >= Convert.ToDecimal(dr["FHQTY"]) ? Convert.ToDecimal(dr["FHQTY"]) : count, dr["FEntryID"].ToString()); |
| | | sqlList.Add(sql); |
| | | count = count - Convert.ToDecimal(dr["FHQTY"]); |
| | | } |
| | | else |
| | | break; |
| | | } |
| | | DBServiceHelper.ExecuteBatch(Context, sqlList); |
| | | } |
| | | sql = string.Format(@"/*dialect*/ |
| | | --生产用料清单列表 |
| | | 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 |
| | | FROM T_PRD_PPBOM T1 |
| | | LEFT JOIN (select FID,MAX(FENTRYID)FENTRYID,SUM(FNeedQty)FNeedQty,FMATERIALID from T_PRD_PPBOMENTRY where FMoId='{0}' |
| | | group by FMATERIALID,FID ) T2 on T1.FID=t2.FID |
| | | --LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID |
| | | LEFT JOIN T_BD_MATERIAL T4 on T2.FMATERIALID=T4.FMATERIALID |
| | | join t_BD_MaterialBase t5 on t4.FMATERIALID = t5.FMATERIALID |
| | | join t_BD_MaterialStock t6 on t4.FMATERIALID = t6.FMATERIALID |
| | | join T_STK_INVENTORY t7 on t4.FMATERIALID = t7.FMATERIALID and t1.FPRDORGID=t7.FSTOCKORGID |
| | | where t1.FMoId='{0}' and T1.FMaterialID='{1}' |
| | | ", current["FHMainSourceInterID"].ToString(), current["FMatrailId_Id"].ToString()); |
| | | DataTable skDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; |
| | | //锁库 |
| | | List<LockStockArgs> list = new List<LockStockArgs>(); |
| | | foreach (DataRow dr in skDt.Rows) |
| | | { |
| | | LockStockArgs lockStockArgs = new LockStockArgs(); |
| | | 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.Lot = Convert.ToString(current["FBatch"]); ;//批次 FBatch |
| | | lockStockArgs.MaterialID = long.Parse(dr["FMATERIALID2"].ToString()); |
| | | lockStockArgs.OwnerID = long.Parse(dr["FOwnerID"].ToString()); |
| | | lockStockArgs.OwnerTypeID = dr["FOwnerTypeID"].ToString(); |
| | | lockStockArgs.Qty = Convert.ToDecimal(dr["dwyl"].ToString()) * ReserveCount;//数量 |
| | | lockStockArgs.STOCKID = long.Parse(dr["FSTOCKID"].ToString());//仓库 |
| | | lockStockArgs.StockOrgID = long.Parse(dr["FStockOrgId"].ToString());//库存组织 |
| | | lockStockArgs.UnitID = long.Parse(dr["FSTOREUNITID"].ToString());//单位 |
| | | lockStockArgs.LockBaseQty = Convert.ToDecimal(dr["dwyl"].ToString()) * ReserveCount; |
| | | lockStockArgs.LockQty = Convert.ToDecimal(dr["dwyl"].ToString()) * ReserveCount;//基本单位数量 |
| | | lockStockArgs.FInvDetailID = Convert.ToString(dr["FSTKID"].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("操作成功!"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error(ex.Message.ToString()); |
| | | this.View.ShowErrMessage(ex.Message.ToString()); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 释放 |
| | | /// </summary> |
| | | public void Release() |
| | | { |
| | | try |
| | | { |
| | | //获取单据体信息 |
| | | Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); |
| | | //单据体信息转换为列表集合 |
| | | 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)); |
| | | 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("操作成功!"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error(ex.Message.ToString()); |
| | | this.View.ShowErrMessage(ex.Message.ToString()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | //tbReleaseReserve |