Python开发简单账表原创
35人赞赏了该文章
7,433次浏览
未经作者许可,禁止转载编辑于2022年07月14日 17:07:47
对于公有云发布.NET插件不方便,用Python脚本开发简单账表服务插件,以便快速开发,快速迭代。
简单账表开发教程可参考:https://vip.kingdee.com/article/1094
简单总结一下,需要用代码拼接SQL拼接来构建报表数据源时,就需要用到用简单账表,对于常用场景,对报表不做其他复杂设置的情况下,简单账表的开发一般就是以下几个步骤就OK。
1.新建->空白对象->简单账表。
2.如果需要的话:添加表头字段。添加报表字段(通常都是在取数服务插件中构建,可以不做)
3.新建过滤界面:继承->BOS->应用框架->动态表单->公共过滤
4.开发取数服务插件,看后面的Python脚本参考代码。核心的报表逻辑都在这一步。
5.权限配置。
分享一下如何用Python脚本开发简单账表的取数服务插件。老版本可能不支持,我开发的版本是[V7.6.0.202103],也是比较旧的版本了,高于此版本的环境应该都是可以的。
复制代码,可下载附件
import clr clr.AddReference("System") clr.AddReference("Kingdee.BOS") clr.AddReference("Kingdee.BOS.Core") clr.AddReference("Kingdee.BOS.DataEntity") clr.AddReference("Kingdee.BOS.App") clr.AddReference("Kingdee.BOS.Contracts") clr.AddReference("Kingdee.BOS.ServiceHelper") from Kingdee.BOS import* from Kingdee.BOS.Contracts import* from Kingdee.BOS.Contracts.Report import* from Kingdee.BOS.Core import * from Kingdee.BOS.Core.Metadata import * from Kingdee.BOS.Core.Report import* from Kingdee.BOS.Core.SqlBuilder import* from Kingdee.BOS.App.Data import* from Kingdee.BOS.Orm.DataEntity import* from System import* from System.ComponentModel import* from System.Collections.Generic import* from System.Text import* from System.Threading.Tasks import* from Kingdee.BOS.ServiceHelper import * #初始化 def Initialize(): this.ReportProperty.ReportType=ReportType.REPORTTYPE_NORMAL; this.IsCreateTempTableByPlugin=True; this.ReportProperty.IsGroupSummary=True; #设置标题 def GetReportTitles(Filter): reportTitles=ReportTitles(); #customFiler=Filter.FilterParameter.CustomFilter; return reportTitles; #设置单据列 def GetReportHeaders(Filter): header=ReportHeader(); localEid=this.Context.UserLocale.LCID; header.AddChild("FNumber",LocaleValue("员工编号",localEid)); header.AddChild("FID",LocaleValue("员工ID",localEid)); return header; #创建临时报表 def BuilderReportSqlAndTempTable(rptfilter,tableName): custFilter = rptfilter.FilterParameter.CustomFilter; whereFempId=""; if(custFilter<>None): empObj=custFilter["F_ora_EmpId"]; if(empObj<>None): whereFempId=(" and FID={0} ").format(empObj["Id"]); ##!!!!! FIDENTITYID 一定要从1开始,不然前台显示没数据!!!! sql=("""/*dialect*/ SELECT FIDENTITYID=row_NUMBer() over(order by t1.FID ASC),t1.* INTO {0} FROM ( select FNumber,FID from T_HR_EMPINFO where 1=1 {1} ) t1 """).format(tableName,whereFempId); DBServiceHelper.Execute(this.Context,sql); #关闭清空临时表 def CloseReport(): this.DropTempTable();
简单账表服务插件示例.rar(1.03KB)
赞 35
35人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!