Geen omschrijving
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

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