Foxtable(狐表)用户栏目专家坐堂 → Table打印时如何实现页合计和总合计?


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

主题:Table打印时如何实现页合计和总合计?

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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
Table打印时如何实现页合计和总合计?  发帖心情 Post By:2008/10/1 8:51:00 [只看该作者]

Table打印时(不是报表打印),能否在每一页的最下面一行打印数值列的页合计?以及在最后一页打印数值列的总合计?,这种需求是很经常遇到的。注意当打印的是选定行(不是全部行)时,总合计应合计实际打印的行,而不是表的全部行。

[此贴子已经被作者于2008-10-1 22:17:36编辑过]

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


加好友 发短信
等级:一尾狐 帖子:445 积分:3025 威望:0 精华:0 注册:2008/9/13 10:49:00
  发帖心情 Post By:2008/10/2 9:18:00 [只看该作者]

(个人理解)要自已做报表,猜不太可能在表打印中能实现:
    表的打印设置中只支持几个特殊编码


 

[此贴子已经被作者于2008-10-2 9:35:53编辑过]

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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2008/10/2 22:38:00 [只看该作者]

尽管Table的打印不像报表打印那么复杂,但在每一张加个页合计,在最后一页加一个总合计,这在实际中是很常用的功能!让系统自动生成应该也没有太大的难度,但若系统不提供这个功能,打印出来再手工用计算器来加,估计工作量可不小啊!希望贺老师认真考虑!

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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2008/10/6 10:39:00 [只看该作者]

贺老师,这个问题好不好实现?

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


加好友 发短信
等级:超级版主 帖子:485 积分:2996 威望:0 精华:10 注册:2008/9/12 14:37:00
  发帖心情 Post By:2008/10/6 11:16:00 [只看该作者]

一切皆有可能,我做了一个简单的例子,每页打印30行,每页最后加上数量汇总,你可以参考一下:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目23.table

[此贴子已经被作者于2008-10-6 11:31:21编辑过]

[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
贺老六
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:485 积分:2996 威望:0 精华:10 注册:2008/9/12 14:37:00
  发帖心情 Post By:2008/10/6 11:30:00 [只看该作者]

文件的报表代码有一些问题,用下面的:

Dim doc As New PrintDoc
Dim tb as Table = Tables("订单")
Dim ColNames As String() = New String(){"产品", "日期", "数量"}
Dim PageRows As integer = 30 '每页打印30行
Dim Pages As Integer = Math.Ceiling(tb.Rows.Count / PageRows) '获得总页数
Dim Sum As Integer
For Page As integer = 0 To Pages -1
    Dim StartRow As Integer = Page * PageRows
    Dim EndRow As integer =  Math.Min((Page + 1) * PageRows - 1,tb.Rows.Count - 1)
    Sum = 0
    Dim rt As New prt.RenderTable
    For c As Integer = 0 To ColNames.Length - 1
        rt.Cells(0,c).Text = ColNames(c)
    Next
    For r As integer = StartRow to EndRow
        Sum = Sum + tb.rows(r)("数量")
        For c As Integer = 0 To ColNames.Length - 1
            rt.Cells(r - StartRow + 1, c).Text = tb.Rows(r)(ColNames(c))
        Next
    Next
    rt.Style.Gridlines.All = New prt.Linedef(Color.Gray)
    doc.Body.Children.Add(rt)
    Dim rx As New prt.RenderText
    rx.Text = "数量合计: " & Sum
    rx.Style.Spacing.Top = 5
    If EndRow < tb.Rows.Count - 1 Then
        rx.BreakAfter = prt.BreakEnum.Page
    End If
    doc.Body.Children.Add(rx)
Next
doc.Preview()

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


加好友 发短信 F6
等级:狐精 帖子:3036 积分:19223 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2008/10/6 12:29:00 [只看该作者]

不错,学习了!

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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2008/10/6 13:03:00 [只看该作者]

以下是引用贺老六在2008-10-6 11:30:00的发言:
文件的报表代码有一些问题,用下面的:

Dim doc As New PrintDoc
Dim tb as Table = Tables("订单")
Dim ColNames As String() = New String(){"产品", "日期", "数量"}
Dim PageRows As integer = 30 '每页打印30行
Dim Pages As Integer = Math.Ceiling(tb.Rows.Count / PageRows) '获得总页数
Dim Sum As Integer
For Page As integer = 0 To Pages -1
    Dim StartRow As Integer = Page * PageRows
    Dim EndRow As integer =  Math.Min((Page + 1) * PageRows - 1,tb.Rows.Count - 1)
    Sum = 0
    Dim rt As New prt.RenderTable
    For c As Integer = 0 To ColNames.Length - 1
        rt.Cells(0,c).Text = ColNames(c)
    Next
    For r As integer = StartRow to EndRow
        Sum = Sum + tb.rows(r)("数量")
        For c As Integer = 0 To ColNames.Length - 1
            rt.Cells(r - StartRow + 1, c).Text = tb.Rows(r)(ColNames(c))
        Next
    Next
    rt.Style.Gridlines.All = New prt.Linedef(Color.Gray)
    doc.Body.Children.Add(rt)
    Dim rx As New prt.RenderText
    rx.Text = "数量合计: " & Sum
    rx.Style.Spacing.Top = 5
    If EndRow < tb.Rows.Count - 1 Then
        rx.BreakAfter = prt.BreakEnum.Page
    End If
    doc.Body.Children.Add(rx)
Next
doc.Preview()

    试过了,老六一出手,肯定可以实现,但我的意思不是这样。我的建议是,只要点菜单上的打印时,就自动合计当前表的当前视图的每个数值列的页合计和总合计,别让我们再写30多行的代码了,只需要对表增加一项属性“打印时是否打印页合计”就可以了,这样既可以自动实现,也不会影响不需要打印合计的情况!这是很常用、使用频率很高的功能,不应该让每个用户在每次使用时都反复编写这几十行代码,直接加在系统的功能上,您的一次辛苦,方便了所有人,节约了所有人的时间,岂不更好吗?


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/10/6 13:06:00 [只看该作者]

问题不是这么简单,这个是必须写代码的。
代码是通用的,复制过来,改改列名就行,当然能自己理解就好。

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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2008/10/6 13:16:00 [只看该作者]

以下是引用狐狸爸爸在2008-10-6 13:06:00的发言:
问题不是这么简单,这个是必须写代码的。
代码是通用的,复制过来,改改列名就行,当然能自己理解就好。

  没有太明白,既然代码是通用的,只是引用的列名不同,写到系统中应该是很简单的,怎么会不能加到系统中呢?


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