2017-08-10 39 views
-1

我有许多SSRS报告打印到专用Zebra Label打印机,其中打印机是用户的默认打印机。每个报告都传递一个参数:Number_Of_Copies。在调用此函数的应用程序中,Number_Of_Copies的值可以是1到任意数量的副本。不知何故,我需要制作一份报告,其中包含多个副本(带有分页符)和一个字段,指示该标签的序列号是:“Number_Of_copies的x”。这显然说起来容易做起来难。 SSRS报告本身(通过命令行调用)是否有办法执行此操作?需要SSRS中的代码来创建报告的多个序列化副本(标签)

+0

您可以添加一个如何打印这些报告的例子吗?你说这是通过命令行;你能展示你使用的代码吗?我怀疑告诉打印机打印多份而不是报告会更容易。 –

回答

0

这里是你如何能做到这一点...

哦,这是很罗嗦,但它实际上是很简单..

我们首先需要的是你的标签报告,我想你已经为了这个答案,我会把它叫做LabelA。 我们需要编辑此报告,以便它接受2个参数(CopiesCurrentCopy)。添加具有适当表达式的文本字段以显示此信息,例如

="Label " & Parameters!CurrentCopy.Value & " of " & Parameters!Copies.Value 

运行此报告并通过手工输入两个参数的数字来测试它的工作原理。一旦你知道这个工作正常,继续。

接下来,我们需要另一份报告将作为我们的循环,所以.... 创建一个新的报告,让我们把它叫做LabelA_Loop(我知道可怕的名字!)

LabelA_Loop,创建数据集并调用它dsLoop 设置数据集查询,以这样的事..

DECLARE @counter int = 1 
DECLARE @t TABLE (RowNum int) 

WHILE @Copies >= @counter 
    BEGIN 
     INSERT INTO @t SELECT @counter 
     SET @counter = @counter +1 
    END 

SELECT * FROM @t ORDER BY rownum 

(当然你可以用任何东西来创建数字列表甚至有一个大的数字表,但这个工程,是很容易做到。 ..)

此时,将根据dsLoop数据集的要求自动创建参数(@Copies)。

下一步,向报表中添加一个表。 接下来,将tablix(我们刚刚添加的表)的数据集属性设置为dsLoop 该表只需要一列宽,没有标题行,所以基本上我们只剩下一个“单元格”。删除行标题和最后两列,直到只剩下一个单元格。

在表格单元格中插入子报表并将subreport property设置为我们的标签报表LabelA。 在子报表的参数中,将Copies设置为您的Copies参数,将CurrentCopy设置为dsLoop数据集中的RowNum字段。

您需要调整单元格的大小来适应和设置分页符,但就是这样。循环报告采用参数Copies,数据集使用该参数来生成正确数量的记录。它将在数据集的每条记录中添加一行,每行将包含一个标签子报表,每个子报表将传递两个参数,即当前副本和总副本,这些副本又会在最终标签中呈现。