Foxtable(狐表)用户栏目专家坐堂 → [求助]如何按当前值进行组合统计,并把结果导入库存表及导出外部文件?


  共有2187人关注过本帖树形打印复制链接

主题:[求助]如何按当前值进行组合统计,并把结果导入库存表及导出外部文件?

帅哥哟,离线,有人找我吗?
lgz518
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
[求助]如何按当前值进行组合统计,并把结果导入库存表及导出外部文件?  发帖心情 Post By:2019/7/8 20:12:00 [显示全部帖子]

 如何按当前值进行组合统计,并把结果导入库存表及导出外部文件?

1.如何按窗口上的两个文本编辑框当前值(如起止日期)进行统计,并把结果导入库存表(已手工设计的表)及导出外部文件(EXECL);
2.



Dim bd1 As New GroupTableBuilder("统计表1",DataTables("进货单"))
Dim
dt1 As fxDataSource
bd1
.Groups.AddDef("型号") '根据型号分组
bd1
.Totals.AddDef("数量","进货_数量") '对数量进行统计
bd1
.Totals.AddDef("金额","进货_金额") '对金额进行统计
dt1
= bd1.BuildDataSource()

Dim
bd2 As New GroupTableBuilder("统计表2",DataTables("销售单"))
Dim
dt2  As fxDataSource
bd2
.Groups.AddDef("型号") '根据型号分组
bd2
.Totals.AddDef("数量","销售_数量") '对数量进行统计
bd2
.Totals.AddDef("金额","销售_金额") '对金额进行统计
dt2
= bd2.BuildDataSource()

Dim bd3 As New GroupTableBuilder("统计表3",DataTables("退货单"))
Dim
dt3 As fxDataSource
bd3
.Groups.AddDef("型号") '根据型号分组
bd3
.Totals.AddDef("数量","退货_数量") '对数量进行统计
bd3
.Totals.AddDef("金额","退货_金额") '对金额进行统计
dt3 = bd3.BuildDataSource()

dt1.Combine("型号",dt2,"型号") '将销售统计数据组合到进货统计数据
dt1
.Combine("型号",dt3,"型号") '将退货统计数据组合到进货统计数据

Tables("窗口1_Table1").DataSource = dt1 '将统计结果绑定到Table
With
DataTables("窗口1_Table1").DataCols  '用表达式列计算库存数据
   
.Add("库存_数量",Gettype(Integer), "IsNull([进货_数量],0) - ISNULL([销售_数量],0) - ISNULL([退货_数量],0)")
   
.Add("库存_金额",Gettype(Double), "[库存_数量] /[进货_数量] * [进货_金额]"
End With








2.并把结果导入库存表(已手工设计的表),以下,由于组合统计它临时表,其写“来源表”(临时表)报错,提示不是此表,无法执行:



手工编码填充数据

前面介绍了用Filler进行数据填充,Filler的设置很丰富,使用比较灵活。
不过填充数据并非一定要Filler,我们也可以手工编码填充。

例如需要从表A中,将金额大于100的记录,复制到表B中,假定两个表的结构一样:

For Each dr1 As DataRow In DataTables("表A").Select("[金额] > 100")
    Dim
dr2 As DataRow = DataTables("表B").AddNew()
   
For Each dc As DataCol in DataTables("表A").DataCols
        dr2(dc.Name) = dr1(dc.name)
   
Next
Next

如果表A和表B的结构不同,或者只需填充部分列,就需要定义数据来源列和数据接收列,例如:

Dim Cols1() As String = {"来源列一","来源列二","来源列三"}
Dim
Cols2() As String = {"接收列一","接收列二","接收列三"}
For Each
dr1 As DataRow In DataTables("表A").Select("[金额] > 100")
    Dim
dr2 As DataRow = DataTables("表B").AddNew()
    For
i As Integer = 0 To Cols1.Length -1
       
dr2(Cols2(i)) = dr1(Cols1(i
))
    Next
Next

如果要排除重复值,可以用GetValues获得不重复的值,然后再填充:

Dim Vals As List(of String())
Vals = DataTables("来源表").GetValues("产品|客户")
For
i As Integer = 0 To Vals.Count - 1
    Dim
dr As DataRow = DataTables("接收表").AddNew()
    dr(
"产品") = Vals(i)(0)
    dr(
"客户") = Vals(i)(1)
Next





 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/7/10 9:53:00 [显示全部帖子]

 
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:库存统计.table

老师,执行不了,代码加上提示错,请老师指教,谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/7/10 10:37:00 [显示全部帖子]

 首先,谢谢,老师,导入表可以,但是有二个:
1.统计时,首行会出现空数据,空行,如何解决?
2.按两个文本编辑当前值统计,实现不,按您提供方法,加代码,也报错?
请指教,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/7/10 13:01:00 [显示全部帖子]

老师,
按两个文本编辑当前值统计,实现不,加上起止日期,报错?请指教,谢谢

Dim bd1 As New GroupTableBuilder("统计表1",DataTables("进货单"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("型号") '根据型号分组
bd1.Totals.AddDef("数量","进货_数量") '对数量进行统计
bd1.Totals.AddDef("金额","进货_金额") '对金额进行统计
bd1.Filter = "型号 is not null"
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 <= #" & .Value & "#"
    End If
End With

dt1 = bd1.BuildDataSource()

Dim bd2 As New GroupTableBuilder("统计表2",DataTables("销售单"))
Dim dt2  As fxDataSource
bd2.Groups.AddDef("型号") '根据型号分组
bd2.Totals.AddDef("数量","销售_数量") '对数量进行统计
bd2.Totals.AddDef("金额","销售_金额") '对金额进行统计
bd1.Filter = "型号 is not null"
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 <= #" & .Value & "#"
    End If
End With

dt2 = bd2.BuildDataSource()

Dim bd3 As New GroupTableBuilder("统计表3",DataTables("退货单"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("型号") '根据型号分组
bd3.Totals.AddDef("数量","退货_数量") '对数量进行统计
bd3.Totals.AddDef("金额","退货_金额") '对金额进行统计
bd1.Filter = "型号 is not null"
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 <= #" & .Value & "#"
    End If
End With
dt3 = bd3.BuildDataSource()

dt1.Combine("型号",dt2,"型号") '将销售统计数据组合到进货统计数据
dt1.Combine("型号",dt3,"型号") '将退货统计数据组合到进货统计数据

Tables("库存统计_Table1").DataSource = dt1 '将统计结果绑定到Table
With DataTables("库存统计_Table1").DataCols  '用表达式列计算库存数据
    .Add("库存_数量",Gettype(Integer), "IsNull([进货_数量],0) - ISNULL([销售_数量],0) - ISNULL([退货_数量],0)")
    .Add("库存_金额",Gettype(Double), "[库存_数量] /[进货_数量] * [进货_金额]")
End With



 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/7/10 13:46:00 [显示全部帖子]

 
老师,
按两个文本编辑当前值统计,实现不,加上起止日期,报错?请指教,谢谢



Dim bd1 As New GroupTableBuilder("统计表1",DataTables("进货单"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("型号") '根据型号分组
bd1.Totals.AddDef("数量","进货_数量") '对数量进行统计
bd1.Totals.AddDef("金额","进货_金额") '对金额进行统计
bd1.Filter = "型号 is not null"
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 <= #" & .Value & "#"
    End If
End With

dt1 = bd1.BuildDataSource()

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/7/10 22:26:00 [显示全部帖子]

 老师,测试后,在中间出现一行空白数据,

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/7/10 23:19:00 [显示全部帖子]

 还有把“进货单”和销售单,退货单,库存统计表,都增加那个字段“物料号”,“品名”,进行统计,运行报错“列,品名,不属表“

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/7/11 13:04:00 [显示全部帖子]

 Dim Filter As String = "型号 is not null"
Dim bd1 As New GroupTableBuilder("统计表1",DataTables("进货单"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("型号") '根据型号分组
bd1.Totals.AddDef("数量","进货_数量") '对数量进行统计
bd1.Totals.AddDef("金额","进货_金额") '对金额进行统计
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "进货日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "进货日期 <= #" & .Value & "#"
    End If
End With
bd1.Filter = Filter
dt1 = bd1.BuildDataSource()

Dim bd2 As New GroupTableBuilder("统计表2",DataTables("销售单"))
Dim dt2  As fxDataSource
bd2.Groups.AddDef("型号") '根据型号分组
bd2.Totals.AddDef("数量","销售_数量") '对数量进行统计
bd2.Totals.AddDef("金额","销售_金额") '对金额进行统计
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "销售日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "销售日期 <= #" & .Value & "#"
    End If
End With
dt2 = bd2.BuildDataSource()

Dim bd3 As New GroupTableBuilder("统计表3",DataTables("退货单"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("型号") '根据型号分组
bd3.Totals.AddDef("数量","退货_数量") '对数量进行统计
bd3.Totals.AddDef("金额","退货_金额") '对金额进行统计
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "退货日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "退货日期 <= #" & .Value & "#"
    End If
End With
dt3 = bd3.BuildDataSource()

dt1.Combine("型号",dt2,"型号") '将销售统计数据组合到进货统计数据
dt1.Combine("型号",dt3,"型号") '将退货统计数据组合到进货统计数据

Tables("库存统计_Table1").DataSource = dt1 '将统计结果绑定到Table
With DataTables("库存统计_Table1").DataCols  '用表达式列计算库存数据
    .Add("库存_数量",Gettype(Integer), "IsNull([进货_数量],0) - ISNULL([销售_数量],0) - ISNULL([退货_数量],0)")
    .Add("库存_金额",Gettype(Double), "[库存_数量] /[进货_数量] * [进货_金额]")
End With

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/7/11 13:25:00 [显示全部帖子]


另一个问题,我增加二个列,物料号,品名,以下代码,报错:列  品名 不属于表?


Dim Filter As String = "型号 is not null"
Dim bd1 As New GroupTableBuilder("统计表1",DataTables("采购单"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("物料号") '根据型号分组
bd1.Groups.AddDef("品名") '根据型号分组
bd1.Groups.AddDef("型号") '根据型号分组
bd1.Totals.AddDef("数量","进货_数量") '对数量进行统计
bd1.Totals.AddDef("金额","进货_金额") '对金额进行统计
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "进货日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "进货日期 <= #" & .Value & "#"
    End If
End With
bd1.Filter = Filter
dt1 = bd1.BuildDataSource()

Dim bd2 As New GroupTableBuilder("统计表2",DataTables("出货单"))
Dim dt2  As fxDataSource
bd2.Groups.AddDef("物料号") '根据型号分组
bd2.Groups.AddDef("品名") '根据型号分组
bd2.Groups.AddDef("型号") '根据型号分组
bd2.Totals.AddDef("数量","销售_数量") '对数量进行统计
bd2.Totals.AddDef("金额","销售_金额") '对金额进行统计
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "销售日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "销售日期 <= #" & .Value & "#"
    End If
End With
dt2 = bd2.BuildDataSource()

Dim bd3 As New GroupTableBuilder("统计表3",DataTables("退货表"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("物料号") '根据型号分组
bd3.Groups.AddDef("品名") '根据型号分组
bd3.Groups.AddDef("型号") '根据型号分组
bd3.Totals.AddDef("数量","退货_数量") '对数量进行统计
bd3.Totals.AddDef("金额","退货_金额") '对金额进行统计
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "退货日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "退货日期 <= #" & .Value & "#"
    End If
End With
dt3 = bd3.BuildDataSource()
dt1.Combine("物料号",dt2,"物料号") '将销售统计数据组合到进货统计数据
dt1.Combine("品名",dt2,"品名") '将销售统计数据组合到进货统计数据
dt1.Combine("型号",dt2,"型号") '将销售统计数据组合到进货统计数据
dt1.Combine("物料号",dt3,"物料号") '将销售统计数据组合到进货统计数据
dt1.Combine("品名",dt3,"品名") '将销售统计数据组合到进货统计数据
dt1.Combine("型号",dt3,"型号") '将退货统计数据组合到进货统计数据


Tables("库存统计_Table1").DataSource = dt1 '将统计结果绑定到Table
With DataTables("库存统计_Table1").DataCols  '用表达式列计算库存数据
    .Add("库存_数量",Gettype(Integer), "IsNull([进货_数量],0) - ISNULL([销售_数量],0) - ISNULL([退货_数量],0)")
    .Add("库存_金额",Gettype(Double), "[库存_数量] /[进货_数量] * [进货_金额]")
End With


 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/7/11 18:04:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多列库存统计 .table

 老师,测试,报错:进货日期不是列,再单击,显示只有进货,销售,退货都没统计

 回到顶部
总数 16 1 2 下一页