Нема описа
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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. Imports System.Data.SqlClient
  2. Imports System.Reflection
  3. Public Class FrmCalChem
  4. Dim cmd As New SqlCommand
  5. Dim da As New SqlDataAdapter
  6. Dim dt As New DataTable
  7. Dim conn As New SqlConnection
  8. Dim sql As String
  9. Private Sub FrmCalChem_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  10. Dim type As Type = dgv1.GetType()
  11. Dim pi As PropertyInfo = type.GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic)
  12. pi.SetValue(dgv1, True, Nothing)
  13. conn.ConnectionString = connstring
  14. conn.Open()
  15. cmd.Connection = conn
  16. sql = "SELECT 品名,单价,供应商,产地,年,分类,现场库存,可慕库存,保税库存,合计, [3] as [3月],[4] as [4月],[5] as [5月],[6] as [6月],[7] as[7月], (select max(c) from (values([3]),([4]),([5]),([6]),([7])) as maxV(c)) as 最大用量,CASE WHEN (合计-[7]) IS NULL THEN 0 ELSE (合计-[7]) END as 即时库存 " &
  17. " FROM (SELECT RT_SYS_CHEM_MAIN.name AS 品名, RT_SYS_CHEM_MAIN.price AS 单价, RT_SYS_CHEM_MAIN.supplier AS 供应商, " &
  18. " RT_SYS_CHEM_MAIN.origin AS 产地, RT_SYS_CHEM_MAIN.rcp AS 水场工艺, RT_SYS_CHEM_MAIN.BG AS 关务, " &
  19. " CAST(SUM(RT_SYS_CHEM_OUT.WEIGHT) AS numeric(10, 0)) AS 领料, YEAR(RT_SYS_CHEM_OUT.DATE) AS 年, " &
  20. " MONTH(RT_SYS_CHEM_OUT.DATE) AS 月, RT_SYS_CHEM_MAIN.CLASS1 AS 分类, " &
  21. " rt_chem_stock_month1.stock1 AS 现场库存, " &
  22. " rt_chem_stock_month1.stock2 AS 可慕库存, rt_chem_stock_month1.stock3 AS 保税库存, " &
  23. " rt_chem_stock_month1.stock1 + rt_chem_stock_month1.stock2 + rt_chem_stock_month1.stock3 AS 合计 " &
  24. " FROM RT_SYS_CHEM_MAIN LEFT OUTER JOIN " &
  25. " RT_SYS_CHEM_OUT_DB ON RT_SYS_CHEM_MAIN.name = RT_SYS_CHEM_OUT_DB.name LEFT OUTER JOIN " &
  26. " RT_SYS_CHEM_IN_L ON RT_SYS_CHEM_MAIN.name = RT_SYS_CHEM_IN_L.NAME LEFT OUTER JOIN " &
  27. " RT_SYS_CHEM_IN_S ON RT_SYS_CHEM_MAIN.name = RT_SYS_CHEM_IN_S.name LEFT OUTER JOIN " &
  28. " RT_SYS_CHEM_IN_F ON RT_SYS_CHEM_MAIN.name = RT_SYS_CHEM_IN_F.name LEFT OUTER JOIN " &
  29. " rt_chem_stock_month1 ON RT_SYS_CHEM_MAIN.name = rt_chem_stock_month1.name LEFT OUTER JOIN " &
  30. " RT_SYS_CHEM_OUT ON RT_SYS_CHEM_MAIN.name = RT_SYS_CHEM_OUT.NAME " &
  31. " GROUP BY RT_SYS_CHEM_MAIN.name, RT_SYS_CHEM_MAIN.supplier, RT_SYS_CHEM_MAIN.origin, " &
  32. " RT_SYS_CHEM_MAIN.rcp, RT_SYS_CHEM_MAIN.BG, YEAR(RT_SYS_CHEM_OUT.DATE), " &
  33. " MONTH(RT_SYS_CHEM_OUT.DATE), RT_SYS_CHEM_MAIN.CLASS1, RT_SYS_CHEM_MAIN.CLASS2, " &
  34. " RT_SYS_CHEM_MAIN.price, rt_chem_stock_month1.stock1, rt_chem_stock_month1.stock2, " &
  35. " rt_chem_stock_month1.stock3, RT_SYS_CHEM_IN_F.weight, RT_SYS_CHEM_IN_S.weight, " &
  36. " RT_SYS_CHEM_IN_L.WEIGHT, RT_SYS_CHEM_OUT_DB.weight) " &
  37. " AS p pivot (sum(领料) for 月 in([3],[4],[5],[6],[7]) ) as q "
  38. sql = "SELECT 品名,单价,供应商,产地,年,分类,现场库存,可慕库存,保税库存,合计, [3] as [3月],[4] as [4月],[5] as [5月],[6] as [6月],[7] as[7月], " &
  39. " (select max(c) from (values([3]),([4]),([5]),([6]),([7])) as maxV(c)) as 最大用量,CASE WHEN (合计-[7]) IS NULL THEN 0 ELSE (合计-[7]) END as 即时库存 FROM " &
  40. " (SELECT RT_SYS_CHEM_MAIN.name AS 品名, RT_SYS_CHEM_MAIN.price AS 单价, RT_SYS_CHEM_MAIN.supplier AS 供应商, " &
  41. " RT_SYS_CHEM_MAIN.origin AS 产地, RT_SYS_CHEM_MAIN.rcp AS 水场工艺, RT_SYS_CHEM_MAIN.BG AS 关务, " &
  42. " CAST(SUM(RT_SYS_CHEM_OUT.WEIGHT) AS numeric(10, 0)) AS 领料, YEAR(RT_SYS_CHEM_OUT.DATE) AS 年, " &
  43. " MONTH(RT_SYS_CHEM_OUT.DATE) AS 月, RT_SYS_CHEM_MAIN.CLASS1 AS 分类, " &
  44. " rt_chem_stock_month1.stock1 AS 现场库存, rt_chem_stock_month1.stock2 AS 可慕库存, " &
  45. " rt_chem_stock_month1.stock3 AS 保税库存, " &
  46. " rt_chem_stock_month1.stock1 + rt_chem_stock_month1.stock2 + rt_chem_stock_month1.stock3 AS 合计 " &
  47. " FROM RT_SYS_CHEM_MAIN LEFT OUTER JOIN " &
  48. " rt_chem_stock_month1 ON RT_SYS_CHEM_MAIN.name = rt_chem_stock_month1.name LEFT OUTER JOIN " &
  49. " RT_SYS_CHEM_OUT ON RT_SYS_CHEM_MAIN.name = RT_SYS_CHEM_OUT.NAME " &
  50. " GROUP BY RT_SYS_CHEM_MAIN.name, RT_SYS_CHEM_MAIN.supplier, RT_SYS_CHEM_MAIN.origin, " &
  51. " RT_SYS_CHEM_MAIN.rcp, RT_SYS_CHEM_MAIN.BG, YEAR(RT_SYS_CHEM_OUT.DATE), " &
  52. " MONTH(RT_SYS_CHEM_OUT.DATE), RT_SYS_CHEM_MAIN.CLASS1, RT_SYS_CHEM_MAIN.CLASS2, " &
  53. " RT_SYS_CHEM_MAIN.price, rt_chem_stock_month1.stock1, rt_chem_stock_month1.stock2, " &
  54. " rt_chem_stock_month1.stock3) AS p " &
  55. " pivot (sum(领料) for 月 in([3],[4],[5],[6],[7]) ) as q"
  56. cmd.CommandText = sql
  57. da.SelectCommand = cmd
  58. da.Fill(dt)
  59. dgv1.DataSource = dt
  60. dt.Columns.Add("外购入库")
  61. dt.Columns.Add("保税入库")
  62. dt.Columns.Add("可慕入库")
  63. dt.Columns.Add("调拨出库")
  64. dt.Columns.Add("余量(月)")
  65. dt.Columns.Add("前置时间")
  66. dt.Columns.Add("订货")
  67. dgv1.Columns(0).Width = 200
  68. dgv1.Columns(1).Width = 60
  69. dgv1.Columns(2).Width = 60
  70. dgv1.Columns(3).Width = 60
  71. dgv1.Columns(4).Width = 60
  72. dgv1.Columns(5).Width = 100
  73. dgv1.Columns(6).Width = 60
  74. dgv1.Columns(7).Width = 60
  75. dgv1.Columns(8).Width = 60
  76. dgv1.Columns(9).Width = 60
  77. dgv1.Columns(10).Width = 60
  78. dgv1.Columns(11).Width = 60
  79. dgv1.Columns(12).Width = 60
  80. dgv1.Columns(13).Width = 60
  81. dgv1.Columns(14).Width = 60
  82. dgv1.Columns(15).Width = 60
  83. dgv1.Columns(16).Width = 60
  84. dgv1.Columns(17).Width = 60
  85. dgv1.Columns(18).Width = 60
  86. dgv1.Columns(19).Width = 60
  87. dgv1.Columns(20).Width = 60
  88. dgv1.Columns(21).Width = 60
  89. dgv1.Columns(22).Width = 60
  90. Dim DR As SqlDataReader
  91. For x As Integer = 0 To dt.Rows.Count - 1
  92. Dim xx As Integer = 0
  93. Dim YY As Integer = 0
  94. sql = "SELECT CASE WHEN SUM(WEIGHT) IS NULL THEN 0 ELSE SUM(WEIGHT) END AS WEIGHT FROM RT_SYS_CHEM_IN_F WHERE NAME='" & dt.Rows(x).Item("品名") & "'"
  95. cmd.CommandText = sql
  96. DR = cmd.ExecuteReader
  97. If DR.Read Then
  98. dt.Rows(x).Item("外购入库") = DR("WEIGHT")
  99. dt.Rows(x).Item("即时库存") = dt.Rows(x).Item("即时库存") + dt.Rows(x).Item("外购入库")
  100. End If
  101. DR.Close()
  102. sql = "SELECT CASE WHEN SUM(WEIGHT) IS NULL THEN 0 ELSE SUM(WEIGHT) END AS WEIGHT FROM RT_SYS_CHEM_IN_S WHERE NAME='" & dt.Rows(x).Item("品名") & "' and month(date)=7"
  103. cmd.CommandText = sql
  104. DR = cmd.ExecuteReader
  105. If DR.Read Then
  106. dt.Rows(x).Item("保税入库") = DR("WEIGHT")
  107. End If
  108. DR.Close()
  109. sql = "SELECT CASE WHEN SUM(WEIGHT) IS NULL THEN 0 ELSE SUM(WEIGHT) END AS WEIGHT FROM RT_SYS_CHEM_IN_L WHERE NAME='" & dt.Rows(x).Item("品名") & "' and month(date)=7 "
  110. cmd.CommandText = sql
  111. DR = cmd.ExecuteReader
  112. If DR.Read Then
  113. dt.Rows(x).Item("可慕入库") = DR("WEIGHT")
  114. End If
  115. DR.Close()
  116. sql = "SELECT CASE WHEN SUM(WEIGHT) IS NULL THEN 0 ELSE SUM(WEIGHT) END AS WEIGHT FROM RT_SYS_CHEM_OUT_DB WHERE NAME='" & dt.Rows(x).Item("品名") & "' and month(date)=7"
  117. cmd.CommandText = sql
  118. DR = cmd.ExecuteReader
  119. If DR.Read Then
  120. dt.Rows(x).Item("调拨出库") = DR("WEIGHT")
  121. dt.Rows(x).Item("即时库存") = dt.Rows(x).Item("即时库存") - dt.Rows(x).Item("调拨出库")
  122. End If
  123. DR.Close()
  124. Select Case dt.Rows(x).Item("产地").ToString
  125. Case "台湾", "泰国", "新加坡"
  126. dt.Rows(x).Item("前置时间") = 1
  127. If dt.Rows(x).Item("最大用量").ToString = "" Then
  128. xx = 0
  129. Else
  130. xx = dt.Rows(x).Item("最大用量")
  131. End If
  132. If dt.Rows(x).Item("即时库存").ToString = "" Then
  133. YY = 0
  134. Else
  135. YY = dt.Rows(x).Item("即时库存")
  136. End If
  137. dt.Rows(x).Item("订货") = YY - xx * dt.Rows(x).Item("前置时间")
  138. If xx <> 0 Then dt.Rows(x).Item("余量(月)") = Math.Round(YY / xx, 1)
  139. Case "美国", "荷兰", "西班牙", "德国", "义大利"
  140. dt.Rows(x).Item("前置时间") = 3
  141. dt.Rows(x).Item("订货") = 1
  142. If dt.Rows(x).Item("最大用量").ToString = "" Then
  143. xx = 0
  144. Else
  145. xx = dt.Rows(x).Item("最大用量")
  146. End If
  147. If dt.Rows(x).Item("即时库存").ToString = "" Then
  148. YY = 0
  149. Else
  150. YY = dt.Rows(x).Item("即时库存")
  151. End If
  152. dt.Rows(x).Item("订货") = YY - xx * dt.Rows(x).Item("前置时间")
  153. If xx <> 0 Then dt.Rows(x).Item("余量(月)") = Math.Round(YY / xx, 1)
  154. Case "山东", "上海", "厦门"
  155. dt.Rows(x).Item("前置时间") = 0.5
  156. dt.Rows(x).Item("订货") = 1
  157. If dt.Rows(x).Item("最大用量").ToString = "" Then
  158. xx = 0
  159. Else
  160. xx = dt.Rows(x).Item("最大用量")
  161. End If
  162. If dt.Rows(x).Item("即时库存").ToString = "" Then
  163. YY = 0
  164. Else
  165. YY = dt.Rows(x).Item("即时库存")
  166. End If
  167. dt.Rows(x).Item("订货") = YY - xx * dt.Rows(x).Item("前置时间")
  168. If xx <> 0 Then dt.Rows(x).Item("余量(月)") = Math.Round(YY / xx, 1)
  169. End Select
  170. Next
  171. End Sub
  172. End Class