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