I have a report formatted to print on a 8-1/2x11 sheet up labels. But need some of the labels to print more than once.
I made a BAQ Report that allows our Shipper to enter an order number and select which line items to print labels for. Some of the lines need multiple copies of the label.
Take the following order as an example:
ignore multiple labels for a moment, the BAQ prints as a single report, with 4 labels (one for each line in the SO)
Selecting 5 copies during printing would give that many of every label (a total of 20). I want to end up with (12) labels. Basically, print row 1 (5x), row 2 (5x), row 3 (1x) and row 4 (1x).
Currently they run the report for each line that requires multiple copies independently, using the Print dialog’s “Number of Copies”
Forgot to mention how the number of copies of a particular line gets to the report process.
A user defined field in the OrderDtl table will hold the number of labels to print. An updateable BAQ will be used to enter/update the qty to print.
Data sent to the BAQ Report
So I’d like a report row to print
Just to make sure I understand that…
My BAQ doesn’t change, but rather a new dataset is created at SSRS runtime, with extra rows created by the Union of the original DS with itself, using the created ID field as the counter.
You just modify the existing Dataset on the report but yeah basically
I don’t know if it’s relevant since I don’t use SSRS, but I do the exact thing you are describing using custom code, bartender and a customization (that’s fired by a BPM)
The SSRS parameter-based approach that Jose proposed is solid, but if I were to recommend a pseudo-“way the system was designed” logic approach, I would tie to a method running server side code, for instance BO.Update in your updatable dashboard.
foreach row in your dataset, you want to make a BO connection to the report service contract, use the .GetNewParameters() method, then in the parameters, modify the RptPrinterSettings column to include “Copies=” + variable from your dataset. I actually use this method to conditionally auto-print a number of pages, reports, report styles, etc. from the customers or contents of the pack during shipment.
Edit: I forgot to mention that this ends with the service.SubmitToAgent() call which will put the print in the immediate run queue to the specified network printer. If you need more information on what the parameters look like, check out the SysTaskParams table. This does take a good amount of customization background.
Wouldn’t setting the number of copies make that many for every record in the print job’s dataset?
Because we use multiple labels on a single 8-1/2x11 sheet, I need it to be one print job, but with certain records (i.e. individual labels) printed multiple times.
Ah, I get it. My suggestion would result in the labels being printed on separate page using separate jobs.
You’ll probably want to keep your updatable dashboard and in SSRS script do something like creating a count variable and repeating the group while the count variable is less than the field data, then resetting to zero before going to the next group. You could probably do this with subreport within a group with the parameter passing in as the field value. If your in-house skill is on the SSRS side, then this is definitely the way to go.
I know this thread is aged a bit, but I’m trying to get something similar accomplished.
- Does anyone have a working example of the modified SSRS dataset that I can look over?
- To achieve this… do you need the subreport that is described in the above link… or does modifying just the the dataset in your original SSRS achieve the repeated rows?
Any help is much appreciated… Thanks.
There was a developer at our company before me that created a UD table with 100 rows. In each row’s number01 field, there was an incremented value starting with 1. So you end up with 100 rows numbered 1 through 100. They then added that UD table in the RDD or BAQ if it was a BAQ report by joining it to the desired table on DesiredTable.Company = UDTable.Company and UDTable.Number01 <= @NumberOfCopies… which could be passed via a BAQ report option or just statically set, or as Calvin mentioned above, you could use a value from another table.
In the report they just added it to the data set and then added a parent group on the UDTable.Number01 field and set a page break inbetween each instance of a group.
Not sure how practical it is or efficient, but it was an interesting way to make it work.
I ended up using what @utaylor described.
I have a UD table (UD01) with sequential values of 1 - 1000
My BAQ has a Left join to UD01, with the following relations
So the dataset the BAQ creates will have a qty of
ProdLabelCount_c rows for each OrderDtl record.
For example, if OrderDtl.ProdLabelCount_c is 5, then 5 rows are returned from UD01. This creates 5 duplicate rows for this OrderDtl record
Thank you Calvin and Utah… We were able to achieve our the desired results using a UD number reference table in our Test database. Appreciate the guidance. I’ll still keep hacking at the other method where we pass one record to the rdl and parse it our from there.