using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Security.Cryptography; using System.Text; namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK { [Description("预测单下推组装入库单#"), HotUpdate] public class BillConvertEventPlugInEx : AbstractConvertPlugIn { public override void AfterConvert(AfterConvertEventArgs e) { base.AfterConvert(e); if (e.Result.FindByEntityKey("FBillHead").Any()) { var billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity; var srcBillEntryId = billHead["FPSrcBillEntryId"].Long2Int(); var srcBillType = billHead["FSrcBillType"].ToString(); if (srcBillType.ToUpper().Equals("PLN_FORECAST")) { var sqlL = $@"/*dialect*/ DECLARE @EntryId int SET @EntryId = {srcBillEntryId} ;WITH #预测单数据 AS ( --套件子项 SELECT t0.FBILLNO,t0e.FID,t0e.FENTRYID,t0e.FMATERIALID ,t0e.FROWID,t0e.FPARENTROWID,t0e.FBOMID,t0e.FBOMENTRYID,t0e.FOWNERID,t0e.FOWNERTYPEID ,t0e.FPRODUCTTYPE,t0e.FSEQ,t0e.F_UHIK_TEXT8 AS '标签货号' ,t0e.F_UHIK_QTY2 AS '父项数量',t0e.F_UHIK_TEXT2 AS '标签规格_Note' ,t0e.FSTOCKORGID AS '库存组织',t0e.F_HUOHAO AS '货号' ,t0e.F_UHIK_DATE AS '标签生产日期' ,t0e.F_UHIK_LOT AS '标签批号' ,t2e.FENTRYID AS 'PEntryId' FROM T_PLN_FORECAST t0 INNER JOIN T_PLN_FORECASTENTRY t0e on t0.FID = t0e.FID AND t0e.FPRODUCTTYPE = 2 INNER JOIN T_PLN_FORECASTENTRY t2e on t2e.FROWID = t0e.FPARENTROWID WHERE 1 = 1 AND t0e.FPRODUCTTYPE = 2 AND t2e.FENTRYID = @EntryId ) SELECT t1.FNUMBER,t1_l.FNAME,t0.* ,ISNULL(t2.FQTY,0) 'FQTY' ,ISNULL(t2.F_FYL_QTY,0) 'F_FYL_QTY' ,ISNULL(t2.F_GS_QTY,0) 'F_GS_QTY' ,ISNULL(t2.F_GZQTY,0)'F_GZQTY' ,ISNULL(t2.FLOT,0) 'FLOT' ,ISNULL(t2.FLOT_TEXT,'') 'FLOT_TEXT' ,ISNULL(t2.FUNITID,0) 'FUNITID' ,ISNULL(t2.MOBIllNo,'') 'MOBIllNo' ,ISNULL(t2.MoBillType,'') 'MoBillType' ,ISNULL(t2.MoEntryId,0) 'MoEntryId' ,ISNULL(t2.MoEntrySeq,0) 'MoEntrySeq' ,ISNULL(t2.MoId,0) 'MoId' ,ISNULL(t2.生产日期,'') '生产日期' ,ISNULL(t2.有效期至,'') '有效期至' ,ROW_NUMBER() OVER(ORDER BY t0.FSEQ) RN ,ISNULL(t3.RptQty,0) 'RptQty' FROM #预测单数据 t0 INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0.FMATERIALID INNER JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052 OUTER APPLY ( SELECT t2.FBILLNO AS 'MOBIllNo',t2.FBILLTYPE AS 'MoBillType',t2.FID AS 'MoId',t2e.FENTRYID AS 'MoEntryId',t2e.FSEQ AS 'MoEntrySeq' ,t2e.F_GZQty,t2e.F_GS_QTY,t2e.F_FYL_QTY,t2e.FQTY ,t2e.FLOT,t2e.FLOT_TEXT,t2e.FUNITID ,ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE,20),'') '生产日期',ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE1,20),'') '有效期至' FROM T_PRD_MO t2 INNER JOIN T_PRD_MOENTRY t2e on t2.FID = t2e.FID INNER JOIN T_PRD_MOENTRY_A t2e_a on t2e.FENTRYID = t2e_a.FENTRYID AND t2e_a.FREQSRC = 2 WHERE 1 = 1 AND t2e.FSALEORDERENTRYSEQ = t0.FSEQ AND t2e.FSALEORDERNO = t0.FBILLNO AND t2e.FMATERIALID = t0.FMATERIALID UNION ALL SELECT t2.FBILLNO AS 'MOBIllNo',t2.FBILLTYPE AS 'MoBillType',t2.FID AS 'MoId',t2e.FENTRYID AS 'MoEntryId',t2e.FSEQ AS 'MoEntrySeq' ,t2e.F_GZQty,t2e.F_GS_QTY,t2e.F_FYL_QTY,t2e.FQTY ,t2e.FLOT,t2e.FLOT_TEXT,t2e.FUNITID ,ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE,20),'') '生产日期',ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE1,20),'') '有效期至' FROM T_PRD_MO t2 INNER JOIN T_PRD_MOENTRY t2e on t2.FID = t2e.FID INNER JOIN T_PRD_MOENTRY_A t2e_a on t2e.FENTRYID = t2e_a.FENTRYID WHERE 1 = 1 AND t2e.FPackSrcBillNo = t0.FBILLNO AND t2e.FFPackSrcSeq = t0.FSEQ AND t2e.FPackSrcType = 1 AND t2e.FMATERIALID = t0.FMATERIALID ) t2 OUTER APPLY ( SELECT t3e_lk.FSID,SUM(t3e_a.FBASESTOCKINQUASELQTY) RptQty FROM T_PRD_MORPT t3 INNER JOIN T_PRD_MORPTENTRY t3e on t3.FID = t3e.FID INNER JOIN T_PRD_MORPTENTRY_A t3e_a on t3e_a.FENTRYID = t3e.FENTRYID INNER JOIN T_PRD_MORPTENTRY_LK t3e_lk on t3e_lk.FENTRYID = t3e.FENTRYID AND t3e_lk.FSTABLENAME = 'T_PRD_MOENTRY' WHERE t3e_lk.FSID = t2.MoEntryId GROUP BY t3e_lk.FSID ) t3 "; var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); if (dataList != null && dataList.Any()) { var entrys = billHead["FEntity"] as DynamicObjectCollection; var entityType = entrys[0].DynamicObjectType; //#! 物料 var matFld = e.TargetBusinessInfo.GetField("FMaterialId") as BaseDataField; //#! 货主 var ownerFId = e.TargetBusinessInfo.GetField("FOwnerId") as BaseDataField; //#! 批号 var lotFId = e.TargetBusinessInfo.GetField("FLot") as BaseDataField; //#! 单据类型 var moBillTypeFId = e.TargetBusinessInfo.GetField("FMoBillTypeId") as BaseDataField; //#! 计量单位 var unitFId = e.TargetBusinessInfo.GetField("FUnitID") as BaseDataField; var PStockOrgObj = billHead["FPStockOrgId"] as DynamicObject; var PStockOrgId_Id = billHead["FPStockOrgId_Id"].Long2Int(); //仓库 var stockFid = e.TargetBusinessInfo.GetField("FStockId") as BaseDataField; entrys.Clear(); foreach (var item in dataList) { var entry = new DynamicObject(entityType); entry["Seq"] = item["RN"]; //# 物料 var matId = item["FMATERIALID"].Long2Int(); entry["FMaterialId_Id"] = matId; var matObj = BusinessDataServiceHelper.LoadSingle(this.Context, matId, matFld.RefFormDynamicObjectType); entry["FMaterialId"] = matObj; var materialStock = (matObj["MaterialStock"] as DynamicObjectCollection)[0]; var stockId = materialStock["StockId_Id"].Long2Int(); if (stockId > 0) { entry["FStockId_Id"] = stockId; var stockObj = BusinessDataServiceHelper.LoadSingle(this.Context, stockId, stockFid.RefFormDynamicObjectType); entry["FStockId"] = stockObj; } //# 产品类型 entry["FProductType"] = item["FPRODUCTTYPE"]; //# 来源单据 entry["FSrcBillId"] = item["FID"]; entry["FSrcBillEntryId"] = item["FENTRYID"]; //# 生产订单数据 var moBillTypeId = item["MoBillType"]; if (!moBillTypeId.IsNullOrEmptyOrWhiteSpace()) { var moBillTypeObj = BusinessDataServiceHelper.LoadSingle(this.Context, moBillTypeId, moBillTypeFId.RefFormDynamicObjectType); entry["FMoBillTypeId_Id"] = moBillTypeId; entry["FMoBillTypeId"] = moBillTypeObj; entry["FMoId"] = item["MoId"]; entry["FMOBillNo"] = item["MOBIllNo"]; } entry["FMoEntryId"] = item["MoEntryId"]; entry["FMoEntrySeq"] = item["MoEntrySeq"]; //# 货主类型 entry["FOwnerTypeId"] = item["FOWNERTYPEID"]; //# 货主 var ownerId = item["FOWNERID"].Long2Int(); if (ownerId > 0) { var ownerObj = BusinessDataServiceHelper.LoadSingle(this.Context, ownerId, ownerFId.RefFormDynamicObjectType); entry["FOwnerId_Id"] = ownerId; entry["FOwnerId"] = ownerObj; } //# 批号 var lotId = item["FLOT"].Long2Int(); if (lotId > 0) { var lotObj = BusinessDataServiceHelper.LoadSingle(this.Context, lotId, lotFId.RefFormDynamicObjectType); entry["FLot_Id"] = lotId; entry["FLot"] = lotObj; entry["FLot_Text"] = item["FLOT_TEXT"]; } //# 计量单位 var unitId = item["FUNITID"].Long2Int(); if (unitId > 0) { var unitObj = BusinessDataServiceHelper.LoadSingle(this.Context, unitId, unitFId.RefFormDynamicObjectType); entry["FUnitID_Id"] = unitId; entry["FUnitID"] = unitObj; } //# 库存组织 entry["FStockOrgId_Id"] = PStockOrgId_Id; entry["FStockOrgId"] = PStockOrgObj; entry["FLabHuoHao"] = item["标签货号"]; entry["FGZLQty"] = item["F_GZQty"]; entry["FLabSpec"] = item["标签规格_Note"]; entry["FZGSQty"] = item["F_GS_QTY"]; entry["FHuoHao"] = item["货号"]; if (item["生产日期"].ToString() != string.Empty) entry["FProducedDate"] = item["生产日期"]; if (item["有效期至"].ToString() != string.Empty) entry["FExpiryDate"] = item["有效期至"]; //# entry[""] = item["标签生产日期"] //# 富余量 entry["FFYLQty"] = item["F_FYL_QTY"]; entry["FQty"] = item["FQTY"]; //entry["FRptQty"] = item["FQTY"]; entry["FRptQty"] = item["RptQty"]; entry["FNoInStockQty"] = item["FQTY"]; entrys.Add(entry); } } } } } public override void OnParseFilterOptions(ParseFilterOptionsEventArgs e) { base.OnParseFilterOptions(e); } public override void OnInitVariable(InitVariableEventArgs e) { base.OnInitVariable(e); } public override void OnQueryBuilderParemeter(QueryBuilderParemeterEventArgs e) { base.OnQueryBuilderParemeter(e); } public override void OnBeforeGetSourceData(BeforeGetSourceDataEventArgs e) { base.OnBeforeGetSourceData(e); } public override void OnInSelectedRow(InSelectedRowEventArgs e) { base.OnInSelectedRow(e); } public override void OnBeforeFieldMapping(BeforeFieldMappingEventArgs e) { base.OnBeforeFieldMapping(e); } public override void OnFieldMapping(FieldMappingEventArgs e) { base.OnFieldMapping(e); } public override void OnAfterFieldMapping(AfterFieldMappingEventArgs e) { base.OnAfterFieldMapping(e); } public override void OnCreateLink(CreateLinkEventArgs e) { base.OnCreateLink(e); } public override void OnSetLinkAmount(SetLinkAmountEventArgs e) { base.OnSetLinkAmount(e); } public override void OnAfterCreateLink(CreateLinkEventArgs e) { base.OnAfterCreateLink(e); } public override void OnGetSourceData(GetSourceDataEventArgs e) { base.OnGetSourceData(e); } public override void OnCreateTarget(CreateTargetEventArgs e) { base.OnCreateTarget(e); } public override void OnGetDrawSourceData(GetDrawSourceDataEventArgs e) { base.OnGetDrawSourceData(e); } public override void OnCreateDrawTarget(CreateDrawTargetEventArgs e) { base.OnCreateDrawTarget(e); } public override void OnBeforeGroupBy(BeforeGroupByEventArgs e) { base.OnBeforeGroupBy(e); } public override void OnGetConvertBusinessService(ConvertBusinessServiceEventArgs e) { base.OnGetConvertBusinessService(e); } public override void OnAfterConvertBusinessService(AfterConvertBusinessServiceEventArgs e) { base.OnAfterConvertBusinessService(e); } public override void OnBeforeTailDiff(BeforeTailDiffEventArgs e) { base.OnBeforeTailDiff(e); } public override void OnAfterTailDiff(AfterTailDiffEventArgs e) { base.OnAfterTailDiff(e); } } }