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


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

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

帅哥哟,离线,有人找我吗?
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





 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105486 积分:536421 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/8 21:27:00 [只看该作者]

生成条件参考:http://www.foxtable.com/webhelp/topics/1058.htm

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

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105486 积分:536421 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/8 21:28:00 [只看该作者]

填充数据

For Each dr1 As DataRow In Tables("窗口1_Table1").datatable
    Dim
 dr2 As DataRow = DataTables("表B").AddNew()
    
For Each dc As DataCol in DataTables("表B").DataCols
        dr2(dc.Name) = dr1(dc.name)
    
Next
Next

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


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

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

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

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105486 积分:536421 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/10 10:19:00 [只看该作者]

For Each dr1 As DataRow In Tables("库存统计_Table1").DataTable.DataRows
    Dim dr2 As DataRow = DataTables("统计表").AddNew()
    For Each dc As DataCol In DataTables("统计表").DataCols
        dr2(dc.Name) = dr1(dc.name)
    Next
Next

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


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

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

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105486 积分:536421 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/10 10:55:00 [只看该作者]

1、加上条件,排除空行
bd1.Filter = "型号 is not null"

2、写了什么代码?

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | 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()

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105486 积分:536421 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/10 14:40: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()

 回到顶部
总数 29 1 2 3 下一页