将 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
它可能不是最好的,但绝对有效!
如果这是一个重复的问题,我很抱歉,如果是,请指出答案。
这是我的情况:
我有一个 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
它可能不是最好的,但绝对有效!