以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  计算工时的难题,同一天多次出工,只计算一次。附例子  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=17986)

--  作者:dark272710
--  发布时间:2012/3/30 9:50:00
--  计算工时的难题,同一天多次出工,只计算一次。附例子

就输入了几行数据

目前的代码是,

点击生成,从表中读取数据(条件省略);
点击统计,计算每个员工姓名出现的次数,记作外勤数(已经做好)。


现在的问题是:可能当天一个员工会出现在好几个任务中,就会记作多次出勤,黑心老板说每天只能记作一次外勤

就是每天,每个人最多只能计1次外勤。水平有限……想不出了


代码在窗口的2个按钮里,大家帮忙看看~~谢谢了~~


Dim s,s1 As String
Dim n As Integer
Dim ls As New List(of String)
Dim dt As DataTable =DataTables("考勤_Table1")
For Each dr As DataRow In dt.Select("参与员工 Is Not null")
    For Each s In dr("参与员工").split(",")
        If Ls.Contains(s)= False Then
            Ls.Add(s)
        End If
    Next
Next

Dim t As Table =Tables("考勤")
t.StopRedraw
t.DataTable.DataRows.Clear
For Each s In ls
    s1 = "参与员工 like \'*" & s & "*\'"
    MessageBox.Show(s1)
    Return
    n =dt.Compute("count(参与员工)",s1)
    Dim r As Row =t.addnew
    r("姓名") = s
    r("次数") = n
Next
t.ResumeRedraw

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


[此贴子已经被作者于2012-3-30 9:49:51编辑过]

--  作者:sloyy
--  发布时间:2012/3/30 10:02:00
--  


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

 

呵呵 和我遇到的问题一样,就是如何按姓名统计的问题, 如图: 按姓名应该是1人,统计得出的却是2人, n =dt.Compute("count(参与员工)",s1) 只能得到人次 ,我也想知道答案.


 

[此贴子已经被作者于2012-3-30 10:11:57编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/3/30 10:18:00
--  

相当复杂:

 

 

Dim dic As New Dictionary(of Date,List(of String))
Dim dic2 As new Dictionary(of String,Integer)
For Each dr As DataRow In DataTables("表A").DataRows
    Dim dt As Date = dr("工程时间")
    Dim lst As List(of String)
    If dic.ContainsKey(dt) = False
        lst = new List(of String)
        dic.add(dt,lst)
    Else
        lst = dic(dt)
    End If
    Dim nms() As String = dr("参与员工").Split(",")
    For Each nm As String In nms
        If lst.Contains(nm) = False Then
            lst.Add(nm)
        End If
    Next
Next
For Each lst As List(of String) In dic.Values
    For Each nm As String In lst
        If dic2.ContainsKey(nm) = False Then
            dic2.Add(nm,1)
        Else
            dic2(nm) = dic2(nm) + 1
        End If
    Next
Next
For Each nm As String In dic2.Keys
    output.show(nm & ":" & dic2(nm))
Next


--  作者:dark272710
--  发布时间:2012/3/30 10:50:00
--  
谢谢,我先研究一下

如果还要判定周末的话,也可以参考这段代码吧

--  作者:dark272710
--  发布时间:2012/3/31 15:29:00
--  
抱歉。。狐爸给我的这段代码还是吃不透,本来想改进下,用来判定双休日工时的


我只有曲线救国,想要从生成的数据中删除非周末的数据,可是还是不行,达不到效果。麻烦看看,谢谢

For Each dr As DataRow In DataTables("考勤_Table1").DataRows
    Dim dt As String = dr("工程时间").DayOfWeek
    If dt <> 0 and dt <> 6 Then
        Tables("考勤_Table1").Current.Delete
    End If
Next

需要发个例子么?

--  作者:狐狸爸爸
--  发布时间:2012/3/31 16:23:00
--  
For Each i As integer =  DataTables("考勤_Table1").DataRows.Count -1 To 0 Step -1
    Dim dr AS DataRow = DataTables("考勤_Table1").DataRows(i)
    Dim dt As String = dr("工程时间").DayOfWeek
    If dt <> 0 and dt <> 6 Then
        dr.Delete
    End If
Next