单据套打注册动态字段 使用python

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

单据套打注册动态字段 使用python

1、在某些场景下,如果需要进行套打发现单据上没有相关的字段,如果在单据上添加上自定义字段多,且与其它的基础设置重复,导致不好添加。 例如:发票需要套打,且没有销售方的相关信息,导致很多内容取不到。如果放在金税开票单上,销售发票有自定义字段带到开票单上不妥。 2、只能通过使用动态字段的方式在打印的时候进行获取; 3、论坛中有几个帖子提到了这种动态注册的方法,但是修改后都无法正常执行。最终通过网络搜索找到了一个好用的方法能够完整的运行程序。地址如下: https://www.cnblogs.com/zjsk/articles/11571156.html?share_token=5fb7ca4d-d58f-4589-806a-c4161f7cdfe8 4、在进行尝试探索的阶段,CQ周玉立老师提供了套打动态字段批量注册的方法; 5、最终的代码如下 ```python #引入clr运行库 import clr #添加对cloud插件开发的常用组件的引用 clr.AddReference('System') clr.AddReference('System.Data') clr.AddReference('Kingdee.BOS') clr.AddReference('Kingdee.BOS.Core') clr.AddReference('Kingdee.BOS.App') clr.AddReference('Kingdee.BOS.DataEntity') clr.AddReference("Kingdee.BOS.ServiceHelper") #导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入) from System import * from System.Data import * from System.Collections.Generic import List from Kingdee.BOS import * from Kingdee.BOS.App.Data import * from Kingdee.BOS.ServiceHelper import * from Kingdee.BOS.Core import * from Kingdee.BOS.Core.Bill import * from Kingdee.BOS.Core.Bill.PlugIn import * from Kingdee.BOS.Core.List import* from Kingdee.BOS.Core.List.PlugIn import * from Kingdee.BOS.Core.Metadata.EntityElement import * from Kingdee.BOS.Core.DynamicForm.PlugIn import * from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import * from Kingdee.BOS.Orm.DataEntity import * def OnPrepareNotePrintData(e): DataSourceId=e.DataSourceId if (DataSourceId !="BillHead" and ((e.DataObjects == None) or (e.DataObjects.Length == 0))): #获取发票的表头 return else: # 获取到单据头的数据包 qureyObjs = e.DataObjects # 获取数据包行数 _count = e.DataObjects.Count # 获取到单据头的数据包类型 objectType = e.DataObjects[0].DynamicObjectType # 检查并注册自定义属性 objectType = e.DataObjects[0].DynamicObjectType prop_names = ["FCOMPANY", "FBANK", "FBANKACCT", "FTELE", "FSWIFT"] #自定义动态字段 for fld in prop_names: spAttr=SimplePropertyAttribute() spAttr.Alias=fld objectType.RegisterSimpleProperty(fld,"".GetType(),None,False,spAttr) #objectType.RegisterSimpleProperty(fld,typeof(string),None,False,spAttr) #objectType.RegisterSimpleProperty(fld,typeof(string)) if objectType.Properties.ContainsKey("FCOMPANY")==True: this.View.ShowMessage("cg") else: this.View.ShowMessage("erro") for i in range(0,_count): #创建一个新的数据包 obj_data = DynamicObject(objectType) # 把旧数据包的值全部给新数据包 for p in qureyObjs[0].DynamicObjectType.Properties: obj_data[p] = e.DataObjects[0][p] # 根据单据ID构造SQL查询语句 bill_ids =str(qureyObjs[i][0]) #bill_ids = this.View.Model.DataObject["Id"].ToString() sql = ("""/*dialect*/SELECT TAXGET.FCOMPANYNAME, SUBSTRING(TAXGET.FBANKINFO, 1, CHARINDEX(' ', FBANKINFO)) AS FBANKINFO, SUBSTRING(TAXGET.FBANKINFO, CHARINDEX(' ', FBANKINFO), LEN(FBANKINFO)) AS FBANKACCT, SUBSTRING(TAXGET.FMAILINFO, CHARINDEX(' ', FMAILINFO), LEN(FMAILINFO)) AS FTEL, F_TWOF_SWIFT FSWIFT FROM T_IV_GTSETTINGENTRY TAXGET INNER JOIN (SELECT FID, FSETTLEORGID, FBILLNO FROM T_IV_SALEEXINV UNION ALL SELECT FID, FSETTLEORGID, FBILLNO FROM T_IV_SALESIC) TAX ON TAXGET.FSETTLEORGID = TAX.FSETTLEORGID WHERE 1=1 AND TAX.FID IN ('{0}')""").format(bill_ids) # 执行SQL并获取数据 list_db = DBServiceHelper.ExecuteDynamicObject(this.Context, sql) if list_db is not None and len(list_db) > 0: #for index in range(len(list_db)): FCOMPANY = list_db[0].FCOMPANYNAME FBANK = list_db[0].FBANKINFO FBANKACCT = list_db[0].FBANKACCT FTELE = list_db[0].FTEL FSWIFT = list_db[0].FSWIFT obj_data["FCOMPANY"] = FCOMPANY obj_data["FBANK"] = FBANK obj_data["FBANKACCT"] = FBANKACCT obj_data["FTELE"] = FTELE obj_data["FSWIFT"] = FSWIFT # 最后用新的数据包来替换旧的数据包 e.DataObjects[i] = obj_data ``` 另外原帖中写的getvalue("动态字段名称")获取动态字段的值方法在8.2.0.20231109上不好用,动态字段在套打中直接选择,参考如下 ![image.webp](/download/010028b113927a55441badae17fc8751dc02.webp) 6、插件要分别放在单据的表单插件和列表插件中,否则在表单插件中只能实现单个单据预览打印,无法实现选择多条单据进行连续或者合并打印。

单据套打注册动态字段 使用python

1、在某些场景下,如果需要进行套打发现单据上没有相关的字段,如果在单据上添加上自定义字段多,且与其它的基础设置重复,导致不好添加。...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息