SSRS报告 - 强制表扩展到页面底部

Han*_*nho 9 sql reporting-services

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

我得到的问题是,主体中的表高度取决于从我的SPROC返回的行数,因此如果没有太多数据,该表将占据页面中间的一小部分"总计"和"免责声明"在页面底部附近没有结束(理想情况下,想把它放在页脚的上方).

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

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

然而,这种方法的问题在于逻辑只能假设表中的每一行只占用1行(即简短的描述,因此该行不会溢出到下一行).一旦行有多行,行的高度就会改变,并且由于高度不是1行的倍数(即单行的大小为1,双行应该是大小2,而是大小为1.5或者其他),i不能考虑我应该在SPROC中添加多少行.

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

这种方法很好,除了使用这种方法,空白空间总是显示出来,阻止表格扩展到该区域.

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

必须有一种更简单的方法来强迫桌子占据整个空间.

小智 6

所有这些都可以在报表设计中实现.这就是你所知道的:

  • 页面高度(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的详细信息,请参阅.


Han*_*nho 3

最后,我选择了一个非常接近我需要的解决方案,并且涉及使用隐藏元素。(类似于丹·安德鲁斯的建议 - 但满足了我的需要)

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

如下所示:

报告是什么样的

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

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

=iif(Globals!PageNumber=Globals!TotalPages,false,true)
Run Code Online (Sandbox Code Playgroud)

对于“继续”字段:

=iif(Globals!PageNumber=Globals!TotalPages,true,false)
Run Code Online (Sandbox Code Playgroud)

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

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

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

在相应的页脚元素上,我有如下表达式: 设置表达式

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

这是一个单页示例:

单页示例

这是一个多页示例:

多页示例