打印SSRS报告给标签打印机X Times



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

这是我的情况:

我有一个ASP.NET Web表单网站,该网站使用SQL Server数据库作为其数据源。最终用户希望将标签打印到斑马标签打印机。(旧打印机Zebra 110xiiiplus-200DPI)我可以在最终用户系统上安装此打印机,也可以从Web服务器运行,这无关紧要,它是网络打印机。

我可以从数据库中检索数据。我的问题始于我需要打印时。可以说我有四个部分,P1 P2 P3&P4。所有标签都具有相同的格式:

job#,mark#,客户,宽度(in),长度(in)(全部来自SQL DB)

唯一在查询中拉出而未打印的字段是数量。mark#是零件号(不知道为什么它不仅仅称为零件#)。现在假设P1的数量为12,P2的数量为25,P3的数量为321,P4的数量为35。

打印时,我需要发送P1的标签的12个"副本",P2的25个"副本"副本,P3的副本和P4的35个"副本"。

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

我还没有任何打印代码,因为我无法弄清楚如何做!有人知道我可以做的方式吗?

我确实在此处找到了一篇文章:多次打印报告(SSRS报告服务),但我不确定如何使它起作用,甚至可以)。

最后一个注释我正在使用vb.net在后面的代码中有所不同。

任何帮助都非常感谢!

我必须做完全相同的事情,我提出的解决方案是通过选择数量的项目数量循环循环,并结合相同的选择。通过这样做,您应该为P1获得12行,因为那是盒子的数量,所有数据都应相同,除了应该自动增加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

然后,您将在标记#和页面上进行分组,并在组的每个实例之间创建一个页面断开,这将使您根据数量获得页数。

借助SO so sue 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

它可能不是最好的,但肯定是有效的!

最新更新