主页 > 创业  > 

金蝶报表二开

金蝶报表二开
本案例描述:

折旧明细报表中加入字段:存放地点、成本中心部门、使用人组织三个字段。

参考社区案例:报表二次开发添加自定义字段的指导方案

步骤: 1、加入报表插件

继承原报表的类。重写BuilderReportSqlAndTempTable、GetReportHeaders、CloseReport三个方法。

customRptTempTableNames:实现在原报表的临时表中加入新的字段数据

GetReportHeaders:实现把新加的字段加在界面中展示

CloseReport:实现用完后删掉临时表

[Description("折旧明细表")] public class CarDetailReport : DeprDetailListService { private string[] customRptTempTableNames; /// <summary> /// 在原报表临时表中加入新字段的数据 /// </summary> /// <param name="filter"></param> /// <param name="tableName"></param> public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName) { // 创建临时表,用于存放自己的数据 IDBService dbservice = Kingdee.BOS.App.ServiceHelper.GetService<IDBService>(); customRptTempTableNames = dbservice.CreateTemporaryTableName(this.Context, 1); // 获取临时表名称 string strTable = customRptTempTableNames[0]; // 把刚刚获得的临时表放进基类的方法,获取报表原始的数据 base.BuilderReportSqlAndTempTable(filter, strTable); StringBuilder sb = new StringBuilder(); sb.AppendFormat(@"select t1.*,B.F_LSLOCATION, D.FFULLNAME F_LSCostDept, E.FNAME F_LS_UserOrg into {0} -- 原有临时表 from {1} t1-- 临时表 LEFT JOIN T_FA_CARDDETAIL B ON t1.FALTERID = B.FALTERID AND t1.FNUMBER = B.FASSETNO LEFT JOIN t_fa_allocation C ON t1.FALTERID = C.FALTERID AND t1.FNUMBER = C.FASSETNO LEFT JOIN T_BD_DEPARTMENT_L D ON C.F_LSCOSTDEPT = D.FDEPTID LEFT JOIN T_ORG_ORGANIZATIONS_L E ON C.F_LS_USERORG = E.FORGID ", tableName, strTable); DBUtils.Execute(this.Context, sb.ToString()); } /// <summary> /// 这里加上对应新加的字段,不然不会在界面显示 /// </summary> /// <param name="filter"></param> /// <returns></returns> public override ReportHeader GetReportHeaders(IRptParams filter) { ReportHeader header = base.GetReportHeaders(filter); // TODO: 添加新增字段 header.AddChild("F_LS_UserOrg", new LocaleValue("使用人组织")); header.AddChild("F_LSCostDept", new LocaleValue("成本中心部门")); header.AddChild("F_LSLOCATION", new LocaleValue("存放地点")); return header; } /// <summary> /// 调用完后删除临时表 /// </summary> public override void CloseReport() { // 删除临时表 if (customRptTempTableNames.IsNullOrEmptyOrWhiteSpace()) { return; } IDBService dbService = Kingdee.BOS.App.ServiceHelper.GetService<Kingdee.BOS.Contracts.IDBService>(); // 使用后的临时表需要删除 dbService.DeleteTemporaryTableName(this.Context, customRptTempTableNames); base.CloseReport(); } } 2、bos扩展报表,引入插件,并且把标准插件停用

3、发布和验证效果

4、加过滤

如果报表加的条件需要在过滤方案里面作为过滤条件查询,也需要针对调整

基于1里面的代码,过滤条件的sql拼接,并且在临时表查询条件中加上拼接的过滤sql.

/// <summary> /// 封装二开过滤条件语句 /// </summary> /// <param name="filter"></param> /// <returns></returns> private static string CheckIsNeedChange(IRptParams filter) { string whereSql = ""; for (int i = 0; i < filter.FilterParameter.FilterRows.Count; i++) { // 检查过滤方案中是否有二开的过滤条件,拼接成where 语句 string strFieldName = filter.FilterParameter.FilterRows[i].FilterField.FieldName; if (strFieldName== "F_LSLOCATION") { whereSql= string.Format(@" and B.F_LSLOCATION='{0}'", filter.FilterParameter.FilterRows[i].Value); } // 使用人组织 if (strFieldName == "F_LS_UserOrg") { whereSql = whereSql+string.Format(@" and E.FNAME='{0}'", filter.FilterParameter.FilterRows[i].Value); } } if (string.IsNullOrWhiteSpace(whereSql)) { return whereSql; } else { return " where 1=1 "+whereSql; } }

参考社区文章:报表二次开发高级查询添加自定义字段指导方案

5、注意点

字段取名需要界面、过滤方案、sql语句里面完全一样。

如果新加的字段需要过滤,要在扩展过滤方案里面配置

标签:

金蝶报表二开由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“金蝶报表二开