以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]自定义函数或递归问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99356) |
||||
-- 作者:aidimeng -- 发布时间:2017/4/17 23:43:00 -- [求助]自定义函数或递归问题 有这样一个人员架构 会员编号 上一级 下一级左 下一级右
简单画了个人员拓扑图
每个圆圈代表一个人员,现在想计算 图中每个圆圈下 左右两分支的总和,
想用自定义函数,但是 实在不知道怎么处理,希望高手给于帮助
[此贴子已经被作者于2017/4/18 9:38:27编辑过]
|
||||
-- 作者:狐狸爸爸 -- 发布时间: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 |
||||
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2017/4/18 13:18:00 -- 执行了 没结果,递归方法需要有两个返回值 |
||||
-- 作者:aidimeng -- 发布时间: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 |
||||
-- 作者:有点蓝 -- 发布时间:2017/4/18 14:12:00 -- 没看懂你的问题。截图说明最终结果是怎么样的 |
||||
-- 作者:aidimeng -- 发布时间:2017/4/18 14:20:00 --
以黄色圆为例: 1、目标是 计算黄色圆 累积_A 与累积_B 的值, 2、计算过程:计算黄色圆左边分支的时候 是 黄色圆 的 累积_A+ 蓝色圆(含本身)以下的 累积_A+ 累积_B 的和。 右边同理 [此贴子已经被作者于2017/4/18 14:24:26编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2017/4/18 14:36:00 -- 依然糊涂。到工资表手工整个最终计算结果看看 |
||||
-- 作者:aidimeng -- 发布时间:2017/4/18 14:56:00 --
画的不好,我的qq281706265 |
||||
-- 作者:aidimeng -- 发布时间:2017/4/18 18:35:00 -- 我手画下 表 您帮我看下吧 谢谢 |