系统默认的生产用料清单下推生成调拨单功能,是根据调拨选单数量来的,有库存和没有库存的都混在一起,导致业务人员审核调拨单的时候需要删除没有库存的分录行,严重影响工作效率。
现通过二开程序,根据生产用料清单分录行物料库存数据进行处理,调拨单审核自动根据未完成调拨的生产用料清单生成调拨单
转换插件
1 public override void AfterConvert(AfterConvertEventArgs e) 2 { 3 base.AfterConvert(e); 4 ExtendedDataEntity[] entityArray = e.Result.FindByEntityKey("FBillHead"); 5 foreach (ExtendedDataEntity entity in entityArray) 6 { 7 DynamicObject billObj = entity.DataEntity; 8 DynamicObjectCollection mx = billObj["TransferDirectEntry"] as DynamicObjectCollection; 9 long orgId = Convert.ToInt64(billObj["StockOrgId_Id"].ToString()); 10 11 12 DynamicObject factwh = queryWarehouse(orgId, 2); 13 DynamicObject rawwh = queryWarehouse(orgId, 1); 14 /******设置表头调出仓库*******/ 15 BaseDataField stockFld = e.TargetBusinessInfo.GetField("FRFOutWarehouse") as BaseDataField; 16 long stockId = Convert.ToInt64(rawwh["FSTOCKID"]); 17 IViewService viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>(); 18 DynamicObject[] stockObjs = viewService.LoadFromCache(this.Context, 19 new object[] { stockId }, 20 stockFld.RefFormDynamicObjectType); 21 stockFld.RefIDDynamicProperty.SetValue(billObj, stockId); 22 stockFld.DynamicProperty.SetValue(billObj, stockObjs[0]); 23 /***********设置表头调入仓库******************/ 24 stockFld = e.TargetBusinessInfo.GetField("FRFInWarehouse") as BaseDataField; 25 stockId = Convert.ToInt64(factwh["FSTOCKID"]); 26 viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>(); 27 stockObjs = viewService.LoadFromCache(this.Context, 28 new object[] { stockId }, 29 stockFld.RefFormDynamicObjectType); 30 stockFld.RefIDDynamicProperty.SetValue(billObj, stockId); 31 stockFld.DynamicProperty.SetValue(billObj, stockObjs[0]); 32 /*******************/ 33 DynamicObjectCollection rawCols = queryInventorys(orgId, 1); 34 //IEnumerable<DynamicObject> eqInvs = (from raw in rawCols 35 // from stk in mx 36 // where raw["FSTOCKORGID"].ToString().Equals(stk["KeeperId_Id"].ToString()) 37 // && raw["FMATERIALID"].ToString().Equals(stk["MaterialId_Id"].ToString()) select raw).ToList(); 38 //int eqcounts=eqInvs.Count(); 39 bool eqflag = false; 40 //bool eqflag = eqcounts < mx.Count &&eqcounts>0 ? false : true;//判断生产用料是否有库存,有库存为false,没有库存为true 41 /***********/ 42 double usedqty = 0; 43 double leaveqty = 0; 44 double reqty = 0; 45 double actualqty = 0; 46 double invsqty = 0; 47 string srcBillNo = string.Empty; 48 List<pickMaterial> pickList = new List<pickMaterial>(); 49 int k = 0; 50 srcBillNo = mx[0]["SrcBillNo"].ToString(); 51 DynamicObjectCollection ppbomInvs = queryPPPbom(srcBillNo, orgId); 52 eqflag = ppbomInvs.Count() > 0 ? false : true; 53 foreach (var item in mx) 54 { 55 var material = item["MaterialId"] as DynamicObject; 56 long materialid = 0; 57 bool flag = Int64.TryParse(material["id"].ToString(), out materialid); 58 double rawqtys = 0; 59 double factqtys = 0; 60 //billObj["FRFOutWarehouse_Id"] = rawwh["FSTOCKID"]; 61 //billObj["FRFInWarehouse_Id"] = factwh["FSTOCKID"]; 62 63 if (flag) 64 { 65 DynamicObjectCollection factorywhinvDatas = queryInventorys(orgId, 2, materialid);//车间仓即时库存数量 66 DynamicObjectCollection rawmaterialwhinvDatas = queryInventorys(orgId, 1, materialid);//原材料仓即时库存数量 67 if (rawmaterialwhinvDatas.Count() > 0) 68 { 69 rawqtys = Convert.ToDouble(rawmaterialwhinvDatas[0]["fbaseqty"].ToString()); 70 } 71 if (factorywhinvDatas.Count() > 0) 72 { 73 factqtys = Convert.ToDouble(factorywhinvDatas[0]["fbaseqty"].ToString()); 74 } 75 double noTranslateQty = Convert.ToDouble(item["QTY"].ToString()); 76 if (!eqflag) 77 {//有库存 78 //if (rawqtys > 0) 79 //{ 80 // if (rawqtys < noTranslateQty) 81 // { 82 // item["QTY"] = rawqtys; 83 // item["BaseQty"] = rawqtys; 84 // } 85 // else 86 // { 87 // item["QTY"] = noTranslateQty; 88 // item["BaseQty"] = noTranslateQty; 89 // } ; 90 //} 91 //else 92 //{ 93 // item["QTY"] = 0; 94 // item["BaseQty"] = 0; 95 //} 96 //item["FRFStockQty"] = rawqtys; 97 /**考虑下面的物料有重复的逻辑处理 2020-8-19**/ 98 invsqty = QueryMaterialStock(orgId, materialid, Convert.ToInt64(rawwh["FSTOCKID"])); 99 List<pickMaterial> find = pickList.Where(p => p.materialId.Equals(materialid)).ToList(); 100 reqty = Convert.ToDouble(item["QTY"].ToString()); 101 if (find.Count() <= 0) 102 { 103 if (invsqty > 0) 104 { 105 usedqty = invsqty < reqty ? invsqty : reqty; 106 actualqty = invsqty < reqty ? invsqty : reqty; 107 leaveqty = invsqty - usedqty; 108 pickList.Add(new pickMaterial { materialId = materialid, usedQty = usedqty, leavingQty = leaveqty, invsQty = invsqty }); 109 //Console.WriteLine("申请数量:" + reqty + " 实发数量:" + actualqty + "已占用数量:" + usedqty + " 剩余库存数量:" + leaveqty + " 即时库存数量:" + invsqty + ""); 110 //this.Model.SetValue("FActualQty", actualqty, i); 111 //this.Model.SetValue("FRFStockQty", invsqty, i); 112 item["QTY"] = actualqty; 113 item["BaseQty"] = actualqty; 114 item["FRFStockQty"] = invsqty; 115 116 } 117 else 118 { 119 item["QTY"] = 0; 120 item["BaseQty"] = 0; 121 item["FRFStockQty"] = 0; 122 } 123 124 } 125 else 126 { 127 if (find.Count() > 0) 128 { 129 if (find[0].leavingQty > 0) 130 { 131 usedqty = (find[0].leavingQty < reqty ? find[0].leavingQty : reqty) + find[0].usedQty; 132 actualqty = find[0].leavingQty < reqty ? find[0].leavingQty : reqty; 133 leaveqty = invsqty - usedqty; 134 int index = pickList.FindIndex(p => p.materialId.Equals(materialid)); 135 find[0].invsQty = invsqty; 136 find[0].usedQty = usedqty; 137 find[0].leavingQty = leaveqty; 138 //Console.WriteLine("申请数量:" + reqty + " 实发数量:" + actualqty + "已占用数量:" + usedqty + " 剩余库存数量:" + leaveqty + " 即时库存数量:" + invsqty + ""); 139 //this.Model.SetValue("FActualQty", actualqty, i); 140 //this.Model.SetValue("FRFStockQty", invsqty, i); 141 item["QTY"] = actualqty; 142 item["BaseQty"] = actualqty; 143 item["FRFStockQty"] = invsqty; 144 } 145 else 146 { 147 //this.Model.SetValue("FActualQty", 0, i); 148 //this.Model.SetValue("FRFStockQty", invsqty, i); 149 item["QTY"] = 0; 150 item["BaseQty"] = 0; 151 } 152 153 154 } 155 } 156 } 157 else 158 {//没有库存 159 item["QTY"] = noTranslateQty; 160 item["BaseQty"] = noTranslateQty; 161 item["FRFStockQty"] = 0; 162 } 163 /***设置表体调出仓库***/ 164 stockFld = e.TargetBusinessInfo.GetField("FSRCSTOCKID") as BaseDataField; 165 stockId = Convert.ToInt64(rawwh["FSTOCKID"]); 166 viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>(); 167 stockObjs = viewService.LoadFromCache(this.Context, 168 new object[] { stockId }, 169 stockFld.RefFormDynamicObjectType); 170 stockFld.RefIDDynamicProperty.SetValue(item, stockId); 171 stockFld.DynamicProperty.SetValue(item, stockObjs[0]); 172 /***设置表体调入仓库***/ 173 stockFld = e.TargetBusinessInfo.GetField("FDestStockId") as BaseDataField; 174 stockId = Convert.ToInt64(factwh["FSTOCKID"]); 175 viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>(); 176 stockObjs = viewService.LoadFromCache(this.Context, 177 new object[] { stockId }, 178 stockFld.RefFormDynamicObjectType); 179 stockFld.RefIDDynamicProperty.SetValue(item, stockId); 180 stockFld.DynamicProperty.SetValue(item, stockObjs[0]); 181 } 182 } 183 } 184 }
审核服务插件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using Kingdee.BOS.Core.DynamicForm.PlugIn; 6 using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; 7 using Kingdee.BOS.Orm.DataEntity; 8 using Kingdee.BOS.Core.Validation; 9 using System.ComponentModel; 10 using Kingdee.BOS.Core; 11 using Kingdee.BOS.App.Data; 12 using Kingdee.BOS.Core.DynamicForm; 13 using Kingdee.BOS.ServiceHelper; 14 using Kingdee.BOS.Core.List; 15 using Kingdee.BOS.Core.DynamicForm.Operation; 16 using Kingdee.BOS.Core.Metadata.ConvertElement; 17 using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; 18 using Kingdee.BOS.Core.Metadata; 19 using Kingdee.BOS.Orm; 20 using Kingdee.BOS.Util; 21 using Kingdee.BOS.Core.Interaction; 22 using Kingdee.BOS.App; 23 using Kingdee.BOS.App.Core; 24 using Kingdee.BOS.Contracts; 25 26 namespace RF.K3.ServicePlugIn.Stock 27 { 28 [Kingdee.BOS.Util.HotUpdate] 29 [Description("直接调拨单操作插件")] 30 public class TransferOp : AbstractOperationServicePlugIn 31 { 32 public override void OnPreparePropertys(PreparePropertysEventArgs e) 33 { 34 //e.FieldKeys.Add("");将需要应用的字段Key加入 35 base.OnPreparePropertys(e); 36 e.FieldKeys.Add("FEntryID"); 37 e.FieldKeys.Add("FTransferDirectEntry"); 38 e.FieldKeys.Add("FMaterialId"); 39 e.FieldKeys.Add("FQTY"); 40 e.FieldKeys.Add("FRFSTOCKQTY"); 41 e.FieldKeys.Add("FSrcBillTypeId"); 42 e.FieldKeys.Add("FSrcBillNo"); 43 } 44 45 public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) 46 { 47 base.BeforeExecuteOperationTransaction(e); 48 //生成调拨单前提:源单类型必须是生产用料清单,本张调拨单中并非所有分录行没有即时库存(只有部分没有即时库存) 49 50 } 51 public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) 52 { 53 base.AfterExecuteOperationTransaction(e); 54 /*******提交后根据上游的生产用料清单下推生成调拨单*********/ 55 foreach (DynamicObject dy in e.DataEntitys) 56 { 57 DynamicObjectCollection dycolls = dy["TransferDirectEntry"] as DynamicObjectCollection; 58 string stranSrcbillType = dycolls[0]["SrcBillTypeId"].ToString(); 59 string stranSrcbill = dycolls[0]["SrcBillNo"].ToString(); 60 if (stranSrcbillType.Equals("PRD_PPBOM")) 61 { 62 //PushpppBomToStkTransfer(stranSrcbill); 63 ListSelectedRow[] selectedRows = querySelectRows(stranSrcbill); 64 PushpppBomToStkTransfer(selectedRows); 65 } 66 67 } 68 69 } 70 public ListSelectedRow[] querySelectRows(string pppbomBillNumber) 71 { 72 /***** 73 * 2020-9-24 章坚华修改 74 * 针对调拨单生成时调拨数量不能为0的校验规则,通过对生产用料清单的数据进行过滤选择 75 * 如果一张生产用料清单所有物料无库存,则默认下推所有数据至调拨单 76 * 如果只是部分物料无库存,则先下推有库存的物料,待调拨单审核后再下推无库存的物料 77 * *****/ 78 DynamicObjectCollection ppBoms = queryprdPPBom(pppbomBillNumber); 79 long fprdorgId = ppBoms.Count() > 0 ? Convert.ToInt64(ppBoms[0]["FPRDORGID"]) : 0; 80 int k = 0; 81 if (!fprdorgId.Equals(0)) 82 { 83 DynamicObjectCollection prdppBoms = queryprdPPBomInvetories(pppbomBillNumber, fprdorgId, 1); 84 if (prdppBoms.Count <= 0) 85 { 86 prdppBoms = queryprdPPBomInvetories(pppbomBillNumber, fprdorgId, 2); 87 } 88 ListSelectedRow[] selectedRows = new ListSelectedRow[prdppBoms.Count]; 89 ListSelectedRow row; 90 foreach (DynamicObject d in prdppBoms) 91 { 92 string primaryKeyValue = d["Fid"].ToString(); 93 string entryId = d["FENTRYID"].ToString(); 94 int seq = Convert.ToInt32(d["FSEQ"].ToString()); 95 row = new ListSelectedRow(primaryKeyValue, entryId, 0, "PRD_PPBOM") 96 { 97 EntryEntityKey = "FEntity" 98 }; 99 selectedRows[k] = row; 100 k++; 101 } 102 return selectedRows; 103 } 104 return null; 105 //foreach (DynamicObject d in ppBoms) 106 //{ 107 // string primaryKeyValue = d["Fid"].ToString(); 108 // string entryId = d["FENTRYID"].ToString(); 109 // int seq = Convert.ToInt32(d["FSEQ"].ToString()); 110 // row = new ListSelectedRow(primaryKeyValue, entryId, 0, "PRD_PPBOM") 111 // { 112 // EntryEntityKey = "FEntity" 113 // }; 114 // selectedRows[k] = row; 115 // k++; 116 //} 117 118 } 119 public void PushpppBomToStkTransfer(ListSelectedRow[] selectedRows) 120 { 121 if(selectedRows.Count()>0) 122 { 123 try 124 { 125 ConvertOperationResult operationResult = null; 126 ConvertRuleElement rule = ConvertServiceHelper.GetConvertRules(this.Context, "PRD_PPBOM", "STK_TransferDirect").FirstOrDefault<ConvertRuleElement>(t => t.Id == "PRD_PPBOM-STK_TransferDirect"); 127 128 PushArgs pushArgs = new PushArgs(rule, selectedRows) 129 { 130 TargetBillTypeId = "ce8f49055c5c4782b65463a3f863bb4a" // 请设定目标单据单据类型。如无单据类型,可以空字符 131 }; 132 var convertService = ServiceHelper.GetService<IConvertService>(); 133 operationResult = convertService.Push(this.Context, pushArgs); 134 DynamicObject[] objs = (from p in operationResult.TargetDataEntities 135 select p.DataEntity).ToArray(); 136 var targetBillMeta = MetaDataServiceHelper.Load(this.Context, "STK_TransferDirect") as FormMetadata; 137 OperateOption saveOption = OperateOption.Create(); 138 saveOption.SetIgnoreWarning(true); // 忽略交互提示 139 saveOption.SetIgnoreScopeValidateFlag(true); 140 saveOption.SetIgnoreInteractionFlag(true); 141 //saveOption.set(true); // 提交数据库保存,并获取保存结果 142 //var saveResult = BusinessDataServiceHelper.Draft(this.Context, targetBillMeta.BusinessInfo, objs, saveOption); 143 var saveResult = BusinessDataServiceHelper.Save(this.Context, targetBillMeta.BusinessInfo, objs, saveOption,"Save"); 144 string save = ((IOperationResult)saveResult).IsSuccess.ToString(); 145 } 146 catch (Exception ex) 147 { 148 throw ex; 149 } 150 } 151 } 152 153 #region 154 /******* 155 * 156 * ************/ 157 public DynamicObjectCollection queryprdPPBom(string billNO) 158 { 159 return DBUtils.ExecuteDynamicObject(this.Context, "select a.FID,b.FENTRYID,b.FSEQ,a.FPRDORGID from T_PRD_PPBOM a inner join T_PRD_PPBOMENTRY b on a.fid=b.FID and a.FBILLNO='" + billNO + "'"); 160 } 161 /// <summary> 162 /// 查询调拨单源单类型 163 /// </summary> 164 /// <param name="fid"></param> 165 /// <returns></returns> 166 public DynamicObject querystranSrcbillType(long fid) 167 { 168 return DBUtils.ExecuteDynamicObject(this.Context, "select top 1 b.FSrcBillTypeId from T_STK_STKTRANSFERIN a " + 169 " inner join T_STK_STKTRANSFERINENTRY_R b on a.fid = b.fid and a.fid = " + fid + "").FirstOrDefault<DynamicObject>(); 170 } 171 /// <summary> 172 /// 查询事业部即时库存数量 173 /// </summary> 174 /// <param name="orgId">事业部Id</param> 175 /// <param name="wareHouetype">仓库类型 1材料 2 车间仓</param> 176 /// <param name="materialId">物料ID</param> 177 /// <returns></returns> 178 public DynamicObjectCollection queryInventorys(long orgId, int wareHousetype, long materialId) 179 { 180 return DBUtils.ExecuteDynamicObject(this.Context, "select sum(FBASEQTY) fbaseqty,m.FMATERIALID,invs.FSTOCKID,invs.FSTOCKORGID from T_STK_INVENTORY invs inner join " + 181 " T_BD_STOCK stock on invs.FSTOCKID = stock.FSTOCKID and stock.FRFWAREHOUSETYPE = " + wareHousetype + " and FSTOCKORGID = " + orgId + "" + 182 " inner join T_BD_MATERIAL m on m.FMASTERID = invs.FMATERIALID and m.FUSEORGID = invs.FSTOCKORGID and m.fmaterialid=" + materialId + "" + 183 " group by m.FMATERIALID, invs.FSTOCKID, invs.FSTOCKORGID"); 184 } 185 /// <summary> 186 /// 生产用料清单数据查询(库存数据) 187 /// </summary> 188 /// <param name="billNo">生产用料清单编号</param> 189 /// <param name="prdOrgId">生产组织内码</param> 190 /// <param name="invsType">库存类型标识 1 有库存 2 没有库存</param> 191 /// <returns></returns> 192 public DynamicObjectCollection queryprdPPBomInvetories(string billNo,long prdOrgId,int invsType) 193 { 194 string sql = string.Empty; 195 if (invsType.Equals(1)) 196 { 197 sql = "select b.FMATERIALID,b.fbaseqty,b.fnumber,a.FENTRYID,a.FSEQ,a.fid from(select b.FMATERIALID, b.FENTRYID,b.FSEQ,a.fid from T_PRD_PPBOM a " + 198 " inner join T_PRD_PPBOMENTRY b on a.fid = b.FID and a.FBILLNO = '"+billNo+"' and b.FMATERIALTYPE<>2 " + 199 " inner join T_PRD_PPBOMENTRY_C c on a.fid = c.FID and b.FENTRYID = c.FENTRYID and(c.FISSUETYPE = 3 or c.FISSUETYPE = 4)" + 200 " inner join T_PRD_PPBOMENTRY_Q q on q.FENTRYID = b.FENTRYID and q.FENTRYID = c.FENTRYID and q.FID = a.FID and b.FMUSTQTY > q.FSELTRANSLATEQTY) a" + 201 " inner join(select sum(FBASEQTY) fbaseqty, m.FMATERIALID, invs.FSTOCKID, invs.FSTOCKORGID, m.FNUMBER from T_STK_INVENTORY invs " + 202 "inner join T_BD_STOCK stock on invs.FSTOCKID = stock.FSTOCKID and stock.FRFWAREHOUSETYPE = 1 and FSTOCKORGID = "+prdOrgId+"" + 203 " inner join T_BD_MATERIAL m on m.FMASTERID = invs.FMATERIALID and m.FUSEORGID = invs.FSTOCKORGID" + 204 " group by m.FMATERIALID, invs.FSTOCKID, invs.FSTOCKORGID, m.FNUMBER having sum(FBASEQTY) > 0) b on a.FMATERIALID = b.FMATERIALID"; 205 } 206 if (invsType.Equals(2)) 207 { 208 sql = "select b.FMATERIALID,b.fbaseqty,b.fnumber,a.FENTRYID,a.FSEQ,a.fid from(select b.FMATERIALID, b.FENTRYID,b.FSEQ,a.fid from T_PRD_PPBOM a " + 209 " inner join T_PRD_PPBOMENTRY b on a.fid = b.FID and a.FBILLNO = '" + billNo + "' and b.FMATERIALTYPE<>2 " + 210 " inner join T_PRD_PPBOMENTRY_C c on a.fid = c.FID and b.FENTRYID = c.FENTRYID and(c.FISSUETYPE = 3 or c.FISSUETYPE = 4)" + 211 " inner join T_PRD_PPBOMENTRY_Q q on q.FENTRYID = b.FENTRYID and q.FENTRYID = c.FENTRYID and q.FID = a.FID and b.FMUSTQTY > q.FSELTRANSLATEQTY) a" + 212 " inner join(select sum(FBASEQTY) fbaseqty, m.FMATERIALID, invs.FSTOCKID, invs.FSTOCKORGID, m.FNUMBER from T_STK_INVENTORY invs " + 213 "inner join T_BD_STOCK stock on invs.FSTOCKID = stock.FSTOCKID and stock.FRFWAREHOUSETYPE = 1 and FSTOCKORGID = " + prdOrgId + "" + 214 " inner join T_BD_MATERIAL m on m.FMASTERID = invs.FMATERIALID and m.FUSEORGID = invs.FSTOCKORGID" + 215 " group by m.FMATERIALID, invs.FSTOCKID, invs.FSTOCKORGID, m.FNUMBER having sum(FBASEQTY) <= 0) b on a.FMATERIALID = b.FMATERIALID"; 216 } 217 return DBUtils.ExecuteDynamicObject(this.Context, sql); 218 } 219 #endregion 220 } 221 }
public override void AfterConvert(AfterConvertEventArgs e) { base.AfterConvert(e); ExtendedDataEntity[] entityArray = e.Result.FindByEntityKey("FBillHead"); foreach (ExtendedDataEntity entity in entityArray) { DynamicObject billObj = entity.DataEntity; DynamicObjectCollection mx = billObj["TransferDirectEntry"] as DynamicObjectCollection; long orgId = Convert.ToInt64(billObj["StockOrgId_Id"].ToString());
DynamicObject factwh = queryWarehouse(orgId, 2); DynamicObject rawwh = queryWarehouse(orgId, 1); /******设置表头调出仓库*******/ BaseDataField stockFld = e.TargetBusinessInfo.GetField("FRFOutWarehouse") as BaseDataField; long stockId = Convert.ToInt64(rawwh["FSTOCKID"]); IViewService viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>(); DynamicObject[] stockObjs = viewService.LoadFromCache(this.Context, new object[] { stockId }, stockFld.RefFormDynamicObjectType); stockFld.RefIDDynamicProperty.SetValue(billObj, stockId); stockFld.DynamicProperty.SetValue(billObj, stockObjs[0]); /***********设置表头调入仓库******************/ stockFld = e.TargetBusinessInfo.GetField("FRFInWarehouse") as BaseDataField; stockId = Convert.ToInt64(factwh["FSTOCKID"]); viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>(); stockObjs = viewService.LoadFromCache(this.Context, new object[] { stockId }, stockFld.RefFormDynamicObjectType); stockFld.RefIDDynamicProperty.SetValue(billObj, stockId); stockFld.DynamicProperty.SetValue(billObj, stockObjs[0]); /*******************/ DynamicObjectCollection rawCols = queryInventorys(orgId, 1); //IEnumerable<DynamicObject> eqInvs = (from raw in rawCols // from stk in mx // where raw["FSTOCKORGID"].ToString().Equals(stk["KeeperId_Id"].ToString()) // && raw["FMATERIALID"].ToString().Equals(stk["MaterialId_Id"].ToString()) select raw).ToList(); //int eqcounts=eqInvs.Count(); bool eqflag = false; //bool eqflag = eqcounts < mx.Count &&eqcounts>0 ? false : true;//判断生产用料是否有库存,有库存为false,没有库存为true /***********/ double usedqty = 0; double leaveqty = 0; double reqty = 0; double actualqty = 0; double invsqty = 0; string srcBillNo = string.Empty; List<pickMaterial> pickList = new List<pickMaterial>(); int k = 0; srcBillNo = mx[0]["SrcBillNo"].ToString(); DynamicObjectCollection ppbomInvs = queryPPPbom(srcBillNo, orgId); eqflag = ppbomInvs.Count() > 0 ? false : true; foreach (var item in mx) { var material = item["MaterialId"] as DynamicObject; long materialid = 0; bool flag = Int64.TryParse(material["id"].ToString(), out materialid); double rawqtys = 0; double factqtys = 0; //billObj["FRFOutWarehouse_Id"] = rawwh["FSTOCKID"]; //billObj["FRFInWarehouse_Id"] = factwh["FSTOCKID"]; if (flag) { DynamicObjectCollection factorywhinvDatas = queryInventorys(orgId, 2, materialid);//车间仓即时库存数量 DynamicObjectCollection rawmaterialwhinvDatas = queryInventorys(orgId, 1, materialid);//原材料仓即时库存数量 if (rawmaterialwhinvDatas.Count() > 0) { rawqtys = Convert.ToDouble(rawmaterialwhinvDatas[0]["fbaseqty"].ToString()); } if (factorywhinvDatas.Count() > 0) { factqtys = Convert.ToDouble(factorywhinvDatas[0]["fbaseqty"].ToString()); } double noTranslateQty = Convert.ToDouble(item["QTY"].ToString()); if (!eqflag) {//有库存 //if (rawqtys > 0) //{ // if (rawqtys < noTranslateQty) // { // item["QTY"] = rawqtys; // item["BaseQty"] = rawqtys; // } // else // { // item["QTY"] = noTranslateQty; // item["BaseQty"] = noTranslateQty; // } ; //} //else //{ // item["QTY"] = 0; // item["BaseQty"] = 0; //} //item["FRFStockQty"] = rawqtys; /**考虑下面的物料有重复的逻辑处理 2020-8-19**/ invsqty = QueryMaterialStock(orgId, materialid, Convert.ToInt64(rawwh["FSTOCKID"])); List<pickMaterial> find = pickList.Where(p => p.materialId.Equals(materialid)).ToList(); reqty = Convert.ToDouble(item["QTY"].ToString()); if (find.Count() <= 0) { if (invsqty > 0) { usedqty = invsqty < reqty ? invsqty : reqty; actualqty = invsqty < reqty ? invsqty : reqty; leaveqty = invsqty - usedqty; pickList.Add(new pickMaterial { materialId = materialid, usedQty = usedqty, leavingQty = leaveqty, invsQty = invsqty }); //Console.WriteLine("申请数量:" + reqty + " 实发数量:" + actualqty + "已占用数量:" + usedqty + " 剩余库存数量:" + leaveqty + " 即时库存数量:" + invsqty + ""); //this.Model.SetValue("FActualQty", actualqty, i); //this.Model.SetValue("FRFStockQty", invsqty, i); item["QTY"] = actualqty; item["BaseQty"] = actualqty; item["FRFStockQty"] = invsqty;
} else { item["QTY"] = 0; item["BaseQty"] = 0; item["FRFStockQty"] = 0; }
} else { if (find.Count() > 0) { if (find[0].leavingQty > 0) { usedqty = (find[0].leavingQty < reqty ? find[0].leavingQty : reqty) + find[0].usedQty; actualqty = find[0].leavingQty < reqty ? find[0].leavingQty : reqty; leaveqty = invsqty - usedqty; int index = pickList.FindIndex(p => p.materialId.Equals(materialid)); find[0].invsQty = invsqty; find[0].usedQty = usedqty; find[0].leavingQty = leaveqty; //Console.WriteLine("申请数量:" + reqty + " 实发数量:" + actualqty + "已占用数量:" + usedqty + " 剩余库存数量:" + leaveqty + " 即时库存数量:" + invsqty + ""); //this.Model.SetValue("FActualQty", actualqty, i); //this.Model.SetValue("FRFStockQty", invsqty, i); item["QTY"] = actualqty; item["BaseQty"] = actualqty; item["FRFStockQty"] = invsqty; } else { //this.Model.SetValue("FActualQty", 0, i); //this.Model.SetValue("FRFStockQty", invsqty, i); item["QTY"] = 0; item["BaseQty"] = 0; }
} } } else {//没有库存 item["QTY"] = noTranslateQty; item["BaseQty"] = noTranslateQty; item["FRFStockQty"] = 0; } /***设置表体调出仓库***/ stockFld = e.TargetBusinessInfo.GetField("FSRCSTOCKID") as BaseDataField; stockId = Convert.ToInt64(rawwh["FSTOCKID"]); viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>(); stockObjs = viewService.LoadFromCache(this.Context, new object[] { stockId }, stockFld.RefFormDynamicObjectType); stockFld.RefIDDynamicProperty.SetValue(item, stockId); stockFld.DynamicProperty.SetValue(item, stockObjs[0]); /***设置表体调入仓库***/ stockFld = e.TargetBusinessInfo.GetField("FDestStockId") as BaseDataField; stockId = Convert.ToInt64(factwh["FSTOCKID"]); viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>(); stockObjs = viewService.LoadFromCache(this.Context, new object[] { stockId }, stockFld.RefFormDynamicObjectType); stockFld.RefIDDynamicProperty.SetValue(item, stockId); stockFld.DynamicProperty.SetValue(item, stockObjs[0]); } } } }