
**【应用场景】**
账表过滤条件框不设置分组汇总,在账表加载时动态进行设置。
**【案例演示】**
<1>编写账表服务插件,代码如下。
``` csharp
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts.Report;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Util;
using System.Collections.Generic;
using System.ComponentModel;
namespace Kingdee.BOS.PlugInTest
{
[Description("【账表服务器插件】动态设置分组字段"), HotUpdate]
public class GroupReportService : SysReportBaseService
{
/// <summary>
/// 初始化
/// </summary>
public override void Initialize()
{
base.Initialize();
// 简单账表类型:普通、树形、分页
this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL;
// 报表名称
this.ReportProperty.ReportName = new LocaleValue("日采购报表", base.Context.UserLocale.LCID);
// 是否由插件创建临时表
this.IsCreateTempTableByPlugin = true;
// 报表列是否通过UI设计
this.ReportProperty.IsUIDesignerColumns = false;
// 报表是否支持分组汇总
this.ReportProperty.IsGroupSummary = true;
// 是否锁定表格列
this.ReportProperty.SimpleAllCols = false;
// 报表是否默认只现实合计和明细数据
this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true;
// 设置精度控制
List<DecimalControlField> list = new List<DecimalControlField>();
// 数量
list.Add(new DecimalControlField
{
ByDecimalControlFieldName = "FQty",
DecimalControlFieldName = "FUnitPrecision"
});
// 单价
list.Add(new DecimalControlField
{
ByDecimalControlFieldName = "FTAXPRICE",
DecimalControlFieldName = "FPRICEDIGITS"
});
// 金额
list.Add(new DecimalControlField
{
ByDecimalControlFieldName = "FALLAMOUNT",
DecimalControlFieldName = "FAMOUNTDIGITS"
});
this.ReportProperty.DecimalControlFieldList = list;
}
/// <summary>
/// 构建报表临时表
/// </summary>
/// <param name="filter"></param>
/// <param name="tableName"></param>
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
base.BuilderReportSqlAndTempTable(filter, tableName);
// 设置分组列
filter.FilterParameter.SummaryRows.Clear();
var summaryField1 = new Core.CommonFilter.SummaryField(new LocaleValue("单据编号"), "FBILLNO");
summaryField1.Key = "FBILLNO";
summaryField1.EntityKey = string.Empty;
summaryField1.Field = new Field("FBILLNO");
filter.FilterParameter.SummaryRows.Add(summaryField1);
var summaryField2 = new Core.CommonFilter.SummaryField(new LocaleValue("物料"), "FMaterialName");
summaryField2.Key = "FMaterialName";
summaryField2.EntityKey = string.Empty;
summaryField2.Field = new Field("FMaterialName");
filter.FilterParameter.SummaryRows.Add(summaryField2);
// 设置分组字符串
filter.FilterParameter.GroupbyString = "FBILLNO,FMaterialName";
// 取数SQL
// FID, FEntryId, 编号、状态、物料、数量、单位、单位精度、单价、价税合计
string sql = string.Format(@"/*dialect*/
select t0.FID
,t1.FENTRYID
,t0.FBILLNO
,t0.FDate
,t0.FDOCUMENTSTATUS
,t2.FLOCALCURRID
,ISNULL(t20.FPRICEDIGITS,4) AS FPRICEDIGITS
,ISNULL(t20.FAMOUNTDIGITS,2) AS FAMOUNTDIGITS
,t1.FMATERIALID
,t1M_L.FNAME as FMaterialName
,t1.FQTY
,t1u.FPRECISION as FUnitPrecision
,t1U_L.FNAME as F