📄 frmsalaryman.vb
字号:
Friend Class FrmSalaryMan
Inherits System.Windows.Forms.Form
Private Sub CreateSalary()
Dim i As Object
Dim TmpMonth As String
Dim TmpTax As Single
Dim DayPay As Single '日工资
If CurDep.Dep_Id <= 0 Then
Exit Sub
End If
'生成指定月份
TmpMonth = ComboY.Text & "-" & ComboM.Text
'读取指定部门的员工编号到数组Arr_EmpId()
MyEmp.Load_by_Dep((CurDep.Dep_Id))
'对每一位员工生成当月的工资数据
i = 0
Do While Arr_EmpId(i) > 0
'如果指定月份当前员工的工资并未发放,则自动生成
With MySal
If .GetPayFlag(TmpMonth, Arr_EmpId(0)) = 0 Then
.PayMonth = TmpMonth
.Emp_Id = Arr_EmpId(i)
'读取员工基本信息(包含基本工资和奖金基数)
MyEmp.GetInfo(.Emp_Id)
'读取考勤记录
MyCheck.GetInfo(TmpMonth, Arr_EmpId(i))
'读取考评记录
MyEva.GetInfo(TmpMonth, Arr_EmpId(i))
DayPay = System.Math.Round(MyEmp.Base_Wage / 30, 2)
.BaseWage = MyEmp.Base_Wage
'记算加班费
.Ot1Pay = MyCheck.ot1Days * DayPay * 3
.Ot2Pay = MyCheck.ot2Days * DayPay * 2
.Ot3Pay = MyCheck.ot3Days * DayPay * 1.5
'扣款
.Cdkk = MyCheck.cdDays * MyRule.GetAmount(1)
.Sjkk = (MyCheck.sjDays + MyCheck.kgDays) * DayPay
.Bjkk = System.Math.Round(MyCheck.bjDays * DayPay / 2, 2)
'奖金
.Prize = System.Math.Round(MyEmp.Base_Prize * (MyEva.PrizeFactor1 + MyEva.PrizeFactor2) / 100 / 2, 2)
'出差补助
.Clbz = MyCheck.cxDays * MyRule.GetAmount(2)
'养老代扣
.Yldk = System.Math.Round(MyEmp.Base_Wage * MyRule.GetAmount(3) / 100, 2)
'基本医疗代扣
.Mddk = System.Math.Round(MyEmp.Base_Wage * MyRule.GetAmount(4) / 100, 2)
'失业保险
.Sydk = System.Math.Round(MyEmp.Base_Wage * MyRule.GetAmount(5) / 100, 2)
'住房公积金代扣
.HouseFunds = System.Math.Round(MyEmp.Base_Wage * MyRule.GetAmount(6) / 100, 2)
'代扣税
.Sfgz = .BaseWage + .Prize + .Ot1Pay + .Ot2Pay + .Ot3Pay + .Clbz - .Cdkk - .Sjkk - .Bjkk - .Yldk - .Mddk - .Sydk - .HouseFunds - 1000
If .Sfgz < 0 Then
TmpTax = 0
End If
If .Sfgz <= 500 And .Sfgz > 0 Then
TmpTax = 0.5
End If
If .Sfgz <= 2000 And .Sfgz > 500 Then
TmpTax = .Sfgz * 0.1 - 25
End If
If .Sfgz <= 5000 And .Sfgz > 2000 Then
TmpTax = .Sfgz * 0.15 - 125
End If
If .Sfgz <= 20000 And .Sfgz > 5000 Then
TmpTax = .Sfgz * 0.2 - 375
End If
If .Sfgz <= 40000 And .Sfgz > 20000 Then
TmpTax = .Sfgz * 0.25 - 1375
End If
If .Sfgz <= 60000 And .Sfgz > 40000 Then
TmpTax = .Sfgz * 0.3 - 3375
End If
If .Sfgz <= 80000 And .Sfgz > 60000 Then
TmpTax = .Sfgz * 0.35 - 6375
End If
If .Sfgz <= 100000 And .Sfgz > 80000 Then
TmpTax = .Sfgz * 0.4 - 10375
End If
If .Sfgz > 100000 Then
TmpTax = .Sfgz * 0.45 - 13375
End If
.Tax = TmpTax
.Sfgz = .Sfgz + 1000 - .Tax
If MySal.In_DB(TmpMonth, Arr_EmpId(i)) = False Then
'其它扣款
.Qtkk = 0
'医疗费报销
.Mdbx = 0
'年休假
.YearPrize = 0
.Insert()
Else
'读取其它扣款、医疗报销和年终奖金
.GetInput(TmpMonth, Arr_EmpId(i))
.Sfgz = .Sfgz - .Qtkk + .Mdbx + .YearPrize
'将重新计算的结果写如表中
.UpdateAuto(TmpMonth, Arr_EmpId(i))
End If
BtnPay.Enabled = True
BtnModi.Enabled = True
Else
'如果工资已经发放,则不能再修改和发放
BtnPay.Enabled = False
BtnModi.Enabled = False
End If
End With
i = i + 1
Loop
End Sub
Private Sub Refresh_Salary()
CreateSalary()
Dim SQLString As String
Dim MSG As String
SQLString = "SELECT e.Emp_Id as 员工编号," & "e.Emp_Name as 员工姓名, c.BaseWage as 基本工资," & "c.Prize as 奖金, c.Ot1Pay as 法定节假日加班费," & "c.Ot2Pay as 休息日加班费, c.Ot3Pay as 日常加班费," & "c.Cdkk as 迟到扣款, c.Sjkk as 事假扣款, c.Bjkk as 病假扣款," & "c.Clbz as 差旅补助, c.Yldk as 养老代扣," & "c.Mddk as 基本医疗代扣, c.Sydk as 失业保险代扣," & "c.HouseFunds as 住房公积金代扣, c.Tax as 代扣税," & "c.Qtkk as 其他扣款, c.Mdbx as 医药费报销, " & "c.YearPrize as 年终奖金, c.Sfgz as 实发工资" & " FROM Employees e, Salary c WHERE c.PayMonth='" & ComboY.Text & "-" & ComboM.Text & "' And e.Emp_Id=c.Emp_Id"
If CurDep.Dep_Id <= 0 Then
' DGVSalary.Visible = False
Exit Sub
End If
DGVSalary.Visible = True
SQLString = SQLString & " And e.Dep_Id=" & Trim(Str(CurDep.Dep_Id))
Dim DTable As DataTable = ClsOperation.DBOperate(SQLString, MSG)
DGVSalary.DataSource = DTable
End Sub
Private Sub Cmd_Back_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Back.Click
Me.Close()
End Sub
Private Sub ComboDep_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboDep.Enter
ComboY.Focus()
'设置frmdepsel窗体的位置
FrmDepSel.Left = VB6.TwipsToPixelsX(VB6.PixelsToTwipsX(Me.Left) + VB6.PixelsToTwipsX(ComboDep.Left) + 350 - VB6.PixelsToTwipsX(FrmDepSel.Width))
FrmDepSel.Top = VB6.TwipsToPixelsY(VB6.PixelsToTwipsY(Me.Top) + VB6.PixelsToTwipsY(ComboDep.Top) + VB6.PixelsToTwipsY(ComboDep.Height) + 450)
FrmDepSel.ShowDialog()
'将选择的员工姓名显示到ComboUpper控件中
ComboDep.Text = CurDep.Dep_name
Refresh_Salary()
End Sub
Private Sub ComboM_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboM.SelectedIndexChanged
Refresh_Salary()
End Sub
Private Sub ComboY_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboY.SelectedIndexChanged
Refresh_Salary()
End Sub
Private Sub FrmSalaryMan_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Object
Dim yy As Object
Dim mm As Short
For i = 1999 To 2100
ComboY.Items.Add(Trim(Str(i)))
Next
For i = 1 To 12
ComboM.Items.Add(Trim(Str(i)))
Next
yy = Year(Now)
If yy > 1998 And yy < 2101 Then
ComboY.Text = Trim(Str(yy))
End If
mm = Month(Now)
If mm > 0 And mm < 13 Then
ComboM.Text = Trim(Str(mm))
End If
ComboDep.Text = ""
CurDep.Init()
Refresh_Salary()
End Sub
Private Sub BtnPay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPay.Click
If MsgBox("确定要发放当月工资", MsgBoxStyle.YesNo, "请确认") = MsgBoxResult.Yes Then
MySal.SetPay(ComboY.Text & "-" & ComboM.Text, 1)
BtnPay.Enabled = False
BtnModi.Enabled = False
End If
End Sub
Private Sub BtnModi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnModi.Click
If DGVSalary.SelectedColumns Is Nothing Then
MsgBox("请选择记录")
Exit Sub
End If
With FrmSalaryEdit
.lblMonth.Text = ComboY.Text & "-" & ComboM.Text
.lblName.Text = DGVSalary.SelectedRows(0).Cells(1).Value
.OriEmpId = DGVSalary.SelectedRows(0).Cells(0).Value
.txtQtkk.Text = DGVSalary.SelectedRows(0).Cells(16).Value
.txtMdbx.Text = DGVSalary.SelectedRows(0).Cells(17).Value
.txtYearPrize.Text = DGVSalary.SelectedRows(0).Cells(18).Value
.TmpSfgz = DGVSalary.SelectedRows(0).Cells(19).Value
.ShowDialog()
End With
Refresh_Salary()
End Sub
Private Sub BtnRules_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnRules.Click
FrmSalaryRule.ShowDialog()
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -