Foxtable(狐表)用户栏目专家坐堂 → 报表代码咨询


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

主题:报表代码咨询

美女呀,离线,留言给我吧!
hch
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:110 积分:1170 威望:0 精华:0 注册:2012/9/12 15:30:00
报表代码咨询  发帖心情 Post By:2012/12/19 14:05:00 [只看该作者]

现有一个测试Table文件,文件有一数据表,表内有不同年份、不同月份、不同科别中录入不同项目统计数据。按帮助文件可以产生同期对比数据,但此中报表的格式不是我想要的报表样式,我想通过此表生成一个如附件:对比表中样式的统计报表,此种统计报表样式编写代码怎么写,请给予具体指导。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.table

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:对比表.xls


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


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2012/12/19 15:46:00 [只看该作者]

Dim dtb As New DataTableBuilder("工作量完成情况与上年同期对比")
dtb.AddDef("科室", Gettype(String), 32)
dtb.AddDef("项目", Gettype(String), 32)
dtb.AddDef("本年度人次(2012年)", Gettype(Integer))
dtb.AddDef("上年度人次(2011年)", Gettype(Integer))
dtb.AddDef("增减数)", Gettype(Integer))
dtb.AddDef("增减率", Gettype(Double))
dtb.AddDef("本年度金额", Gettype(Double))
dtb.AddDef("上年度金额", Gettype(Double))
dtb.AddDef("增减数.", Gettype(Double))
dtb.AddDef("增减率.", Gettype(Double))
dtb.Build()
MainTable= Tables("工作量完成情况与上年同期对比")
Dim f As New Filler
f.SourceTable = DataTables("工作量") '指定数据来源
f.SourceCols = "科别,项目" '指定数据来源列
f.DataTable = DataTables("工作量完成情况与上年同期对比") '指定数据接收表
f.DataCols = "科室,项目" '指定数据接收列
f.Filter = "科别 is not null"
f.Fill() '填充数据
Tables("工作量完成情况与上年同期对比").AutoSizeCols()
For Each r As Row In Tables("工作量完成情况与上年同期对比").Rows
Dim ff As String = "科别 = '" & r("科室") & "' And 项目 =  '" & r("项目") & "' "
r("上年度人次(2011年)") = DataTables("工作量").Compute("Sum(人次)", ff & " And 时间 < #12/31/2011# ")
r("本年度人次(2012年)") = DataTables("工作量").Compute("Sum(人次)", ff & "  And 时间 > #1/1/2012#  And 时间 < #12/31/2012# ")
'其他自己计算吧
Next

 


 


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/19 15:56:00 [只看该作者]

 发觉excel报表的公式识别有些问题,这个Bug还是没有改掉。

 当有多个公式的时候,再进行直接统计,会出现错乱。所以只能使用标记的方式一个一个写入excel报表了。

 太麻烦,我就不写了。希望狐爸能修改这个Bug。

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


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2012/12/19 17:12:00 [只看该作者]

2楼代码加上合并:

With Tables("工作量完成情况与上年同期对比")
    .MergeMode = MergeModeEnum.Standard
    .MergeCols.Clear()
    .MergeCols.Add("科室")
    .MergeSort = "科室"
    .AllowMerge = True
End With

 

还是用临时表处理数据后,再生成Excel来得方便、准确。


 回到顶部
美女呀,离线,留言给我吧!
hch
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:110 积分:1170 威望:0 精华:0 注册:2012/9/12 15:30:00
  发帖心情 Post By:2012/12/20 11:44:00 [只看该作者]

 按 e-png提示编写代码,发现部分数据统计不出来,是否我写的代码不完全对,增减率(增减率=(本期-上期)/上期*100%)的代码、表达式怎么写?我不会写烦请写一下,还有一个问题,按你的代码统计的表没有显示出我想要的统计表样式(如附件中的样式),另外我想要的是表中已输入多个连续年份不同月份的数据,怎样才可以统计出不同两个连续年份,不同月份时间段的对比统计数据,Table文件上传和代码如下:

Dim dtb As New DataTableBuilder("工作量完成情况与上年同期对比")
dtb.AddDef("科室", Gettype(String), 32)
dtb.AddDef("项目", Gettype(String), 32)
dtb.AddDef("本年度人次", Gettype(Integer))
dtb.AddDef("上年度人次", Gettype(Integer))
dtb.AddDef("增减数 ", Gettype(Integer))
dtb.AddDef("增减率 ", Gettype(Double))
dtb.AddDef("本年度金额", Gettype(Double))
dtb.AddDef("上年度金额", Gettype(Double))
dtb.AddDef("增减数", Gettype(Double))
dtb.AddDef("增减率", Gettype(Double))
dtb.Build()
MainTable= Tables("工作量完成情况与上年同期对比")
Dim f As New Filler
f.SourceTable = DataTables("工作量") '指定数据来源
f.SourceCols = "科别,项目" '指定数据来源列
f.DataTable = DataTables("工作量完成情况与上年同期对比") '指定数据接收表
f.DataCols = "科室,项目" '指定数据接收列
f.Filter = "科别 is not null"
f.Fill() '填充数据
Tables("工作量完成情况与上年同期对比").AutoSizeCols()
For Each r As Row In Tables("工作量完成情况与上年同期对比").Rows
    Dim ff As String = "科别 = '" & r("科室") & "' And 项目 =  '" & r("项目") & "' "
    r("上年度人次") = DataTables("工作量").Compute("Sum(人次)", ff & " And 时间 < #12/31/2011# ")
    r("本年度人次") = DataTables("工作量").Compute("Sum(人次)", ff & "  And 时间 > #1/1/2012#  And 时间 < #12/31/2012# ")
    r("上年度金额") = DataTables("工作量").Compute("Sum(金额)", ff & " And 时间 < #12/31/2011# ")
    r("本年度金额") = DataTables("工作量").Compute("Sum(金额)", ff & "  And 时间 > #1/1/2012#  And 时间 < #12/31/2012# ")
Next
DataTables("工作量完成情况与上年同期对比").DataCols("增减率").Expression = ""
For Each dr As DataRow In DataTables("工作量完成情况与上年同期对比").DataRows
    dr("增减率") = dr("本年度人次")/ dr("上年度人次")
    dr("增减数") = dr("本年度人次") - dr("上年度人次")
    dr("增减率") = dr("本年度金额")/ dr("上年度金额")
    dr("增减数") = dr("本年度金额") - dr("上年度金额")
    DataTables("工作量完成情况与上年同期对比").DataCols("增减率").Expression = "本年度人次 /上年度人次"
    DataTables("工作量完成情况与上年同期对比").DataCols("增减数").Expression = "本年度人次 -上年度人次 "
    DataTables("工作量完成情况与上年同期对比").DataCols("增减率").Expression = "本年度金额 /上年度金额 "
    DataTables("工作量完成情况与上年同期对比").DataCols("增减数").Expression = "本年度金额 -上年度金额 "
    DataTables("工作量完成情况与上年同期对比").DataCols("增减率").SetFormat("#0.00%")
Next    

请您费心指点

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:测试1.table


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/20 14:02:00 [只看该作者]

 代码这样写吧,测试过了。不过对于各年各月的对比表,自己想想办法吧,变的只是日期。

Dim dtb As New DataTableBuilder("工作量完成情况与上年同期对比")
dtb.AddDef("科室", Gettype(String), 32)
dtb.AddDef("项目", Gettype(String), 32)
dtb.AddDef("本年度人次", Gettype(Integer))
dtb.AddDef("上年度人次", Gettype(Integer))
dtb.AddDef("人次_增减数", Gettype(Integer), "本年度人次 -上年度人次", "增减数")
dtb.AddDef("人次_增减率", Gettype(Double), "本年度人次 / 上年度人次", "增减率")
dtb.AddDef("本年度金额", Gettype(Double))
dtb.AddDef("上年度金额", Gettype(Double))
dtb.AddDef("金额_增减数", Gettype(Double),"本年度金额 -上年度金额", "增减数")
dtb.AddDef("金额_增减率", Gettype(Double), "本年度金额 /上年度金额", "增减率")
dtb.Build()
MainTable = Tables("工作量完成情况与上年同期对比")
Tables("工作量完成情况与上年同期对比").AutoSizeCols()

For Each arys As String() In DataTables("工作量").GetUniqueValues("科别 is not null", "科别", "项目")
    Dim ff As String = "科别 = '" & arys(0) & "' And 项目 =  '" & arys(1) & "'"
    Dim ndr As DataRow = DataTables("工作量完成情况与上年同期对比").AddNew
    ndr("科室") = arys(0)
    ndr("项目") = arys(1)
    ndr("上年度人次") = DataTables("工作量").Compute("Sum(人次)", ff & " And  时间 >= #1/1/2011#  And 时间 < #1/1/2012# ")
    ndr("本年度人次") = DataTables("工作量").Compute("Sum(人次)", ff & "  And 时间 >= #1/1/2012#  And 时间 < #1/1/2013# ")
    ndr("上年度金额") = DataTables("工作量").Compute("Sum(金额)", ff & " And  时间 >= #1/1/2011#  And 时间 < #1/1/2012# ")
    ndr("本年度金额") = DataTables("工作量").Compute("Sum(金额)", ff & "  And 时间 > #1/1/2012#  And 时间 < #1/1/2013# ")
Next

DataTables("工作量完成情况与上年同期对比").DataCols("人次_增减率").SetFormat("#0.00%")
DataTables("工作量完成情况与上年同期对比").DataCols("金额_增减率").SetFormat("#0.00%")
    

 回到顶部
美女呀,离线,留言给我吧!
hch
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:110 积分:1170 威望:0 精华:0 注册:2012/9/12 15:30:00
  发帖心情 Post By:2012/12/21 16:57:00 [只看该作者]

谢谢大家指导,lin_hailun你能不能再费心给我写一下统计各年各月对比表中的日期代码。我是初学者,为了便于工作需要,一边工作,一边在努力抽时学习狐表,能否给个具体的提示。

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/21 17:12:00 [只看该作者]

 其实,楼主,你只需要修改日期范围,就可以统计不同的了。

    ndr("上年度人次") = DataTables("工作量").Compute("Sum(人次)", ff & " And  时间 >= #1/1/2011#  And 时间 < #1/1/2012# ")
    ndr("本年度人次") = DataTables("工作量").Compute("Sum(人次)", ff & "  And 时间 >= #1/1/2012#  And 时间 < #1/1/2013# ")
    ndr("上年度金额") = DataTables("工作量").Compute("Sum(金额)", ff & " And  时间 >= #1/1/2011#  And 时间 < #1/1/2012# ")
    ndr("本年度金额") = DataTables("工作量").Compute("Sum(金额)", ff & "  And 时间 > #1/1/2012#  And 时间 < #1/1/2013# ")

 回到顶部
美女呀,离线,留言给我吧!
hch
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:110 积分:1170 威望:0 精华:0 注册:2012/9/12 15:30:00
  发帖心情 Post By:2012/12/22 9:21:00 [只看该作者]

你的这个办法是可以实现,需每次修改日期范围,对一些实际应用者使用不现实。我想知道的是在窗口或者其他什么位置设置一个时间段按钮,输入需统计的年、月份后点击这个按钮就可统计出不同年月份的数据表,另外此统计表在EXCEL模板可以实现吗,模板编码怎么写?

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/22 9:31:00 [只看该作者]

 把窗口设计一章看完,自己捣鼓一下怎么使用窗口。

http://www.foxtable.com/help/topics/0698.htm

 把统计表导出是很轻易的事情。

http://www.foxtable.com/help/topics/0559.htm

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