#二开#简单账表,分组汇总、合计数据带百分号 % 的处理
# 业务场景
星空报表开发中,遇到带百分号(%)的数据列,在进行分组汇总时会导致数据错乱,可通过报表的表单插件,对汇总行进行修改处理,具体效果如下:
![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 + "%";
}
}
}
}
```
感谢!很有用
#二开#简单账表,分组汇总、合计数据带百分号 % 的处理
# 业务场景星空报表开发中,遇到带百分号(%)的数据列,在进行分组汇总时会导致数据错乱,可通过报表的表单插件,对汇总行进行修改处理,...
点击下载文档
本文2024-09-16 18:31:04发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-22657.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章