Нет описания
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

人員考勤明細表.vb 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. Option Strict Off
  2. Imports System.Data.SqlClient
  3. Public Class 人員考勤明細表
  4. Dim conn As New SqlConnection
  5. Dim da As New SqlDataAdapter
  6. Dim cmd As New SqlCommand
  7. Dim ds As New DataSet : Dim ds1 As New DataSet : Dim ds2 As New DataSet
  8. Dim dr As SqlDataReader
  9. Dim 編號 As String
  10. Private Sub Set_考勤明細()
  11. DataGridView1.DataSource = Nothing : ds.Clear()
  12. DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  13. DataGridView1.ColumnHeadersHeight = 25
  14. DataGridView1.AllowUserToAddRows = False
  15. If conn.State = ConnectionState.Closed Then : conn.ConnectionString = ConString : conn.Open() : End If
  16. SQL1 = "SELECT 萬年曆.日期, 萬年曆.星期, QQ.請假類別, AA.事由, AA.是否生效, AA.核准人, AA.核准日期, QQ.上午上班, QQ.上午上班 AS 上午下班, QQ.上午上班 AS 上午工時, QQ.下午下班 AS 下午上班,
  17. QQ.下午下班, QQ.下午下班 AS 下午工時, QQ.下午下班 AS 整日工時, BB.上午補登, BB.下午補登, BB.公出事由, QQ.員工編號
  18. FROM 萬年曆 LEFT OUTER JOIN
  19. (SELECT 員工編號, 日期, 請假類別, 事由, 是否生效, 核准人, 核准日期
  20. FROM 人事請假單
  21. WHERE (員工編號 LIKE '" & 編號 & "') AND (日期 LIKE '" & ComboBox1.Text & "/" & ComboBox2.Text & "%')) AS AA ON 萬年曆.日期 = AA.日期
  22. LEFT OUTER JOIN
  23. (SELECT 員工編號, 日期, 請假類別, 上午上班, 下午下班
  24. FROM 人事考勤明細表
  25. WHERE (員工編號 LIKE '" & 編號 & "') AND (日期 LIKE '" & ComboBox1.Text & "/" & ComboBox2.Text & "%')) AS QQ ON 萬年曆.日期 = QQ.日期
  26. LEFT OUTER JOIN
  27. (SELECT 員工編號, 日期, 上午補登, 下午補登, 公出事由
  28. FROM 人事漏打卡補登紀錄
  29. WHERE (員工編號 LIKE '" & 編號 & "') AND (日期 LIKE '" & ComboBox1.Text & "/" & ComboBox2.Text & "%')) AS BB ON 萬年曆.日期 = BB.日期
  30. WHERE (萬年曆.日期 LIKE '" & ComboBox1.Text & "/" & ComboBox2.Text & "%') ORDER BY 萬年曆.日期"
  31. cmd.Connection = conn : cmd.CommandText = SQL1 : da.SelectCommand = cmd : da.Fill(ds) : DataGridView1.DataSource = ds.Tables(0) : conn.Close() : Set_grid()
  32. End Sub
  33. Private Sub Set_grid()
  34. DataGridView1.Columns(0).Width = 85 : DataGridView1.Columns(1).Width = 60 : DataGridView1.Columns(2).Width = 90 : DataGridView1.Columns(3).Width = 262
  35. DataGridView1.Columns(4).Width = 80 : DataGridView1.Columns(5).Width = 65 : DataGridView1.Columns(6).Width = 90 : DataGridView1.Columns(7).Width = 75
  36. DataGridView1.Columns(8).Width = 75 : DataGridView1.Columns(9).Width = 80 : DataGridView1.Columns(10).Width = 75 : DataGridView1.Columns(11).Width = 75
  37. DataGridView1.Columns(12).Width = 80 : DataGridView1.Columns(13).Width = 90 : DataGridView1.Columns(14).Width = 70 : DataGridView1.Columns(15).Width = 70
  38. DataGridView1.Columns(16).Width = 262 : DataGridView1.Columns(17).Visible = False
  39. Dim T, S, F, M, T1, S1 As Integer : Dim T2, S2, F2, M2 As String : Dim 上午 As Integer = 0 : Dim 下午 As Integer = 0 : Dim 漏打 As Integer = 0
  40. TextBox5.Text = "0" : TextBox6.Text = "0" : TextBox7.Text = "0" : TextBox8.Text = "0" : TextBox16.Text = "0" : TextBox9.Text = "0"
  41. For i As Integer = 0 To DataGridView1.Rows.Count - 1
  42. 資料數 = DataGridView1.Rows.Count : MyModule1.進度條()
  43. Dim QASW As Integer = 0
  44. If DataGridView1.Rows(i).Cells("上午上班").Value.ToString <> "" Then
  45. DataGridView1.Rows(i).Cells("上午下班").Value = "12:00:00"
  46. Dim TSFM As Integer = DateDiff("s", DataGridView1.Rows(i).Cells("上午上班").Value.ToString, DataGridView1.Rows(i).Cells("上午下班").Value)
  47. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  48. If T = 0 Then : T2 = "" : Else : T2 = T & "天" : End If : If S = 0 Then : S2 = "" : Else : S2 = S & "時" : End If : If F = 0 Then : F2 = "" : Else : F2 = F & "分" : End If : M2 = M & "秒"
  49. DataGridView1.Rows(i).Cells("上午工時").Value = T2 & S2 & F2 & M2
  50. QASW = QASW + TSFM : 上午 = 上午 + TSFM
  51. End If
  52. If DataGridView1.Rows(i).Cells("下午下班").Value.ToString <> "" Then
  53. DataGridView1.Rows(i).Cells("下午上班").Value = "13:30:00"
  54. Dim TSFM As Integer = DateDiff("s", DataGridView1.Rows(i).Cells("下午上班").Value.ToString, DataGridView1.Rows(i).Cells("下午下班").Value)
  55. T = TSFM \ 86400 : T1 = TSFM Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  56. If T = 0 Then : T2 = "" : Else : T2 = T & "天" : End If : If S = 0 Then : S2 = "" : Else : S2 = S & "時" : End If : If F = 0 Then : F2 = "" : Else : F2 = F & "分" : End If : M2 = M & "秒"
  57. DataGridView1.Rows(i).Cells("下午工時").Value = T2 & S2 & F2 & M2
  58. QASW = QASW + TSFM : 下午 = 下午 + TSFM
  59. End If
  60. If QASW = 0 Then : Else
  61. T = QASW \ 86400 : T1 = QASW Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  62. If T = 0 Then : T2 = "" : Else : T2 = T & "天" : End If : If S = 0 Then : S2 = "" : Else : S2 = S & "時" : End If : If F = 0 Then : F2 = "" : Else : F2 = F & "分" : End If : M2 = M & "秒"
  63. DataGridView1.Rows(i).Cells("整日工時").Value = T2 & S2 & F2 & M2
  64. End If
  65. T = 上午 \ 86400 : T1 = 上午 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  66. If S = 0 Then : S2 = "" : Else : S2 = T * 24 + S & "時" : End If : If F = 0 Then : F2 = "" : Else : F2 = F & "分" : End If : M2 = M & "秒"
  67. TextBox1.Text = S2 & F2 & M2
  68. T = 下午 \ 86400 : T1 = 下午 Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  69. If S = 0 Then : S2 = "" : Else : S2 = T * 24 + S & "時" : End If : If F = 0 Then : F2 = "" : Else : F2 = F & "分" : End If : M2 = M & "秒"
  70. TextBox2.Text = S2 & F2 & M2
  71. T = (上午 + 下午) \ 86400 : T1 = (上午 + 下午) Mod 86400 : S = T1 \ 3600 : S1 = T1 Mod 3600 : F = S1 \ 60 : M = S1 Mod 60
  72. If S = 0 Then : S2 = "" : Else : S2 = T * 24 + S & "時" : End If : If F = 0 Then : F2 = "" : Else : F2 = F & "分" : End If : M2 = M & "秒"
  73. TextBox3.Text = S2 & F2 & M2
  74. If DataGridView1.Rows(i).Cells("日期").Value < Today() Then
  75. If DataGridView1.Rows(i).Cells("星期").Value.ToString = "星期日" Or DataGridView1.Rows(i).Cells("星期").Value.ToString = "星期六" Then
  76. ElseIf DataGridView1.Rows(i).Cells("請假類別").Value.ToString <> "" Then
  77. Else
  78. If DataGridView1.Rows(i).Cells("上午上班").Value.ToString = "" Then : 漏打 = 漏打 + 1 : End If
  79. If DataGridView1.Rows(i).Cells("下午下班").Value.ToString = "" Then : 漏打 = 漏打 + 1 : End If
  80. End If
  81. End If
  82. If DataGridView1.Rows(i).Cells("上午補登").Value.ToString = "1" Then : 漏打 = 漏打 + 1 : End If
  83. If DataGridView1.Rows(i).Cells("下午補登").Value.ToString = "1" Then : 漏打 = 漏打 + 1 : End If
  84. TextBox4.Text = 漏打
  85. If DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "育嬰假一天" Then : TextBox5.Text = Val(TextBox5.Text) + 1
  86. ElseIf DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "育嬰假半天" Then : TextBox5.Text = Val(TextBox5.Text) + 0.5
  87. End If
  88. If DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "事假一天" Then : TextBox6.Text = Val(TextBox6.Text) + 1
  89. ElseIf DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "事假半天" Then : TextBox6.Text = Val(TextBox6.Text) + 0.5
  90. End If
  91. If DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "病假一天" Then : TextBox7.Text = Val(TextBox7.Text) + 1
  92. ElseIf DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "病假半天" Then : TextBox7.Text = Val(TextBox7.Text) + 0.5
  93. End If
  94. If DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "婚嫁一天" Then : TextBox8.Text = Val(TextBox8.Text) + 1
  95. ElseIf DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "婚嫁半天" Then : TextBox8.Text = Val(TextBox8.Text) + 0.5
  96. End If
  97. If DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "特休一天" Then : TextBox16.Text = Val(TextBox16.Text) + 1
  98. ElseIf DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "特休半天" Then : TextBox16.Text = Val(TextBox16.Text) + 0.5
  99. End If
  100. If DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "喪假一天" Then : TextBox9.Text = Val(TextBox9.Text) + 1
  101. ElseIf DataGridView1.Rows(i).Cells("請假類別").Value.ToString = "喪假半天" Then : TextBox9.Text = Val(TextBox9.Text) + 0.5
  102. End If
  103. Next : WINPROFIT_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  104. End Sub
  105. Private Sub Set_人員清單()
  106. DataGridView2.DataSource = Nothing : ds1.Clear()
  107. DataGridView2.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  108. DataGridView2.ColumnHeadersHeight = 25
  109. DataGridView2.AllowUserToAddRows = False
  110. If conn.State = ConnectionState.Closed Then : conn.ConnectionString = ConString : conn.Open() : End If
  111. SQL1 = "SELECT 人事資料表.員工編號, 使用者權限管理表.姓名 AS 系統登入姓名, 人事資料表.姓名, 人事資料表.入職日期, 人事資料表.離職日期
  112. FROM 使用者權限管理表 LEFT OUTER JOIN
  113. 人事資料表 ON 使用者權限管理表.員工編號 = 人事資料表.員工編號 AND
  114. 使用者權限管理表.姓名 = 人事資料表.系統登入姓名
  115. WHERE (使用者權限管理表.CC49 = 0) AND (人事資料表.員工編號 IS NOT NULL) AND (人事資料表.離職日期 LIKE '在職')
  116. ORDER BY 使用者權限管理表.職稱"
  117. cmd.Connection = conn : cmd.CommandText = SQL1 : da.SelectCommand = cmd : da.Fill(ds1) : DataGridView2.DataSource = ds1.Tables(0) : conn.Close() : Set_grid1()
  118. End Sub
  119. Private Sub Set_grid1()
  120. DataGridView2.Columns(0).Visible = False : DataGridView2.Columns(1).Width = 150 : DataGridView2.Columns(2).Visible = False : DataGridView2.Columns(3).Visible = False
  121. DataGridView2.Columns(4).Visible = False
  122. End Sub
  123. Private Sub Set_年度考勤明細()
  124. DataGridView3.DataSource = Nothing : ds2.Clear()
  125. DataGridView3.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  126. DataGridView3.ColumnHeadersHeight = 25
  127. DataGridView3.AllowUserToAddRows = False
  128. If conn.State = ConnectionState.Closed Then : conn.ConnectionString = ConString : conn.Open() : End If
  129. If Val(ComboBox1.Text) > 2019 Then
  130. SQL1 = "SELECT 萬年曆.日期, 萬年曆.星期, QQ.請假類別, AA.事由, AA.是否生效, AA.核准人, AA.核准日期, QQ.上午上班, QQ.上午上班 AS 上午下班, QQ.上午上班 AS 上午工時, QQ.下午下班 AS 下午上班,
  131. QQ.下午下班, QQ.下午下班 AS 下午工時, QQ.下午下班 AS 整日工時, BB.上午補登, BB.下午補登, QQ.員工編號
  132. FROM 萬年曆 LEFT OUTER JOIN
  133. (SELECT 員工編號, 日期, 請假類別, 事由, 是否生效, 核准人, 核准日期
  134. FROM 人事請假單
  135. WHERE (員工編號 LIKE '" & 編號 & "') AND (日期 LIKE '" & ComboBox1.Text & "%')) AS AA ON 萬年曆.日期 = AA.日期
  136. LEFT OUTER JOIN
  137. (SELECT 員工編號, 日期, 請假類別, 上午上班, 下午下班
  138. FROM 人事考勤明細表
  139. WHERE (員工編號 LIKE '" & 編號 & "') AND (日期 LIKE '" & ComboBox1.Text & "%')) AS QQ ON 萬年曆.日期 = QQ.日期
  140. LEFT OUTER JOIN
  141. (SELECT 員工編號, 日期, 上午補登, 下午補登
  142. FROM 人事漏打卡補登紀錄
  143. WHERE (員工編號 LIKE '" & 編號 & "') AND (日期 LIKE '" & ComboBox1.Text & "%')) AS BB ON 萬年曆.日期 = BB.日期
  144. WHERE (萬年曆.日期 LIKE '" & ComboBox1.Text & "%') ORDER BY 萬年曆.日期"
  145. ElseIf Val(ComboBox1.Text) = 2019 Then
  146. SQL1 = "SELECT 萬年曆.日期, 萬年曆.星期, QQ.請假類別, AA.事由, AA.是否生效, AA.核准人, AA.核准日期, QQ.上午上班, QQ.上午上班 AS 上午下班, QQ.上午上班 AS 上午工時, QQ.下午下班 AS 下午上班,
  147. QQ.下午下班, QQ.下午下班 AS 下午工時, QQ.下午下班 AS 整日工時, BB.上午補登, BB.下午補登, QQ.員工編號
  148. FROM 萬年曆 LEFT OUTER JOIN
  149. (SELECT 員工編號, 日期, 請假類別, 事由, 是否生效, 核准人, 核准日期
  150. FROM 人事請假單
  151. WHERE (員工編號 LIKE '" & 編號 & "') AND (日期 BETWEEN '2019/11/01' AND '2019/12/31')) AS AA ON 萬年曆.日期 = AA.日期
  152. LEFT OUTER JOIN
  153. (SELECT 員工編號, 日期, 請假類別, 上午上班, 下午下班
  154. FROM 人事考勤明細表
  155. WHERE (員工編號 LIKE '" & 編號 & "') AND (日期 BETWEEN '2019/11/01' AND '2019/12/31')) AS QQ ON 萬年曆.日期 = QQ.日期
  156. LEFT OUTER JOIN
  157. (SELECT 員工編號, 日期, 上午補登, 下午補登
  158. FROM 人事漏打卡補登紀錄
  159. WHERE (員工編號 LIKE '" & 編號 & "') AND (日期 BETWEEN '2019/11/01' AND '2019/12/31')) AS BB ON 萬年曆.日期 = BB.日期
  160. WHERE (萬年曆.日期 BETWEEN '2019/11/01' AND '2019/12/31') ORDER BY 萬年曆.日期"
  161. End If
  162. cmd.Connection = conn : cmd.CommandText = SQL1 : da.SelectCommand = cmd : da.Fill(ds2) : DataGridView3.DataSource = ds2.Tables(0) : conn.Close() : Set_grid2()
  163. End Sub
  164. Private Sub Set_grid2()
  165. Dim 漏打 As Integer = 0
  166. TextBox15.Text = "0" : TextBox14.Text = "0" : TextBox13.Text = "0" : TextBox12.Text = "0" : TextBox17.Text = "0" : TextBox11.Text = "0"
  167. For i As Integer = 0 To DataGridView3.Rows.Count - 1
  168. 資料數 = DataGridView3.Rows.Count : MyModule1.進度條()
  169. If DataGridView3.Rows(i).Cells("日期").Value < Today() Then
  170. If DataGridView3.Rows(i).Cells("星期").Value.ToString = "星期日" Or DataGridView3.Rows(i).Cells("星期").Value.ToString = "星期六" Then
  171. ElseIf DataGridView3.Rows(i).Cells("請假類別").Value.ToString <> "" Then
  172. Else
  173. If DataGridView3.Rows(i).Cells("上午上班").Value.ToString = "" Then : 漏打 = 漏打 + 1 : End If
  174. If DataGridView3.Rows(i).Cells("下午下班").Value.ToString = "" Then : 漏打 = 漏打 + 1 : End If
  175. End If
  176. End If
  177. If DataGridView3.Rows(i).Cells("上午補登").Value.ToString = "1" Then : 漏打 = 漏打 + 1 : End If
  178. If DataGridView3.Rows(i).Cells("下午補登").Value.ToString = "1" Then : 漏打 = 漏打 + 1 : End If
  179. TextBox10.Text = 漏打
  180. If DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "育嬰假一天" Then : TextBox15.Text = Val(TextBox15.Text) + 1
  181. ElseIf DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "育嬰假半天" Then : TextBox15.Text = Val(TextBox15.Text) + 0.5
  182. End If
  183. If DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "事假一天" Then : TextBox14.Text = Val(TextBox14.Text) + 1
  184. ElseIf DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "事假半天" Then : TextBox14.Text = Val(TextBox14.Text) + 0.5
  185. End If
  186. If DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "病假一天" Then : TextBox13.Text = Val(TextBox13.Text) + 1
  187. ElseIf DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "病假半天" Then : TextBox13.Text = Val(TextBox13.Text) + 0.5
  188. End If
  189. If DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "婚嫁一天" Then : TextBox12.Text = Val(TextBox12.Text) + 1
  190. ElseIf DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "婚嫁半天" Then : TextBox12.Text = Val(TextBox12.Text) + 0.5
  191. End If
  192. If DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "特休一天" Then : TextBox17.Text = Val(TextBox17.Text) + 1
  193. ElseIf DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "特休半天" Then : TextBox17.Text = Val(TextBox17.Text) + 0.5
  194. End If
  195. If DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "喪假一天" Then : TextBox11.Text = Val(TextBox11.Text) + 1
  196. ElseIf DataGridView3.Rows(i).Cells("請假類別").Value.ToString = "喪假半天" Then : TextBox11.Text = Val(TextBox11.Text) + 0.5
  197. End If
  198. Next : WINPROFIT_ERP_SYS.ToolStripProgressBar1.Value = 0 : 最終數 = 0
  199. End Sub
  200. Private Sub ComboBox1下拉表單資料載入()
  201. conn.Close()
  202. If conn.State = ConnectionState.Closed Then : conn.ConnectionString = ConString : conn.Open() : End If
  203. SQL1 = "SELECT 年份 FROM 年份清單 ORDER BY 年份 DESC"
  204. cmd.CommandText = SQL1 : cmd.Connection = conn : dr = cmd.ExecuteReader
  205. ComboBox1.Items.Clear()
  206. While (dr.Read()) : ComboBox1.Items.Add(dr("年份")) : End While
  207. conn.Close()
  208. End Sub
  209. Private Sub 人員考勤明細表_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  210. Me.MdiParent = WINPROFIT_ERP_SYS : Me.WindowState = 2 : Me.AutoScroll = True
  211. Set_人員清單() : ComboBox1下拉表單資料載入() : DataGridView3.Visible = False
  212. ComboBox1.Text = Year(Today) : ComboBox2.SelectedIndex = Month(Today) - 1
  213. TextBox5.Text = "0" : TextBox6.Text = "0" : TextBox7.Text = "0" : TextBox8.Text = "0" : TextBox16.Text = "0" : TextBox9.Text = "0"
  214. TextBox15.Text = "0" : TextBox14.Text = "0" : TextBox13.Text = "0" : TextBox12.Text = "0" : TextBox17.Text = "0" : TextBox11.Text = "0"
  215. End Sub
  216. Private Sub DataGridView2_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView2.CellClick
  217. If e.RowIndex = -1 Then : Else
  218. 編號 = DataGridView2(0, e.RowIndex).Value.ToString : Set_考勤明細() : Set_年度考勤明細() : DateTimePicker1.Value = DataGridView2(3, e.RowIndex).Value.ToString
  219. Dim TSFM As Integer = DateDiff("d", DateTimePicker1.Value, Today()) : TextBox18.Text = TSFM
  220. End If
  221. End Sub
  222. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  223. Set_考勤明細() : Set_年度考勤明細()
  224. End Sub
  225. End Class