以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]按“月工资”表的指定条件从“年度工资”表中汇总数据的代码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=133201)

--  作者:hanzhang98
--  发布时间:2019/4/9 15:40:00
--  [求助]按“月工资”表的指定条件从“年度工资”表中汇总数据的代码
老师好。新的代码问题,小白请老师帮助。

      就是想:按“月工资”表的【工号“截取后8位” + 姓名】为查找汇总条件,从“年度工资”表中查找符合条件的所有记录,统计“出现的次数”、汇总“养老保险”、“医疗保险”、“住房公积”、“扣个税”四列,将汇总的各列数据和出现次数分别写入“月工资”表的“养老保险”、“医疗保险”、“住房公积”、“扣个税”‘、“计发期数”五列。
请老师帮助。谢谢

[此贴子已经被作者于2019/5/6 17:28:53编辑过]

--  作者:y2287958
--  发布时间:2019/4/9 17:21:00
--  
For Each dr As DataRow In DataTables("月工资").DataRows
    Dim filter As String = "SubString(工号,11,8)=\'" & right(dr("工号"),8) & "\' and 姓名=\'" & dr("姓名") & "\'"
    Dim drs As List(of DataRow) = DataTables("年度工资").Select(filter)
    dr("养老保险") = DataTables("年度工资").Compute("Sum(养老保险)",filter)
    dr("计发期数") = drs.Count
Next

其他类同

--  作者:hanzhang98
--  发布时间:2019/4/9 17:49:00
--  
谢谢老师。按您的代码已实现我想要的效果。但还是加入“扣个税”这一列的代码【dr("扣个税") = DataTables("年度工资").Compute("Sum(扣个税)",filter)】后还是出错。提示如前。

代码和其它代码一样是复制修改的,但单这一行出错。找不出错误原因,还请老师帮助。谢谢。



[此贴子已经被作者于2019/5/6 17:29:20编辑过]

--  作者:有点甜
--  发布时间:2019/4/9 18:45:00
--  

表达式列,无法直接写代码赋值。请改成数据列

 

http://www.foxtable.com/webhelp/scr/2494.htm

 


--  作者:hanzhang98
--  发布时间:2019/4/9 19:28:00
--  
甜老师好。下面我这样套改“y2287958”老师的代码对不对。请老师指正。

再就是,总共才100来行数据,代码执行了有3分钟左右,这样正常吗。
再请教老师,能将代码改为在窗口的“按钮”点击事件执行吗。谢谢。


[此贴子已经被作者于2019/5/6 17:30:05编辑过]

--  作者:有点蓝
--  发布时间:2019/4/9 20:24:00
--  
这种用法一般不放在表事件中,放到按钮中

如果是表事件就不需要遍历了:
Select Case e.DataCol.Name
    Case "工号", "姓名"
        dim dr =e.DataRow
        Dim filter As String = "SubString(工号,11,8)=\'" & right(dr("工号"),8) & "\' and 姓名=\'" & dr("姓名") & "\'"
        dr("累计养老保险") = DataTables("薪资累计库").Compute("Sum(养老保险)",filter)
        dr("累计医疗保险") = DataTables("薪资累计库").Compute("Sum(医疗保险)",filter)
        dr("累计大病统筹") = DataTables("薪资累计库").Compute("Sum(大病统筹)",filter)
        dr("累计失业保险") = DataTables("薪资累计库").Compute("Sum(失业保险)",filter)
        dr("累计住房公积") = DataTables("薪资累计库").Compute("Sum(住房公积)",filter)
        dr("累计企业年金") = DataTables("薪资累计库").Compute("Sum(企业年金)",filter)
        dr("累计子女教育") = DataTables("薪资累计库").Compute("Sum(子女教育)",filter)
        dr("累计继续教育") = DataTables("薪资累计库").Compute("Sum(继续教育)",filter)
        dr("累计大病医疗") = DataTables("薪资累计库").Compute("Sum(大病医疗)",filter)
        dr("累计房贷利息") = DataTables("薪资累计库").Compute("Sum(房贷利息)",filter)
        dr("累计住房租金") = DataTables("薪资累计库").Compute("Sum(住房租金)",filter)
        dr("累计赡养老人") = DataTables("薪资累计库").Compute("Sum(赡养老人)",filter)
        dr("累计入井津贴") = DataTables("薪资累计库").Compute("Sum(井下津贴金额)",filter)
        dr("累计夜班津贴") = DataTables("薪资累计库").Compute("Sum(夜贴金额)",filter)
        dr("累计公务车补") = DataTables("薪资累计库").Compute("Sum(车补金额)",filter)
        dr("累计已预扣预缴税额") = DataTables("薪资累计库").Compute("Sum(扣缴税额)",filter)
        dr("累计期数") = drs.Count
End Select
[此贴子已经被作者于2019/4/9 20:24:11编辑过]

--  作者:hanzhang98
--  发布时间:2019/4/9 20:46:00
--  
蓝老师好。我已按老师指导将代码放入窗口的按钮中执行,速度就快多了。

再请教老师,我想改为截取最后的11位(我这里的“工号”总长是18位,上面是我写错了),要怎样修改。谢谢老师。
[此贴子已经被作者于2019/5/6 17:31:01编辑过]

--  作者:有点蓝
--  发布时间:2019/4/9 20:54:00
--  
Dim filter As String = "SubString(工号,8,11)=\'" & right(dr("工号"),11) & "\' and 姓名=\'" & dr("姓名") & "\'"
--  作者:hanzhang98
--  发布时间:2019/4/9 21:18:00
--  
谢谢老师帮助。老师给的代码中的“8,11”,是“从第8位开始截取11位”的意思吗。那原来代码的“11,8”的意思就是“从第11位开始截取8位”的意思了。请老师指教。谢谢
--  作者:有点蓝
--  发布时间:2019/4/9 21:26:00
--  
是的,学习下帮助,有说明:http://www.foxtable.com/webhelp/scr/0102.htm