以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  【求助跨年计算】想实现在2018年1月份来计算2017年12月数据,总是报错,求解!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=112932)

--  作者:李孝春
--  发布时间:2018/1/5 13:18:00
--  【求助跨年计算】想实现在2018年1月份来计算2017年12月数据,总是报错,求解!
【求助跨年计算】想实现在2018年1月份来计算2017年12月数据,总是报错,求解!
.NET Framework 版本:2.0.50727.8669
Foxtable 版本:2017.10.26.1
错误所在事件:表,员工薪资,DataColChanged
详细错误信息:
调用的目标发生了异常。
年、月和日参数描述无法表示的 DateTime。

代码如下:
经过测试发现红色部分报错
如2018年1月5日  要计算2017年12月的数据  提示报错
如2018年2月5日  要计算2018年1月的数据   可以计算
当前问题主要几种在某年12月至某年1月之间  怎么完美解决呢?


Select  e.DataCol.Name
    Case  "姓名"
        
        e.DataRow("发放状态")="未发放"
        Dim filter As String = "(员工 = \'"  & e.DataRow("姓名") & "\')"
        Dim y As Integer = Date.Today.Year
        Dim m As Integer = Date.Today.Month -1
        \'MessageBox.Show(m)
        Dim dt1 As New Date(y, m, 1)
        Dim dt2 As New Date(y, m, Date.DaysInMonth(y,m)) \'获取该月的最后一天
        Dim Filterdate As String
        Filterdate = "考勤日期 >= #" & dt1 & "# And 考勤日期 <= #" & dt2 & "#"
        
        Dim dr As DataRow
        dr = DataTables("员工表").Find("姓名 = \'"  & e.DataRow("姓名") & "\'")
        If dr IsNot Nothing \'如果找到, 则设置各列内容
            e.DataRow("部门")=dr("所属门店")
        End If
        e.DataRow("日期")=Date.Today
        \'e.DataRow("年")=Date.Today.Year
        \'e.DataRow("月")=Date.Today.Month -1
        
        Dim m1 As Integer = Date.Today.Month - 1
        Dim n1 As Integer = Date.Today.Year
        
        If m1<1 Then
            e.DataRow("月")= m1 +1
            e.DataRow("年")=n1
        Else
            e.DataRow("月")= m1
            e.DataRow("年")=n1
        End If

        
        Dim dr1 As DataRow
        dr1 = DataTables("基础薪资").Find("姓名 = \'"  & e.DataRow("姓名") & "\'")
        If dr1 IsNot Nothing \'如果找到, 则设置各列内容
            e.DataRow("基础工资")=dr1("基础工资")
            e.DataRow("话费补贴")=dr1("话费补贴")
            e.DataRow("交通补贴")=dr1("交通补贴")
            e.DataRow("工龄补贴")=dr1("工龄补贴")
            e.DataRow("其他补贴")=dr1("其他补贴")
            
        End If
        Dim filter1 As String = "(考勤人员 = \'"  & e.DataRow("姓名") & "\' and 考勤类别 = \'迟到登记\' )"
        e.DataRow("扣款_迟到次数") = DataTables("员工考勤").compute("count(考勤编号)", filter1  & " and 考勤日期 >= #" & dt1 & "# And 考勤日期 <= #" & dt2 & "#")
        If e.DataRow("扣款_迟到次数") >=1  Then
            e.DataRow("奖金_满勤奖")=0
            e.DataRow("扣款_迟到扣款")=e.DataRow("扣款_迟到次数") *e.DataRow("扣款_迟扣标准")
        Else
            e.DataRow("奖金_满勤奖")=dr1("满勤奖")
        End If
        
        Dim filter11 As String = "(考勤人员 = \'"  & e.DataRow("姓名") & "\' and 考勤类别 = \'旷工登记\' )"
        e.DataRow("扣款_旷工次数") = DataTables("员工考勤").compute("count(考勤编号)", filter11  & " and 考勤日期 >= #" & dt1 & "# And 考勤日期 <= #" & dt2 & "#")
        If e.DataRow("扣款_旷工次数") >=1  Then
            e.DataRow("奖金_满勤奖")=0
            e.DataRow("扣款_旷工扣款")=e.DataRow("扣款_旷工次数") *e.DataRow("扣款_旷扣标准")
        Else
            e.DataRow("奖金_满勤奖")=dr1("满勤奖")
        End If
        
        Dim filter111 As String = "(考勤人员 = \'"  & e.DataRow("姓名") & "\' and 考勤类别 = \'请假登记\' )"
        e.DataRow("扣款_请假次数") = DataTables("员工考勤").compute("count(考勤编号)", filter111 & " and 考勤日期 >= #" & dt1 & "# And 考勤日期 <= #" & dt2 & "#")
        If e.DataRow("扣款_请假次数") >=1  Then
            e.DataRow("奖金_满勤奖")=0
            e.DataRow("扣款_请假扣款")=e.DataRow("扣款_请假次数") *e.DataRow("扣款_请假标准")
        Else
            e.DataRow("奖金_满勤奖")=dr1("满勤奖")
        End If
        e.DataRow("扣款_任务额度") = DataTables("订单主表").compute("sum(订单总额)", filter  & " And 订单日期 >= #" & dt1 & "# And 订单日期 <= #" & dt2 & "#")
        e.DataRow("实发工资")=(e.DataRow("基础工资")+e.DataRow("话费补贴")+e.DataRow("交通补贴")+e.DataRow("工龄补贴")+e.DataRow("其他补贴")+e.DataRow("奖金_满勤奖")+e.DataRow("奖金_超量奖")+e.DataRow("奖金_超额奖"))-(e.DataRow("扣款_迟到扣款")+e.DataRow("扣款_旷工扣款")+e.DataRow("扣款_请假扣款")+e.DataRow("扣款_未完单扣")+e.DataRow("扣款_未达额扣")+e.DataRow("代扣_伙食")+e.DataRow("代扣_其它"))
        
    Case "代扣_伙食","代扣_其它"
        e.DataRow("实发工资")=(e.DataRow("基础工资")+e.DataRow("话费补贴")+e.DataRow("交通补贴")+e.DataRow("工龄补贴")+e.DataRow("其他补贴")+e.DataRow("奖金_满勤奖")+e.DataRow("奖金_超量奖")+e.DataRow("奖金_超额奖"))-(e.DataRow("扣款_迟到扣款")+e.DataRow("扣款_旷工扣款")+e.DataRow("扣款_请假扣款")+e.DataRow("扣款_未完单扣")+e.DataRow("扣款_未达额扣")+e.DataRow("代扣_伙食")+e.DataRow("代扣_其它"))
        

End Select
[此贴子已经被作者于2018/1/5 13:18:55编辑过]

--  作者:wh123
--  发布时间:2018/1/5 14:41:00
--  
If m1<1 Then
            e.DataRow("月")= m1 +1
            e.DataRow("年")=n1
 Else

这个代码就是错的。你要的是上个月数据,如果m1<1即1月份的上个月,月份肯定是12,年份-1。应该是下面这样
If m1<1 Then
            e.DataRow("月")= 12
            e.DataRow("年")=n1-1
Else

还有,这种情况没必要弄这么复杂,你直接用date.addmonths(-1)方法简单方便

--  作者:有点甜
--  发布时间:2018/1/5 14:51:00
--  

请用 addmonths(-1) 得到上一个月

 

Dim d=Date.Today

d = d.addmonths(-1)

msgbox(d.year)

msgbox(d.month)


--  作者:李孝春
--  发布时间:2018/1/5 15:05:00
--  回复:(有点甜)请用 addmonths(-1) 得到上一个月&...
有点甜老师  按照楼上方法 还是不得解决  附上例子 求解!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:博航建材1215.rar



--  作者:有点甜
--  发布时间:2018/1/5 15:45:00
--  
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month -1
 
改成
 

Dim d=Date.Today

d = d.addmonths(-1)

Dim y As Integer = d.Year

Dim m As Integer = d.Month

--  作者:李孝春
--  发布时间:2018/1/5 15:55:00
--  回复:(有点甜)Dim y As Integer = Date.Today.Year...
有点甜老师 更改之后问题依旧!还得麻烦多多指导 谢谢
--  作者:有点甜
--  发布时间:2018/1/5 17:02:00
--  
Select  e.DataCol.Name
    Case  "姓名"
       
        e.DataRow("发放状态")="未发放"
        Dim filter As String = "(员工 = \'"  & e.DataRow("姓名") & "\')"
        Dim d=Date.Today
d = d.addmonths(-1)
Dim y As Integer = d.Year
Dim m As Integer = d.Month
        \'MessageBox.Show(m)
        Dim dt1 As New Date(y, m, 1)
        Dim dt2 As New Date(y, m, Date.DaysInMonth(y,m)) \'获取该月的最后一天
        Dim Filterdate As String
        Filterdate = "考勤日期 >= #" & dt1 & "# And 考勤日期 <= #" & dt2 & "#"
       
        Dim dr As DataRow
        dr = DataTables("员工表").Find("姓名 = \'"  & e.DataRow("姓名") & "\'")
        If dr IsNot Nothing \'如果找到, 则设置各列内容
            e.DataRow("部门")=dr("所属门店")
        End If
        e.DataRow("日期")=Date.Today
        e.DataRow("年")=d.year
        e.DataRow("月")=d.month
       
       
       
        Dim dr2 As DataRow
        dr2 = DataTables("词典表").Find("类别 = \'迟到标准\'")
        If dr2 IsNot Nothing \'如果找到, 则设置各列内容
            e.DataRow("扣款_迟扣标准")=dr2("内容")
        End If
       
        Dim dr3 As DataRow
        dr3 = DataTables("词典表").Find("类别 = \'旷工标准\'")
        If dr3 IsNot Nothing \'如果找到, 则设置各列内容
            e.DataRow("扣款_旷扣标准")=dr3("内容")
        End If
       
        Dim dr4 As DataRow
        dr4 = DataTables("词典表").Find("类别 = \'请假标准\'")
        If dr4 IsNot Nothing \'如果找到, 则设置各列内容
            e.DataRow("扣款_请假标准")=dr4("内容")
        End If
       
       
       
        Dim dr1 As DataRow
        dr1 = DataTables("基础薪资").Find("姓名 = \'"  & e.DataRow("姓名") & "\'")
        If dr1 IsNot Nothing \'如果找到, 则设置各列内容
            e.DataRow("基础工资")=dr1("基础工资")
            e.DataRow("话费补贴")=dr1("话费补贴")
            e.DataRow("交通补贴")=dr1("交通补贴")
            e.DataRow("工龄补贴")=dr1("工龄补贴")
            e.DataRow("其他补贴")=dr1("其他补贴")
           
        End If
        Dim filter1 As String = "(考勤人员 = \'"  & e.DataRow("姓名") & "\' and 考勤类别 = \'迟到登记\' )"
        e.DataRow("扣款_迟到次数") = DataTables("员工考勤").compute("count(考勤编号)", filter1  & " and 考勤日期 >= #" & dt1 & "# And 考勤日期 <= #" & dt2 & "#")
        If e.DataRow("扣款_迟到次数") >=1  Then
            e.DataRow("奖金_满勤奖")=0
            e.DataRow("扣款_迟到扣款")=e.DataRow("扣款_迟到次数") *e.DataRow("扣款_迟扣标准")
        Else
            e.DataRow("奖金_满勤奖")=dr1("满勤奖")
        End If
       
        Dim filter11 As String = "(考勤人员 = \'"  & e.DataRow("姓名") & "\' and 考勤类别 = \'旷工登记\' )"
        e.DataRow("扣款_旷工次数") = DataTables("员工考勤").compute("count(考勤编号)", filter11  & " and 考勤日期 >= #" & dt1 & "# And 考勤日期 <= #" & dt2 & "#")
        If e.DataRow("扣款_旷工次数") >=1  Then
            e.DataRow("奖金_满勤奖")=0
            e.DataRow("扣款_旷工扣款")=e.DataRow("扣款_旷工次数") *e.DataRow("扣款_旷扣标准")
        Else
            e.DataRow("奖金_满勤奖")=dr1("满勤奖")
        End If
       
        Dim filter111 As String = "(考勤人员 = \'"  & e.DataRow("姓名") & "\' and 考勤类别 = \'请假登记\' )"
        e.DataRow("扣款_请假次数") = DataTables("员工考勤").compute("count(考勤编号)", filter111 & " and 考勤日期 >= #" & dt1 & "# And 考勤日期 <= #" & dt2 & "#")
        If e.DataRow("扣款_请假次数") >=1  Then
            e.DataRow("奖金_满勤奖")=0
            e.DataRow("扣款_请假扣款")=e.DataRow("扣款_请假次数") *e.DataRow("扣款_请假标准")
        Else
            e.DataRow("奖金_满勤奖")=dr1("满勤奖")
        End If
        e.DataRow("扣款_任务额度") = DataTables("订单主表").compute("sum(订单总额)", filter  & " And 订单日期 >= #" & dt1 & "# And 订单日期 <= #" & dt2 & "#")
        e.DataRow("实发工资")=(e.DataRow("基础工资")+e.DataRow("话费补贴")+e.DataRow("交通补贴")+e.DataRow("工龄补贴")+e.DataRow("其他补贴")+e.DataRow("奖金_满勤奖")+e.DataRow("奖金_超量奖")+e.DataRow("奖金_超额奖"))-(e.DataRow("扣款_迟到扣款")+e.DataRow("扣款_旷工扣款")+e.DataRow("扣款_请假扣款")+e.DataRow("扣款_未完单扣")+e.DataRow("扣款_未达额扣")+e.DataRow("代扣_伙食")+e.DataRow("代扣_其它"))
       
    Case "代扣_伙食","代扣_其它"
        e.DataRow("实发工资")=(e.DataRow("基础工资")+e.DataRow("话费补贴")+e.DataRow("交通补贴")+e.DataRow("工龄补贴")+e.DataRow("其他补贴")+e.DataRow("奖金_满勤奖")+e.DataRow("奖金_超量奖")+e.DataRow("奖金_超额奖"))-(e.DataRow("扣款_迟到扣款")+e.DataRow("扣款_旷工扣款")+e.DataRow("扣款_请假扣款")+e.DataRow("扣款_未完单扣")+e.DataRow("扣款_未达额扣")+e.DataRow("代扣_伙食")+e.DataRow("代扣_其它"))
       
       
       
       
        \'Dim dr As Row=Tables("员工薪资").Current
        \'Dim ndr As DataRow = DataTables("收支明细").find("日期 = \'" & e.DataRow("日期") & "\' and 支出去向 = \'" & e.DataRow("姓名") & "\'")
        \'If ndr Is Nothing Then
        \'ndr = DataTables("收支明细").AddNew
        \'End If
        \'ndr("日期") = Date.Now
        \'ndr("支出") = dr("实发工资")()
        \'ndr("支出类型") = "员工工资"
        \'ndr("支出去向") = dr("姓名")()
        \'ndr("支出日期") = Date.Now
        \'ndr("支出说明") = ndr("支出日期") & ndr("支出类型") & ndr("支出去向")
        \'
End Select