电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

账表二开(如何将现有列作为过滤条件)

来源:金蝶云社区作者:金蝶2024-09-163

账表二开(如何将现有列作为过滤条件)

账表二开(如何将现有列作为过滤条件) 

我们在对账表进行二开添加字段的时候,可能会有将现有列作为过滤条件的需求

(不知道怎么二开的小伙伴可以看一下这位老师的帖子:报表二次开发添加自定义字段的指导方案 (kingdee.com)

补充一点小知识:星空系统里面有些账表比较特殊,我们在进行二开的时候如果遇到列不显示的问题记得要重载

public override ReportHeader GetReportHeaders(IRptParams filter)  方法)

例如:我要将 销售订单执行明细表 的 应收数量 作为筛选条件

image.webp

首先,我们找到bos里面对应的字段名称

image.webp

然后在过滤框里面添加字段

image.webp

我们要知道,条件过滤是存在于下面这个属性里面的,并且系统会帮我们拼接好,我写的时候以为到这一步就大功告成了,但事实并没有我想象的那么简单

filter.FilterParameter.FilterString;//条件过滤

我在注册测插件后就遇到了一个报错

先选择应收数量等于一的条件

image.webp

当我点击执行的时候出现报错

image.webp

在我感到疑惑的时候我决定去数据库里面看看到底有没有这一列

image.webp

显而易见它是存在的,至于为什么会报错,我猜测可能是条件是在生成临时表之前执行的,导致报错,具体原因,如果有大佬知道还请赐教!!

那么我们即想要系统生成的条件过滤的字符串,又不想要报错该怎么办呢

我的解决方案如下:

            string b =  filter.FilterParameter.FilterString;//条件过滤(将条件过滤字符串赋值给变量)
            filter.FilterParameter.FilterString = "";//将原有的条件清除防止报错
            base.BuilderReportSqlAndTempTable(filter, strTable);//生成原有报表(旧表的生成)
            
            string c = $" where 1=1 ";
            if (b != null&&!string.IsNullOrWhiteSpace(b))
                c += $"and {b}";//拼接过滤条件
            List<SqlParam> lstParam = new List<SqlParam>();


            lstParam.Add(new SqlParam("@oldtablename", KDDbType.String, strTable));

            lstParam.Add(new SqlParam("@newtablename", KDDbType.String, tableName));
            lstParam.Add(new SqlParam("@File", KDDbType.String, c));

            DBUtils.ExecuteStoreProcedure(this.Context, "SAL_detailReportdemo", lstParam); //调用存储过程 生成新表

这样就可以完美解决问题。

示例如下:

using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.K3.SCM.App.Sal.Report;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;

namespace XLx_HTS_Report
{
    [Description("销售订单执行明细表扩展")]
    [HotUpdate]
    public class Class2 : SalDetailRpt
    {
        public string[] oldTableList;
        public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
        {
            IDBService dBService = Kingdee.BOS.App.ServiceHelper.GetService<IDBService>();
            oldTableList = dBService.CreateTemporaryTableName(this.Context, 1);
            string strTable = oldTableList[0];
            DynamicObject customFilter = filter.FilterParameter.CustomFilter;//快捷过滤
           
            
            string b =  filter.FilterParameter.FilterStr

账表二开(如何将现有列作为过滤条件)

账表二开(如何将现有列作为过滤条件) 我们在对账表进行二开添加字段的时候,可能会有将现有列作为过滤条件的需求(不知道怎么二开的小伙...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信