单据转换插件实现基础资料赋值(python)原创
24人赞赏了该文章
3,964次浏览
编辑于2022年04月26日 08:38:38
【业务背景】
单据转换 A -> B -> C,其中B -> C 转换路线中需要用到分组功能,设置根据明细分录中的"采购供应商"(基础资料属性,取物料档案中采购的默认供应商)合并分录下推,B中的物料供应商由A下推物料时,默认自动携带。
【需求分析】
由于在转换中分组合并无法选择"基础资料属性"的字段,只能在B中在扩展一个基础资料属性,由B -> C时,根据物料供应商进行生成下游多张单据C,这涉及一个问题,从A -> B时,需要对"物料供应商"(基础资料字段)进行赋值,在单据转换中赋值有3种方式:
1、字段映射自定义公式:基础资料 = 物料.采购.默认供应商,跨级的引用,BOS不支持,类型报错
2、表单策略无法实现
3、单据转换插件
【插件实现】
import clr clr.AddReference("System") clr.AddReference("Kingdee.BOS") clr.AddReference("Kingdee.BOS.Core") clr.AddReference("Kingdee.BOS.App") clr.AddReference('Kingdee.BOS.ServiceHelper') clr.AddReference('Kingdee.BOS.DataEntity') clr.AddReference("Kingdee.BOS.App.Core") clr.AddReference('Kingdee.BOS.ServiceHelper') clr.AddReference("Kingdee.BOS.Contracts") from System import * from System import StringComparison from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args import * from Kingdee.BOS.App.Data import * from System.Collections.Generic import * from Kingdee.BOS.ServiceHelper import * from Kingdee.BOS.Core.Metadata import SelectorItemInfo from Kingdee.BOS.Core.SqlBuilder import QueryBuilderParemeter from Kingdee.BOS.Orm.DataEntity import * from Kingdee.BOS.Contracts import * from Kingdee.BOS.App.Core import * def AfterConvert(e): dataObjs = e.Result.FindByEntityKey("FBillHead") viewService = ViewService() field = e.TargetBusinessInfo.GetField("F_KCY_Base") for obj in dataObjs: entrys = obj.DataEntity["FEntity"] for entry in entrys: material = entry["MaterialId"] if material is not None: p = QueryBuilderParemeter() p.FormId = "BD_MATERIAL" #业务对象标识 p.SelectItems = SelectorItemInfo.CreateItems("FMaterialId","FDefaultVendor") #设置要查询的字段,用业务对象的字段标识来表示 p.FilterClauseWihtKey = '''FMaterialId = {0}'''.format(material["Id"]) #过滤条件 dyObjs = QueryServiceHelper.GetDynamicObjectCollection(this.Context, p) if dyObjs.Count > 0: if dyObjs[0]["FDefaultVendor"]) != 0: # 存在默认供应商 vendor = viewService.LoadSingle(this.Context, dyObjs[0]["FDefaultVendor"], field.RefFormDynamicObjectType) entry["F_KCY_Base_Id"] = dyObjs[0]["FDefaultVendor"] entry["F_KCY_Base"] = vendor # 或者 # field.RefIDDynamicProperty.SetValue(entry, dyObjs[0]["FDefaultVendor"]); # field.DynamicProperty.SetValue(entry, vendor);
说明:脚本采用了循环的方式依次获取数据,应该有批量的处理方式,对大数据量性能会更好一点,后续研究再优化修改。
单据转换插件实现基础资料赋值(python).rar(0.90KB)
赞 24
24人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读