Foxtable(狐表)用户栏目专家坐堂 → 递归函数与权限问题


  共有10236人关注过本帖树形打印复制链接

主题:递归函数与权限问题

帅哥哟,离线,有人找我吗?
小猪鑫鑫
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:832 积分:5867 威望:0 精华:6 注册:2011/5/27 11:41:00
递归函数与权限问题  发帖心情 Post By:2012/8/4 9:02:00 [只看该作者]

狐爸:您好!我整理了一个小项目给您做测试用,在这项目中有三个表,一个[人事岗位配置表],用于设置公司中不同的部门与车间的岗位,并通过岗位编号标明了上下级关系;然后第二张表是[人事表],用于记录员工的身份信息,每一个员工都有一个岗位编号,从而每一个人都是有岗位的,同时每个岗位从[人事岗位配制表]中继承了他的领导,从而可以自动即时确定人与人之间的上下级关系,产生人事架构图;现在的问题在第三张表,第三张表是我们公司的出库明细表即领料表,里面有领料人的工号与岗位编号,现在我的需求是想通过窗口中的"加载我的下属的记录"这么一个按键,来实现这么一个功能,任何人登录系统,如果他没有直接下属的话,则点击这个按键只能加载他自己的记录,有下属的人登录,则即加载自己的记录也可以加载自己直接下属的记录(同时包括直接下属的直接下属的记录),以此类推,也就是自己能加载自己与自己的所有直接下属信息; 


图片点击可在新窗口打开查看此主题相关图片如下:clip_image002.jpg
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:架构.zip

   

工号

姓名

岗位编号

班组

职务

岗位

密码

01600

张丽华

SB01_11

 

部长

设备部部长

888

01029

钟正方

SB14_21

纺纱组

主管

纺纱主管

888

01367

周明元

SB16_31

纺纱组

班长

前纺机修班长

888

01539

金远富

SB21_31

纺纱组

班长

织布机修班长

888

比如说用上面的01367登录系统,则点击"加载按扭"能加载出前纺机修班长及前纺机修班中所有机修的领料情况,如用01029主管的工号登录,则可以加载出主管自己以及前纺机修班长,织布机修班长以及他们的下属的资料,,如我用01600部长的身份登录,则可以加载设备部的所有人的资料了,这样我们就可以方便职能审批,互不影响了

请狐爸赐教,所有的密码都是888,谢谢狐爸


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/8/4 13:34:00 [只看该作者]

做来做去无非就是加载条件:

  你可以利用登录的用户名  去登录表查询 岗位 职位等信息  找到后按照这个条件找其他信息加载.

 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2012/8/4 13:44:00 [只看该作者]

岗位编号看不出他们之间的上下级关系· 所以单从这个表是无法实现的。。。

 回到顶部
帅哥哟,离线,有人找我吗?
小猪鑫鑫
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:832 积分:5867 威望:0 精华:6 注册:2011/5/27 11:41:00
  发帖心情 Post By:2012/8/4 14:40:00 [只看该作者]

两位大佬:今天有事出去了,没有及时看到,回复较晚,见谅!

这个问题不是一个简单的加载问题,它是一个新的按上下级关系进行加载然后进行权限处理的问题,上下级关系在[人事岗位配置表]中已经设置好了(领导字段列),我的一个想法是有一个全局变量,将每一个登录的人按其岗位编号将其属下的岗位编号生成一个集,然后在加载时利用这个变量集,但我不会做,因为一个岗位编号下,会有几个下属,同时下属下面还有他的下属,最多的有6层关系,怎么样得到这个变量,我不会,所以恳请狐爸帮我!

我坚信这个问题能得到解决,对foxtable的权限控制绝对是一个有力的支持与提高,同时这种权限控制对一些特定的审批将会简化很多很多,因为你加载的只有你自己与你的下属,每个人都是一样,这样就归口管理及审批了.因为一个公司有很多部门,也就有很多部门经理,每个部门经理下面又有不同的主管,班长等,普通的人事表中是没有体现这种上下级关系的,所以在权限审批时,只有层级的概念,经理大过主管,主管大过班长,但有时生产部门的班长的情况并不想销售部门的经理来处理,所以我相信,我的这种需求一定是有人需要的,只不过大家不会表达

狐爸:请帮我看看,谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2012/8/4 17:12:00 [只看该作者]

打开你的项目后发现可以解决:

 

1、XR人事表· 筛选代码前 ·   用下面代码取得所有下级的‘岗位编号’后就可以筛选出所有下级了:

Dim s As String
drs = DataTables("XR人事岗位配置表").Select("[领导] = '" & CurrentTable.current("岗位编号") & "'")

 

2、XR人事岗位配置表·中你那个“领导”列设计的不好,不能自动得到! 你可以参考一般会计软件中的会计科目的代码方式。这样就可以不用“领导”列了,只要“岗位编号”就行了,而且筛选下级时轻而易举···

 



 回到顶部
帅哥哟,离线,有人找我吗?
小猪鑫鑫
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:832 积分:5867 威望:0 精华:6 注册:2011/5/27 11:41:00
  发帖心情 Post By:2012/8/4 17:26:00 [只看该作者]

mr725狐神:谢谢您的回复,但还是有问题

1、通过您的这种取岗位编号的方法,只能选出当前领导的直接下属,而不能把其直接下属的直接下属提取出来,与我的需求不同,我要的是有层级的,包括自己及自己以下的所有岗位;

2、第二点我不是很明白怎么做,是否可以提供一个简单的案例,因为设置领导例是为了完成组织架构图而来的,是否有其它的方法即能得到组织架构图,又能轻松得到我的需求的,当然最好了,请狐神赐教!

 


 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2012/8/4 18:19:00 [只看该作者]

1、按你这种设计,下下级的取得要重复用select来完成,太麻烦了··· 也就是把上一个select中的所有“领导”都当着本次select里的“岗位编号”···  这样套嵌6次或更多,将严重影响速度。

 

2、其实就是系统自带例子中的‘会计科目.Table’,就是一级、二级、三级 ····1001、100101、10010101···  你的岗位编号应该这样编,筛选时就容易了 只要【like ‘1001*’】它的下级就全出来了。

[此贴子已经被作者于2012-8-4 18:23:08编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2012/8/4 19:44:00 [只看该作者]

仔细看了你的项目,这样也可以实现:

 

1、增加几个全局变量 “dlz ”  (vars("dlz")

2、在用户登陆窗口的“UserName”控件的SelectedIndexChanged事件中增加一行:vars("dlz") = dr("姓名")

3、在出库明细窗口的“加载我的下属记录”按钮中设置代码:
Dim fr As DataRow
fr = DataTables("XR人事表").Find("姓名 = '" & vars("dlz") & "' ")
Dim drs As List(Of DataRow)
Dim s As String
drs = DataTables("XR人事岗位配置表").Select("[领导] = '" & fr("岗位编号") & "'")
For Each dr As DataRow In drs
    s = s & "'" & dr("岗位编号") & "'"  & ","
Next
s = "(" & s.trim(",") & ")"

DataTables("wl出库明细表").LoadFilter="岗位编号 in " & s & " "
DataTables("wl出库明细表").load

 


 回到顶部
帅哥哟,离线,有人找我吗?
小猪鑫鑫
  9楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:832 积分:5867 威望:0 精华:6 注册:2011/5/27 11:41:00
  发帖心情 Post By:2012/8/4 21:31:00 [只看该作者]

额的神:您还在吗?您给我的代码运行后显示,“未将对象引用设置到对象的实例”,不知为什么?请指点;同时我原本已设了全局代码_UserGroup为登录人的岗位编号,同时您的变量S最后还是没包含下属的下属啊,请再帮我看看,谢谢您!

 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2012/8/4 21:41:00 [只看该作者]

,“未将对象引用设置到对象的实例”

s = "(" & s.trim(",") & ")"   前面加个判断:if s > ""


 回到顶部
总数 13 1 2 下一页