| | |
| | | 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") |
| | | { |
| | | Extraction(); |
| | | Reserve(); |
| | | } |
| | | //释放 |
| | | if (e.BarItemKey.ToUpper() == "TBRELEASE") |
| | | { |
| | | |
| | | Extraction(); |
| | | Release(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | 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 |