/// <summary> /// 目标单单据构建完毕,且已经创建好与源单的关联关系之后,触发此事件 /// </summary> /// <param name="e"></param> /// <remarks> /// 本事件的时机,刚好能够符合需求, /// 而AfterConvert事件,则在执行表单服务策略之后 /// </remarks> public override void OnAfterCreateLink(CreateLinkEventArgs e) { // 目标单单据体元数据 Entity entity = e.TargetBusinessInfo.GetEntity("FEntity"); Entity es = e.SourceBusinessInfo.GetEntity("FSaleOrderEntry"); // 读取已经生成的付款单 ExtendedDataEntity[] bills = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"); // 定义一个集合,存储新拆分出来的单据体行 List <ExtendedDataEntity> newRows = new List <ExtendedDataEntity>(); // 对目标单据进行循环 foreach (var bill in bills) { // 取单据体集合 DynamicObjectCollection rowObjs = entity.DynamicProperty.GetValue(bill.DataEntity) as DynamicObjectCollection; // 对单据体进行循环:从后往前循环,新拆分的行,避开循环 int rowCount = rowObjs.Count; int newRowCount = 1; DateTime CreateDate = Convert.ToDateTime(bill["CreateDate"]); for (int i = rowCount - 1; i >= 0; i--) { DynamicObject rowObj = rowObjs[i]; //获取ID为149808的供应商(内蒙) DynamicObject[] superIDs = BusinessDataServiceHelper.Load(this.Context, new object[] { 149808 }, (MetaDataServiceHelper.Load(this.Context, "BD_Supplier") as FormMetadata).BusinessInfo.GetDynamicObjectType()); rowObj["SuggestSupplierId"] = superIDs[0]; rowObj["SuggestSupplierId_Id"] = 149808; rowObj["SupplierId"] = superIDs[0]; rowObj["SupplierId_Id"] = 149808; long MaterialId = Convert.ToInt64(rowObj["MaterialId_Id"]); long SupplierId = 149808; DynamicObject auxprop = rowObj["AuxpropId"] as DynamicObject; string auxpropId = ""; if (auxprop != null) { auxpropId = Convert.ToString(auxprop["F100001_Id"]); } DynamicObjectCollection prices = ServiceHelper.YDLCommServiceHelper.GetAuxpropPriceListId(this.Context, MaterialId, auxpropId, SupplierId, CreateDate); if (prices.Count > 0) { rowObj["FTAXPRICE"] = prices[0][2]; rowObj["EvaluatePrice"] = prices[0][1]; rowObj["FTAXRATE"] = 17; } } } }
/// <summary> /// 目标单单据构建完毕,且已经创建好与源单的关联关系之后,触发此事件 /// </summary> /// <param name="e"></param> /// <remarks> /// 本事件的时机,刚好能够符合需求, /// 而AfterConvert事件,则在执行表单服务策略之后 /// </remarks> public override void OnAfterCreateLink(CreateLinkEventArgs e) { // 目标单单据体元数据 Entity entity = e.TargetBusinessInfo.GetEntity("FSaleOrderEntry"); //源单单单据体元数据 //Entity es = e.SourceBusinessInfo.GetEntity("FSaleOrderEntry"); // 读取已经生成的销售订单 ExtendedDataEntity[] bills = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"); // 定义一个集合,存储新拆分出来的单据体行 List <ExtendedDataEntity> newRows = new List <ExtendedDataEntity>(); // 对目标单据进行循环 foreach (var bill in bills) { // 取单据体集合 DynamicObjectCollection rowObjs = entity.DynamicProperty.GetValue(bill.DataEntity) as DynamicObjectCollection; // 对单据体进行循环:从后往前循环,新拆分的行,避开循环 int rowCount = rowObjs.Count; for (int i = rowCount - 1; i >= 0; i--) { DynamicObject rowObj = rowObjs[i]; DynamicObject FMaterialId = rowObj["MaterialId"] as DynamicObject; DynamicObjectCollection MaterialBase = FMaterialId["MaterialBase"] as DynamicObjectCollection; DynamicObject FCategoryID = MaterialBase[0]["CategoryID"] as DynamicObject; string FCategoryname = Convert.ToString(FCategoryID["Name"]); if (FCategoryname == "产成品") { //获取ID为100440的仓库 DynamicObject[] STOCKIDs = BusinessDataServiceHelper.Load(this.Context, new object[] { 100440 }, (MetaDataServiceHelper.Load(this.Context, "BD_STOCK") as FormMetadata).BusinessInfo.GetDynamicObjectType()); rowObj["FSTOCKID_MX"] = STOCKIDs[0]; } if (FCategoryname == "半成品") { //获取ID为100424的仓库 DynamicObject[] STOCKIDs = BusinessDataServiceHelper.Load(this.Context, new object[] { 100424 }, (MetaDataServiceHelper.Load(this.Context, "BD_STOCK") as FormMetadata).BusinessInfo.GetDynamicObjectType()); rowObj["FSTOCKID_MX"] = STOCKIDs[0]; } } } }
public override void OnAfterCreateLink(CreateLinkEventArgs e) { base.OnAfterCreateLink(e); OperateOption Option = base.Option; List <decimal> amount = new List <decimal>(); if (Option.TryGetVariableValue <List <decimal> >("OutStockAmount", out amount)) { List <int> srcbillseq = Option.GetVariableValue <List <int> >("srcbillseq"); DateTime FDATE = Option.GetVariableValue <DateTime>("FDATE"); (e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"))[0].DataEntity["Date"] = FDATE; for (int i = 0; i < e.TargetExtendedDataEntities.FindByEntityKey("FEntity").Count(); i++) { (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["SALBASEQTY"] = amount[i]; (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["BaseUnitQty"] = amount[i]; (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["PRICEBASEQTY"] = amount[i]; (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["Fsrcbillseq"] = srcbillseq[i]; } } }
/// <summary> /// 目标单单据构建完毕,且已经创建好与源单的关联关系之后,触发此事件 /// </summary> /// <param name="e"></param> /// <remarks> /// 本事件的时机,刚好能够符合需求, /// 而AfterConvert事件,则在执行表单服务策略之后 /// </remarks> public override void OnAfterCreateLink(CreateLinkEventArgs e) { // 目标单单据体元数据 Entity entity = e.TargetBusinessInfo.GetEntity("FBillEntry"); //Entity es = e.SourceBusinessInfo.GetEntity("FEntity"); // 读取已经生成的付款单 ExtendedDataEntity[] bills = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"); foreach (var bill in bills) { DynamicObjectCollection rowObjs = entity.DynamicProperty.GetValue(bill.DataEntity) as DynamicObjectCollection; foreach (var rowObj in rowObjs) { DynamicObject Material = rowObj["MaterialId"] as DynamicObject; DynamicObject AuxUnit = Material["AuxUnitID"] as DynamicObject; rowObj["SecUnitId"] = AuxUnit; rowObj["ExtAuxUnitId"] = AuxUnit; } } }
/// <summary> /// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件 /// </summary> /// <param name="e"></param> public override void OnAfterCreateLink(CreateLinkEventArgs e) { base.OnAfterCreateLink(e); //预先获取一些必要的元数据,后续代码要用到 //目标单第一单据体 Entity mainEntity = e.TargetBusinessInfo.GetEntity("FEntityDetail"); // 获取生成的全部下游单据 ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"); // 对下游单据,逐张单据进行处理 foreach (var item in billDataEntitys) { DynamicObject dataObject = item.DataEntity; // 定义一个集合,用于收集本单对应的源单内码 HashSet <long> srcBillIds = new HashSet <long>(); // 开始到主单据体中,读取关联的源单内码 DynamicObjectCollection mainEntryRows = mainEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; //获取销售价目表XSJMB0002内容 Dictionary <long, double> disCounts = GetDiscounts(base.Context); //遍历应收单,通过销售折扣计算折后的含税单价赋值。 foreach (DynamicObject mainEntryRow in mainEntryRows) { double discount = 0.0; if (disCounts.TryGetValue(Convert.ToInt64(mainEntryRow["MATERIALID_Id"]), out discount)) { mainEntryRow["TaxPrice"] = discount; } } } }
/// <summary> /// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件 /// </summary> /// <param name="e"></param> public override void OnAfterCreateLink(CreateLinkEventArgs e) { // 预先获取一些必要的元数据,后续代码要用到: // 源单第二单据体,执行部门 Entity srcSecondEntity = e.SourceBusinessInfo.GetEntity("F_PEJK_ExecuteDept"); // 目标单第一单据体,产品明细 //Entity mainEntity = e.TargetBusinessInfo.GetEntity("FEntity"); // 目标单第二单据体,执行部门 Entity secondEntity = e.TargetBusinessInfo.GetEntity("F_PEJK_OppExecuteDept"); // 目标单关联子单据体 //Entity linkEntity = null; //Form form = e.TargetBusinessInfo.GetForm(); //if (form.LinkSet != null // && form.LinkSet.LinkEntitys != null // && form.LinkSet.LinkEntitys.Count != 0) //{ // linkEntity = e.TargetBusinessInfo.GetEntity( // form.LinkSet.LinkEntitys[0].Key); //} //if (linkEntity == null) //{ // return; //} // 获取生成的全部下游单据 ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"); // 对下游单据,逐张单据进行处理 //foreach (var item in billDataEntitys) //{ // DynamicObject dataObject = item.DataEntity; // // 定义一个集合,用于收集本单对应的源单内码 // HashSet<long> srcBillIds = new HashSet<long>(); // //开始到主单据体中,读取关联的源单内码 // DynamicObjectCollection mainEntryRows = // mainEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; // foreach (var mainEntityRow in mainEntryRows) // { // DynamicObjectCollection linkRows = // linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection; // foreach (var linkRow in linkRows) // { // long srcBillId = Convert.ToInt64(linkRow["SBillId"]); // if (srcBillId != 0 // && srcBillIds.Contains(srcBillId) == false) // { // srcBillIds.Add(srcBillId); // } // } // } //DynamicObject linkRows = // linkEntity.DynamicProperty.GetValue(dataObject) as DynamicObject; // long srcBillId = Convert.ToInt64(linkRows["SBillId"]); // if (srcBillId != 0 // && srcBillIds.Contains(srcBillId) == false) // { // srcBillIds.Add(srcBillId); // } //定义一个集合,用于收集本单对应的源单内码 HashSet <long> srcBillIds = new HashSet <long>(); foreach (var item in billDataEntitys) { DynamicObject dataObject = item.DataEntity; if (Convert.ToString(dataObject["FSourceBillNo"]) != null && Convert.ToString(dataObject["FSourceBillNo"]) != " ") { string strSql = string.Format(@"/*dialect*/select FID from T_CRM_Clue where FBILLNO = '{0}'", Convert.ToString(dataObject["FSourceBillNo"])); long srcBillId = DBUtils.ExecuteScalar <long>(this.Context, strSql, 0, null); if (srcBillId != 0 && srcBillIds.Contains(srcBillId) == false) { srcBillIds.Add(srcBillId); } if (srcBillIds.Count == 0) { continue; } // 开始加载源单第二单据体上的字段 // 确定需要加载的源单字段(仅加载需要携带的字段) List <SelectorItemInfo> selector = new List <SelectorItemInfo>(); selector.Add(new SelectorItemInfo("F_PEJK_ExecuteDeptId")); // TODO: 继续添加其他需要携带的字段,示例代码略 // 设置过滤条件 string filter = string.Format(" {0} IN ({1}) ", e.SourceBusinessInfo.GetForm().PkFieldName, string.Join(",", srcBillIds)); OQLFilter filterObj = OQLFilter.CreateHeadEntityFilter(filter); // 读取源单 IViewService viewService = ServiceHelper.GetService <IViewService>(); var srcBillObjs = viewService.Load(this.Context, e.SourceBusinessInfo.GetForm().Id, selector, filterObj); // 开始把源单单据体数据,填写到目标单上 DynamicObjectCollection secondEntryRows = secondEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; secondEntryRows.Clear(); // 删除空行 foreach (var srcBillObj in srcBillObjs) { DynamicObjectCollection srcEntryRows = srcSecondEntity.DynamicProperty.GetValue(srcBillObj) as DynamicObjectCollection; foreach (var srcEntryRow in srcEntryRows) { // 目标单添加新行,并接受源单字段值 DynamicObject newRow = new DynamicObject(secondEntity.DynamicObjectType); secondEntryRows.Add(newRow); // 填写字段值 newRow["F_PEJK_ExecuteDeptId"] = srcEntryRow["F_PEJK_ExecuteDeptId"]; // TODO: 逐个填写其他字段值,示例代码略 } } } //string strSql = string.Format(@"/*dialect*/select fsbillid from T_CRM_Opportunity_LK where fid = {0}", Convert.ToInt64(dataObject["id"])); } }
/// <summary> /// 目标单单据构建完毕,且已经创建好与源单的关联关系之后,触发此事件 /// </summary> /// <param name="e"></param> /// <remarks> /// 本事件的时机,刚好能够符合需求, /// 而AfterConvert事件,则在执行表单服务策略之后 /// </remarks> public override void OnAfterCreateLink(CreateLinkEventArgs e) { // 目标单单据体元数据 Entity entity = e.TargetBusinessInfo.GetEntity("FRefundBillSrcEntity"); Entity es = e.SourceBusinessInfo.GetEntity("FEntity"); // 读取已经生成的付款退款单 ExtendedDataEntity[] bills = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"); // 定义一个集合,存储新拆分出来的单据体行 List <ExtendedDataEntity> newRows = new List <ExtendedDataEntity>(); // 对目标单据进行循环 foreach (var bill in bills) { // 取单据体集合 DynamicObjectCollection rowObjs = entity.DynamicProperty.GetValue(bill.DataEntity) as DynamicObjectCollection; // 对单据体进行循环:从后往前循环,新拆分的行,避开循环 int rowCount = rowObjs.Count; int newRowCount = 1; for (int i = rowCount - 1; i >= 0; i--) { DynamicObject rowObj = rowObjs[i]; double F_JNRoadAmount = Convert.ToDouble(rowObj["F_JNRoadAmount"]); double PLANPAYAMOUNT = Convert.ToDouble(rowObj["PLANREFUNDAMOUNT"]); double AFTTAXTOTALAMOUNT = Convert.ToDouble(rowObj["AFTTAXTOTALAMOUNT"]); double F_JNTAXAmount = Convert.ToDouble(rowObj["F_JNTAXAmount"]); DynamicObject newRowObj = null; rowObj["PLANREFUNDAMOUNT"] = PLANPAYAMOUNT - F_JNRoadAmount - F_JNTAXAmount; rowObj["AFTTAXTOTALAMOUNT"] = AFTTAXTOTALAMOUNT - F_JNRoadAmount - F_JNTAXAmount; rowObj["REALREFUNDAMOUNT"] = rowObj["PLANREFUNDAMOUNT"]; rowObj["F_JNRoadAmount"] = 0; // 根据规则进行拆分: // 示例代码略过拆分规则,强制对每行进行拆分 // 通过复制的方式,产生新行:确保字段值、关联关系与原行一致 if (F_JNRoadAmount > 0) { var SRCCOSTID = rowObj["FSRCCOSTID"] as DynamicObject; DynamicObject SRCCOST = (DynamicObject)SRCCOSTID.Clone(true, false); newRowObj = (DynamicObject)rowObj.Clone(false, true); //DynamicObject newRowObj = rowObj.Clone(; //DynamicObject newRowObj = (DynamicObject)rowObj.Clone(true, true); newRowObj["PLANREFUNDAMOUNT"] = F_JNRoadAmount; newRowObj["AFTTAXTOTALAMOUNT"] = F_JNRoadAmount; newRowObj["F_JNRoadAmount"] = 0; newRowObj["REALREFUNDAMOUNT"] = F_JNRoadAmount; //newRowObj["Seq"] = i + 1; QueryBuilderParemeter queryParam = new QueryBuilderParemeter(); queryParam.FormId = "BD_Expense"; queryParam.SelectItems.Add(new SelectorItemInfo("FMasterId")); queryParam.SelectItems.Add(new SelectorItemInfo("FNumber")); queryParam.SelectItems.Add(new SelectorItemInfo("FName")); queryParam.FilterClauseWihtKey = string.Format(" FNumber = '{0}' ", "FYXM23"); var expense = QueryServiceHelper.GetDynamicObjectCollection(this.Context, queryParam); newRowObj["FSRCCOSTID_Id"] = expense[0]["FMasterId"]; SRCCOST["Id"] = expense[0]["FMasterId"]; SRCCOST["msterId"] = expense[0]["FMasterId"]; SRCCOST["Name"] = expense[0]["FName"]; SRCCOST["Number"] = expense[0]["FNumber"]; newRowObj["FSRCCOSTID"] = SRCCOST; // 把新行,插入到单据中,排在当前行之后 rowObjs.Insert(i + 1, newRowObj); //newRowObj["SRCCOSTID_Id"] = 131120; } if (F_JNTAXAmount > 0) { var SRCCOSTID = rowObj["FSRCCOSTID"] as DynamicObject; DynamicObject SRCCOST = (DynamicObject)SRCCOSTID.Clone(true, false); newRowObj = (DynamicObject)rowObj.Clone(false, true); //DynamicObject newRowObj = rowObj.Clone(; //DynamicObject newRowObj = (DynamicObject)rowObj.Clone(true, true); newRowObj["PLANREFUNDAMOUNT"] = F_JNTAXAmount; newRowObj["AFTTAXTOTALAMOUNT"] = F_JNTAXAmount; newRowObj["F_JNRoadAmount"] = 0; newRowObj["REALREFUNDAMOUNT"] = F_JNTAXAmount; //newRowObj["Seq"] = i + 1; QueryBuilderParemeter queryParam = new QueryBuilderParemeter(); queryParam.FormId = "BD_Expense"; queryParam.SelectItems.Add(new SelectorItemInfo("FMasterId")); queryParam.SelectItems.Add(new SelectorItemInfo("FNumber")); queryParam.SelectItems.Add(new SelectorItemInfo("FName")); queryParam.FilterClauseWihtKey = string.Format(" FNumber = '{0}' ", "FYXM98"); var expense = QueryServiceHelper.GetDynamicObjectCollection(this.Context, queryParam); newRowObj["FSRCCOSTID_Id"] = expense[0]["FMasterId"]; SRCCOST["Id"] = expense[0]["FMasterId"]; SRCCOST["msterId"] = expense[0]["FMasterId"]; SRCCOST["Name"] = expense[0]["FName"]; SRCCOST["Number"] = expense[0]["FNumber"]; newRowObj["FSRCCOSTID"] = SRCCOST; // 把新行,插入到单据中,排在当前行之后 rowObjs.Insert(i + 1, newRowObj); //newRowObj["SRCCOSTID_Id"] = 131120; } if (newRowObj != null) { // 为新行创建一个ExtendedDataEntity对象,表单服务策略需要此对象 ExtendedDataEntity newRow = new ExtendedDataEntity( newRowObj, bill.DataEntityIndex, rowCount + newRowCount); newRows.Add(newRow); newRowCount++; } } } // 把新拆分出来的单据体行,加入到下推结果中 // 特别说明:如果去掉此语句,新拆分的行,不会执行表单服务策略 e.TargetExtendedDataEntities.AddExtendedDataEntities("FEntity", newRows.ToArray()); }
public override void OnCreateLink(CreateLinkEventArgs e) { //不创建Link表数据。 e.Cancel = true; }
/// <summary> /// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件 /// </summary> /// <param name="e"></param> public override void OnAfterCreateLink(CreateLinkEventArgs e) { // 预先获取一些必要的元数据,后续代码要用到: // 源单第二单据体 Entity srcSecondEntity = e.SourceBusinessInfo.GetEntity("F_PAEZ_OtherEntity"); // 目标单第一单据体 Entity destMainEntity = e.TargetBusinessInfo.GetEntity("FEntity"); // 目标单第二单据体 Entity destSecondEntity = e.TargetBusinessInfo.GetEntity("F_PAEZ_OtherEntity"); // 目标单关联子单据体 Entity linkEntity = null; Form form = e.TargetBusinessInfo.GetForm(); if (form.LinkSet != null && form.LinkSet.LinkEntitys != null && form.LinkSet.LinkEntitys.Count != 0) { linkEntity = e.TargetBusinessInfo.GetEntity( form.LinkSet.LinkEntitys[0].Key); } if (linkEntity == null) { return; } // 获取生成的全部下游单据 ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"); // 对下游单据,逐张单据进行处理 foreach (var item in billDataEntitys) { DynamicObject destBillObject = item.DataEntity; // 定义一个集合,用于收集本单对应的源单内码 HashSet <long> srcBillIds = new HashSet <long>(); // 开始到主单据体中,读取关联的源单内码 DynamicObjectCollection destMainEntryRows = destMainEntity.DynamicProperty.GetValue(destBillObject) as DynamicObjectCollection; foreach (var mainEntityRow in destMainEntryRows) { DynamicObjectCollection linkRows = linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection; foreach (var linkRow in linkRows) { long srcBillId = Convert.ToInt64(linkRow["SBillId"]); if (srcBillId != 0 && srcBillIds.Contains(srcBillId) == false) { srcBillIds.Add(srcBillId); } } } if (srcBillIds.Count == 0) { continue; } // 开始加载源单第二单据体上的字段 // 确定需要加载的源单字段(仅加载需要携带的字段) List <SelectorItemInfo> selector = new List <SelectorItemInfo>(); selector.Add(new SelectorItemInfo("F_PAEZ_Desc")); // TODO: 继续添加其他需要携带的字段,示例代码略 // 设置过滤条件 string filter = string.Format(" {0} IN ({1}) ", e.SourceBusinessInfo.GetForm().PkFieldName, string.Join(",", srcBillIds)); OQLFilter filterObj = OQLFilter.CreateHeadEntityFilter(filter); // 读取源单 IViewService viewService = ServiceHelper.GetService <IViewService>(); var srcBillObjs = viewService.Load(this.Context, e.SourceBusinessInfo.GetForm().Id, selector, filterObj); // 开始把源单单据体数据,填写到目标单上 DynamicObjectCollection destSecondEntryRows = destSecondEntity.DynamicProperty.GetValue(destBillObject) as DynamicObjectCollection; destSecondEntryRows.Clear(); // 删除空行 foreach (var srcBillObj in srcBillObjs) { DynamicObjectCollection srcEntryRows = srcSecondEntity.DynamicProperty.GetValue(srcBillObj) as DynamicObjectCollection; foreach (var srcEntryRow in srcEntryRows) { // 目标单添加新行,并接受源单字段值 DynamicObject newRow = new DynamicObject(destSecondEntity.DynamicObjectType); destSecondEntryRows.Add(newRow); // 填写字段值 newRow["F_PAEZ_Desc"] = srcEntryRow["F_PAEZ_Desc"]; // TODO: 逐个填写其他字段值,示例代码略 } } } }
/// <summary> /// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件 /// </summary> /// <param name="e"></param> public override void OnAfterCreateLink(CreateLinkEventArgs e) { base.OnAfterCreateLink(e); //预先获取一些必要的元数据,后续代码要用到 //源单第一单据体 Entity srcFirstEntity = e.SourceBusinessInfo.GetEntity("FEntity"); //目标单第一单据体 Entity mainEntity = e.TargetBusinessInfo.GetEntity("FEntityDetail"); // 目标单关联子单据体 Entity linkEntity = null; Form form = e.TargetBusinessInfo.GetForm(); if (form.LinkSet != null && form.LinkSet.LinkEntitys != null && form.LinkSet.LinkEntitys.Count != 0) { linkEntity = e.TargetBusinessInfo.GetEntity( form.LinkSet.LinkEntitys[0].Key); } if (linkEntity == null) { return; } // 获取生成的全部下游单据 ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"); // 对下游单据,逐张单据进行处理 foreach (var item in billDataEntitys) { DynamicObject dataObject = item.DataEntity; // 定义一个集合,用于收集本单对应的源单内码 HashSet <long> srcBillIds = new HashSet <long>(); // 开始到主单据体中,读取关联的源单内码 DynamicObjectCollection mainEntryRows = mainEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; DynamicObject mainEntityRow = mainEntryRows[0]; DynamicObjectCollection linkRows = linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection; long srcBillId = Convert.ToInt64(linkRows[0]["SBillId"]); if (srcBillId != 0 && srcBillIds.Contains(srcBillId) == false) { srcBillIds.Add(srcBillId); } if (srcBillIds.Count == 0) { continue; } #region 隐藏 //foreach (var mainEntityRow in mainEntryRows) //{ // DynamicObjectCollection linkRows = // linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection; // foreach (var linkRow in linkRows) // { // long srcBillId = Convert.ToInt64(linkRow["SBillId"]); // if (srcBillId != 0 // && srcBillIds.Contains(srcBillId) == false) // { // srcBillIds.Add(srcBillId); // } // } //} //if (srcBillIds.Count == 0) //{ // continue; //} #endregion // 开始加载源单第二单据体上的字段 // 确定需要加载的源单字段(仅加载需要携带的字段) List <SelectorItemInfo> selector = new List <SelectorItemInfo>(); selector.Add(new SelectorItemInfo("FDate")); //日期 selector.Add(new SelectorItemInfo("FCustomerID")); //客户 selector.Add(new SelectorItemInfo("FSaleDeptID")); //销售部门 selector.Add(new SelectorItemInfo("FMaterialID")); //物料 selector.Add(new SelectorItemInfo("FTaxPrice")); //含税单价 // TODO: 继续添加其他需要携带的字段,示例代码略 // 设置过滤条件 string filter = string.Format(" {0} IN ({1}) ", e.SourceBusinessInfo.GetForm().PkFieldName, string.Join(",", srcBillIds)); OQLFilter filterObj = OQLFilter.CreateHeadEntityFilter(filter); // 读取源单 Kingdee.BOS.Contracts.IViewService viewService = Kingdee.BOS.App.ServiceHelper.GetService <Kingdee.BOS.Contracts.IViewService>(); var srcBillObjs = viewService.Load(this.Context, e.SourceBusinessInfo.GetForm().Id, selector, filterObj); #region 隐藏 // 开始把源单单据体数据,填写到目标单上 //DynamicObjectCollection secondEntryRows = // secondEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; //secondEntryRows.Clear(); // 删除空行 #endregion foreach (DynamicObject srcBillObj in srcBillObjs) { DynamicObject dept = srcBillObj["SaleDeptID"] as DynamicObject; //销售部门 DynamicObject Cust = srcBillObj["CustomerID"] as DynamicObject; //客户 //bool isRight = !Cust["FKHBD"].Equals("1") && !Cust["FKHBD"].Equals("2") ? Convert.ToInt32(Cust["FSAP"]) == 2 : Convert.ToInt32(Cust["FKHBD"]) == 1 ? true: Convert.ToInt32(Cust["FKHBD"]) == 2 ? true:false; //补差、丢货或者客户结算方式是现金 bool isRight = (Cust["FKHBD"].Equals("1") || Cust["FKHBD"].Equals("2")) ? true : Convert.ToInt32(Cust["FSAP"]) == 2 ? true : false; //if ((Convert.ToInt32(Cust["FSAP"]) == 2 || Convert.ToInt32(Cust["FKHBD"]) == 1 || Convert.ToInt32(Cust["FKHBD"]) == 2) && Convert.ToInt32(dept["FDEPTTYPE"]) == 4) if (isRight && Convert.ToInt32(dept["FDEPTTYPE"]) == 4)//部门类别外埠 { //外埠现金客户执行销售政策折扣 Dictionary <string, double> disCounts = TLMBServiceHelper.GetDiscounts(base.Context, Convert.ToInt64(dept["id"]), Convert.ToDateTime(srcBillObj["Date"])); //遍历应收单,通过销售折扣计算折后的含税单价赋值。 foreach (DynamicObject mainEntryRow in mainEntryRows) { double discount = 0.0; if (disCounts.TryGetValue(Convert.ToString(((DynamicObject)mainEntryRow["MATERIALID"])["FWLFL"]), out discount)) { double ZK = Convert.ToDouble(disCounts["" + Convert.ToString(((DynamicObject)mainEntryRow["MATERIALID"])["FWLFL"]) + ""]); mainEntryRow["TaxPrice"] = Convert.ToDouble(mainEntryRow["TaxPrice"]) * ZK; mainEntryRow["F_PAEZ_DisCount"] = ZK; } } } //DynamicObjectCollection srcEntryRows = // srcSecondEntity.DynamicProperty.GetValue(srcBillObj) as DynamicObjectCollection; //foreach (var srcEntryRow in srcEntryRows) //{ // // 目标单添加新行,并接受源单字段值 // DynamicObject newRow = new DynamicObject(secondEntity.DynamicObjectType); // secondEntryRows.Add(newRow); // // 填写字段值 // newRow["F_JD_Text"] = srcEntryRow["F_JD_Text"]; // // TODO: 逐个填写其他字段值,示例代码略 //} } } }
public override void OnAfterCreateLink(CreateLinkEventArgs e) { }
public override void OnAfterCreateLink(CreateLinkEventArgs e) { base.OnAfterCreateLink(e); //源单 Entity srcFEntity = e.SourceBusinessInfo.GetEntity("FEntity"); Entity srcFEntityBPR = e.SourceBusinessInfo.GetEntity("FEntityBPR"); Entity srcFEntityM = e.SourceBusinessInfo.GetEntity("FEntityM"); //Entity srcFEntityHD = e.SourceBusinessInfo.GetEntity("FEntityHD"); //目标单 Entity tgtFEntity = e.TargetBusinessInfo.GetEntity("FEntity"); Entity tgtFEntityBPR = e.TargetBusinessInfo.GetEntity("FEntityBPR"); Entity tgtFEntityM = e.TargetBusinessInfo.GetEntity("FEntityM"); //Entity tgtFEntityHD = e.TargetBusinessInfo.GetEntity("FEntityHD"); var billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"); foreach (var item in billDataEntitys) { DynamicObject dataObject = item.DataEntity; string sql = string.Format("select * from ora_CRM_Contract where FBillNo='{0}'", dataObject["FNicheID"].ToString()); var pkIDs = CZDB_GetData(sql); if (pkIDs.Count <= 0) { continue; } string FID = pkIDs[0]["FID"].ToString(); //加载源单数据 IViewService viewService = ServiceHelper.GetService <IViewService>(); sql = string.Format("select FEntryID from ora_CRM_ContractEntry where FID='{0}'", FID); var srcFEntityEIDs = CZDB_GetData(sql); if (srcFEntityEIDs.Count > 0) { object[] objs = new object[srcFEntityEIDs.Count]; for (int i = 0; i < srcFEntityEIDs.Count; i++) { objs[i] = srcFEntityEIDs[i]["FEntryID"].ToString(); } var srcFEntityBillObjs = viewService.Load(this.Context, objs, srcFEntity.DynamicObjectType); // 开始把源单单据体数据,填写到目标单上 DynamicObjectCollection tgtFEntityRows = tgtFEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; tgtFEntityRows.Clear(); foreach (var srcRow in srcFEntityBillObjs) { DynamicObject newRow = new DynamicObject(tgtFEntity.DynamicObjectType); tgtFEntityRows.Add(newRow); newRow["FMtlGroup"] = srcRow["FMtlGroup"]; newRow["FDescribe"] = srcRow["FDescribe"]; newRow["FQty"] = srcRow["FQty"]; newRow["FModel"] = srcRow["FModel"]; newRow["FIsStandard"] = srcRow["FIsStandard"]; newRow["FBPRndID"] = srcRow["FBPRndID"]; newRow["FBRndNo"] = srcRow["FBRndNo"]; newRow["FGUID"] = srcRow["FGUID"]; newRow["FIS2W"] = srcRow["FIS2W"]; } } /* * sql = string.Format("select FBEntryID from ora_CRM_ContractBPR where FID='{0}'", FID); * var srcFEntityBPREIDs = CZDB_GetData(sql); * if (srcFEntityBPREIDs.Count > 0) * { * object[] objs = new object[srcFEntityBPREIDs.Count]; * for (int i = 0; i < srcFEntityBPREIDs.Count; i++) * { * objs[i] = srcFEntityBPREIDs[i]["FBEntryID"].ToString(); * } * var srcFEntityBPRBillObjs = viewService.Load(this.Context, objs, srcFEntityBPR.DynamicObjectType); * DynamicObjectCollection tgtFEntityBPRRows = tgtFEntityBPR.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; * tgtFEntityBPRRows.Clear(); * foreach (var srcRow in srcFEntityBPRBillObjs) * { * DynamicObject newRow = new DynamicObject(tgtFEntityBPR.DynamicObjectType); * tgtFEntityBPRRows.Add(newRow); * //newRow["BSEQ"] = srcRow["BSEQ"]; * newRow["FBGUID"] = srcRow["FBGUID"]; * newRow["FBSrcEID"] = srcRow["FBSrcEID"]; * newRow["FBSrcSEQ"] = srcRow["FBSrcSEQ"]; * newRow["FBPRndSEQ"] = srcRow["FBPRndSEQ"]; * newRow["FBMtlGroup"] = srcRow["FBMtlGroup"]; * newRow["FBMtlItem"] = srcRow["FBMtlItem"]; * newRow["FMaterialID"] = srcRow["FMaterialID"]; * newRow["FBDescribe"] = srcRow["FBDescribe"]; * newRow["FBQty"] = srcRow["FBQty"]; * newRow["FBModel"] = srcRow["FBModel"]; * newRow["FBIsStandard"] = srcRow["FBIsStandard"]; * newRow["FBasePrice"] = srcRow["FBasePrice"]; * newRow["FBPAmt"] = srcRow["FBPAmt"]; * newRow["FBPAmtGroup"] = srcRow["FBPAmtGroup"]; * newRow["FBRptPrice"] = srcRow["FBRptPrice"]; * newRow["FBAbaComm"] = srcRow["FBAbaComm"]; * newRow["FBDownPoints"] = srcRow["FBDownPoints"]; * newRow["FBWorkDay"] = srcRow["FBWorkDay"]; * newRow["FBCostAdj"] = srcRow["FBCostAdj"]; * newRow["FBCAReason"] = srcRow["FBCAReason"]; * newRow["FBDelivery"] = srcRow["FBDelivery"]; * newRow["FBPAmtLc"] = srcRow["FBPAmtLc"]; * newRow["FBRptPrcLc"] = srcRow["FBRptPrcLc"]; * newRow["FBIS2W"] = srcRow["FBIS2W"]; * newRow["FBUnitID"] = srcRow["FBUnitID"]; * newRow["FBTaxRateID"] = srcRow["FBTaxRateID"]; * newRow["FBTaxRate"] = srcRow["FBTaxRate"]; * newRow["FBBomVsn"] = srcRow["FBBomVsn"]; * newRow["FBTaxPrice"] = srcRow["FBTaxPrice"]; * newRow["FBNTPrice"] = srcRow["FBNTPrice"]; * newRow["FBTaxAmt"] = srcRow["FBTaxAmt"]; * newRow["FBNTAmt"] = srcRow["FBNTAmt"]; * * newRow["FBRangeAmtOne"] = srcRow["FBRangeAmtOne"]; * newRow["FBRangeAmtGP"] = srcRow["FBRangeAmtGP"]; * newRow["FBRangeAmtReason"] = srcRow["FBRangeAmtReason"]; * newRow["FProdFactory"] = srcRow["FProdFactory"]; * //newRow["FBLkQty"] = srcRow["FBLkQty"]; * } * } */ sql = string.Format("select FEntryIDM from ora_CRM_ContractMtl where FID='{0}'", FID); var srcFEntityMEIDs = CZDB_GetData(sql); if (srcFEntityMEIDs.Count > 0) { object[] objs = new object[srcFEntityMEIDs.Count]; for (int i = 0; i < srcFEntityMEIDs.Count; i++) { objs[i] = srcFEntityMEIDs[i]["FEntryIDM"].ToString(); } var srcFEntityMBillObjs = viewService.Load(this.Context, objs, srcFEntityM.DynamicObjectType); DynamicObjectCollection tgtFEntityMRows = tgtFEntityM.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; tgtFEntityMRows.Clear(); foreach (var srcRow in srcFEntityMBillObjs) { DynamicObject newRow = new DynamicObject(tgtFEntityM.DynamicObjectType); tgtFEntityMRows.Add(newRow); newRow["FMGUID"] = srcRow["FMGUID"]; newRow["FMSrcEID"] = srcRow["FMSrcEID"]; newRow["FMSrcSEQ"] = srcRow["FMSrcSEQ"]; newRow["FMMtlGroup"] = srcRow["FMMtlGroup"]; newRow["FMMtlItem"] = srcRow["FMMtlItem"]; newRow["FMClass"] = srcRow["FMClass"]; newRow["FMMtl"] = srcRow["FMMtl"]; newRow["FMModel"] = srcRow["FMModel"]; newRow["FMQty"] = srcRow["FMQty"]; newRow["FMUnit"] = srcRow["FMUnit"]; newRow["FMPrice"] = srcRow["FMPrice"]; newRow["FMAmt"] = srcRow["FMAmt"]; newRow["FMGpAmtB"] = srcRow["FMGpAmtB"]; newRow["FMCostRate"] = srcRow["FMCostRate"]; newRow["FMCost"] = srcRow["FMCost"]; newRow["FMGPRate"] = srcRow["FMGPRate"]; newRow["FMGP"] = srcRow["FMGP"]; newRow["FMGpAmt"] = srcRow["FMGpAmt"]; newRow["FMGpAmtLc"] = srcRow["FMGpAmtLc"]; newRow["FMIS2W"] = srcRow["FMIS2W"]; } } } }
/// <summary> /// 下推 /// </summary> /// <param name="e"></param> public override void OnAfterCreateLink(CreateLinkEventArgs e) { try { string sql = ""; // 源单单据体元数据 var sourceEntitylist = e.SourceBusinessInfo.GetEntity("FBillHead"); //目标单据体数据 var extend = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead").FirstOrDefault().DataEntity; if (extend == null) { return; } //获取付款单明细数据 var Item = extend["FPAYAPPLYENTRY"] as DynamicObjectCollection; for (int a = Item.Count; a > 0; a--) { //订单明细内码 string FORDERENTRYID = Item[a - 1]["FORDERENTRYID"].ToString(); //物料 string FMATERIALID = Item[a - 1]["FMATERIALID_Id"].ToString(); sql = string.Format(@"select ar.arFALLAMOUNTFOR as 应收金额,sk.skFREALRECAMOUNT as 收款金额, sal.F_YBG_BUSINESSMODEL as 业务模式 from t_PUR_POOrderEntry c inner join T_PUR_POORDERENTRY_LK d on d.FENTRYID=c.FENTRYID inner join T_SAL_ORDERENTRY f on d.FSID=f.FENTRYID inner join T_SAL_ORDERENTRY_F g on f.FENTRYID=g.FENTRYID left join T_SAL_ORDER sal on sal.FID=f.FENTRYID left join (select sum(are.FALLAMOUNTFOR) as arFALLAMOUNTFOR ,FORDERENTRYID from T_AR_RECEIVABLE ar inner join T_AR_RECEIVABLEENTRY arE on ar.FID=are.FID where ar.FDOCUMENTSTATUS='C' and ar.FBILLTYPEID='5d18aa0e58407c' and ar.FSETACCOUNTTYPE='3' group by FORDERENTRYID)ar on ar.FORDERENTRYID=f.FENTRYID left join (select FORDERENTRYID, sum(a.FREALRECAMOUNT) as skFREALRECAMOUNT from T_AR_RECEIVEBILLSRCENTRY a left join T_AR_RECEIVEBILL b on a.FId=b.FID where b.FDOCUMENTSTATUS='C' group by FORDERENTRYID) sk on sk.FORDERENTRYID=f.FENTRYID where c.FENTRYID='{0}'", FORDERENTRYID); DataSet ds = DBServiceHelper.ExecuteDataSet(this.Context, sql); DataTable dt = ds.Tables[0]; if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { //业务模式 string F_YBG_BusinessModel = string.IsNullOrEmpty(dt.Rows[i]["业务模式"].ToString()) ? "" : dt.Rows[i]["业务模式"].ToString(); //只有挂靠的才会收到货款的时候就付款 if (F_YBG_BusinessModel == "01" || F_YBG_BusinessModel == "04") { //价税合计 decimal FALLAMOUNT = Convert.ToDecimal(dt.Rows[i]["应收金额"].ToString()); //收款金额 decimal FREALRECAMOUNT = Convert.ToDecimal(dt.Rows[i]["收款金额"].ToString()); //比例 decimal proportion = FREALRECAMOUNT / FALLAMOUNT; if (proportion == 0) { Item.RemoveAt(a - 1); } else { //付款申请金额 Item[a - 1]["FAPPLYAMOUNTFOR"] = Convert.ToDecimal(Item[a - 1]["FAPPLYAMOUNTFOR"]) * proportion; } } } } } if (Item.Count == 0) { throw new Exception("未收到回款,禁止下推付款申请单"); } } catch (Exception ex) { throw new Exception("当前单据下推报错:" + ex.ToString()); } }