Foxtable(狐表)用户栏目专家坐堂 → 计算工时的难题,同一天多次出工,只计算一次。附例子


  共有9485人关注过本帖树形打印复制链接

主题:计算工时的难题,同一天多次出工,只计算一次。附例子

帅哥哟,离线,有人找我吗?
dark272710
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:190 积分:1445 威望:0 精华:0 注册:2011/6/17 6:33:00
计算工时的难题,同一天多次出工,只计算一次。附例子  发帖心情 Post By: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
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2180 积分:13810 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By:2012/3/30 10:02:00 [只看该作者]


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

 

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


 

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

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:190 积分:1445 威望:0 精华:0 注册:2011/6/17 6:33:00
  发帖心情 Post By:2012/3/30 10:50:00 [只看该作者]

谢谢,我先研究一下

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

 回到顶部
帅哥哟,离线,有人找我吗?
dark272710
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:190 积分:1445 威望:0 精华:0 注册:2011/6/17 6:33:00
  发帖心情 Post By: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

需要发个例子么?

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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

 回到顶部