存货核算报表二开增加基础资料数据权限隔离原创
金蝶云社区-飞龙在天V
飞龙在天V
3人赞赏了该文章 815次浏览 未经作者许可,禁止转载编辑于2020年11月17日 11:08:20

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

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

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

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

1.png

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

2.png

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

3.png

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

4.png

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

5.jpg

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

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

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

7.png

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

6.jpg

       上面步骤完成之后,把开发的的组件放入安装目录\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;
        }
    }
}
图标赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0