物料需求统计
假定有下面三个表。
生产计划表,用于输入每个产品计划的生产数量:

零件用量表,用户输入每单个产品使用各零件的数量:

零件需求表,用于根据生产计划表和零件需求表,统计出各种零件总的需求数量:

这是一个很经典的跨表统计的实例,下面我们用三种不同的方法,来得到这个需求统计表。
方法一
用SQLGroupTableBuilder,在窗口或者菜单新建一个按钮,将其代码设置为:
Dim gb As new SQLGroupTableBuilder("统计表","零件用量")
gb.AddTable("零件用量","产品","生产计划","产品")
gb.Groups.AddDef("零件")
gb.Totals.AddExp("需求数量","[生产数量] * [用量]")
gb.Build()
MainTable = Tables("统计表")
方法二
用SQLJoinTableBuilder,在窗口或者菜单新建一个按钮,将其代码设置为:
Dim jb As new SQLJoinTableBuilder("统计表","零件用量")
jb.AddTable("零件用量","产品","生产计划","产品")
jb.AddCols("零件",True)
jb.AddExp("需求数量","sum([生产数量] * [用量])")
jb.Build()
MainTable = Tables("统计表")
方法三
我们也可以自己直接编码实现,步骤:
1、需要事先设计一个名为“零件需求”的表,包括零件和需求数量两列。
2、然后新建一个菜单或窗口按钮,将其代码设置为:
Dim dic As new Dictionary(of String,Integer)
DataTables("零件需求").DataRows.Clear()
For Each dr1 As DataRow In DataTables("生产计划").DataRows
For Each dr2 As DataRow In DataTables("零件用量").Select("[产品] = '" & dr1("产品") & "'")
Dim nm As String = dr2("零件")
Dim vl As Integer = dr1("生产数量") * dr2("用量")
If dic.ContainsKey(nm) = False
dic.Add(nm,vl)
Else
dic(nm) = dic(nm)+ vl
End If
Next
Next
For Each key As String In dic.keys
Dim dr As DataRow = DataTables("零件需求").AddNew()
dr("零件") = key
dr("需求数量") = dic(key)
Next