我有许多 SSRS 报告打印到专用的 Zebra 标签打印机,其中打印机是用户的默认打印机。 每个报告都传递一个参数:Number_Of_Copies。 在调用 this 的应用程序中,可以有 1 到任意数量的副本作为Number_Of_Copies的值。 不知何故,我需要制作一份报告,其中包含指示的副本数量(中间有分页符(和一个指示标签是哪个序列号的字段:"x of Number_Of_copies"。 这显然说起来容易做起来难。 SSRS 报告本身(通过命令行调用(中是否有办法执行此操作?
这是你可以做到的...
哦,这很罗嗦,但实际上非常简单。
我们需要的第一件事是你的标签报告,我假设你有,为了这个答案的目的,我会称之为LabelA
。 我们需要编辑此报告,使其接受 2 个参数(Copies
和CurrentCopy
(。添加具有适当表达式的文本字段以显示此信息,例如
="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
数据集使用该参数生成正确数量的记录。它将在数据集中为每条记录添加一行,每行将包含一个标签子报表,并且每个子报表将传递两个参数,即当前副本和总副本,这些参数又在最终标签中呈现。