⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmsalaryman.vb

📁 vb2005人事管理系统源码
💻 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 + -