如果这是一个重复的问题,我很抱歉,如果是的话,请告诉我答案。
以下是我的情况:
我有一个使用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,如果它有区别的话。
任何帮助都是非常感谢的!
发布于 2017-09-29 13:59:22
多亏了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这可能不是最好的,但它绝对有效!
发布于 2017-09-27 18:57:26
我必须做同样的事情,我想出的解决方案是循环通过select,并通过数量中的项目数将相同的选择结合起来。这样做,您应该得到12行的P1,因为这是数量的框,所有的数据应该是相同的,除了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进行分组,并在组的每个实例之间创建一个分页,这样就可以根据数量获得页数。
https://stackoverflow.com/questions/46454056
复制相似问题