以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]多表条件取值计算(已解决)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=22881)

--  作者:yyzlxc
--  发布时间:2012/8/26 15:34:00
--  [求助]多表条件取值计算(已解决)

根据数据表每个员工的每个月所在的部门和系数以及系数奖金表的部门系数奖金,在奖金明细表中填充每个员工每个月的奖金金额;

月奖金 = 所在部门的系数奖金 * 月系数

 

对从一张表条件提取数据进行计算的代码如下:

 

\'填充系数
For Each dr1 As DataRow In DataTables("数据").DataRows
    Dim pr As DataRow
    For i As Integer = 1 To 12
        If dr1.IsNull("职务_" & i)  Then
            dr1("系数_" & i) = Nothing
        Else
            pr = DataTables("设置").Find("职务 = \'"& dr1("职务_" & i) & "\'")
            If pr IsNot Nothing Then
                dr1("系数_" & i) = pr("系数") * dr1("考勤_" & i)
            Else
                dr1("系数_" & i) = Nothing
            End If
        End If
    Next
Next

 

但是要从两张表条件提取数据进行计算填充的代码不知如何写,请各位老师指教,谢谢!!

 

 


 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:管理项目177.table

[此贴子已经被作者于2012-8-29 9:28:37编辑过]

--  作者:czy
--  发布时间:2012/8/26 16:53:00
--  

很想帮你,可惜看不懂

 

以一条数据为例,说明详细的计算方法


--  作者:czy
--  发布时间:2012/8/26 17:16:00
--  

蒙一个

 

For Each dr As DataRow In DataTables("奖金明细").DataRows
    Dim dr1 As DataRow = DataTables("数据").Find("姓名 = \'" & dr("姓名") & "\'")
    If dr1 IsNot Nothing Then \'如果找到的话
        For Each dc As DataCol In DataTables("奖金明细").DataCols
            If dc.name <> "姓名" AndAlso dc.name <> "全年奖金"
                Dim dr2 As DataRow = DataTables("系数奖金").Find("部门 = \'" & dr1("部门_" & dc.Name.Split("_")(1)) & "\'")
                If dr2 IsNot Nothing Then \'如果找到的话
                    dr("奖金_" & dc.Name.Split("_")(1)) = dr2("系数奖金")*dr1("系数_" & dc.Name.Split("_")(1))
                End If
            End If
        Next
    End If
Next


--  作者:czy
--  发布时间:2012/8/26 17:18:00
--  

结果图

 

 


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

--  作者:yyzlxc
--  发布时间:2012/8/27 9:28:00
--  
谢谢czy老师的指教,计算的结果完全正确,但是因为以上案例进行了简化,实际的表还有很多列,希望将列dr("奖金_" & dc.Name.Split("_")(1))的表示形式改成dr("奖金_"& i)的For...Next循环语句,如何修改,请各位老师指教,再次感谢czy老师!!
--  作者:czy
--  发布时间:2012/8/27 9:47:00
--  
如果方便的话还是将整个文件传上来吧,你上面也看到了 dc.Name.Split("_")(1) ,象这种形式的取赋值有多处,而且两个表是对应的,如果贸然改了代码,两表不匹配会出错的。
[此贴子已经被作者于2012-8-27 9:47:03编辑过]

--  作者:yyzlxc
--  发布时间:2012/8/27 10:39:00
--  
谢谢czy老师的回复,对dc.Name.Split("_")(1)如何理解,请老师指教,谢谢!!
--  作者:狐狸爸爸
--  发布时间:2012/8/27 12:30:00
--  
以下是引用yyzlxc在2012-8-27 10:39:00的发言:
谢谢czy老师的回复,对dc.Name.Split("_")(1)如何理解,请老师指教,谢谢!!

 

http://www.foxtable.com/help/topics/1338.htm

http://www.foxtable.com/help/topics/0245.htm

 


--  作者:yyzlxc
--  发布时间:2012/8/27 13:13:00
--  

谢谢狐爸老师的回复,看了帮助文件关于Split的条文,对dc.Name.Split("_")(1)还是一知半解,个人觉得还是For...Next循环语句的条理比较清晰,能否将czy老师的代码改成For...Next循环语句的形式,还请各位老师赐教。


--  作者:yyzlxc
--  发布时间:2012/8/28 9:14:00
--  [求助]多表条件取值计算(五楼新要求)

重新上传案例,个人奖金表的奖金系数填充代码如下。

 

\'填充奖金系数
For Each dr1 As DataRow In DataTables("个人奖金").DataRows
    Dim pr As DataRow
    For i As Integer = 1 To 12
        If dr1.IsNull("姓名")  Then
            dr1("奖金明细_" & i &"_奖金系数") = Nothing
        Else
            pr = DataTables("个人数据").Find("姓名 = \'"& dr1("姓名")& "\'")
            If pr IsNot Nothing Then
                dr1("奖金明细_" & i &"_奖金系数") = pr("系数_" & i)
                If dr1("奖金明细_" & i &"_奖金系数") = 0 Then
                    dr1("奖金明细_" & i &"_奖金系数") = Nothing
                End If
            Else
                dr1("奖金明细_" & i &"_奖金系数") = Nothing
            End If
        End If
    Next
Next

 

求计算考核奖的代码,请各位老师指教,谢谢!!


计算方法:个人奖金表的“奖金明细_i_考核奖” = 个人数据表对应姓名的“部门_i”所对应系数奖金表部门的系数考核奖的值 * 个人奖金表的“奖金明细_i_奖金系数

 

 

案例重新上传,在12楼。
[此贴子已经被作者于2012-8-28 9:40:06编辑过]