【问题标题】:SSRS Reports - force table to expand to bottom of pageSSRS 报告 - 强制表格展开到页面底部
【发布时间】:2014-02-18 21:56:38
【问题描述】:

我正在尝试创建一个发票类型报告,其中有一个标题、带有表格的主体(包括总计部分)和页脚。

我遇到的问题是,主体中的表格高度取决于从我的 SPROC 返回的行数,因此如果数据不多,表格将占据页面中间的一小部分“总计”和“免责声明”在页面底部附近结束(理想情况下,希望将其放在页脚上方)。

我已经看到解决此问题的指南,使用在 SPROC 中添加空白(null)行的一般方法,强制表格大于预期,从而强制总计和免责声明行接近底部页面。

我已经实现了这个解决方案,但是有一些问题。

但是,这种方法的问题在于,该逻辑仅在表中的每一行仅占 1 行的情况下才有效(即简短描述,因此该行不会溢出到下一行)。一旦行有多行,行的高度就会改变,并且由于高度不是 1 行的倍数(即单行大小为 1,双行应该大小为 2,而是大小为 1.5 或其他东西),我无法考虑我应该在 SPROC 中添加多少行。

我尝试了另一种方法,将我需要的行与主表分开(这本身就给我带来了问题 - 无法在报告中计算总数,但我想我可以通过计算 SPROC 本身中的总数来解决这个问题)并且一直隐藏到最后一页。

这个方法会很好,只是用这个方法,空白总是出现,阻止表格扩展到那个区域。

我已经包含一个指向 imgur 的链接来描述我当前的问题,这应该更容易理解。

必须有一种更简单的方法来强制表格占据整个空间。

【问题讨论】:

    标签: sql reporting-services


    【解决方案1】:

    所有这些都可以在报表设计本身中实现。以下是你所知道的:

    • 页面高度 (P)
    • 静态数据的高度 (S)
    • 标题的高度 (H)
    • 数据行的高度 (R)
    • 数据行数 (C)
    • 页脚高度 (F)

    所以你可以计算出页面上剩余空间有多大:P - ((C*R) + S + F + H)

    当我解决我的问题时,我意识到当页面上剩余的空间太小而无法容纳页脚时,我需要两个“间隔”;间隔 1 填充了第 1 页的其余部分,而间隔 2 是第 2 页的可用空间 - P - (S + F + H)。

    因此,您需要报表中的隐藏部分来计算高度,并在任何其他详细信息行下方为分隔符设置两个详细信息行。

    我在GitHub 上创建了一个演示解决方案,它展示了这个“pin-to-bottom”功能以及重置组的页码、数据驱动的页眉/页脚、标签翻译和国际格式(页面大小, 数字格式等)。

    为此,请查看销售发票 5。

    【讨论】:

    • 问题是我正在寻找一个答案,其中我的订单项没有固定的高度,而是包含多行文本
    【解决方案2】:

    最后,我找到了一个非常接近我需要的解决方案,并且涉及使用隐藏元素。 (类似于 Dan Andrews 的建议——但满足了我的需要)

    首先,我已将总计包含在报告的页脚中,以便它始终位于底部。

    如下图所示:

    在小计页脚中,我放置了一条消息“在下一页继续”,这也是一个隐藏字段 - 这样我就可以在显示超过 1 页的任何报告上显示此消息(因此用户知道有报告超过 1 页,因此空白看起来还不错)。

    为了隐藏总计字段,我在“隐藏”属性中有以下表达式:

    =iif(Globals!PageNumber=Globals!TotalPages,false,true)
    

    对于“继续”字段:

    =iif(Globals!PageNumber=Globals!TotalPages,true,false)
    

    现在的问题是,由于页脚无法访问报表正文中的表格,因此页脚不知道表格中的汇总值是什么。

    为了解决这个问题,我创建了一个“总计”部分,它是表格的一部分,用于完成我需要在页脚显示的所有计算。

    我在页脚中为每个需要访问的文本框命名,如下所示:

    在相应的页脚元素上,我有这样的表达式:

    现在页脚包含总计,无论表格有多大,总计字段始终显示在底部(这是我最初的问题 - 页脚被放置在它想去的任何地方),但需要稍作权衡在任何不是最后一页的页面上都有一个空白区域。我在那里输入了“继续下一页”消息,它显示报告还有更多页面,因此看起来正在使用空白区域。

    这是一个单页示例:

    这是一个多页示例:

    【讨论】:

      【解决方案3】:

      您可以将“总计行”和术语添加到页脚并显示网格,如果它是报告的最后一页,如下所示:SSRS show value only on last page in body of report 通过切换“隐藏”属性。

      【讨论】:

      • 嗨,丹,感谢您的回复,我认为这与我所追求的有点不同。我不希望总数只显示在页面的末尾 - 而且还显示在页面的最底部,如我粘贴的图像链接所示。一种方法是在页脚上放置一个文本框并在 SPROC 本身上进行总计计算。但是,当我尝试这种方法时,隐藏文本框是不够的,因为它仍然占用了文本框原本所在的空间 - 我希望它根本不占用任何空间。
      【解决方案4】:

      我的解决方案的基本前提是将“隐藏”元素合并到报告正文中。此元素可以动态增长或缩小,以改变最后一个发票行和付款详细信息部分之间的距离,因此似乎将付款详细信息“固定”在报告的底部......

      http://blogs.adatis.co.uk/blogs/harding/archive/2013/02/01/absolute-positioning-of-report-elements-in-ssrs.aspx

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
      • 嘿感谢您的链接,但不幸的是我已经尝试过(使用 SQL 而不是 SSRS)无济于事。我的问题是该行可以增长(我无法阻止它增长),这与行计算有关。您提供的链接似乎还说发票行高不能增长,否则将无法正常工作。如果有办法使行以某种方式增长(1 行 = 1px,2 行 = 2px 而不是 1.3px 等),那么这仍然是相关的,但我不知道这是否可能。
      猜你喜欢
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多