使用存储过程给简单账表取数原创
金蝶云社区-eris
eris
46人赞赏了该文章 7,310次浏览 未经作者许可,禁止转载编辑于2021年10月27日 08:34:50

说明:简单账表示例, 包含自定义过滤方案,存储过程取数,动态增加列。

步骤:

  1. 新建简单账表: 创建路径:新建--》选择新建--》空白对象--》简单账表image.png

  2. 新建账表过滤框, 创建路径:新建--》选择继承--》BOS--》应用框架--》动态表单--》公共过滤

    image.png

  3. 在账表过滤框,增加多选组织做参数,

    image.png

  4. 把账表过滤框formId放到简单账表过滤窗口业务对象(报表)属性中,新建简单账表服务插件并注册,如下图

image.png

5,创建名称为Proc_SimpleReport_BillA的存储过程,带两个参数,分别为临时表名,组织集合:

image.png

6,账表插件中调用存储过程,和创建动态列

image.png

,7,运行结果

  image.png


代码参考:

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人打赏
还没有人打赏,快来当第一个打赏的人吧!