暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

考勤明細表.vb 65KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779
  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).FillWeight = 80 : 人員_dgv.Columns(2).FillWeight = 100 : 人員_dgv.Columns(3).Visible = False
  18. For i As Integer = 0 To 人員_dgv.Rows.Count - 1
  19. 人員_dgv.Rows(i).Cells("No.").Value = i + 1
  20. Next
  21. End Sub
  22. Private Sub Set_考勤明細()
  23. 月清單_dgv.DataSource = Nothing : ds1.Clear()
  24. 月清單_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  25. 月清單_dgv.ColumnHeadersHeight = 40
  26. 月清單_dgv.AllowUserToAddRows = False
  27. PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : SQL_考勤明細表_月份考勤()
  28. da.Fill(ds1) : 月清單_dgv.DataSource = ds1.Tables(0) : conn.Close()
  29. 月清單_dgv.Columns(0).FillWeight = 100 : 月清單_dgv.Columns(1).FillWeight = 60 : 月清單_dgv.Columns(2).FillWeight = 90 : 月清單_dgv.Columns(3).FillWeight = 80
  30. 月清單_dgv.Columns(4).FillWeight = 60 : 月清單_dgv.Columns(5).Visible = False : 月清單_dgv.Columns(6).Visible = False : 月清單_dgv.Columns(7).Visible = False
  31. 月清單_dgv.Columns(8).FillWeight = 100 : 月清單_dgv.Columns(9).FillWeight = 100 : 月清單_dgv.Columns(10).FillWeight = 60 : 月清單_dgv.Columns(11).FillWeight = 100
  32. 月清單_dgv.Columns(12).FillWeight = 100 : 月清單_dgv.Columns(13).FillWeight = 60 : 月清單_dgv.Columns(14).FillWeight = 100 : 月清單_dgv.Columns(15).FillWeight = 100
  33. 月清單_dgv.Columns(16).FillWeight = 60 : 月清單_dgv.Columns(17).FillWeight = 60 : 月清單_dgv.Columns(18).Visible = False : 月清單_dgv.Columns(19).FillWeight = 60
  34. 月清單_dgv.Columns(20).FillWeight = 60 : 月清單_dgv.Columns(21).FillWeight = 40 : 月清單_dgv.Columns(22).FillWeight = 40 : 月清單_dgv.Columns(23).FillWeight = 100
  35. 月清單_dgv.Columns(24).FillWeight = 80 : 月清單_dgv.Columns(25).FillWeight = 150
  36. Dim S2, F2 As String
  37. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  38. MyModule1.進度條()
  39. 月清單_dgv.Rows(I).Cells("一段工時").Value = "" : 月清單_dgv.Rows(I).Cells("二段工時").Value = "" : 月清單_dgv.Rows(I).Cells("加班工時").Value = ""
  40. 月清單_dgv.Rows(I).Cells("休息1").Value = "" : 月清單_dgv.Rows(I).Cells("休息2").Value = "" : 月清單_dgv.Rows(I).Cells("一段加班").Value = ""
  41. 月清單_dgv.Rows(I).Cells("二段加班").Value = "" : 月清單_dgv.Rows(I).Cells("加班下班").Value = "" : 月清單_dgv.Rows(I).Cells("加班上班").Value = ""
  42. 月清單_dgv.Rows(I).Cells("二段下班").Value = "" : 月清單_dgv.Rows(I).Cells("二段上班").Value = "" : 月清單_dgv.Rows(I).Cells("一段下班").Value = ""
  43. If IsDBNull(月清單_dgv.Rows(I).Cells("半天").Value) = True Then : 月清單_dgv.Rows(I).Cells("半天").Value = False : End If
  44. If IsDBNull(月清單_dgv.Rows(I).Cells("班別").Value) = True Then : 月清單_dgv.Rows(I).Cells("班別").Value = "" : End If
  45. If 月清單_dgv.Rows(I).Cells("班別").Value.ToString = "休" Then : Else : 月清單_dgv.Rows(I).Cells("班別").Value = Strings.Right(月清單_dgv.Rows(I).Cells("班別").Value, 2) : End If
  46. '---------------------------讀入資料------------------------------------------------------------------------------------------------------------------------------------
  47. PA3 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("日期").Value, 2))
  48. PA4 = DateAdd("D", 1, 月清單_dgv.Rows(I).Cells("日期").Value.ToString)
  49. 讀取打卡時間1()
  50. If 時間讀取1_dgv.Rows.Count > 0 Then
  51. 月清單_dgv.Rows(I).Cells("一段上班").Value = 時間讀取1_dgv.Rows(0).Cells("打卡時間").Value
  52. For II As Integer = 0 To 班別_dgv.Rows.Count - 1
  53. If FormatDateTime(班別_dgv.Rows(II).Cells("時段1").Value.ToString, DateFormat.ShortTime) <
  54. FormatDateTime(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DateFormat.ShortTime) And
  55. FormatDateTime(班別_dgv.Rows(II).Cells("時段2").Value.ToString, DateFormat.ShortTime) >
  56. FormatDateTime(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DateFormat.ShortTime) Then
  57. 月清單_dgv.Rows(I).Cells("班別判斷").Value = 班別_dgv.Rows(II).Cells("時段").Value.ToString
  58. 月清單_dgv.Rows(I).Cells("休息1").Value = 班別_dgv.Rows(II).Cells("一段休息").Value.ToString
  59. 月清單_dgv.Rows(I).Cells("休息2").Value = 班別_dgv.Rows(II).Cells("二段休息").Value.ToString
  60. DTPS(0) = 班別_dgv.Rows(II).Cells("時段2").Value.ToString : DTPS(1) = 班別_dgv.Rows(II).Cells("時段4").Value.ToString()
  61. DTPS(2) = 班別_dgv.Rows(II).Cells("時段4").Value.ToString : DTPS(3) = 班別_dgv.Rows(II).Cells("時段6").Value.ToString()
  62. DTPS(4) = 班別_dgv.Rows(II).Cells("時段6").Value.ToString
  63. Exit For
  64. End If
  65. If II = 班別_dgv.Rows.Count - 1 Then
  66. For III As Integer = 0 To 班別_dgv.Rows.Count - 1
  67. If Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, 2)) <= Val(Strings.Left(班別_dgv.Rows(III).Cells("時段").Value.ToString, 2)) Then
  68. 月清單_dgv.Rows(I).Cells("班別判斷").Value = 班別_dgv.Rows(III).Cells("時段").Value.ToString
  69. 月清單_dgv.Rows(I).Cells("休息1").Value = 班別_dgv.Rows(II).Cells("一段休息").Value.ToString
  70. 月清單_dgv.Rows(I).Cells("休息2").Value = 班別_dgv.Rows(II).Cells("二段休息").Value.ToString
  71. DTPS(0) = 班別_dgv.Rows(III).Cells("時段2").Value.ToString : DTPS(1) = 班別_dgv.Rows(III).Cells("時段4").Value.ToString()
  72. DTPS(2) = 班別_dgv.Rows(III).Cells("時段4").Value.ToString : DTPS(3) = 班別_dgv.Rows(III).Cells("時段6").Value.ToString()
  73. DTPS(4) = 班別_dgv.Rows(III).Cells("時段6").Value.ToString
  74. Exit For
  75. End If
  76. 月清單_dgv.Rows(I).Cells("班別判斷").Value = "打卡異常"
  77. Next
  78. End If
  79. Next
  80. Else
  81. 月清單_dgv.Rows(I).Cells("一段上班").Value = "" : 月清單_dgv.Rows(I).Cells("班別判斷").Value = ""
  82. End If
  83. Dim SD(2) As Integer
  84. 讀取打卡時間2()
  85. If 時間讀取2_dgv.Rows.Count = 1 Then
  86. If Val(Strings.Left(時間讀取2_dgv.Rows(0).Cells("打卡時間").Value, 2)) >= Val(Strings.Left(DTPS(1), 2)) Then
  87. 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value : 月清單_dgv.Rows(I).Cells("一段下班").Value = ""
  88. Else
  89. 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value : 月清單_dgv.Rows(I).Cells("二段上班").Value = ""
  90. End If
  91. ElseIf 時間讀取2_dgv.Rows.Count = 2 Then
  92. 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value
  93. 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(1).Cells("打卡時間").Value
  94. ElseIf 時間讀取2_dgv.Rows.Count = 3 Then
  95. 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value
  96. 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(1).Cells("打卡時間").Value
  97. 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(2).Cells("打卡時間").Value
  98. ElseIf 時間讀取2_dgv.Rows.Count = 4 Then
  99. 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value
  100. 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(1).Cells("打卡時間").Value
  101. 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(2).Cells("打卡時間").Value
  102. 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取2_dgv.Rows(3).Cells("打卡時間").Value
  103. ElseIf 時間讀取2_dgv.Rows.Count = 5 Then
  104. 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(0).Cells("打卡時間").Value
  105. 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(1).Cells("打卡時間").Value
  106. 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(2).Cells("打卡時間").Value
  107. 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取2_dgv.Rows(3).Cells("打卡時間").Value
  108. 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取2_dgv.Rows(4).Cells("打卡時間").Value
  109. ElseIf 時間讀取2_dgv.Rows.Count = 6 Then
  110. 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(1).Cells("打卡時間").Value
  111. 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(2).Cells("打卡時間").Value
  112. 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(3).Cells("打卡時間").Value
  113. 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取2_dgv.Rows(4).Cells("打卡時間").Value
  114. 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取2_dgv.Rows(5).Cells("打卡時間").Value
  115. Else
  116. 月清單_dgv.Rows(I).Cells("一段下班").Value = "" : 月清單_dgv.Rows(I).Cells("二段上班").Value = ""
  117. End If
  118. 讀取打卡時間3()
  119. If 時間讀取3_dgv.Rows.Count > 1 Then
  120. SD(1) = 時間讀取3_dgv.Rows.Count - 1
  121. If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value, 2) = "星期" Then
  122. 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取3_dgv.Rows(0).Cells("打卡時間").Value
  123. End If
  124. If Strings.Left(月清單_dgv.Rows(I).Cells("加班上班").Value, 2) = "星期" Then
  125. 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取3_dgv.Rows(SD(1)).Cells("打卡時間").Value
  126. End If
  127. ElseIf 時間讀取3_dgv.Rows.Count = 1 Then
  128. If 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Then
  129. If Strings.Left(月清單_dgv.Rows(I).Cells("加班上班").Value, 2) = "星期" Then
  130. 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取3_dgv.Rows(0).Cells("打卡時間").Value
  131. End If
  132. If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value, 2) = "星期" Then
  133. 月清單_dgv.Rows(I).Cells("二段下班").Value = ""
  134. End If
  135. ElseIf 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Then
  136. If Strings.Left(月清單_dgv.Rows(I).Cells("加班上班").Value, 2) = "星期" Then
  137. 月清單_dgv.Rows(I).Cells("加班上班").Value = ""
  138. End If
  139. If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value, 2) = "星期" Then
  140. 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取3_dgv.Rows(0).Cells("打卡時間").Value
  141. End If
  142. End If
  143. Else
  144. If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value, 2) = "星期" Then
  145. 月清單_dgv.Rows(I).Cells("二段下班").Value = ""
  146. End If
  147. If Strings.Left(月清單_dgv.Rows(I).Cells("加班上班").Value, 2) = "星期" Then
  148. 月清單_dgv.Rows(I).Cells("加班上班").Value = ""
  149. End If
  150. End If
  151. 讀取打卡時間4()
  152. If 時間讀取4_dgv.Rows.Count > 1 Then
  153. SD(2) = 時間讀取4_dgv.Rows.Count - 1
  154. If Strings.Left(月清單_dgv.Rows(I).Cells("加班上班").Value, 2) = "星期" Then
  155. 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取4_dgv.Rows(0).Cells("打卡時間").Value
  156. End If
  157. If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value, 2) = "星期" Then
  158. 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取4_dgv.Rows(SD(2)).Cells("打卡時間").Value
  159. End If
  160. ElseIf 時間讀取4_dgv.Rows.Count = 1 Then
  161. If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value, 2) = "星期" Then
  162. 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取4_dgv.Rows(SD(2)).Cells("打卡時間").Value
  163. End If
  164. Else
  165. If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value, 2) = "星期" Then
  166. 月清單_dgv.Rows(I).Cells("加班下班").Value = ""
  167. End If
  168. End If
  169. '---------------------------打卡位置調整------------------------------------------------------------------------------------------------------------------------------------
  170. If 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString = 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString Then
  171. 月清單_dgv.Rows(I).Cells("一段下班").Value = ""
  172. End If
  173. For d As Integer = 1 To 4
  174. If 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString <> "" Then
  175. 月清單_dgv.Rows(I).Cells("加班上班").Value = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : 月清單_dgv.Rows(I).Cells("加班下班").Value = ""
  176. End If
  177. If 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString <> "" Then
  178. 月清單_dgv.Rows(I).Cells("二段下班").Value = 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString : 月清單_dgv.Rows(I).Cells("加班上班").Value = ""
  179. End If
  180. If 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString <> "" Then
  181. 月清單_dgv.Rows(I).Cells("二段上班").Value = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : 月清單_dgv.Rows(I).Cells("二段下班").Value = ""
  182. End If
  183. If 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString <> "" Then
  184. 月清單_dgv.Rows(I).Cells("一段下班").Value = 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString : 月清單_dgv.Rows(I).Cells("二段上班").Value = ""
  185. End If
  186. Next
  187. '---------------------------工時計算------------------------------------------------------------------------------------------------------------------------------------
  188. Dim QASW1 As Integer : Dim QASW2 As Integer : Dim QASW3 As Integer
  189. Dim DD As String
  190. '--如果下班時間超過晚上12點時的分段計算------------------------------------------
  191. If Strings.Left(月清單_dgv.Rows(I).Cells("一段下班").Value.ToString, 2) = "00" Then
  192. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("一段下班").Value) : QASW1 = TSFM
  193. Else : DD = 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString : QASW1 = 0 : End If
  194. '--第一段上班時間正常打卡計算------------------------------------------
  195. If 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString <> "" And DD <> "" Then
  196. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DD)
  197. TSFM += QASW1
  198. If 時薪制_ch.Checked = False Then
  199. If 月清單_dgv.Rows(I).Cells("半天").Value = False Then
  200. '--第二段上下班都沒打卡,但是累計工時大於4小時(14400),先扣除一小時休息,第一段工時等於4小時,在把時數放到第二段工時------------------------------------------
  201. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  202. QASW2 = TSFM - 14400 - (Val(月清單_dgv.Rows(I).Cells("休息1").Value) * 3600)
  203. If QASW2 < 0 Then : QASW2 = 0 : End If
  204. TSFM = 14400
  205. '--如果加班上下班都沒打卡,但扣除第一段時數的累計工時還是大於4小時(14400),先扣除一小時休息,第二段工時等於4小時,在把時數放到加班段工時------------------------------------------
  206. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  207. QASW3 = QASW2 - 14400 - (Val(月清單_dgv.Rows(I).Cells("休息2").Value) * 3600)
  208. If QASW3 < 0 Then : QASW3 = 0 : End If
  209. QASW2 = 14400
  210. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  211. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  212. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  213. End If
  214. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  215. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  216. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  217. End If
  218. Else
  219. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  220. QASW2 = TSFM - 14400
  221. If QASW2 < 0 Then : QASW2 = 0 : End If
  222. TSFM = 14400
  223. '--如果加班上下班都沒打卡,但扣除第一段時數的累計工時還是大於4小時(14400),先扣除一小時休息,第二段工時等於4小時,在把時數放到加班段工時------------------------------------------
  224. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  225. QASW3 = QASW2 - 14400
  226. If QASW3 < 0 Then : QASW3 = 0 : End If
  227. QASW2 = 14400
  228. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  229. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  230. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  231. End If
  232. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  233. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  234. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  235. End If
  236. End If
  237. Else
  238. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  239. QASW2 = TSFM - 14400
  240. If QASW2 < 0 Then : QASW2 = 0 : End If
  241. TSFM = 14400
  242. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  243. QASW3 = QASW2 - 14400
  244. If QASW3 < 0 Then : QASW3 = 0 : End If
  245. QASW2 = 14400
  246. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  247. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  248. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  249. End If
  250. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  251. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  252. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  253. End If
  254. End If
  255. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  256. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  257. 月清單_dgv.Rows(I).Cells("一段工時").Value = S2 & " : " & F2
  258. End If
  259. '--如果下班時間超過晚上12點時的分段計算------------------------------------------
  260. If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value.ToString, 2) = "00" Then
  261. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("二段下班").Value) : QASW1 = TSFM
  262. Else : DD = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : QASW1 = 0 : End If
  263. '--第二段上班時間正常打卡計算------------------------------------------
  264. If 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString <> "" And DD <> "" Then
  265. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString, DD)
  266. TSFM += QASW1
  267. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  268. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  269. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  270. End If
  271. '--如果下班時間超過晚上12點時的分段計算------------------------------------------
  272. If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value.ToString, 2) = "00" Then
  273. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("二段下班").Value) : QASW1 = TSFM
  274. Else : DD = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : QASW1 = 0 : End If
  275. '--加班上班時間正常打卡計算------------------------------------------
  276. If 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString <> "" And DD <> "" Then
  277. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString, DD)
  278. TSFM += QASW1
  279. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  280. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  281. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  282. End If
  283. 當天總分 = (Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) +
  284. Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) +
  285. Val(Strings.Left(月清單_dgv.Rows(I).Cells("加班工時").Value.ToString, 2))) * 60 +
  286. (Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) +
  287. Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) +
  288. Val(Strings.Right(月清單_dgv.Rows(I).Cells("加班工時").Value.ToString, 2)))
  289. If 當天總分 <= 240 Then
  290. 月清單_dgv.Rows(I).Cells("一段工時").Value = 當天總分 \ 60 & " : " & 當天總分 Mod 60
  291. 月清單_dgv.Rows(I).Cells("二段工時").Value = "" : 月清單_dgv.Rows(I).Cells("加班工時").Value = ""
  292. ElseIf 當天總分 > 240 Then
  293. 月清單_dgv.Rows(I).Cells("一段工時").Value = "4 : 0"
  294. 月清單_dgv.Rows(I).Cells("二段工時").Value = (當天總分 - 240) \ 60 & " : " & (當天總分 - 240) Mod 60
  295. If (當天總分 - 240) <= 240 Then : Else
  296. 月清單_dgv.Rows(I).Cells("二段工時").Value = "4 : 0"
  297. 月清單_dgv.Rows(I).Cells("一段加班").Value = (當天總分 - 240 - 240) \ 60 & " : " & (當天總分 - 240 - 240) Mod 60
  298. If (當天總分 - 240 - 240) <= 120 Then : Else
  299. 月清單_dgv.Rows(I).Cells("一段加班").Value = "2 : 0"
  300. 月清單_dgv.Rows(I).Cells("二段加班").Value = (當天總分 - 240 - 240 - 120) \ 60 & " : " & (當天總分 - 240 - 240 - 120) Mod 60
  301. If (當天總分 - 240 - 240 - 120) <= 120 Then : Else
  302. 月清單_dgv.Rows(I).Cells("二段加班").Value = "2 : 0"
  303. End If
  304. End If
  305. End If
  306. End If
  307. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString = "0 : 0" Then
  308. 月清單_dgv.Rows(I).Cells("一段工時").Value = ""
  309. End If
  310. '---------------------------假日標色------------------------------------------------------------------------------------------------------------------------------------
  311. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  312. ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  313. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  314. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightYellow
  315. End If
  316. '---------------------------加班未申請去除------------------------------------------------------------------------------------------------------------------------------------
  317. If 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString <> "已核准" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And
  318. 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" Then
  319. 月清單_dgv.Rows(I).Cells("一段加班").Value = "" : 月清單_dgv.Rows(I).Cells("二段加班").Value = ""
  320. End If
  321. Next
  322. 平日班 = 0 : 正常時1 = 0 : 正常時2 = 0 : 正常時3 = 0 : 正常時4 = 0 : 加班時9 = 0 : 加班時10 = 0 : 加班時11 = 0 : 加班時12 = 0 : 加班時8 = 0 : 加班時21 = 0
  323. 加班時17 = 0 : 加班時18 = 0 : 加班時19 = 0 : 加班時20 = 0 : 加班時23 = 0 : 加班時24 = 0 : 加班時25 = 0 : 加班時26 = 0 : 假日班 = 0 : 加班時27 = 0 : 請假日 = 0
  324. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  325. If 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" And
  326. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "特休" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "未到" And
  327. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "離職" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "補上班" Then
  328. 請假日 += 1
  329. End If
  330. ''---------------------------平日
  331. Dim 是否平日 As Boolean = True
  332. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "補上班" Then : 是否平日 = True
  333. ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "補上班" Then : 是否平日 = False
  334. ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "補上班" Then : 是否平日 = True
  335. ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "補上班" Then : 是否平日 = False
  336. End If
  337. If 是否平日 = True And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And
  338. (月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "補上班") Then
  339. 加班時27 += 1
  340. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" Then
  341. 平日班 += 1
  342. 正常時1 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 正常時2 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  343. End If
  344. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" Then
  345. 正常時3 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 正常時4 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  346. End If
  347. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" Then
  348. 加班時9 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時10 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  349. End If
  350. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" Then
  351. 加班時11 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時12 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  352. End If
  353. End If
  354. ''---------------------------星期六
  355. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "補上班" Then
  356. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "0 : 0" Then
  357. 假日班 += 1
  358. 加班時3 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 加班時4 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  359. 加班時7 = 加班時3 + (加班時4 / 60)
  360. If 加班時7 > 2 Then
  361. 加班時8 += 2 : 加班時21 += (加班時7 - 2)
  362. Else
  363. 加班時8 += 加班時7
  364. End If
  365. End If
  366. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "0 : 0" Then
  367. 加班時5 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 加班時6 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  368. 加班時21 += 加班時5 + (加班時6 / 60)
  369. End If
  370. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "0 : 0" Then
  371. 加班時13 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時14 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  372. 加班時21 += (加班時13 + (加班時14 / 60))
  373. End If
  374. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "0 : 0" Then
  375. 加班時15 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時16 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  376. 加班時21 += (加班時15 + (加班時16 / 60))
  377. End If
  378. End If
  379. '---------------------------星期日或國定假日
  380. If (月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "補上班") Or
  381. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then
  382. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "0 : 0" Then
  383. 假日班 += 1
  384. 加班時17 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 加班時18 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  385. End If
  386. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "0 : 0" Then
  387. 加班時19 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 加班時20 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  388. End If
  389. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "0 : 0" Then
  390. 月清單_dgv.Rows(I).Cells("一段加班").Value = "0 : 0"
  391. 加班時23 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時24 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  392. End If
  393. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "0 : 0" Then
  394. 月清單_dgv.Rows(I).Cells("二段加班").Value = "0 : 0"
  395. 加班時25 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時26 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  396. End If
  397. End If
  398. Next
  399. FF = (正常時2 + 正常時4) / 60
  400. 正常時 = 正常時1 + 正常時3 + FF
  401. 當月平日天_tb.Text = 平日班 + 假日班 : 當月假日天_tb.Text = 請假日
  402. 常日總_tb.Text = Format(正常時, "#,##0.00")
  403. 當月平日一段_tb.Text = Format((加班時9 + (加班時10 / 60)), "#,##0.00")
  404. 當月平日二段_tb.Text = Format((加班時11 + (加班時12 / 60)), "#,##0.00")
  405. 一段假日加_tb.Text = Format(加班時8, "#,##0.00")
  406. 二段假日加_tb.Text = Format(加班時21, "#,##0.00")
  407. 國假日加_tb.Text = Format(加班時17 + 加班時19 + 加班時23 + 加班時25 + (加班時18 + 加班時20 + 加班時24 + 加班時26) / 60, "#,##0.00")
  408. Set_時薪制() : Set_彈性工時()
  409. 加班總_tb.Text = Format((加班時9 + (加班時10 / 60)) + (加班時11 + (加班時12 / 60)) + 加班時8 + 加班時21 +
  410. (加班時17 + 加班時19 + 加班時23 + 加班時25 + (加班時18 + 加班時20 + 加班時24 + 加班時26) / 60), "#,##0.00")
  411. End Sub
  412. Private Sub Set_時薪制()
  413. If 時薪制_ch.Checked = False Then
  414. 當月應上天數_tb.Text = 加班時27
  415. 上班總工時_tb.Text = Format(加班時27 * 8, "#,##0.00")
  416. 應上未上時數_tb.Text = Format((加班時27 * 8) - 正常時, "#,##0.00")
  417. Else
  418. 當月應上天數_tb.Text = "0" : 上班總工時_tb.Text = "0.00" : 應上未上時數_tb.Text = "0.00"
  419. End If
  420. End Sub
  421. Private Sub Set_彈性工時()
  422. If 彈性工時_ch.Checked = False Then
  423. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  424. 二段假日加1_tb.Text = 二段假日加_tb.Text : 國假日加1_tb.Text = 國假日加_tb.Text
  425. Else
  426. 彈性扣時 = 應上未上時數_tb.Text
  427. If Val(國假日加_tb.Text) >= 彈性扣時 Then
  428. 國假日加1_tb.Text = Format(Val(國假日加_tb.Text) - 彈性扣時, "#,##0.00")
  429. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text : 二段假日加1_tb.Text = 二段假日加_tb.Text
  430. ElseIf Val(國假日加_tb.Text) <彈性扣時 Then
  431. 彈性扣時 -= Val(國假日加_tb.Text) : 國假日加1_tb.Text = "0.00"
  432. If Val(二段假日加_tb.Text) >= 彈性扣時 Then
  433. 二段假日加1_tb.Text = Format(Val(二段假日加_tb.Text) - 彈性扣時, "#,##0.00")
  434. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  435. ElseIf Val(二段假日加_tb.Text) < 彈性扣時 Then
  436. 彈性扣時 -= Val(二段假日加_tb.Text) : 二段假日加1_tb.Text = "0.00"
  437. If Val(當月平日二段_tb.Text) >= 彈性扣時 Then
  438. 當月平日二段1_tb.Text = Format(Val(當月平日二段_tb.Text) - 彈性扣時, "#,##0.00")
  439. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  440. ElseIf Val(當月平日二段_tb.Text) < 彈性扣時 Then
  441. 彈性扣時 -= Val(當月平日二段_tb.Text) : 當月平日二段1_tb.Text = "0.00"
  442. If Val(一段假日加_tb.Text) >= 彈性扣時 Then
  443. 一段假日加1_tb.Text = Format(Val(一段假日加_tb.Text) - 彈性扣時, "#,##0.00")
  444. 當月平日一段1_tb.Text = 當月平日一段_tb.Text
  445. ElseIf Val(一段假日加_tb.Text) < 彈性扣時 Then
  446. 彈性扣時 -= Val(一段假日加_tb.Text) : 一段假日加1_tb.Text = "0.00"
  447. If Val(當月平日一段_tb.Text) >= 彈性扣時 Then
  448. 當月平日一段1_tb.Text = Format(Val(當月平日一段_tb.Text) - 彈性扣時, "#,##0.00")
  449. ElseIf Val(當月平日一段_tb.Text) < 彈性扣時 Then
  450. 當月平日一段1_tb.Text = "0.00"
  451. End If
  452. End If
  453. End If
  454. End If
  455. End If
  456. End If
  457. End Sub
  458. Private Sub Set_考勤流水()
  459. 考勤流水_dgv.DataSource = Nothing : ds5.Clear()
  460. 考勤流水_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  461. 考勤流水_dgv.ColumnHeadersHeight = 25
  462. 考勤流水_dgv.AllowUserToAddRows = False
  463. SQL_考勤明細表_考勤流水()
  464. da.Fill(ds5) : 考勤流水_dgv.DataSource = ds5.Tables(0) : conn.Close()
  465. 考勤流水_dgv.Columns(0).FillWeight = 30 : 考勤流水_dgv.Columns(1).FillWeight = 30 : 考勤流水_dgv.Columns(2).FillWeight = 100
  466. For i As Integer = 0 To 考勤流水_dgv.Rows.Count - 1
  467. 考勤流水_dgv.Rows(i).Cells("No.").Value = i + 1
  468. Next
  469. End Sub
  470. Private Sub 讀取班別()
  471. 班別_dgv.DataSource = Nothing : ds7.Clear()
  472. 班別_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  473. 班別_dgv.ColumnHeadersHeight = 25
  474. 班別_dgv.AllowUserToAddRows = False
  475. SQL_考勤明細表_班別()
  476. da.Fill(ds7) : 班別_dgv.DataSource = ds7.Tables(0) : conn.Close()
  477. 班別_dgv.Columns(0).FillWeight = 80 : 班別_dgv.Columns(1).FillWeight = 130 : 班別_dgv.Columns(2).FillWeight = 130 : 班別_dgv.Columns(3).FillWeight = 100
  478. 班別_dgv.Columns(4).FillWeight = 130 : 班別_dgv.Columns(5).FillWeight = 100 : 班別_dgv.Columns(6).FillWeight = 100 : 班別_dgv.Columns(7).FillWeight = 100
  479. 班別_dgv.Columns(8).FillWeight = 100 : 班別_dgv.Columns(9).Visible = False : 班別_dgv.Columns(10).FillWeight = 100 : 班別_dgv.Columns(11).Visible = False
  480. 班別_dgv.Columns(12).FillWeight = 100 : 班別_dgv.Columns(13).Visible = False : 班別_dgv.Columns(14).Visible = False
  481. End Sub
  482. Private Sub 讀取打卡時間1()
  483. 時間讀取1_dgv.DataSource = Nothing : ds2.Clear()
  484. 時間讀取1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  485. 時間讀取1_dgv.ColumnHeadersHeight = 25
  486. 時間讀取1_dgv.AllowUserToAddRows = False
  487. SQL_考勤明細表_打卡讀取_上午上班()
  488. da.Fill(ds2) : 時間讀取1_dgv.DataSource = ds2.Tables(0) : conn.Close()
  489. End Sub
  490. Private Sub 讀取打卡時間2()
  491. 時間讀取2_dgv.DataSource = Nothing : ds3.Clear()
  492. 時間讀取2_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  493. 時間讀取2_dgv.ColumnHeadersHeight = 25
  494. 時間讀取2_dgv.AllowUserToAddRows = False
  495. SQL_考勤明細表_打卡讀取_中午下上班()
  496. da.Fill(ds3) : 時間讀取2_dgv.DataSource = ds3.Tables(0) : conn.Close()
  497. End Sub
  498. Private Sub 讀取打卡時間3()
  499. 時間讀取3_dgv.DataSource = Nothing : ds4.Clear()
  500. 時間讀取3_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  501. 時間讀取3_dgv.ColumnHeadersHeight = 25
  502. 時間讀取3_dgv.AllowUserToAddRows = False
  503. SQL_考勤明細表_打卡讀取_晚上下上班()
  504. da.Fill(ds4) : 時間讀取3_dgv.DataSource = ds4.Tables(0) : conn.Close()
  505. End Sub
  506. Private Sub 讀取打卡時間4()
  507. 時間讀取4_dgv.DataSource = Nothing : ds6.Clear()
  508. 時間讀取4_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  509. 時間讀取4_dgv.ColumnHeadersHeight = 25
  510. 時間讀取4_dgv.AllowUserToAddRows = False
  511. SQL_考勤明細表_打卡讀取_加班下班()
  512. da.Fill(ds6) : 時間讀取4_dgv.DataSource = ds6.Tables(0) : conn.Close()
  513. End Sub
  514. Private Sub 讀取日期()
  515. 日期_dgv.DataSource = Nothing : ds8.Clear()
  516. 日期_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  517. 日期_dgv.ColumnHeadersHeight = 25
  518. 日期_dgv.AllowUserToAddRows = False
  519. SQL_讀取日期()
  520. da.Fill(ds8) : 日期_dgv.DataSource = ds8.Tables(0) : conn.Close()
  521. End Sub
  522. Private Sub 年份_下拉表單資料載入()
  523. SQL_考勤明細表_年份_下拉()
  524. 年份_cb.Items.Clear()
  525. While (dr.Read()) : 年份_cb.Items.Add(dr("年份")) : End While
  526. conn.Close()
  527. End Sub
  528. Private Sub 讀取彙總表()
  529. For I As Integer = 0 To 整體考勤_dgv.Rows.Count - 1 : 整體考勤_dgv.Rows.RemoveAt(0) : Next
  530. For I As Integer = 0 To 排班彙總_dgv.Rows.Count - 1 : 排班彙總_dgv.Rows.RemoveAt(0) : Next
  531. Dim QA As Integer = 0
  532. For I As Integer = 0 To 日期_dgv.Rows.Count - 1
  533. For II As Integer = 0 To 班別_dgv.Rows.Count - 1
  534. 排班彙總_dgv.Rows.Add()
  535. 排班彙總_dgv.Rows(QA).Cells("日期").Value = 日期_dgv("日期", I).Value.ToString
  536. 排班彙總_dgv.Rows(QA).Cells("星期").Value = 日期_dgv("星期", I).Value.ToString
  537. 排班彙總_dgv.Rows(QA).Cells("班別").Value = 班別_dgv("時段", II).Value.ToString
  538. 排班彙總_dgv.Rows(QA).Cells("姓名").Value = ""
  539. QA += 1
  540. Next
  541. Next
  542. For I As Integer = 0 To 人員_dgv.Rows.Count - 1
  543. 資料數 = 31 * 人員_dgv.Rows.Count
  544. 編號 = 人員_dgv("編號", I).Value.ToString : 姓名_tb.Text = 人員_dgv("姓名", I).Value.ToString
  545. Set_考勤明細()
  546. For II As Integer = 0 To 月清單_dgv.Rows.Count - 1
  547. For III As Integer = 0 To 排班彙總_dgv.Rows.Count - 1
  548. If 月清單_dgv.Rows(II).Cells("日期").Value.ToString = 排班彙總_dgv.Rows(III).Cells("日期").Value.ToString And
  549. 月清單_dgv.Rows(II).Cells("班別判斷").Value.ToString = 排班彙總_dgv.Rows(III).Cells("班別").Value.ToString Then
  550. If 排班彙總_dgv.Rows(III).Cells("姓名").Value.ToString = "" Then
  551. 排班彙總_dgv.Rows(III).Cells("姓名").Value = 姓名_tb.Text
  552. Else
  553. 排班彙總_dgv.Rows(III).Cells("姓名").Value = 排班彙總_dgv.Rows(III).Cells("姓名").Value.ToString & " , " & 姓名_tb.Text
  554. End If
  555. End If
  556. Next
  557. Next
  558. 整體考勤_dgv.Rows.Add()
  559. 整體考勤_dgv.Rows(I).Cells("No").Value = I + 1 : 整體考勤_dgv.Rows(I).Cells("姓名").Value = 人員_dgv("姓名", I).Value.ToString
  560. 整體考勤_dgv.Rows(I).Cells("年份").Value = 年份_cb.Text : 整體考勤_dgv.Rows(I).Cells("月份").Value = 月份_cb.Text
  561. 整體考勤_dgv.Rows(I).Cells("漏打卡次數").Value = "0 次"
  562. If 常日總_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("平日總工時").Value = "" : Else
  563. 整體考勤_dgv.Rows(I).Cells("平日總工時").Value = Val(Strings.Left(常日總_tb.Text, 3)) & " 時 " & Val(Strings.Right(常日總_tb.Text, 2)) & " 分"
  564. End If
  565. If 加班總_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("加班總工時").Value = "" : Else
  566. 整體考勤_dgv.Rows(I).Cells("加班總工時").Value = Val(Strings.Left(加班總_tb.Text, 2)) & " 時 " & Val(Strings.Right(加班總_tb.Text, 2)) & " 分"
  567. End If
  568. If 上班總工時_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("總工時").Value = "" : Else
  569. 整體考勤_dgv.Rows(I).Cells("總工時").Value = Val(Strings.Left(上班總工時_tb.Text, 3)) & " 時 " & Val(Strings.Right(上班總工時_tb.Text, 2)) & " 分"
  570. End If
  571. 整體考勤_dgv.Rows(I).Cells("平日上班天數").Value = 當月平日天_tb.Text & " 天" : 整體考勤_dgv.Rows(I).Cells("假日上班天數").Value = 當月假日天_tb.Text & " 天"
  572. If 常日總_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("平日上班時數").Value = "" : Else
  573. 整體考勤_dgv.Rows(I).Cells("平日上班時數").Value = Val(Strings.Left(常日總_tb.Text, 3)) & " 時 " & Val(Strings.Right(常日總_tb.Text, 2)) & " 分"
  574. End If
  575. If 當月平日一段_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("平日一段加班").Value = "" : Else
  576. 整體考勤_dgv.Rows(I).Cells("平日一段加班").Value = Val(Strings.Left(當月平日一段_tb.Text, 2)) & " 時 " & Val(Strings.Right(當月平日一段_tb.Text, 2)) & " 分"
  577. End If
  578. If 當月平日二段_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("平日二段加班").Value = "" : Else
  579. 整體考勤_dgv.Rows(I).Cells("平日二段加班").Value = Val(Strings.Left(當月平日二段_tb.Text, 2)) & " 時 " & Val(Strings.Right(當月平日二段_tb.Text, 2)) & " 分"
  580. End If
  581. If 一段假日加_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("一段假日加班時數").Value = "" : Else
  582. 整體考勤_dgv.Rows(I).Cells("一段假日加班時數").Value = Val(Strings.Left(一段假日加_tb.Text, 2)) & " 時 " & Val(Strings.Right(一段假日加_tb.Text, 2)) & " 分"
  583. End If
  584. If 二段假日加_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("二段假日加班時數").Value = "" : Else
  585. 整體考勤_dgv.Rows(I).Cells("二段假日加班時數").Value = Val(Strings.Left(二段假日加_tb.Text, 2)) & " 時 " & Val(Strings.Right(二段假日加_tb.Text, 2)) & " 分"
  586. End If
  587. If 國假日加_tb.Text = "0 : 0" Then : 整體考勤_dgv.Rows(I).Cells("國定假日加班時數").Value = "" : Else
  588. 整體考勤_dgv.Rows(I).Cells("國定假日加班時數").Value = Val(Strings.Left(國假日加_tb.Text, 2)) & " 時 " & Val(Strings.Right(國假日加_tb.Text, 2)) & " 分"
  589. End If
  590. Next : GCM_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  591. Set_考勤流水()
  592. End Sub
  593. Private Sub 考勤明細表_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  594. Me.MdiParent = GCM_ERP_SYS : Me.WindowState = 2 : Me.AutoScroll = True
  595. GCM_ERP_SYS.WindowState = 2
  596. 年份_下拉表單資料載入() : 讀取班別()
  597. 年份_cb.Text = Year(Today) : 月份_cb.SelectedIndex = Month(Today) - 1
  598. PA1 = 年份_cb.Text : PA2 = 月份_cb.Text
  599. Dim DB01, DB02, DB03, DB04, DB05, DB06, DB07, DB08, DB09, DB10, DB11, DB12, DB13, DB14, DB15, DB16 As New DataGridViewTextBoxColumn
  600. DB01.HeaderText = "No" : DB01.Name = "No" : 整體考勤_dgv.Columns.Insert(0, DB01)
  601. DB02.HeaderText = "姓名" : DB02.Name = "姓名" : 整體考勤_dgv.Columns.Insert(1, DB02)
  602. DB03.HeaderText = "年份" : DB03.Name = "年份" : 整體考勤_dgv.Columns.Insert(2, DB03)
  603. DB04.HeaderText = "月份" : DB04.Name = "月份" : 整體考勤_dgv.Columns.Insert(3, DB04)
  604. DB05.HeaderText = "漏打卡次數" : DB05.Name = "漏打卡次數" : 整體考勤_dgv.Columns.Insert(4, DB05)
  605. DB06.HeaderText = "平日總工時" : DB06.Name = "平日總工時" : 整體考勤_dgv.Columns.Insert(5, DB06)
  606. DB07.HeaderText = "加班總工時" : DB07.Name = "加班總工時" : 整體考勤_dgv.Columns.Insert(6, DB07)
  607. DB08.HeaderText = "總工時" : DB08.Name = "總工時" : 整體考勤_dgv.Columns.Insert(7, DB08)
  608. DB09.HeaderText = "平日上班天數" : DB09.Name = "平日上班天數" : 整體考勤_dgv.Columns.Insert(8, DB09)
  609. DB10.HeaderText = "平日上班時數" : DB10.Name = "平日上班時數" : 整體考勤_dgv.Columns.Insert(9, DB10)
  610. DB11.HeaderText = "平日一段加班" : DB11.Name = "平日一段加班" : 整體考勤_dgv.Columns.Insert(10, DB11)
  611. DB12.HeaderText = "平日二段加班" : DB12.Name = "平日二段加班" : 整體考勤_dgv.Columns.Insert(11, DB12)
  612. DB13.HeaderText = "假日上班天數" : DB13.Name = "假日上班天數" : 整體考勤_dgv.Columns.Insert(12, DB13)
  613. DB14.HeaderText = "一段假日加班時數" : DB14.Name = "一段假日加班時數" : 整體考勤_dgv.Columns.Insert(13, DB14)
  614. DB15.HeaderText = "二段假日加班時數" : DB15.Name = "二段假日加班時數" : 整體考勤_dgv.Columns.Insert(14, DB15)
  615. DB16.HeaderText = "國定假日加班時數" : DB16.Name = "國定假日加班時數" : 整體考勤_dgv.Columns.Insert(15, DB16)
  616. 整體考勤_dgv.ColumnHeadersHeight = 40 : 整體考勤_dgv.AllowUserToAddRows = False
  617. 整體考勤_dgv.Columns(0).FillWeight = 50 : 整體考勤_dgv.Columns(1).FillWeight = 70 : 整體考勤_dgv.Columns(2).FillWeight = 50 : 整體考勤_dgv.Columns(3).FillWeight = 50
  618. 整體考勤_dgv.Columns(4).FillWeight = 100 : 整體考勤_dgv.Columns(5).FillWeight = 100 : 整體考勤_dgv.Columns(6).FillWeight = 100 : 整體考勤_dgv.Columns(7).FillWeight = 100
  619. 整體考勤_dgv.Columns(8).FillWeight = 100 : 整體考勤_dgv.Columns(9).FillWeight = 100 : 整體考勤_dgv.Columns(10).FillWeight = 100 : 整體考勤_dgv.Columns(11).FillWeight = 100
  620. 整體考勤_dgv.Columns(12).FillWeight = 100 : 整體考勤_dgv.Columns(13).FillWeight = 100 : 整體考勤_dgv.Columns(14).FillWeight = 100 : 整體考勤_dgv.Columns(15).FillWeight = 100
  621. For I As Integer = 0 To 15
  622. 整體考勤_dgv.Columns(I).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
  623. Next
  624. Dim DE01, DE02, DE03, DE04, DE05, DE06, DE07, DE08, DE09, DE10, DE11, DE12, DE13, DE14, DE15, DE16 As New DataGridViewTextBoxColumn
  625. DE01.HeaderText = "日期" : DE01.Name = "日期" : 排班彙總_dgv.Columns.Insert(0, DE01)
  626. DE02.HeaderText = "星期" : DE02.Name = "星期" : 排班彙總_dgv.Columns.Insert(1, DE02)
  627. DE03.HeaderText = "班別" : DE03.Name = "班別" : 排班彙總_dgv.Columns.Insert(2, DE03)
  628. DE04.HeaderText = "姓名" : DE04.Name = "姓名" : 排班彙總_dgv.Columns.Insert(3, DE04)
  629. 排班彙總_dgv.ColumnHeadersHeight = 40 : 排班彙總_dgv.AllowUserToAddRows = False
  630. 排班彙總_dgv.Columns(0).FillWeight = 80 : 排班彙總_dgv.Columns(1).FillWeight = 70 : 排班彙總_dgv.Columns(2).FillWeight = 90 : 排班彙總_dgv.Columns(3).FillWeight = 300
  631. 讀取日期()
  632. If BB(16) = False Then
  633. 考勤資料編輯_bt.Enabled = False : 時薪制_ch.Enabled = False : 彈性工時_ch.Enabled = False
  634. 人員_dgv.Enabled = False : 整體考勤彙總_bt.Enabled = False : 排班彙總_bt.Enabled = False : 重新讀取_bt.Enabled = False
  635. 姓名_tb.Text = gUserName : 資料數 = 31
  636. 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
  637. SQL_考勤明細表_讀取編號() : If dr.Read() Then : 編號 = dr("DIN") : End If
  638. Set_考勤明細() : Set_考勤流水() : GCM_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  639. End If
  640. End Sub
  641. Private Sub 考勤明細表_Closed(sender As Object, e As EventArgs) Handles MyBase.Closed
  642. GCM_ERP_SYS.WindowState = 0
  643. End Sub
  644. Private Sub 人員_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 人員_dgv.CellClick
  645. If e.RowIndex = -1 Then : Else
  646. 編號 = 人員_dgv("編號", e.RowIndex).Value.ToString : 姓名_tb.Text = 人員_dgv("姓名", e.RowIndex).Value.ToString
  647. 時薪制_ch.Checked = 人員_dgv("CC18", e.RowIndex).Value
  648. 資料數 = 31 : Set_考勤明細() : Set_考勤流水() : GCM_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  649. End If
  650. End Sub
  651. Private Sub 考勤流水_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 考勤流水_dgv.CellClick
  652. If e.RowIndex = -1 Then : Else
  653. ID_tb.Text = 考勤流水_dgv("ID", e.RowIndex).Value.ToString : 時間_tb.Text = 考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString
  654. PA6 = 考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString : PA3 = 考勤流水_dgv("ID", e.RowIndex).Value.ToString
  655. End If
  656. End Sub
  657. Private Sub 月清單_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 月清單_dgv.CellClick
  658. If e.RowIndex = -1 Then : Else
  659. ID_tb.Text = "" : 時間_tb.Text = ""
  660. 時間_tb.Text = Strings.Left(月清單_dgv("日期", e.RowIndex).Value, 4) & "-" & Strings.Mid(月清單_dgv("日期", e.RowIndex).Value, 6, 2) &
  661. "-" & Strings.Right(月清單_dgv("日期", e.RowIndex).Value, 2)
  662. 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
  663. 時間_tb.Text = 時間_tb.Text & " " & 月清單_dgv(e.ColumnIndex, e.RowIndex).Value
  664. For i As Integer = 0 To 考勤流水_dgv.Rows.Count - 1
  665. If Len(時間_tb.Text) > 11 Then
  666. If 時間_tb.Text = 考勤流水_dgv("打卡時間", i).Value.ToString Then
  667. ID_tb.Text = 考勤流水_dgv("ID", i).Value : PA3 = 考勤流水_dgv("ID", i).Value : PA6 = 考勤流水_dgv("打卡時間", i).Value.ToString : Exit For
  668. End If
  669. ElseIf Len(時間_tb.Text) = 11 Then
  670. If Strings.Left(時間_tb.Text, 10) = Strings.Left(考勤流水_dgv("打卡時間", i).Value.ToString, 10) Then
  671. ID_tb.Text = 考勤流水_dgv("ID", i).Value : PA3 = 考勤流水_dgv("ID", i).Value : PA6 = 考勤流水_dgv("打卡時間", i).Value.ToString : Exit For
  672. End If
  673. End If
  674. Next
  675. If ID_tb.Text = "" Then
  676. If 考勤流水_dgv.Rows.Count > 0 Then
  677. ID_tb.Text = 考勤流水_dgv("ID", 0).Value : PA3 = 考勤流水_dgv("ID", 0).Value : PA6 = 考勤流水_dgv("打卡時間", 0).Value.ToString
  678. Else
  679. MsgBox("一筆考勤都沒有的情況下無法編輯!!!!")
  680. End If
  681. End If
  682. Else
  683. 時間_tb.Text = "" : ID_tb.Text = ""
  684. End If
  685. End If
  686. End Sub
  687. Private Sub 月清單_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 月清單_dgv.RowPostPaint
  688. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  689. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  690. ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  691. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  692. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightYellow
  693. End If
  694. Next
  695. End Sub
  696. Private Sub 考勤流水_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 考勤流水_dgv.RowPostPaint
  697. Dim linePen As New Pen(Color.Blue, 2)
  698. If e.RowIndex = 考勤流水_dgv.Rows.Count - 1 Then : Exit Sub : Else
  699. If Strings.Left(考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString, 10) <> Strings.Left(考勤流水_dgv("打卡時間", e.RowIndex + 1).Value.ToString, 10) Then
  700. Dim startX As Integer = IIf(考勤流水_dgv.RowHeadersVisible, 考勤流水_dgv.RowHeadersWidth, 0) : Dim startY As Integer = e.RowBounds.Top + e.RowBounds.Height - 1
  701. Dim endX As Integer = startX + 考勤流水_dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - 考勤流水_dgv.HorizontalScrollingOffset
  702. e.Graphics.DrawLine(linePen, startX, startY, endX, startY) : Exit Sub
  703. End If
  704. End If
  705. End Sub
  706. Private Sub 排班彙總_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 排班彙總_dgv.RowPostPaint
  707. Dim linePen As New Pen(Color.Blue, 2)
  708. If e.RowIndex = 排班彙總_dgv.Rows.Count - 1 Then : Exit Sub : Else
  709. If 排班彙總_dgv("星期", e.RowIndex).Value.ToString <> 排班彙總_dgv("星期", e.RowIndex + 1).Value.ToString Then
  710. Dim startX As Integer = IIf(排班彙總_dgv.RowHeadersVisible, 排班彙總_dgv.RowHeadersWidth, 0) : Dim startY As Integer = e.RowBounds.Top + e.RowBounds.Height - 1
  711. Dim endX As Integer = startX + 排班彙總_dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - 排班彙總_dgv.HorizontalScrollingOffset
  712. e.Graphics.DrawLine(linePen, startX, startY, endX, startY) : Exit Sub
  713. End If
  714. End If
  715. End Sub
  716. Private Sub 月份_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 月份_cb.SelectedIndexChanged
  717. PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : 讀取人員資料表()
  718. If 編號 <> "" Then
  719. 資料數 = 31 : Set_考勤明細() : GCM_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  720. 讀取日期()
  721. End If
  722. End Sub
  723. Private Sub 個人考勤明細_bt_Click(sender As Object, e As EventArgs) Handles 個人考勤明細_bt.Click
  724. 個人考勤明細_bt.Enabled = False : 整體考勤彙總_bt.Enabled = True : 排班彙總_bt.Enabled = True : 整體考勤_dgv.Visible = False : 排班彙總_dgv.Visible = False : 月清單_dgv.Visible = True
  725. End Sub
  726. Private Sub 整體考勤彙總_bt_Click(sender As Object, e As EventArgs) Handles 整體考勤彙總_bt.Click
  727. 整體考勤彙總_bt.Enabled = False : 個人考勤明細_bt.Enabled = True : 排班彙總_bt.Enabled = True : 整體考勤_dgv.Visible = True : 排班彙總_dgv.Visible = False : 月清單_dgv.Visible = False
  728. If 整體考勤_dgv.Rows.Count > 0 Then : Else : 讀取彙總表() : End If
  729. End Sub
  730. Private Sub 排班彙總_bt_Click(sender As Object, e As EventArgs) Handles 排班彙總_bt.Click
  731. 排班彙總_bt.Enabled = False : 個人考勤明細_bt.Enabled = True : 整體考勤彙總_bt.Enabled = True : 整體考勤_dgv.Visible = False : 排班彙總_dgv.Visible = True : 月清單_dgv.Visible = False
  732. If 排班彙總_dgv.Rows.Count > 0 Then : Else : 讀取彙總表() : End If
  733. End Sub
  734. Private Sub 重新讀取_bt_Click(sender As Object, e As EventArgs) Handles 重新讀取_bt.Click
  735. 讀取彙總表()
  736. End Sub
  737. Private Sub 考勤資料編輯_bt_Click(sender As Object, e As EventArgs) Handles 考勤資料編輯_bt.Click
  738. If PA6 <> "" And PA3 <> "" And IsNumeric(PA3) <> False Then
  739. PA4 = PA6 : PA = 年份_cb.Text : PA1 = 月份_cb.Text : PA2 = Strings.Mid(PA6, 9, 2)
  740. PA5 = 姓名_tb.Text : PA7 = 編號
  741. 考勤明細表_編輯.ShowDialog()
  742. PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text
  743. Set_考勤流水() : 資料數 = 31 : Set_考勤明細() : GCM_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  744. Else
  745. MsgBox("請選擇右下方的時間,做為修改的依據!!")
  746. End If
  747. End Sub
  748. Private Sub 排班資料_bt_Click(sender As Object, e As EventArgs) Handles 排班資料_bt.Click
  749. PA = 年份_cb.Text : PA1 = 月份_cb.Text : PA2 = 姓名_tb.Text : 個人班表.Close() : 個人班表.Show()
  750. End Sub
  751. Private Sub 時薪制_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 時薪制_ch.Click
  752. Set_時薪制()
  753. End Sub
  754. Private Sub 彈性工時_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 彈性工時_ch.Click
  755. Set_彈性工時()
  756. End Sub
  757. End Class