请见示范文件:
星期几=0时为星期天,上周6天(星期天为第1天)请假工时合计小于8小时,本星期天带薪工时为8.
星期几=8时为节假日,前1天或后1天出勤工时>=8小时,或前1天或后1天带薪工时=8小时,本节假日带薪工时为8.
[此贴子已经被作者于2010-3-25 0:24:01编辑过]
呵呵,你这个超出技术支持的范畴了,等于是要我直接帮你设计程序了。
既然条件清楚,你应该自己写代码。
写的过程中遇到问题再说,例如知道某一日期,如何求得该日期上一周的起始日和终止日的,以及本周的起始日和终止日,这样的问题大家会乐意回答的。
[此贴子已经被作者于2010-3-25 0:32:12编辑过]
写代码水平太低,都是那帮助和坛友的样品进行改装,比如星期几列的代码,我就是根据以前的代码改编的,像我现在的带薪工时列求值这个问题,我还没找到示范,没办法改编,要不帮我做一段,其他我在依葫芦画瓢,到时有困难在请教好吗,谢谢
我写了一个流程语句,不知道理解的对不对?
Dim dt As DataTable = DataTables("考勤")
For Each dr As DataRow In dt.DataRows
Dim d1 as Date = dr("日期")
if d1.dayofweek = 0 Then
d1 = d1.AddDays(-d1.dayofweek-6)
Dim d2 as Date = d1.AddDays(-d1.dayofweek+7)
Dim Sum As Integer = dt.Compute("Sum(请假工时)","姓名 = '" & dr("姓名") & "' And 日期 >= #" & d1 & "# And 日期 <= #" & d2 & "#")
if Sum < 8 Then
dr("带薪工时判断条件_星期几为0_带薪工时值") = 8
Else
dr("带薪工时判断条件_星期几为0_带薪工时值") = Nothing
End If
End If
Next
你的问题说老实话很难理解,所以我只写了一个判断请假工时的。
多谢C版,星期天的搞定,有了您的示范,我试试看能不能把节假日的代码给套出来。
C版您好,怎么我把代码放到项目里就不行,在示范文件里好好的,是不是项目数据太多。只要我一点重算列,就死机,我用开发板的示范文件也试了,正常。项目文件表的
DataColChanged代码如下:应该没有冲突呀
Dim dr As DataRow = e.DataRow
Dim dt As DataTable = DataTables("班组考勤")
Dim str As String = "日期 = '" & dr("日期") & "' And 姓名 = '" & dr("姓名") & "'"
if e.DataCol.Name = "日期" OrElse e.DataCol.Name = "姓名" Then
Dim r As DataRow = dt.Find(str)
if r IsNot Nothing Then
dr("班组考勤工时_出勤")=(dt.Compute("Sum(班组考勤工时_出勤)",str))
dr("班组考勤工时_请假")=(dt.Compute("Sum(班组考勤工时_请假)",str))
dr("班组考勤工时_旷工")=(dt.Compute("Sum(班组考勤工时_旷工)",str))
dr("考核_装夹工时") = (dt.Compute("Sum(考核_装夹工时)",str))
dr("考核_操作工时") = (dt.Compute("Sum(考核_操作工时)",str))
dr("考核_准结工时") = (dt.Compute("Sum(考核_准结工时)",str))
dr("考核_标准工时")=(dt.Compute("Sum(考核_标准工时)",str))
dr("考核_奖金")=(dt.Compute("Sum(考核_奖金)",str))
dr("工作用时")=(dt.Compute("Sum(工作用时)",str))
dr("工废损失")=(dt.Compute("Sum(工废损失)",str))
dr("准结补贴")=(dt.Compute("Sum(准结补贴)",str))
dr("工资")=(dt.Compute("Sum(工资)",str))
dr("产值")=(dt.Compute("Sum(产值)",str))
dr("奖金小计")=(dt.Compute("Sum(奖金小计)",str))
End If
End If
Select Case e.DataCol.Name
Case "考核_准结工时","考核_标准工时","工作用时"
dr("考核_效率")=(dr("考核_标准工时")+dr("考核_准结工时"))/dr("工作用时")
Case "主管考勤工时_出勤"
Select Case dr("主管考勤工时_出勤")
Case 0.1 To 8
Select Case dr("星期几")
Case 0
dr("加班工时") = dr("主管考勤工时_出勤")
dr("正班工时") = dr("主管考勤工时_出勤")
Case 1 To 6
dr("正班工时") = dr("主管考勤工时_出勤")
dr("加班工时") = Nothing
Case 8
dr("正班工时") = dr("主管考勤工时_出勤")
dr("加班工时") = dr("主管考勤工时_出勤")*2
End Select
Case 8.01 To 24
Select Case dr("星期几")
Case 0
dr("加班工时") = dr("主管考勤工时_出勤")*2-8
dr("正班工时") = "8"
Case 1 To 6
dr("加班工时") = (dr("主管考勤工时_出勤")-8)*1.5
dr("正班工时") = "8"
Case 8
dr("正班工时") = "8"
dr("加班工时") = dr("主管考勤工时_出勤")*3-8
End Select
End Select
End Select
If e.DataCol.Name = "确定" Then '如果是已结帐列的内容变动
If e.NewValue = True Then '而且变动后的值是True(已勾选)
e.DataRow.Locked = True '那么锁定此行
End If
End If
if e.datacol.name = "日期"
e.datarow("年月") = format(e.datarow("日期"),"yyyy年MM月")
e.datarow("日") = e.datarow("日期").day
Dim dr1 As DataRow = DataTables("基础表").Find("[节假日期] = '" & e.DataRow("日期") & "'")
If dr1 IsNot Nothing Then
e.DataRow("星期几") = "8"
Else
e.datarow("星期几") = e.datarow("日期").DayOfWeek
End If
end if
以前的代码运行都正常,加上以下这段就不行
Dim dt1 As DataTable = DataTables("主管考勤")
For Each dr2 As DataRow In dt1.DataRows
if dr2("星期几") = 0 Then
Dim d1 as Date = dr2("日期")
Dim Sum As Integer = dt1.Compute("Sum(主管考勤工时_请假)","姓名 = '" & dr2("姓名") & "' And 日期 >= #" & d1.AddDays(-6) & "# And 日期 <= #" & dr2("日期") & "#")
if Sum < 8 Then
dr2("节假日带薪工时") = 8
Else
dr2("节假日带薪工时") = Nothing
End If
Else
dr2("节假日带薪工时") = Nothing
End If
Next
[此贴子已经被作者于2010-3-25 15:15:35编辑过]