Bez popisu
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.

Frm_pu_measure.vb 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. Imports System.Data.SqlClient
  2. Imports System.Reflection
  3. Public Class Frm_pu_measure
  4. Dim cmd As New SqlCommand
  5. Dim da As New SqlDataAdapter
  6. Dim dt As New DataTable
  7. Dim sql As String
  8. Dim conn As New SqlConnection
  9. Dim DR As SqlDataReader
  10. Private Sub Frm_pu_measure_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  11. Me.MdiParent = FrmMDI
  12. Dim type As Type = DGV1.GetType()
  13. Dim pi As PropertyInfo = type.GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic)
  14. pi.SetValue(DGV1, True, Nothing)
  15. conn.ConnectionString = connstring
  16. conn.Open()
  17. cmd.Connection = conn
  18. sql = "SELECT RT_PU_MEASURE1_SYS.card AS 卡号, RT_RETAN_RECORD.TECH AS 技术员, RT_RETAN_RECORD.CUST AS 客户, " &
  19. " RT_RETAN_RECORD.COLOR AS 颜色, RT_RETAN_RECORD.THICKNESS AS 厚度,RT_RETAN_RECORD.WB_WEIGHT AS 蓝皮重, SUM(RT_PU_MEASURE1_SYS.sf) AS 中检量尺, " &
  20. " ROUND(SUM(RT_PU_MEASURE1_SYS.sf) / (RT_RETAN_RECORD.WB_WEIGHT/2), 1) AS 得革率, " &
  21. " ROUND(RT_RETAN_RECORD.PRICE / RT_RETAN_RECORD.WB_WEIGHT, 1) AS '蓝皮单价(斤)', " &
  22. " ROUND(RT_RETAN_RECORD.PRICE / SUM(RT_PU_MEASURE1_SYS.sf), 1) AS 每尺蓝皮成本, RT_RETAN_RECORD.SOURCE AS 皮源 " &
  23. " FROM RT_PU_MEASURE1_SYS LEFT OUTER JOIN " &
  24. " RT_RETAN_RECORD ON RIGHT(RT_PU_MEASURE1_SYS.card, 10) = RIGHT(RT_RETAN_RECORD.CARD, 10) " &
  25. " LEFT OUTER JOIN " &
  26. " RT_RETAN_RECORD_D ON RIGHT(RT_PU_MEASURE1_SYS.card, 10) = RIGHT(RT_RETAN_RECORD_D.CARD, 10) " &
  27. " WHERE (year(RT_PU_MEASURE1_SYS.date) = 2020) " &
  28. " GROUP BY RT_PU_MEASURE1_SYS.card, RT_RETAN_RECORD_D.CLASS, RT_RETAN_RECORD_D.TYPE, " &
  29. " RT_RETAN_RECORD.TECH, RT_RETAN_RECORD.WB_WEIGHT, RT_RETAN_RECORD.PRICE, " &
  30. " RT_RETAN_RECORD.SOURCE, RT_RETAN_RECORD.COLOR, RT_RETAN_RECORD.CUST, " &
  31. " ROUND(RT_RETAN_RECORD.PRICE / RT_RETAN_RECORD.WB_WEIGHT, 1),rt_retan_record.thickness " &
  32. " ORDER BY 卡号 "
  33. cmd.CommandText = sql
  34. da.SelectCommand = cmd
  35. da.Fill(dt)
  36. dt.Columns.Add("基础")
  37. dt.Columns.Add("染料")
  38. dt.Columns.Add("油脂")
  39. dt.Columns.Add("其他")
  40. dt.Columns.Add("合计")
  41. For x As Integer = 0 To dt.Rows.Count - 1
  42. Dim dt1 As New DataTable
  43. sql = "SELECT class2 AS 类别, CAST(SUM(percents) * 100 AS numeric(10, 1)) AS 比例, CAST(SUM(price) / AVG(wb_weight) " &
  44. " AS numeric(10, 2)) AS 单位成本 " &
  45. " FROM (SELECT NO, CARD, P, AVG(ORDER_A) AS wb_weight, SUM(WEIGHT * price) AS price, SUM(WEIGHT) " &
  46. " / AVG(ORDER_A) AS percents, " &
  47. " CASE WHEN class1 LIKE N'%油脂%' THEN '油脂' WHEN (class1 = N'染料' OR " &
  48. " class1 LIKE N'%钛%') " &
  49. " THEN '染料' WHEN class1 = N'基础化工' THEN N'基础' ELSE '其他' END AS class2 " &
  50. " FROM (SELECT RT_SYS_CHEM_OUT.DATE, RT_SYS_CHEM_OUT.CHECKED, RT_SYS_CHEM_OUT.DEP, " &
  51. " RT_SYS_CHEM_OUT.NO, RT_SYS_CHEM_OUT.WH, RT_SYS_CHEM_OUT.CODE, " &
  52. " RT_SYS_CHEM_OUT.NAME, RT_SYS_CHEM_OUT.TYPE, RT_SYS_CHEM_OUT.UNIT, " &
  53. " RT_SYS_CHEM_OUT.LOT, RT_SYS_CHEM_OUT.WEIGHT, RT_SYS_CHEM_OUT.WEIGHT1, " &
  54. " RT_SYS_CHEM_OUT.P, RT_SYS_CHEM_OUT.CARD, RT_SYS_CHEM_OUT.DRUM, " &
  55. " RT_SYS_CHEM_OUT.ORDER_A, RT_SYS_CHEM_OUT.ID, CASE WHEN new_price Is NULL THEN CAST(RT_SYS_CHEM_MAIN.price AS numeric(10, 2)) ELSE CAST(new_price AS numeric(10, 2)) END AS price, " &
  56. " RT_SYS_CHEM_MAIN.CLASS1 " &
  57. " FROM RT_SYS_CHEM_OUT LEFT OUTER JOIN " &
  58. " RT_SYS_CHEM_MAIN ON " &
  59. " RT_SYS_CHEM_OUT.NAME = RT_SYS_CHEM_MAIN.name " &
  60. " WHERE (RIGHT(RT_SYS_CHEM_OUT.CARD,10) = '" & Microsoft.VisualBasic.Right(dt.Rows(x).Item("卡号"), 10) & "')) " &
  61. " AS derivedtbl_1 GROUP BY NO, CARD, P, CLASS1) AS derivedtbl_2 " &
  62. " GROUP BY CARD, P, class2 " &
  63. " ORDER BY 类别 DESC "
  64. cmd.CommandText = sql
  65. da.SelectCommand = cmd
  66. da.Fill(dt1)
  67. For y As Integer = 0 To dt1.Rows.Count - 1
  68. Select Case dt1.Rows(y).Item("类别")
  69. Case "基础"
  70. dt.Rows(x).Item("基础") = Math.Round(dt1.Rows(y).Item("单位成本") / dt.Rows(x).Item("得革率"), 2)
  71. Case "染料"
  72. dt.Rows(x).Item("染料") = Math.Round(dt1.Rows(y).Item("单位成本") / dt.Rows(x).Item("得革率"), 2)
  73. Case "油脂"
  74. dt.Rows(x).Item("油脂") = Math.Round(dt1.Rows(y).Item("单位成本") / dt.Rows(x).Item("得革率"), 2)
  75. Case "其他"
  76. dt.Rows(x).Item("其他") = Math.Round(dt1.Rows(y).Item("单位成本") / dt.Rows(x).Item("得革率"), 2)
  77. End Select
  78. Next
  79. If IsDBNull(dt.Rows(x).Item("基础")) Then
  80. dt.Rows(x).Item("基础") = 0
  81. End If
  82. If IsDBNull(dt.Rows(x).Item("染料")) Then
  83. dt.Rows(x).Item("染料") = 0
  84. End If
  85. If IsDBNull(dt.Rows(x).Item("油脂")) Then
  86. dt.Rows(x).Item("油脂") = 0
  87. End If
  88. If IsDBNull(dt.Rows(x).Item("其他")) Then
  89. dt.Rows(x).Item("其他") = 0
  90. End If
  91. dt.Rows(x).Item("合计") = Val(dt.Rows(x).Item("基础").ToString) + Val(dt.Rows(x).Item("油脂").ToString) + Val(dt.Rows(x).Item("染料").ToString) + Val(dt.Rows(x).Item("其他").ToString)
  92. Next x
  93. dgv1.DataSource = dt
  94. dgv1.Columns(0).Width = 150
  95. dgv1.Columns(1).Width = 60
  96. dgv1.Columns(2).Width = 60
  97. dgv1.Columns(3).Width = 60
  98. dgv1.Columns(9).Width = 80
  99. dgv1.Columns(4).Width = 80
  100. dgv1.Columns(5).Width = 80
  101. dgv1.Columns(6).Width = 80
  102. dgv1.Columns(7).Width = 80
  103. dgv1.Columns(8).Width = 80
  104. dgv1.Columns(10).Width = 200
  105. sql = "SELECT card1 as 新卡号, SUM(sf) AS 尺数 FROM RT_PU_MEASURE1_SYS GROUP BY card1 ORDER BY card1 DESC"
  106. Dim dt2 As New DataTable
  107. cmd.CommandText = sql
  108. da.SelectCommand = cmd
  109. da.Fill(dt2)
  110. dgv3.DataSource = dt2
  111. End Sub
  112. Private Sub dgv1_CellMouseUp(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgv1.CellMouseUp
  113. Dim dt As New DataTable
  114. sql = "SELECT date as 日期,sf as 尺数, card1 as 新卡号, no as [k3单号] FROM RT_PU_MEASURE1_SYS where right(card,10)= '" & Microsoft.VisualBasic.Right(dgv1.Rows(dgv1.CurrentCell.RowIndex).Cells("卡号").Value, 10) & "'"
  115. cmd.CommandText = sql
  116. da.SelectCommand = cmd
  117. da.Fill(dt)
  118. dgv2.DataSource = dt
  119. dgv2.Columns(3).Width = 120
  120. End Sub
  121. Private Sub dgv4_CellMouseUp(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgv4.CellMouseUp
  122. End Sub
  123. Private Sub dgv3_CellMouseUp(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgv3.CellMouseUp
  124. Dim dt As New DataTable
  125. sql = "SELECT RT_PU_MEASURE1_SYS.date AS 日期, RT_PU_MEASURE1_SYS.sf AS 尺数, RT_PU_MEASURE1_SYS.card AS 卡号,RT_PU_MEASURE1_SYS.no AS k3单号, RT_RETAN_RECORD.SOURCE as 皮源, RT_RETAN_RECORD.TECH as 技术员,RT_RETAN_RECORD.THICKNESS as 厚度 FROM RT_PU_MEASURE1_SYS LEFT OUTER JOIN RT_RETAN_RECORD ON RT_PU_MEASURE1_SYS.card = RT_RETAN_RECORD.CARD where card1= '" & Microsoft.VisualBasic.Right(dgv3.Rows(dgv3.CurrentCell.RowIndex).Cells("新卡号").Value, 10) & "'"
  126. cmd.CommandText = sql
  127. da.SelectCommand = cmd
  128. da.Fill(dt)
  129. dgv4.DataSource = dt
  130. dgv4.Columns(1).Width = 80
  131. dgv4.Columns(2).Width = 150
  132. dgv4.Columns(3).Width = 120
  133. End Sub
  134. End Class