金蝶K3定时作业自动设置数据权限控制

金蝶K3虽然有地方设置基础数据的查询修改删除权限,如图:

但当数据量多时候,一个一个得勾选,工作量太大了。且每当新增一个物料或者客户都要去设置一遍,工作量大。 故先想到在创建物料或客户时用触发器来自动触发, 但当用户数过多的时候触发器会很慢,拖卡系统。所以决定用定时任务处理。

一、先在物料或者客户上增加一个属性用来标识,我是增加一个所示公司属性,我是增加一个所属公司属性,设置为必填,如图:

 二、建两个用户组,对这两个用户组分别设置数据权限,如果有多组权限,就要多建用户组。并让相对赢的用户加入到该用户组。

三、用SQL Server Profiler跟着两个组对应的ID和查询 修改 删除权限的ID,因为每个账套生产的ID不同,所以要跟踪。 我跟踪得到如下语句:

--取消授权
  Update Access_t_ICItem Set 
FDataAccessView=
SubString(FDataAccessView,1,8)+Convert(binary(1),SubString(FDataAccessView,9,1) & 191)+SubString(FDataAccessView,10,91) ,
FDataAccessEdit=
SubString(FDataAccessEdit,1,8)+Convert(binary(1),SubString(FDataAccessEdit,9,1) & 191)+SubString(FDataAccessEdit,10,91) ,
FDataAccessDelete=
SubString(FDataAccessDelete,1,8)+Convert(binary(1),SubString(FDataAccessDelete,9,1) & 191)+SubString(FDataAccessDelete,10,91) 

 --授权 
 
 Update Access_t_ICItem Set FDataAccessView=
SubString(FDataAccessView,1,8)+Convert(binary(1),SubString(FDataAccessView,9,1) | 64)+SubString(FDataAccessView,10,91) ,
FDataAccessEdit=
SubString(FDataAccessEdit,1,8)+Convert(binary(1),SubString(FDataAccessEdit,9,1) | 64)+SubString(FDataAccessEdit,10,91),
FDataAccessDelete=
SubString(FDataAccessDelete,1,8)+Convert(binary(1),SubString(FDataAccessDelete,9,1) | 64)+SubString(FDataAccessDelete,10,91) 

其中FDataAccessView 是查询权限;FDataAccessEdit 是编辑权限;FDataAccessDelete 是删除权限。后面跟的数据是K3代码逻辑生产的。 我现在只要加上where条件 即可

 where     ( FItemID  in (select FItemID from   t_ICItem  where  F_108=2)   
           or FItemID  in (select FParentID from   t_ICItem  where  F_108=2)  
            or FItemID  in (  select  FParentID from  t_Item  where  FItemClassID=4  and FItemID in( select FParentID from   t_ICItem  where  F_108=2))  
            or FItemID  in ( select  FParentID from  t_Item  where  FItemClassID=4  and FItemID in( select  FParentID from  t_Item  where  FItemClassID=4  and FItemID in( select FParentID from   t_ICItem  where  F_108=2)))
            or FItemID  in ( select  FParentID from  t_Item  where  FItemClassID=4  and FItemID in( select  FParentID from  t_Item  where  FItemClassID=4  and FItemID in( select  FParentID from  t_Item  where  FItemClassID=4  and FItemID in( select FParentID from   t_ICItem  where  F_108=2))))
             or FItemID  in ( select  FParentID from  t_Item  where  FItemClassID=4  and FItemID in( select  FParentID from  t_Item  where  FItemClassID=4  and FItemID in( select  FParentID from  t_Item  where  FItemClassID=4  and FItemID in( select  FParentID from  t_Item  where  FItemClassID=4  and FItemID in( select FParentID from   t_ICItem  where  F_108=2)))))
          ) and FItemID>0

 说明F_108 是我在物料增加属性对应的字段,如果是 对客户设置权限那t_ICItem 就改成  表t_Supplier即可。完整代码入附件

四、把语句放到sqlserver的作业上即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值