Brak opisu
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 78KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886
  1. Imports Microsoft.Office.Interop.Excel.XlUnderlineStyle
  2. Imports Microsoft.Office.Interop.Excel.Constants
  3. Imports Microsoft.Office.Interop.Excel.XlBordersIndex
  4. Imports Microsoft.Office.Interop.Excel.XlLineStyle
  5. Imports Microsoft.Office.Interop.Excel.XlBorderWeight
  6. Imports Microsoft.Office.Interop.Excel.XlThemeFont
  7. Imports Microsoft.Office.Interop.Excel.XlThemeColor
  8. Imports Microsoft.Office.Interop.Excel.XlWindowState
  9. Imports Microsoft.Office.Interop.Excel.XlPageOrientation
  10. Imports Microsoft.Office.Interop.Excel
  11. Public Class 考勤明細表
  12. 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
  13. ReadOnly ds6 As New DataSet : ReadOnly ds7 As New DataSet : ReadOnly ds8 As New DataSet
  14. Dim 編號, 到職日 As String
  15. Dim xlApp As Application : Dim xlBook As Workbook : Dim xlSheet As Worksheet
  16. Dim T, S, F, M, T1, S1, TT, SS, FF, MM, FFF, MMM, 平日班, 假日班, 假加, 假加一, 假加二, 假加時1, 假加分1, 假加時2, 假加分2, 國假, 國假1, 國假2, 平日加, 平日加1, 平日加2,
  17. 正常時, 正常時1, 正常時2, 正常時3, 正常時4, 加班時, 加班時1, 加班時2, 加班時3, 加班時4, 加班時5, 加班時6, 加班時7, 加班時8, 加班時9, 加班時10, 加班時11, 加班時12,
  18. 加班時13, 加班時14, 加班時15, 加班時16, 加班時17, 加班時18, 加班時19, 加班時20, 加班時21, 加班時22, 加班時23, 加班時24, 加班時25, 加班時26, 加班時27, 加班時28, 加班時29,
  19. 當天總分, 彈性扣時, 請假日 As Double
  20. Private Sub 讀取人員資料表()
  21. 人員_dgv.DataSource = Nothing : ds.Clear()
  22. 人員_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  23. 人員_dgv.ColumnHeadersHeight = 25
  24. 人員_dgv.AllowUserToAddRows = False
  25. SQL_考勤明細表_人員()
  26. da.Fill(ds) : 人員_dgv.DataSource = ds.Tables(0) : conn.Close()
  27. 人員_dgv.Columns(0).FillWeight = 70 : 人員_dgv.Columns(1).Visible = False : 人員_dgv.Columns(2).FillWeight = 100 : 人員_dgv.Columns(3).Visible = False
  28. 人員_dgv.Columns(4).Visible = False : 人員_dgv.Columns(5).Visible = False : 人員_dgv.Columns(6).Visible = False : 人員_dgv.Columns(7).Visible = False
  29. 人員_dgv.Columns(8).Visible = False : 人員_dgv.Columns(9).Visible = False : 人員_dgv.Columns("到職日").Visible = False
  30. For i As Integer = 0 To 人員_dgv.Rows.Count - 1
  31. 人員_dgv.Rows(i).Cells("No.").Value = i + 1
  32. Next
  33. End Sub
  34. Private Sub Set_考勤明細()
  35. 月清單_dgv.DataSource = Nothing : ds1.Clear()
  36. 月清單_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  37. 月清單_dgv.ColumnHeadersHeight = 40
  38. 月清單_dgv.AllowUserToAddRows = False
  39. If CC(16) = True Then : 月清單_dgv.RowTemplate.Height = 25 : Else : 月清單_dgv.RowTemplate.Height = 23 : End If
  40. PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : SQL_考勤明細表_月份考勤()
  41. da.Fill(ds1) : 月清單_dgv.DataSource = ds1.Tables(0) : conn.Close()
  42. 月清單_dgv.Columns(0).FillWeight = 100 : 月清單_dgv.Columns(1).FillWeight = 60 : 月清單_dgv.Columns(2).FillWeight = 90 : 月清單_dgv.Columns(3).FillWeight = 100
  43. 月清單_dgv.Columns(4).FillWeight = 80 : 月清單_dgv.Columns(5).Visible = False : 月清單_dgv.Columns(6).Visible = False : 月清單_dgv.Columns(7).Visible = False
  44. 月清單_dgv.Columns(8).FillWeight = 80 : 月清單_dgv.Columns(9).FillWeight = 80 : 月清單_dgv.Columns(10).FillWeight = 60 : 月清單_dgv.Columns(11).FillWeight = 80
  45. 月清單_dgv.Columns(12).FillWeight = 80 : 月清單_dgv.Columns(13).FillWeight = 60 : 月清單_dgv.Columns(14).FillWeight = 80 : 月清單_dgv.Columns(15).FillWeight = 80
  46. 月清單_dgv.Columns(16).FillWeight = 60 : 月清單_dgv.Columns(17).FillWeight = 60 : 月清單_dgv.Columns(18).Visible = False : 月清單_dgv.Columns(19).FillWeight = 60
  47. 月清單_dgv.Columns(20).FillWeight = 60 : 月清單_dgv.Columns(21).FillWeight = 40 : 月清單_dgv.Columns(22).FillWeight = 40 : 月清單_dgv.Columns(23).FillWeight = 100
  48. 月清單_dgv.Columns(24).FillWeight = 80 : 月清單_dgv.Columns(25).FillWeight = 150 : 月清單_dgv.Columns("休息1").Visible = False : 月清單_dgv.Columns("休息2").Visible = False
  49. 月清單_dgv.Columns("半天").Visible = False : 月清單_dgv.Columns("班別").Visible = False : 月清單_dgv.Columns("最後下診").Visible = False
  50. 月清單_dgv.Columns("申請時數").Visible = False
  51. 讀取打卡時間1() : 讀取打卡時間2()
  52. Dim S2, F2 As String
  53. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  54. MyModule1.進度條()
  55. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And
  56. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString = "" Then
  57. 月清單_dgv.Rows(I).Cells("申請狀態").Value = "."
  58. End If
  59. 月清單_dgv.Rows(I).Cells("一段工時").Value = "" : 月清單_dgv.Rows(I).Cells("二段工時").Value = "" : 月清單_dgv.Rows(I).Cells("加班工時").Value = ""
  60. 月清單_dgv.Rows(I).Cells("休息1").Value = "" : 月清單_dgv.Rows(I).Cells("休息2").Value = "" : 月清單_dgv.Rows(I).Cells("一段加班").Value = ""
  61. 月清單_dgv.Rows(I).Cells("二段加班").Value = "" : 月清單_dgv.Rows(I).Cells("加班下班").Value = "" : 月清單_dgv.Rows(I).Cells("加班上班").Value = ""
  62. 月清單_dgv.Rows(I).Cells("二段下班").Value = "" : 月清單_dgv.Rows(I).Cells("二段上班").Value = "" : 月清單_dgv.Rows(I).Cells("一段下班").Value = ""
  63. If IsDBNull(月清單_dgv.Rows(I).Cells("半天").Value) = True Then : 月清單_dgv.Rows(I).Cells("半天").Value = False : End If
  64. If IsDBNull(月清單_dgv.Rows(I).Cells("班別").Value) = True Then : 月清單_dgv.Rows(I).Cells("班別").Value = "" : End If
  65. If 月清單_dgv.Rows(I).Cells("班別").Value.ToString = "休" Then : Else : 月清單_dgv.Rows(I).Cells("班別").Value = Strings.Right(月清單_dgv.Rows(I).Cells("班別").Value, 2) : End If
  66. '--------------------------讀入資料------------------------------------------------------------------------------------------------------------------------------------
  67. PA3 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("日期").Value, 2))
  68. PA4 = 月清單_dgv.Rows(I).Cells("日期").Value.ToString
  69. If 時間讀取1_dgv.Rows.Count > 0 Then
  70. For II As Integer = 0 To 時間讀取1_dgv.Rows.Count - 1
  71. If PA4 = 時間讀取1_dgv.Rows(II).Cells("日期").Value.ToString Then
  72. 月清單_dgv.Rows(I).Cells("一段上班").Value = 時間讀取1_dgv.Rows(II).Cells("打卡時間").Value.ToString : Exit For
  73. Else : 月清單_dgv.Rows(I).Cells("一段上班").Value = ""
  74. End If
  75. Next
  76. For II As Integer = 0 To 班別_dgv.Rows.Count - 1
  77. If 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString <> "" Then
  78. If FormatDateTime(班別_dgv.Rows(II).Cells("時段1").Value.ToString, DateFormat.ShortTime) <
  79. FormatDateTime(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DateFormat.ShortTime) And
  80. FormatDateTime(班別_dgv.Rows(II).Cells("時段2").Value.ToString, DateFormat.ShortTime) >
  81. FormatDateTime(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DateFormat.ShortTime) Then
  82. 月清單_dgv.Rows(I).Cells("班別判斷").Value = 班別_dgv.Rows(II).Cells("時段").Value.ToString
  83. 月清單_dgv.Rows(I).Cells("休息1").Value = 班別_dgv.Rows(II).Cells("一段休息").Value.ToString
  84. 月清單_dgv.Rows(I).Cells("休息2").Value = 班別_dgv.Rows(II).Cells("二段休息").Value.ToString
  85. DTPS(0) = 班別_dgv.Rows(II).Cells("時段2").Value.ToString : DTPS(1) = 班別_dgv.Rows(II).Cells("時段4").Value.ToString()
  86. DTPS(2) = 班別_dgv.Rows(II).Cells("時段4").Value.ToString : DTPS(3) = 班別_dgv.Rows(II).Cells("時段6").Value.ToString()
  87. DTPS(4) = 班別_dgv.Rows(II).Cells("時段6").Value.ToString
  88. Exit For
  89. End If
  90. End If
  91. If II = 班別_dgv.Rows.Count - 1 Then
  92. For III As Integer = 0 To 班別_dgv.Rows.Count - 1
  93. If Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, 2)) <= Val(Strings.Left(班別_dgv.Rows(III).Cells("時段").Value.ToString, 2)) Then
  94. 月清單_dgv.Rows(I).Cells("班別判斷").Value = 班別_dgv.Rows(III).Cells("時段").Value.ToString
  95. 月清單_dgv.Rows(I).Cells("休息1").Value = 班別_dgv.Rows(II).Cells("一段休息").Value.ToString
  96. 月清單_dgv.Rows(I).Cells("休息2").Value = 班別_dgv.Rows(II).Cells("二段休息").Value.ToString
  97. DTPS(0) = 班別_dgv.Rows(III).Cells("時段2").Value.ToString : DTPS(1) = 班別_dgv.Rows(III).Cells("時段4").Value.ToString()
  98. DTPS(2) = 班別_dgv.Rows(III).Cells("時段4").Value.ToString : DTPS(3) = 班別_dgv.Rows(III).Cells("時段6").Value.ToString()
  99. DTPS(4) = 班別_dgv.Rows(III).Cells("時段6").Value.ToString
  100. Exit For
  101. End If
  102. 月清單_dgv.Rows(I).Cells("班別判斷").Value = "打卡異常"
  103. Next
  104. End If
  105. Next
  106. Else
  107. 月清單_dgv.Rows(I).Cells("一段上班").Value = "" : 月清單_dgv.Rows(I).Cells("班別判斷").Value = ""
  108. End If
  109. 月清單_dgv.Rows(I).Cells("一段下班").Value = "" : 月清單_dgv.Rows(I).Cells("二段上班").Value = ""
  110. Dim SD(2), 位置, 數量 As Integer : 數量 = 0
  111. For II As Integer = 0 To 時間讀取2_dgv.Rows.Count - 1
  112. If PA4 = 時間讀取2_dgv.Rows(II).Cells("日期").Value.ToString Then
  113. If 數量 = 0 Then
  114. ElseIf 數量 = 1 Then
  115. 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  116. ElseIf 數量 = 2 Then
  117. 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  118. ElseIf 數量 = 3 Then
  119. 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  120. ElseIf 數量 = 4 Then
  121. 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  122. ElseIf 數量 = 5 Then
  123. 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  124. End If : 數量 += 1
  125. End If
  126. Next
  127. '--------------------------打卡位置調整------------------------------------------------------------------------------------------------------------------------------------
  128. If 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString = 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString Then
  129. 月清單_dgv.Rows(I).Cells("一段下班").Value = ""
  130. End If
  131. For d As Integer = 1 To 4
  132. If 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString <> "" Then
  133. 月清單_dgv.Rows(I).Cells("加班上班").Value = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : 月清單_dgv.Rows(I).Cells("加班下班").Value = ""
  134. End If
  135. If 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString <> "" Then
  136. 月清單_dgv.Rows(I).Cells("二段下班").Value = 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString : 月清單_dgv.Rows(I).Cells("加班上班").Value = ""
  137. End If
  138. If 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString <> "" Then
  139. 月清單_dgv.Rows(I).Cells("二段上班").Value = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : 月清單_dgv.Rows(I).Cells("二段下班").Value = ""
  140. End If
  141. If 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString <> "" Then
  142. 月清單_dgv.Rows(I).Cells("一段下班").Value = 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString : 月清單_dgv.Rows(I).Cells("二段上班").Value = ""
  143. End If
  144. Next
  145. '--------------------------工時計算------------------------------------------------------------------------------------------------------------------------------------
  146. Dim QASW1 As Integer : Dim QASW2 As Integer : Dim QASW3 As Integer
  147. Dim DD As String
  148. '-如果下班時間超過晚上12點時的分段計算------------------------------------------
  149. If Strings.Left(月清單_dgv.Rows(I).Cells("一段下班").Value.ToString, 2) = "00" Or Strings.Left(月清單_dgv.Rows(I).Cells("一段下班").Value.ToString, 2) = "01" Or
  150. Strings.Left(月清單_dgv.Rows(I).Cells("一段下班").Value.ToString, 2) = "02" Then
  151. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("一段下班").Value) : QASW1 = TSFM
  152. Else : DD = 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString : QASW1 = 0 : End If
  153. '-第一段上班時間正常打卡計算------------------------------------------
  154. If 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString <> "" And DD <> "" Then
  155. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DD)
  156. TSFM += QASW1
  157. If 時薪制_ch.Checked = False Then
  158. If 月清單_dgv.Rows(I).Cells("半天").Value = False Then
  159. '-第二段上下班都沒打卡,但是累計工時大於4小時(14400),先扣除一小時休息,第一段工時等於4小時,在把時數放到第二段工時------------------------------------------
  160. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  161. QASW2 = TSFM - 14400 - (Val(月清單_dgv.Rows(I).Cells("休息1").Value) * 3600)
  162. If QASW2 < 0 Then : QASW2 = 0 : End If
  163. TSFM = 14400
  164. '-如果加班上下班都沒打卡,但扣除第一段時數的累計工時還是大於4小時(14400),先扣除一小時休息,第二段工時等於4小時,在把時數放到加班段工時------------------------------------------
  165. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  166. QASW3 = QASW2 - 14400 - (Val(月清單_dgv.Rows(I).Cells("休息2").Value) * 3600)
  167. If QASW3 < 0 Then : QASW3 = 0 : End If
  168. QASW2 = 14400
  169. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  170. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  171. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  172. End If
  173. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  174. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  175. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  176. End If
  177. Else
  178. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  179. QASW2 = TSFM - 14400
  180. If QASW2 < 0 Then : QASW2 = 0 : End If
  181. TSFM = 14400
  182. '-如果加班上下班都沒打卡,但扣除第一段時數的累計工時還是大於4小時(14400),先扣除一小時休息,第二段工時等於4小時,在把時數放到加班段工時------------------------------------------
  183. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  184. QASW3 = QASW2 - 14400
  185. If QASW3 < 0 Then : QASW3 = 0 : End If
  186. QASW2 = 14400
  187. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  188. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  189. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  190. End If
  191. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  192. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  193. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  194. End If
  195. End If
  196. Else
  197. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  198. QASW2 = TSFM - 14400
  199. If QASW2 < 0 Then : QASW2 = 0 : End If
  200. TSFM = 14400
  201. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  202. QASW3 = QASW2 - 14400
  203. If QASW3 < 0 Then : QASW3 = 0 : End If
  204. QASW2 = 14400
  205. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  206. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  207. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  208. End If
  209. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  210. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  211. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  212. End If
  213. End If
  214. T = TSFM \ 86400 : T1 = TSFM 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. '-如果下班時間超過晚上12點時的分段計算------------------------------------------
  219. If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value.ToString, 2) = "00" Or Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value.ToString, 2) = "01" Or
  220. Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value.ToString, 2) = "02" Then
  221. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("二段下班").Value) : QASW1 = TSFM
  222. Else : DD = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : QASW1 = 0 : End If
  223. '-第二段上班時間正常打卡計算------------------------------------------
  224. If 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString <> "" And DD <> "" Then
  225. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString, DD)
  226. TSFM += QASW1
  227. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  228. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  229. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  230. End If
  231. '-如果下班時間超過晚上12點時的分段計算------------------------------------------
  232. If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value.ToString, 2) = "00" Then
  233. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("二段下班").Value) : QASW1 = TSFM
  234. Else : DD = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : QASW1 = 0 : End If
  235. '-加班上班時間正常打卡計算------------------------------------------
  236. If 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString <> "" And DD <> "" Then
  237. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString, DD)
  238. TSFM += QASW1
  239. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  240. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  241. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  242. End If
  243. 當天總分 = (Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) +
  244. Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) +
  245. Val(Strings.Left(月清單_dgv.Rows(I).Cells("加班工時").Value.ToString, 2))) * 60 +
  246. (Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) +
  247. Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) +
  248. Val(Strings.Right(月清單_dgv.Rows(I).Cells("加班工時").Value.ToString, 2)))
  249. If 當天總分 <= 240 Then
  250. 月清單_dgv.Rows(I).Cells("一段工時").Value = 當天總分 \ 60 & " : " & 當天總分 Mod 60
  251. 月清單_dgv.Rows(I).Cells("二段工時").Value = "" : 月清單_dgv.Rows(I).Cells("加班工時").Value = ""
  252. ElseIf 當天總分 > 240 Then
  253. 月清單_dgv.Rows(I).Cells("一段工時").Value = "4 : 0"
  254. 月清單_dgv.Rows(I).Cells("二段工時").Value = (當天總分 - 240) \ 60 & " : " & (當天總分 - 240) Mod 60
  255. If (當天總分 - 240) <= 240 Then : Else
  256. 月清單_dgv.Rows(I).Cells("二段工時").Value = "4 : 0"
  257. 月清單_dgv.Rows(I).Cells("一段加班").Value = (當天總分 - 240 - 240) \ 60 & " : " & (當天總分 - 240 - 240) Mod 60
  258. If (當天總分 - 240 - 240) <= 120 Then : Else
  259. 月清單_dgv.Rows(I).Cells("一段加班").Value = "2 : 0"
  260. 月清單_dgv.Rows(I).Cells("二段加班").Value = (當天總分 - 240 - 240 - 120) \ 60 & " : " & (當天總分 - 240 - 240 - 120) Mod 60
  261. If (當天總分 - 240 - 240 - 120) <= 120 Then : Else
  262. 月清單_dgv.Rows(I).Cells("二段加班").Value = "2 : 0"
  263. End If
  264. End If
  265. End If
  266. End If
  267. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString = "0 : 0" Then
  268. 月清單_dgv.Rows(I).Cells("一段工時").Value = ""
  269. End If
  270. '--------------------------假日標色------------------------------------------------------------------------------------------------------------------------------------
  271. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  272. ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  273. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  274. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightYellow
  275. End If
  276. '--------------------------加班未申請去除------------------------------------------------------------------------------------------------------------------------------------
  277. If 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString <> "已核准" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And
  278. 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And
  279. 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString <> "." Then
  280. 月清單_dgv.Rows(I).Cells("一段加班").Value = "" : 月清單_dgv.Rows(I).Cells("二段加班").Value = ""
  281. End If
  282. Next
  283. 平日班 = 0 : 正常時1 = 0 : 正常時2 = 0 : 正常時3 = 0 : 正常時4 = 0 : 加班時9 = 0 : 加班時10 = 0 : 加班時11 = 0 : 加班時12 = 0 : 加班時8 = 0 : 加班時21 = 0
  284. 加班時17 = 0 : 加班時18 = 0 : 加班時19 = 0 : 加班時20 = 0 : 加班時23 = 0 : 加班時24 = 0 : 加班時25 = 0 : 加班時26 = 0 : 假日班 = 0 : 加班時27 = 0 : 請假日 = 0
  285. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  286. If 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" And
  287. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "特休" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "未到" And
  288. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "離職" Then
  289. 請假日 += 1
  290. End If
  291. '---------------------------平日
  292. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And
  293. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "" Then
  294. 加班時27 += 1
  295. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" Then
  296. 平日班 += 1
  297. 正常時1 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 正常時2 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  298. End If
  299. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" Then
  300. 正常時3 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 正常時4 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  301. End If
  302. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" Then
  303. 加班時9 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時10 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  304. End If
  305. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" Then
  306. 加班時11 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時12 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  307. End If
  308. End If
  309. '---------------------------星期六
  310. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then
  311. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "0 : 0" Then
  312. 假日班 += 1
  313. 加班時3 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 加班時4 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  314. 加班時7 = 加班時3 + (加班時4 / 60)
  315. If 加班時7 > 2 Then
  316. 加班時8 += 2 : 加班時21 += (加班時7 - 2)
  317. Else
  318. 加班時8 += 加班時7
  319. End If
  320. End If
  321. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "0 : 0" Then
  322. 加班時5 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 加班時6 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  323. 加班時21 += 加班時5 + (加班時6 / 60)
  324. End If
  325. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "0 : 0" Then
  326. 加班時13 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時14 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  327. 加班時21 += (加班時13 + (加班時14 / 60))
  328. End If
  329. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "0 : 0" Then
  330. 加班時15 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時16 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  331. 加班時21 += (加班時15 + (加班時16 / 60))
  332. End If
  333. End If
  334. '--------------------------星期日或國定假日
  335. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Or 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then
  336. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "0 : 0" Then
  337. 假日班 += 1
  338. 加班時17 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 加班時18 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  339. End If
  340. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "0 : 0" Then
  341. 加班時19 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 加班時20 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  342. End If
  343. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "0 : 0" Then
  344. 月清單_dgv.Rows(I).Cells("一段加班").Value = "0 : 0"
  345. 加班時23 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時24 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  346. End If
  347. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "0 : 0" Then
  348. 月清單_dgv.Rows(I).Cells("二段加班").Value = "0 : 0"
  349. 加班時25 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時26 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  350. End If
  351. End If
  352. Next
  353. FF = (正常時2 + 正常時4) / 60
  354. 正常時 = 正常時1 + 正常時3 + FF
  355. 當月平日天_tb.Text = 平日班 + 假日班 : 當月假日天_tb.Text = 請假日
  356. 常日總_tb.Text = Strings.Format(正常時, "#,##0.00")
  357. 當月平日一段_tb.Text = Strings.Format((加班時9 + (加班時10 / 60)), "#,##0.00")
  358. 當月平日二段_tb.Text = Strings.Format((加班時11 + (加班時12 / 60)), "#,##0.00")
  359. 一段假日加_tb.Text = Strings.Format(加班時8, "#,##0.00")
  360. 二段假日加_tb.Text = Strings.Format(加班時21, "#,##0.00")
  361. 國假日加_tb.Text = Strings.Format(加班時17 + 加班時19 + 加班時23 + 加班時25 + (加班時18 + 加班時20 + 加班時24 + 加班時26) / 60, "#,##0.00")
  362. Set_時薪制() : Set_彈性工時()
  363. 加班總_tb.Text = Strings.Format((加班時9 + (加班時10 / 60)) + (加班時11 + (加班時12 / 60)) + 加班時8 + 加班時21 +
  364. (加班時17 + 加班時19 + 加班時23 + 加班時25 + (加班時18 + 加班時20 + 加班時24 + 加班時26) / 60), "#,##0.00")
  365. 特修補錢_tb.Text = "0" : 未到離職_tb.Text = "0" : 事假_tb.Text = "0" : 婚假_tb.Text = "0" : 喪假_tb.Text = "0" : 特休_tb.Text = "0" : 特休未休_nud.Value = 0
  366. 薪資計算()
  367. End Sub
  368. Private Sub 薪資計算()
  369. If CC(16) = True Then
  370. If 時薪制_ch.Checked = True Then
  371. 月薪_tb.Text = Strings.Format((CDbl(時薪_tb.Text) * CDbl(常日總_tb.Text)), "#,##0.0")
  372. Else
  373. 時薪_tb.Text = Strings.Format((CDbl(月薪_tb.Text) / 30 / 8), "#,##0.0")
  374. End If
  375. Dim ds As New DataSet
  376. 假期統計_dgv.DataSource = Nothing : ds.Clear()
  377. 假期統計_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  378. 假期統計_dgv.ColumnHeadersHeight = 25
  379. 假期統計_dgv.AllowUserToAddRows = False
  380. PA = 編號 : PA1 = 年份_cb.Text & "/" & 月份_cb.Text : SQL_休假統計1()
  381. da.Fill(ds) : 假期統計_dgv.DataSource = ds.Tables(0) : conn.Close()
  382. Dim 到離, 事假, 病假, 特休, 婚假, 喪假 As Double : 到離 = 0 : 事假 = 0 : 病假 = 0 : 特休 = 0 : 婚假 = 0 : 喪假 = 0
  383. For I As Integer = 0 To 假期統計_dgv.Rows.Count - 1
  384. If 假期統計_dgv.Rows(I).Cells(0).Value.ToString = "未到" Or 假期統計_dgv.Rows(I).Cells(0).Value.ToString = "離職" Then
  385. 到離 += 假期統計_dgv.Rows(I).Cells("天數").Value.ToString
  386. End If
  387. If 假期統計_dgv.Rows(I).Cells(0).Value.ToString = "事假" Then : 事假 += 假期統計_dgv.Rows(I).Cells("總時數").Value.ToString : End If
  388. If 假期統計_dgv.Rows(I).Cells(0).Value.ToString = "病假" Then : 病假 += 假期統計_dgv.Rows(I).Cells("總時數").Value.ToString : End If
  389. If 假期統計_dgv.Rows(I).Cells(0).Value.ToString = "特休" Then : 特休 += 假期統計_dgv.Rows(I).Cells("總時數").Value.ToString : End If
  390. If 假期統計_dgv.Rows(I).Cells(0).Value.ToString = "婚假" Then : 婚假 += 假期統計_dgv.Rows(I).Cells("總時數").Value.ToString : End If
  391. If 假期統計_dgv.Rows(I).Cells(0).Value.ToString = "喪假" Then : 喪假 += 假期統計_dgv.Rows(I).Cells("總時數").Value.ToString : End If
  392. Next
  393. 病假_tb.Text = Strings.Format((病假 * CDbl(時薪_tb.Text) / 2), "#,##0.0")
  394. If 時薪制_ch.Checked = False Then
  395. 未到離職_tb.Text = Strings.Format((到離 * 8 * CDbl(時薪_tb.Text)), "#,##0.0")
  396. 事假_tb.Text = Strings.Format((事假 * CDbl(時薪_tb.Text)), "#,##0.0")
  397. Else
  398. 婚假_tb.Text = Strings.Format((婚假 * CDbl(時薪_tb.Text)), "#,##0.0")
  399. 喪假_tb.Text = Strings.Format((喪假 * CDbl(時薪_tb.Text)), "#,##0.0")
  400. 特休_tb.Text = Strings.Format((特休 * CDbl(時薪_tb.Text)), "#,##0.0")
  401. End If
  402. '--------------------------第一種應付小計計算---------------------------------------------------
  403. 第1段加班費1_tb.Text = Strings.Format(((CDbl(當月平日一段_tb.Text) + CDbl(一段假日加_tb.Text)) * CDbl(時薪_tb.Text) * 1.34), "#,##0.0")
  404. 第2段加班費1_tb.Text = Strings.Format(((CDbl(當月平日二段_tb.Text) + CDbl(二段假日加_tb.Text)) * CDbl(時薪_tb.Text) * 1.67), "#,##0.0")
  405. 第3段加班費1_tb.Text = Strings.Format((CDbl(國假日加_tb.Text) * CDbl(時薪_tb.Text) * 2), "#,##0.0")
  406. 加班費1_tb.Text = Strings.Format((CDbl(第1段加班費1_tb.Text) + CDbl(第2段加班費1_tb.Text) + CDbl(第3段加班費1_tb.Text)), "#,##0.0")
  407. If 時薪制_ch.Checked = False Then
  408. 應付小計1_tb.Text = Strings.Format((CDbl(月薪_tb.Text) + CDbl(加班費1_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text) +
  409. CDbl(特修補錢_tb.Text) + 其他加_nud.Value - CDbl(未到離職_tb.Text)), "#,##0.0")
  410. Else
  411. 應付小計1_tb.Text = Strings.Format((CDbl(月薪_tb.Text) + CDbl(加班費1_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text) +
  412. CDbl(特修補錢_tb.Text) + (CDbl(病假_tb.Text) * 2) + CDbl(婚假_tb.Text) + CDbl(喪假_tb.Text) + CDbl(特休_tb.Text) +
  413. 其他加_nud.Value - CDbl(未到離職_tb.Text)), "#,##0.0")
  414. End If
  415. '--------------------------第二種應付小計計算-----------------------------------------------------
  416. 第1段加班費2_tb.Text = Strings.Format(((CDbl(當月平日一段1_tb.Text) + CDbl(一段假日加1_tb.Text)) * CDbl(時薪_tb.Text) * 1.34), "#,##0.0")
  417. 第2段加班費2_tb.Text = Strings.Format(((CDbl(當月平日二段1_tb.Text) + CDbl(二段假日加1_tb.Text)) * CDbl(時薪_tb.Text) * 1.67), "#,##0.0")
  418. 第3段加班費2_tb.Text = Strings.Format((CDbl(國假日加1_tb.Text) * CDbl(時薪_tb.Text) * 2), "#,##0.0")
  419. 加班費2_tb.Text = Strings.Format((CDbl(第1段加班費2_tb.Text) + CDbl(第2段加班費2_tb.Text) + CDbl(第3段加班費2_tb.Text)), "#,##0.0")
  420. If 時薪制_ch.Checked = False Then
  421. 應付小計2_tb.Text = Strings.Format((CDbl(月薪_tb.Text) + CDbl(加班費2_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text) +
  422. CDbl(特修補錢_tb.Text) + 其他加_nud.Value - CDbl(未到離職_tb.Text)), "#,##0.0")
  423. Else
  424. 應付小計2_tb.Text = Strings.Format((CDbl(月薪_tb.Text) + CDbl(加班費2_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text) +
  425. CDbl(特修補錢_tb.Text) + (CDbl(病假_tb.Text) * 2) + CDbl(婚假_tb.Text) + CDbl(喪假_tb.Text) + CDbl(特休_tb.Text) +
  426. 其他加_nud.Value - CDbl(未到離職_tb.Text)), "#,##0.0")
  427. End If
  428. '--------------------------第一種實付小計計算---------------------------------------------------
  429. If 時薪制_ch.Checked = False Then
  430. 實付小計1_tb.Text = Strings.Format((CDbl(應付小計1_tb.Text) - CDbl(健保費_tb.Text) - CDbl(勞保費_tb.Text) - CDbl(病假_tb.Text) -
  431. CDbl(事假_tb.Text) - 其他減_nud.Value), "#,##0.0")
  432. Else
  433. 實付小計1_tb.Text = Strings.Format((CDbl(應付小計1_tb.Text) - CDbl(健保費_tb.Text) - CDbl(勞保費_tb.Text) - CDbl(病假_tb.Text) -
  434. 其他減_nud.Value), "#,##0.0")
  435. End If
  436. '--------------------------第二種實付小計計算---------------------------------------------------
  437. If 時薪制_ch.Checked = False Then
  438. 實付小計2_tb.Text = Strings.Format((CDbl(應付小計2_tb.Text) - CDbl(健保費_tb.Text) - CDbl(勞保費_tb.Text) - CDbl(病假_tb.Text) -
  439. CDbl(事假_tb.Text) - 其他減_nud.Value), "#,##0.0")
  440. Else
  441. 實付小計2_tb.Text = Strings.Format((CDbl(應付小計2_tb.Text) - CDbl(健保費_tb.Text) - CDbl(勞保費_tb.Text) - CDbl(病假_tb.Text) -
  442. 其他減_nud.Value), "#,##0.0")
  443. End If
  444. End If
  445. End Sub
  446. Private Sub 特休未休_NUD_ValueChanged(sender As Object, e As EventArgs) Handles 特休未休_nud.ValueChanged
  447. 特修補錢_tb.Text = Strings.Format((特休未休_nud.Value * 8 * CDbl(時薪_tb.Text)), "#,##0.0") : 薪資計算()
  448. End Sub
  449. Private Sub 其他_nud_ValueChanged(sender As Object, e As EventArgs) Handles 其他減_nud.ValueChanged
  450. 薪資計算()
  451. End Sub
  452. Private Sub 時薪彈性_bt_Click(sender As Object, e As EventArgs) Handles 時薪彈性_bt.Click
  453. 當月應上天數_tb.Text = 加班時27 : 上班總工時_tb.Text = Strings.Format(加班時27 * 8, "#,##0.00") : 應上未上時數_tb.Text = Strings.Format((加班時27 * 8) - 正常時, "#,##0.00")
  454. Set_彈性工時()
  455. 特修補錢_tb.Text = "0" : 未到離職_tb.Text = "0" : 事假_tb.Text = "0" : 婚假_tb.Text = "0" : 喪假_tb.Text = "0" : 特休_tb.Text = "0" : 特休未休_nud.Value = 0
  456. 薪資計算()
  457. End Sub
  458. Private Sub Set_時薪制()
  459. If 時薪制_ch.Checked = False Then
  460. 當月應上天數_tb.Text = 加班時27
  461. 上班總工時_tb.Text = Strings.Format(加班時27 * 8, "#,##0.00")
  462. 應上未上時數_tb.Text = Strings.Format((加班時27 * 8) - 正常時, "#,##0.00")
  463. Else
  464. 當月應上天數_tb.Text = "0" : 上班總工時_tb.Text = "0.00" : 應上未上時數_tb.Text = "0.00"
  465. End If
  466. End Sub
  467. Private Sub Set_彈性工時()
  468. If 彈性工時_ch.Checked = False Then
  469. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  470. 二段假日加1_tb.Text = 二段假日加_tb.Text : 國假日加1_tb.Text = 國假日加_tb.Text
  471. Else
  472. 彈性扣時 = 應上未上時數_tb.Text
  473. If Val(國假日加_tb.Text) >= 彈性扣時 Then
  474. 國假日加1_tb.Text = Strings.Format(Val(國假日加_tb.Text) - 彈性扣時, "#,##0.00")
  475. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  476. 二段假日加1_tb.Text = 二段假日加_tb.Text
  477. ElseIf Val(國假日加_tb.Text) < 彈性扣時 Then
  478. 彈性扣時 -= Val(國假日加_tb.Text) : 國假日加1_tb.Text = "0.00"
  479. If Val(二段假日加_tb.Text) >= 彈性扣時 Then
  480. 二段假日加1_tb.Text = Strings.Format(Val(二段假日加_tb.Text) - 彈性扣時, "#,##0.00")
  481. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  482. ElseIf Val(二段假日加_tb.Text) < 彈性扣時 Then
  483. 彈性扣時 -= Val(二段假日加_tb.Text) : 二段假日加1_tb.Text = "0.00"
  484. If Val(當月平日二段_tb.Text) >= 彈性扣時 Then
  485. 當月平日二段1_tb.Text = Strings.Format(Val(當月平日二段_tb.Text) - 彈性扣時, "#,##0.00")
  486. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  487. ElseIf Val(當月平日二段_tb.Text) < 彈性扣時 Then
  488. 彈性扣時 -= Val(當月平日二段_tb.Text) : 當月平日二段1_tb.Text = "0.00"
  489. If Val(一段假日加_tb.Text) >= 彈性扣時 Then
  490. 一段假日加1_tb.Text = Strings.Format(Val(一段假日加_tb.Text) - 彈性扣時, "#,##0.00")
  491. 當月平日一段1_tb.Text = 當月平日一段_tb.Text
  492. ElseIf Val(一段假日加_tb.Text) < 彈性扣時 Then
  493. 彈性扣時 -= Val(一段假日加_tb.Text) : 一段假日加1_tb.Text = "0.00"
  494. If Val(當月平日一段_tb.Text) >= 彈性扣時 Then
  495. 當月平日一段1_tb.Text = Strings.Format(Val(當月平日一段_tb.Text) - 彈性扣時, "#,##0.00")
  496. ElseIf Val(當月平日一段_tb.Text) < 彈性扣時 Then
  497. 當月平日一段1_tb.Text = "0.00"
  498. End If
  499. End If
  500. End If
  501. End If
  502. End If
  503. End If
  504. End Sub
  505. Private Sub Set_考勤流水()
  506. 考勤流水_dgv.DataSource = Nothing : ds5.Clear()
  507. 考勤流水_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  508. 考勤流水_dgv.ColumnHeadersHeight = 25
  509. 考勤流水_dgv.AllowUserToAddRows = False
  510. SQL_考勤明細表_考勤流水()
  511. da.Fill(ds5) : 考勤流水_dgv.DataSource = ds5.Tables(0) : conn.Close()
  512. 考勤流水_dgv.Columns(0).FillWeight = 30 : 考勤流水_dgv.Columns(1).FillWeight = 30 : 考勤流水_dgv.Columns(2).FillWeight = 100
  513. For i As Integer = 0 To 考勤流水_dgv.Rows.Count - 1
  514. 考勤流水_dgv.Rows(i).Cells("No.").Value = i + 1
  515. Next
  516. End Sub
  517. Private Sub 讀取班別()
  518. 班別_dgv.DataSource = Nothing : ds7.Clear()
  519. 班別_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  520. 班別_dgv.ColumnHeadersHeight = 25
  521. 班別_dgv.AllowUserToAddRows = False
  522. SQL_考勤明細表_班別()
  523. da.Fill(ds7) : 班別_dgv.DataSource = ds7.Tables(0) : conn.Close()
  524. 班別_dgv.Columns(0).FillWeight = 80 : 班別_dgv.Columns(1).FillWeight = 130 : 班別_dgv.Columns(2).FillWeight = 130 : 班別_dgv.Columns(3).FillWeight = 100
  525. 班別_dgv.Columns(4).FillWeight = 130 : 班別_dgv.Columns(5).FillWeight = 100 : 班別_dgv.Columns(6).FillWeight = 100 : 班別_dgv.Columns(7).FillWeight = 100
  526. 班別_dgv.Columns(8).FillWeight = 100 : 班別_dgv.Columns(9).Visible = False : 班別_dgv.Columns(10).FillWeight = 100 : 班別_dgv.Columns(11).Visible = False
  527. 班別_dgv.Columns(12).FillWeight = 100 : 班別_dgv.Columns(13).Visible = False : 班別_dgv.Columns(14).Visible = False
  528. End Sub
  529. Private Sub 讀取打卡時間1()
  530. 時間讀取1_dgv.DataSource = Nothing : ds2.Clear()
  531. 時間讀取1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  532. 時間讀取1_dgv.ColumnHeadersHeight = 25
  533. 時間讀取1_dgv.AllowUserToAddRows = False
  534. SQL_考勤明細表_打卡讀取_上午上班()
  535. da.Fill(ds2) : 時間讀取1_dgv.DataSource = ds2.Tables(0) : conn.Close()
  536. End Sub
  537. Private Sub 讀取打卡時間2()
  538. 時間讀取2_dgv.DataSource = Nothing : ds3.Clear()
  539. 時間讀取2_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  540. 時間讀取2_dgv.ColumnHeadersHeight = 25
  541. 時間讀取2_dgv.AllowUserToAddRows = False
  542. SQL_考勤明細表_打卡讀取_中午下上班()
  543. da.Fill(ds3) : 時間讀取2_dgv.DataSource = ds3.Tables(0) : conn.Close()
  544. End Sub
  545. Private Sub 讀取打卡時間3()
  546. 時間讀取3_dgv.DataSource = Nothing : ds4.Clear()
  547. 時間讀取3_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  548. 時間讀取3_dgv.ColumnHeadersHeight = 25
  549. 時間讀取3_dgv.AllowUserToAddRows = False
  550. SQL_考勤明細表_打卡讀取_晚上下上班()
  551. da.Fill(ds4) : 時間讀取3_dgv.DataSource = ds4.Tables(0) : conn.Close()
  552. End Sub
  553. Private Sub 讀取打卡時間4()
  554. 時間讀取4_dgv.DataSource = Nothing : ds6.Clear()
  555. 時間讀取4_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  556. 時間讀取4_dgv.ColumnHeadersHeight = 25
  557. 時間讀取4_dgv.AllowUserToAddRows = False
  558. SQL_考勤明細表_打卡讀取_加班下班()
  559. da.Fill(ds6) : 時間讀取4_dgv.DataSource = ds6.Tables(0) : conn.Close()
  560. End Sub
  561. Private Sub 讀取日期()
  562. 日期_dgv.DataSource = Nothing : ds8.Clear()
  563. 日期_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  564. 日期_dgv.ColumnHeadersHeight = 25
  565. 日期_dgv.AllowUserToAddRows = False
  566. SQL_讀取日期()
  567. da.Fill(ds8) : 日期_dgv.DataSource = ds8.Tables(0) : conn.Close()
  568. End Sub
  569. Private Sub 年份_下拉表單資料載入()
  570. SQL_考勤明細表_年份_下拉()
  571. 年份_cb.Items.Clear()
  572. While (dr.Read()) : 年份_cb.Items.Add(dr("年份")) : End While
  573. conn.Close()
  574. End Sub
  575. Private Sub 考勤明細表_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  576. 'Me.MdiParent = GRAMS_SYS : Me.WindowState = 2 : Me.AutoScroll = True
  577. 年份_下拉表單資料載入() : 讀取班別()
  578. 年份_cb.Text = Year(Today) : 月份_cb.SelectedIndex = Month(Today) - 1
  579. PA1 = 年份_cb.Text : PA2 = 月份_cb.Text
  580. 讀取日期()
  581. If CC(16) = False Then
  582. 考勤資料編輯_bt.Enabled = False : 時薪制_ch.Enabled = False : 彈性工時_ch.Enabled = False
  583. If gUserName = "測試號" Then : 人員_dgv.Enabled = True : Else : 人員_dgv.Enabled = False : End If
  584. Panel5.Visible = False
  585. 姓名_tb.Text = gUserName : 資料數 = 31
  586. 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
  587. SQL_考勤明細表_讀取編號() : If dr.Read() Then : 編號 = dr("DIN") : End If
  588. Set_考勤明細() : PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : Set_考勤流水() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  589. 月清單_dgv.Location = New System.Drawing.Point(91, 33) : 月清單_dgv.Size = New Size(1395, 790)
  590. Else
  591. 月清單_dgv.Location = New System.Drawing.Point(420, 2) : 月清單_dgv.Size = New Size(1066, 821)
  592. End If
  593. End Sub
  594. Private Sub 人員_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 人員_dgv.CellClick
  595. If e.RowIndex = -1 Then : Else
  596. 編號 = 人員_dgv("編號", e.RowIndex).Value.ToString : 姓名_tb.Text = 人員_dgv("姓名", e.RowIndex).Value.ToString
  597. 時薪制_ch.Checked = 人員_dgv("CC18", e.RowIndex).Value : 到職日 = 人員_dgv("到職日", e.RowIndex).Value.ToString
  598. If IsDBNull(人員_dgv("月薪", e.RowIndex).Value) Then : 人員_dgv("月薪", e.RowIndex).Value = "0" : End If
  599. If IsDBNull(人員_dgv("時薪", e.RowIndex).Value) Then : 人員_dgv("時薪", e.RowIndex).Value = "0" : End If
  600. If IsDBNull(人員_dgv("主管加級", e.RowIndex).Value) Then : 人員_dgv("主管加級", e.RowIndex).Value = "0" : End If
  601. If IsDBNull(人員_dgv("職務加級", e.RowIndex).Value) Then : 人員_dgv("職務加級", e.RowIndex).Value = "0" : End If
  602. If IsDBNull(人員_dgv("健保費", e.RowIndex).Value) Then : 人員_dgv("健保費", e.RowIndex).Value = "0" : End If
  603. If IsDBNull(人員_dgv("勞保費", e.RowIndex).Value) Then : 人員_dgv("勞保費", e.RowIndex).Value = "0" : End If
  604. 月薪_tb.Text = Strings.Format(CDbl(人員_dgv("月薪", e.RowIndex).Value.ToString), "#,##0.0")
  605. 時薪_tb.Text = Strings.Format(CDbl(人員_dgv("時薪", e.RowIndex).Value.ToString), "#,##0.0")
  606. 主管加級_tb.Text = Strings.Format(CDbl(人員_dgv("主管加級", e.RowIndex).Value.ToString), "#,##0.0")
  607. 職務加級_tb.Text = Strings.Format(CDbl(人員_dgv("職務加級", e.RowIndex).Value.ToString), "#,##0.0")
  608. 健保費_tb.Text = Strings.Format(CDbl(人員_dgv("健保費", e.RowIndex).Value.ToString), "#,##0.0")
  609. 勞保費_tb.Text = Strings.Format(CDbl(人員_dgv("勞保費", e.RowIndex).Value.ToString), "#,##0.0")
  610. 資料數 = 31 : Set_考勤明細() : PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : Set_考勤流水() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  611. End If
  612. End Sub
  613. Private Sub 考勤流水_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 考勤流水_dgv.CellClick
  614. If e.RowIndex = -1 Then : Else
  615. ID_tb.Text = 考勤流水_dgv("ID", e.RowIndex).Value.ToString : 時間_tb.Text = 考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString
  616. PA6 = 考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString : PA3 = 考勤流水_dgv("ID", e.RowIndex).Value.ToString
  617. End If
  618. End Sub
  619. Private Sub 月清單_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 月清單_dgv.CellClick
  620. If e.RowIndex = -1 Then : Else
  621. ID_tb.Text = "" : 時間_tb.Text = ""
  622. '-如果下班時間超過晚上12點時的分段計算------------------------------------------
  623. If Strings.Left(月清單_dgv(e.ColumnIndex, e.RowIndex).Value.ToString, 2) = "00" Or Strings.Left(月清單_dgv(e.ColumnIndex, e.RowIndex).Value.ToString, 2) = "01" Or
  624. Strings.Left(月清單_dgv(e.ColumnIndex, e.RowIndex).Value.ToString, 2) = "02" Then
  625. 時間_tb.Text = Strings.Left(月清單_dgv("日期", e.RowIndex).Value, 4) & "-" & Strings.Mid(月清單_dgv("日期", e.RowIndex).Value, 6, 2) &
  626. "-" & Strings.Right(月清單_dgv("日期", e.RowIndex).Value, 2)
  627. Dim dateString As String = 時間_tb.Text : Dim parsedDate As DateTime
  628. If DateTime.TryParseExact(dateString, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, parsedDate) Then
  629. parsedDate = parsedDate.AddDays(1) : 時間_tb.Text = parsedDate.ToString("yyyy-MM-dd")
  630. End If
  631. Else
  632. 時間_tb.Text = Strings.Left(月清單_dgv("日期", e.RowIndex).Value, 4) & "-" & Strings.Mid(月清單_dgv("日期", e.RowIndex).Value, 6, 2) &
  633. "-" & Strings.Right(月清單_dgv("日期", e.RowIndex).Value, 2)
  634. End If
  635. 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
  636. If 月清單_dgv(e.ColumnIndex, e.RowIndex).Value <> "" Then
  637. 時間_tb.Text = 時間_tb.Text & " " & 月清單_dgv(e.ColumnIndex, e.RowIndex).Value
  638. For i As Integer = 0 To 考勤流水_dgv.Rows.Count - 1
  639. If Len(時間_tb.Text) > 11 Then
  640. If 時間_tb.Text = 考勤流水_dgv("打卡時間", i).Value.ToString Then
  641. ID_tb.Text = 考勤流水_dgv("ID", i).Value : PA3 = 考勤流水_dgv("ID", i).Value : PA6 = 考勤流水_dgv("打卡時間", i).Value.ToString : Exit For
  642. End If
  643. ElseIf Len(時間_tb.Text) = 11 Then
  644. If Strings.Left(時間_tb.Text, 10) = Strings.Left(考勤流水_dgv("打卡時間", i).Value.ToString, 10) Then
  645. ID_tb.Text = 考勤流水_dgv("ID", i).Value : PA3 = 考勤流水_dgv("ID", i).Value : PA6 = 考勤流水_dgv("打卡時間", i).Value.ToString : Exit For
  646. End If
  647. End If
  648. Next
  649. If ID_tb.Text = "" Then
  650. Dim A As String = 時間_tb.Text : Dim format1 As String = "yyyy-MM-dd HH:mm:ss" : Dim format2 As String = "yyyy-MM-dd" : Dim parsedDate As DateTime
  651. If DateTime.TryParseExact(A, format1, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, parsedDate) Then
  652. ElseIf DateTime.TryParseExact(A, format2, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, parsedDate) Then
  653. If e.ColumnIndex = 8 Then : PA6 = 時間_tb.Text & " 08:00:00"
  654. ElseIf e.ColumnIndex = 9 Then : PA6 = 時間_tb.Text & " 12:00:00"
  655. ElseIf e.ColumnIndex = 11 Then : PA6 = 時間_tb.Text & " 13:00:00"
  656. ElseIf e.ColumnIndex = 12 Then : PA6 = 時間_tb.Text & " 17:00:00"
  657. ElseIf e.ColumnIndex = 14 Then : PA6 = 時間_tb.Text & " 18:00:00"
  658. ElseIf e.ColumnIndex = 15 Then : PA6 = 時間_tb.Text & " 20:00:00"
  659. End If : PA3 = ""
  660. Else : MsgBox("資料有問題,請通知系統管理員 [ " & 時間_tb.Text & " ]") : End If
  661. End If
  662. Else
  663. If ID_tb.Text = "" Then
  664. Dim A As String = 時間_tb.Text : Dim format1 As String = "yyyy-MM-dd HH:mm:ss" : Dim format2 As String = "yyyy-MM-dd" : Dim parsedDate As DateTime
  665. If DateTime.TryParseExact(A, format1, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, parsedDate) Then
  666. ElseIf DateTime.TryParseExact(A, format2, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, parsedDate) Then
  667. If e.ColumnIndex = 8 Then : PA6 = 時間_tb.Text & " 08:00:00"
  668. ElseIf e.ColumnIndex = 9 Then : PA6 = 時間_tb.Text & " 12:00:00"
  669. ElseIf e.ColumnIndex = 11 Then : PA6 = 時間_tb.Text & " 13:00:00"
  670. ElseIf e.ColumnIndex = 12 Then : PA6 = 時間_tb.Text & " 17:00:00"
  671. ElseIf e.ColumnIndex = 14 Then : PA6 = 時間_tb.Text & " 18:00:00"
  672. ElseIf e.ColumnIndex = 15 Then : PA6 = 時間_tb.Text & " 20:00:00"
  673. End If : PA3 = ""
  674. Else : MsgBox("資料有問題,請通知系統管理員 [ " & 時間_tb.Text & " ]") : End If
  675. End If
  676. End If
  677. 考勤明細表_編輯.時間_dtp.Value = PA6 : 考勤明細表_編輯.姓名_tb.Text = 姓名_tb.Text
  678. 考勤明細表_編輯.ID_lb.Text = PA3 : 考勤明細表_編輯.ID1_lb.Text = 編號
  679. Else
  680. 時間_tb.Text = "" : ID_tb.Text = ""
  681. End If
  682. End If : 考勤明細表_編輯.BringToFront()
  683. End Sub
  684. Private Sub 月清單_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 月清單_dgv.RowPostPaint
  685. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  686. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  687. ElseIf 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  688. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  689. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightYellow
  690. End If
  691. Next
  692. End Sub
  693. Private Sub 考勤流水_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 考勤流水_dgv.RowPostPaint
  694. Dim linePen As New Pen(Color.Blue, 2)
  695. If e.RowIndex = 考勤流水_dgv.Rows.Count - 1 Then : Exit Sub : Else
  696. If Strings.Left(考勤流水_dgv("打卡時間", e.RowIndex).Value.ToString, 10) <> Strings.Left(考勤流水_dgv("打卡時間", e.RowIndex + 1).Value.ToString, 10) Then
  697. Dim startX As Integer = IIf(考勤流水_dgv.RowHeadersVisible, 考勤流水_dgv.RowHeadersWidth, 0) : Dim startY As Integer = e.RowBounds.Top + e.RowBounds.Height - 1
  698. Dim endX As Integer = startX + 考勤流水_dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - 考勤流水_dgv.HorizontalScrollingOffset
  699. e.Graphics.DrawLine(linePen, startX, startY, endX, startY) : Exit Sub
  700. End If
  701. End If
  702. End Sub
  703. Private Sub 月份_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 月份_cb.SelectedIndexChanged
  704. PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : 讀取人員資料表()
  705. If 編號 <> "" Then
  706. 資料數 = 31 : Set_考勤明細() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  707. 讀取日期()
  708. End If
  709. End Sub
  710. Private Sub 考勤資料編輯_bt_Click(sender As Object, e As EventArgs) Handles 考勤資料編輯_bt.Click
  711. If PA6 <> "" Then
  712. PA4 = PA6 : PA = 年份_cb.Text : PA1 = 月份_cb.Text : PA2 = Strings.Mid(PA6, 9, 2)
  713. PA5 = 姓名_tb.Text : PA7 = 編號 : 考勤明細表_編輯.Show() : 考勤重讀()
  714. Else
  715. MsgBox("請選擇右下方的時間,做為修改的依據!!")
  716. End If
  717. End Sub
  718. Private Sub 考勤重讀()
  719. PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text
  720. Set_考勤流水() : 資料數 = 31 : Set_考勤明細() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  721. End Sub
  722. Private Sub R_bt_Click(sender As Object, e As EventArgs) Handles R_bt.Click
  723. 考勤重讀()
  724. End Sub
  725. Private Sub 排班資料_bt_Click(sender As Object, e As EventArgs) Handles 排班資料_bt.Click
  726. PA = 年份_cb.Text : PA1 = 月份_cb.Text : PA2 = 姓名_tb.Text : 個人班表.Close() : 個人班表.Show()
  727. End Sub
  728. Private Sub 時薪制_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 時薪制_ch.Click
  729. Set_時薪制()
  730. End Sub
  731. Private Sub 彈性工時_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 彈性工時_ch.Click
  732. Set_彈性工時()
  733. End Sub
  734. Private Sub 薪資表存檔_bt_Click(sender As Object, e As EventArgs) Handles 薪資表存檔_bt.Click
  735. If 姓名_tb.Text = "" Then : MsgBox("沒有資料無法存檔!!") : Else
  736. Dim 流水號 As String = "" : Dim 流水 As Integer : Dim 薪資 As Double
  737. PA1 = CInt(年份_cb.Text) - 1911 & "-" & 月份_cb.Text : PA2 = 到職日 : PA3 = 姓名_tb.Text : PA4 = 月清單_dgv.Rows.Count
  738. PA5 = 當月平日天_tb.Text : PA6 = 常日總_tb.Text : PA7 = 月薪_tb.Text : PA8 = 時薪_tb.Text : PA9 = "0" : PA10 = 主管加級_tb.Text : PA11 = 職務加級_tb.Text
  739. PA12 = 特休未休_nud.Value : PA13 = 特修補錢_tb.Text : PA14 = 特休_tb.Text : PA15 = 婚假_tb.Text : PA16 = 喪假_tb.Text
  740. PA17 = 其他加項_tb.Text : PA18 = 其他加_nud.Value : PA19 = 未到離職_tb.Text
  741. 薪資 = CDbl(月薪_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text) + CDbl(特修補錢_tb.Text) +
  742. CDbl(特休_tb.Text) + CDbl(婚假_tb.Text) + CDbl(喪假_tb.Text) + 其他加_nud.Value - CDbl(未到離職_tb.Text)
  743. If 時薪制_ch.Checked = False Then : PA20 = 薪資 : PA21 = "0" : PA22 = 薪資 : Else : PA20 = "0" : PA21 = 薪資 : PA22 = 薪資 : End If
  744. PA23 = CDbl(當月平日一段_tb.Text) + CDbl(一段假日加_tb.Text) : PA24 = CDbl(當月平日二段_tb.Text) + CDbl(二段假日加_tb.Text) : PA25 = 國假日加_tb.Text
  745. PA26 = 加班費1_tb.Text : PA27 = 應付小計1_tb.Text
  746. PA28 = CDbl(當月平日一段1_tb.Text) + CDbl(一段假日加1_tb.Text) : PA29 = CDbl(當月平日二段1_tb.Text) + CDbl(二段假日加1_tb.Text) : PA30 = 國假日加1_tb.Text
  747. PA31 = 加班費2_tb.Text : PA32 = 應付小計2_tb.Text
  748. PA33 = 勞保費_tb.Text : PA34 = 健保費_tb.Text : PA35 = 事假_tb.Text : PA36 = 病假_tb.Text : PA37 = 其他減項_tb.Text : PA38 = 其他減_nud.Value
  749. PA39 = CDbl(勞保費_tb.Text) + CDbl(健保費_tb.Text) + CDbl(事假_tb.Text) + CDbl(病假_tb.Text) + 其他減_nud.Value : PA40 = "0"
  750. PA41 = 實付小計1_tb.Text : PA42 = 實付小計2_tb.Text
  751. SQL_薪資表確認()
  752. If dr.Read() Then
  753. PA = dr("流水號").ToString : SQL_薪資表修改() : MsgBox("薪資資料修改完成!!")
  754. Else
  755. SQL_薪資表流水號()
  756. If dr.Read() Then : 流水 = Double.Parse(Strings.Right(dr("流水號").ToString, 8)) : Else : 流水 = 0 : End If : conn.Close() : 流水 += 1
  757. If 流水 < 10 Then : 流水號 = "PO" & "0000000" & 流水
  758. ElseIf 流水 > 9 And 流水 < 100 Then : 流水號 = "PO" & "000000" & 流水
  759. ElseIf 流水 > 99 And 流水 < 1000 Then : 流水號 = "PO" & "00000" & 流水
  760. ElseIf 流水 > 999 And 流水 < 10000 Then : 流水號 = "PO" & "0000" & 流水
  761. ElseIf 流水 > 9999 And 流水 < 100000 Then : 流水號 = "PO" & "000" & 流水
  762. ElseIf 流水 > 99999 And 流水 < 1000000 Then : 流水號 = "PO" & "00" & 流水
  763. ElseIf 流水 > 999999 And 流水 < 10000000 Then : 流水號 = "PO" & "0" & 流水
  764. ElseIf 流水 > 9999999 Then : 流水號 = "PO" & 流水 : End If : PA = 流水號
  765. SQL_薪資表新增() : MsgBox("薪資資料新增完成!!")
  766. End If
  767. End If
  768. End Sub
  769. Private Sub 列印工時表_bt_Click(sender As Object, e As EventArgs) Handles 列印工時表_bt.Click
  770. If 姓名_tb.Text = "" Then : PA = "全體" : Else : 考勤表列印選擇.ShowDialog() : End If
  771. xlApp = CType(CreateObject("Excel.Application"), Application)
  772. xlBook = xlApp.Workbooks.Add
  773. xlApp.DisplayAlerts = True
  774. xlApp.Visible = True
  775. xlApp.Application.WindowState = xlMaximized
  776. If PA = "單人" Then
  777. 列印工時表() : xlSheet.PageSetup.PrintArea = "" : xlApp.Cells.Select() : xlSheet.Range("B1").Select() : xlApp.Application.WindowState = xlMinimized : MsgBox("考勤表列印完成!!")
  778. Else
  779. For I As Integer = 0 To 人員_dgv.Rows.Count - 1
  780. 編號 = 人員_dgv("編號", I).Value.ToString : 姓名_tb.Text = 人員_dgv("姓名", I).Value.ToString : 時薪制_ch.Checked = 人員_dgv("CC18", I).Value
  781. 到職日 = 人員_dgv("到職日", I).Value.ToString
  782. If 人員_dgv("月薪", I).Value.ToString = "" Then : 月薪_tb.Text = "0" : Else : 月薪_tb.Text = Strings.Format(CDbl(人員_dgv("月薪", I).Value.ToString), "#,##0.0") : End If
  783. If 人員_dgv("時薪", I).Value.ToString = "" Then : 時薪_tb.Text = "0" : Else : 時薪_tb.Text = Strings.Format(CDbl(人員_dgv("時薪", I).Value.ToString), "#,##0.0") : End If
  784. If 人員_dgv("時薪", I).Value.ToString = "" Then : 主管加級_tb.Text = "0" : Else : 主管加級_tb.Text = Strings.Format(CDbl(人員_dgv("主管加級", I).Value.ToString), "#,##0.0") : End If
  785. If 人員_dgv("時薪", I).Value.ToString = "" Then : 職務加級_tb.Text = "0" : Else : 職務加級_tb.Text = Strings.Format(CDbl(人員_dgv("職務加級", I).Value.ToString), "#,##0.0") : End If
  786. If 人員_dgv("時薪", I).Value.ToString = "" Then : 健保費_tb.Text = "0" : Else : 健保費_tb.Text = Strings.Format(CDbl(人員_dgv("健保費", I).Value.ToString), "#,##0.0") : End If
  787. If 人員_dgv("時薪", I).Value.ToString = "" Then : 勞保費_tb.Text = "0" : Else : 勞保費_tb.Text = Strings.Format(CDbl(人員_dgv("勞保費", I).Value.ToString), "#,##0.0") : End If
  788. 資料數 = 31 : Set_考勤明細() : PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : Set_考勤流水() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  789. 列印工時表()
  790. Next
  791. xlSheet.PageSetup.PrintArea = "" : xlApp.Cells.Select() : xlSheet.Range("B1").Select() : xlApp.Application.WindowState = xlMinimized : MsgBox("全體考勤表列印完成!!")
  792. End If
  793. End Sub
  794. Private Sub 列印工時表()
  795. xlSheet = NewMethod(xlBook) : xlApp.Sheets(1).Select
  796. xlApp.Sheets(1).Name = 姓名_tb.Text : xlBook.Activate() : xlSheet.Activate()
  797. xlSheet.Cells(1, 1) = "黃柏翰皮膚科診所考勤明細表" : xlSheet.Cells(2, 1) = CInt(年份_cb.Text) - 1911 & "年" & 月份_cb.Text & "月 - " & 姓名_tb.Text & " 全月考勤"
  798. xlSheet.Cells(3, 1) = "日期" : xlSheet.Cells(3, 2) = "星期" : xlSheet.Cells(3, 3) = "假別" : xlSheet.Cells(3, 4) = "內容" : xlSheet.Cells(3, 5) = "假時數"
  799. xlSheet.Cells(3, 6) = "一段上班" : xlSheet.Cells(3, 7) = "一段下班" : xlSheet.Cells(3, 8) = "二段上班" : xlSheet.Cells(3, 9) = "二段下班"
  800. xlSheet.Cells(3, 10) = "加班上班" : xlSheet.Cells(3, 11) = "加班下班" : xlSheet.Cells(3, 12) = "一段工時" : xlSheet.Cells(3, 13) = "二段工時"
  801. xlSheet.Cells(3, 14) = "一段加班" : xlSheet.Cells(3, 15) = "二段加班" : xlSheet.Cells(3, 16) = "加班申請" : xlSheet.Cells(3, 17) = "加班內容"
  802. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  803. xlSheet.Cells(4 + I, 1) = 月清單_dgv.Rows(I).Cells("日期").Value.ToString : xlSheet.Cells(4 + I, 2) = 月清單_dgv.Rows(I).Cells("星期").Value.ToString
  804. xlSheet.Cells(4 + I, 3) = 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString : xlSheet.Cells(4 + I, 4) = 月清單_dgv.Rows(I).Cells("假期內容").Value.ToString
  805. xlSheet.Cells(4 + I, 5) = 月清單_dgv.Rows(I).Cells("申請時數").Value.ToString : xlSheet.Cells(4 + I, 6) = 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString
  806. xlSheet.Cells(4 + I, 7) = 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString : xlSheet.Cells(4 + I, 8) = 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString
  807. xlSheet.Cells(4 + I, 9) = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : xlSheet.Cells(4 + I, 10) = 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString
  808. xlSheet.Cells(4 + I, 11) = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : xlSheet.Cells(4 + I, 12) = 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString
  809. xlSheet.Cells(4 + I, 13) = 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString : xlSheet.Cells(4 + I, 14) = 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString
  810. xlSheet.Cells(4 + I, 15) = 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString : xlSheet.Cells(4 + I, 16) = 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString
  811. xlSheet.Cells(4 + I, 17) = 月清單_dgv.Rows(I).Cells("加班狀態").Value.ToString
  812. Next : AA(xlApp, xlSheet)
  813. End Sub
  814. Private Shared Function NewMethod(xlBook As Workbook) As Worksheet
  815. Return CType(xlBook.Worksheets.Add, Worksheet)
  816. End Function
  817. Private Sub AA(ByVal myExcel As Microsoft.Office.Interop.Excel.Application, ByVal xlSheet As Microsoft.Office.Interop.Excel.Worksheet)
  818. xlSheet.Cells.Select()
  819. With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 10 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
  820. .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
  821. xlSheet.Range("A3:Q36").Select()
  822. With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
  823. .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With
  824. xlSheet.Columns("A:A").Select : myExcel.Selection.ColumnWidth = 10
  825. xlSheet.Columns("B:Q").Select : myExcel.Columns("B:Q").EntireColumn.AutoFit
  826. xlSheet.Rows("3:34").Select : myExcel.Selection.RowHeight = 20
  827. xlSheet.Rows("4:4").Select : myExcel.ActiveWindow.FreezePanes = True
  828. xlSheet.Range("A3:Q34").Select()
  829. myExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone : myExcel.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  830. With myExcel.Selection.Borders(xlEdgeLeft) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  831. With myExcel.Selection.Borders(xlEdgeTop) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  832. With myExcel.Selection.Borders(xlEdgeBottom) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  833. With myExcel.Selection.Borders(xlEdgeRight) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  834. With myExcel.Selection.Borders(xlInsideVertical) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  835. With myExcel.Selection.Borders(xlInsideHorizontal) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  836. myExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone : myExcel.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  837. With myExcel.Selection.Borders(xlEdgeLeft) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  838. With myExcel.Selection.Borders(xlEdgeTop) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  839. With myExcel.Selection.Borders(xlEdgeBottom) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  840. With myExcel.Selection.Borders(xlEdgeRight) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  841. With myExcel.Selection.Borders(xlInsideVertical) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  842. xlSheet.Range("A3:Q3").Select()
  843. myExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone : myExcel.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  844. With myExcel.Selection.Borders(xlEdgeLeft) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  845. With myExcel.Selection.Borders(xlEdgeTop) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  846. With myExcel.Selection.Borders(xlEdgeBottom) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  847. With myExcel.Selection.Borders(xlEdgeRight) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  848. With myExcel.Selection.Borders(xlInsideVertical) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  849. myExcel.Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
  850. With myExcel.Selection.Interior : .Pattern = xlSolid : .PatternColorIndex = xlAutomatic : .ThemeColor = xlThemeColorAccent1 : .TintAndShade = 0.799981688894314
  851. .PatternTintAndShade = 0 : End With
  852. For I As Integer = 4 To 36
  853. If Strings.Left(xlSheet.Cells(I, 2).value, 3) = "星期六" Or Strings.Left(xlSheet.Cells(I, 2).value, 3) = "星期日" Then
  854. xlSheet.Range("A" & I & ":Q" & I).Select()
  855. With myExcel.Selection.Interior : .Pattern = xlSolid : .PatternColorIndex = xlAutomatic : .ThemeColor = xlThemeColorAccent2 : .TintAndShade = 0.799981688894314
  856. .PatternTintAndShade = 0 : End With
  857. End If
  858. Next
  859. xlSheet.Range("A2:Q2").Select()
  860. With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
  861. .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With : myExcel.Selection.Merge
  862. With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 12 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
  863. .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
  864. myExcel.Selection.Font.Bold = True
  865. xlSheet.Range("A1:Q1").Select()
  866. With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
  867. .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With : myExcel.Selection.Merge
  868. With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 16 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
  869. .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
  870. myExcel.Selection.Font.Bold = True
  871. xlSheet.Range("Q4").Select() : myExcel.ActiveWindow.DisplayGridlines = False
  872. End Sub
  873. End Class