金蝶云星空简单账表动态列名汇总
迪丽瓦拉
2024-02-17 09:31:00
0

简单账表基础链接

序言:

本文章是Bos金蝶云星空开发简单账表的进阶版。之前有个小伙伴说不知道怎么汇总动态列数据,一两句话讲不清楚,写下这篇文章。

思路:

1.动态列来自数据库,用公共容器把他存储起来。
2.在汇总方法里面,循环公共容器,达到动态汇总效果。

部分代码案例:

因为代码源来自于自己写的项目,所以不能全列出来,这里只摘取部分代码信息。

第一步:
声明公共容器,放在类里面,方法外面。
DynamicObjectCollection list;

第二步:
获取所有动态列,存储在list容器中

string CustomerSql = string.Format(@"/*dialect*/ select distinct Customer from MainData order by Customer");
list = DBUtils.ExecuteDynamicObject(this.Context, CustomerSql);

第三步:
StringBuilder str拼接查询语句,用子查询的方式,如“select (select Name from Tab) Name from Tab”;这样Name就是列名,而我们将列名Name替换成item[“Customer”]。

foreach (var item in list) {
str.Append($" ,(select Convert(int,isnull(sum(FREALQTY),0)) FREALQTY from MainData b where Substring(Convert(char(7),b.FDate,120),6,2) = a.theMonth and FFORBIDSTATUS = ‘A’ and Customer = ‘{item[“Customer”].ToString()}’) {item[“Customer”]}");
}

第四步:
汇总方法里遍历列名:

public override List GetSummaryColumnInfo(IRptParams filter)
{

var result = base.GetSummaryColumnInfo(filter);
foreach(var item in list){result.Add(new SummaryField(item["Customer"], Kingdee.BOS.Core.Enums.BOSEnums.Enu_SummaryType.SUM));
}return result;

}

相关内容