以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  递归函数与权限问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=22152)

--  作者:小猪鑫鑫
--  发布时间: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
--  发布时间:2012/8/4 13:34:00
--  
做来做去无非就是加载条件:

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

--  作者:mr725
--  发布时间:2012/8/4 13:44:00
--  
岗位编号看不出他们之间的上下级关系· 所以单从这个表是无法实现的。。。
--  作者:小猪鑫鑫
--  发布时间:2012/8/4 14:40:00
--  

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

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

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

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


--  作者:mr725
--  发布时间:2012/8/4 17:12:00
--  

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

 

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

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

 

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

 



--  作者:小猪鑫鑫
--  发布时间:2012/8/4 17:26:00
--  

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

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

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

 


--  作者:mr725
--  发布时间: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
--  发布时间: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

 


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

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

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