报表过滤条件选择分组,查询所有下级分组的数据
案例
物料收发汇总表,过滤条件选择 "分组 等于 XX",需要查出XX分组及其下级分组的所有数据
思路
假设XX分组有A、B、C、D 4个下级分组,在系统组建sql之前,把过滤条件替换掉,将 "分组 等于 XX" 改为 "分组 in XX,A,B,C,D"
实现
3.1 找到仓库分组的表:
3.2 为"物料收发汇总表过滤框"写个插件,继承 AbstractCommonFilterPlugIn,重写 OnParseSetting 方法。代码如下,关键点见代码注释:
using Kingdee.BOS.Core.CommonFilter.PlugIn;
using System.Linq;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.CommonFilter.PlugIn.Args;
using Kingdee.BOS.App.Data;
using Kingdee.BOS;
namespace X.Study.Plugin
{
public class StockSummaryFilterGroup : AbstractCommonFilterPlugIn
{
/// <summary>
/// 解析用户配置的过滤方案内容之后发生;
/// 用户配置的过滤方案,在解析之前,是描述性内容,必须解析出来,才能使用
/// 插件利用此事件,可以判断用户配置的方案是否合理,给出错误提示
/// </summary>
/// <param name="e"></param>
public override void OnParseSetting(OnParseSettingEventArgs e)
{
base.OnParseSetting(e);
foreach (var filterRow in CommonFilterModel.FilterObject.FilterRows)
{
if (filterRow.FilterField.FieldName == "FStockGroup")//过滤条件是仓库分组
{
if (filterRow.CompareType.Operate == "=")//比较符是等于
{
//替换比较符为in
//断点调试,观察 CommonFilterModel.FilterObject.FilterMetaData.CompareTypes,从中找到比较符 in 的id是338
filterRow.CompareType = CommonFilterModel.FilterObject.FilterMetaData.CompareTypes.FirstOrDefault(x => x.Id == "338");
//值改为仓库分组自身及所有下级
filterRow.Value = GetDescendantStockGroup(filterRow.Value);
}
}
}
}
/// <summary>
/// 查出仓库分组自身及所有下级
/// </summary>
/// <param name="stockName"></param>
/// <returns></returns>
private string GetDescendantStockGroup(string stockName)
{
string result = "";
//sqlserver方言,用cte实现递归查询
//仓库分组的表 T_BD_STOCKGROUP,对应多语言表 T_BD_STOCKGROUP_L
string sql = string.Format(@"/*dialect*/ with t as (
select p.FID,pl.FNAME from T_BD_STOCKGROUP p join T_BD_STOCKGROUP_L pl on p.FID=pl.FID and pl.FLOCALEID=2052 where pl.FNAME=@stockName
union all
select a.FID,al.FNAME from T_BD_STOCKGROUP a join t on a.FPARENTID=t.FID join T_BD_STOCKGROUP_L al on a.FID=al.FID and al.FLOCALEID={0}
) select * from t", this.Context.UserLocale.LCID);
using (var reader = DBUtils.ExecuteReader(this.Context, sql, new SqlParam("stockName", KDDbType.AnsiString, stockName)))
{
while (reader.Read())
{
result += reader.GetValue<string>("FNAME") + ",";
}
}
return result.TrimEnd(',');
}
}
}
3.3 配好插件:
3.4 试试效果:
【emoji】
报表过滤条件选择分组,查询所有下级分组的数据
本文2024-09-16 17:22:47发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-15335.html