Foxtable(狐表)用户栏目专家坐堂 → [求助]统计表的疑问,请大侠帮助


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

主题:[求助]统计表的疑问,请大侠帮助

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


加好友 发短信
等级:小狐 帖子:383 积分:2439 威望:0 精华:0 注册:2011/12/3 22:19:00
[求助]统计表的疑问,请大侠帮助  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:383 积分:2439 威望:0 精华:0 注册:2011/12/3 22:19:00
  发帖心情 Post By:2012/10/25 1:03:00 [只看该作者]

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

 

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


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


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2012/10/25 9:00:00 [只看该作者]

用户已被锁定

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:383 积分:2439 威望:0 精华:0 注册:2011/12/3 22:19:00
  发帖心情 Post By:2012/10/25 10:54:00 [只看该作者]

以下是引用muhua在2012-10-25 9:00:00的发言:

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

 

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

muhua老师:

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

还是非常感谢您的指导。


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


加好友 发短信
等级:小狐 帖子:383 积分:2439 威望:0 精华:0 注册:2011/12/3 22:19:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:383 积分:2439 威望:0 精华:0 注册:2011/12/3 22:19:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:383 积分:2439 威望:0 精华:0 注册:2011/12/3 22:19:00
  发帖心情 Post By:2012/10/25 20:40:00 [只看该作者]

lin_hailun:感谢您!

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

进货时间是这样的

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

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

 


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

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By: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编辑过]

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