1、红色这一行应该去掉,因为第一行已经清除数据,不存在排除已存在数据的问题:
DataTables("产品进销存").DataRows.Clear()
Dim f As New Filler
f.SourceTable = DataTables("产品设置")
f.SourceCols = "产品状态,商品代码,类别,系列,品名,规格,型号,包装率,计量系数,计量单位,价格_成本,价格_批发,价格_零售,价格_标价,安全库存量,产品状态日志,产品图片,产品效果,产品特点简介" '指定数据来源列
f.DataTable = DataTables("产品进销存")
f.DataCols = "产品状态,商品代码,类别,系列,品名,规格,型号,包装率,计量系数,计量单位,价格_成本,价格_批发,价格_零售,价格_标价,安全库存量,产品状态日志,产品图片,产品效果,产品特点简介" '指定数据接收列
f.ExcludeExistValue=True
f.Fill()
DataTables("产品进销存").dataCols("商品代码").RaiseDataColChanged()
2、既然前面是用Filler填充,使用的是已经加载的数据,那么后面为啥用SQL语句,直接用DataTable的Compute计算就行了啊,当然如果有些参与统计的表没有加载,就只能用SQL语句了。
3、这个不影响性能, 但是看上去不舒服,就是没必要定义这么对变量,变量可以重用的:
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = "Select SUM(计量_数量) as 入库数量,SUM(无税金额) as 入库无税金额,SUM(含税金额) as 入库含税金额 From {入库明细} Where 商品代码 ='" & e.DataRow("商品代码") & "' And 入库日期 <= # " & Vars("enddate") & "#"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
da("累计入库_数量")=dr("入库数量")
da("累计入库_无税金额")=dr("入库无税金额")
da("累计入库_含税金额")=dr("入库含税金额")
Next
cmd.CommandText = "Select SUM(计量_数量) as 出库数量,SUM(成本_无税金额) As 出库无税金额,SUM(成本_含税金额) As 出库含税金额 From {出库明细} Where 商品代码 ='" & e.DataRow("商品代码") & "' And 出库日期 <= # " & Vars("enddate") & "#"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
da("累计出库_数量")=dr("出库数量")
da("累计出库_无税金额")=dr("出库无税金额")
da("累计出库_含税金额")=dr("出库含税金额")
Next
cmd.CommandText = "Select SUM(计量_数量) as 订单数量,SUM(无税金额) As 无税金额,SUM(含税金额) As 含税金额 From {销售订单明细} Where 商品代码 ='" & e.DataRow("商品代码") & "' And 销售订单日期 <= # " & Vars("enddate") & "#"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
da("累计订单_数量")=dr("订单数量")
da("累计订单_无税金额")=dr("无税金额")
da("累计订单_含税金额")=dr("含税金额")
Next