Ingen beskrivning
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 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. Imports System.Windows.Forms.DataVisualization.Charting
  2. Public Class 車輛銷售報表
  3. ReadOnly ds As New DataSet : ReadOnly ds1 As New DataSet
  4. Dim NUM1, NUM2, NUM3 As Integer : Dim 狀態, 價, 車 As String
  5. Private maxY As Long = 0
  6. Private Sub 車輛銷售報表_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  7. If CC(104) = False Then
  8. 車廠型態 = False
  9. Else
  10. 線路選擇.ShowDialog() : 線路選擇.BringToFront()
  11. End If
  12. Me.MdiParent = ICS_ASMS_ERP_SYS : Me.WindowState = 2 : Me.AutoScroll = True
  13. If 車廠型態 = True Then
  14. 狀態 = "車輛買賣"
  15. 價 = "賣出售價"
  16. Else
  17. 狀態 = "保養維修"
  18. 價 = "買入進價"
  19. End If
  20. ComboBox1下拉表單資料載入()
  21. Set_清單1() : Set_清單2()
  22. End Sub
  23. Private Function IsVerticalScrollBarVisible(dgv As DataGridView) As Boolean
  24. Return dgv.FirstDisplayedScrollingRowIndex > 0 OrElse dgv.DisplayedRowCount(False) < dgv.Rows.Count
  25. End Function
  26. Private Sub ComboBox1下拉表單資料載入()
  27. conn.Close()
  28. SQL_營運報表_年份查詢()
  29. 年份清單_cb.Items.Clear()
  30. While (dr.Read()) : 年份清單_cb.Items.Add(dr("年份")) : End While
  31. conn.Close()
  32. 年份清單_cb.Text = Year(Today)
  33. 月份清單_cb.Items.Clear()
  34. 月份清單_cb.Items.Add("")
  35. Dim currentMonth As Integer = DateTime.Now.Month
  36. For month As Integer = 1 To 12
  37. Dim monthString As String = month.ToString("D2") ' 这里使用 "D2" 格式化将单个数字的月份前面补零
  38. 月份清單_cb.Items.Add(monthString)
  39. ' 如果这个月份是当前月份,可以将其选中
  40. If month = currentMonth Then
  41. 月份清單_cb.SelectedItem = monthString
  42. End If
  43. Next
  44. End Sub
  45. Private Sub Set_清單1()
  46. Dim ds1, ds2 As New DataSet : 車種_dgv.DataSource = Nothing : ds1.Clear() : 合計1_dgv.DataSource = Nothing : ds2.Clear()
  47. 車種_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  48. 車種_dgv.ColumnHeadersHeight = 25 : 車種_dgv.AllowUserToAddRows = False : 車種_dgv.RowTemplate.Height = 20
  49. 合計1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  50. 合計1_dgv.ColumnHeadersHeight = 25 : 合計1_dgv.AllowUserToAddRows = False : 合計1_dgv.RowTemplate.Height = 20
  51. 合計1_dgv.ScrollBars = ScrollBars.None : 合計1_dgv.ColumnHeadersVisible = False
  52. PA58 = 年份清單_cb.Text & 月份清單_cb.Text
  53. SQL_車輛銷售報表_車種(價, 狀態) : da.Fill(ds1) : 車種_dgv.DataSource = ds1.Tables(0) : conn.Close()
  54. SQL_車輛銷售報表_車種合計(價, 狀態) : da.Fill(ds2) : 合計1_dgv.DataSource = ds2.Tables(0) : conn.Close()
  55. 車種_dgv.Columns(0).FillWeight = 40 : 車種_dgv.Columns(1).FillWeight = 20 : 車種_dgv.Columns(2).FillWeight = 40
  56. 車種_dgv.Columns("總價").DefaultCellStyle.Format = "#,##0"
  57. 車種_dgv.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
  58. 車種_dgv.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
  59. 車種_dgv.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
  60. 車種_dgv.Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
  61. 合計1_dgv.Columns(0).FillWeight = 40 : 合計1_dgv.Columns(1).FillWeight = 20 : 合計1_dgv.Columns(2).FillWeight = 40
  62. 合計1_dgv.Columns("總價").DefaultCellStyle.Format = "#,##0" : 合計1_dgv.Columns("次數").DefaultCellStyle.Format = "#,##0"
  63. 合計1_dgv.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
  64. 合計1_dgv.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
  65. 合計1_dgv.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
  66. 合計1_dgv.Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
  67. NUM3 = 0
  68. 合計1_dgv.Rows(0).Cells(0).Value = "合計:" : 合計1_dgv.Rows(0).Cells(1).Value = "0" : 合計1_dgv.Rows(0).Cells(2).Value = "0"
  69. For i As Integer = 0 To 車種_dgv.Rows.Count - 1
  70. 合計1_dgv.Rows(0).Cells(1).Value += 車種_dgv.Rows(i).Cells(1).Value
  71. 合計1_dgv.Rows(0).Cells(2).Value += 車種_dgv.Rows(i).Cells(2).Value
  72. If 車種_dgv.Rows(i).Cells(2).Value > NUM3 Then
  73. NUM3 = 車種_dgv.Rows(i).Cells(2).Value
  74. End If
  75. Next
  76. If 車種_dgv.Rows.Count Mod 15 = 0 Then
  77. ' 如果能整除15,直接等于商
  78. NUM1 = (車種_dgv.Rows.Count / 15) - 1
  79. Else
  80. ' 如果不能整除15,向上取整
  81. NUM1 = 車種_dgv.Rows.Count \ 15
  82. End If
  83. NUM2 = 0
  84. If IsVerticalScrollBarVisible(車種_dgv) Then : 合計1_dgv.Size = New Size(車種_dgv.Size.Width - 17, 合計1_dgv.Size.Height)
  85. Else : 合計1_dgv.Size = New Size(車種_dgv.Size.Width, 合計1_dgv.Size.Height) : End If
  86. If 車種_dgv.Rows.Count > 0 Then
  87. 彙總1()
  88. 下一頁_bt.Visible = True
  89. 上一頁_bt.Visible = True
  90. Else
  91. Chart2.Series.Clear()
  92. 下一頁_bt.Visible = False
  93. 上一頁_bt.Visible = False
  94. End If
  95. End Sub
  96. Private Sub Set_清單2()
  97. Dim ds1, ds2 As New DataSet : 計算_dgv.DataSource = Nothing : ds1.Clear() : 合計2_dgv.DataSource = Nothing : ds2.Clear()
  98. 計算_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  99. 計算_dgv.ColumnHeadersHeight = 25 : 計算_dgv.AllowUserToAddRows = False : 計算_dgv.RowTemplate.Height = 20
  100. 合計2_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  101. 合計2_dgv.ColumnHeadersHeight = 25 : 合計2_dgv.AllowUserToAddRows = False : 合計2_dgv.RowTemplate.Height = 20
  102. 合計2_dgv.ScrollBars = ScrollBars.None : 合計2_dgv.ColumnHeadersVisible = False
  103. SQL_車輛銷售報表_日期合計(價, 狀態) : da.Fill(ds2) : 合計2_dgv.DataSource = ds2.Tables(0) : conn.Close()
  104. 合計2_dgv.Columns("總價").DefaultCellStyle.Format = "#,##0"
  105. 合計2_dgv.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
  106. 合計2_dgv.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
  107. Dim str1 As String = 年份清單_cb.Text
  108. Dim str2 As String = 月份清單_cb.Text
  109. If str2 <> "" Then
  110. PA58 = 年份清單_cb.Text & 月份清單_cb.Text
  111. SQL_車輛銷售報表_日期(價, 狀態) : da.Fill(ds1) : 計算_dgv.DataSource = ds1.Tables(0) : conn.Close()
  112. Dim table As New DataTable()
  113. table.Columns.Add("日期", GetType(String))
  114. table.Columns.Add("金額", GetType(Decimal))
  115. Dim daysInMonth As Integer = DateTime.DaysInMonth(CInt(str1), CInt(str2))
  116. For day As Integer = 1 To daysInMonth
  117. Dim dateStr As String = str1 & str2.PadLeft(2, "0"c) & day.ToString().PadLeft(2, "0"c)
  118. table.Rows.Add(dateStr, 0)
  119. Next
  120. 日期_dgv.DataSource = table
  121. 日期_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  122. 日期_dgv.ColumnHeadersHeight = 25 : 日期_dgv.AllowUserToAddRows = False : 日期_dgv.RowTemplate.Height = 20
  123. 日期_dgv.Columns("金額").DefaultCellStyle.Format = "#,##0"
  124. 日期_dgv.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
  125. 日期_dgv.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
  126. For i As Integer = 0 To 日期_dgv.Rows.Count - 1
  127. For j As Integer = 0 To 計算_dgv.Rows.Count - 1
  128. If 日期_dgv.Rows(i).Cells("日期").Value = 計算_dgv.Rows(j).Cells("日期").Value Then
  129. 日期_dgv.Rows(i).Cells("金額").Value = 計算_dgv.Rows(j).Cells("總價").Value
  130. End If
  131. Next
  132. Next
  133. Else
  134. PA58 = 年份清單_cb.Text
  135. SQL_車輛銷售報表_日期年(價, 狀態) : da.Fill(ds1) : 計算_dgv.DataSource = ds1.Tables(0) : conn.Close()
  136. Dim table As New DataTable()
  137. table.Columns.Add("月份", GetType(String))
  138. table.Columns.Add("金額", GetType(Decimal))
  139. For day As Integer = 1 To 12
  140. Dim dateStr As String = str1 & day.ToString().PadLeft(2, "0"c)
  141. table.Rows.Add(dateStr, 0)
  142. Next
  143. 日期_dgv.DataSource = table
  144. 日期_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  145. 日期_dgv.ColumnHeadersHeight = 25 : 日期_dgv.AllowUserToAddRows = False : 日期_dgv.RowTemplate.Height = 20
  146. 日期_dgv.Columns("金額").DefaultCellStyle.Format = "#,##0"
  147. 日期_dgv.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
  148. 日期_dgv.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
  149. For i As Integer = 0 To 日期_dgv.Rows.Count - 1
  150. For j As Integer = 0 To 計算_dgv.Rows.Count - 1
  151. If 日期_dgv.Rows(i).Cells("月份").Value = 計算_dgv.Rows(j).Cells("日期").Value Then
  152. 日期_dgv.Rows(i).Cells("金額").Value = 計算_dgv.Rows(j).Cells("總價").Value
  153. End If
  154. Next
  155. Next
  156. End If
  157. 合計2_dgv.Rows(0).Cells(0).Value = "合計:" : 合計2_dgv.Rows(0).Cells(1).Value = "0"
  158. For i As Integer = 0 To 日期_dgv.Rows.Count - 1
  159. 合計2_dgv.Rows(0).Cells(1).Value += 日期_dgv.Rows(i).Cells(1).Value
  160. Next
  161. If IsVerticalScrollBarVisible(日期_dgv) Then : 合計2_dgv.Size = New Size(日期_dgv.Size.Width - 17, 合計2_dgv.Size.Height)
  162. Else : 合計2_dgv.Size = New Size(日期_dgv.Size.Width, 合計2_dgv.Size.Height) : End If
  163. If 合計2_dgv.Rows(0).Cells(1).Value <> 0 Then
  164. 彙總()
  165. Else
  166. Chart1.Series.Clear()
  167. End If
  168. End Sub
  169. Private Sub 彙總()
  170. Chart1.Series.Clear()
  171. Chart1.Series.Add("金額") : Chart1.Series("金額").ChartType = SeriesChartType.Column
  172. Chart1.ChartAreas(0).BackColor = Color.Transparent : Chart1.Legends(0).BackColor = Color.Transparent
  173. Chart1.ChartAreas(0).AxisY.LabelStyle.Font = New Font("Arial", 8) : Chart1.ChartAreas(0).AxisY.LabelStyle.Format = "#,##0"
  174. For i As Integer = 0 To 日期_dgv.Rows.Count - 1
  175. Dim fullString As String = 日期_dgv.Rows(i).Cells(0).Value.ToString
  176. Dim lastTwoChars As String = fullString.Substring(fullString.Length - 2)
  177. Chart1.Series("金額").Points.AddXY(lastTwoChars, CLng(日期_dgv.Rows(i).Cells(1).Value.ToString))
  178. Next
  179. End Sub
  180. Private Sub 彙總1()
  181. Chart2.Series.Clear()
  182. Chart2.Series.Add("金額") : Chart2.Series("金額").ChartType = SeriesChartType.Column
  183. Chart2.Series.Add("次數") : Chart2.Series("次數").ChartType = SeriesChartType.FastLine
  184. Chart2.ChartAreas(0).BackColor = Color.Transparent : Chart2.Legends(0).BackColor = Color.Transparent
  185. Chart2.ChartAreas(0).AxisY.LabelStyle.Font = New Font("Arial", 8) : Chart2.ChartAreas(0).AxisY.LabelStyle.Format = "#,##0"
  186. Chart2.ChartAreas(0).AxisY.Minimum = 0
  187. Dim sum3 As Double = 合計1_dgv.Rows(0).Cells(2).Value / 合計1_dgv.Rows(0).Cells(1).Value
  188. For i As Integer = 15 * NUM2 To (15 * (NUM2 + 1)) - 1
  189. If i < 車種_dgv.Rows.Count Then
  190. Chart2.Series("金額").Points.AddXY(車種_dgv.Rows(i).Cells(0).Value.ToString, CLng(車種_dgv.Rows(i).Cells(2).Value.ToString))
  191. Chart2.Series("次數").Points.AddXY(車種_dgv.Rows(i).Cells(0).Value.ToString, CLng(車種_dgv.Rows(i).Cells(1).Value.ToString) * sum3)
  192. End If
  193. Next
  194. End Sub
  195. Private Sub 下一頁_bt_Click(sender As Object, e As EventArgs) Handles 下一頁_bt.Click
  196. If NUM2 < NUM1 Then
  197. NUM2 += 1
  198. End If
  199. 彙總1()
  200. End Sub
  201. Private Sub 上一頁_bt_Click(sender As Object, e As EventArgs) Handles 上一頁_bt.Click
  202. If NUM2 > 0 Then
  203. NUM2 -= 1
  204. End If
  205. 彙總1()
  206. End Sub
  207. Private Sub 年份清單_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 年份清單_cb.SelectedIndexChanged
  208. maxY = 0 : Set_清單1() : Set_清單2()
  209. End Sub
  210. Private Sub 月份清單_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 月份清單_cb.SelectedIndexChanged
  211. maxY = 0 : Set_清單1() : Set_清單2()
  212. End Sub
  213. End Class