需要 SSRS 中的代码来创建报表的多个序列化副本(标签)



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

这是你可以做到的...

哦,这很罗嗦,但实际上非常简单。

我们需要的第一件事是你的标签报告,我假设你有,为了这个答案的目的,我会称之为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数据集使用该参数生成正确数量的记录。它将在数据集中为每条记录添加一行,每行将包含一个标签子报表,并且每个子报表将传递两个参数,即当前副本和总副本,这些参数又在最终标签中呈现。

最新更新