以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]统计表的疑问,请大侠帮助  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=24856)

--  作者:sunbrain
--  发布时间:2012/10/25 1:02:00
--  [求助]统计表的疑问,请大侠帮助

对统计表琢磨了很久,最近才有点眉目,发现需要做成什么样子,先做好,再依照葫芦画瓢那样会好些。

现在我有个问题:

Dim b As New CrossTableBuilder("统计表3",DataTables("产品表"))
b.HGroups.AddDef("大类别") \'添加小类别列用于水平分组
b.HGroups.AddDef("小类别") \'添加小类别列用于水平分组
b.VGroups.AddDef("进货日期") \'添加进货列用于垂直分组
b.Totals.AddDef("进价小计") \'添加进价小计列用于统计
b.Totals.AddDef("售价小计") \'添加售价列用于统计
b.Totals.AddDef("数量") \'添加数量列用于统计
b.Build \'生成统计表
MainTable = Tables("统计表3") \'打开生成的统计表
生成的统计表是这样的

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

 

 

 

 

这个图中,进货日期列,全部变成了数字(似乎是月份,我是按照日期统计的),不知道怎么更正,这个是问题一。

我希望大类别那里能进行合并,这个怎么更改呢?谢谢

 

 

我希望做成的结果是这样的

 

 

 

 

 

 


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

 

 


 


--  作者:sunbrain
--  发布时间:2012/10/25 1:03:00
--  

这个是我做的源文件,希望大家帮助一下我,谢谢

 

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


--  作者:lin_hailun
--  发布时间:2012/10/25 9:17:00
--  
 只能够在生产报表以后再对表头进行处理了,楼主,代码如下。

Dim g As New CrossTableBuilder("统计表", DataTables("产品表"))
g.HGroups.AddDef("大类别")
g.HGroups.AddDef("小类别")
g.VGroups.AddDef("进货日期", DateGroupEnum.Year, "{0}年")
g.VGroups.AddDef("进货日期", "{0}月")
g.Totals.AddDef("进价小计", "进价小计")
g.Totals.AddDef("售价小计", "售价小计")
g.Totals.AddDef("数量", "数量")
g.Build()

With DataTables("统计表")
    For Each dc As DataCol In .DataCols
        If dc.Caption Like "####年_*" Then
            dc.Caption = dc.Caption.SubString(0, 5) & dc.Caption.SubString(6)
        End If
    Next
    .BuildHeader()
End With

MainTable = Tables("统计表")

--  作者:sunbrain
--  发布时间:2012/10/25 10:54:00
--  
以下是引用muhua在2012-10-25 9:00:00的发言:

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

 

交叉汇总,代码在项目事件的 AfterOpenProject 中。

muhua老师:

您做的这个确实实现了按进货日期进行统计的结果。但是仍有两个问题没有解决,表头需要重新进行处理;另外大类别也需要进行合并处理;

还是非常感谢您的指导。


--  作者:sunbrain
--  发布时间:2012/10/25 10:57:00
--  
以下是引用lin_hailun在2012-10-25 9:17:00的发言:
 只能够在生产报表以后再对表头进行处理了,楼主,代码如下。

Dim g As New CrossTableBuilder("统计表", DataTables("产品表"))
g.HGroups.AddDef("大类别")
g.HGroups.AddDef("小类别")
g.VGroups.AddDef("进货日期", DateGroupEnum.Year, "{0}年")
g.VGroups.AddDef("进货日期", "{0}月")
g.Totals.AddDef("进价小计", "进价小计")
g.Totals.AddDef("售价小计", "售价小计")
g.Totals.AddDef("数量", "数量")
g.Build()

With DataTables("统计表")
    For Each dc As DataCol In .DataCols
        If dc.Caption Like "####年_*" Then
            dc.Caption = dc.Caption.SubString(0, 5) & dc.Caption.SubString(6)
        End If
    Next
    .BuildHeader()
End With

MainTable = Tables("统计表")
 
 
 
lin_hailun老师:您的方法思路很好,但是有一个问题是按照进货日期,而不是按照进货日期的月份进行统计的。
另外如何把大类别也进行合并呢?
非常感谢


--  作者:sunbrain
--  发布时间:2012/10/25 11:17:00
--  

综合两位老师的结果,我改了muhua的代码,对统计结果进行表头处理:

With DataTables("统计表2")
    For Each dc As DataCol In .DataCols
        If dc.Caption Like "####年_*" Then
            dc.Caption = dc.Caption.SubString(0, 5) & dc.Caption.SubString(6)
        End If
    Next
    .BuildHeader()
End With

MainTable = Tables("统计表2")

 

 


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

 If dc.Caption Like "####年_*" Then
            dc.Caption = dc.Caption.SubString(0, 5) & dc.Caption.SubString(6)
        End If
代码实在是不清楚功能,所以没有办法把日期进行合并(类似2012年_10月_10日这样的三层表头),还请大家帮助解释,谢谢

[此贴子已经被作者于2012-10-25 11:17:50编辑过]

--  作者:lin_hailun
--  发布时间:2012/10/25 11:45:00
--  
 统计,处理,再设置。

Dim g As New CrossTableBuilder("统计表", DataTables("产品表"))
g.HGroups.AddDef("大类别")
g.HGroups.AddDef("小类别")
g.VGroups.AddDef("进货日期", DateGroupEnum.Year, "{0}年")
g.VGroups.AddDef("进货日期", "{0}月")
g.VGroups.AddDef("进货日期", "{0}日")
g.Totals.AddDef("进价小计", "进价小计")
g.Totals.AddDef("售价小计", "售价小计")
g.Totals.AddDef("数量", "数量")
g.Build()

With DataTables("统计表")
    For Each dc As DataCol In .DataCols
        If dc.Caption Like "####年_*" Then
            Dim idx As Integer = dc.Caption.IndexOf("月")
            dc.Caption = dc.Caption.SubString(0, 5) & dc.Caption.SubString(6, idx-5) & dc.Caption.SubString(idx+2)
        End If
    Next
    .BuildHeader()
End With

With Tables("统计表")
    .MergeMode = MergeModeEnum.Standard
    .MergeCols.Add("大类别")
    .MergeCols.Add("小类别")
    .AllowMerge = True
End With

--  作者:sunbrain
--  发布时间:2012/10/25 20:40:00
--  

lin_hailun:感谢您!

根据您提供的方法,有个小问题还没有解决。

进货时间是这样的

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

多层表头出来应该是按照日期分的,而现在日期的取值出现了错误,现在不知道怎么修改,还请帮助,谢谢

 


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

--  作者:lin_hailun
--  发布时间:2012/10/26 9:31:00
--  
 呵呵,是汇总代码写错了。

Dim g As New CrossTableBuilder("统计表", DataTables("产品表"))
g.HGroups.AddDef("大类别")
g.HGroups.AddDef("小类别")
g.VGroups.AddDef("进货日期", DateGroupEnum.Year, "{0}年")
g.VGroups.AddDef("进货日期", "{0}月")
g.VGroups.AddDef("进货日期", DateGroupEnum.Day, "{0}日")
g.Totals.AddDef("进价小计", "进价小计")
g.Totals.AddDef("售价小计", "售价小计")
g.Totals.AddDef("数量", "数量")
g.Build()

With DataTables("统计表")
    For Each dc As DataCol In .DataCols
        If dc.Caption Like "####年_*" Then
            Dim idx As Integer = dc.Caption.IndexOf("月")
            dc.Caption = dc.Caption.SubString(0, 5) & dc.Caption.SubString(6, idx-5) & dc.Caption.SubString(idx+2)
        End If
    Next
    .BuildHeader()
End With

With Tables("统计表")
    .MergeMode = MergeModeEnum.Standard
    .MergeCols.Add("大类别")
    .MergeCols.Add("小类别")
    .AllowMerge = True
End With
[此贴子已经被作者于2012-10-26 9:32:00编辑过]

--  作者:sunbrain
--  发布时间:2012/10/26 10:59:00
--  

很感谢您的帮助,问题解决了。

实话说,这部分确实比较困难,帮助文件中也比较含糊,只能暂时套用了。

遇到难的再啃这部分吧