Python插件 - 记录一下【双明细表】单据转换干预目标单据明细表数据,多单据体转换

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

Python插件 - 记录一下【双明细表】单据转换干预目标单据明细表数据,多单据体转换

# 需求 ## 产品问题表 ![image.webp](/download/010029798048a21f4c5282175773e86bd7ca.webp) ![image.webp](/download/0100f8f9019539ac42158a4772cd6acf274a.webp) ## 产品问题明细表 ![image.webp](/download/01002d12e0c967234afbb6d44c2018a9114f.webp) 根据产品问题表 **下推** 产品问题明细表 产品问题表按照**【部门】**分组下推 ![image.webp](/download/010060f9c14e1f5045f7a592ffa25478859a.webp) **【部门】**数据在一个单据体,物料数据在一个单据体,通过单据转换配置**多单据体**就会出现这个问题 ![image.webp](/download/0100f166043509b04c68856e2d3a0887e73f.webp) # 单据转换插件 用到了2个函数 OnGetSourceData **获取源单数据后事件** AfterConvert **单据转换之后事件** 开发的思路是,从 OnGetSourceData 获取源单标识,在 AfterConvert 单据转换之后获取源单数据对目标数据包新建插入 ## 源码 ``` python #作者: 老李头 import clr clr.AddReference("System") clr.AddReference("System.Core") clr.AddReference("Kingdee.BOS") clr.AddReference("Kingdee.BOS.Core") clr.AddReference("Kingdee.BOS.Contracts") clr.AddReference("Kingdee.BOS.App") clr.AddReference("Kingdee.BOS.DataEntity") clr.AddReference("Kingdee.BOS.ServiceHelper") #clr.AddReference("Newtonsoft.Json") from Kingdee.BOS.Core.Metadata import * from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn import * from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args import * from Kingdee.BOS.Orm.DataEntity import * from Kingdee.BOS.Orm.Metadata.DataEntity import * from Kingdee.BOS.Core.Metadata.FormElement import * from Kingdee.BOS.Core.SqlBuilder import * from Kingdee.BOS.ServiceHelper import * from Kingdee.BOS.Util import * from System import * from System.Collections.Generic import * from System.ComponentModel import * #from Newtonsoft.Json import * #from Newtonsoft.Json.Linq import * global _sourceFormId; _sourceFormId = "SMTO_s1"; #源单表单ID唯一标识【产品问题表】 global _sourceData; global _fid _fid = 0; def OnGetSourceData(e): global _fid for data in e.SourceData: _fid = Convert.ToInt64(data["FID"]); #获取源单的内码 用于转换后查询源单数据 #单据转换之后事件 def AfterConvert(e): #得到目标单据数据包扩展集合 dataObjs = e.Result.FindByEntityKey("FBillHead"); #获取源单数据 开始 metadata = MetaDataServiceHelper.Load(this.Context, _sourceFormId); para = QueryBuilderParemeter(); para.BusinessInfo = metadata.BusinessInfo; para.FormId = _sourceFormId; para.FilterClauseWihtKey = " FID = {0} ".format(_fid); soDatas = BusinessDataServiceHelper.Load(this.Context, metadata.BusinessInfo.GetDynamicObjectType(),para); #获取源单数据 结束 if soDatas is not None and soDatas.Count > 0: for obj in dataObjs: entryDyType = e.TargetBusinessInfo.GetEntity("FEntity").DynamicObjectType;#目标单据明细表类型 cusEntrys = obj["FEntity"]#明细表的【绑定属性实体】 if cusEntrys is None: cusEntrys = DynamicObjectCollection(entryDyType, obj); #raise NameError(JsonConvert.SerializeObject(obj)); #循环源单 for item in soDatas: cusEntry = item["FEntity"];#源单数据 明细表的【绑定属性实体】 for items in cusEntry: #raise NameError(JsonConvert.SerializeObject(items)); dy = DynamicObject(entryDyType); #序号 dy["seq"] = items["seq"]; #基础资料,辅助资料 都为对象(需要赋值字段的【绑定实体属性】和【绑定实体属性_Id】)2个 #物料编码 dy["SMTO_Base2"] = items["F_SMTO_Base1"]; dy["SMTO_Base2_Id"] = items["F_SMTO_Base1_Id"]; cusEntrys.Add(dy); else: raise NameError("转换插件 - 源单数据获取失败"); ``` # 插件部署 ![image.webp](/download/010060defc85209a49aa809c36f686b53755.webp) # 实现效果 ![output.webp](/download/0100cf23fff0ce4c43e38b4be6ab07022191.webp)

Python插件 - 记录一下【双明细表】单据转换干预目标单据明细表数据,多单据体转换

# 需求## 产品问题表![image.webp](/download/010029798048a21f4c5282175773e86bd7ca.webp)![image.webp](/download/0100f8f9019539ac421...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息