2017-08-10 162 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,數據集使用該參數來生成正確數量的記錄。它將在數據集的每條記錄中添加一行,每行將包含一個標籤子報表,每個子報表將傳遞兩個參數,即當前副本和總副本,這些副本又會在最終標籤中呈現。