以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  判断节假日是否应带薪(狐爸帮我看看好吗)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=6356)

--  作者:wqc360
--  发布时间:2010/3/24 15:28:00
--  判断节假日是否应带薪(狐爸帮我看看好吗)
请见示范文件:
星期几=0时为星期天,上周6天(星期天为第1天)请假工时合计小于8小时,本星期天带薪工时为8.
星期几=8时为节假日,前1天或后1天出勤工时>=8小时,或前1天或后1天带薪工时=8小时,本节假日带薪工时为8.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目25.table

[此贴子已经被作者于2010-3-25 0:24:01编辑过]

--  作者:wqc360
--  发布时间:2010/3/25 0:25:00
--  
顶上去
--  作者:狐狸爸爸
--  发布时间:2010/3/25 0:32:00
--  
呵呵,你这个超出技术支持的范畴了,等于是要我直接帮你设计程序了。
既然条件清楚,你应该自己写代码。
写的过程中遇到问题再说,例如知道某一日期,如何求得该日期上一周的起始日和终止日的,以及本周的起始日和终止日,这样的问题大家会乐意回答的。
[此贴子已经被作者于2010-3-25 0:32:12编辑过]

--  作者:wqc360
--  发布时间:2010/3/25 0:48:00
--  
写代码水平太低,都是那帮助和坛友的样品进行改装,比如星期几列的代码,我就是根据以前的代码改编的,像我现在的带薪工时列求值这个问题,我还没找到示范,没办法改编,要不帮我做一段,其他我在依葫芦画瓢,到时有困难在请教好吗,谢谢
--  作者:czy
--  发布时间:2010/3/25 1:28:00
--  

我写了一个流程语句,不知道理解的对不对?

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


--  作者:czy
--  发布时间:2010/3/25 1:31:00
--  
你的问题说老实话很难理解,所以我只写了一个判断请假工时的。
--  作者:wqc360
--  发布时间:2010/3/25 1:53:00
--  
谢谢C版
Dim dt As DataTable = DataTables("考勤")
For Each dr As DataRow In dt.DataRows
    Dim d1 as Date = dr("日期")  这里怎样改成判断"星期几"=0,因"星期几"已经给出特殊日期了,及星期天为0,节假日(与星期天重合也是)为8.
    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

--  作者:czy
--  发布时间:2010/3/25 12:38:00
--  
如果判断星期几为0,应该这样吧。

Dim dt As DataTable = DataTables("考勤")
For Each dr As DataRow In dt.DataRows
    if dr("星期几") = 0 Then
        Dim d1 as Date = dr("日期")
        Dim Sum As Integer = dt.Compute("Sum(请假工时)","姓名 = \'" & dr("姓名") & "\' And 日期 >= #" & d1.AddDays(-6) & "# And 日期 <= #" & dr("日期") & "#")
        if Sum < 8 Then
            dr("带薪工时判断条件_星期几为0_带薪工时值") = 8
        Else
            dr("带薪工时判断条件_星期几为0_带薪工时值") = Nothing
        End If
    End If
Next

--  作者:wqc360
--  发布时间:2010/3/25 13:54:00
--  
多谢C版,星期天的搞定,有了您的示范,我试试看能不能把节假日的代码给套出来。
--  作者:wqc360
--  发布时间:2010/3/25 15:12:00
--  
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编辑过]