以文本方式查看主题 - 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) 得到上一个月&... 有点甜老师 按照楼上方法 还是不得解决 附上例子 求解! |
-- 作者:有点甜 -- 发布时间: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 |