Option Strict Off Public Class 考勤明細表 ReadOnly ds As New DataSet : ReadOnly ds1 As New DataSet : ReadOnly ds2 As New DataSet : ReadOnly ds3 As New DataSet : ReadOnly ds4 As New DataSet : ReadOnly ds5 As New DataSet ReadOnly ds6 As New DataSet : ReadOnly ds7 As New DataSet : ReadOnly ds8 As New DataSet Dim 編號 As String Dim T, S, F, M, T1, S1, TT, SS, FF, MM, FFF, MMM, 平日班, 假日班, 假加, 假加一, 假加二, 假加時1, 假加分1, 假加時2, 假加分2, 國假, 國假1, 國假2, 平日加, 平日加1, 平日加2, 正常時, 正常時1, 正常時2, 正常時3, 正常時4, 加班時, 加班時1, 加班時2, 加班時3, 加班時4, 加班時5, 加班時6, 加班時7, 加班時8, 加班時9, 加班時10, 加班時11, 加班時12, 加班時13, 加班時14, 加班時15, 加班時16, 加班時17, 加班時18, 加班時19, 加班時20, 加班時21, 加班時22, 加班時23, 加班時24, 加班時25, 加班時26, 加班時27, 加班時28, 加班時29, 當天總分, 彈性扣時, 請假日 As Double Private Sub 讀取人員資料表() 人員_dgv.DataSource = Nothing : ds.Clear() 人員_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 人員_dgv.ColumnHeadersHeight = 25 人員_dgv.AllowUserToAddRows = False SQL_考勤明細表_人員() da.Fill(ds) : 人員_dgv.DataSource = ds.Tables(0) : conn.Close() 人員_dgv.Columns(0).FillWeight = 70 : 人員_dgv.Columns(1).FillWeight = 80 : 人員_dgv.Columns(2).FillWeight = 100 : 人員_dgv.Columns(3).Visible = False For i As Integer = 0 To 人員_dgv.Rows.Count - 1 人員_dgv.Rows(i).Cells("No.").Value = i + 1 Next End Sub Private Sub Set_考勤明細() 月清單_dgv.DataSource = Nothing : ds1.Clear() 月清單_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 月清單_dgv.ColumnHeadersHeight = 40 月清單_dgv.AllowUserToAddRows = False PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : SQL_考勤明細表_月份考勤() da.Fill(ds1) : 月清單_dgv.DataSource = ds1.Tables(0) : conn.Close() 月清單_dgv.Columns(0).FillWeight = 100 : 月清單_dgv.Columns(1).FillWeight = 60 : 月清單_dgv.Columns(2).FillWeight = 90 : 月清單_dgv.Columns(3).FillWeight = 80 月清單_dgv.Columns(4).FillWeight = 60 : 月清單_dgv.Columns(5).Visible = False : 月清單_dgv.Columns(6).Visible = False : 月清單_dgv.Columns(7).Visible = False 月清單_dgv.Columns(8).FillWeight = 100 : 月清單_dgv.Columns(9).FillWeight = 100 : 月清單_dgv.Columns(10).FillWeight = 60 : 月清單_dgv.Columns(11).FillWeight = 100 月清單_dgv.Columns(12).FillWeight = 100 : 月清單_dgv.Columns(13).FillWeight = 60 : 月清單_dgv.Columns(14).FillWeight = 100 : 月清單_dgv.Columns(15).FillWeight = 100 月清單_dgv.Columns(16).FillWeight = 60 : 月清單_dgv.Columns(17).FillWeight = 60 : 月清單_dgv.Columns(18).Visible = False : 月清單_dgv.Columns(19).FillWeight = 60 月清單_dgv.Columns(20).FillWeight = 60 : 月清單_dgv.Columns(21).FillWeight = 40 : 月清單_dgv.Columns(22).FillWeight = 40 : 月清單_dgv.Columns(23).FillWeight = 100 月清單_dgv.Columns(24).FillWeight = 80 : 月清單_dgv.Columns(25).FillWeight = 150 Dim S2, F2 As String For I As Integer = 0 To 月清單_dgv.Rows.Count - 1 MyModule1.進度條() 月清單_dgv.Rows(I).Cells("一段工時").Value = "" : 月清單_dgv.Rows(I).Cells("二段工時").Value = "" : 月清單_dgv.Rows(I).Cells("加班工時").Value = "" 月清單_dgv.Rows(I).Cells("休息1").Value = "" : 月清單_dgv.Rows(I).Cells("休息2").Value = "" : 月清單_dgv.Rows(I).Cells("一段加班").Value = "" 月清單_dgv.Rows(I).Cells("二段加班").Value = "" : 月清單_dgv.Rows(I).Cells("加班下班").Value = "" : 月清單_dgv.Rows(I).Cells("加班上班").Value = "" 月清單_dgv.Rows(I).Cells("二段下班").Value = "" : 月清單_dgv.Rows(I).Cells("二段上班").Value = "" : 月清單_dgv.Rows(I).Cells("一段下班").Value = "" If IsDBNull(月清單_dgv.Rows(I).Cells("半天").Value) = True Then : 月清單_dgv.Rows(I).Cells("半天").Value = False : End If If IsDBNull(月清單_dgv.Rows(I).Cells("班別").Value) = True Then : 月清單_dgv.Rows(I).Cells("班別").Value = "" : End If If 月清單_dgv.Rows(I).Cells("班別").Value.ToString = "休" Then : Else : 月清單_dgv.Rows(I).Cells("班別").Value = Strings.Right(月清單_dgv.Rows(I).Cells("班別").Value, 2) : End If '---------------------------讀入資料------------------------------------------------------------------------------------------------------------------------------------ PA3 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("日期").Value, 2)) PA4 = DateAdd("D", 1, 月清單_dgv.Rows(I).Cells("日期").Value.ToString) 讀取打卡時間1() If 時間讀取1_dgv.Rows.Count > 0 Then 月清單_dgv.Rows(I).Cells("一段上班").Value = 時間讀取1_dgv.Rows(0).Cells("打卡時間").Value For II As Integer = 0 To 班別_dgv.Rows.Count - 1 If FormatDateTime(班別_dgv.Rows(II).Cells("時段1").Value.ToString, DateFormat.ShortTime) < FormatDateTime(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DateFormat.ShortTime) And FormatDateTime(班別_dgv.Rows(II).Cells("時段2").Value.ToString, DateFormat.ShortTime) > FormatDateTime(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DateFormat.ShortTime) Then 月清單_dgv.Rows(I).Cells("班別判斷").Value = 班別_dgv.Rows(II).Cells("時段").Value.ToString 月清單_dgv.Rows(I).Cells("休息1").Value = 班別_dgv.Rows(II).Cells("一段休息").Value.ToString 月清單_dgv.Rows(I).Cells("休息2").Value = 班別_dgv.Rows(II).Cells("二段休息").Value.ToString DTPS(0) = 班別_dgv.Rows(II).Cells("時段2").Value.ToString : DTPS(1) = 班別_dgv.Rows(II).Cells("時段4").Value.ToString() DTPS(2) = 班別_dgv.Rows(II).Cells("時段4").Value.ToString : DTPS(3) = 班別_dgv.Rows(II).Cells("時段6").Value.ToString() DTPS(4) = 班別_dgv.Rows(II).Cells("時段6").Value.ToString Exit For End If If II = 班別_dgv.Rows.Count - 1 Then For III As Integer = 0 To 班別_dgv.Rows.Count - 1 If Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, 2)) <= Val(Strings.Left(班別_dgv.Rows(III).Cells("時段").Value.ToString, 2)) Then 月清單_dgv.Rows(I).Cells("班別判斷").Value = 班別_dgv.Rows(III).Cells("時段").Value.ToString 月清單_dgv.Rows(I).Cells("休息1").Value = 班別_dgv.Rows(II).Cells("一段休息").Value.ToString 月清單_dgv.Rows(I).Cells("休息2").Value = 班別_dgv.Rows(II).Cells("二段休息").Value.ToString DTPS(0) = 班別_dgv.Rows(III).Cells("時段2").Value.ToString : DTPS(1) = 班別_dgv.Rows(III).Cells("時段4").Value.ToString() DTPS(2) = 班別_dgv.Rows(III).Cells("時段4").Value.ToString : DTPS(3) = 班別_dgv.Rows(III).Cells("時段6").Value.ToString() DTPS(4) = 班別_dgv.Rows(III).Cells("時段6").Value.ToString Exit For End If 月清單_dgv.Rows(I).Cells("班別判斷").Value = "打卡異常" Next End If Next Else 月清單_dgv.Rows(I).Cells("一段上班").Value = "" : 月清單_dgv.Rows(I).Cells("班別判斷").Value = "" End If Dim SD(2) As Integer 讀取打卡時間2() If 時間讀取2_dgv.Rows.Count = 1 Then If Val(Strings.Left(時間讀取2_dgv.Rows(0).Cells("打卡時間").Value, 2)) >= Val(Strings.Left(DTPS(1), 2)) Then 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value : 月清單_dgv.Rows(I).Cells("一段下班").Value = "" Else 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value : 月清單_dgv.Rows(I).Cells("二段上班").Value = "" End If ElseIf 時間讀取2_dgv.Rows.Count = 2 Then 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(1).Cells("打卡時間").Value ElseIf 時間讀取2_dgv.Rows.Count = 3 Then 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(1).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(2).Cells("打卡時間").Value ElseIf 時間讀取2_dgv.Rows.Count = 4 Then 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(1).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(2).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取2_dgv.Rows(3).Cells("打卡時間").Value ElseIf 時間讀取2_dgv.Rows.Count = 5 Then 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(1).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(2).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取2_dgv.Rows(3).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取2_dgv.Rows(4).Cells("打卡時間").Value ElseIf 時間讀取2_dgv.Rows.Count = 6 Then 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(1).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(2).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(3).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取2_dgv.Rows(4).Cells("打卡時間").Value 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取2_dgv.Rows(5).Cells("打卡時間").Value Else 月清單_dgv.Rows(I).Cells("一段下班").Value = "" : 月清單_dgv.Rows(I).Cells("二段上班").Value = "" End If 讀取打卡時間3() If 時間讀取3_dgv.Rows.Count > 1 Then SD(1) = 時間讀取3_dgv.Rows.Count - 1 If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取3_dgv.Rows(0).Cells("打卡時間").Value End If If Strings.Left(月清單_dgv.Rows(I).Cells("加班上班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取3_dgv.Rows(SD(1)).Cells("打卡時間").Value End If ElseIf 時間讀取3_dgv.Rows.Count = 1 Then If 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Then If Strings.Left(月清單_dgv.Rows(I).Cells("加班上班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取3_dgv.Rows(0).Cells("打卡時間").Value End If If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("二段下班").Value = "" End If ElseIf 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Then If Strings.Left(月清單_dgv.Rows(I).Cells("加班上班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("加班上班").Value = "" End If If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取3_dgv.Rows(0).Cells("打卡時間").Value End If End If Else If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("二段下班").Value = "" End If If Strings.Left(月清單_dgv.Rows(I).Cells("加班上班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("加班上班").Value = "" End If End If 讀取打卡時間4() If 時間讀取4_dgv.Rows.Count > 1 Then SD(2) = 時間讀取4_dgv.Rows.Count - 1 If Strings.Left(月清單_dgv.Rows(I).Cells("加班上班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取4_dgv.Rows(0).Cells("打卡時間").Value End If If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取4_dgv.Rows(SD(2)).Cells("打卡時間").Value End If ElseIf 時間讀取4_dgv.Rows.Count = 1 Then If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取4_dgv.Rows(SD(2)).Cells("打卡時間").Value End If Else If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value, 2) = "星期" Then 月清單_dgv.Rows(I).Cells("加班下班").Value = "" End If End If '---------------------------打卡位置調整------------------------------------------------------------------------------------------------------------------------------------ If 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString = 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString Then 月清單_dgv.Rows(I).Cells("一段下班").Value = "" End If For d As Integer = 1 To 4 If 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString <> "" Then 月清單_dgv.Rows(I).Cells("加班上班").Value = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : 月清單_dgv.Rows(I).Cells("加班下班").Value = "" End If If 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString <> "" Then 月清單_dgv.Rows(I).Cells("二段下班").Value = 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString : 月清單_dgv.Rows(I).Cells("加班上班").Value = "" End If If 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString <> "" Then 月清單_dgv.Rows(I).Cells("二段上班").Value = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : 月清單_dgv.Rows(I).Cells("二段下班").Value = "" End If If 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString <> "" Then 月清單_dgv.Rows(I).Cells("一段下班").Value = 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString : 月清單_dgv.Rows(I).Cells("二段上班").Value = "" End If Next '---------------------------工時計算------------------------------------------------------------------------------------------------------------------------------------ Dim QASW1 As Integer : Dim QASW2 As Integer : Dim QASW3 As Integer Dim DD As String '--如果下班時間超過晚上12點時的分段計算------------------------------------------ If Strings.Left(月清單_dgv.Rows(I).Cells("一段下班").Value.ToString, 2) = "00" Then DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("一段下班").Value) : QASW1 = TSFM Else : DD = 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString : QASW1 = 0 : End If '--第一段上班時間正常打卡計算------------------------------------------ If 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString <> "" And DD <> "" Then Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DD) TSFM += QASW1 If 時薪制_ch.Checked = False Then If 月清單_dgv.Rows(I).Cells("半天").Value = False Then '--第二段上下班都沒打卡,但是累計工時大於4小時(14400),先扣除一小時休息,第一段工時等於4小時,在把時數放到第二段工時------------------------------------------ If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then QASW2 = TSFM - 14400 - (Val(月清單_dgv.Rows(I).Cells("休息1").Value) * 3600) If QASW2 < 0 Then : QASW2 = 0 : End If TSFM = 14400 '--如果加班上下班都沒打卡,但扣除第一段時數的累計工時還是大於4小時(14400),先扣除一小時休息,第二段工時等於4小時,在把時數放到加班段工時------------------------------------------ If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then QASW3 = QASW2 - 14400 - (Val(月清單_dgv.Rows(I).Cells("休息2").Value) * 3600) If QASW3 < 0 Then : QASW3 = 0 : End If QASW2 = 14400 T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60 S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2 End If T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60 S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2 End If Else If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then QASW2 = TSFM - 14400 If QASW2 < 0 Then : QASW2 = 0 : End If TSFM = 14400 '--如果加班上下班都沒打卡,但扣除第一段時數的累計工時還是大於4小時(14400),先扣除一小時休息,第二段工時等於4小時,在把時數放到加班段工時------------------------------------------ If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then QASW3 = QASW2 - 14400 If QASW3 < 0 Then : QASW3 = 0 : End If QASW2 = 14400 T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60 S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2 End If T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60 S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2 End If End If Else If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then QASW2 = TSFM - 14400 If QASW2 < 0 Then : QASW2 = 0 : End If TSFM = 14400 If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then QASW3 = QASW2 - 14400 If QASW3 < 0 Then : QASW3 = 0 : End If QASW2 = 14400 T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60 S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2 End If T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60 S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2 End If End If T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60 S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F 月清單_dgv.Rows(I).Cells("一段工時").Value = S2 & " : " & F2 End If '--如果下班時間超過晚上12點時的分段計算------------------------------------------ If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value.ToString, 2) = "00" Then DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("二段下班").Value) : QASW1 = TSFM Else : DD = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : QASW1 = 0 : End If '--第二段上班時間正常打卡計算------------------------------------------ If 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString <> "" And DD <> "" Then Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString, DD) TSFM += QASW1 T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60 S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2 End If '--如果下班時間超過晚上12點時的分段計算------------------------------------------ If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value.ToString, 2) = "00" Then DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("二段下班").Value) : QASW1 = TSFM Else : DD = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : QASW1 = 0 : End If '--加班上班時間正常打卡計算------------------------------------------ If 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString <> "" And DD <> "" Then Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString, DD) TSFM += QASW1 T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60 S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2 End If 當天總分 = (Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) + Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) + Val(Strings.Left(月清單_dgv.Rows(I).Cells("加班工時").Value.ToString, 2))) * 60 + (Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) + Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) + Val(Strings.Right(月清單_dgv.Rows(I).Cells("加班工時").Value.ToString, 2))) If 當天總分 <= 240 Then 月清單_dgv.Rows(I).Cells("一段工時").Value = 當天總分 \ 60 & " : " & 當天總分 Mod 60 月清單_dgv.Rows(I).Cells("二段工時").Value = "" : 月清單_dgv.Rows(I).Cells("加班工時").Value = "" ElseIf 當天總分 > 240 Then 月清單_dgv.Rows(I).Cells("一段工時").Value = "4 : 0" 月清單_dgv.Rows(I).Cells("二段工時").Value = (當天總分 - 240) \ 60 & " : " & (當天總分 - 240) Mod 60 If (當天總分 - 240) <= 240 Then : Else 月清單_dgv.Rows(I).Cells("二段工時").Value = "4 : 0" 月清單_dgv.Rows(I).Cells("一段加班").Value = (當天總分 - 240 - 240) \ 60 & " : " & (當天總分 - 240 - 240) Mod 60 If (當天總分 - 240 - 240) <= 120 Then : Else 月清單_dgv.Rows(I).Cells("一段加班").Value = "2 : 0" 月清單_dgv.Rows(I).Cells("二段加班").Value = (當天總分 - 240 - 240 - 120) \ 60 & " : " & (當天總分 - 240 - 240 - 120) Mod 60 If (當天總分 - 240 - 240 - 120) <= 120 Then : Else 月清單_dgv.Rows(I).Cells("二段加班").Value = "2 : 0" End If End If End If End If If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString = "0 : 0" Then 月清單_dgv.Rows(I).Cells("一段工時").Value = "" End If '---------------------------假日標色------------------------------------------------------------------------------------------------------------------------------------ If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightYellow End If '---------------------------加班未申請去除------------------------------------------------------------------------------------------------------------------------------------ If 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString <> "已核准" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" Then 月清單_dgv.Rows(I).Cells("一段加班").Value = "" : 月清單_dgv.Rows(I).Cells("二段加班").Value = "" End If Next 平日班 = 0 : 正常時1 = 0 : 正常時2 = 0 : 正常時3 = 0 : 正常時4 = 0 : 加班時9 = 0 : 加班時10 = 0 : 加班時11 = 0 : 加班時12 = 0 : 加班時8 = 0 : 加班時21 = 0 加班時17 = 0 : 加班時18 = 0 : 加班時19 = 0 : 加班時20 = 0 : 加班時23 = 0 : 加班時24 = 0 : 加班時25 = 0 : 加班時26 = 0 : 假日班 = 0 : 加班時27 = 0 : 請假日 = 0 For I As Integer = 0 To 月清單_dgv.Rows.Count - 1 If 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "特休" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "未到" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "離職" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "補上班" Then 請假日 += 1 End If ''---------------------------平日 Dim 是否平日 As Boolean = True If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "補上班" Then : 是否平日 = True ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "補上班" Then : 是否平日 = False ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "補上班" Then : 是否平日 = True ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "補上班" Then : 是否平日 = False End If If 是否平日 = True And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And (月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "補上班") Then 加班時27 += 1 If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" Then 平日班 += 1 正常時1 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 正常時2 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) End If If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" Then 正常時3 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 正常時4 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) End If If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" Then 加班時9 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時10 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) End If If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" Then 加班時11 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時12 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) End If End If ''---------------------------星期六 If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "補上班" Then If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "0 : 0" Then 假日班 += 1 加班時3 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 加班時4 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) 加班時7 = 加班時3 + (加班時4 / 60) If 加班時7 > 2 Then 加班時8 += 2 : 加班時21 += (加班時7 - 2) Else 加班時8 += 加班時7 End If End If If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "0 : 0" Then 加班時5 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 加班時6 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) 加班時21 += 加班時5 + (加班時6 / 60) End If If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "0 : 0" Then 加班時13 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時14 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) 加班時21 += (加班時13 + (加班時14 / 60)) End If If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "0 : 0" Then 加班時15 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時16 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) 加班時21 += (加班時15 + (加班時16 / 60)) End If End If '---------------------------星期日或國定假日 If (月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "補上班") Or 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "0 : 0" Then 假日班 += 1 加班時17 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 加班時18 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) End If If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "0 : 0" Then 加班時19 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 加班時20 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) End If If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "0 : 0" Then 月清單_dgv.Rows(I).Cells("一段加班").Value = "0 : 0" 加班時23 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時24 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) End If If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "0 : 0" Then 月清單_dgv.Rows(I).Cells("二段加班").Value = "0 : 0" 加班時25 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時26 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) End If End If Next FF = (正常時2 + 正常時4) / 60 正常時 = 正常時1 + 正常時3 + FF 當月平日天_tb.Text = 平日班 + 假日班 : 當月假日天_tb.Text = 請假日 常日總_tb.Text = Format(正常時, "#,##0.00") 當月平日一段_tb.Text = Format((加班時9 + (加班時10 / 60)), "#,##0.00") 當月平日二段_tb.Text = Format((加班時11 + (加班時12 / 60)), "#,##0.00") 一段假日加_tb.Text = Format(加班時8, "#,##0.00") 二段假日加_tb.Text = Format(加班時21, "#,##0.00") 國假日加_tb.Text = Format(加班時17 + 加班時19 + 加班時23 + 加班時25 + (加班時18 + 加班時20 + 加班時24 + 加班時26) / 60, "#,##0.00") Set_時薪制() : Set_彈性工時() 加班總_tb.Text = Format((加班時9 + (加班時10 / 60)) + (加班時11 + (加班時12 / 60)) + 加班時8 + 加班時21 + (加班時17 + 加班時19 + 加班時23 + 加班時25 + (加班時18 + 加班時20 + 加班時24 + 加班時26) / 60), "#,##0.00") End Sub Private Sub Set_時薪制() If 時薪制_ch.Checked = False Then 當月應上天數_tb.Text = 加班時27 上班總工時_tb.Text = Format(加班時27 * 8, "#,##0.00") 應上未上時數_tb.Text = Format((加班時27 * 8) - 正常時, "#,##0.00") Else 當月應上天數_tb.Text = "0" : 上班總工時_tb.Text = "0.00" : 應上未上時數_tb.Text = "0.00" End If End Sub Private Sub Set_彈性工時() If 彈性工時_ch.Checked = False Then 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text 二段假日加1_tb.Text = 二段假日加_tb.Text : 國假日加1_tb.Text = 國假日加_tb.Text Else 彈性扣時 = 應上未上時數_tb.Text If Val(國假日加_tb.Text) >= 彈性扣時 Then 國假日加1_tb.Text = Format(Val(國假日加_tb.Text) - 彈性扣時, "#,##0.00") 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text : 二段假日加1_tb.Text = 二段假日加_tb.Text ElseIf Val(國假日加_tb.Text) <彈性扣時 Then 彈性扣時 -= Val(國假日加_tb.Text) : 國假日加1_tb.Text = "0.00" If Val(二段假日加_tb.Text) >= 彈性扣時 Then 二段假日加1_tb.Text = Format(Val(二段假日加_tb.Text) - 彈性扣時, "#,##0.00") 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text ElseIf Val(二段假日加_tb.Text) < 彈性扣時 Then 彈性扣時 -= Val(二段假日加_tb.Text) : 二段假日加1_tb.Text = "0.00" If Val(當月平日二段_tb.Text) >= 彈性扣時 Then 當月平日二段1_tb.Text = Format(Val(當月平日二段_tb.Text) - 彈性扣時, "#,##0.00") 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text ElseIf Val(當月平日二段_tb.Text) < 彈性扣時 Then 彈性扣時 -= Val(當月平日二段_tb.Text) : 當月平日二段1_tb.Text = "0.00" If Val(一段假日加_tb.Text) >= 彈性扣時 Then 一段假日加1_tb.Text = Format(Val(一段假日加_tb.Text) - 彈性扣時, "#,##0.00") 當月平日一段1_tb.Text = 當月平日一段_tb.Text ElseIf Val(一段假日加_tb.Text) < 彈性扣時 Then 彈性扣時 -= Val(一段假日加_tb.Text) : 一段假日加1_tb.Text = "0.00" If Val(當月平日一段_tb.Text) >= 彈性扣時 Then 當月平日一段1_tb.Text = Format(Val(當月平日一段_tb.Text) - 彈性扣時, "#,##0.00") ElseIf Val(當月平日一段_tb.Text) < 彈性扣時 Then 當月平日一段1_tb.Text = "0.00" End If End If End If End If End If End If End Sub Private Sub Set_考勤流水() 考勤流水_dgv.DataSource = Nothing : ds5.Clear() 考勤流水_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 考勤流水_dgv.ColumnHeadersHeight = 25 考勤流水_dgv.AllowUserToAddRows = False SQL_考勤明細表_考勤流水() da.Fill(ds5) : 考勤流水_dgv.DataSource = ds5.Tables(0) : conn.Close() 考勤流水_dgv.Columns(0).FillWeight = 30 : 考勤流水_dgv.Columns(1).FillWeight = 30 : 考勤流水_dgv.Columns(2).FillWeight = 100 For i As Integer = 0 To 考勤流水_dgv.Rows.Count - 1 考勤流水_dgv.Rows(i).Cells("No.").Value = i + 1 Next End Sub Private Sub 讀取班別() 班別_dgv.DataSource = Nothing : ds7.Clear() 班別_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 班別_dgv.ColumnHeadersHeight = 25 班別_dgv.AllowUserToAddRows = False SQL_考勤明細表_班別() da.Fill(ds7) : 班別_dgv.DataSource = ds7.Tables(0) : conn.Close() 班別_dgv.Columns(0).FillWeight = 80 : 班別_dgv.Columns(1).FillWeight = 130 : 班別_dgv.Columns(2).FillWeight = 130 : 班別_dgv.Columns(3).FillWeight = 100 班別_dgv.Columns(4).FillWeight = 130 : 班別_dgv.Columns(5).FillWeight = 100 : 班別_dgv.Columns(6).FillWeight = 100 : 班別_dgv.Columns(7).FillWeight = 100 班別_dgv.Columns(8).FillWeight = 100 : 班別_dgv.Columns(9).Visible = False : 班別_dgv.Columns(10).FillWeight = 100 : 班別_dgv.Columns(11).Visible = False 班別_dgv.Columns(12).FillWeight = 100 : 班別_dgv.Columns(13).Visible = False : 班別_dgv.Columns(14).Visible = False End Sub Private Sub 讀取打卡時間1() 時間讀取1_dgv.DataSource = Nothing : ds2.Clear() 時間讀取1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 時間讀取1_dgv.ColumnHeadersHeight = 25 時間讀取1_dgv.AllowUserToAddRows = False SQL_考勤明細表_打卡讀取_上午上班() da.Fill(ds2) : 時間讀取1_dgv.DataSource = ds2.Tables(0) : conn.Close() End Sub Private Sub 讀取打卡時間2() 時間讀取2_dgv.DataSource = Nothing : ds3.Clear() 時間讀取2_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 時間讀取2_dgv.ColumnHeadersHeight = 25 時間讀取2_dgv.AllowUserToAddRows = False SQL_考勤明細表_打卡讀取_中午下上班() da.Fill(ds3) : 時間讀取2_dgv.DataSource = ds3.Tables(0) : conn.Close() End Sub Private Sub 讀取打卡時間3() 時間讀取3_dgv.DataSource = Nothing : ds4.Clear() 時間讀取3_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 時間讀取3_dgv.ColumnHeadersHeight = 25 時間讀取3_dgv.AllowUserToAddRows = False SQL_考勤明細表_打卡讀取_晚上下上班() da.Fill(ds4) : 時間讀取3_dgv.DataSource = ds4.Tables(0) : conn.Close() End Sub Private Sub 讀取打卡時間4() 時間讀取4_dgv.DataSource = Nothing : ds6.Clear() 時間讀取4_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 時間讀取4_dgv.ColumnHeadersHeight = 25 時間讀取4_dgv.AllowUserToAddRows = False SQL_考勤明細表_打卡讀取_加班下班() da.Fill(ds6) : 時間讀取4_dgv.DataSource = ds6.Tables(0) : conn.Close() End Sub Private Sub 讀取日期() 日期_dgv.DataSource = Nothing : ds8.Clear() 日期_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 日期_dgv.ColumnHeadersHeight = 25 日期_dgv.AllowUserToAddRows = False SQL_讀取日期() da.Fill(ds8) : 日期_dgv.DataSource = ds8.Tables(0) : conn.Close() End Sub Private Sub 年份_下拉表單資料載入() SQL_考勤明細表_年份_下拉() 年份_cb.Items.Clear() While (dr.Read()) : 年份_cb.Items.Add(dr("年份")) : End While conn.Close() End Sub Private Sub 讀取彙總表() For I As Integer = 0 To 整體考勤_dgv.Rows.Count - 1 : 整體考勤_dgv.Rows.RemoveAt(0) : Next For I As Integer = 0 To 排班彙總_dgv.Rows.Count - 1 : 排班彙總_dgv.Rows.RemoveAt(0) : Next Dim QA As Integer = 0 For I As Integer = 0 To 日期_dgv.Rows.Count - 1 For II As Integer = 0 To 班別_dgv.Rows.Count - 1 排班彙總_dgv.Rows.Add() 排班彙總_dgv.Rows(QA).Cells("日期").Value = 日期_dgv("日期", I).Value.ToString 排班彙總_dgv.Rows(QA).Cells("星期").Value = 日期_dgv("星期", I).Value.ToString 排班彙總_dgv.Rows(QA).Cells("班別").Value = 班別_dgv("時段", II).Value.ToString 排班彙總_dgv.Rows(QA).Cells("姓名").Value = "" QA += 1 Next Next For I As Integer = 0 To 人員_dgv.Rows.Count - 1 資料數 = 31 * 人員_dgv.Rows.Count 編號 = 人員_dgv("編號", I).Value.ToString : 姓名_tb.Text = 人員_dgv("姓名", I).Value.ToString Set_考勤明細() For II As Integer = 0 To 月清單_dgv.Rows.Count - 1 For III As Integer = 0 To 排班彙總_dgv.Rows.Count - 1 If 月清單_dgv.Rows(II).Cells("日期").Value.ToString = 排班彙總_dgv.Rows(III).Cells("日期").Value.ToString And 月清單_dgv.Rows(II).Cells("班別判斷").Value.ToString = 排班彙總_dgv.Rows(III).Cells("班別").Value.ToString Then If 排班彙總_dgv.Rows(III).Cells("姓名").Value.ToString = "" Then 排班彙總_dgv.Rows(III).Cells("姓名").Value = 姓名_tb.Text Else 排班彙總_dgv.Rows(III).Cells("姓名").Value = 排班彙總_dgv.Rows(III).Cells("姓名").Value.ToString & " , " & 姓名_tb.Text End If End If Next Next 整體考勤_dgv.Rows.Add() 整體考勤_dgv.Rows(I).Cells("No").Value = I + 1 : 整體考勤_dgv.Rows(I).Cells("姓名").Value = 人員_dgv("姓名", I).Value.ToString 整體考勤_dgv.Rows(I).Cells("年份").Value = 年份_cb.Text : 整體考勤_dgv.Rows(I).Cells("月份").Value = 月份_cb.Text 整體考勤_dgv.Rows(I).Cells("漏打卡次數").Value = "0 次" If 常日總_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("平日總工時").Value = "" : Else 整體考勤_dgv.Rows(I).Cells("平日總工時").Value = Val(Strings.Left(常日總_tb.Text, 3)) & " 時 " & Val(Strings.Right(常日總_tb.Text, 2)) & " 分" End If If 加班總_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("加班總工時").Value = "" : Else 整體考勤_dgv.Rows(I).Cells("加班總工時").Value = Val(Strings.Left(加班總_tb.Text, 2)) & " 時 " & Val(Strings.Right(加班總_tb.Text, 2)) & " 分" End If If 上班總工時_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("總工時").Value = "" : Else 整體考勤_dgv.Rows(I).Cells("總工時").Value = Val(Strings.Left(上班總工時_tb.Text, 3)) & " 時 " & Val(Strings.Right(上班總工時_tb.Text, 2)) & " 分" End If 整體考勤_dgv.Rows(I).Cells("平日上班天數").Value = 當月平日天_tb.Text & " 天" : 整體考勤_dgv.Rows(I).Cells("假日上班天數").Value = 當月假日天_tb.Text & " 天" If 常日總_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("平日上班時數").Value = "" : Else 整體考勤_dgv.Rows(I).Cells("平日上班時數").Value = Val(Strings.Left(常日總_tb.Text, 3)) & " 時 " & Val(Strings.Right(常日總_tb.Text, 2)) & " 分" End If If 當月平日一段_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("平日一段加班").Value = "" : Else 整體考勤_dgv.Rows(I).Cells("平日一段加班").Value = Val(Strings.Left(當月平日一段_tb.Text, 2)) & " 時 " & Val(Strings.Right(當月平日一段_tb.Text, 2)) & " 分" End If If 當月平日二段_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("平日二段加班").Value = "" : Else 整體考勤_dgv.Rows(I).Cells("平日二段加班").Value = Val(Strings.Left(當月平日二段_tb.Text, 2)) & " 時 " & Val(Strings.Right(當月平日二段_tb.Text, 2)) & " 分" End If If 一段假日加_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("一段假日加班時數").Value = "" : Else 整體考勤_dgv.Rows(I).Cells("一段假日加班時數").Value = Val(Strings.Left(一段假日加_tb.Text, 2)) & " 時 " & Val(Strings.Right(一段假日加_tb.Text, 2)) & " 分" End If If 二段假日加_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("二段假日加班時數").Value = "" : Else 整體考勤_dgv.Rows(I).Cells("二段假日加班時數").Value = Val(Strings.Left(二段假日加_tb.Text, 2)) & " 時 " & Val(Strings.Right(二段假日加_tb.Text, 2)) & " 分" End If If 國假日加_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("國定假日加班時數").Value = "" : Else 整體考勤_dgv.Rows(I).Cells("國定假日加班時數").Value = Val(Strings.Left(國假日加_tb.Text, 2)) & " 時 " & Val(Strings.Right(國假日加_tb.Text, 2)) & " 分" End If Next : GCM_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0 Set_考勤流水() End Sub Private Sub 考勤明細表_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.MdiParent = GCM_ERP_SYS : Me.WindowState = 2 : Me.AutoScroll = True GCM_ERP_SYS.WindowState = 2 年份_下拉表單資料載入() : 讀取班別() 年份_cb.Text = Year(Today) : 月份_cb.SelectedIndex = Month(Today) - 1 PA1 = 年份_cb.Text : PA2 = 月份_cb.Text Dim DB01, DB02, DB03, DB04, DB05, DB06, DB07, DB08, DB09, DB10, DB11, DB12, DB13, DB14, DB15, DB16 As New DataGridViewTextBoxColumn DB01.HeaderText = "No" : DB01.Name = "No" : 整體考勤_dgv.Columns.Insert(0, DB01) DB02.HeaderText = "姓名" : DB02.Name = "姓名" : 整體考勤_dgv.Columns.Insert(1, DB02) DB03.HeaderText = "年份" : DB03.Name = "年份" : 整體考勤_dgv.Columns.Insert(2, DB03) DB04.HeaderText = "月份" : DB04.Name = "月份" : 整體考勤_dgv.Columns.Insert(3, DB04) DB05.HeaderText = "漏打卡次數" : DB05.Name = "漏打卡次數" : 整體考勤_dgv.Columns.Insert(4, DB05) DB06.HeaderText = "平日總工時" : DB06.Name = "平日總工時" : 整體考勤_dgv.Columns.Insert(5, DB06) DB07.HeaderText = "加班總工時" : DB07.Name = "加班總工時" : 整體考勤_dgv.Columns.Insert(6, DB07) DB08.HeaderText = "總工時" : DB08.Name = "總工時" : 整體考勤_dgv.Columns.Insert(7, DB08) DB09.HeaderText = "平日上班天數" : DB09.Name = "平日上班天數" : 整體考勤_dgv.Columns.Insert(8, DB09) DB10.HeaderText = "平日上班時數" : DB10.Name = "平日上班時數" : 整體考勤_dgv.Columns.Insert(9, DB10) DB11.HeaderText = "平日一段加班" : DB11.Name = "平日一段加班" : 整體考勤_dgv.Columns.Insert(10, DB11) DB12.HeaderText = "平日二段加班" : DB12.Name = "平日二段加班" : 整體考勤_dgv.Columns.Insert(11, DB12) DB13.HeaderText = "假日上班天數" : DB13.Name = "假日上班天數" : 整體考勤_dgv.Columns.Insert(12, DB13) DB14.HeaderText = "一段假日加班時數" : DB14.Name = "一段假日加班時數" : 整體考勤_dgv.Columns.Insert(13, DB14) DB15.HeaderText = "二段假日加班時數" : DB15.Name = "二段假日加班時數" : 整體考勤_dgv.Columns.Insert(14, DB15) DB16.HeaderText = "國定假日加班時數" : DB16.Name = "國定假日加班時數" : 整體考勤_dgv.Columns.Insert(15, DB16) 整體考勤_dgv.ColumnHeadersHeight = 40 : 整體考勤_dgv.AllowUserToAddRows = False 整體考勤_dgv.Columns(0).FillWeight = 50 : 整體考勤_dgv.Columns(1).FillWeight = 70 : 整體考勤_dgv.Columns(2).FillWeight = 50 : 整體考勤_dgv.Columns(3).FillWeight = 50 整體考勤_dgv.Columns(4).FillWeight = 100 : 整體考勤_dgv.Columns(5).FillWeight = 100 : 整體考勤_dgv.Columns(6).FillWeight = 100 : 整體考勤_dgv.Columns(7).FillWeight = 100 整體考勤_dgv.Columns(8).FillWeight = 100 : 整體考勤_dgv.Columns(9).FillWeight = 100 : 整體考勤_dgv.Columns(10).FillWeight = 100 : 整體考勤_dgv.Columns(11).FillWeight = 100 整體考勤_dgv.Columns(12).FillWeight = 100 : 整體考勤_dgv.Columns(13).FillWeight = 100 : 整體考勤_dgv.Columns(14).FillWeight = 100 : 整體考勤_dgv.Columns(15).FillWeight = 100 For I As Integer = 0 To 15 整體考勤_dgv.Columns(I).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter Next Dim DE01, DE02, DE03, DE04, DE05, DE06, DE07, DE08, DE09, DE10, DE11, DE12, DE13, DE14, DE15, DE16 As New DataGridViewTextBoxColumn DE01.HeaderText = "日期" : DE01.Name = "日期" : 排班彙總_dgv.Columns.Insert(0, DE01) DE02.HeaderText = "星期" : DE02.Name = "星期" : 排班彙總_dgv.Columns.Insert(1, DE02) DE03.HeaderText = "班別" : DE03.Name = "班別" : 排班彙總_dgv.Columns.Insert(2, DE03) DE04.HeaderText = "姓名" : DE04.Name = "姓名" : 排班彙總_dgv.Columns.Insert(3, DE04) 排班彙總_dgv.ColumnHeadersHeight = 40 : 排班彙總_dgv.AllowUserToAddRows = False 排班彙總_dgv.Columns(0).FillWeight = 80 : 排班彙總_dgv.Columns(1).FillWeight = 70 : 排班彙總_dgv.Columns(2).FillWeight = 90 : 排班彙總_dgv.Columns(3).FillWeight = 300 讀取日期() If BB(16) = False Then 考勤資料編輯_bt.Enabled = False : 時薪制_ch.Enabled = False : 彈性工時_ch.Enabled = False 人員_dgv.Enabled = False : 整體考勤彙總_bt.Enabled = False : 排班彙總_bt.Enabled = False : 重新讀取_bt.Enabled = False 姓名_tb.Text = gUserName : 資料數 = 31 For i As Integer = 0 To 人員_dgv.Rows.Count - 1 : If 姓名_tb.Text = 人員_dgv("姓名", i).Value.ToString Then : 時薪制_ch.Checked = 人員_dgv("CC18", i).Value : End If : Next SQL_考勤明細表_讀取編號() : If dr.Read() Then : 編號 = dr("DIN") : End If Set_考勤明細() : Set_考勤流水() : GCM_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0 End If End Sub Private Sub 考勤明細表_Closed(sender As Object, e As EventArgs) Handles MyBase.Closed GCM_ERP_SYS.WindowState = 0 End Sub Private Sub 人員_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 人員_dgv.CellClick If e.RowIndex = -1 Then : Else 編號 = 人員_dgv("編號", e.RowIndex).Value.ToString : 姓名_tb.Text = 人員_dgv("姓名", e.RowIndex).Value.ToString 時薪制_ch.Checked = 人員_dgv("CC18", e.RowIndex).Value 資料數 = 31 : Set_考勤明細() : Set_考勤流水() : GCM_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0 End If End Sub Private Sub 考勤流水_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 考勤流水_dgv.CellClick If e.RowIndex = -1 Then : Else ID_tb.Text = 考勤流水_dgv("ID", e.RowIndex).Value.ToString : 時間_tb.Text = 考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString PA6 = 考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString : PA3 = 考勤流水_dgv("ID", e.RowIndex).Value.ToString End If End Sub Private Sub 月清單_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 月清單_dgv.CellClick If e.RowIndex = -1 Then : Else ID_tb.Text = "" : 時間_tb.Text = "" 時間_tb.Text = Strings.Left(月清單_dgv("日期", e.RowIndex).Value, 4) & "-" & Strings.Mid(月清單_dgv("日期", e.RowIndex).Value, 6, 2) & "-" & Strings.Right(月清單_dgv("日期", e.RowIndex).Value, 2) If e.ColumnIndex = 8 Or e.ColumnIndex = 9 Or e.ColumnIndex = 11 Or e.ColumnIndex = 12 Or e.ColumnIndex = 14 Or e.ColumnIndex = 15 Then 時間_tb.Text = 時間_tb.Text & " " & 月清單_dgv(e.ColumnIndex, e.RowIndex).Value For i As Integer = 0 To 考勤流水_dgv.Rows.Count - 1 If Len(時間_tb.Text) > 11 Then If 時間_tb.Text = 考勤流水_dgv("打卡時間", i).Value.ToString Then ID_tb.Text = 考勤流水_dgv("ID", i).Value : PA3 = 考勤流水_dgv("ID", i).Value : PA6 = 考勤流水_dgv("打卡時間", i).Value.ToString : Exit For End If ElseIf Len(時間_tb.Text) = 11 Then If Strings.Left(時間_tb.Text, 10) = Strings.Left(考勤流水_dgv("打卡時間", i).Value.ToString, 10) Then ID_tb.Text = 考勤流水_dgv("ID", i).Value : PA3 = 考勤流水_dgv("ID", i).Value : PA6 = 考勤流水_dgv("打卡時間", i).Value.ToString : Exit For End If End If Next If ID_tb.Text = "" Then If 考勤流水_dgv.Rows.Count > 0 Then ID_tb.Text = 考勤流水_dgv("ID", 0).Value : PA3 = 考勤流水_dgv("ID", 0).Value : PA6 = 考勤流水_dgv("打卡時間", 0).Value.ToString Else MsgBox("一筆考勤都沒有的情況下無法編輯!!!!") End If End If Else 時間_tb.Text = "" : ID_tb.Text = "" End If End If End Sub Private Sub 月清單_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 月清單_dgv.RowPostPaint For I As Integer = 0 To 月清單_dgv.Rows.Count - 1 If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightYellow End If Next End Sub Private Sub 考勤流水_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 考勤流水_dgv.RowPostPaint Dim linePen As New Pen(Color.Blue, 2) If e.RowIndex = 考勤流水_dgv.Rows.Count - 1 Then : Exit Sub : Else If Strings.Left(考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString, 10) <> Strings.Left(考勤流水_dgv("打卡時間", e.RowIndex + 1).Value.ToString, 10) Then Dim startX As Integer = IIf(考勤流水_dgv.RowHeadersVisible, 考勤流水_dgv.RowHeadersWidth, 0) : Dim startY As Integer = e.RowBounds.Top + e.RowBounds.Height - 1 Dim endX As Integer = startX + 考勤流水_dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - 考勤流水_dgv.HorizontalScrollingOffset e.Graphics.DrawLine(linePen, startX, startY, endX, startY) : Exit Sub End If End If End Sub Private Sub 排班彙總_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 排班彙總_dgv.RowPostPaint Dim linePen As New Pen(Color.Blue, 2) If e.RowIndex = 排班彙總_dgv.Rows.Count - 1 Then : Exit Sub : Else If 排班彙總_dgv("星期", e.RowIndex).Value.ToString <> 排班彙總_dgv("星期", e.RowIndex + 1).Value.ToString Then Dim startX As Integer = IIf(排班彙總_dgv.RowHeadersVisible, 排班彙總_dgv.RowHeadersWidth, 0) : Dim startY As Integer = e.RowBounds.Top + e.RowBounds.Height - 1 Dim endX As Integer = startX + 排班彙總_dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - 排班彙總_dgv.HorizontalScrollingOffset e.Graphics.DrawLine(linePen, startX, startY, endX, startY) : Exit Sub End If End If End Sub Private Sub 月份_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 月份_cb.SelectedIndexChanged PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : 讀取人員資料表() If 編號 <> "" Then 資料數 = 31 : Set_考勤明細() : GCM_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0 讀取日期() End If End Sub Private Sub 個人考勤明細_bt_Click(sender As Object, e As EventArgs) Handles 個人考勤明細_bt.Click 個人考勤明細_bt.Enabled = False : 整體考勤彙總_bt.Enabled = True : 排班彙總_bt.Enabled = True : 整體考勤_dgv.Visible = False : 排班彙總_dgv.Visible = False : 月清單_dgv.Visible = True End Sub Private Sub 整體考勤彙總_bt_Click(sender As Object, e As EventArgs) Handles 整體考勤彙總_bt.Click 整體考勤彙總_bt.Enabled = False : 個人考勤明細_bt.Enabled = True : 排班彙總_bt.Enabled = True : 整體考勤_dgv.Visible = True : 排班彙總_dgv.Visible = False : 月清單_dgv.Visible = False If 整體考勤_dgv.Rows.Count > 0 Then : Else : 讀取彙總表() : End If End Sub Private Sub 排班彙總_bt_Click(sender As Object, e As EventArgs) Handles 排班彙總_bt.Click 排班彙總_bt.Enabled = False : 個人考勤明細_bt.Enabled = True : 整體考勤彙總_bt.Enabled = True : 整體考勤_dgv.Visible = False : 排班彙總_dgv.Visible = True : 月清單_dgv.Visible = False If 排班彙總_dgv.Rows.Count > 0 Then : Else : 讀取彙總表() : End If End Sub Private Sub 重新讀取_bt_Click(sender As Object, e As EventArgs) Handles 重新讀取_bt.Click 讀取彙總表() End Sub Private Sub 考勤資料編輯_bt_Click(sender As Object, e As EventArgs) Handles 考勤資料編輯_bt.Click If PA6 <> "" And PA3 <> "" And IsNumeric(PA3) <> False Then PA4 = PA6 : PA = 年份_cb.Text : PA1 = 月份_cb.Text : PA2 = Strings.Mid(PA6, 9, 2) PA5 = 姓名_tb.Text : PA7 = 編號 考勤明細表_編輯.ShowDialog() PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text Set_考勤流水() : 資料數 = 31 : Set_考勤明細() : GCM_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0 Else MsgBox("請選擇右下方的時間,做為修改的依據!!") End If End Sub Private Sub 排班資料_bt_Click(sender As Object, e As EventArgs) Handles 排班資料_bt.Click PA = 年份_cb.Text : PA1 = 月份_cb.Text : PA2 = 姓名_tb.Text : 個人班表.Close() : 個人班表.Show() End Sub Private Sub 時薪制_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 時薪制_ch.Click Set_時薪制() End Sub Private Sub 彈性工時_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 彈性工時_ch.Click Set_彈性工時() End Sub End Class