存货核算报表二开增加基础资料数据权限隔离

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

存货核算报表二开增加基础资料数据权限隔离

       存货核算模块的报表由于基础资料数据权限隔离的需求不普遍和数据完整性问题(例如如果隔离了仓库数据,用户看核算明细报告一个物料维度的计算过程时,一部分仓库数据没有的话,核算过程数据就不连贯,完全看不明白,或者看内部调拨单据时,只能看到一边仓库数据,不统计组织内调拨时数据都会对不上等等),标准产品默认都没有添加数据权限隔离。如果有对存货报表数据权限隔离的需求话,可以按照以下方案进行二开处理。

       本文以存货收发存汇总表添加物料和仓库数据隔离为例,来详细介绍存货核算报表二开添加数据隔离。以下内容需要有简单的BOS IDE操作基础和C#语言基础。

       一、用管理员登陆系统,在数据规则中新增仓库和物料的规则设置(如果已经有适用设置的规则,此步骤可跳过)。

       1、按仓库编码设置过滤数据,也可以按其他仓库信息过滤

1.webp

       2、如果需要按照仓库分组过滤,可以在分组规则中设置

2.webp

       3、物料编码按左包含设置数据过滤,也可以在此设置存货类别等其他物料属性的过滤

3.webp

       二、用管理员登陆系统,在业务对象功能授权中选择需要授权的角色,选择到业务对象“存货收发存汇总表”,在基础资料权限中,设置物料编码和仓库的数据范围,选择步骤一种设置的数据规则(此处只支持设置BOS IDE中报表配置的基础资料字段)。

4.webp

       三、添加报表服务端插件,插件需继承存货收发存汇总表标准服务端插件Kingdee.K3.FIN.HS.App.Report.InOutStockSummaryService。(标准插件可以通过打开BOS IDE 存货收发存汇总表,查看服务器插件获取)。

5.webp

       四、重写方法BuildFilterSQL,在执行标准插件方法之后,二开方法添加基础资料权限隔离。

       通过前面几步骤的配置,当登陆的用户包含设置的角色时,在插件filter.BaseDataTempTable中会包含对应基础资料符合权限过滤的数据,通过这个数据表就可以实现基础资料的权限隔离。

       详细代码如下图(代码在文章最后):

7.webp

       五、BOS IDE 拓展存货收发存报表,修改服务器插件,反启用标准插件,注册上述添加的二开插件类。

6.webp

       上面步骤完成之后,把开发的的组件放入安装目录\Kingdee\K3Cloud\WebSite\bin目录下,重启IIS,报表添加基础资料权限隔离就完成了。

      

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Kingdee.BOS.Core.Report;

namespace Kingdee.K3.FIN.HS.App.Report
{
    [Description("存货收发存汇总表服务插件--二开增加基础资料权限隔离")]
    public class KDS_InOutStockSummaryService : InOutStockSummaryService
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="isAdjust"></param>
        /// <returns></returns>
        protected override string BindFilterSQL(IRptParams filter, bool isAdjust = false)
        {
            string basefilter = base.BindFilterSQL(filter, isAdjust);
            if (filter.BaseDataTempTable != null && filter.BaseDataTempTable.Count > 0)
            {
                StringBuilder bdFilter = new StringBuilder();
                // 仓库隔离
                var stockTemp = filter.BaseDataTempTable.FirstOrDefault(i => i.BaseDataFormId == "BD_STOCK");
                if (stockTemp != null)
                {
                    bdFilter.AppendFormat(" and STOCK.FSTOCKID in (select {0} from {1}) ", stockTemp.PKFieldName, stockTemp.TempTable);
                }
                // 物料隔离
                var materialTemp = filter.BaseDataTempTable.FirstOrDefault(i => i.BaseDataFormId == "BD_MATERIAL");
                if (materialTemp != null)
                {
                    bdFilter.AppendFormat(" and MAT.FMATERIALID in (select {0} from {1}) ", materialTemp.PKFieldName, materialTemp.TempTable);
                }
                basefilter = basefilter + bdFilter.ToString();
            }

            return basefilter;
        }
    }
}

存货核算报表二开增加基础资料数据权限隔离

存货核算模块的报表由于基础资料数据权限隔离的需求不普遍和数据完整性问题(例如如果隔离了仓库数据,用户看核算明细报告一个物...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息