以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何动态增加列并按要求统计?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=33038)

--  作者:zerov
--  发布时间:2013/5/12 14:56:00
--  如何动态增加列并按要求统计?
有三表,《回款表》、《进度应收》、《开票》,三表都可通过“合同编号”列关联(但没关联),都有金额、日期列,随着项目进展,会不断增加日期值,如何动态生成下图的统计表:即按月统计相关表并汇总到一个临时表,用combin做了好久,一直没成功。

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

主要难在动态增加列,如本月是201305,下月就要统计到201306了,再下月就要统计到201307,通过窗口按钮统计到一个临时表中

--  作者:zerov
--  发布时间:2013/5/12 20:17:00
--  
刚做了个简单的例子,总和能统计出来,就是不知按所有的月份动态增加,哪位大师帮忙看看。

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
例子:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:从明细统计.table



--  作者:zerov
--  发布时间:2013/5/12 21:48:00
--  
用combin不能动态增加月份进行统计,代码如下:Dim bd1 As New GroupTableBuilder("统计表1",DataTables("收款"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("项目名称") \'根据型号分组
bd1.Groups.AddDef("月份","收款_月份")  \'根据型号分组
bd1.Totals.AddDef("金额","收款_金额") \'对金额进行统计
dt1 = bd1.BuildDataSource()
Dim bd2 As New GroupTableBuilder("统计表2",DataTables("应收"))
Dim dt2  As fxDataSource
bd2.Groups.AddDef("项目名称") \'根据型号分组
bd2.Groups.AddDef("月份","应收_月份") \'根据型号分组
bd2.Totals.AddDef("金额","应收_金额") \'对金额进行统计
dt2 = bd2.BuildDataSource()
Dim bd3 As New GroupTableBuilder("统计表3",DataTables("开票"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("项目名称") \'根据型号分组
bd3.Groups.AddDef("月份","开票_月份") \'根据型号分组
bd3.Totals.AddDef("金额","开票_金额") \'对金额进行统计
dt3 = bd3.BuildDataSource()
dt1.Combine("项目名称",dt2,"项目名称") \'将销售统计数据组合到进货统计数据
dt1.Combine("项目名称",dt3,"项目名称") \'将退货统计数据组合到进货统计数据
Tables("窗口2_table1").DataSource =dt1

--  作者:zerov
--  发布时间:2013/5/12 22:14:00
--  
如何将月份移到垂直统计列呢?(即每个项目只有唯一一行)

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


--  作者:zerov
--  发布时间:2013/5/12 22:34:00
--  
基本成功,一个人慢慢研究的感觉真的很好,感谢UHUA老师,要会举一反三,把COMBINE代码中的GROUPTABLEBULID改为CROSS,就行了,只不过,显示不是很友善没有多层表头,还得高人指点指点:
效果如下:

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
代码如下:

Dim bd1 As new  CrossTableBuilder("统计表1",DataTables("收款"))
Dim dt1 As fxDataSource
bd1.hGroups.AddDef("项目名称") \'根据型号分组
bd1.vGroups.AddDef("月份","收款_月份")  \'根据型号分组
bd1.Totals.AddDef("金额","收款_金额") \'对金额进行统计
dt1 = bd1.BuildDataSource()
Dim bd2 As New crossTableBuilder("统计表2",DataTables("应收"))
Dim dt2  As fxDataSource
bd2.hGroups.AddDef("项目名称") \'根据型号分组
bd2.vGroups.AddDef("月份","应收_月份") \'根据型号分组
bd2.Totals.AddDef("金额","应收_金额") \'对金额进行统计
dt2 = bd2.BuildDataSource()
Dim bd3 As New crossTableBuilder("统计表3",DataTables("开票"))
Dim dt3 As fxDataSource
bd3.hGroups.AddDef("项目名称") \'根据型号分组
bd3.vGroups.AddDef("月份","开票_月份") \'根据型号分组
bd3.Totals.AddDef("金额","开票_金额") \'对金额进行统计
dt3 = bd3.BuildDataSource()
dt1.Combine("项目名称",dt2,"项目名称") \'将销售统计数据组合到进货统计数据
dt1.Combine("项目名称",dt3,"项目名称") \'将退货统计数据组合到进货统计数据
dt1.show("统计表1")
[此贴子已经被作者于2013-5-12 22:35:15编辑过]

--  作者:don
--  发布时间:2013/5/12 23:47:00
--  
Dim dt1,dt2,dt3 As fxDataSource
Dim dts As fxDataSource() ={dt1,dt2,dt3}
Dim v1 As String() ={"收款","应收","开票"}
Dim g As  CrossTableBuilder
Dim n1 As Integer
Dim s1,s2,SQL As String
s2 =" Union All Select 项目名称,金额 From{@}"

For Each s1  In v1
    g = New CrossTableBuilder("统计", DataTables(s1))
    g.HGroups.AddDef("项目名称")
    g.VGroups.AddDef("日期", DateGroupEnum.Year, s1 & "_{0}年")
    g.VGroups.AddDef("日期", "{0}月")
    g.Totals.AddDef("金额", "金额")
    g.HorizontalTotal = True
    dts(n1) = g.BuildDataSource()
    SQL+ = s2.replace("@",s1)
    n1=n1+1
Next

Dim g1 As New GroupTableBuilder("统计",SQL.Substring(11),"")
g1.Groups.AddDef("项目名称")
g1.Totals.AddDef("金额","总计")
dt1 = g1.BuildDataSource()

Dim nns As String = "项目名称"
dts(0).Combine(nns,dts(1),nns)
dts(0).Combine(nns,dts(2),nns)
dts(0).Combine(nns,dt1,nns)
Dim t1 As Table = Tables("窗口2_table1")
t1.DataSource =dts(0)
With t1.DataTable
    .DataCols("合计").Caption = "收款_小计"
    .DataCols("合计1").Caption = "应收_小计"
    .DataCols("合计2").Caption = "开票_小计"
    .BuildHeader()
End With

--  作者:zerov
--  发布时间:2013/5/13 7:11:00
--  回复:(don)Dim dt1,dt2,dt3 As fxDataSourceDim dt...
谢谢指点,完美解决。

再请教一个问题:为什么我将这段代码中的窗口2改窗口3,就报错呢?(窗口3同样有按钮与table1)

--  作者:zerov
--  发布时间:2013/5/13 7:26:00
--  
将此例移到其它项目,出现下面错误,估计哪儿做错了?

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


--  作者:don
--  发布时间:2013/5/13 11:23:00
--  
如你採用外部數據源,需要指出數據源,這應該不用人家幫你的,否則還是認真看幾次幫助,弄清原理才是王道!
Dim g1 As New GroupTableBuilder("统计",SQL.Substring(11),"")     
--  作者:zerov
--  发布时间:2013/5/13 12:26:00
--  回复:(don)如你採用外部數據源,需要指出數據源,這應...
谢谢大师指点,谨记您的教诲!