以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  代码问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=12333)

--  作者:wgllvyue
--  发布时间:2011/8/30 10:43:00
--  代码问题

各位大家好小弟现在有个问题需要大家帮忙啊,

我做了一个工资管理系统,已经到结尾了,现在的问题是,我最后想做人分月统计,部门分月统计,两个表

其中个人分月统计和部门分月统计是根据工资考勤数据库的内容在年底的时候进行统计。(其中工资考勤库为狐表内数据表。)

我已经做了狐表的数据表个人分月统计和部门分月统计,并在打印窗口中设置了两个按钮,分别是个人分月统计和部门分月统计,(此时,我只是想统计出来就可以,不需要打印)并在相应的clink中设置了代码。我是个初学者自己写的代码,可是写完后总是报错不知道为什么,请各位帮我研究研究好吗,不知道我说的明白不明白,如果不明白请提问,帮帮忙吧。

我的窗口都是在对外工资表中做的

[此贴子已经被作者于2011-8-31 18:12:57编辑过]

--  作者:yangming
--  发布时间:2011/8/30 11:23:00
--  

工资库中增加一列"月份",字符型,并在此表的DataColChanged事件中加如下代码

 

Dim dr As DataRow =e.DataRow
If e.DataCol.Name ="日期" Then
    If dr.IsNull("日期") = False Then
        dr("月份") = MonthName(dr("日期").Month)
    Else
        dr("月份") = Nothing
    End If
End If

 

 

 

部门统计按钮代码:

 

DataTables("部门分月统计").DataRows.Clear()
Dim f As New Filler
 f.SourceTable = DataTables("工资考勤数据库") \'指定数据来源
 f.SourceCols = "部门" \'指定数据来源列
 f.DataTable = DataTables("部门分月统计") \'指定数据接收表
 f.DataCols = "部门" \'指定数据接收列
 f.Fill() \'填充数据
 For Each dc As DataCol In DataTables("部门分月统计").DataCols
     If dc.Name.EndsWith("月") Then
         For Each dr As DataRow In DataTables("部门分月统计").DataRows
             dr(dc.name) = DataTables("工资考勤数据库").Compute("Sum(实发工资)","月份 =\'" & dc.Name & "\' And 部门 = \'" & dr("部门") & "\'")
         Next
     End If
 Next

个人统计代码:

DataTables("个人分月统计").DataRows.Clear()
 Dim f As New Filler
 f.SourceTable = DataTables("工资考勤数据库") \'指定数据来源
 f.SourceCols = "工号,姓名" \'指定数据来源列
 f.DataTable = DataTables("个人分月统计") \'指定数据接收表
 f.DataCols = "工号,姓名" \'指定数据接收列
 f.Fill() \'填充数据
 For Each dc As DataCol In DataTables("个人分月统计").DataCols
     If dc.Name.EndsWith("月") Then
         For Each dr As DataRow In DataTables("个人分月统计").DataRows
      
             dr(dc.name) = DataTables("工资考勤数据库").Compute("Sum(实发工资)","月份 =\'" & dc.Name & "\' And 工号= \'" & dr("工号") & "\'")
       Next
     End If
 Next

 

建议你还是加个工号列,并以工号做为唯一标识,以工号做为关联列,万一你以后单位出现同名同姓的员工呢?以现在姓名列做标识,就会出错


[此贴子已经被作者于2011-8-30 11:29:33编辑过]

--  作者:wgllvyue
--  发布时间:2011/8/30 11:49:00
--  

好的,我先谢谢你啊,我去试试代码,有问题的话还得再帮忙啊

 


--  作者:wgllvyue
--  发布时间:2011/8/30 12:00:00
--  

谢谢啊,可以了,真是太牛了,佩服啊


--  作者:yangming
--  发布时间:2011/8/30 12:03:00
--  
以下是引用wgllvyue在2011-8-30 12:00:00的发言:

谢谢啊,可以了,真是太牛了,佩服啊

我们是同行,正好我原来也做过类似的统计表,所以直接拿来用了,呵,互相学习,共同进步!


--  作者:紙上不談兵
--  发布时间:2011/8/30 13:24:00
--  
[个人分月统计],[部门分月统计],两个表根本没存在的必要:交叉统计即可:

Dim b As New CrossTableBuilder("个人分月统计",DataTables("工资考勤库"))
b.HGroups.AddDef("序号") \'
b.HGroups.AddDef("部门") 
b.HGroups.AddDef("姓名") 
b.VGroups.AddDef("日期","{0}月") 
b.Totals.AddDef("实发工资") 
b.HorizontalTotal =True
b.VerticalTotal =True
b.Decimals =2
b.Build \'生成统计表
MainTable = Tables("个人分月统计") \'打开生成的统计表

--  作者:yangming
--  发布时间:2011/8/30 13:59:00
--  
以下是引用紙上不談兵在2011-8-30 13:24:00的发言:
[个人分月统计],[部门分月统计],两个表根本没存在的必要:交叉统计即可:

Dim b As New CrossTableBuilder("个人分月统计",DataTables("工资考勤库"))
b.HGroups.AddDef("序号") \'
b.HGroups.AddDef("部门") 
b.HGroups.AddDef("姓名") 
b.VGroups.AddDef("日期","{0}月") 
b.Totals.AddDef("实发工资") 
b.HorizontalTotal =True
b.VerticalTotal =True
b.Decimals =2
b.Build \'生成统计表
MainTable = Tables("个人分月统计") \'打开生成的统计表

是的,呵,但是各单位有各单位的要求,比如,我单位这张表中还有其它列,比如单项奖,年终奖,这些都是到年底才会有数据的,而且又是从其它的表中引用过来的,所以就要求有一个表存在,呵

[此贴子已经被作者于2011-8-30 14:01:04编辑过]