以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  增加选择日期计件统计  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=186945)

--  作者:denghui69986
--  发布时间:2023/6/10 7:43:00
--  增加选择日期计件统计
做一个计件工资表,上面有很多个月份日期,如何实现选择日期统计,我把筛选和统计代码放一个按键统计不对,试了几次统计不对,蓝老师帮忙看看,谢谢
图片点击可在新窗口打开查看此主题相关图片如下:统计截图说明.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2023/6/10 8:59:00
--  
参考:http://www.foxtable.com/webhelp/topics/1058.htm
--  作者:denghui69986
--  发布时间:2023/6/10 9:15:00
--  
是把筛选和统计放在一个按键还是分开?
--  作者:有点蓝
--  发布时间:2023/6/10 9:21:00
--  
根据自己的需要咯。如果需要分别看筛选、统计的不同结果,就分开。如果只需要一个结果,就合并到一起
--  作者:denghui69986
--  发布时间:2023/6/10 9:52:00
--  

代码放在按键事件里面,统计出来结果不是指定日期,还是统计出来很多个月,把筛选代码放前面的,统计代码放后面

Dim Filter As String
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
If Filter > "" Then
    Tables("计件统计").Filter = Filter
End If

 

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("姓名1") \'根据型号分组
bd2.Totals.AddDef("数量1", "数量") \'对数量进行统计
bd2.Totals.AddDef("金额1", "金额") \'对金额进行统计
dt2 = bd2.BuildDataSource()

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

Dim bd4 As New GroupTableBuilder("统计表4", DataTables("计件统计"))
Dim dt4 As fxDataSource
bd4.Groups.AddDef("姓名3") \'根据型号分组
bd4.Totals.AddDef("数量3", "数量") \'对数量进行统计
bd4.Totals.AddDef("金额3", "金额") \'对金额进行统计
dt4 = bd4.BuildDataSource()

Dim bd5 As New GroupTableBuilder("统计表5", DataTables("计件统计"))
Dim dt5 As fxDataSource
bd5.Groups.AddDef("姓名4") \'根据型号分组
bd5.Totals.AddDef("数量4", "数量") \'对数量进行统计
bd5.Totals.AddDef("金额4", "金额") \'对金额进行统计
dt5 = bd5.BuildDataSource()

Dim bd6 As New GroupTableBuilder("统计表6", DataTables("计件统计"))
Dim dt6 As fxDataSource
bd6.Groups.AddDef("姓名5") \'根据型号分组
bd6.Totals.AddDef("数量5", "数量") \'对数量进行统计
bd6.Totals.AddDef("金额5", "金额") \'对金额进行统计
dt6 = bd6.BuildDataSource()

dt1.Combine("姓名", dt2, "姓名1") \'将销售统计数据组合到进货统计数据
dt1.Combine("姓名", dt3, "姓名2") \'将退货统计数据组合到进货统计数据
dt1.Combine("姓名", dt4, "姓名3") \'将销售统计数据组合到进货统计数据
dt1.Combine("姓名", dt5, "姓名4") \'将退货统计数据组合到进货统计数据
dt1.Combine("姓名", dt6, "姓名5") \'将退货统计数据组合到进货统计数据

Tables("汇总窗_Table1").DataSource = dt1 \'将统计结果绑定到Table
With DataTables("汇总窗_Table1").DataCols \'用表达式列计算库存数据
    .Add("合计数量", GetType(Integer), "IsNull([数量],0) + ISNULL([数量1],0) + ISNULL([数量2],0)+IsNull([数量3],0) + ISNULL([数量4],0) + ISNULL([数量5],0)")
    .Add("合计金额", GetType(Double), "IsNull([金额],0) + ISNULL([金额1],0) + ISNULL([金额2],0)+IsNull([金额3],0) + ISNULL([金额4],0) + ISNULL([金额5],0)")
End With


图片点击可在新窗口打开查看此主题相关图片如下:统计截图.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2023/6/10 10:01:00
--  

详解GroupTableBuilder

下面有些内容比较抽象,在接触具体的示例前,会比较难以理解,没有关系,先大概了解一下即可。 

GroupTableBuilder包括以下属性:

Caption:           字符型,指定新生成统计表的标题。
Groups:            集合,用于添加分组列
Totals:            集合,用于添加统计列。
VerticalTotal:     逻辑型,设为True,垂直方向自动增加汇总行。参考:垂直汇总
GrandProportion:   逻辑型,是否生成总占比。 参考:分组统计之占比分析
GroupProportion:   逻辑型,是否生成分组占比。参考:分组统计之占比分析
SamePeriodGrowth:  逻辑型,是否生成同比增长率。参考: 分组统计之增长率分析
CircleGrowth:      逻辑型,是否生成环比增长率。参考: 分组统计之增长率分析
Subtotal:          逻辑型,设为True,将对分组统计结果进行二次统计,生成汇总模式。 参考:自动生成汇总模式
SubtotalLevel:     整数型,根据多少个分组生成汇总模式。 参考:自动生成汇总模式
Decimals:          整数型,用于设置统计结果要保留的小数位数,默认为4位。
Filter:            字符型,如果只是对SourceDataTable中的部分数据进行统计,可用Filter属性设置条件。
请参考表达式的运算符和函数 和 条件表达式



Dim bd1 As New GroupTableBuilder("统计表1", DataTables("计件统计"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("姓名") \'根据型号分组
bd1.Totals.AddDef("数量", "数量") \'对数量进行统计
bd1.Totals.AddDef("金额", "金额") \'对金额进行统计

bd1.Filter = Filter
dt1 = bd1.BuildDataSource()

……

……

bd2.Filter = Filter

……

bd3......


--  作者:denghui69986
--  发布时间:2023/6/10 10:18:00
--  
感谢指导,终于可以指定需求统计,谢谢