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

Printing SSRS report to label printer x times

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

这是我的情况:

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

我可以从数据库中检索数据了。当我需要打印时,我的问题就开始了。假设我有四个部分,p1 p2 p3 和 p4。所有标签都具有相同的格式:

作业编号、标记编号、客户、宽度(英寸)、长度(英寸)(全部来自 SQL 数据库)

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

打印时,我需要为 p1 发送 12 "copies" 个标签,为 p2 发送 25 个 "copies",为 p3 发送 321 个“副本”,为 p4 发送 35 个 "copies"。

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

我还没有任何打印代码,因为我不知道该怎么做!!有谁知道我可以做到的方法。

我确实在这里找到了一篇关于 SO 的文章:Print a report Multiple times, (SSRS reporting services) 但我不确定如何让它工作,如果它可以)满足我的需要。

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

非常感谢任何帮助!

我必须做完全相同的事情,我想出的解决方案是遍历 select 并根据数量中的项目数合并相同的 select。通过这样做,您应该为 P1 获得 12 行,因为那是盒子的数量,所有数据应该相同,除了 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 上分组并在组的每个实例之间创建一个分页符,这样您就可以根据数量获得页数。

感谢 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

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