暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

考勤明細表.vb 53KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  1. Option Strict Off
  2. Public Class 考勤明細表
  3. 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
  4. ReadOnly ds6 As New DataSet : ReadOnly ds7 As New DataSet : ReadOnly ds8 As New DataSet
  5. Dim 編號 As String
  6. Dim T, S, F, M, T1, S1, TT, SS, FF, MM, FFF, MMM, 平日班, 假日班, 假加, 假加一, 假加二, 假加時1, 假加分1, 假加時2, 假加分2, 國假, 國假1, 國假2, 平日加, 平日加1, 平日加2,
  7. 正常時, 正常時1, 正常時2, 正常時3, 正常時4, 加班時, 加班時1, 加班時2, 加班時3, 加班時4, 加班時5, 加班時6, 加班時7, 加班時8, 加班時9, 加班時10, 加班時11, 加班時12,
  8. 加班時13, 加班時14, 加班時15, 加班時16, 加班時17, 加班時18, 加班時19, 加班時20, 加班時21, 加班時22, 加班時23, 加班時24, 加班時25, 加班時26, 加班時27, 加班時28, 加班時29,
  9. 當天總分, 彈性扣時, 請假日 As Double
  10. Private Sub 讀取人員資料表()
  11. 人員_dgv.DataSource = Nothing : ds.Clear()
  12. 人員_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  13. 人員_dgv.ColumnHeadersHeight = 25
  14. 人員_dgv.AllowUserToAddRows = False
  15. SQL_考勤明細表_人員()
  16. da.Fill(ds) : 人員_dgv.DataSource = ds.Tables(0) : conn.Close()
  17. 人員_dgv.Columns(0).FillWeight = 70 : 人員_dgv.Columns(1).Visible = False : 人員_dgv.Columns(2).FillWeight = 100 : 人員_dgv.Columns(3).Visible = False
  18. 人員_dgv.Columns(4).Visible = False : 人員_dgv.Columns(5).Visible = False : 人員_dgv.Columns(6).Visible = False : 人員_dgv.Columns(7).Visible = False
  19. 人員_dgv.Columns(8).Visible = False : 人員_dgv.Columns(9).Visible = False
  20. For i As Integer = 0 To 人員_dgv.Rows.Count - 1
  21. 人員_dgv.Rows(i).Cells("No.").Value = i + 1
  22. Next
  23. End Sub
  24. Private Sub Set_假期統計()
  25. End Sub
  26. Private Sub Set_考勤明細()
  27. 月清單_dgv.DataSource = Nothing : ds1.Clear()
  28. 月清單_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  29. 月清單_dgv.ColumnHeadersHeight = 40
  30. 月清單_dgv.AllowUserToAddRows = False
  31. PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : SQL_考勤明細表_月份考勤()
  32. da.Fill(ds1) : 月清單_dgv.DataSource = ds1.Tables(0) : conn.Close()
  33. 月清單_dgv.Columns(0).FillWeight = 100 : 月清單_dgv.Columns(1).FillWeight = 60 : 月清單_dgv.Columns(2).FillWeight = 90 : 月清單_dgv.Columns(3).FillWeight = 100
  34. 月清單_dgv.Columns(4).FillWeight = 80 : 月清單_dgv.Columns(5).Visible = False : 月清單_dgv.Columns(6).Visible = False : 月清單_dgv.Columns(7).Visible = False
  35. 月清單_dgv.Columns(8).FillWeight = 80 : 月清單_dgv.Columns(9).FillWeight = 80 : 月清單_dgv.Columns(10).FillWeight = 60 : 月清單_dgv.Columns(11).FillWeight = 80
  36. 月清單_dgv.Columns(12).FillWeight = 80 : 月清單_dgv.Columns(13).FillWeight = 60 : 月清單_dgv.Columns(14).FillWeight = 80 : 月清單_dgv.Columns(15).FillWeight = 80
  37. 月清單_dgv.Columns(16).FillWeight = 60 : 月清單_dgv.Columns(17).FillWeight = 60 : 月清單_dgv.Columns(18).Visible = False : 月清單_dgv.Columns(19).FillWeight = 60
  38. 月清單_dgv.Columns(20).FillWeight = 60 : 月清單_dgv.Columns(21).FillWeight = 40 : 月清單_dgv.Columns(22).FillWeight = 40 : 月清單_dgv.Columns(23).FillWeight = 100
  39. 月清單_dgv.Columns(24).FillWeight = 80 : 月清單_dgv.Columns(25).FillWeight = 150 : 月清單_dgv.Columns("休息1").Visible = False : 月清單_dgv.Columns("休息2").Visible = False
  40. 月清單_dgv.Columns("半天").Visible = False : 月清單_dgv.Columns("班別").Visible = False : 月清單_dgv.Columns("最後下診").Visible = False
  41. 讀取打卡時間1() : 讀取打卡時間2()
  42. Dim S2, F2 As String
  43. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  44. MyModule1.進度條()
  45. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And
  46. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString = "" Then
  47. 月清單_dgv.Rows(I).Cells("申請狀態").Value = "."
  48. End If
  49. 月清單_dgv.Rows(I).Cells("一段工時").Value = "" : 月清單_dgv.Rows(I).Cells("二段工時").Value = "" : 月清單_dgv.Rows(I).Cells("加班工時").Value = ""
  50. 月清單_dgv.Rows(I).Cells("休息1").Value = "" : 月清單_dgv.Rows(I).Cells("休息2").Value = "" : 月清單_dgv.Rows(I).Cells("一段加班").Value = ""
  51. 月清單_dgv.Rows(I).Cells("二段加班").Value = "" : 月清單_dgv.Rows(I).Cells("加班下班").Value = "" : 月清單_dgv.Rows(I).Cells("加班上班").Value = ""
  52. 月清單_dgv.Rows(I).Cells("二段下班").Value = "" : 月清單_dgv.Rows(I).Cells("二段上班").Value = "" : 月清單_dgv.Rows(I).Cells("一段下班").Value = ""
  53. If IsDBNull(月清單_dgv.Rows(I).Cells("半天").Value) = True Then : 月清單_dgv.Rows(I).Cells("半天").Value = False : End If
  54. If IsDBNull(月清單_dgv.Rows(I).Cells("班別").Value) = True Then : 月清單_dgv.Rows(I).Cells("班別").Value = "" : End If
  55. If 月清單_dgv.Rows(I).Cells("班別").Value.ToString = "休" Then : Else : 月清單_dgv.Rows(I).Cells("班別").Value = Strings.Right(月清單_dgv.Rows(I).Cells("班別").Value, 2) : End If
  56. '--------------------------讀入資料------------------------------------------------------------------------------------------------------------------------------------
  57. PA3 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("日期").Value, 2))
  58. PA4 = 月清單_dgv.Rows(I).Cells("日期").Value.ToString
  59. If 時間讀取1_dgv.Rows.Count > 0 Then
  60. For II As Integer = 0 To 時間讀取1_dgv.Rows.Count - 1
  61. If PA4 = 時間讀取1_dgv.Rows(II).Cells("日期").Value.ToString Then
  62. 月清單_dgv.Rows(I).Cells("一段上班").Value = 時間讀取1_dgv.Rows(II).Cells("打卡時間").Value.ToString : Exit For
  63. Else : 月清單_dgv.Rows(I).Cells("一段上班").Value = ""
  64. End If
  65. Next
  66. For II As Integer = 0 To 班別_dgv.Rows.Count - 1
  67. If 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString <> "" Then
  68. If FormatDateTime(班別_dgv.Rows(II).Cells("時段1").Value.ToString, DateFormat.ShortTime) <
  69. FormatDateTime(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DateFormat.ShortTime) And
  70. FormatDateTime(班別_dgv.Rows(II).Cells("時段2").Value.ToString, DateFormat.ShortTime) >
  71. FormatDateTime(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DateFormat.ShortTime) Then
  72. 月清單_dgv.Rows(I).Cells("班別判斷").Value = 班別_dgv.Rows(II).Cells("時段").Value.ToString
  73. 月清單_dgv.Rows(I).Cells("休息1").Value = 班別_dgv.Rows(II).Cells("一段休息").Value.ToString
  74. 月清單_dgv.Rows(I).Cells("休息2").Value = 班別_dgv.Rows(II).Cells("二段休息").Value.ToString
  75. DTPS(0) = 班別_dgv.Rows(II).Cells("時段2").Value.ToString : DTPS(1) = 班別_dgv.Rows(II).Cells("時段4").Value.ToString()
  76. DTPS(2) = 班別_dgv.Rows(II).Cells("時段4").Value.ToString : DTPS(3) = 班別_dgv.Rows(II).Cells("時段6").Value.ToString()
  77. DTPS(4) = 班別_dgv.Rows(II).Cells("時段6").Value.ToString
  78. Exit For
  79. End If
  80. End If
  81. If II = 班別_dgv.Rows.Count - 1 Then
  82. For III As Integer = 0 To 班別_dgv.Rows.Count - 1
  83. If Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, 2)) <= Val(Strings.Left(班別_dgv.Rows(III).Cells("時段").Value.ToString, 2)) Then
  84. 月清單_dgv.Rows(I).Cells("班別判斷").Value = 班別_dgv.Rows(III).Cells("時段").Value.ToString
  85. 月清單_dgv.Rows(I).Cells("休息1").Value = 班別_dgv.Rows(II).Cells("一段休息").Value.ToString
  86. 月清單_dgv.Rows(I).Cells("休息2").Value = 班別_dgv.Rows(II).Cells("二段休息").Value.ToString
  87. DTPS(0) = 班別_dgv.Rows(III).Cells("時段2").Value.ToString : DTPS(1) = 班別_dgv.Rows(III).Cells("時段4").Value.ToString()
  88. DTPS(2) = 班別_dgv.Rows(III).Cells("時段4").Value.ToString : DTPS(3) = 班別_dgv.Rows(III).Cells("時段6").Value.ToString()
  89. DTPS(4) = 班別_dgv.Rows(III).Cells("時段6").Value.ToString
  90. Exit For
  91. End If
  92. 月清單_dgv.Rows(I).Cells("班別判斷").Value = "打卡異常"
  93. Next
  94. End If
  95. Next
  96. Else
  97. 月清單_dgv.Rows(I).Cells("一段上班").Value = "" : 月清單_dgv.Rows(I).Cells("班別判斷").Value = ""
  98. End If
  99. 月清單_dgv.Rows(I).Cells("一段下班").Value = "" : 月清單_dgv.Rows(I).Cells("二段上班").Value = ""
  100. Dim SD(2), 位置, 數量 As Integer : 數量 = 0
  101. For II As Integer = 0 To 時間讀取2_dgv.Rows.Count - 1
  102. If PA4 = 時間讀取2_dgv.Rows(II).Cells("日期").Value.ToString Then
  103. If 數量 = 0 Then
  104. ElseIf 數量 = 1 Then
  105. 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  106. ElseIf 數量 = 2 Then
  107. 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  108. ElseIf 數量 = 3 Then
  109. 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  110. ElseIf 數量 = 4 Then
  111. 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  112. ElseIf 數量 = 5 Then
  113. 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  114. End If : 數量 += 1
  115. End If
  116. Next
  117. '--------------------------打卡位置調整------------------------------------------------------------------------------------------------------------------------------------
  118. If 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString = 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString Then
  119. 月清單_dgv.Rows(I).Cells("一段下班").Value = ""
  120. End If
  121. For d As Integer = 1 To 4
  122. If 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString <> "" Then
  123. 月清單_dgv.Rows(I).Cells("加班上班").Value = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : 月清單_dgv.Rows(I).Cells("加班下班").Value = ""
  124. End If
  125. If 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString <> "" Then
  126. 月清單_dgv.Rows(I).Cells("二段下班").Value = 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString : 月清單_dgv.Rows(I).Cells("加班上班").Value = ""
  127. End If
  128. If 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString <> "" Then
  129. 月清單_dgv.Rows(I).Cells("二段上班").Value = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : 月清單_dgv.Rows(I).Cells("二段下班").Value = ""
  130. End If
  131. If 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString <> "" Then
  132. 月清單_dgv.Rows(I).Cells("一段下班").Value = 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString : 月清單_dgv.Rows(I).Cells("二段上班").Value = ""
  133. End If
  134. Next
  135. '--------------------------工時計算------------------------------------------------------------------------------------------------------------------------------------
  136. Dim QASW1 As Integer : Dim QASW2 As Integer : Dim QASW3 As Integer
  137. Dim DD As String
  138. '-如果下班時間超過晚上12點時的分段計算------------------------------------------
  139. If Strings.Left(月清單_dgv.Rows(I).Cells("一段下班").Value.ToString, 2) = "00" Then
  140. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("一段下班").Value) : QASW1 = TSFM
  141. Else : DD = 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString : QASW1 = 0 : End If
  142. '-第一段上班時間正常打卡計算------------------------------------------
  143. If 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString <> "" And DD <> "" Then
  144. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DD)
  145. TSFM += QASW1
  146. If 時薪制_ch.Checked = False Then
  147. If 月清單_dgv.Rows(I).Cells("半天").Value = False Then
  148. '-第二段上下班都沒打卡,但是累計工時大於4小時(14400),先扣除一小時休息,第一段工時等於4小時,在把時數放到第二段工時------------------------------------------
  149. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  150. QASW2 = TSFM - 14400 - (Val(月清單_dgv.Rows(I).Cells("休息1").Value) * 3600)
  151. If QASW2 < 0 Then : QASW2 = 0 : End If
  152. TSFM = 14400
  153. '-如果加班上下班都沒打卡,但扣除第一段時數的累計工時還是大於4小時(14400),先扣除一小時休息,第二段工時等於4小時,在把時數放到加班段工時------------------------------------------
  154. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  155. QASW3 = QASW2 - 14400 - (Val(月清單_dgv.Rows(I).Cells("休息2").Value) * 3600)
  156. If QASW3 < 0 Then : QASW3 = 0 : End If
  157. QASW2 = 14400
  158. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  159. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  160. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  161. End If
  162. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  163. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  164. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  165. End If
  166. Else
  167. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  168. QASW2 = TSFM - 14400
  169. If QASW2 < 0 Then : QASW2 = 0 : End If
  170. TSFM = 14400
  171. '-如果加班上下班都沒打卡,但扣除第一段時數的累計工時還是大於4小時(14400),先扣除一小時休息,第二段工時等於4小時,在把時數放到加班段工時------------------------------------------
  172. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  173. QASW3 = QASW2 - 14400
  174. If QASW3 < 0 Then : QASW3 = 0 : End If
  175. QASW2 = 14400
  176. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  177. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  178. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  179. End If
  180. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  181. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  182. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  183. End If
  184. End If
  185. Else
  186. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  187. QASW2 = TSFM - 14400
  188. If QASW2 < 0 Then : QASW2 = 0 : End If
  189. TSFM = 14400
  190. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  191. QASW3 = QASW2 - 14400
  192. If QASW3 < 0 Then : QASW3 = 0 : End If
  193. QASW2 = 14400
  194. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  195. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  196. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  197. End If
  198. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  199. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  200. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  201. End If
  202. End If
  203. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  204. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  205. 月清單_dgv.Rows(I).Cells("一段工時").Value = S2 & " : " & F2
  206. End If
  207. '-如果下班時間超過晚上12點時的分段計算------------------------------------------
  208. If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value.ToString, 2) = "00" Then
  209. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("二段下班").Value) : QASW1 = TSFM
  210. Else : DD = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : QASW1 = 0 : End If
  211. '-第二段上班時間正常打卡計算------------------------------------------
  212. If 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString <> "" And DD <> "" Then
  213. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString, DD)
  214. TSFM += QASW1
  215. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  216. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  217. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  218. End If
  219. '-如果下班時間超過晚上12點時的分段計算------------------------------------------
  220. If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value.ToString, 2) = "00" Then
  221. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("二段下班").Value) : QASW1 = TSFM
  222. Else : DD = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : QASW1 = 0 : End If
  223. '-加班上班時間正常打卡計算------------------------------------------
  224. If 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString <> "" And DD <> "" Then
  225. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString, DD)
  226. TSFM += QASW1
  227. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  228. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  229. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  230. End If
  231. 當天總分 = (Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) +
  232. Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) +
  233. Val(Strings.Left(月清單_dgv.Rows(I).Cells("加班工時").Value.ToString, 2))) * 60 +
  234. (Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) +
  235. Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) +
  236. Val(Strings.Right(月清單_dgv.Rows(I).Cells("加班工時").Value.ToString, 2)))
  237. If 當天總分 <= 240 Then
  238. 月清單_dgv.Rows(I).Cells("一段工時").Value = 當天總分 \ 60 & " : " & 當天總分 Mod 60
  239. 月清單_dgv.Rows(I).Cells("二段工時").Value = "" : 月清單_dgv.Rows(I).Cells("加班工時").Value = ""
  240. ElseIf 當天總分 > 240 Then
  241. 月清單_dgv.Rows(I).Cells("一段工時").Value = "4 : 0"
  242. 月清單_dgv.Rows(I).Cells("二段工時").Value = (當天總分 - 240) \ 60 & " : " & (當天總分 - 240) Mod 60
  243. If (當天總分 - 240) <= 240 Then : Else
  244. 月清單_dgv.Rows(I).Cells("二段工時").Value = "4 : 0"
  245. 月清單_dgv.Rows(I).Cells("一段加班").Value = (當天總分 - 240 - 240) \ 60 & " : " & (當天總分 - 240 - 240) Mod 60
  246. If (當天總分 - 240 - 240) <= 120 Then : Else
  247. 月清單_dgv.Rows(I).Cells("一段加班").Value = "2 : 0"
  248. 月清單_dgv.Rows(I).Cells("二段加班").Value = (當天總分 - 240 - 240 - 120) \ 60 & " : " & (當天總分 - 240 - 240 - 120) Mod 60
  249. If (當天總分 - 240 - 240 - 120) <= 120 Then : Else
  250. 月清單_dgv.Rows(I).Cells("二段加班").Value = "2 : 0"
  251. End If
  252. End If
  253. End If
  254. End If
  255. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString = "0 : 0" Then
  256. 月清單_dgv.Rows(I).Cells("一段工時").Value = ""
  257. End If
  258. '--------------------------假日標色------------------------------------------------------------------------------------------------------------------------------------
  259. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  260. ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  261. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  262. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightYellow
  263. End If
  264. '--------------------------加班未申請去除------------------------------------------------------------------------------------------------------------------------------------
  265. If 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString <> "已核准" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And
  266. 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And
  267. 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString <> "." Then
  268. 月清單_dgv.Rows(I).Cells("一段加班").Value = "" : 月清單_dgv.Rows(I).Cells("二段加班").Value = ""
  269. End If
  270. Next
  271. 平日班 = 0 : 正常時1 = 0 : 正常時2 = 0 : 正常時3 = 0 : 正常時4 = 0 : 加班時9 = 0 : 加班時10 = 0 : 加班時11 = 0 : 加班時12 = 0 : 加班時8 = 0 : 加班時21 = 0
  272. 加班時17 = 0 : 加班時18 = 0 : 加班時19 = 0 : 加班時20 = 0 : 加班時23 = 0 : 加班時24 = 0 : 加班時25 = 0 : 加班時26 = 0 : 假日班 = 0 : 加班時27 = 0 : 請假日 = 0
  273. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  274. If 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" And
  275. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "特休" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "未到" And
  276. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "離職" Then
  277. 請假日 += 1
  278. End If
  279. '---------------------------平日
  280. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And
  281. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "" Then
  282. 加班時27 += 1
  283. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" Then
  284. 平日班 += 1
  285. 正常時1 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 正常時2 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  286. End If
  287. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" Then
  288. 正常時3 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 正常時4 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  289. End If
  290. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" Then
  291. 加班時9 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時10 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  292. End If
  293. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" Then
  294. 加班時11 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時12 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  295. End If
  296. End If
  297. '---------------------------星期六
  298. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then
  299. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "0 : 0" Then
  300. 假日班 += 1
  301. 加班時3 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 加班時4 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  302. 加班時7 = 加班時3 + (加班時4 / 60)
  303. If 加班時7 > 2 Then
  304. 加班時8 += 2 : 加班時21 += (加班時7 - 2)
  305. Else
  306. 加班時8 += 加班時7
  307. End If
  308. End If
  309. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "0 : 0" Then
  310. 加班時5 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 加班時6 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  311. 加班時21 += 加班時5 + (加班時6 / 60)
  312. End If
  313. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "0 : 0" Then
  314. 加班時13 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時14 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  315. 加班時21 += (加班時13 + (加班時14 / 60))
  316. End If
  317. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "0 : 0" Then
  318. 加班時15 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時16 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  319. 加班時21 += (加班時15 + (加班時16 / 60))
  320. End If
  321. End If
  322. '--------------------------星期日或國定假日
  323. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Or 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then
  324. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "0 : 0" Then
  325. 假日班 += 1
  326. 加班時17 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 加班時18 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  327. End If
  328. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "0 : 0" Then
  329. 加班時19 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 加班時20 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  330. End If
  331. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "0 : 0" Then
  332. 月清單_dgv.Rows(I).Cells("一段加班").Value = "0 : 0"
  333. 加班時23 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時24 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  334. End If
  335. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "0 : 0" Then
  336. 月清單_dgv.Rows(I).Cells("二段加班").Value = "0 : 0"
  337. 加班時25 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時26 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  338. End If
  339. End If
  340. Next
  341. FF = (正常時2 + 正常時4) / 60
  342. 正常時 = 正常時1 + 正常時3 + FF
  343. 當月平日天_tb.Text = 平日班 + 假日班 : 當月假日天_tb.Text = 請假日
  344. 常日總_tb.Text = Format(正常時, "#,##0.00")
  345. 當月平日一段_tb.Text = Format((加班時9 + (加班時10 / 60)), "#,##0.00")
  346. 當月平日二段_tb.Text = Format((加班時11 + (加班時12 / 60)), "#,##0.00")
  347. 一段假日加_tb.Text = Format(加班時8, "#,##0.00")
  348. 二段假日加_tb.Text = Format(加班時21, "#,##0.00")
  349. 國假日加_tb.Text = Format(加班時17 + 加班時19 + 加班時23 + 加班時25 + (加班時18 + 加班時20 + 加班時24 + 加班時26) / 60, "#,##0.00")
  350. Set_時薪制() : Set_彈性工時()
  351. 加班總_tb.Text = Format((加班時9 + (加班時10 / 60)) + (加班時11 + (加班時12 / 60)) + 加班時8 + 加班時21 +
  352. (加班時17 + 加班時19 + 加班時23 + 加班時25 + (加班時18 + 加班時20 + 加班時24 + 加班時26) / 60), "#,##0.00")
  353. If 時薪制_ch.Checked = True Then
  354. 月薪_tb.Text = Strings.Format((CDbl(時薪_tb.Text) * CDbl(常日總_tb.Text)), "#,##0.0")
  355. Else
  356. 時薪_tb.Text = Strings.Format((CDbl(月薪_tb.Text) / 30 / 8), "#,##0.0")
  357. End If
  358. Dim ds As New DataSet
  359. 假期統計_dgv.DataSource = Nothing : ds.Clear()
  360. 假期統計_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  361. 假期統計_dgv.ColumnHeadersHeight = 25
  362. 假期統計_dgv.AllowUserToAddRows = False
  363. PA = 編號 : PA1 = 年份_cb.Text & "/" & 月份_cb.Text : SQL_休假統計1()
  364. da.Fill(ds) : 假期統計_dgv.DataSource = ds.Tables(0) : conn.Close()
  365. 第1段加班費1_tb.Text = Strings.Format(((CDbl(當月平日一段_tb.Text) + CDbl(一段假日加_tb.Text)) * CDbl(時薪_tb.Text) * 1.34), "#,##0.0")
  366. 第2段加班費1_tb.Text = Strings.Format(((CDbl(當月平日二段_tb.Text) + CDbl(二段假日加_tb.Text)) * CDbl(時薪_tb.Text) * 1.67), "#,##0.0")
  367. 第3段加班費1_tb.Text = Strings.Format((CDbl(國假日加_tb.Text) * CDbl(時薪_tb.Text) * 2), "#,##0.0")
  368. 加班費1_tb.Text = Strings.Format((CDbl(第1段加班費1_tb.Text) + CDbl(第2段加班費1_tb.Text) + CDbl(第3段加班費1_tb.Text)), "#,##0.0")
  369. 應付小計1_tb.Text = Strings.Format((CDbl(月薪_tb.Text) + CDbl(加班費1_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text)), "#,##0.0")
  370. 第1段加班費2_tb.Text = Strings.Format(((CDbl(當月平日一段1_tb.Text) + CDbl(一段假日加1_tb.Text)) * CDbl(時薪_tb.Text) * 1.34), "#,##0.0")
  371. 第2段加班費2_tb.Text = Strings.Format(((CDbl(當月平日二段1_tb.Text) + CDbl(二段假日加1_tb.Text)) * CDbl(時薪_tb.Text) * 1.67), "#,##0.0")
  372. 第3段加班費2_tb.Text = Strings.Format((CDbl(國假日加1_tb.Text) * CDbl(時薪_tb.Text) * 2), "#,##0.0")
  373. 加班費2_tb.Text = Strings.Format((CDbl(第1段加班費2_tb.Text) + CDbl(第2段加班費2_tb.Text) + CDbl(第3段加班費2_tb.Text)), "#,##0.0")
  374. 應付小計2_tb.Text = Strings.Format((CDbl(月薪_tb.Text) + CDbl(加班費2_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text)), "#,##0.0")
  375. End Sub
  376. Private Sub Set_時薪制()
  377. If 時薪制_ch.Checked = False Then
  378. 當月應上天數_tb.Text = 加班時27
  379. 上班總工時_tb.Text = Format(加班時27 * 8, "#,##0.00")
  380. 應上未上時數_tb.Text = Format((加班時27 * 8) - 正常時, "#,##0.00")
  381. Else
  382. 當月應上天數_tb.Text = "0" : 上班總工時_tb.Text = "0.00" : 應上未上時數_tb.Text = "0.00"
  383. End If
  384. End Sub
  385. Private Sub Set_彈性工時()
  386. If 彈性工時_ch.Checked = False Then
  387. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  388. 二段假日加1_tb.Text = 二段假日加_tb.Text : 國假日加1_tb.Text = 國假日加_tb.Text
  389. Else
  390. 彈性扣時 = 應上未上時數_tb.Text
  391. If Val(國假日加_tb.Text) >= 彈性扣時 Then
  392. 國假日加1_tb.Text = Format(Val(國假日加_tb.Text) - 彈性扣時, "#,##0.00")
  393. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text : 二段假日加1_tb.Text = 二段假日加_tb.Text
  394. ElseIf Val(國假日加_tb.Text) < 彈性扣時 Then
  395. 彈性扣時 -= Val(國假日加_tb.Text) : 國假日加1_tb.Text = "0.00"
  396. If Val(二段假日加_tb.Text) >= 彈性扣時 Then
  397. 二段假日加1_tb.Text = Format(Val(二段假日加_tb.Text) - 彈性扣時, "#,##0.00")
  398. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  399. ElseIf Val(二段假日加_tb.Text) < 彈性扣時 Then
  400. 彈性扣時 -= Val(二段假日加_tb.Text) : 二段假日加1_tb.Text = "0.00"
  401. If Val(當月平日二段_tb.Text) >= 彈性扣時 Then
  402. 當月平日二段1_tb.Text = Format(Val(當月平日二段_tb.Text) - 彈性扣時, "#,##0.00")
  403. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  404. ElseIf Val(當月平日二段_tb.Text) < 彈性扣時 Then
  405. 彈性扣時 -= Val(當月平日二段_tb.Text) : 當月平日二段1_tb.Text = "0.00"
  406. If Val(一段假日加_tb.Text) >= 彈性扣時 Then
  407. 一段假日加1_tb.Text = Format(Val(一段假日加_tb.Text) - 彈性扣時, "#,##0.00")
  408. 當月平日一段1_tb.Text = 當月平日一段_tb.Text
  409. ElseIf Val(一段假日加_tb.Text) < 彈性扣時 Then
  410. 彈性扣時 -= Val(一段假日加_tb.Text) : 一段假日加1_tb.Text = "0.00"
  411. If Val(當月平日一段_tb.Text) >= 彈性扣時 Then
  412. 當月平日一段1_tb.Text = Format(Val(當月平日一段_tb.Text) - 彈性扣時, "#,##0.00")
  413. ElseIf Val(當月平日一段_tb.Text) < 彈性扣時 Then
  414. 當月平日一段1_tb.Text = "0.00"
  415. End If
  416. End If
  417. End If
  418. End If
  419. End If
  420. End If
  421. End Sub
  422. Private Sub Set_考勤流水()
  423. 考勤流水_dgv.DataSource = Nothing : ds5.Clear()
  424. 考勤流水_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  425. 考勤流水_dgv.ColumnHeadersHeight = 25
  426. 考勤流水_dgv.AllowUserToAddRows = False
  427. SQL_考勤明細表_考勤流水()
  428. da.Fill(ds5) : 考勤流水_dgv.DataSource = ds5.Tables(0) : conn.Close()
  429. 考勤流水_dgv.Columns(0).FillWeight = 30 : 考勤流水_dgv.Columns(1).FillWeight = 30 : 考勤流水_dgv.Columns(2).FillWeight = 100
  430. For i As Integer = 0 To 考勤流水_dgv.Rows.Count - 1
  431. 考勤流水_dgv.Rows(i).Cells("No.").Value = i + 1
  432. Next
  433. End Sub
  434. Private Sub 讀取班別()
  435. 班別_dgv.DataSource = Nothing : ds7.Clear()
  436. 班別_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  437. 班別_dgv.ColumnHeadersHeight = 25
  438. 班別_dgv.AllowUserToAddRows = False
  439. SQL_考勤明細表_班別()
  440. da.Fill(ds7) : 班別_dgv.DataSource = ds7.Tables(0) : conn.Close()
  441. 班別_dgv.Columns(0).FillWeight = 80 : 班別_dgv.Columns(1).FillWeight = 130 : 班別_dgv.Columns(2).FillWeight = 130 : 班別_dgv.Columns(3).FillWeight = 100
  442. 班別_dgv.Columns(4).FillWeight = 130 : 班別_dgv.Columns(5).FillWeight = 100 : 班別_dgv.Columns(6).FillWeight = 100 : 班別_dgv.Columns(7).FillWeight = 100
  443. 班別_dgv.Columns(8).FillWeight = 100 : 班別_dgv.Columns(9).Visible = False : 班別_dgv.Columns(10).FillWeight = 100 : 班別_dgv.Columns(11).Visible = False
  444. 班別_dgv.Columns(12).FillWeight = 100 : 班別_dgv.Columns(13).Visible = False : 班別_dgv.Columns(14).Visible = False
  445. End Sub
  446. Private Sub 讀取打卡時間1()
  447. 時間讀取1_dgv.DataSource = Nothing : ds2.Clear()
  448. 時間讀取1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  449. 時間讀取1_dgv.ColumnHeadersHeight = 25
  450. 時間讀取1_dgv.AllowUserToAddRows = False
  451. SQL_考勤明細表_打卡讀取_上午上班()
  452. da.Fill(ds2) : 時間讀取1_dgv.DataSource = ds2.Tables(0) : conn.Close()
  453. End Sub
  454. Private Sub 讀取打卡時間2()
  455. 時間讀取2_dgv.DataSource = Nothing : ds3.Clear()
  456. 時間讀取2_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  457. 時間讀取2_dgv.ColumnHeadersHeight = 25
  458. 時間讀取2_dgv.AllowUserToAddRows = False
  459. SQL_考勤明細表_打卡讀取_中午下上班()
  460. da.Fill(ds3) : 時間讀取2_dgv.DataSource = ds3.Tables(0) : conn.Close()
  461. End Sub
  462. Private Sub 讀取打卡時間3()
  463. 時間讀取3_dgv.DataSource = Nothing : ds4.Clear()
  464. 時間讀取3_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  465. 時間讀取3_dgv.ColumnHeadersHeight = 25
  466. 時間讀取3_dgv.AllowUserToAddRows = False
  467. SQL_考勤明細表_打卡讀取_晚上下上班()
  468. da.Fill(ds4) : 時間讀取3_dgv.DataSource = ds4.Tables(0) : conn.Close()
  469. End Sub
  470. Private Sub 讀取打卡時間4()
  471. 時間讀取4_dgv.DataSource = Nothing : ds6.Clear()
  472. 時間讀取4_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  473. 時間讀取4_dgv.ColumnHeadersHeight = 25
  474. 時間讀取4_dgv.AllowUserToAddRows = False
  475. SQL_考勤明細表_打卡讀取_加班下班()
  476. da.Fill(ds6) : 時間讀取4_dgv.DataSource = ds6.Tables(0) : conn.Close()
  477. End Sub
  478. Private Sub 讀取日期()
  479. 日期_dgv.DataSource = Nothing : ds8.Clear()
  480. 日期_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  481. 日期_dgv.ColumnHeadersHeight = 25
  482. 日期_dgv.AllowUserToAddRows = False
  483. SQL_讀取日期()
  484. da.Fill(ds8) : 日期_dgv.DataSource = ds8.Tables(0) : conn.Close()
  485. End Sub
  486. Private Sub 年份_下拉表單資料載入()
  487. SQL_考勤明細表_年份_下拉()
  488. 年份_cb.Items.Clear()
  489. While (dr.Read()) : 年份_cb.Items.Add(dr("年份")) : End While
  490. conn.Close()
  491. End Sub
  492. Private Sub 考勤明細表_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  493. 'Me.MdiParent = GRAMS_SYS : Me.WindowState = 2 : Me.AutoScroll = True
  494. 年份_下拉表單資料載入() : 讀取班別()
  495. 年份_cb.Text = Year(Today) : 月份_cb.SelectedIndex = Month(Today) - 1
  496. PA1 = 年份_cb.Text : PA2 = 月份_cb.Text
  497. 讀取日期()
  498. If CC(16) = False Then
  499. 考勤資料編輯_bt.Enabled = False : 時薪制_ch.Enabled = False : 彈性工時_ch.Enabled = False
  500. 人員_dgv.Enabled = False : Panel5.Visible = False
  501. 姓名_tb.Text = gUserName : 資料數 = 31
  502. 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
  503. SQL_考勤明細表_讀取編號() : If dr.Read() Then : 編號 = dr("DIN") : End If
  504. Set_考勤明細() : PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : Set_考勤流水() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  505. End If
  506. End Sub
  507. Private Sub 人員_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 人員_dgv.CellClick
  508. If e.RowIndex = -1 Then : Else
  509. 編號 = 人員_dgv("編號", e.RowIndex).Value.ToString : 姓名_tb.Text = 人員_dgv("姓名", e.RowIndex).Value.ToString
  510. 時薪制_ch.Checked = 人員_dgv("CC18", e.RowIndex).Value
  511. 月薪_tb.Text = Strings.Format(CDbl(人員_dgv("月薪", e.RowIndex).Value.ToString), "#,##0.0")
  512. 時薪_tb.Text = Strings.Format(CDbl(人員_dgv("時薪", e.RowIndex).Value.ToString), "#,##0.0")
  513. 主管加級_tb.Text = Strings.Format(CDbl(人員_dgv("主管加級", e.RowIndex).Value.ToString), "#,##0.0")
  514. 職務加級_tb.Text = Strings.Format(CDbl(人員_dgv("職務加級", e.RowIndex).Value.ToString), "#,##0.0")
  515. 健保費_tb.Text = Strings.Format(CDbl(人員_dgv("健保費", e.RowIndex).Value.ToString), "#,##0.0")
  516. 勞保費_tb.Text = Strings.Format(CDbl(人員_dgv("勞保費", e.RowIndex).Value.ToString), "#,##0.0")
  517. 資料數 = 31 : Set_考勤明細() : PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : Set_考勤流水() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  518. End If
  519. End Sub
  520. Private Sub 考勤流水_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 考勤流水_dgv.CellClick
  521. If e.RowIndex = -1 Then : Else
  522. ID_tb.Text = 考勤流水_dgv("ID", e.RowIndex).Value.ToString : 時間_tb.Text = 考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString
  523. PA6 = 考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString : PA3 = 考勤流水_dgv("ID", e.RowIndex).Value.ToString
  524. End If
  525. End Sub
  526. Private Sub 月清單_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 月清單_dgv.CellClick
  527. If e.RowIndex = -1 Then : Else
  528. ID_tb.Text = "" : 時間_tb.Text = ""
  529. 時間_tb.Text = Strings.Left(月清單_dgv("日期", e.RowIndex).Value, 4) & "-" & Strings.Mid(月清單_dgv("日期", e.RowIndex).Value, 6, 2) &
  530. "-" & Strings.Right(月清單_dgv("日期", e.RowIndex).Value, 2)
  531. 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
  532. If 月清單_dgv(e.ColumnIndex, e.RowIndex).Value <> "" Then
  533. 時間_tb.Text = 時間_tb.Text & " " & 月清單_dgv(e.ColumnIndex, e.RowIndex).Value
  534. For i As Integer = 0 To 考勤流水_dgv.Rows.Count - 1
  535. If Len(時間_tb.Text) > 11 Then
  536. If 時間_tb.Text = 考勤流水_dgv("打卡時間", i).Value.ToString Then
  537. ID_tb.Text = 考勤流水_dgv("ID", i).Value : PA3 = 考勤流水_dgv("ID", i).Value : PA6 = 考勤流水_dgv("打卡時間", i).Value.ToString : Exit For
  538. End If
  539. ElseIf Len(時間_tb.Text) = 11 Then
  540. If Strings.Left(時間_tb.Text, 10) = Strings.Left(考勤流水_dgv("打卡時間", i).Value.ToString, 10) Then
  541. ID_tb.Text = 考勤流水_dgv("ID", i).Value : PA3 = 考勤流水_dgv("ID", i).Value : PA6 = 考勤流水_dgv("打卡時間", i).Value.ToString : Exit For
  542. End If
  543. End If
  544. Next
  545. If ID_tb.Text = "" Then
  546. If e.ColumnIndex = 8 Then : PA6 = 時間_tb.Text & " 08:00:00"
  547. ElseIf e.ColumnIndex = 9 Then : PA6 = 時間_tb.Text & " 12:00:00"
  548. ElseIf e.ColumnIndex = 11 Then : PA6 = 時間_tb.Text & " 13:00:00"
  549. ElseIf e.ColumnIndex = 12 Then : PA6 = 時間_tb.Text & " 17:00:00"
  550. ElseIf e.ColumnIndex = 14 Then : PA6 = 時間_tb.Text & " 18:00:00"
  551. ElseIf e.ColumnIndex = 15 Then : PA6 = 時間_tb.Text & " 20:00:00"
  552. End If : PA3 = ""
  553. End If
  554. Else
  555. If ID_tb.Text = "" Then
  556. If e.ColumnIndex = 8 Then : PA6 = 時間_tb.Text & " 08:00:00"
  557. ElseIf e.ColumnIndex = 9 Then : PA6 = 時間_tb.Text & " 12:00:00"
  558. ElseIf e.ColumnIndex = 11 Then : PA6 = 時間_tb.Text & " 13:00:00"
  559. ElseIf e.ColumnIndex = 12 Then : PA6 = 時間_tb.Text & " 17:00:00"
  560. ElseIf e.ColumnIndex = 14 Then : PA6 = 時間_tb.Text & " 18:00:00"
  561. ElseIf e.ColumnIndex = 15 Then : PA6 = 時間_tb.Text & " 20:00:00"
  562. End If : PA3 = ""
  563. End If
  564. End If
  565. 考勤明細表_編輯.時間_dtp.Value = PA6 : 考勤明細表_編輯.姓名_tb.Text = 姓名_tb.Text
  566. 考勤明細表_編輯.ID_lb.Text = PA3 : 考勤明細表_編輯.ID1_lb.Text = 編號
  567. Else
  568. 時間_tb.Text = "" : ID_tb.Text = ""
  569. End If
  570. End If : 考勤明細表_編輯.BringToFront()
  571. End Sub
  572. Private Sub 月清單_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 月清單_dgv.RowPostPaint
  573. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  574. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  575. ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  576. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  577. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightYellow
  578. End If
  579. Next
  580. End Sub
  581. Private Sub 考勤流水_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 考勤流水_dgv.RowPostPaint
  582. Dim linePen As New Pen(Color.Blue, 2)
  583. If e.RowIndex = 考勤流水_dgv.Rows.Count - 1 Then : Exit Sub : Else
  584. If Strings.Left(考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString, 10) <> Strings.Left(考勤流水_dgv("打卡時間", e.RowIndex + 1).Value.ToString, 10) Then
  585. Dim startX As Integer = IIf(考勤流水_dgv.RowHeadersVisible, 考勤流水_dgv.RowHeadersWidth, 0) : Dim startY As Integer = e.RowBounds.Top + e.RowBounds.Height - 1
  586. Dim endX As Integer = startX + 考勤流水_dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - 考勤流水_dgv.HorizontalScrollingOffset
  587. e.Graphics.DrawLine(linePen, startX, startY, endX, startY) : Exit Sub
  588. End If
  589. End If
  590. End Sub
  591. Private Sub 月份_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 月份_cb.SelectedIndexChanged
  592. PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : 讀取人員資料表()
  593. If 編號 <> "" Then
  594. 資料數 = 31 : Set_考勤明細() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  595. 讀取日期()
  596. End If
  597. End Sub
  598. Private Sub 考勤資料編輯_bt_Click(sender As Object, e As EventArgs) Handles 考勤資料編輯_bt.Click
  599. If PA6 <> "" Then
  600. PA4 = PA6 : PA = 年份_cb.Text : PA1 = 月份_cb.Text : PA2 = Strings.Mid(PA6, 9, 2)
  601. PA5 = 姓名_tb.Text : PA7 = 編號 : 考勤明細表_編輯.Show() : 考勤重讀()
  602. Else
  603. MsgBox("請選擇右下方的時間,做為修改的依據!!")
  604. End If
  605. End Sub
  606. Private Sub 考勤重讀()
  607. PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text
  608. Set_考勤流水() : 資料數 = 31 : Set_考勤明細() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  609. End Sub
  610. Private Sub R_bt_Click(sender As Object, e As EventArgs) Handles R_bt.Click
  611. 考勤重讀()
  612. End Sub
  613. Private Sub 排班資料_bt_Click(sender As Object, e As EventArgs) Handles 排班資料_bt.Click
  614. PA = 年份_cb.Text : PA1 = 月份_cb.Text : PA2 = 姓名_tb.Text : 個人班表.Close() : 個人班表.Show()
  615. End Sub
  616. Private Sub 時薪制_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 時薪制_ch.Click
  617. Set_時薪制()
  618. End Sub
  619. Private Sub 彈性工時_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 彈性工時_ch.Click
  620. Set_彈性工時()
  621. End Sub
  622. End Class