1、建立临时表:
Dim dtb As New DataTableBuilder("仓库明细")
dtb.AddDef("商品类别", Gettype(String), 32)
dtb.AddDef("商品名称", Gettype(String), 32)
dtb.AddDef("商品代码", Gettype(String), 32)
dtb.AddDef("规格", Gettype(String), 32)
dtb.AddDef("年度", Gettype(Integer))
dtb.AddDef("月份", Gettype(Integer))
dtb.AddDef("日期", Gettype(Date))
dtb.AddDef("类别", Gettype(String), 32)
dtb.AddDef("编号", Gettype(String), 32)
dtb.AddDef("摘要", Gettype(String), 32)
dtb.AddDef("领货人", Gettype(String), 32)
dtb.AddDef("客户供应商", Gettype(String), 32)
dtb.AddDef("入库", Gettype(Double))
dtb.AddDef("出库", Gettype(Double))
dtb.AddDef("结存", Gettype(Double)) (这列在表中都没有,是新增加的一列)
dtb.Build()
2、设立加载条件FILTER(忽略)
3、把表CKMX(出库)中“出库编号明细,日期,摘要,商品代码,商品类别,商品名称,规格,出库数量,销售员,年,月”字段数据填充到临时表,
把RKMX(入库)中"入库编号明细,日期,摘要,商品代码,商品类别,商品名称,规格,入库数量,客户,销售员,年,月"字段数据填充到临时表,
4、因为有加载条件,例如只统计2014年5月以后数据,那么对5月以前结存数据需要增加一行对前期结存求和(可忽略)
Dim Products As List(Of String)
Products = DataTables("商品信息").GetValues("商品代码",Filter2)
Dim s1 As Double
Dim s2 As Double
For Each Product As String In Products
s1 = DataTables("RKMX").Compute("SUM(入库数量)","商品代码='" & Product & "' And 日期<" & Filter1)
s2 = DataTables("CKMX").Compute("SUM(出库数量)","商品代码='" & Product & "' And 日期<" & Filter1)
If s1-s2 <> 0 Then
Tables("仓库明细").AddNew()
Dim dr As DataRow = DataTables("商品信息").Find("商品代码='" & Product & "'")
If dr IsNot Nothing Then
Tables("仓库明细").Current("商品代码") = dr("商品代码")
Tables("仓库明细").Current("商品类别") = dr("商品类别")
Tables("仓库明细").Current("商品名称") = dr("商品名称")
Tables("仓库明细").Current("规格") = dr("规格")
Tables("仓库明细").Current("编号") = "JZ"
Tables("仓库明细").Current("摘要") = "前期结存"
Tables("仓库明细").Current("入库") = s1-s2
End If
End If
Next
5、对“结存”列,以日期为序号反序,按“上行结存+入库-出库”公式计算出数据,实质上是一个仓库账簿
drs(0)("结存") = drs(0)("入库") - drs(0)("出库") '设置第一行的累计支出
If drs(i)("商品代码") = drs(i - 1)("商品代码") Then
drs(i)("结存") = drs(i-1)("结存") + drs(i)("入库") - drs(i)("出库")
Else
drs(i)("结存") = drs(i)("入库") - drs(i)("出库")
End If
6、MainTable = Tables("仓库明细") ,显示该表
需要:第三步我以前是用Filler,但现在表的数据全部在后台,就不能用Filler,必须用其它方法解决。整个统计中对所有数据没有进行求和之类统计,只是把数据简单地填充罗列出来,然后增加一“结存”列对余额进行计算而已