使用存储过程给简单账表取数原创
46人赞赏了该文章
7,310次浏览
编辑于2021年10月27日 08:34:50
说明:简单账表示例, 包含自定义过滤方案,存储过程取数,动态增加列。
步骤:
新建简单账表: 创建路径:新建--》选择新建--》空白对象--》简单账表
新建账表过滤框, 创建路径:新建--》选择继承--》BOS--》应用框架--》动态表单--》公共过滤
在账表过滤框,增加多选组织做参数,
把账表过滤框formId放到简单账表过滤窗口业务对象(报表)属性中,新建简单账表服务插件并注册,如下图
5,创建名称为Proc_SimpleReport_BillA的存储过程,带两个参数,分别为临时表名,组织集合:
6,账表插件中调用存储过程,和创建动态列
,7,运行结果
代码参考:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ComponentModel; using System.Data; using Kingdee.BOS.Contracts.Report; using Kingdee.BOS.Core.Report; using Kingdee.BOS.App.Data; using Kingdee.BOS.Util; using Kingdee.BOS.Orm.DataEntity; namespace Kingdee.BOS.TestPlugIn.BillFormPlugin { [HotUpdate] [Description("单据A分页帐表")] public class BillAReportPlugIn : SysReportBaseService { StringBuilder strOrgNames = new StringBuilder(); /// <summary> /// 得到汇总字段信息 /// </summary> /// <param name="filter"></param> /// <returns></returns> public override List<SummaryField> GetSummaryColumnInfo(IRptParams filter) { base.GetSummaryColumnInfo(filter); List<SummaryField> lstfield = new List<SummaryField>(); SummaryField sField = new SummaryField("F_KKK_Amount", Core.Enums.BOSEnums.Enu_SummaryType.SUM); lstfield.Add(sField); return lstfield; } /// <summary> /// 通过存储过程把数据灌入临时表中 /// </summary> /// <param name="filter"></param> /// <param name="tableName"></param> public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName) { DynamicObject dyFilter = filter.FilterParameter.CustomFilter;//快捷页签过滤条件 StringBuilder strOrgIds = new StringBuilder(); //组织内码集合 if (dyFilter["FMulOrganiztions"] != null) { var mulOrgObjs = dyFilter["FMulOrganiztions"] as DynamicObjectCollection; foreach (var orgObj in mulOrgObjs) { strOrgIds.Append(orgObj["FMulOrganiztions_Id"] + ","); var oObj = orgObj["FMulOrganiztions"] as DynamicObject; strOrgNames.Append(oObj["Name"] + ","); //组织名称 } } List<SqlParam> lstParam =new List<SqlParam>(); lstParam.Add(new SqlParam("@FTempName", DbType.AnsiString, tableName)); lstParam.Add(new SqlParam("@FOrgIds", DbType.AnsiString, strOrgIds.ToString())); DBUtils.ExecuteStoreProcedure(this.Context, "Proc_SimpleReport_BillA", lstParam); //调用存储过程 } /// <summary> /// 得到页面列表显示列头,动态增加列 /// </summary> /// <param name="filter"></param> /// <returns></returns> public override ReportHeader GetReportHeaders(IRptParams filter) { base.GetReportHeaders(filter); ReportHeader rHeader = new ReportHeader(); rHeader.AddChild("FBillNo", new LocaleValue("单据编号")); rHeader.AddChild("FOrgName", new LocaleValue("组织名称")); rHeader.AddChild("FMaterialName", new LocaleValue("物料名称")); rHeader.AddChild("F_KKK_BaseQty", new LocaleValue("数量")); rHeader.AddChild("F_KKK_Amount", new LocaleValue("金额")); var arrOrgName= strOrgNames.ToString().Split(','); foreach (var orgName in arrOrgName) //创建动态列, 列名一定要对应存储过程插入临时表中的列 { rHeader.AddChild(orgName, new LocaleValue(orgName)); } return rHeader; } } }
赞 46
46人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读