Foxtable(狐表)用户栏目专家坐堂 → [求助]自定义函数或递归问题


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

主题:[求助]自定义函数或递归问题

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


加好友 发短信
等级:四尾狐 帖子:803 积分:7707 威望:0 精华:0 注册:2015/9/14 14:26:00
[求助]自定义函数或递归问题  发帖心情 Post By:2017/4/17 23:43:00 [只看该作者]

有这样一个人员架构

会员编号  上一级   下一级左  下一级右 

 

 

 

简单画了个人员拓扑图


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

 

每个圆圈代表一个人员,现在想计算 图中每个圆圈下 左右两分支的总和,

 

想用自定义函数,但是 实在不知道怎么处理,希望高手给于帮助


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

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.rar

[此贴子已经被作者于2017/4/18 9:38:27编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2017/4/18 9:55:00 [只看该作者]

做个按钮,代码:

Dim nms() As String = {"a","b"}
For Each r As DataRow In DataTables("员工信息表").DataRows
    For Each nm As String In nms
        Dim cnt As Integer = 0
        Dim tr As DataRow = r
        Do
            If tr.IsNull("下级_" & nm) = False Then
                cnt = cnt + 1
                tr = DataTables("员工信息表").Find("会员编号 = '" & tr("下级_" & nm) & "'")
                If tr Is Nothing Then
                    Exit Do
                End If
            Else
                Exit Do
            End If
        Loop
        r("累积_" & nm) = cnt
    Next
Next

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110815 积分:564019 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/4/18 10:25:00 [只看该作者]

使用递归

函数Chid

Dim dr As DataRow = Args(0)
Dim t As Table = args(1)
Dim sum As Integer = dr("对碰累积_A") + dr("对碰累积_B")
Dim drs As List(Of DataRow) = DataTables("员工信息表").Select("上级='" & dr("会员编号") & "'")
If drs.Count > 0 Then
    For Each dr2 As DataRow In drs
        sum += Functions.Execute("Chid",dr2,t)
    Next
End If
Dim rr As Row = t.AddNew
rr("会员编号")=dr("会员编号")
rr("累积业绩") = sum
Return sum

计算按钮事件
Tables("工资计算_table1").StopRedraw
For Each dr As DataRow In DataTables("员工信息表").Select("上级 is null")
    Functions.Execute("Chid",dr,Tables("工资计算_table1"))
Next
Tables("工资计算_table1").ResumeRedraw

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


加好友 发短信
等级:四尾狐 帖子:803 积分:7707 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2017/4/18 13:18:00 [只看该作者]

执行了 没结果,递归方法需要有两个返回值


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


加好友 发短信
等级:四尾狐 帖子:803 积分:7707 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2017/4/18 13:28:00 [只看该作者]

Dim dr As DataRow = Args(0)
Dim t As Table = args(1)
Dim sum As Integer = dr("对碰累积_A") + dr("对碰累积_B")
Dim drs As List(Of DataRow) = DataTables("员工信息表").Select("上级='" & dr("会员编号") & "'") -----集合中最多包含两个值
If drs.Count > 0 Then
    For Each dr2 As DataRow In drs  
          if  dr("下级_A")= dr2("会员编号")  then   ---计算dr("会员编号")A分支的和
        sum += Functions.Execute("Chid",dr2,t)
       endif
    Next
End If
Dim rr As Row = t.AddNew
rr("会员编号")=dr("会员编号")
rr("累积业绩") = sum
Return sum
-----函数需要两个返回值的
计算按钮事件
Tables("工资计算_table1").StopRedraw
For Each dr As DataRow In DataTables("员工信息表").Select("上级 is null")
    Functions.Execute("Chid",dr,Tables("工资计算_table1"))
Next
Tables("工资计算_table1").ResumeRedraw

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110815 积分:564019 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/4/18 14:12:00 [只看该作者]

没看懂你的问题。截图说明最终结果是怎么样的

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


加好友 发短信
等级:四尾狐 帖子:803 积分:7707 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2017/4/18 14:20:00 [只看该作者]


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

 

以黄色圆为例:

1、目标是 计算黄色圆 累积_A 与累积_B 的值,

2、计算过程:计算黄色圆左边分支的时候 是   黄色圆 的 累积_A+ 蓝色圆(含本身)以下的  累积_A+ 累积_B 的和。 右边同理

[此贴子已经被作者于2017/4/18 14:24:26编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110815 积分:564019 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/4/18 14:36:00 [只看该作者]

依然糊涂。到工资表手工整个最终计算结果看看

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


加好友 发短信
等级:四尾狐 帖子:803 积分:7707 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2017/4/18 14:56:00 [只看该作者]


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

画的不好,我的qq281706265


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


加好友 发短信
等级:四尾狐 帖子:803 积分:7707 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2017/4/18 18:35:00 [只看该作者]

我手画下 表 您帮我看下吧  谢谢

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