zoukankan      html  css  js  c++  java
  • 金蝶k/3 cloud 生产用料清单下推生成调拨单二开记录

    系统默认的生产用料清单下推生成调拨单功能,是根据调拨选单数量来的,有库存和没有库存的都混在一起,导致业务人员审核调拨单的时候需要删除没有库存的分录行,严重影响工作效率。

    现通过二开程序,根据生产用料清单分录行物料库存数据进行处理,调拨单审核自动根据未完成调拨的生产用料清单生成调拨单

    转换插件

      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         }

    审核服务插件

      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 }
    View Code

     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]);                    }                }            }        }

  • 相关阅读:
    How to Downgrade From iPhone Firmware 2.2 to 2.1 视频教程降级iphone 2.2 到2.1
    11种网站测试软件(转) 沧海一粟
    GoF23种设计模式之行为型模式之观察者模式
    Android柳叶刀之Button之图文并茂
    GoF23种设计模式之行为型模式之迭代器模式
    某大型银行深化系统之十九:日志规范
    GoF23种设计模式之行为型模式之中介者模式
    GoF23种设计模式之行为型模式之备忘录模式
    Android血刀之CheckBox之问卷调查
    Android应用开发之MetaData之数据挖掘
  • 原文地址:https://www.cnblogs.com/your568/p/13725271.html
Copyright © 2011-2022 走看看