以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [原创] (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=51241) |
|
-- 作者:王青 -- 发布时间:2014/5/22 15:19:00 -- [原创] 我做的工资计算项目,其他应扣列有部分行不可以输入1960,项目代码如下:工资_DataColChanged
Dim dr As DataRow
= e.DataRow If e.DataCol.Name
= "员工id" Then Dim nms() As String = {"姓名","奖金率","公司","日工资","早餐标准","加班标准","值班标准","工龄工资","高温补标准","应扣保险","职务标识","月工资"} If e.NewValue Is
Nothing Then
For Each nm As String In nms
e.DataRow(nm) = Nothing
Next
Else
Dim pr As DataRow
pr = DataTables("基础").Find("[员工id] = \'" & e.NewValue &
"\'")
If pr IsNot Nothing
For Each nm As String In nms e.DataRow(nm) = pr(nm)
Next
End If
End If End If Select Case e.DataCol.name
Case "金额","奖金率","出勤天数","职务标识" ,"休假天数"
If dr.isnull("金额") OrElse dr.isnull("奖金率") OrElse
dr.isnull("出勤天数")
OrElse dr("职务标识") =
2 OrElse dr("休假天数") > 8 Then
dr("销售工资") =
Nothing
Else If dr("休假天数") > 4 AndAlso DR("休假天数") <= 5 Then
dr("销售工资") =
dr("金额") *
dr("奖金率") *
0.75
Else If dr("休假天数") > 5 AndAlso DR("休假天数") <= 6 Then
dr("销售工资") =
dr("金额") *
dr("奖金率") *
0.7
Else If dr("休假天数") > 6 AndAlso DR("休假天数") <= 7 Then
dr("销售工资") = dr("金额")
* dr("奖金率") * 0.65 Else If dr("休假天数") > 7
AndAlso DR("休假天数") <= 8 Then dr("销售工资") = dr("金额")
* dr("奖金率") * 0.6 Else dr("销售工资") = dr("金额")
* dr("奖金率") End If End Select If dr("休假天数")
= 0 Then dr("奖励天数") = 4 Else If dr("休假天数") > 15 OrElse
dr("职务标识") = 5 Then dr("奖励天数") = 0 Else dr("奖励天数") = 2 End If Select Case
e.DataCol.name Case "早餐天数","早餐标准" If dr.isnull("早餐天数") OrElse
dr.isnull("早餐标准") OrElse
dr("职务标识") = 2 Then dr("早餐") = Nothing Else dr("早餐") = dr("早餐天数")
* dr("早餐标准") End If Case "值班天数","值班标准" If dr.isnull("值班天数") OrElse
dr.isnull("值班标准") OrElse
dr("职务标识") = 2 Then dr("值班") = Nothing Else dr("值班") = dr("值班天数")
* dr("值班标准") End If Case "加班天数","加班标准" If dr.isnull("加班天数") OrElse
dr.isnull("加班标准") OrElse
dr("职务标识") = 2 Then dr("加班") = Nothing Else dr("加班") = dr("加班天数")
* dr("加班标准") End If Case "出勤天数","日工资" If dr.isnull("出勤天数") OrElse
dr.isnull("日工资") OrElse
dr("职务标识") = 2 Then dr("工资") = Nothing Else dr("工资") = dr("出勤天数")
* dr("日工资") End If Case "出勤天数","高温补标准" If dr.isnull("出勤天数") OrElse
dr.isnull("高温补标准") Then dr("高温补") = Nothing Else dr("高温补") = dr("出勤天数")
* dr("高温补标准") End If Case "奖励天数","日工资" If dr.isnull("奖励天数") OrElse
dr.isnull("日工资") Then dr("奖励工资") = Nothing Else dr("奖励工资") = dr("奖励天数")
* dr("日工资") End If End Select If e.DataCol.Name
<> "所得税" AndAlso e.DataCol.IsNumeric Then e.DataRow("所得税") =
InTax(e.DataRow("应税工资")) End If Select Case
e.DataCol.name Case "工资","奖励工资","月工资","里程工资","业务奖","销售工资","早餐","值班","加班","高温补","工龄工资","其他应扣","上月调增"
dr("应发工资A") = dr("工资")
+ dr("奖励工资") + dr("月工资") + dr("里程工资") + dr("业务奖")
+ dr("销售工资") + dr("早餐") + dr("值班") + dr("加班")
+ dr("高温补") + dr("工龄工资") - dr("其他应扣") + dr("上月调增") End Select Select Case e.DataCol.name Case "里程工资","业务奖","销售工资","其他应扣" dr("奖金") = dr("里程工资") +
dr("业务奖") + dr("销售工资") - dr("其他应扣") End Select Select Case e.DataCol.name Case "应扣保险","所得税A","其他应扣" dr("应扣项") = dr("应扣保险")
+ dr("所得税A") + dr("其他应扣") End Select If dr("应发工资A")
<= dr("应扣项") Then dr("应发工资") = Nothing dr("应扣保险") = Nothing End If
If dr("应发工资A")
>= 7000 Then dr("应税工资") = 3500 - dr("应扣保险") dr("现金发放") = dr("应发工资A")
- 7000 dr("实发工资") = 7000 - dr("应扣保险")
- dr("所得税") dr("应发工资") = 7000 dr("奖金A") = dr("奖金")
- dr("应发工资A") + 7000 ElseIf dr("应发工资A") >=3500 Then dr("应税工资") = dr("应发工资A")
- dr("应扣保险") - 3500 dr("应发工资") = dr("应发工资A")
dr("实发工资") = dr("应发工资")
- dr("应扣保险") - dr("所得税") dr("现金发放") = Nothing dr("奖金A") = dr("奖金") ElseIf dr("应发工资A") <3500 Then dr("应税工资") = Nothing dr("应发工资") = dr("应发工资A")
dr("实发工资") = dr("应发工资A")
- dr("应扣保险") dr("现金发放") = Nothing dr("奖金A") = dr("奖金") End If If dr.isnull("出勤天数") Then dr("工龄工资") = Nothing End If If dr("姓名")
= "王青" Then dr("所得税A") = dr("所得税")/2 Else dr("所得税A") = dr("所得税") End If
工资_DataColChanging
If
e.DataCol.IsNumeric Then If e.NewValue <= 0
Then
e.NewValue = Nothing
End If End If
窗口表事件
窗口与控件事件
刷新_Button1_Click
DataTables("工资").DataCols("员工id").RaiseDataColChanged() DataTables("工资").DataCols("出勤天数").RaiseDataColChanged() DataTables("工资").DataCols("早餐天数").RaiseDataColChanged() DataTables("工资").DataCols("加班天数").RaiseDataColChanged() DataTables("工资").DataCols("值班天数").RaiseDataColChanged() DataTables("工资").DataCols("休假天数").RaiseDataColChanged() DataTables("工资").DataCols("金额").RaiseDataColChanged() DataTables("工资").DataCols("里程工资").RaiseDataColChanged() DataTables("工资").DataCols("销售工资").RaiseDataColChanged() DataTables("工资").DataCols("业务奖").RaiseDataColChanged() DataTables("工资").DataCols("应发工资A").RaiseDataColChanged() DataTables("工资").DataCols("上月调增").RaiseDataColChanged() DataTables("工资").DataCols("其他应扣").RaiseDataColChanged() DataTables("工资").DataCols("奖励天数").RaiseDataColChanged() DataTables("工资").DataCols("日工资").RaiseDataColChanged() |
|
-- 作者:有点甜 -- 发布时间:2014/5/22 15:25:00 -- 写得不是一般的乱,后面一段,请加上列名判断。
|
|
-- 作者:Bin -- 发布时间:2014/5/22 15:31:00 -- 很显然,DataColChanged代码有死循环. 这么长得代码要找到哪里死循环.要点时间. |
|
-- 作者:王青 -- 发布时间:2014/5/22 15:40:00 -- 谢谢了。单位工资计算就是条件多,框框多,不管怎样,先谢谢了 |
|
-- 作者:Bin -- 发布时间:2014/5/22 15:40:00 -- if e.datacol.name ="应发工资A" then If dr("应发工资A") <= dr("应扣项") Then dr("应发工资") = Nothing dr("应扣保险") = Nothing End If
If dr("应发工资A") >= 7000 Then dr("应税工资") = 3500 - dr("应扣保险") dr("现金发放") = dr("应发工资A") - 7000 dr("实发工资") = 7000 - dr("应扣保险") - dr("所得税") dr("应发工资") = 7000 dr("奖金A") = dr("奖金") - dr("应发工资A") + 7000 ElseIf dr("应发工资A") >=3500 Then dr("应税工资") = dr("应发工资A") - dr("应扣保险") - 3500 dr("应发工资") = dr("应发工资A") dr("实发工资") = dr("应发工资") - dr("应扣保险") - dr("所得税") dr("现金发放") = Nothing dr("奖金A") = dr("奖金") ElseIf dr("应发工资A") <3500 Then dr("应税工资") = Nothing dr("应发工资") = dr("应发工资A") dr("实发工资") = dr("应发工资A") - dr("应扣保险") dr("现金发放") = Nothing dr("奖金A") = dr("奖金") End If end if 试试看 |