Sin descripción
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

零件成本建檔.vb 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. Option Strict Off
  2. Imports System.Data.SqlClient
  3. Public Class 零件成本建檔
  4. Dim conn1 As New SqlConnection
  5. Dim cmd1 As New SqlCommand
  6. Dim dr1 As SqlDataReader
  7. Dim da As New SqlDataAdapter
  8. Dim ds As New DataSet : Dim ds1 As New DataSet
  9. Private Sub DGV1讀取前設定()
  10. DataGridView1.DataSource = Nothing : ds.Clear()
  11. DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  12. DataGridView1.ColumnHeadersHeight = 25
  13. DataGridView1.AllowUserToAddRows = False
  14. If conn1.State = ConnectionState.Closed Then : conn1.ConnectionString = ConString : conn1.Open() : End If
  15. End Sub
  16. Private Sub DGV1讀取後設定()
  17. cmd1.Connection = conn1 : cmd1.CommandText = SQL1 : da.SelectCommand = cmd1 : da.Fill(ds) : DataGridView1.DataSource = ds.Tables(0) : conn1.Close()
  18. End Sub
  19. Private Sub 讀取成本資料表()
  20. If ComboBox3.Text = "" Or ComboBox3.Text = "-請選擇-" Then
  21. DGV1讀取前設定()
  22. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 ORDER BY 科目"
  23. Else
  24. DGV1讀取前設定()
  25. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (科目 ='" & ComboBox3.Text &
  26. "') ORDER BY 科目"
  27. End If
  28. DGV1讀取後設定()
  29. End Sub
  30. Private Sub 下拉表單資料載入()
  31. If conn1.State = ConnectionState.Closed Then : conn1.ConnectionString = ConString : conn1.Open() : End If
  32. SQL1 = "SELECT 品牌 FROM 品牌資料"
  33. cmd1.CommandText = SQL1 : cmd1.Connection = conn1 : dr1 = cmd1.ExecuteReader
  34. ComboBox1.Items.Clear()
  35. While (dr1.Read())
  36. ComboBox1.Items.Add(dr1("品牌"))
  37. End While
  38. conn1.Close()
  39. If conn1.State = ConnectionState.Closed Then : conn1.ConnectionString = ConString : conn1.Open() : End If
  40. SQL1 = "SELECT 供應商 FROM 供應商資料表"
  41. cmd1.CommandText = SQL1 : cmd1.Connection = conn1 : dr1 = cmd1.ExecuteReader
  42. ComboBox2.Items.Clear()
  43. While (dr1.Read())
  44. ComboBox2.Items.Add(dr1("供應商"))
  45. End While
  46. conn1.Close()
  47. End Sub
  48. Private Sub 格式設定()
  49. Button1.Enabled = False : Button2.Enabled = False : Button3.Enabled = False
  50. End Sub
  51. Private Sub Set_grid1()
  52. DataGridView1.Columns(0).Width = 100 : DataGridView1.Columns(1).Width = 90 : DataGridView1.Columns(2).Width = 100
  53. DataGridView1.Columns(3).Width = 130 : DataGridView1.Columns(4).Width = 350 : DataGridView1.Columns(5).Width = 350
  54. DataGridView1.Columns(6).Width = 100 : DataGridView1.Columns(7).Width = 80
  55. End Sub
  56. Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
  57. If e.RowIndex = -1 Then : Else
  58. TextBox1.Text = DataGridView1(0, e.RowIndex).Value.ToString : ComboBox1.Text = DataGridView1(1, e.RowIndex).Value.ToString
  59. ComboBox2.Text = DataGridView1(2, e.RowIndex).Value.ToString : ComboBox3.Text = DataGridView1(3, e.RowIndex).Value.ToString
  60. TextBox2.Text = DataGridView1(4, e.RowIndex).Value.ToString : TextBox3.Text = DataGridView1(5, e.RowIndex).Value.ToString
  61. ComboBox4.Text = DataGridView1(7, e.RowIndex).Value.ToString
  62. TEXT1 = DataGridView1(6, e.RowIndex).Value.ToString : TextBox4.Text = Format(Val(TEXT1), "#,##0.0")
  63. If ComboBox4.Text = "RMB" Then
  64. TextBox10.Text = Format(Val(CStr(Math.Round((Double.Parse(TEXT1) * ER), 2))), "#,##0.0")
  65. Else
  66. TextBox10.Text = Format(Val(TEXT1), "#,##0.0")
  67. End If
  68. End If
  69. End Sub
  70. Private Sub 零件成本建檔_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  71. Me.MdiParent = GCM_ERP_SYS
  72. Me.WindowState = 2
  73. 讀取成本資料表() : 下拉表單資料載入() : 格式設定() : Set_grid1()
  74. If conn1.State = ConnectionState.Closed Then : conn1.ConnectionString = ConString : conn1.Open() : End If
  75. SQL1 = "SELECT 匯率 FROM 匯率表 WHERE (對應 = '人民幣兌台幣')"
  76. cmd1.Connection = conn1 : cmd1.CommandText = SQL1 : dr1 = cmd1.ExecuteReader
  77. If dr1.Read() Then : TextBox9.Text = dr1("匯率").ToString : End If
  78. ER = Double.Parse(dr1("匯率").ToString)
  79. conn1.Close() : dr1.Close()
  80. End Sub
  81. Private Sub 登入閒置控制_MouseMove(sender As Object, e As EventArgs) Handles MyBase.MouseMove
  82. timeNow = 0
  83. GCM_ERP_SYS.Timer1.Enabled = False
  84. GCM_ERP_SYS.Timer1.Enabled = True
  85. End Sub
  86. Private Sub 登入閒置控制_KeyPress(sender As Object, e As EventArgs) Handles MyBase.KeyPress
  87. timeNow = 0
  88. GCM_ERP_SYS.Timer1.Enabled = False
  89. GCM_ERP_SYS.Timer1.Enabled = True
  90. End Sub
  91. Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged
  92. If CheckBox2.Checked = True Then
  93. Button1.Enabled = True : Button2.Enabled = True : Button3.Enabled = True
  94. Else
  95. 格式設定()
  96. End If
  97. End Sub
  98. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  99. If IsNumeric(TextBox4.Text) = True Then
  100. If InStr(TextBox4.Text, ",") = False Then
  101. If ComboBox1.Text = "" Or ComboBox2.Text = "" Or ComboBox3.Text = "-請選擇-" Or ComboBox4.Text = "" Or TextBox2.Text = "" Then
  102. MsgBox("科目或品名欄位不可空白")
  103. Else
  104. Dim NUM1 As Integer
  105. For NUM1 = 0 To 999999
  106. If NUM1 < 10 Then
  107. TextBox8.Text = "PA" & "00000" & NUM1
  108. ElseIf NUM1 > 9 And NUM1 < 100 Then
  109. TextBox8.Text = "PA" & "0000" & NUM1
  110. ElseIf NUM1 > 99 And NUM1 < 1000 Then
  111. TextBox8.Text = "PA" & "000" & NUM1
  112. ElseIf NUM1 > 999 And NUM1 < 10000 Then
  113. TextBox8.Text = "PA" & "00" & NUM1
  114. ElseIf NUM1 > 9999 And NUM1 < 100000 Then
  115. TextBox8.Text = "PA" & "0" & NUM1
  116. ElseIf NUM1 > 99999 Then
  117. TextBox8.Text = "PA" & NUM1
  118. End If
  119. If conn1.State = ConnectionState.Closed Then : conn1.ConnectionString = ConString : conn1.Open() : End If
  120. SQL1 = "SELECT 流水碼 FROM 零件成本紀錄表 WHERE (流水碼 ='" & TextBox8.Text & "')"
  121. cmd1.Connection = conn1 : cmd1.CommandText = SQL1 : dr1 = cmd1.ExecuteReader
  122. If dr1.Read() Then : TextBox1.Text = dr1("流水碼").ToString : Else : TextBox1.Text = "" : End If
  123. conn1.Close()
  124. If TextBox1.Text = "" Then
  125. TextBox1.Text = TextBox8.Text : TextBox8.Text = "可用"
  126. NUM1 = 999999
  127. End If
  128. Next
  129. If TextBox8.Text = "可用" Then
  130. If conn1.State = ConnectionState.Closed Then : conn1.ConnectionString = ConString : conn1.Open() : End If
  131. SQL1 = "INSERT INTO 零件成本紀錄表 (流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別, 安全庫存) VALUES ('" & TextBox1.Text &
  132. "','" & ComboBox1.Text & "','" & ComboBox2.Text & "','" & ComboBox3.Text & "','" & TextBox2.Text & "','" & TextBox3.Text &
  133. "','" & TextBox4.Text & "','" & ComboBox4.Text & "', '0')"
  134. cmd1.Connection = conn1 : cmd1.CommandText = SQL1 : cmd1.ExecuteNonQuery()
  135. MsgBox("新增完成")
  136. conn1.Close()
  137. End If
  138. End If
  139. Else
  140. MsgBox("進貨成本資料非數字")
  141. End If
  142. Else
  143. MsgBox("進貨成本資料非數字")
  144. End If
  145. CheckBox2.Checked = False
  146. 讀取成本資料表() : Set_grid1()
  147. End Sub
  148. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  149. If IsNumeric(TextBox4.Text) = True Then
  150. If InStr(TextBox4.Text, ",") = False Then
  151. If conn1.State = ConnectionState.Closed Then : conn1.Open() : End If
  152. SQL1 = "UPDATE 零件成本紀錄表 SET 品牌 = '" & ComboBox1.Text & "', 供應商 = '" & ComboBox2.Text & "', 科目 = '" & ComboBox3.Text &
  153. "', 品名 = '" & TextBox2.Text & "', 型號及備註 = '" & TextBox3.Text & "', 進貨單價 = '" & TextBox4.Text &
  154. "', 幣別 = '" & ComboBox4.Text & "' WHERE (流水碼 = '" & TextBox1.Text & "')"
  155. cmd1.CommandText = SQL1 : cmd1.ExecuteNonQuery()
  156. MsgBox("修改完成")
  157. conn1.Close()
  158. Else
  159. MsgBox("進貨成本資料非數字")
  160. End If
  161. Else
  162. MsgBox("進貨成本資料非數字")
  163. End If
  164. CheckBox2.Checked = False
  165. 讀取成本資料表() : Set_grid1()
  166. End Sub
  167. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
  168. SQL1 = "DELETE FROM 零件成本紀錄表 WHERE (流水碼 = '" & TextBox1.Text & "')"
  169. cmd1.CommandText = SQL1 : cmd1.Connection = conn1
  170. If conn1.State = ConnectionState.Closed Then : conn1.Open() : End If
  171. Dim aa As MsgBoxResult
  172. aa = MsgBox("確定要刪除該筆資料?", MsgBoxStyle.OkCancel)
  173. If aa = MsgBoxResult.Ok Then : cmd1.ExecuteNonQuery() : MsgBox("刪除完成") : End If
  174. conn1.Close()
  175. CheckBox2.Checked = False : ComboBox3.Text = "-請選擇-"
  176. 讀取成本資料表() : Set_grid1()
  177. End Sub
  178. Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
  179. 供應商資料.Show()
  180. End Sub
  181. Private Sub CheckBox7_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox7.CheckedChanged
  182. If CheckBox7.Checked = True Then
  183. CheckBox3.Checked = False : CheckBox4.Checked = False : CheckBox5.Checked = False : CheckBox6.Checked = False : ComboBox3.Text = "-請選擇-"
  184. End If
  185. End Sub
  186. Private Sub CheckBox6_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox6.CheckedChanged
  187. If CheckBox6.Checked = True Then : CheckBox7.Checked = False : End If
  188. End Sub
  189. Private Sub CheckBox5_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox5.CheckedChanged
  190. If CheckBox5.Checked = True Then : CheckBox7.Checked = False : End If
  191. End Sub
  192. Private Sub CheckBox3_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox3.CheckedChanged
  193. If CheckBox3.Checked = True Then : CheckBox7.Checked = False : End If
  194. End Sub
  195. Private Sub CheckBox4_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox4.CheckedChanged
  196. If CheckBox4.Checked = True Then : CheckBox7.Checked = False : End If
  197. End Sub
  198. Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
  199. If CheckBox7.Checked = True Then
  200. 讀取成本資料表() : 下拉表單資料載入()
  201. ElseIf CheckBox6.Checked = True And CheckBox5.Checked = True And CheckBox3.Checked = True And CheckBox4.Checked = True Then
  202. If ComboBox1.Text = "" Or ComboBox2.Text = "" Or ComboBox3.Text = "" Or ComboBox3.Text = "-請選擇-" Or ComboBox4.Text = "" Then : MsgBox("選項不能空白") : Else
  203. DGV1讀取前設定()
  204. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (品牌 ='" & ComboBox1.Text &
  205. "' AND 供應商 ='" & ComboBox2.Text & "' AND 科目 ='" & ComboBox3.Text & "' AND 幣別 ='" & ComboBox4.Text & "') ORDER BY 科目"
  206. DGV1讀取後設定()
  207. End If
  208. ElseIf CheckBox5.Checked = True And CheckBox3.Checked = True And CheckBox4.Checked = True Then
  209. If ComboBox2.Text = "" Or ComboBox3.Text = "" Or ComboBox3.Text = "-請選擇-" Or ComboBox4.Text = "" Then : MsgBox("選項不能空白") : Else
  210. DGV1讀取前設定()
  211. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (供應商 ='" & ComboBox2.Text &
  212. "' AND 科目 ='" & ComboBox3.Text & "' AND 幣別 ='" & ComboBox4.Text & "') ORDER BY 科目"
  213. DGV1讀取後設定()
  214. End If
  215. ElseIf CheckBox6.Checked = True And CheckBox3.Checked = True And CheckBox4.Checked = True Then
  216. If ComboBox1.Text = "" Or ComboBox3.Text = "" Or ComboBox3.Text = "-請選擇-" Or ComboBox4.Text = "" Then : MsgBox("選項不能空白") : Else
  217. DGV1讀取前設定()
  218. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (品牌 ='" & ComboBox1.Text &
  219. "' AND 科目 ='" & ComboBox3.Text & "' AND 幣別 ='" & ComboBox4.Text & "') ORDER BY 科目"
  220. DGV1讀取後設定()
  221. End If
  222. ElseIf CheckBox6.Checked = True And CheckBox5.Checked = True And CheckBox4.Checked = True Then
  223. If ComboBox1.Text = "" Or ComboBox2.Text = "" Or ComboBox4.Text = "" Then : MsgBox("選項不能空白") : Else
  224. DGV1讀取前設定()
  225. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (品牌 ='" & ComboBox1.Text &
  226. "' AND 供應商 ='" & ComboBox2.Text & "' AND 幣別 ='" & ComboBox4.Text & "') ORDER BY 科目"
  227. DGV1讀取後設定()
  228. End If
  229. ElseIf CheckBox6.Checked = True And CheckBox5.Checked = True And CheckBox3.Checked = True Then
  230. If ComboBox1.Text = "" Or ComboBox2.Text = "" Or ComboBox3.Text = "" Or ComboBox3.Text = "-請選擇-" Then : MsgBox("選項不能空白") : Else
  231. DGV1讀取前設定()
  232. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (品牌 ='" & ComboBox1.Text &
  233. "' AND 供應商 ='" & ComboBox2.Text & "' AND 科目 ='" & ComboBox3.Text & "') ORDER BY 科目"
  234. DGV1讀取後設定()
  235. End If
  236. ElseIf CheckBox3.Checked = True And CheckBox4.Checked = True Then
  237. If ComboBox3.Text = "" Or ComboBox3.Text = "-請選擇-" Or ComboBox4.Text = "" Then : MsgBox("選項不能空白") : Else
  238. DGV1讀取前設定()
  239. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (科目 ='" & ComboBox3.Text &
  240. "' AND 幣別 ='" & ComboBox4.Text & "') ORDER BY 科目"
  241. DGV1讀取後設定()
  242. End If
  243. ElseIf CheckBox5.Checked = True And CheckBox4.Checked = True Then
  244. If ComboBox2.Text = "" Or ComboBox4.Text = "" Then : MsgBox("選項不能空白") : Else
  245. DGV1讀取前設定()
  246. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (供應商 ='" & ComboBox2.Text &
  247. "' AND 幣別 ='" & ComboBox4.Text & "') ORDER BY 科目"
  248. DGV1讀取後設定()
  249. End If
  250. ElseIf CheckBox5.Checked = True And CheckBox3.Checked = True Then
  251. If ComboBox2.Text = "" Or ComboBox3.Text = "" Or ComboBox3.Text = "-請選擇-" Then : MsgBox("選項不能空白") : Else
  252. DGV1讀取前設定()
  253. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (供應商 ='" & ComboBox2.Text &
  254. "' AND 科目 ='" & ComboBox3.Text & "') ORDER BY 科目"
  255. DGV1讀取後設定()
  256. End If
  257. ElseIf CheckBox6.Checked = True And CheckBox4.Checked = True Then
  258. If ComboBox1.Text = "" Or ComboBox4.Text = "" Then : MsgBox("選項不能空白") : Else
  259. DGV1讀取前設定()
  260. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (品牌 ='" & ComboBox1.Text &
  261. "' AND 幣別 ='" & ComboBox4.Text & "') ORDER BY 科目"
  262. DGV1讀取後設定()
  263. End If
  264. ElseIf CheckBox6.Checked = True And CheckBox3.Checked = True Then
  265. If ComboBox1.Text = "" Or ComboBox3.Text = "" Or ComboBox3.Text = "-請選擇-" Then : MsgBox("選項不能空白") : Else
  266. DGV1讀取前設定()
  267. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (品牌 ='" & ComboBox1.Text &
  268. "' AND 科目 ='" & ComboBox3.Text & "') ORDER BY 科目"
  269. DGV1讀取後設定()
  270. End If
  271. ElseIf CheckBox6.Checked = True And CheckBox5.Checked = True Then
  272. If ComboBox1.Text = "" Or ComboBox2.Text = "" Then : MsgBox("選項不能空白") : Else
  273. DGV1讀取前設定()
  274. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (品牌 ='" & ComboBox1.Text &
  275. "' AND 供應商 ='" & ComboBox2.Text & "') ORDER BY 科目"
  276. DGV1讀取後設定()
  277. End If
  278. ElseIf CheckBox6.Checked = True Then
  279. If ComboBox1.Text = "" Then : MsgBox("選項不能空白") : Else
  280. DGV1讀取前設定()
  281. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (品牌 ='" & ComboBox1.Text &
  282. "') ORDER BY 科目"
  283. DGV1讀取後設定()
  284. End If
  285. ElseIf CheckBox5.Checked = True Then
  286. If ComboBox2.Text = "" Then : MsgBox("選項不能空白") : Else
  287. DGV1讀取前設定()
  288. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (供應商 ='" & ComboBox2.Text &
  289. "') ORDER BY 科目"
  290. DGV1讀取後設定()
  291. End If
  292. ElseIf CheckBox3.Checked = True Then
  293. If ComboBox3.Text = "" Or ComboBox3.Text = "-請選擇-" Then : MsgBox("選項不能空白") : Else
  294. DGV1讀取前設定()
  295. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (科目 ='" & ComboBox3.Text &
  296. "') ORDER BY 科目"
  297. DGV1讀取後設定()
  298. End If
  299. ElseIf CheckBox4.Checked = True Then
  300. If ComboBox4.Text = "" Then : MsgBox("選項不能空白") : Else
  301. DGV1讀取前設定()
  302. SQL1 = "SELECT 流水碼, 品牌, 供應商, 科目, 品名, 型號及備註, 進貨單價, 幣別 FROM 零件成本紀錄表 WHERE (幣別 ='" & ComboBox4.Text &
  303. "') ORDER BY 科目"
  304. DGV1讀取後設定()
  305. End If
  306. End If
  307. Set_grid1()
  308. End Sub
  309. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
  310. 品牌清單.Show()
  311. End Sub
  312. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
  313. 下拉表單資料載入()
  314. End Sub
  315. End Class