首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印SSRS报表到标签打印机x次

打印SSRS报表到标签打印机x次
EN

Stack Overflow用户
提问于 2017-09-27 17:39:09
回答 2查看 371关注 0票数 0

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

以下是我的情况:

我有一个使用SQL server数据库作为数据源的ASP.NET网站。最终用户希望将标签打印到斑马标签打印机。(旧打印机Zebra 110 110XiIIIPlus 200 Old)我可以在终端用户系统上安装这台打印机,或者它可以从web服务器上运行,这并不重要,它是一台网络打印机。

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

作业#,标记#,客户,宽度(In),长度(In)(它们都来自SQL DB)

唯一在查询中没有打印的字段是qty。Mark #是部件号(不知道为什么它不只是称为部件#)。现在假设p1的qty为12,p2的qty为25,p3的qty 321,p4的qty为35。

当它打印时,我需要发送p1标签的12份“副本”,p2的25份,p3的321份,p4的35份。

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

我还没有任何打印代码,因为我不知道如何做到这一点!!有人知道我能做什么吗。

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

最后一个注意事项是,我在后面的代码中使用了VB.Net,如果它有区别的话。

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-29 13:59:22

多亏了SO用户newGuy的帮助,我才能想出如何做到这一点。这是我能找到的解决办法。

代码语言:javascript
复制
    --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

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

票数 0
EN

Stack Overflow用户

发布于 2017-09-27 18:57:26

我必须做同样的事情,我想出的解决方案是循环通过select,并通过数量中的项目数将相同的选择结合起来。这样做,您应该得到12行的P1,因为这是数量的框,所有的数据应该是相同的,除了Page#,应该自动增加1,直到数量结束。

结果如下:

代码语言:javascript
复制
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进行分组,并在组的每个实例之间创建一个分页,这样就可以根据数量获得页数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46454056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档