I have a report in MS Access with 4 image controls. In the format event of the detail section I have code that sets the picture property based on the values of fields in DAO.recordset. Below is an example of my code.
For i = 0 To 3
If Not rs.EOF Then
Me.Controls("img" & i).Picture = blobGet(rs!phBlobId)
rs.MoveNext
Else
Me.Controls("img" & i).Picture = ""
End If
Next i
Basically the rs!phBlobId field is a file name. The blobGet function returns the full path to the picture which then sets the picture property of the correct control in the detail section of my report.
I'm not sure all of the causes but under certain circumstances the pictures will not show up in the controls. I have a similar set up on a form and have no trouble at all there, I only have the issue when on a report.
One thing that seems to possibly be the cause is the size of the picture. If I insert a large picture (say over 5 megs) it sometimes won't show up. With different combination of pictures different ones show up.
I am open to both solutions to my problem as described above or to alternative ideas how to show these pictures on the report. One absolute requirement is that the pictures be set with VBA as the exact arrangement of the pictures varies based on an unrelated variable.
The solution I came up with was to simply resize the images using imageMagick. This actually provides me with a couple advantages. Not the least of which is a substantial performance improvement since I am dealing with smaller images.
Related
I have seen some mind-binding situations with SSRS reports in my few years of using it, and I've been able to design around most issues and get it to do everything I've been asked to do.
But apparently, not something extremely simple!
I'm using Visual Studio 2019 version 16.7.2 with the Microsoft SQL Server Reporting Services Designers
version 15.0.19124.0 installed. There's no data bound to the report, this is just a simple design concept.
I have a report that has a static custom page size (in centimetres), interactive size and no margins (12.8 x 17.8cm).
The body size is deliberately set to make it a two page report (2 x the page height).
'ConsumeContainerWhiteSpace' on the report properties is set to true.
Page 1 has an image, consuming the entire space of Page 1 (size of 12.8 x 17.8), with a Text box placed near the bottom right of the image (overlaying it, but not exceeding the width or height of the page, and is set to not grow).
Page 2 is exactly the same, with the content starting where Page 2 would and should start (0, 17.8). However, the Page 2 content is set to hidden (hidden = true, on both the image and the textbox).
When previewed, the report renders two pages, one of which is blank.
If I take the Page 2 content textbox off, and preview it, the report renders as one page (as I need it to).
The same issue occurs if I replace the textbox with a Rectangle or Tablix (the two objects I really need to use in this report as well as the textbox located where it is) and set them to hidden.
Moving any of these objects to the top of Page 2, still results in the same behaviour.
It seems that certain objects, despite being hidden, have space allocated that can't be 'rolled up / truncated / shrunk'. Is this 'by design behaviour'?
Is there some form of magic-witch-craftery I'm missing here to get this to work, or simply something I'm not understanding... ?
Thanks for reading!
Note: So far I have tried the 'Switch to inches, then back to centimeters' solution mentioned in other posts along these lines, have varied 'Keep together' properties, checked 'CanGrow' and 'CanShrink' property changes - all of which have not helped find a solution.
The report body should be set at most wide enough to fit on your output page and long enough to hold all your report items. When you want different items to appear on a new page, put them in a container with a page break set either before or after (whichever is most appropriate). This can also be handled in a data driven manner using page breaks on table groups.
There is no requirement to have white space within your report design to 'fill up' the rest of the page on the rendered report.
If you want anything to appear at the bottom of the report, simply put it in the footer section. If you want specific things to appear at the bottom of the page of different heights on different pages, that is more of a challenge and will usually require some clever data driven spacers within the report body.
I have an image stored in my database that is going to dynamically change between pages. However, what seems to be happening is that it takes the first image it runs into, and repeats it across all pages. Has anyone else ran into this?
I have used dynamic images before but haven't had this issue - though my images were not in a database.
What are you using for the Value of the image?
Is your image in a table so it goes through the dataset records? If your image isn't part of a table, it won't know to select different images. For instance, if I was showing a report of employees and had an avatar image of each employee, I would have the database image field as part of the query. The image would be inside the table and reference the image field. The image would change as the employee grouping changed from one person to the next.
If your paging isn't determined by something in your dataset, you'll have to come up with some logic to calculate which picture to show and when - probably using the global page number - Globals!PageNumber. That might be tricky with them in a table though.
I have a weird problem I have never seen before using Crystal Reports.
I built a complex PDF monthly report for a bank that generates over 200 pages. The specifications took months to adjust with the client but it works perfectly now, showing all the data it's supposed to, all sorted right and with the right headers.
But for some reason the report inserts quasi-blank pages rarely and seemingly randomly before it shows data. These pages aren't entirely blank, all my headers including group headers show, but no details. The correct data shows up a couple of pages later but these useless pages keep popping up in the report no matter what I do with Section Expert. To be clear the headers and the details aren't separated. The headers also display fine in the page with the right data, they just duplicate to the extra blank pages before that.
Here is a sample:
NO "insert blank page" box is checked in any of my sections except the uppermost level of data, which works fine, but these extra pages are not inserted at the end of each group for that level. They are inserted randomly sometimes right in the middle of a coherent section.
I also verified the "Keep Together" option, and it is checked for the 4 lowest levels including the details, so I considered data too big to fit on the same page with its headers but the probleme is rare, random and the data overflows perfectly when it does appear (as on page 3 in my example).
And checking all those boxes off didn't change anything.
There are no suppression formulas and the only suppressed sections are GH1 and GH2, but they are suppressed all the time, unconditionally. I tried adding a conditionnal suppression formula to the headers if there is no data, but the problem is, there is data. The headers just seem to be duplicated uselessly.
The problem doesn't seem tied to any specific change in header value. In my example it changes when the report hits Common Stock Equities for a certain portfolio but doesn't occur when another portfolio displays its Common Stock. And I check the data in my data source, everything is consistent between the rows of data that this happens to and those that don't.
I ran out of ideas on how to get rid of these extra pages. Anyone know what's happening in my report?
Thanks a bunch.
Try toggling 'Keep Group Together' for the groups to see if it has any effect. You'll find the option by right clicking on the group, choose 'Change Group' (to bring up the Group Expert), and on options tab.
This option is often overlooked since 'Keep Together' in the Section Expert is more visible.
(You may also want to look at turning off 'Keep Together' to see how that affects your report)
I've been fighting with SSRS for too long now on what should be a simple matter. I'm hoping someone can help me see a solution.
I have a report which has a number of profiles, and each profile has a large number of data sections. The data sections (various tables and charts) are not related to each other in any way other than that they "key" back to the parent profile id.
The goal (which seems simple) is to have a header on each page with the profile information, and then have the data sections (each formatted completely differently) laid out.
The first problem we encountered was that for some reason SSRS2008 does not allow a tablix cell to contain another tablix with a different dataset (why it can't just require a filter based on the parent grouping is beyond me). The recommended workaround for this shortcoming is to either combine all data into a giant dataset (not possible here, data sections are too numerous and varied) or to embed subreports and pass in the parameters. While option number two increases the "work" needed to print a large number of profiles, we proceeded to implement this and it does work.
The problem comes in on the main tablix (the one containing the subreports) that has a static row header group set with "RepeatOnNewPage = true". This setting allows the header to show on every page as desired... except for subreports the span multiple pages, where the header is incorrectly ommitted.
For some reason, when the subreport spans multiple pages, the header of the parent tablix is not repeated! This is driving me insane as it would seem that a couple bad design decisions in SSRS has put me in a situation where I can't create the report I want... headers works without subreports, but I need subreports in order to "join" the data sections to the profile.
This would seem to be a simple and common requirement... after all, it's a report that is being migrated from a decades old reporting system. I've scoured StackOverflow and Google without success... I've seem a number of questions/answers about page breaks, but nothing that suggests a solution to this problem with subreports.
I'm posting this in case I'm missing something. If anyone has any suggestions at all, it would be much appreciated.
A very clean and simple way to repeat the column header on each page
http://www.a2zmenu.com/Blogs/BI/Tablix-headers-not-repeating-in-SSRS-2008.aspx
We've solved our problem... although not in the most ideal way.
The Page Header (of the "master" report, not the subreports) seems to be the only way to consistently have a header section.
We implemented a solution based in large part on this blog posting:
Maintaining State in Reporting Services 2008
We modified slightly from the blog post, removing "id" from the methods and including a GUID to ensure the report values are not mixed up even if the user runs several copies of the report at the same time. (When using shared variables, remember that they are global to the report running across execution instances and across users on the report server, so a lot of care needs to be taken when they are used!)
In the report body we have a hidden text block that calls:
=Code.SetValue("xxx",Fields!Field1.Value) & Code.SetValue("yyy",Fields!Field2.Value)
and in the report page header we reference these as (for example):
=Code.GetValue("xxx")
This works because the body is calculated before the page header, even for Page 1.
Still, in the end it is a hack for something that should be in Microsoft's product, given that they have poured years of development into this product! Why we cannot have nested tablix's and easier to use headers is beyond me... again this is upgrading a report from a program from the early 90's which did all this without problem. At the very least, give us report variables that can be retrieved and set as the report is processed!
Regardless, things are as they are... we've tested the solution with shared variables and it seems to be working very well. We're going to run stress tests to make sure it's implemented correctly, I'll post something here if we find any further problems.
(And if anyone knows of some other way to get consistent header rows on pages, even when there are detail rows with large heights, please share...)
We have faced exactly the same problem during implementation of customer demands on SSRS Reports,
And did try a lot of things which all of them resulted with failure.
In our case,
Main Report has 4 subreport. Each SubReport should be started in new page. And also when new subreport begins, page header should be changed dynamically based on Subreport in body in current page.
Also one of SubReports which was SubReport3 has another case. Basically Main Report was running based on Dealer level. But Customer wants SubReport3 to run for each SubDealer related with #Dealer parameter. Also Customer wants to see each SubDealer data started in New page inside SubReport3.
As a result, we found different workaround as follows.
We created Page Header to Main Report. (Report Menu -> Add Page Header)(As #codinginthevoid said it is most consistent way)
We putted 4 subreports inside separate tablix. We added new column to each tablix. That column in each tablix visiblity = false, width of that column can be as small as possible, then created placeholder inside of that column, wroted down expression as follows:
If expression is in Tablix1, expression was ="Tablix1", if in Tablix2 then "Tablix2" and etc.
Then started design page header for Tablix1, each report item in pageheader that was putted for Tablix1 has visibility expression as follows:
=ReportItems!Tablix1_HiddenTextbox1.Value IS NOTHING
then applied same thing for Tablix2 and etc.
In the end, there were lots of textbox in PageHeader of report and some of them position was completely same, overlapped, But when reports is being rendered, each of those textboxes is being shown it is related page with related subreport.
I have encountered the same problem as well. What I found was that the way to solve the issue was to de-normalise the data, adding a 'Record Type' field to identify whether the row was a parent or a child.
There were two sub-tables in my tablix, both displaying detail data linked to the outer grouping. If I set the headers of the sub-tables to repeat on every page (using the Advanced arrow > Static Properties > KeepTogether = True, KeepWithGroup = After, RepeatOnNewPage = True) then one of the sub-tables would display correctly, however the parent table's repeating header would just disappear.
To keep a long story short, this was a massively annoying problem to solve. The solution is simple, it worked for me, but may not work for everyone.
Linked below is a SSRS2008 example RDL that connects to localhost and has an example of the problem I had and also the solution I implemented. Please feel free to use it if you find it useful!
(I would've posted it on here but Stack Overflow fails for code blocks it seems)
http://www.sqlservercentral.com/Forums/Topic1111567-1633-1.aspx?Update=1
I'm using a table on my report to present the data. Since it was a lot of data and I wanted to print the report on a A4 page, I split each row into 3 different rows.
My problem is when the report goes to the second page, I want it to break before or after the 3 rows.
example:
name age
address
contact
name age
address
contact
name age
address
* page break *
contact
this is what normally happens. I want to ensure that the page break only happens on the lines.
There are multiple strategies to follow:
The KeepTogether is useful in this case
If you want it to fit on one page only try adjusting page margins, padding, font size, line height to make the report render more compactly
Another alternative is to create a table group on the person, and from the group properties (edit group) check the page break at end property. this way you can have each group on a separate page
Hope this helps
I'm ended up creating a subreport to represent each item.
I looked for the KeepTogether property but that's probably only for reporting services 2008 (I'm using 2005).
If you have the table in a subreport, you must also Right Click -> Format Object -> Uncheck Keep object together.
This was the step that did it for me after I unchecked Keep object together on the table and the subreport details.
I had the same problem, tried 'Keep together' and it didn't work. After a long time of changing and trying many things the one thing that did the job was reducing the bottom margin of a page.