将SSRS报告打印到标签打印机x次

时间:2017-09-27 17:39:09

标签: asp.net vb.net ssrs-2008-r2

如果这是一个重复的问题,我很抱歉,请指出答案。

以下是我的情况:

我有一个ASP.NET Web表单站点,它使用SQL Server数据库作为其数据源。最终用户想要将标签打印到Zebra标签打印机。 (旧打印机Zebra 110XiIIIPlus-200dpi)我可以在最终用户系统上安装此打印机,或者它可以从网络服务器运行,不管它是网络打印机。

我可以从数据库中检索数据确定。我需要打印时才会出现问题。让我们说我有四个部分,p1 p2 p3& P4。所有标签都具有相同的格式:

Job#,Mark#,Customer,W​​idth(in),Length(in)(全部来自SQL DB)

在查询中提取但未打印的唯一字段是数量。 Mark#是部件号(不知道为什么它不被称为部件#)。现在假设p1的数量为12,p2的数量为25,p3的数量为321,p4的数量为35。

打印时我需要发送12"副本"标签为p1,25"副本"对于p2,321和#34;副本为p3,以及35"副本"对于p4。

如何为要打印的p1发送12个标签,然后使用下一个记录的数据并发送24个标签等等?

我还没有任何打印代码,因为我无法弄清楚如何做到这一点!有谁知道我能做到的一种方式。

我确实在SO上发现了一篇文章:Print a report Multiple times, (SSRS reporting services)但是我不知道如何使它成功,如果它可以的话)我的需要。

最后一点,我在后面的代码中使用VB.Net,如果它有所作为。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我必须做同样的事情,我想出的解决方案是循环选择和联合使用数量中的项目数相同的选择。通过这样做你应该得到12行P1,因为那是盒子的数量,所有数据应该是相同的,除了Page#应该自动增加1直到数量结束。

结果如下:

Job# | Mark# | Quantity | Page
------------------------------
1    |  P1   |   12     |   1
1    |  P1   |   12     |   2
1    |  P1   |   12     |   3
1    |  P1   |   12     |   4
.....
1    |  P1   |   12     |   12

然后,您将分组Mark#和Page以及在组的每个实例之间创建分页符,这样就可以根据数量获得页数。

答案 1 :(得分:0)

感谢SO用户newGuy的帮助,我能够弄清楚如何做到这一点。这是我提出的解决方案。

    --Drop Temp tables if exists
If OBJECT_ID('tempdb..#Labels') Is Not Null Drop Table #Labels
If OBJECT_ID('tempdb..#Pieces') Is Not Null Drop Table #Pieces

--Declare variables
Declare @MarkNumber varchar(10)
Declare @Qty int
Declare @RowCount int = 0

Create Table #Labels
(
    vjobnum varchar(12),
    marknumber varchar(25),
    customer varchar(25),
    pwidth decimal(18,4),
    plength decimal(18,4)
)
Create Table #Pieces
(
    marknum varchar(25),
    totqty int,
    customer varchar(50),
    jobnum varchar(12),
    plength decimal(18,4),
    pwidth decimal(18,4)
)

Insert Into #Pieces(marknum, totqty, customer, jobnum, plength, pwidth)
Select od.marknum, od.qty, oh.customer, oh.van_job_num, od.bbin, od.cbin From tbl_order_detail od Join tbl_order_head oh On oh.ordernum = od.ordernum Where od.ordernum = (Select Distinct ordernum From tbl_BearingBarRpt)

Set @RowCount = (Select COUNT(*) From #Pieces)
While @RowCount > 0 --Exists (Select marknum From #piecelabels)
Begin
    Select @MarkNumber = (Select a.marknum From (Select ROW_NUMBER() OVER (Order By marknum) as RowNumbers, *From #Pieces) a Where a.RowNumbers = @RowCount)
    Select @Qty = (Select totqty From #Pieces Where marknum = @MarkNumber)
    While @Qty > 0
        Begin
            Insert Into #Labels(vjobnum, marknumber, customer, pwidth, plength)
            Select pc.jobnum, pc.marknum, pc.customer, pwidth, plength
            From #Pieces pc
            Where pc.marknum = @MarkNumber

            --Decrement the Qty counter
            Set @Qty = @Qty - 1

        End

    Set @RowCount = @RowCount - 1
End

它可能不是最好的,但绝对有效!