“材料库存”用数据表时使用如下代码可计算,现将“材料库存”用统计分组的方式生产临时表“统计表1”替代,代码如何该?谢谢!
cmd.C
cmd.CommandText = "Select '' As 材料编码,'' As 材料名称,'' As 三周需求M2,''As 四周需求M2,''As 三周后库存M2,''As 四周后库存M2"
e.Form.Controls("Table1").Table.DataSource = cmd.ExecuteReader()
e.Form.Controls("Table1").Table.DataTable.DataRows.Clear()
Dim Int As Integer = DataTables("工作周设置").DataRows(0)("工作周起始")
Dim weeknum As Integer = DatePart("ww" , Date.Today.AddDays(- Int))
cmd.CommandText = "Select * From {DemandTable}" '这里获取所有数据,根据工作实际,只需提取必要的数据.
Dim dt1 As DataTable = cmd.ExecuteReader()
cmd.CommandText = "Select * From {BOMTable}"
Dim dt2 As DataTable = cmd.ExecuteReader()
cmd.CommandText = "Select * From {材料库存}"
Dim dt3 As DataTable = cmd.ExecuteReader()
Dim cpvals As List(Of String) = dt1.GetValues("StokvisPN","StokvisPN Is Not Null")
Dim ljvals As List(Of String) = dt2.GetValues("材料编码","材料编码 Is Not Null")
For Each ljval As String In ljvals
Dim nr As Row = e.Form.Controls("Table1").Table.AddNew()
nr("材料编码") = ljval
Dim sum As Double = 0
For Each cpval As String In cpvals
Dim fdr As DataRow = dt2.Find("StokvisPN = '" & cpval & "' And 材料编码 = '" & ljval & "'")
If fdr IsNot Nothing Then
sum + = math.round(((dt1.Compute("Sum(W" & weeknum & ")","StokvisPN = '" & cpval & "'") + _
dt1.Compute("Sum(W" & weeknum + 1 & ")","StokvisPN = '" & cpval & "'") + _
dt1.Compute("Sum(W" & weeknum + 2 & ")","StokvisPN = '" & cpval & "'")) * (fdr("标准宽mm")*fdr("标准长M")/1000*(1+fdr("材料损耗率")/100)+fdr("调机损耗M")*fdr("标准宽mm")/1000/125000*1000 )*1.05),1)
End If
Next
Dim sum1 As Double = 0
For Each cpval As String In cpvals
Dim fdr1 As DataRow = dt2.Find("StokvisPN = '" & cpval & "' And 材料编码 = '" & ljval & "'")
If fdr1 IsNot Nothing Then
sum1 + = math.round(((dt1.Compute("Sum(W" & weeknum & ")","StokvisPN = '" & cpval & "'") + _
dt1.Compute("Sum(W" & weeknum + 1 & ")","StokvisPN = '" & cpval & "'") + _
dt1.Compute("Sum(W" & weeknum + 2 & ")","StokvisPN = '" & cpval & "'") + _
dt1.Compute("Sum(W" & weeknum + 3 & ")","StokvisPN = '" & cpval & "'")) * (fdr1("标准宽mm")*fdr1("标准长M")/1000*(1+fdr1("材料损耗率")/100)+fdr1("调机损耗M")*fdr1("标准宽mm")/1000/125000*1000 )*1.05),1)
End If
Next
nr("三周需求M2") = sum
nr("四周需求M2") = sum1
Dim kcdr As DataRow = dt3.Find("材料编码 = '" & ljval & "'")
If kcdr IsNot Nothing Then
nr("三周后库存M2") = math.round((kcdr("库存数量M2") - sum),1)
nr("四周后库存M2") = math.round((kcdr("库存数量M2") - sum1),1)
nr("材料名称") = kcdr("物料名称")
End If
Next