Aucune description
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

考勤明細表.vb 94KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013
  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
  10. Public Class 考勤明細表
  11. ReadOnly ds, ds1, ds2, ds3, ds4, ds5, ds6, ds7, ds8 As New DataSet
  12. Dim 編號, 到職日, 介面分類 As String
  13. Dim xlApp As Application : Dim xlBook As Workbook : Dim xlSheet As Worksheet
  14. Dim T, S, F, M, T1, S1, TT, SS, FF, MM, FFF, MMM, 平日班, 假日班, 假加, 假加一, 假加二, 假加時1, 假加分1, 假加時2, 假加分2, 國假, 國假1, 國假2, 平日加, 平日加1, 平日加2,
  15. 正常時, 正常時1, 正常時2, 正常時3, 正常時4, 加班時, 加班時1, 加班時2, 加班時3, 加班時4, 加班時5, 加班時6, 加班時7, 加班時8, 加班時9, 加班時10, 加班時11, 加班時12,
  16. 加班時13, 加班時14, 加班時15, 加班時16, 加班時17, 加班時18, 加班時19, 加班時20, 加班時21, 加班時22, 加班時23, 加班時24, 加班時25, 加班時26, 加班時27, 加班時28, 加班時29,
  17. 當天總分, 彈性扣時, 請假日 As Double
  18. Dim 位置1 As Integer
  19. Private Sub 讀取人員資料表()
  20. 人員_dgv.DataSource = Nothing : ds.Clear()
  21. 人員_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  22. 人員_dgv.ColumnHeadersHeight = 25 : 人員_dgv.AllowUserToAddRows = False
  23. SQL_考勤明細表_人員()
  24. da.Fill(ds) : 人員_dgv.DataSource = ds.Tables(0) : conn.Close()
  25. 人員_dgv.Columns(0).FillWeight = 70 : 人員_dgv.Columns(1).Visible = False : 人員_dgv.Columns(2).FillWeight = 100 : 人員_dgv.Columns(3).Visible = False
  26. 人員_dgv.Columns(4).Visible = False : 人員_dgv.Columns(5).Visible = False : 人員_dgv.Columns(6).Visible = False : 人員_dgv.Columns(7).Visible = False
  27. 人員_dgv.Columns(8).Visible = False : 人員_dgv.Columns(9).Visible = False : 人員_dgv.Columns("到職日").Visible = False : 人員_dgv.Columns("CC18").Visible = False
  28. For i As Integer = 0 To 人員_dgv.Rows.Count - 1
  29. 人員_dgv.Rows(i).Cells("No.").Value = i + 1
  30. Next
  31. End Sub
  32. Private Sub Set_考勤明細()
  33. 月清單_dgv.DataSource = Nothing : ds1.Clear()
  34. 月清單_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  35. 月清單_dgv.ColumnHeadersHeight = 40 : 月清單_dgv.AllowUserToAddRows = False
  36. If CC(16) = True Then : 月清單_dgv.RowTemplate.Height = 25 : Else : 月清單_dgv.RowTemplate.Height = 23 : End If
  37. PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : SQL_考勤明細表_月份考勤()
  38. da.Fill(ds1) : 月清單_dgv.DataSource = ds1.Tables(0) : conn.Close()
  39. If 介面分類 = "考勤明細表" Then
  40. 月清單_dgv.Columns(0).FillWeight = 100 : 月清單_dgv.Columns(1).FillWeight = 60 : 月清單_dgv.Columns(2).FillWeight = 90 : 月清單_dgv.Columns(3).FillWeight = 100
  41. 月清單_dgv.Columns(4).FillWeight = 80 : 月清單_dgv.Columns(5).Visible = False : 月清單_dgv.Columns(6).Visible = False : 月清單_dgv.Columns(7).Visible = False
  42. 月清單_dgv.Columns(8).FillWeight = 80 : 月清單_dgv.Columns(9).FillWeight = 80 : 月清單_dgv.Columns(10).FillWeight = 60 : 月清單_dgv.Columns(11).FillWeight = 80
  43. 月清單_dgv.Columns(12).FillWeight = 80 : 月清單_dgv.Columns(13).FillWeight = 60 : 月清單_dgv.Columns(14).FillWeight = 80 : 月清單_dgv.Columns(15).FillWeight = 80
  44. 月清單_dgv.Columns(16).FillWeight = 60 : 月清單_dgv.Columns(17).FillWeight = 60 : 月清單_dgv.Columns(18).Visible = False : 月清單_dgv.Columns(19).FillWeight = 60
  45. 月清單_dgv.Columns(20).FillWeight = 60 : 月清單_dgv.Columns(21).FillWeight = 40 : 月清單_dgv.Columns(22).FillWeight = 40 : 月清單_dgv.Columns(23).FillWeight = 100
  46. 月清單_dgv.Columns(24).FillWeight = 80 : 月清單_dgv.Columns(25).FillWeight = 150 : 月清單_dgv.Columns("休息1").Visible = False : 月清單_dgv.Columns("休息2").Visible = False
  47. 月清單_dgv.Columns("半天").Visible = False : 月清單_dgv.Columns("班別").Visible = False : 月清單_dgv.Columns("最後下診").Visible = False
  48. 月清單_dgv.Columns("申請時數").Visible = False
  49. ElseIf 介面分類 = "補打卡申請" Or 介面分類 = "補打卡審核" Then
  50. 月清單_dgv.Columns(0).FillWeight = 100 : 月清單_dgv.Columns(1).FillWeight = 60 : 月清單_dgv.Columns(2).FillWeight = 90 : 月清單_dgv.Columns(3).Visible = False
  51. 月清單_dgv.Columns(4).Visible = False : 月清單_dgv.Columns(5).Visible = False : 月清單_dgv.Columns(6).Visible = False : 月清單_dgv.Columns(7).Visible = False
  52. 月清單_dgv.Columns(8).FillWeight = 80 : 月清單_dgv.Columns(9).FillWeight = 80 : 月清單_dgv.Columns(10).FillWeight = 60 : 月清單_dgv.Columns(11).FillWeight = 80
  53. 月清單_dgv.Columns(12).FillWeight = 80 : 月清單_dgv.Columns(13).FillWeight = 60 : 月清單_dgv.Columns(14).FillWeight = 80 : 月清單_dgv.Columns(15).FillWeight = 80
  54. 月清單_dgv.Columns(16).FillWeight = 60 : 月清單_dgv.Columns(17).FillWeight = 60 : 月清單_dgv.Columns(18).Visible = False : 月清單_dgv.Columns(19).FillWeight = 60
  55. 月清單_dgv.Columns(20).FillWeight = 60 : 月清單_dgv.Columns(21).FillWeight = 40 : 月清單_dgv.Columns(22).FillWeight = 40 : 月清單_dgv.Columns(23).FillWeight = 100
  56. 月清單_dgv.Columns(24).Visible = False : 月清單_dgv.Columns(25).Visible = False : 月清單_dgv.Columns("休息1").Visible = False : 月清單_dgv.Columns("休息2").Visible = False
  57. 月清單_dgv.Columns("半天").Visible = False : 月清單_dgv.Columns("班別").Visible = False : 月清單_dgv.Columns("最後下診").Visible = False
  58. 月清單_dgv.Columns("申請時數").Visible = False
  59. End If
  60. 讀取打卡時間1() : 讀取打卡時間2()
  61. Dim S2, F2 As String
  62. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  63. MyModule1.進度條()
  64. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And
  65. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString = "" Then
  66. 月清單_dgv.Rows(I).Cells("申請狀態").Value = "."
  67. End If
  68. 月清單_dgv.Rows(I).Cells("一段工時").Value = "" : 月清單_dgv.Rows(I).Cells("二段工時").Value = "" : 月清單_dgv.Rows(I).Cells("加班工時").Value = ""
  69. 月清單_dgv.Rows(I).Cells("休息1").Value = "" : 月清單_dgv.Rows(I).Cells("休息2").Value = "" : 月清單_dgv.Rows(I).Cells("一段加班").Value = ""
  70. 月清單_dgv.Rows(I).Cells("二段加班").Value = "" : 月清單_dgv.Rows(I).Cells("加班下班").Value = "" : 月清單_dgv.Rows(I).Cells("加班上班").Value = ""
  71. 月清單_dgv.Rows(I).Cells("二段下班").Value = "" : 月清單_dgv.Rows(I).Cells("二段上班").Value = "" : 月清單_dgv.Rows(I).Cells("一段下班").Value = ""
  72. If IsDBNull(月清單_dgv.Rows(I).Cells("半天").Value) = True Then : 月清單_dgv.Rows(I).Cells("半天").Value = False : End If
  73. If IsDBNull(月清單_dgv.Rows(I).Cells("班別").Value) = True Then : 月清單_dgv.Rows(I).Cells("班別").Value = "" : End If
  74. If 月清單_dgv.Rows(I).Cells("班別").Value.ToString = "休" Then : Else : 月清單_dgv.Rows(I).Cells("班別").Value = Strings.Right(月清單_dgv.Rows(I).Cells("班別").Value, 2) : End If
  75. '--------------------------讀入資料------------------------------------------------------------------------------------------------------------------------------------
  76. PA3 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("日期").Value, 2))
  77. PA4 = 月清單_dgv.Rows(I).Cells("日期").Value.ToString
  78. If 時間讀取1_dgv.Rows.Count > 0 Then
  79. For II As Integer = 0 To 時間讀取1_dgv.Rows.Count - 1
  80. If PA4 = 時間讀取1_dgv.Rows(II).Cells("日期").Value.ToString Then
  81. 月清單_dgv.Rows(I).Cells("一段上班").Value = 時間讀取1_dgv.Rows(II).Cells("打卡時間").Value.ToString : Exit For
  82. Else : 月清單_dgv.Rows(I).Cells("一段上班").Value = ""
  83. End If
  84. Next
  85. For II As Integer = 0 To 班別_dgv.Rows.Count - 1
  86. If 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString <> "" Then
  87. If FormatDateTime(班別_dgv.Rows(II).Cells("時段1").Value.ToString, DateFormat.ShortTime) <
  88. FormatDateTime(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DateFormat.ShortTime) And
  89. FormatDateTime(班別_dgv.Rows(II).Cells("時段2").Value.ToString, DateFormat.ShortTime) >
  90. FormatDateTime(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DateFormat.ShortTime) Then
  91. 月清單_dgv.Rows(I).Cells("班別判斷").Value = 班別_dgv.Rows(II).Cells("時段").Value.ToString
  92. 月清單_dgv.Rows(I).Cells("休息1").Value = 班別_dgv.Rows(II).Cells("一段休息").Value.ToString
  93. 月清單_dgv.Rows(I).Cells("休息2").Value = 班別_dgv.Rows(II).Cells("二段休息").Value.ToString
  94. DTPS(0) = 班別_dgv.Rows(II).Cells("時段2").Value.ToString : DTPS(1) = 班別_dgv.Rows(II).Cells("時段4").Value.ToString()
  95. DTPS(2) = 班別_dgv.Rows(II).Cells("時段4").Value.ToString : DTPS(3) = 班別_dgv.Rows(II).Cells("時段6").Value.ToString()
  96. DTPS(4) = 班別_dgv.Rows(II).Cells("時段6").Value.ToString
  97. Exit For
  98. End If
  99. End If
  100. If II = 班別_dgv.Rows.Count - 1 Then
  101. For III As Integer = 0 To 班別_dgv.Rows.Count - 1
  102. If Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, 2)) <= Val(Strings.Left(班別_dgv.Rows(III).Cells("時段").Value.ToString, 2)) Then
  103. 月清單_dgv.Rows(I).Cells("班別判斷").Value = 班別_dgv.Rows(III).Cells("時段").Value.ToString
  104. 月清單_dgv.Rows(I).Cells("休息1").Value = 班別_dgv.Rows(II).Cells("一段休息").Value.ToString
  105. 月清單_dgv.Rows(I).Cells("休息2").Value = 班別_dgv.Rows(II).Cells("二段休息").Value.ToString
  106. DTPS(0) = 班別_dgv.Rows(III).Cells("時段2").Value.ToString : DTPS(1) = 班別_dgv.Rows(III).Cells("時段4").Value.ToString()
  107. DTPS(2) = 班別_dgv.Rows(III).Cells("時段4").Value.ToString : DTPS(3) = 班別_dgv.Rows(III).Cells("時段6").Value.ToString()
  108. DTPS(4) = 班別_dgv.Rows(III).Cells("時段6").Value.ToString
  109. Exit For
  110. End If
  111. 月清單_dgv.Rows(I).Cells("班別判斷").Value = "打卡異常"
  112. Next
  113. End If
  114. Next
  115. Else
  116. 月清單_dgv.Rows(I).Cells("一段上班").Value = "" : 月清單_dgv.Rows(I).Cells("班別判斷").Value = ""
  117. End If
  118. 月清單_dgv.Rows(I).Cells("一段下班").Value = "" : 月清單_dgv.Rows(I).Cells("二段上班").Value = ""
  119. Dim SD(2), 位置, 數量 As Integer : 數量 = 0
  120. For II As Integer = 0 To 時間讀取2_dgv.Rows.Count - 1
  121. If PA4 = 時間讀取2_dgv.Rows(II).Cells("日期").Value.ToString Then
  122. If 數量 = 0 Then
  123. ElseIf 數量 = 1 Then : 月清單_dgv.Rows(I).Cells("一段下班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  124. ElseIf 數量 = 2 Then : 月清單_dgv.Rows(I).Cells("二段上班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  125. ElseIf 數量 = 3 Then : 月清單_dgv.Rows(I).Cells("二段下班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  126. ElseIf 數量 = 4 Then : 月清單_dgv.Rows(I).Cells("加班上班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  127. ElseIf 數量 = 5 Then : 月清單_dgv.Rows(I).Cells("加班下班").Value = 時間讀取2_dgv.Rows(II).Cells("打卡時間").Value
  128. End If : 數量 += 1
  129. End If
  130. Next
  131. '--------------------------打卡位置調整------------------------------------------------------------------------------------------------------------------------------------
  132. If 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString = 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString Then : 月清單_dgv.Rows(I).Cells("一段下班").Value = "" : End If
  133. For d As Integer = 1 To 4
  134. If 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString <> "" Then
  135. 月清單_dgv.Rows(I).Cells("加班上班").Value = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : 月清單_dgv.Rows(I).Cells("加班下班").Value = ""
  136. End If
  137. If 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString <> "" Then
  138. 月清單_dgv.Rows(I).Cells("二段下班").Value = 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString : 月清單_dgv.Rows(I).Cells("加班上班").Value = ""
  139. End If
  140. If 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString <> "" Then
  141. 月清單_dgv.Rows(I).Cells("二段上班").Value = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : 月清單_dgv.Rows(I).Cells("二段下班").Value = ""
  142. End If
  143. If 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString = "" And 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString <> "" Then
  144. 月清單_dgv.Rows(I).Cells("一段下班").Value = 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString : 月清單_dgv.Rows(I).Cells("二段上班").Value = ""
  145. End If
  146. Next
  147. '--------------------------工時計算------------------------------------------------------------------------------------------------------------------------------------
  148. Dim QASW1 As Integer : Dim QASW2 As Integer : Dim QASW3 As Integer : Dim DD As String
  149. '-如果下班時間超過晚上12點時的分段計算------------------------------------------
  150. If Strings.Left(月清單_dgv.Rows(I).Cells("一段下班").Value.ToString, 2) = "00" Or Strings.Left(月清單_dgv.Rows(I).Cells("一段下班").Value.ToString, 2) = "01" Or
  151. Strings.Left(月清單_dgv.Rows(I).Cells("一段下班").Value.ToString, 2) = "02" Then
  152. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("一段下班").Value) : QASW1 = TSFM
  153. Else : DD = 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString : QASW1 = 0 : End If
  154. '-第一段上班時間正常打卡計算------------------------------------------
  155. If 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString <> "" And DD <> "" Then
  156. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString, DD)
  157. TSFM += QASW1
  158. If 時薪制_ch.Checked = False Then
  159. If 月清單_dgv.Rows(I).Cells("半天").Value = False Then
  160. '-第二段上下班都沒打卡,但是累計工時大於4小時(14400),先扣除一小時休息,第一段工時等於4小時,在把時數放到第二段工時------------------------------------------
  161. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  162. QASW2 = TSFM - 14400 - (Val(月清單_dgv.Rows(I).Cells("休息1").Value) * 3600)
  163. If QASW2 < 0 Then : QASW2 = 0 : End If
  164. TSFM = 14400
  165. '-如果加班上下班都沒打卡,但扣除第一段時數的累計工時還是大於4小時(14400),先扣除一小時休息,第二段工時等於4小時,在把時數放到加班段工時------------------------------------------
  166. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  167. QASW3 = QASW2 - 14400 - (Val(月清單_dgv.Rows(I).Cells("休息2").Value) * 3600)
  168. If QASW3 < 0 Then : QASW3 = 0 : End If
  169. QASW2 = 14400
  170. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  171. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  172. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  173. End If
  174. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  175. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  176. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  177. End If
  178. Else
  179. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  180. QASW2 = TSFM - 14400
  181. If QASW2 < 0 Then : QASW2 = 0 : End If
  182. TSFM = 14400
  183. '-如果加班上下班都沒打卡,但扣除第一段時數的累計工時還是大於4小時(14400),先扣除一小時休息,第二段工時等於4小時,在把時數放到加班段工時------------------------------------------
  184. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  185. QASW3 = QASW2 - 14400
  186. If QASW3 < 0 Then : QASW3 = 0 : End If
  187. QASW2 = 14400
  188. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  189. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  190. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  191. End If
  192. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  193. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  194. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  195. End If
  196. End If
  197. Else
  198. If (月清單_dgv.Rows(I).Cells("二段上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("二段下班").Value = "") And TSFM > 14400 Then
  199. QASW2 = TSFM - 14400
  200. If QASW2 < 0 Then : QASW2 = 0 : End If
  201. TSFM = 14400
  202. If (月清單_dgv.Rows(I).Cells("加班上班").Value.ToString = "" Or 月清單_dgv.Rows(I).Cells("加班下班").Value = "") And QASW2 > 14400 Then
  203. QASW3 = QASW2 - 14400
  204. If QASW3 < 0 Then : QASW3 = 0 : End If
  205. QASW2 = 14400
  206. T = QASW3 \ 86400 : T1 = QASW3 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  207. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  208. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  209. End If
  210. T = QASW2 \ 86400 : T1 = QASW2 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  211. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  212. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  213. End If
  214. End If
  215. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  216. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  217. 月清單_dgv.Rows(I).Cells("一段工時").Value = S2 & " : " & F2
  218. End If
  219. '-如果下班時間超過晚上12點時的分段計算------------------------------------------
  220. If Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value.ToString, 2) = "00" Or Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value.ToString, 2) = "01" Or
  221. Strings.Left(月清單_dgv.Rows(I).Cells("二段下班").Value.ToString, 2) = "02" Then
  222. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("二段下班").Value) : QASW1 = TSFM
  223. Else : DD = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : QASW1 = 0 : End If
  224. '-第二段上班時間正常打卡計算------------------------------------------
  225. If 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString <> "" And DD <> "" Then
  226. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString, DD)
  227. TSFM += QASW1
  228. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  229. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  230. 月清單_dgv.Rows(I).Cells("二段工時").Value = S2 & " : " & F2
  231. End If
  232. '-如果下班時間超過晚上12點時的分段計算------------------------------------------
  233. If Strings.Left(月清單_dgv.Rows(I).Cells("加班下班").Value.ToString, 2) = "00" Then
  234. DD = "23:59:59" : Dim TSFM As Integer = DateDiff("s", "00:00:00", 月清單_dgv.Rows(I).Cells("二段下班").Value) : QASW1 = TSFM
  235. Else : DD = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : QASW1 = 0 : End If
  236. '-加班上班時間正常打卡計算------------------------------------------
  237. If 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString <> "" And DD <> "" Then
  238. Dim TSFM As Integer = DateDiff("s", 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString, DD)
  239. TSFM += QASW1
  240. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  241. S2 = T * 24 + S : If M > 30 Then : F += 1 : End If : F2 = F
  242. 月清單_dgv.Rows(I).Cells("加班工時").Value = S2 & " : " & F2
  243. End If
  244. 當天總分 = (Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) +
  245. Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) +
  246. Val(Strings.Left(月清單_dgv.Rows(I).Cells("加班工時").Value.ToString, 2))) * 60 +
  247. (Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) +
  248. Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) +
  249. Val(Strings.Right(月清單_dgv.Rows(I).Cells("加班工時").Value.ToString, 2)))
  250. If 當天總分 <= 240 Then
  251. 月清單_dgv.Rows(I).Cells("一段工時").Value = 當天總分 \ 60 & " : " & 當天總分 Mod 60
  252. 月清單_dgv.Rows(I).Cells("二段工時").Value = "" : 月清單_dgv.Rows(I).Cells("加班工時").Value = ""
  253. ElseIf 當天總分 > 240 Then
  254. 月清單_dgv.Rows(I).Cells("一段工時").Value = "4 : 0"
  255. 月清單_dgv.Rows(I).Cells("二段工時").Value = (當天總分 - 240) \ 60 & " : " & (當天總分 - 240) Mod 60
  256. If (當天總分 - 240) <= 240 Then : Else
  257. 月清單_dgv.Rows(I).Cells("二段工時").Value = "4 : 0"
  258. 月清單_dgv.Rows(I).Cells("一段加班").Value = (當天總分 - 240 - 240) \ 60 & " : " & (當天總分 - 240 - 240) Mod 60
  259. If (當天總分 - 240 - 240) <= 120 Then : Else
  260. 月清單_dgv.Rows(I).Cells("一段加班").Value = "2 : 0"
  261. 月清單_dgv.Rows(I).Cells("二段加班").Value = (當天總分 - 240 - 240 - 120) \ 60 & " : " & (當天總分 - 240 - 240 - 120) Mod 60
  262. If (當天總分 - 240 - 240 - 120) <= 120 Then : Else
  263. 月清單_dgv.Rows(I).Cells("二段加班").Value = "2 : 0"
  264. End If
  265. End If
  266. End If
  267. End If
  268. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString = "0 : 0" Then
  269. 月清單_dgv.Rows(I).Cells("一段工時").Value = ""
  270. End If
  271. '--------------------------假日標色------------------------------------------------------------------------------------------------------------------------------------
  272. If Strings.Left(月清單_dgv.Rows(I).Cells("休假類別").Value.ToString, 3) = "補上班" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.White
  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.LightPink
  275. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightPink
  276. ElseIf 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.LightYellow
  277. End If
  278. '--------------------------加班未申請去除------------------------------------------------------------------------------------------------------------------------------------
  279. If 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString <> "已核准" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And
  280. 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And
  281. 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString <> "." Then
  282. 月清單_dgv.Rows(I).Cells("一段加班").Value = "" : 月清單_dgv.Rows(I).Cells("二段加班").Value = ""
  283. End If
  284. Next
  285. 平日班 = 0 : 正常時1 = 0 : 正常時2 = 0 : 正常時3 = 0 : 正常時4 = 0 : 加班時9 = 0 : 加班時10 = 0 : 加班時11 = 0 : 加班時12 = 0 : 加班時8 = 0 : 加班時21 = 0
  286. 加班時17 = 0 : 加班時18 = 0 : 加班時19 = 0 : 加班時20 = 0 : 加班時23 = 0 : 加班時24 = 0 : 加班時25 = 0 : 加班時26 = 0 : 假日班 = 0 : 加班時27 = 0 : 請假日 = 0
  287. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  288. If 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "" And
  289. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "特休" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "未到" And
  290. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "離職" Then
  291. 請假日 += 1
  292. End If
  293. '---------------------------平日
  294. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期六" And 月清單_dgv.Rows(I).Cells("星期").Value.ToString <> "星期日" And
  295. 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString <> "國定假日" And 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "" Then
  296. 加班時27 += 1
  297. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" Then
  298. 平日班 += 1
  299. 正常時1 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 正常時2 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  300. End If
  301. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" Then
  302. 正常時3 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 正常時4 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  303. End If
  304. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" Then
  305. 加班時9 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時10 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  306. End If
  307. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" Then
  308. 加班時11 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時12 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  309. End If
  310. End If
  311. '---------------------------星期六
  312. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期六" Then
  313. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "0 : 0" Then
  314. 假日班 += 1
  315. 加班時3 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 加班時4 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  316. 加班時7 = 加班時3 + (加班時4 / 60)
  317. If 加班時7 > 2 Then
  318. 加班時8 += 2 : 加班時21 += (加班時7 - 2)
  319. Else
  320. 加班時8 += 加班時7
  321. End If
  322. End If
  323. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "0 : 0" Then
  324. 加班時5 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 加班時6 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2))
  325. 加班時21 += 加班時5 + (加班時6 / 60)
  326. End If
  327. If 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString <> "0 : 0" Then
  328. 加班時13 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時14 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  329. 加班時21 += (加班時13 + (加班時14 / 60))
  330. End If
  331. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "0 : 0" Then
  332. 加班時15 = Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時16 = Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  333. 加班時21 += (加班時15 + (加班時16 / 60))
  334. End If
  335. End If
  336. '--------------------------星期日或國定假日
  337. If 月清單_dgv.Rows(I).Cells("星期").Value.ToString = "星期日" Or 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString = "國定假日" Then
  338. If 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString <> "0 : 0" Then
  339. 假日班 += 1
  340. 加班時17 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2)) : 加班時18 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段工時").Value.ToString, 2))
  341. End If
  342. If 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString <> "0 : 0" Then
  343. 加班時19 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段工時").Value.ToString, 2)) : 加班時20 += 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. 加班時23 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2)) : 加班時24 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("一段加班").Value.ToString, 2))
  348. End If
  349. If 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "" And 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString <> "0 : 0" Then
  350. 月清單_dgv.Rows(I).Cells("二段加班").Value = "0 : 0"
  351. 加班時25 += Val(Strings.Left(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2)) : 加班時26 += Val(Strings.Right(月清單_dgv.Rows(I).Cells("二段加班").Value.ToString, 2))
  352. End If
  353. End If
  354. Next
  355. FF = (正常時2 + 正常時4) / 60
  356. 正常時 = 正常時1 + 正常時3 + FF
  357. 當月平日天_tb.Text = 平日班 + 假日班 : 當月假日天_tb.Text = 請假日
  358. 常日總_tb.Text = Strings.Format(正常時, "#,##0.00")
  359. 當月平日一段_tb.Text = Strings.Format((加班時9 + (加班時10 / 60)), "#,##0.00")
  360. 當月平日二段_tb.Text = Strings.Format((加班時11 + (加班時12 / 60)), "#,##0.00")
  361. 一段假日加_tb.Text = Strings.Format(加班時8, "#,##0.00")
  362. 二段假日加_tb.Text = Strings.Format(加班時21, "#,##0.00")
  363. 國假日加_tb.Text = Strings.Format(加班時17 + 加班時19 + 加班時23 + 加班時25 + (加班時18 + 加班時20 + 加班時24 + 加班時26) / 60, "#,##0.00")
  364. Set_時薪制() : Set_彈性工時()
  365. 加班總_tb.Text = Strings.Format((加班時9 + (加班時10 / 60)) + (加班時11 + (加班時12 / 60)) + 加班時8 + 加班時21 +
  366. (加班時17 + 加班時19 + 加班時23 + 加班時25 + (加班時18 + 加班時20 + 加班時24 + 加班時26) / 60), "#,##0.00")
  367. 特修補錢_tb.Text = "0" : 未到離職_tb.Text = "0" : 事假_tb.Text = "0" : 婚假_tb.Text = "0" : 喪假_tb.Text = "0" : 特休_tb.Text = "0" : 特休未休_nud.Value = 0
  368. 薪資計算()
  369. End Sub
  370. Private Sub 薪資計算()
  371. If CC(16) = True Then
  372. If 時薪制_ch.Checked = True Then : 月薪_tb.Text = Strings.Format((CDbl(時薪_tb.Text) * CDbl(常日總_tb.Text)), "#,##0.0")
  373. Else : 時薪_tb.Text = Strings.Format((CDbl(月薪_tb.Text) / 30 / 8), "#,##0.0") : End If
  374. Dim ds As New DataSet
  375. 假期統計_dgv.DataSource = Nothing : ds.Clear()
  376. 假期統計_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  377. 假期統計_dgv.ColumnHeadersHeight = 25
  378. 假期統計_dgv.AllowUserToAddRows = False
  379. PA = 編號 : PA1 = 年份_cb.Text & "/" & 月份_cb.Text : SQL_休假統計1()
  380. da.Fill(ds) : 假期統計_dgv.DataSource = ds.Tables(0) : conn.Close()
  381. Dim 到離, 事假, 病假, 特休, 婚假, 喪假 As Double : 到離 = 0 : 事假 = 0 : 病假 = 0 : 特休 = 0 : 婚假 = 0 : 喪假 = 0
  382. For I As Integer = 0 To 假期統計_dgv.Rows.Count - 1
  383. If 假期統計_dgv.Rows(I).Cells(0).Value.ToString = "未到" Or 假期統計_dgv.Rows(I).Cells(0).Value.ToString = "離職" Then
  384. 到離 += 假期統計_dgv.Rows(I).Cells("天數").Value.ToString
  385. 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. If 假期統計_dgv.Rows(I).Cells(0).Value.ToString = "喪假" Then : 喪假 += 假期統計_dgv.Rows(I).Cells("總時數").Value.ToString : End If
  391. Next
  392. 病假_tb.Text = Strings.Format((病假 * CDbl(時薪_tb.Text) / 2), "#,##0.0")
  393. If 時薪制_ch.Checked = False Then
  394. 未到離職_tb.Text = Strings.Format((到離 * 8 * CDbl(時薪_tb.Text)), "#,##0.0")
  395. 事假_tb.Text = Strings.Format((事假 * CDbl(時薪_tb.Text)), "#,##0.0")
  396. Else
  397. 婚假_tb.Text = Strings.Format((婚假 * CDbl(時薪_tb.Text)), "#,##0.0")
  398. 喪假_tb.Text = Strings.Format((喪假 * CDbl(時薪_tb.Text)), "#,##0.0")
  399. 特休_tb.Text = Strings.Format((特休 * CDbl(時薪_tb.Text)), "#,##0.0")
  400. End If
  401. '--------------------------第一種應付小計計算---------------------------------------------------
  402. 第1段加班費1_tb.Text = Strings.Format(((CDbl(當月平日一段_tb.Text) + CDbl(一段假日加_tb.Text)) * CDbl(時薪_tb.Text) * 1.34), "#,##0.0")
  403. 第2段加班費1_tb.Text = Strings.Format(((CDbl(當月平日二段_tb.Text) + CDbl(二段假日加_tb.Text)) * CDbl(時薪_tb.Text) * 1.67), "#,##0.0")
  404. 第3段加班費1_tb.Text = Strings.Format((CDbl(國假日加_tb.Text) * CDbl(時薪_tb.Text) * 2), "#,##0.0")
  405. 加班費1_tb.Text = Strings.Format((CDbl(第1段加班費1_tb.Text) + CDbl(第2段加班費1_tb.Text) + CDbl(第3段加班費1_tb.Text)), "#,##0.0")
  406. If 時薪制_ch.Checked = False Then
  407. 應付小計1_tb.Text = Strings.Format((CDbl(月薪_tb.Text) + CDbl(加班費1_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text) +
  408. CDbl(特修補錢_tb.Text) + 其他加_nud.Value - CDbl(未到離職_tb.Text)), "#,##0.0")
  409. Else
  410. 應付小計1_tb.Text = Strings.Format((CDbl(月薪_tb.Text) + CDbl(加班費1_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text) +
  411. CDbl(特修補錢_tb.Text) + (CDbl(病假_tb.Text) * 2) + CDbl(婚假_tb.Text) + CDbl(喪假_tb.Text) + CDbl(特休_tb.Text) +
  412. 其他加_nud.Value - CDbl(未到離職_tb.Text)), "#,##0.0")
  413. End If
  414. '--------------------------第二種應付小計計算-----------------------------------------------------
  415. 第1段加班費2_tb.Text = Strings.Format(((CDbl(當月平日一段1_tb.Text) + CDbl(一段假日加1_tb.Text)) * CDbl(時薪_tb.Text) * 1.34), "#,##0.0")
  416. 第2段加班費2_tb.Text = Strings.Format(((CDbl(當月平日二段1_tb.Text) + CDbl(二段假日加1_tb.Text)) * CDbl(時薪_tb.Text) * 1.67), "#,##0.0")
  417. 第3段加班費2_tb.Text = Strings.Format((CDbl(國假日加1_tb.Text) * CDbl(時薪_tb.Text) * 2), "#,##0.0")
  418. 加班費2_tb.Text = Strings.Format((CDbl(第1段加班費2_tb.Text) + CDbl(第2段加班費2_tb.Text) + CDbl(第3段加班費2_tb.Text)), "#,##0.0")
  419. If 時薪制_ch.Checked = False Then
  420. 應付小計2_tb.Text = Strings.Format((CDbl(月薪_tb.Text) + CDbl(加班費2_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text) +
  421. CDbl(特修補錢_tb.Text) + 其他加_nud.Value - CDbl(未到離職_tb.Text)), "#,##0.0")
  422. Else
  423. 應付小計2_tb.Text = Strings.Format((CDbl(月薪_tb.Text) + CDbl(加班費2_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text) +
  424. CDbl(特修補錢_tb.Text) + (CDbl(病假_tb.Text) * 2) + CDbl(婚假_tb.Text) + CDbl(喪假_tb.Text) + CDbl(特休_tb.Text) +
  425. 其他加_nud.Value - CDbl(未到離職_tb.Text)), "#,##0.0")
  426. End If
  427. '--------------------------第一種實付小計計算---------------------------------------------------
  428. If 時薪制_ch.Checked = False Then
  429. 實付小計1_tb.Text = Strings.Format((CDbl(應付小計1_tb.Text) - CDbl(健保費_tb.Text) - CDbl(勞保費_tb.Text) - CDbl(病假_tb.Text) -
  430. CDbl(事假_tb.Text) - 其他減_nud.Value), "#,##0.0")
  431. Else
  432. 實付小計1_tb.Text = Strings.Format((CDbl(應付小計1_tb.Text) - CDbl(健保費_tb.Text) - CDbl(勞保費_tb.Text) - CDbl(病假_tb.Text) -
  433. 其他減_nud.Value), "#,##0.0")
  434. End If
  435. '--------------------------第二種實付小計計算---------------------------------------------------
  436. If 時薪制_ch.Checked = False Then
  437. 實付小計2_tb.Text = Strings.Format((CDbl(應付小計2_tb.Text) - CDbl(健保費_tb.Text) - CDbl(勞保費_tb.Text) - CDbl(病假_tb.Text) -
  438. CDbl(事假_tb.Text) - 其他減_nud.Value), "#,##0.0")
  439. Else
  440. 實付小計2_tb.Text = Strings.Format((CDbl(應付小計2_tb.Text) - CDbl(健保費_tb.Text) - CDbl(勞保費_tb.Text) - CDbl(病假_tb.Text) -
  441. 其他減_nud.Value), "#,##0.0")
  442. End If
  443. End If
  444. End Sub
  445. Private Sub 特休未休_NUD_ValueChanged(sender As Object, e As EventArgs) Handles 特休未休_nud.ValueChanged
  446. 特修補錢_tb.Text = Strings.Format((特休未休_nud.Value * 8 * CDbl(時薪_tb.Text)), "#,##0.0") : 薪資計算()
  447. End Sub
  448. Private Sub 其他_nud_ValueChanged(sender As Object, e As EventArgs) Handles 其他減_nud.ValueChanged
  449. 薪資計算()
  450. End Sub
  451. Private Sub 時薪彈性_bt_Click(sender As Object, e As EventArgs) Handles 時薪彈性_bt.Click
  452. 當月應上天數_tb.Text = 加班時27 : 上班總工時_tb.Text = Strings.Format(加班時27 * 8, "#,##0.00") : 應上未上時數_tb.Text = Strings.Format((加班時27 * 8) - 正常時, "#,##0.00")
  453. Set_彈性工時()
  454. 特修補錢_tb.Text = "0" : 未到離職_tb.Text = "0" : 事假_tb.Text = "0" : 婚假_tb.Text = "0" : 喪假_tb.Text = "0" : 特休_tb.Text = "0" : 特休未休_nud.Value = 0
  455. 薪資計算()
  456. End Sub
  457. Private Sub Set_時薪制()
  458. If 時薪制_ch.Checked = False Then
  459. 當月應上天數_tb.Text = 加班時27
  460. 上班總工時_tb.Text = Strings.Format(加班時27 * 8, "#,##0.00")
  461. 應上未上時數_tb.Text = Strings.Format((加班時27 * 8) - 正常時, "#,##0.00")
  462. Else : 當月應上天數_tb.Text = "0" : 上班總工時_tb.Text = "0.00" : 應上未上時數_tb.Text = "0.00" : End If
  463. End Sub
  464. Private Sub Set_彈性工時()
  465. If 彈性工時_ch.Checked = False Then
  466. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  467. 二段假日加1_tb.Text = 二段假日加_tb.Text : 國假日加1_tb.Text = 國假日加_tb.Text
  468. Else
  469. 彈性扣時 = 應上未上時數_tb.Text
  470. If Val(國假日加_tb.Text) >= 彈性扣時 Then
  471. 國假日加1_tb.Text = Strings.Format(Val(國假日加_tb.Text) - 彈性扣時, "#,##0.00")
  472. 當月平日一段1_tb.Text = 當月平日一段_tb.Text : 當月平日二段1_tb.Text = 當月平日二段_tb.Text : 一段假日加1_tb.Text = 一段假日加_tb.Text
  473. 二段假日加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 : End If : End If : End If : End If
  497. End Sub
  498. Private Sub Set_考勤流水()
  499. 考勤流水_dgv.DataSource = Nothing : ds5.Clear()
  500. 考勤流水_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  501. 考勤流水_dgv.ColumnHeadersHeight = 25 : 考勤流水_dgv.AllowUserToAddRows = False
  502. SQL_考勤明細表_考勤流水()
  503. da.Fill(ds5) : 考勤流水_dgv.DataSource = ds5.Tables(0) : conn.Close()
  504. 考勤流水_dgv.Columns(0).FillWeight = 30 : 考勤流水_dgv.Columns(1).FillWeight = 30 : 考勤流水_dgv.Columns(2).FillWeight = 100
  505. For i As Integer = 0 To 考勤流水_dgv.Rows.Count - 1 : 考勤流水_dgv.Rows(i).Cells("No.").Value = i + 1 : Next
  506. End Sub
  507. Private Sub 讀取班別()
  508. 班別_dgv.DataSource = Nothing : ds7.Clear()
  509. 班別_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  510. 班別_dgv.ColumnHeadersHeight = 25 : 班別_dgv.AllowUserToAddRows = False
  511. SQL_考勤明細表_班別()
  512. da.Fill(ds7) : 班別_dgv.DataSource = ds7.Tables(0) : conn.Close()
  513. 班別_dgv.Columns(0).FillWeight = 80 : 班別_dgv.Columns(1).FillWeight = 130 : 班別_dgv.Columns(2).FillWeight = 130 : 班別_dgv.Columns(3).FillWeight = 100
  514. 班別_dgv.Columns(4).FillWeight = 130 : 班別_dgv.Columns(5).FillWeight = 100 : 班別_dgv.Columns(6).FillWeight = 100 : 班別_dgv.Columns(7).FillWeight = 100
  515. 班別_dgv.Columns(8).FillWeight = 100 : 班別_dgv.Columns(9).Visible = False : 班別_dgv.Columns(10).FillWeight = 100 : 班別_dgv.Columns(11).Visible = False
  516. 班別_dgv.Columns(12).FillWeight = 100 : 班別_dgv.Columns(13).Visible = False : 班別_dgv.Columns(14).Visible = False
  517. End Sub
  518. Private Sub 讀取打卡時間1()
  519. 時間讀取1_dgv.DataSource = Nothing : ds2.Clear()
  520. 時間讀取1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  521. 時間讀取1_dgv.ColumnHeadersHeight = 25 : 時間讀取1_dgv.AllowUserToAddRows = False
  522. SQL_考勤明細表_打卡讀取_上午上班()
  523. da.Fill(ds2) : 時間讀取1_dgv.DataSource = ds2.Tables(0) : conn.Close()
  524. End Sub
  525. Private Sub 讀取打卡時間2()
  526. 時間讀取2_dgv.DataSource = Nothing : ds3.Clear()
  527. 時間讀取2_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  528. 時間讀取2_dgv.ColumnHeadersHeight = 25 : 時間讀取2_dgv.AllowUserToAddRows = False
  529. SQL_考勤明細表_打卡讀取_中午下上班()
  530. da.Fill(ds3) : 時間讀取2_dgv.DataSource = ds3.Tables(0) : conn.Close()
  531. End Sub
  532. Private Sub 讀取打卡時間3()
  533. 時間讀取3_dgv.DataSource = Nothing : ds4.Clear()
  534. 時間讀取3_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  535. 時間讀取3_dgv.ColumnHeadersHeight = 25 : 時間讀取3_dgv.AllowUserToAddRows = False
  536. SQL_考勤明細表_打卡讀取_晚上下上班()
  537. da.Fill(ds4) : 時間讀取3_dgv.DataSource = ds4.Tables(0) : conn.Close()
  538. End Sub
  539. Private Sub 讀取打卡時間4()
  540. 時間讀取4_dgv.DataSource = Nothing : ds6.Clear()
  541. 時間讀取4_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  542. 時間讀取4_dgv.ColumnHeadersHeight = 25 : 時間讀取4_dgv.AllowUserToAddRows = False
  543. SQL_考勤明細表_打卡讀取_加班下班()
  544. da.Fill(ds6) : 時間讀取4_dgv.DataSource = ds6.Tables(0) : conn.Close()
  545. End Sub
  546. Private Sub 讀取日期()
  547. 日期_dgv.DataSource = Nothing : ds8.Clear()
  548. 日期_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  549. 日期_dgv.ColumnHeadersHeight = 25 : 日期_dgv.AllowUserToAddRows = False
  550. SQL_讀取日期()
  551. da.Fill(ds8) : 日期_dgv.DataSource = ds8.Tables(0) : conn.Close()
  552. End Sub
  553. Private Sub 年份_下拉表單資料載入()
  554. SQL_考勤明細表_年份_下拉() : 年份_cb.Items.Clear() : While (dr.Read()) : 年份_cb.Items.Add(dr("年份")) : End While : conn.Close()
  555. End Sub
  556. Private Sub 考勤明細表_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  557. 月清單_dgv.BringToFront()
  558. End Sub
  559. Private Sub 考勤明細表_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
  560. 年份_下拉表單資料載入() : 讀取班別()
  561. 年份_cb.Text = Year(Today) : 月份_cb.SelectedIndex = Month(Today) - 1
  562. PA1 = 年份_cb.Text : PA2 = 月份_cb.Text
  563. 讀取日期()
  564. If PA = "考勤明細表" Then : 介面分類 = PA : PA = ""
  565. If CC(16) = False Then
  566. 考勤資料編輯_bt.Enabled = False : 時薪制_ch.Enabled = False : 彈性工時_ch.Enabled = False
  567. Panel5.Visible = False : 補打卡_p.Visible = False : 補打卡控建1_p.Visible = False : 補打核准_p.Visible = False
  568. 姓名_tb.Text = gUserName : 資料數 = 31
  569. 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
  570. SQL_考勤明細表_讀取編號() : If dr.Read() Then : 編號 = dr("DIN") : End If
  571. Set_考勤明細() : PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : Set_考勤流水() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  572. 月清單_dgv.Location = New System.Drawing.Point(91, 33) : 月清單_dgv.Size = New Size(1395, 790) : 人員_dgv.Enabled = False
  573. Else
  574. 補打卡_p.Visible = False : 補打卡控建1_p.Visible = False : 補打核准_p.Visible = False
  575. 月清單_dgv.Location = New System.Drawing.Point(420, 2) : 月清單_dgv.Size = New Size(1066, 821)
  576. End If
  577. ElseIf PA = "補打卡申請" Or PA = "補打卡審核" Then : 介面分類 = PA : PA = ""
  578. 補打卡_p.Visible = True : 補打卡_p.BringToFront() : 補打卡控建1_p.Visible = True : 補打卡控建1_p.BringToFront()
  579. 月清單_dgv.Location = New System.Drawing.Point(620, 2) : 月清單_dgv.Size = New Size(866, 821)
  580. 人員_dgv.Enabled = False
  581. If 介面分類 = "補打卡審核" Then
  582. 審核人1_tb.Text = gUserName : 審核人2_tb.Text = gUserName
  583. 補打卡控建1_p.Visible = False : 補打核准_p.Visible = True : 補打核准_p.BringToFront()
  584. 人員_dgv.Enabled = True : Set_補打卡明細()
  585. End If
  586. 姓名_tb.Text = gUserName : 資料數 = 31
  587. 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
  588. SQL_考勤明細表_讀取編號() : If dr.Read() Then : 編號 = dr("DIN") : End If
  589. Set_考勤明細() : PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : Set_考勤流水() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0 : Set_補打卡明細()
  590. End If
  591. End Sub
  592. Private Sub 人員_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 人員_dgv.CellClick
  593. If e.RowIndex = -1 Then : Else : 人員選擇(e.RowIndex) : Set_補打卡明細() : End If
  594. End Sub
  595. Private Sub 人員選擇(位置 As Integer)
  596. 編號 = 人員_dgv("編號", 位置).Value.ToString : 姓名_tb.Text = 人員_dgv("姓名", 位置).Value.ToString
  597. 時薪制_ch.Checked = 人員_dgv("CC18", 位置).Value : 到職日 = 人員_dgv("到職日", 位置).Value.ToString
  598. If IsDBNull(人員_dgv("月薪", 位置).Value) Then : 人員_dgv("月薪", 位置).Value = "0" : End If
  599. If IsDBNull(人員_dgv("時薪", 位置).Value) Then : 人員_dgv("時薪", 位置).Value = "0" : End If
  600. If IsDBNull(人員_dgv("主管加級", 位置).Value) Then : 人員_dgv("主管加級", 位置).Value = "0" : End If
  601. If IsDBNull(人員_dgv("職務加級", 位置).Value) Then : 人員_dgv("職務加級", 位置).Value = "0" : End If
  602. If IsDBNull(人員_dgv("健保費", 位置).Value) Then : 人員_dgv("健保費", 位置).Value = "0" : End If
  603. If IsDBNull(人員_dgv("勞保費", 位置).Value) Then : 人員_dgv("勞保費", 位置).Value = "0" : End If
  604. 月薪_tb.Text = Strings.Format(CDbl(人員_dgv("月薪", 位置).Value.ToString), "#,##0.0")
  605. 時薪_tb.Text = Strings.Format(CDbl(人員_dgv("時薪", 位置).Value.ToString), "#,##0.0")
  606. 主管加級_tb.Text = Strings.Format(CDbl(人員_dgv("主管加級", 位置).Value.ToString), "#,##0.0")
  607. 職務加級_tb.Text = Strings.Format(CDbl(人員_dgv("職務加級", 位置).Value.ToString), "#,##0.0")
  608. 健保費_tb.Text = Strings.Format(CDbl(人員_dgv("健保費", 位置).Value.ToString), "#,##0.0")
  609. 勞保費_tb.Text = Strings.Format(CDbl(人員_dgv("勞保費", 位置).Value.ToString), "#,##0.0")
  610. 資料數 = 31 : Set_考勤明細() : PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text
  611. Set_考勤流水() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  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. 時間_dtp.Text = PA6
  680. Else : 時間_tb.Text = "" : ID_tb.Text = "" : End If
  681. End If : 考勤明細表_編輯.BringToFront()
  682. End Sub
  683. Private Sub 月清單_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 月清單_dgv.RowPostPaint
  684. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  685. If Strings.Left(月清單_dgv.Rows(I).Cells("休假類別").Value.ToString, 3) = "補上班" Then : 月清單_dgv.Rows(I).DefaultCellStyle.BackColor = Color.White
  686. ElseIf 月清單_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 : 資料數 = 31 : Set_考勤明細() : Set_補打卡明細() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0 : 讀取日期() : End If
  706. End Sub
  707. Private Sub 考勤資料編輯_bt_Click(sender As Object, e As EventArgs) Handles 考勤資料編輯_bt.Click
  708. If PA6 <> "" Then
  709. PA4 = PA6 : PA = 年份_cb.Text : PA1 = 月份_cb.Text : PA2 = Strings.Mid(PA6, 9, 2) : PA5 = 姓名_tb.Text : PA7 = 編號 : 考勤明細表_編輯.Show() : 考勤重讀()
  710. Else : MsgBox("請選擇右下方的時間,做為修改的依據!!") : End If
  711. End Sub
  712. Private Sub 考勤重讀()
  713. PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text
  714. Set_考勤流水() : 資料數 = 31 : Set_考勤明細() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  715. End Sub
  716. Private Sub R_bt_Click(sender As Object, e As EventArgs) Handles R_bt.Click
  717. 考勤重讀()
  718. End Sub
  719. Private Sub 排班資料_bt_Click(sender As Object, e As EventArgs) Handles 排班資料_bt.Click
  720. PA = 年份_cb.Text : PA1 = 月份_cb.Text : PA2 = 姓名_tb.Text : 個人班表.Close() : 個人班表.Show()
  721. End Sub
  722. Private Sub 時薪制_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 時薪制_ch.Click
  723. Set_時薪制()
  724. End Sub
  725. Private Sub 彈性工時_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 彈性工時_ch.Click
  726. Set_彈性工時()
  727. End Sub
  728. Private Sub 薪資表存檔_bt_Click(sender As Object, e As EventArgs) Handles 薪資表存檔_bt.Click
  729. If 姓名_tb.Text = "" Then : MsgBox("沒有資料無法存檔!!") : Else
  730. Dim 流水號 As String = "" : Dim 流水 As Integer : Dim 薪資 As Double
  731. PA1 = CInt(年份_cb.Text) - 1911 & "-" & 月份_cb.Text : PA2 = 到職日 : PA3 = 姓名_tb.Text : PA4 = 月清單_dgv.Rows.Count
  732. PA5 = 當月平日天_tb.Text : PA6 = 常日總_tb.Text : PA7 = 月薪_tb.Text : PA8 = 時薪_tb.Text : PA9 = "0" : PA10 = 主管加級_tb.Text : PA11 = 職務加級_tb.Text
  733. PA12 = 特休未休_nud.Value : PA13 = 特修補錢_tb.Text : PA14 = 特休_tb.Text : PA15 = 婚假_tb.Text : PA16 = 喪假_tb.Text
  734. PA17 = 其他加項_tb.Text : PA18 = 其他加_nud.Value : PA19 = 未到離職_tb.Text
  735. 薪資 = CDbl(月薪_tb.Text) + CDbl(主管加級_tb.Text) + CDbl(職務加級_tb.Text) + CDbl(特修補錢_tb.Text) +
  736. CDbl(特休_tb.Text) + CDbl(婚假_tb.Text) + CDbl(喪假_tb.Text) + 其他加_nud.Value - CDbl(未到離職_tb.Text)
  737. If 時薪制_ch.Checked = False Then : PA20 = 薪資 : PA21 = "0" : PA22 = 薪資 : Else : PA20 = "0" : PA21 = 薪資 : PA22 = 薪資 : End If
  738. PA23 = CDbl(當月平日一段_tb.Text) + CDbl(一段假日加_tb.Text) : PA24 = CDbl(當月平日二段_tb.Text) + CDbl(二段假日加_tb.Text) : PA25 = 國假日加_tb.Text
  739. PA26 = 加班費1_tb.Text : PA27 = 應付小計1_tb.Text
  740. PA28 = CDbl(當月平日一段1_tb.Text) + CDbl(一段假日加1_tb.Text) : PA29 = CDbl(當月平日二段1_tb.Text) + CDbl(二段假日加1_tb.Text) : PA30 = 國假日加1_tb.Text
  741. PA31 = 加班費2_tb.Text : PA32 = 應付小計2_tb.Text
  742. PA33 = 勞保費_tb.Text : PA34 = 健保費_tb.Text : PA35 = 事假_tb.Text : PA36 = 病假_tb.Text : PA37 = 其他減項_tb.Text : PA38 = 其他減_nud.Value
  743. PA39 = CDbl(勞保費_tb.Text) + CDbl(健保費_tb.Text) + CDbl(事假_tb.Text) + CDbl(病假_tb.Text) + 其他減_nud.Value : PA40 = "0"
  744. PA41 = 實付小計1_tb.Text : PA42 = 實付小計2_tb.Text
  745. SQL_薪資表確認()
  746. If dr.Read() Then : PA = dr("流水號").ToString : SQL_薪資表修改() : MsgBox("薪資資料修改完成!!") : Else
  747. SQL_薪資表流水號()
  748. If dr.Read() Then : 流水 = Double.Parse(Strings.Right(dr("流水號").ToString, 8)) : Else : 流水 = 0 : End If : conn.Close() : 流水 += 1
  749. If 流水 < 10 Then : 流水號 = "PO" & "0000000" & 流水
  750. ElseIf 流水 > 9 And 流水 < 100 Then : 流水號 = "PO" & "000000" & 流水
  751. ElseIf 流水 > 99 And 流水 < 1000 Then : 流水號 = "PO" & "00000" & 流水
  752. ElseIf 流水 > 999 And 流水 < 10000 Then : 流水號 = "PO" & "0000" & 流水
  753. ElseIf 流水 > 9999 And 流水 < 100000 Then : 流水號 = "PO" & "000" & 流水
  754. ElseIf 流水 > 99999 And 流水 < 1000000 Then : 流水號 = "PO" & "00" & 流水
  755. ElseIf 流水 > 999999 And 流水 < 10000000 Then : 流水號 = "PO" & "0" & 流水
  756. ElseIf 流水 > 9999999 Then : 流水號 = "PO" & 流水 : End If : PA = 流水號
  757. SQL_薪資表新增() : MsgBox("薪資資料新增完成!!")
  758. End If
  759. End If
  760. End Sub
  761. Private Sub 列印工時表_bt_Click(sender As Object, e As EventArgs) Handles 列印工時表_bt.Click
  762. If 姓名_tb.Text = "" Then : PA = "全體" : Else : 考勤表列印選擇.ShowDialog() : End If
  763. xlApp = CType(CreateObject("Excel.Application"), Application)
  764. xlBook = xlApp.Workbooks.Add
  765. xlApp.DisplayAlerts = True
  766. xlApp.Visible = True
  767. xlApp.Application.WindowState = xlMaximized
  768. If PA = "單人" Then
  769. 列印工時表() : xlSheet.PageSetup.PrintArea = "" : xlApp.Cells.Select() : xlSheet.Range("B1").Select() : xlApp.Application.WindowState = xlMinimized : MsgBox("考勤表列印完成!!")
  770. Else
  771. For I As Integer = 0 To 人員_dgv.Rows.Count - 1
  772. 編號 = 人員_dgv("編號", I).Value.ToString : 姓名_tb.Text = 人員_dgv("姓名", I).Value.ToString : 時薪制_ch.Checked = 人員_dgv("CC18", I).Value
  773. 到職日 = 人員_dgv("到職日", I).Value.ToString
  774. If 人員_dgv("月薪", I).Value.ToString = "" Then : 月薪_tb.Text = "0" : Else : 月薪_tb.Text = Strings.Format(CDbl(人員_dgv("月薪", I).Value.ToString), "#,##0.0") : End If
  775. If 人員_dgv("時薪", I).Value.ToString = "" Then : 時薪_tb.Text = "0" : Else : 時薪_tb.Text = Strings.Format(CDbl(人員_dgv("時薪", I).Value.ToString), "#,##0.0") : End If
  776. If 人員_dgv("時薪", I).Value.ToString = "" Then : 主管加級_tb.Text = "0" : Else : 主管加級_tb.Text = Strings.Format(CDbl(人員_dgv("主管加級", I).Value.ToString), "#,##0.0") : End If
  777. If 人員_dgv("時薪", I).Value.ToString = "" Then : 職務加級_tb.Text = "0" : Else : 職務加級_tb.Text = Strings.Format(CDbl(人員_dgv("職務加級", I).Value.ToString), "#,##0.0") : End If
  778. If 人員_dgv("時薪", I).Value.ToString = "" Then : 健保費_tb.Text = "0" : Else : 健保費_tb.Text = Strings.Format(CDbl(人員_dgv("健保費", I).Value.ToString), "#,##0.0") : End If
  779. If 人員_dgv("時薪", I).Value.ToString = "" Then : 勞保費_tb.Text = "0" : Else : 勞保費_tb.Text = Strings.Format(CDbl(人員_dgv("勞保費", I).Value.ToString), "#,##0.0") : End If
  780. 資料數 = 31 : Set_考勤明細() : PA = 編號 : PA1 = 年份_cb.Text : PA2 = 月份_cb.Text : Set_考勤流水() : GRAMS_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  781. 列印工時表()
  782. Next
  783. xlSheet.PageSetup.PrintArea = "" : xlApp.Cells.Select() : xlSheet.Range("B1").Select() : xlApp.Application.WindowState = xlMinimized : MsgBox("全體考勤表列印完成!!")
  784. End If
  785. End Sub
  786. Private Sub 列印工時表()
  787. xlSheet = NewMethod(xlBook) : xlApp.Sheets(1).Select
  788. xlApp.Sheets(1).Name = 姓名_tb.Text : xlBook.Activate() : xlSheet.Activate()
  789. xlSheet.Cells(1, 1) = "黃柏翰皮膚科診所考勤明細表" : xlSheet.Cells(2, 1) = CInt(年份_cb.Text) - 1911 & "年" & 月份_cb.Text & "月 - " & 姓名_tb.Text & " 全月考勤"
  790. xlSheet.Cells(3, 1) = "日期" : xlSheet.Cells(3, 2) = "星期" : xlSheet.Cells(3, 3) = "假別" : xlSheet.Cells(3, 4) = "內容" : xlSheet.Cells(3, 5) = "假時數"
  791. xlSheet.Cells(3, 6) = "一段上班" : xlSheet.Cells(3, 7) = "一段下班" : xlSheet.Cells(3, 8) = "二段上班" : xlSheet.Cells(3, 9) = "二段下班"
  792. xlSheet.Cells(3, 10) = "加班上班" : xlSheet.Cells(3, 11) = "加班下班" : xlSheet.Cells(3, 12) = "一段工時" : xlSheet.Cells(3, 13) = "二段工時"
  793. xlSheet.Cells(3, 14) = "一段加班" : xlSheet.Cells(3, 15) = "二段加班" : xlSheet.Cells(3, 16) = "加班申請" : xlSheet.Cells(3, 17) = "加班內容"
  794. For I As Integer = 0 To 月清單_dgv.Rows.Count - 1
  795. xlSheet.Cells(4 + I, 1) = 月清單_dgv.Rows(I).Cells("日期").Value.ToString : xlSheet.Cells(4 + I, 2) = 月清單_dgv.Rows(I).Cells("星期").Value.ToString
  796. xlSheet.Cells(4 + I, 3) = 月清單_dgv.Rows(I).Cells("休假類別").Value.ToString : xlSheet.Cells(4 + I, 4) = 月清單_dgv.Rows(I).Cells("假期內容").Value.ToString
  797. xlSheet.Cells(4 + I, 5) = 月清單_dgv.Rows(I).Cells("申請時數").Value.ToString : xlSheet.Cells(4 + I, 6) = 月清單_dgv.Rows(I).Cells("一段上班").Value.ToString
  798. xlSheet.Cells(4 + I, 7) = 月清單_dgv.Rows(I).Cells("一段下班").Value.ToString : xlSheet.Cells(4 + I, 8) = 月清單_dgv.Rows(I).Cells("二段上班").Value.ToString
  799. xlSheet.Cells(4 + I, 9) = 月清單_dgv.Rows(I).Cells("二段下班").Value.ToString : xlSheet.Cells(4 + I, 10) = 月清單_dgv.Rows(I).Cells("加班上班").Value.ToString
  800. xlSheet.Cells(4 + I, 11) = 月清單_dgv.Rows(I).Cells("加班下班").Value.ToString : xlSheet.Cells(4 + I, 12) = 月清單_dgv.Rows(I).Cells("一段工時").Value.ToString
  801. xlSheet.Cells(4 + I, 13) = 月清單_dgv.Rows(I).Cells("二段工時").Value.ToString : xlSheet.Cells(4 + I, 14) = 月清單_dgv.Rows(I).Cells("一段加班").Value.ToString
  802. xlSheet.Cells(4 + I, 15) = 月清單_dgv.Rows(I).Cells("二段加班").Value.ToString : xlSheet.Cells(4 + I, 16) = 月清單_dgv.Rows(I).Cells("申請狀態").Value.ToString
  803. xlSheet.Cells(4 + I, 17) = 月清單_dgv.Rows(I).Cells("加班狀態").Value.ToString
  804. Next : AA(xlApp, xlSheet)
  805. End Sub
  806. Private Shared Function NewMethod(xlBook As Workbook) As Worksheet
  807. Return CType(xlBook.Worksheets.Add, Worksheet)
  808. End Function
  809. Private Sub AA(ByVal myExcel As Microsoft.Office.Interop.Excel.Application, ByVal xlSheet As Microsoft.Office.Interop.Excel.Worksheet)
  810. xlSheet.Cells.Select()
  811. With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 10 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
  812. .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
  813. xlSheet.Range("A3:Q36").Select()
  814. With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
  815. .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With
  816. xlSheet.Columns("A:A").Select : myExcel.Selection.ColumnWidth = 10
  817. xlSheet.Columns("B:Q").Select : myExcel.Columns("B:Q").EntireColumn.AutoFit
  818. xlSheet.Rows("3:34").Select : myExcel.Selection.RowHeight = 20
  819. xlSheet.Rows("4:4").Select : myExcel.ActiveWindow.FreezePanes = True
  820. xlSheet.Range("A3:Q34").Select()
  821. myExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone : myExcel.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  822. With myExcel.Selection.Borders(xlEdgeLeft) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  823. With myExcel.Selection.Borders(xlEdgeTop) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  824. With myExcel.Selection.Borders(xlEdgeBottom) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  825. With myExcel.Selection.Borders(xlEdgeRight) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  826. With myExcel.Selection.Borders(xlInsideVertical) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  827. With myExcel.Selection.Borders(xlInsideHorizontal) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  828. myExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone : myExcel.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  829. With myExcel.Selection.Borders(xlEdgeLeft) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  830. With myExcel.Selection.Borders(xlEdgeTop) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  831. With myExcel.Selection.Borders(xlEdgeBottom) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  832. With myExcel.Selection.Borders(xlEdgeRight) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  833. With myExcel.Selection.Borders(xlInsideVertical) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  834. xlSheet.Range("A3:Q3").Select()
  835. myExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone : myExcel.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  836. With myExcel.Selection.Borders(xlEdgeLeft) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  837. With myExcel.Selection.Borders(xlEdgeTop) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  838. With myExcel.Selection.Borders(xlEdgeBottom) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  839. With myExcel.Selection.Borders(xlEdgeRight) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  840. With myExcel.Selection.Borders(xlInsideVertical) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  841. myExcel.Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
  842. With myExcel.Selection.Interior : .Pattern = xlSolid : .PatternColorIndex = xlAutomatic : .ThemeColor = xlThemeColorAccent1 : .TintAndShade = 0.799981688894314
  843. .PatternTintAndShade = 0 : End With
  844. For I As Integer = 4 To 36
  845. If Strings.Left(xlSheet.Cells(I, 2).value, 3) = "星期六" Or Strings.Left(xlSheet.Cells(I, 2).value, 3) = "星期日" Then
  846. xlSheet.Range("A" & I & ":Q" & I).Select()
  847. With myExcel.Selection.Interior : .Pattern = xlSolid : .PatternColorIndex = xlAutomatic : .ThemeColor = xlThemeColorAccent2 : .TintAndShade = 0.799981688894314
  848. .PatternTintAndShade = 0 : End With
  849. End If
  850. Next
  851. xlSheet.Range("A2:Q2").Select()
  852. With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
  853. .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With : myExcel.Selection.Merge
  854. With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 12 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
  855. .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
  856. myExcel.Selection.Font.Bold = True
  857. xlSheet.Range("A1:Q1").Select()
  858. With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
  859. .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With : myExcel.Selection.Merge
  860. With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 16 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
  861. .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
  862. myExcel.Selection.Font.Bold = True
  863. xlSheet.Range("Q4").Select() : myExcel.ActiveWindow.DisplayGridlines = False
  864. End Sub
  865. '------------------------補打卡申請介面----------------------------------------------------------------------------------------------------------------------------------------------
  866. Dim 生效 As String
  867. Private Sub Set_補打卡明細()
  868. Dim dsA As New DataSet : 補打卡資料_dgv.DataSource = Nothing : dsA.Clear()
  869. 補打卡資料_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  870. 補打卡資料_dgv.ColumnHeadersHeight = 25 : 補打卡資料_dgv.AllowUserToAddRows = False
  871. Dim ID As String = "" : If 介面分類 = "補打卡申請" Then : ID = 編號 : ElseIf 介面分類 = "補打卡審核" Then : ID = "%%" : End If
  872. SQL_補打卡申請(ID, 年份_cb.Text & "-" & 月份_cb.Text)
  873. da.Fill(dsA) : 補打卡資料_dgv.DataSource = dsA.Tables(0) : conn.Close()
  874. If 介面分類 = "補打卡申請" Then
  875. 補打卡資料_dgv.Columns(1).FillWeight = 80 : 補打卡資料_dgv.Columns(2).FillWeight = 160 : 補打卡資料_dgv.Columns(3).FillWeight = 60
  876. 補打卡資料_dgv.Columns(4).Visible = False : 補打卡資料_dgv.Columns(5).Visible = False
  877. ElseIf 介面分類 = "補打卡審核" Then
  878. 補打卡資料_dgv.Columns(1).FillWeight = 65 : 補打卡資料_dgv.Columns(2).FillWeight = 160 : 補打卡資料_dgv.Columns(3).FillWeight = 60
  879. 補打卡資料_dgv.Columns(4).Visible = False : 補打卡資料_dgv.Columns(5).FillWeight = 60
  880. End If
  881. End Sub
  882. Private Sub 補打卡資料_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 補打卡資料_dgv.CellClick
  883. If e.RowIndex = -1 Then : Else
  884. 時間_dtp.Text = 補打卡資料_dgv("日期", e.RowIndex).Value.ToString : 事由_tb.Text = 補打卡資料_dgv("事由紀錄", e.RowIndex).Value.ToString
  885. 類別_cb.Text = 補打卡資料_dgv("狀態", e.RowIndex).Value.ToString : 生效 = 補打卡資料_dgv("是否生效", e.RowIndex).Value.ToString
  886. If 介面分類 = "補打卡審核" Then
  887. 編號 = 補打卡資料_dgv("員工編號", e.RowIndex).Value.ToString : 姓名_tb.Text = 補打卡資料_dgv("姓名", e.RowIndex).Value.ToString
  888. For i As Integer = 0 To 人員_dgv.Rows.Count - 1
  889. If 人員_dgv("姓名", i).Value.ToString = 姓名_tb.Text Then : 人員選擇(i) : Exit For : End If
  890. Next
  891. End If
  892. End If
  893. End Sub
  894. Private Sub 申請_bt_Click(sender As Object, e As EventArgs) Handles 申請_bt.Click
  895. If 姓名_tb.Text = "" Then : MsgBox("人員不能為空白") : Else
  896. If 類別_cb.Text = "" Then : MsgBox("類別不能為空白") : Else
  897. If 生效 = "已核准" Or 生效 = "未核准" Then : MsgBox("已簽核的資料不能再做修改") : Else
  898. SQL_補打卡申請查詢(編號, 時間_dtp.Text)
  899. If dr.Read Then : SQL_補打卡申請修改(編號, 時間_dtp.Text, 類別_cb.Text, 事由_tb.Text)
  900. Else : SQL_補打卡申請新增(編號, 時間_dtp.Text, 類別_cb.Text, 事由_tb.Text) : End If
  901. Set_補打卡明細() : MsgBox("儲存完成")
  902. End If
  903. End If
  904. End If
  905. End Sub
  906. Private Sub 刪除_bt_Click(sender As Object, e As EventArgs) Handles 刪除_bt.Click
  907. If 姓名_tb.Text = "" Then : MsgBox("人員不能為空白") : Else
  908. If 類別_cb.Text = "" Then : MsgBox("類別不能為空白") : Else
  909. If 生效 = "已核准" Or 生效 = "未核准" Then : MsgBox("已簽核的資料不能再做修改")
  910. Else : SQL_補打卡申請刪除(編號, 時間_dtp.Text) : Set_補打卡明細() : MsgBox("刪除完成") : End If
  911. End If
  912. End If
  913. End Sub
  914. Private Sub 核准_bt_Click(sender As Object, e As EventArgs) Handles 核准_bt.Click
  915. If 姓名_tb.Text = "" Then : MsgBox("人員不能為空白") : Else
  916. If 類別_cb.Text = "" Then : MsgBox("類別不能為空白") : Else
  917. If 生效 = "已核准" Or 生效 = "未核准" Then : MsgBox("已簽核的資料不能再做修改") : Else
  918. If 審核人1_tb.Text <> "" And 審核人2_tb.Text = "" Then
  919. PA = "申請中" : PA1 = Strings.Format(Today(), "yyyy/MM/dd") : PA2 = ""
  920. ElseIf 審核人1_tb.Text <> "" And 審核人2_tb.Text <> "" Then
  921. PA = "已核准" : PA1 = Strings.Format(Today(), "yyyy/MM/dd") : PA2 = Strings.Format(Today(), "yyyy/MM/dd")
  922. End If
  923. SQL_補打卡申請核准(編號, 時間_dtp.Text, 審核人1_tb.Text, 審核人2_tb.Text) : Set_補打卡明細() : MsgBox("審核完成")
  924. PA4 = 編號 : PA3 = 時間_dtp.Text : SQL_時間新增() : R_bt.PerformClick()
  925. End If
  926. End If
  927. End If
  928. End Sub
  929. Private Sub 作廢_bt_Click(sender As Object, e As EventArgs) Handles 作廢_bt.Click
  930. If 姓名_tb.Text = "" Then : MsgBox("人員不能為空白") : Else
  931. If 類別_cb.Text = "" Then : MsgBox("類別不能為空白") : Else
  932. If 生效 = "已核准" Or 生效 = "未核准" Then : MsgBox("已簽核的資料不能再做修改") : Else
  933. SQL_補打卡申請未准(編號, 時間_dtp.Text, 審核人1_tb.Text, 審核人2_tb.Text) : Set_補打卡明細() : MsgBox("審核完成")
  934. End If
  935. End If
  936. End If
  937. End Sub
  938. Private Sub 列印_bt_Click(sender As Object, e As EventArgs) Handles 列印_bt.Click
  939. xlApp = CType(CreateObject("Excel.Application"), Application)
  940. xlBook = xlApp.Workbooks.Add
  941. xlApp.DisplayAlerts = True
  942. xlApp.Visible = True
  943. xlApp.Application.WindowState = xlMaximized
  944. xlSheet = NewMethod(xlBook) : xlApp.Sheets(1).Select
  945. xlApp.Sheets(1).Name = "加班申請資料" : xlBook.Activate() : xlSheet.Activate()
  946. xlSheet.Cells(1, 1) = "黃柏翰皮膚科診所補打卡申請資料" : xlSheet.Cells(2, 1) = CInt(年份_cb.Text) - 1911 & "年" & 月份_cb.Text & "月 - 全月"
  947. xlSheet.Cells(3, 1) = "項" : xlSheet.Cells(3, 2) = "姓名" : xlSheet.Cells(3, 3) = "日期" : xlSheet.Cells(3, 4) = "是否生效"
  948. xlSheet.Cells(3, 5) = "狀態" : xlSheet.Cells(3, 6) = "事由紀錄"
  949. For i As Integer = 0 To 補打卡資料_dgv.Rows.Count - 1
  950. xlSheet.Cells(4 + i, 1) = i + 1 : xlSheet.Cells(4 + i, 2) = 補打卡資料_dgv("姓名", i).Value.ToString
  951. xlSheet.Cells(4 + i, 3) = 補打卡資料_dgv("日期", i).Value.ToString : xlSheet.Cells(4 + i, 5) = 補打卡資料_dgv("狀態", i).Value.ToString
  952. xlSheet.Cells(4 + i, 6) = 補打卡資料_dgv("事由紀錄", i).Value.ToString : xlSheet.Cells(4 + i, 4) = 補打卡資料_dgv("是否生效", i).Value.ToString
  953. Next : 位置1 = 4 + 補打卡資料_dgv.Rows.Count - 1 : BB(xlApp, xlSheet)
  954. xlSheet.PageSetup.PrintArea = "" : xlApp.Cells.Select() : xlSheet.Range("B1").Select() : xlApp.Application.WindowState = xlMinimized : MsgBox("列印完成")
  955. End Sub
  956. Private Sub BB(ByVal myExcel As Microsoft.Office.Interop.Excel.Application, ByVal xlSheet As Microsoft.Office.Interop.Excel.Worksheet)
  957. xlSheet.Cells.Select()
  958. With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 12 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
  959. .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
  960. xlSheet.Columns("A:A").Select : myExcel.Selection.ColumnWidth = 4
  961. xlSheet.Columns("A:F").Select
  962. With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
  963. .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With
  964. xlSheet.Range("F4:F" & 位置1).Select()
  965. With myExcel.Selection : .HorizontalAlignment = xlLeft : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
  966. .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With
  967. xlSheet.Columns("B:F").Select : myExcel.Columns("B:F").EntireColumn.AutoFit
  968. xlSheet.Rows("4:4").Select : myExcel.ActiveWindow.FreezePanes = True
  969. xlSheet.Range("B3:F3").Select() : myExcel.Selection.AutoFilter
  970. xlSheet.Rows("3:3").Select : myExcel.Selection.RowHeight = 35
  971. With myExcel.Selection : .VerticalAlignment = xlTop : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0 : .ShrinkToFit = False
  972. .ReadingOrder = xlContext : .MergeCells = False : End With
  973. xlSheet.Range("A3:F" & 位置1).Select()
  974. myExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone : myExcel.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  975. With myExcel.Selection.Borders(xlEdgeLeft) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  976. With myExcel.Selection.Borders(xlEdgeTop) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  977. With myExcel.Selection.Borders(xlEdgeBottom) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  978. With myExcel.Selection.Borders(xlEdgeRight) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  979. With myExcel.Selection.Borders(xlInsideVertical) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  980. With myExcel.Selection.Borders(xlInsideHorizontal) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  981. myExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone : myExcel.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  982. With myExcel.Selection.Borders(xlEdgeLeft) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  983. With myExcel.Selection.Borders(xlEdgeTop) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  984. With myExcel.Selection.Borders(xlEdgeBottom) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  985. With myExcel.Selection.Borders(xlEdgeRight) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
  986. With myExcel.Selection.Borders(xlInsideVertical) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
  987. xlSheet.Range("A2:F2").Select()
  988. With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
  989. .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With : myExcel.Selection.Merge
  990. With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 12 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
  991. .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
  992. myExcel.Selection.Font.Bold = True
  993. xlSheet.Range("A1:F1").Select()
  994. With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
  995. .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With : myExcel.Selection.Merge
  996. With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 16 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
  997. .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
  998. myExcel.Selection.Font.Bold = True
  999. xlSheet.Range("A3:F3").Select()
  1000. With myExcel.Selection.Interior : .Pattern = xlSolid : .PatternColorIndex = xlAutomatic : .ThemeColor = xlThemeColorAccent1 : .TintAndShade = 0.799981688894314
  1001. .PatternTintAndShade = 0 : End With
  1002. xlSheet.Range("F4").Select()
  1003. myExcel.ActiveWindow.DisplayGridlines = False
  1004. End Sub
  1005. End Class