暫無描述
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 74KB

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