#二开#简单账表,分组汇总、合计数据带百分号 % 的处理

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

#二开#简单账表,分组汇总、合计数据带百分号 % 的处理

# 业务场景 星空报表开发中,遇到带百分号(%)的数据列,在进行分组汇总时会导致数据错乱,可通过报表的表单插件,对汇总行进行修改处理,具体效果如下: ![image.webp](/download/0100ab28b44a9d2a482f942b1c1394def506.webp) 可以看到,营业利用率列的数据是带%的,汇总行的数据也是正确的,而不是简单的合计。 ![image.webp](/download/0100d9af6067639e4bfdb7f3053c5d65366a.webp) # 实现步骤 ### 1.在初始化方法中启用分组合计 在报表的服务插件里的初始化方法Initialize()设置分组汇总启用 ``` public override void Initialize() { //初始化 base.Initialize(); //标识报表是否支持分组汇总 ReportProperty.IsGroupSummary = true; } ``` ### 2.字段类型设置为数值类型 如果是取数插件设置的字段,则使用SqlStorageType.SqlDecimal设置为数值类型 ``` /// 设置标题 public override ReportHeader GetReportHeaders(IRptParams filter) { ReportHeader header = base.GetReportHeaders(filter); //设置字段 header.AddChild("FYYLRL", new LocaleValue("营业利润率(%)"), SqlStorageType.SqlDecimal); return header; } ``` 如果是在BOS里配置的字段,一样使用数值类型的字段,一般使用小数。 ![image.webp](/download/01002d2411ae4bc742d1b1478c7d3253cb00.webp) ### 3.设置为合计列 方法一:报表服务插件GetSummaryColumnInfo()方法里设置。 营业利润率字段标识:FYYLRL,这里如果不是数值类型汇总会报错。 ```language var result = base.GetSummaryColumnInfo(filter); // 设置报表合计列 result.Add(new SummaryField("FYYLRL", BOSEnums.Enu_SummaryType.SUM)); return result; ``` 方法二:BOS字段设置汇总类型:合计 ![image.webp](/download/01005d033a6964b442a88f6d4c77ce4033ea.webp) ### 4.设置分组汇总 设置按客户分组汇总 ![image.webp](/download/0100ec1f50357ff24076845211bb4aaa7b20.webp) 设置默认分组 ![image.webp](/download/01008ad52699a0664853b1d778a012fbbbcc.webp) 这里如果不设置按客户分组的话,汇总行就会在单据体下方,像这样 ![image.webp](/download/0100d3548dc285a7457c99de24e9d8a01d44.webp) ### 5.检查是否分组汇总成功 ![image.webp](/download/010003727e466151452b9fd5368396bc79cb.webp) 此时,数据行正常汇总。可是客户利润率这行的汇总数据是累加的,我需要的是营业利润/销售收入,也没有%号。这两个问题都需要表单插件做处理 ### 6.报表表单插件 ```language using Kingdee.BOS.Core.Report.PlugIn; using Kingdee.BOS.Core.Report.PlugIn.Args; using System; using System.ComponentModel; namespace HNKD.K3.JinMoFang.App.ServicePlugin { [Kingdee.BOS.Util.HotUpdate] [Description("【表单插件】客户利润表,自定义列合计")] public class KHLRB_ReportEdit : AbstractSysReportPlugIn { //记录字段类型 static private string type = ""; public override void FormatCellValue(FormatCellValueArgs args) { base.FormatCellValue(args); //给营业利润率末尾加上‘%’ if (args.Header.Key.Equals("FYYLRL", StringComparison.OrdinalIgnoreCase)) { args.FormateValue += "%"; } //判断是否新行,客户编码标识:FKHBM,这个客户编码标识是我这个报表的第一个字段,需要替换为实际报表的第一个字段 if (!type.Equals(args.CellType.ToString()) && args.Header.Key.Equals("FKHBM", StringComparison.OrdinalIgnoreCase)) { type = args.CellType.ToString(); } // 处理分组汇总和分组合计的数据 if ((type == "SubTotal" || type == "Total") && args.Header.Key.Equals("FYYLRL", StringComparison.OrdinalIgnoreCase)) { //自定义公式:营业利润率 = 营业利润/销售收入(不含税)* 100% string str = Convert.ToString(Math.Round(Convert.ToDecimal(args.DataRow["FYYLR"]) / Convert.ToDecimal(args.DataRow["FXSSRBHS"]) * 100,2)); args.FormateValue = str+"%"; } // 汇总数据行在单据体下方的数据 if (args.IsSummaryRow && args.Header.Key.Equals("FYYLRL", StringComparison.OrdinalIgnoreCase)) { // 营业利润率 = 营业利润/销售收入(不含税)* 100% string str = Convert.ToString(Math.Round(Convert.ToDecimal(args.DataRow["FYYLR"]) / Convert.ToDecimal(args.DataRow["FXSSRBHS"]) * 100, 2)); args.FormateValue = str + "%"; } } } } ```

感谢!很有用

#二开#简单账表,分组汇总、合计数据带百分号 % 的处理

# 业务场景星空报表开发中,遇到带百分号(%)的数据列,在进行分组汇总时会导致数据错乱,可通过报表的表单插件,对汇总行进行修改处理,...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息