| | |
| | | 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) |
| | | { |
| | |
| | | public override void EntryBarItemClick(BarItemClickEventArgs e) |
| | | { |
| | | base.EntryBarItemClick(e); |
| | | |
| | | if (e.BarItemKey.ToUpper() == "TBEDIT") |
| | | { |
| | | SearchListEdit(); |
| | |
| | | /// <param name="e"></param> |
| | | public override void EntityRowDoubleClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EntityRowClickEventArgs e) |
| | | { |
| | | var m = e.Row; |
| | | var n = e.Key; |
| | | base.EntityRowClick(e); |
| | | |
| | | DynamicFormShowParameter formPa = new DynamicFormShowParameter(); |
| | | formPa.FormId = "paez_CompleteAnalysisDetail"; |
| | | |
| | | /* jsonModel.Add("FHMainICMOInterID", FMainInterID);//主生产订单主内码 |
| | | jsonModel.Add("FHMainICMOEntryID", FMainEntryID);//主生产订单子内码 |
| | | jsonModel.Add("FHICMOInterID", FDayPlanWorkID);//日计划订单主内码 |
| | | current["FMatrailId_Id"].ToString(), current["FHMainSourceInterID"].ToString(), current["FHMainSourceEntryID"].ToString(), current["FDayPlanWorkID"].ToString()) |
| | | |
| | | */ |
| | | |
| | | formPa.CustomParams.Add("FHMainICMOInterID", Convert.ToString(this.View.Model.GetValue("FHMainSourceInterID", e.Row).ToString())); |
| | | formPa.CustomParams.Add("FHMainICMOEntryID", Convert.ToString(this.View.Model.GetValue("FHMainSourceEntryID", e.Row).ToString())); |
| | | formPa.CustomParams.Add("FHICMOInterID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString())); |
| | | formPa.CustomParams.Add("FMatrailId_Id", Convert.ToString((this.View.Model.GetValue("FMatrailId", e.Row) as DynamicObject)["Id"].ToString())); |
| | | if (e.ColKey == "FDELAYLNUM") |
| | | { |
| | | //生产计划平台拖期明细跳转 |
| | | formPa.FormId = "paez_TardinessDetails"; |
| | | formPa.CustomParams.Add("FID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString())); |
| | | } |
| | | else |
| | | { |
| | | //齐套分析明细列表跳转 |
| | | formPa.FormId = "paez_CompleteAnalysisDetail"; |
| | | formPa.CustomParams.Add("FHMainICMOInterID", Convert.ToString(this.View.Model.GetValue("FHMainSourceInterID", e.Row).ToString())); |
| | | formPa.CustomParams.Add("FHMainICMOEntryID", Convert.ToString(this.View.Model.GetValue("FHMainSourceEntryID", e.Row).ToString())); |
| | | formPa.CustomParams.Add("FHICMOInterID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString())); |
| | | formPa.CustomParams.Add("FMatrailId_Id", Convert.ToString((this.View.Model.GetValue("FMatrailId", e.Row) as DynamicObject)["Id"].ToString())); |
| | | } |
| | | this.View.ShowForm(formPa); |
| | | } |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public void CompleteSetAnalysis() |
| | | { |
| | | |
| | | try |
| | | { |
| | | Stopwatch sw = new Stopwatch(); |
| | |
| | | string sql = @" |
| | | /*dialect*/ |
| | | select a.FPRDMOMAINID,a.FPRDMOENTYID,a.FID,b.FEntryID,a.FHPRDORGID FStockOrgId,t5.FNUMBER as OrgFnumber,a.FHOrderLev,b.FHQTY,b.FHMASTERDATE,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty, |
| | | T2.FMATERIALID FMATERIALID2, T4.FNumber,T2.FNeedQty,FNeedQty/FQty dwyl,FHQTY*(FNeedQty/FQty) PlanCount from SC_WORKBILLSORTBILLMAIN a |
| | | T2.FMATERIALID FMATERIALID2, T4.FNumber,T2.FNeedQty,FNeedQty/FQty dwyl,(FHQTY-ISNULL(FProductNum,0))*(FNeedQty/FQty) PlanCount 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, MAX(FENTRYID) FENTRYID, SUM(FNeedQty) FNeedQty, FMATERIALID from T_PRD_PPBOMENTRY |
| | |
| | | --LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID |
| | | JOIN T_BD_MATERIAL T4 on T2.FMATERIALID = T4.FMATERIALID |
| | | JOIN T_ORG_Organizations t5 on a.FHPRDORGID = t5.FORGID |
| | | --where FPRDMOMAINID = 100010 |
| | | --where t4.FMATERIALID in (105773 |
| | | --) |
| | | ORDER BY b.FHMASTERDATE,a.FHOrderLev "; |
| | | --条件为今天往后的日计划 + 今天之前未关闭的日计划 |
| | | where (FHEntryCloseDate is null and DATEDIFF(D,GETDATE(),FHMASTERDATE)<0)or DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 |
| | | ORDER BY b.FHMASTERDATE,a.FHOrderLev |
| | | "; |
| | | ds = DBServiceHelper.ExecuteDataSet(Context, sql); |
| | | List<PRD_PPBOM> BomList = ds.ToModelList<PRD_PPBOM>(); |
| | | //日计划+生产订单子表编码ID |
| | |
| | | //CompleteAnalysisTempModel 用于存储临时需要插入数据 |
| | | List<CompleteAnalysisTempModel> completeAnalysisTempModel = new List<CompleteAnalysisTempModel>(); |
| | | int i = 1; |
| | | //创建字典 用于储存物料 + 占用数量 |
| | | Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>(); |
| | | foreach (var item in DatePlanList) |
| | | { |
| | | this.View.Session["ProcessRateValue"] = Convert.ToInt32(this.View.Session["ProcessRateValue"]) + Convert.ToInt32((decimal)(1.0 / DatePlanList.Count)); |
| | | |
| | | //筛选出当日计划数据 |
| | | var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList(); |
| | | foreach (var _item in _BomList) |
| | | { |
| | | //该日计划物料需要数 |
| | | decimal need = _item.PlanCount; |
| | | //实际总库存 |
| | | decimal sjkc = 0; |
| | | var sjkcList = ListInventoryByStockOrgId.Where(x => x.FMATERIALID == _item.FMATERIALID2 && x.FStockOrgId == _item.FStockOrgId).FirstOrDefault(); |
| | | //真正需要取计算的数量(拆分货主) |
| | | //货主匹配 |
| | |
| | | decimal _fLackCount = _item.PlanCount > sjkcList.FBASEQTY ? (_item.PlanCount - sjkcList.FBASEQTY) : 0;//缺料数量 |
| | | foreach (var Inventory in _ListInventory) |
| | | { |
| | | |
| | | if (need == 0) |
| | | break; |
| | | decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need;//齐套数量 |
| | | //总计划数量 和 总库存数量比对 |
| | | decimal occupyMaterial = 0; |
| | | if (!occupyDic.ContainsKey(_item.FMATERIALID2)) |
| | | { |
| | | occupyDic.Add(_item.FMATERIALID2, fCompleteCount); |
| | | } |
| | | else |
| | | { |
| | | occupyMaterial = occupyDic[_item.FMATERIALID2]; |
| | | occupyDic[_item.FMATERIALID2] = occupyMaterial + fCompleteCount; |
| | | } |
| | | completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel |
| | | { |
| | | FHMainICMOInterIDr = _item.FPRDMOMAINID, |
| | |
| | | FLackCount = _fLackCount,//缺料数量 |
| | | FHStockQty = sjkcList.FBASEQTY,//即时库存 |
| | | FHLeftQty = Inventory.FBASEQTY,//可用数量 |
| | | FOccupyCount = occupyMaterial,//占用数量 |
| | | FComPlete = sjkcList.FBASEQTY >= _item.PlanCount ? "齐套" : "未齐套", |
| | | FPlanDate = item.FHMASTERDATE // 日计划日期 |
| | | }); |
| | |
| | | } |
| | | else |
| | | { |
| | | decimal occupyMaterial = 0; |
| | | if (occupyDic.ContainsKey(_item.FMATERIALID2)) |
| | | occupyMaterial = occupyDic[_item.FMATERIALID2]; |
| | | completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel |
| | | { |
| | | FHMainICMOInterIDr = _item.FPRDMOMAINID, |
| | |
| | | FLackCount = _item.PlanCount,//缺料数量 |
| | | FHStockQty = 0,//即时库存 |
| | | FHLeftQty = 0,//可用数量 |
| | | FOccupyCount = occupyMaterial,//占用数量 |
| | | FComPlete = "未齐套", |
| | | FPlanDate = item.FHMASTERDATE // 日计划日期 |
| | | }); |
| | | } |
| | | } |
| | | Thread.Sleep(100); |
| | | //Thread.Sleep(100); |
| | | this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(40) / DatePlanList.Count) * i); |
| | | i++; |
| | | |
| | |
| | | jsonModel.Add("FOwnerTypeId", item.FOwnerTypeId); |
| | | jsonModel.Add("FComPlete", item.FComPlete); |
| | | jsonModel.Add("FLackCount", item.FLackCount); |
| | | jsonModel.Add("FOccupyCount", item.FOccupyCount); |
| | | jsonModel.Add("FPlanDate", item.FPlanDate); |
| | | if (item.FOwnerId != null) |
| | | jsonModel.Add("FOwnerId", new JObject() { ["FNUMBER"] = item.FOwnerId }); |
| | |
| | | sqlwhere += $" and FPreparatDate='{FPreparatDate}'"; |
| | | try |
| | | { |
| | | string sql = @"/*dialect*/select t1.* from Sc_WorkBillSortBillMain t1 |
| | | left join T_BD_MATERIAL t3 on t1.FHMaterID=t3.FMATERIALID |
| | | string sql = @"/*dialect*/ select t1.*,isnull((select SUM(isnull(FNotProductNum,0)) from SC_WORKBILLSORTBILLSub t2 where t2.FID = t1.FID and DATEDIFF(D,FHMASTERDATE,GETDATE())>0),0)FNotProductNum from Sc_WorkBillSortBillMain t1 |
| | | left join T_BD_MATERIAL t3 on t1.FHMaterID=t3.FMATERIALID |
| | | " + sqlwhere; |
| | | DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; |
| | | DateTime DateNow = DateTime.Now;//获取当前日期 |
| | |
| | | this.Model.SetValue("FOrderQuantity", dt.Rows[i]["FOrderQuantity"].ToString(), i);//生产订单数量 |
| | | this.Model.SetValue("FDayPlanQuantity", dt.Rows[i]["FDayPlanQuantity"].ToString(), i);//日计划数量 |
| | | this.Model.SetValue("FNoScheduled", dt.Rows[i]["FNoScheduled"].ToString(), i);//未排数量 |
| | | this.Model.SetValue("FDelaylnUM", dt.Rows[i]["FNotProductNum"].ToString(), i);//拖期数量 |
| | | sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[i]["FID"].ToString(); |
| | | DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; |
| | | foreach (DataRow dr in _dt.Rows) |
| | | { |
| | | /* |
| | | this.Model.SetValue(dr["FColumn"].ToString(), dr["FHQTY"].ToString(), i);//日计划工单FID |
| | | if (dr["FHLockedSub"].ToString() == "1") |
| | | this.View.GetFieldEditor(dr["FColumn"].ToString(), i).Enabled = false; //单据体行锁定字段 |
| | | */ |
| | | DateTime start = Convert.ToDateTime(DateNow.ToShortDateString()); |
| | | DateTime end = Convert.ToDateTime(Convert.ToDateTime(dr["FHMASTERDATE"]).ToShortDateString()); |
| | | TimeSpan getDay = end.Subtract(start); |
| | |
| | | sqlwhere += $" and FPreparatDate='{FPreparatDate}'"; |
| | | try |
| | | { |
| | | string sql = @"/*dialect*/select t1.* from Sc_WorkBillSortBillMain t1 |
| | | left join T_BD_MATERIAL t3 on t1.FHMaterID=t3.FMATERIALID |
| | | string sql = @"/*dialect*/ select t1.*,isnull((select SUM(isnull(FNotProductNum,0)) from SC_WORKBILLSORTBILLSub t2 where t2.FID = t1.FID and DATEDIFF(D,FHMASTERDATE,GETDATE())>0),0)FNotProductNum from Sc_WorkBillSortBillMain t1 |
| | | left join T_BD_MATERIAL t3 on t1.FHMaterID=t3.FMATERIALID |
| | | " + sqlwhere; |
| | | DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; |
| | | DateTime DateNow = DateTime.Now;//获取当前日期 |
| | |
| | | this.Model.SetValue("FOrderQuantity", dt.Rows[i]["FOrderQuantity"].ToString(), i);//生产订单数量 |
| | | this.Model.SetValue("FDayPlanQuantity", dt.Rows[i]["FDayPlanQuantity"].ToString(), i);//日计划数量 |
| | | this.Model.SetValue("FNoScheduled", dt.Rows[i]["FNoScheduled"].ToString(), i);//未排数量 |
| | | this.Model.SetValue("FDelaylnUM", dt.Rows[i]["FNotProductNum"].ToString(), i);//拖期数量 |
| | | sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[i]["FID"].ToString(); |
| | | DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; |
| | | foreach (DataRow dr in _dt.Rows) |
| | |
| | | |
| | | sql = string.Format(@" |
| | | /*dialect*/ |
| | | SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,t5.FFIXLEADTIME,t5.FMAXPOQTY,t5.FMINPOQTY,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId FROM SC_WORKBILLSORTBILLMAIN T1 |
| | | 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 |
| | | JOIN SC_WORKBILLSORTBILLSUB T2 ON T1.FID=T2.FID |
| | | LEFT JOIN(SELECT T1.FID,max(t2.FMATERIALID)FMATERIALIDMAIN, max(t2.FMoId)FMoId,MAX(FENTRYID) FENTRYID, SUM(convert(decimal(18, 2), FBASENUMERATOR / FBASEDENOMINATOR))FNeedQty, T1.FMATERIALID from T_PRD_PPBOMENTRY T1 |
| | | JOIN T_PRD_PPBOM T2 on t1.FID = t2.FID |
| | |
| | | WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE) >=0 |
| | | AND FDayPlanQuantity>FCOMPLETECOUNT |
| | | AND FERPCLSID=1 |
| | | AND T2.FENTRYID not in (select distinct FHSOURCEENTRYID from CG_PODEMANDPLANBILLSUB where FHSOURCEINTERID IN ({0})) |
| | | AND T2.FENTRYID not in (select distinct FHSOURCEENTRYID from CG_PODEMANDPLANBILLSUB where FHSOURCEINTERID IN ({0})) |
| | | AND T1.FID in ({0}) |
| | | order by FHMASTERDATE |
| | | ", FDayPlanWorkID); |
| | |
| | | /// </summary> |
| | | public void DayPlanPPBomBill() |
| | | { |
| | | //锁定的日计划不生成 |
| | | try |
| | | { |
| | | string sql = string.Format(@" |
| | |
| | | |
| | | //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量 |
| | | sql = string.Format(@" |
| | | |
| | | /*dialect*/ |
| | | exec [提料计划预处理] '{0}' |
| | | ", FDayPlanWorkID.Replace(",", "-")); |
| | | |
| | |
| | | |
| | | sql = string.Format(@" |
| | | /*dialect*/ |
| | | select T1.*,t5.FFIXLEADTIME,t5.FMAXPOQTY,t5.FMINPOQTY,t6.FNumber from ( |
| | | select FHICMOINTERID FID,FHICMOENTRYID FEntryID,FPlanDate FHMASTERDATE,FLackCount NeedQty,FHMATERID FMATERIALID,FHStockOrgID FStockOrgId,FPRDBILLNO FBillNo from JIT_MOMaterReadysBill |
| | | )T1 |
| | | join t_BD_MaterialBase t4 on T1.FMATERIALID = t4.FMATERIALID |
| | | join t_BD_MaterialPlan t5 on T1.FMATERIALID = t5.FMATERIALID |
| | | JOIN T_BD_MATERIAL T6 ON T1.FMATERIALID = T6.FMATERIALID |
| | | WHERE T1.NeedQty >0 AND FERPCLSID=1 |
| | | AND T1.FENTRYID not in (select distinct FHSOURCEENTRYID from CG_PODEMANDPLANBILLSUB where FHSOURCEINTERID IN ({0})) |
| | | AND T1.FID in ({0}) |
| | | 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 |
| | | JOIN SC_WORKBILLSORTBILLSUB T2 ON T1.FID=T2.FID |
| | | LEFT JOIN(SELECT T1.FID,max(t2.FMATERIALID)FMATERIALIDMAIN, max(t2.FMoId)FMoId,MAX(FENTRYID) FENTRYID, SUM(convert(decimal(18, 2), FBASENUMERATOR / FBASEDENOMINATOR))FNeedQty, T1.FMATERIALID from T_PRD_PPBOMENTRY T1 |
| | | JOIN T_PRD_PPBOM T2 on t1.FID = t2.FID |
| | | group by T1.FMATERIALID, T1.FID) T3 on T1.FPRDMOMAINID = t3.FMoId and T1.FHMATERID = t3.FMATERIALIDMAIN |
| | | JOIN T_BD_MATERIAL T6 ON T3.FMATERIALID = T6.FMATERIALID |
| | | join t_BD_MaterialBase t4 on t3.FMATERIALID = t4.FMATERIALID |
| | | join t_BD_MaterialPlan t5 on t3.FMATERIALID = t5.FMATERIALID |
| | | WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE) >=0 |
| | | AND FDayPlanQuantity>FCOMPLETECOUNT |
| | | AND FERPCLSID=1 |
| | | AND T2.FENTRYID not in (select distinct FHSOURCEENTRYID from CG_PODEMANDPLANBILLSUB where FHSOURCEINTERID IN ({0})) |
| | | AND T1.FID in ({0}) |
| | | order by FHMASTERDATE |
| | | ", FDayPlanWorkID); |
| | | LogHelper.Info("提料数据" + sql); |
| | |
| | | |
| | | 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; |
| | | int i = 1; |
| | |
| | | List<int> FEntryIdList = new List<int>(); |
| | | foreach (var _item in _DayPlanPpbom) |
| | | { |
| | | |
| | | if (NeedQty == 0) |
| | | DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-FFIXLEADTIME); |
| | | |
| | | FEntryIdList.Add(_item.FENTRYID); |
| | | |
| | | NeedQty += _item.NeedQty; |
| | | if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToInt32(FJITMaterielDemand)) //订单专用个性类 |
| | | continue; |
| | | if (NeedQty >= FMINPOQTY) |
| | | { |
| | | List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList(); |
| | |
| | | NeedQty = 0; |
| | | break; |
| | | } |
| | | |
| | | foreach (var Purchase in _PurchaseInventory) |
| | | { |
| | | LogHelper.Info("Purchase"); |
| | | LogHelper.Info("物料:" + Purchase.FMATERIALID + ",数量:" + Purchase.FQTY); |
| | | |
| | | if (Purchase.FQTY >= NeedQty) |
| | | { |
| | | List<int> mmm = new List<int>(); |
| | |
| | | PurchseFqty = Purchase.FQTY, |
| | | FStockOrgId = Purchase.FStockOrgId, //采购组织 |
| | | FORGNumber = Purchase.FORGNumber |
| | | |
| | | }); |
| | | //扣除日计划明细已被分配的数量 |
| | | 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) |
| | |
| | | OLDDATE = DayPlanPpbomls.FHMASTERDATE, |
| | | FFIXLEADTIME = FFIXLEADTIME, |
| | | |
| | | |
| | | PurchseFID = Purchase.FID, |
| | | PurchseFentryID = Purchase.FENTRYID, |
| | | FSUPPLIERID = Purchase.FSUPPLIERID, |
| | |
| | | PurchseFqty = Purchase.FQTY, |
| | | 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}"); |
| | | |
| | | //更新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; |
| | |
| | | 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); |
| | |
| | | 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); |
| | | EntryGrid grid = this.View.GetControl<EntryGrid>("FEntity"); |
| | | //总库存 物料+库存组织+库存数量 |
| | | 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,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 = "SAL_SaleOrder"; |
| | | lockStockArgs.BillId = Convert.ToString(current["FHMainSourceInterID"]); //生产订单ID |
| | | lockStockArgs.BillNo = Convert.ToString(current["FSCOrderNo"]);//生产订单号 |
| | | 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()); |
| | | 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); |
| | | 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)); |
| | | foreach (DynamicObject current in entityDataObjoct) |
| | | { |
| | | 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); |
| | | } |
| | | this.View.ShowMessage("操作成功!"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error(ex.Message.ToString()); |
| | | this.View.ShowErrMessage(ex.Message.ToString()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | //tbReleaseReserve |