[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
experiments on grouped reports (gb.report2): bugs and unexpected/undesirable behaviours
[Thread Prev] | [Thread Next]
- Subject: experiments on grouped reports (gb.report2): bugs and unexpected/undesirable behaviours
- From: taitetao@xxxxxx
- Date: Fri, 13 Mar 2026 18:30:11 +0000
- To: user@xxxxxxxxxxxxxxxxxxxxxx
Hi folks,
I did quite some experimenting with reports (gb.report2 component) to understand the components' behaviours and to be able to implement grouped reports with databases in gambas. My basic approach were ReportVBoxes containing ReportVBoxes to represent the different group levels in a nested design (see attached little experimental project).
I ran into several bugs as well as unexpected and undesirable behaviours, that I want to explain and discuss here.
1) In any group level starting from level 2, the Index (repeat count) gets a wrong value if the DataCount of the same report container is set to 1. In this case the Index is not 0 (for the first and only repetition) as would be correct and expected, but actually it gets the value of the Index of the parent container! (cf. attached example project)The workaround for this problem is rather annoying as you can't access the correct DataCount of the parent container in the Data-Event of a report control. (see below)
2) Problems with starting new pages within groups: if a new page is reached, the report container is repeated on the next page (which is obviously sensible). That causes the Index (repeat count) of the container to start over with 0. This is not useful for grouped reports if data (resp. specific rows of results) should be linked to the Index. By starting over with 0 the content would be repeated completely and possibly recursively - ending in an infinite loop.
3) In order to properly use grouped reports obviously the DataCount AND the size of the container of each level and sublevels must be dynamically adjusted to the according amount of subgroups or records. This requirement is very difficult to achieve because the order of painting nested report controls starts with the innermost controls and containers. Therefore the space needed for sublevel containers is adjusted only once while layouting a page, using the DataCount only of the first repetition of the (sublevel) containers. You can see this effect in the attached project.
Adjusting the DataCount in any repetition of a sublevel DOES affect the number of repetitions but NOT the size of the containers any more! That is a fatal problem in case the DataCount is increased to a number higher than in the first repetition, as it again will cause an inifinite loop! (You can test that in the example project.)
Some sort of "autoresize" would be needed here...
The only workaround for this I could think of so far is figuring out the maximum amount of records in a sublevel beforehand and assigning this maximum to its DataCount before layouting the page (which is actually rather messing up the layout with a lot of empty space!). This way its size is sufficient for all repetitions and excession is prevented.
I did quite some experimenting with reports (gb.report2 component) to understand the components' behaviours and to be able to implement grouped reports with databases in gambas. My basic approach were ReportVBoxes containing ReportVBoxes to represent the different group levels in a nested design (see attached little experimental project).
I ran into several bugs as well as unexpected and undesirable behaviours, that I want to explain and discuss here.
1) In any group level starting from level 2, the Index (repeat count) gets a wrong value if the DataCount of the same report container is set to 1. In this case the Index is not 0 (for the first and only repetition) as would be correct and expected, but actually it gets the value of the Index of the parent container! (cf. attached example project)The workaround for this problem is rather annoying as you can't access the correct DataCount of the parent container in the Data-Event of a report control. (see below)
2) Problems with starting new pages within groups: if a new page is reached, the report container is repeated on the next page (which is obviously sensible). That causes the Index (repeat count) of the container to start over with 0. This is not useful for grouped reports if data (resp. specific rows of results) should be linked to the Index. By starting over with 0 the content would be repeated completely and possibly recursively - ending in an infinite loop.
3) In order to properly use grouped reports obviously the DataCount AND the size of the container of each level and sublevels must be dynamically adjusted to the according amount of subgroups or records. This requirement is very difficult to achieve because the order of painting nested report controls starts with the innermost controls and containers. Therefore the space needed for sublevel containers is adjusted only once while layouting a page, using the DataCount only of the first repetition of the (sublevel) containers. You can see this effect in the attached project.
Adjusting the DataCount in any repetition of a sublevel DOES affect the number of repetitions but NOT the size of the containers any more! That is a fatal problem in case the DataCount is increased to a number higher than in the first repetition, as it again will cause an inifinite loop! (You can test that in the example project.)
Some sort of "autoresize" would be needed here...
The only workaround for this I could think of so far is figuring out the maximum amount of records in a sublevel beforehand and assigning this maximum to its DataCount before layouting the page (which is actually rather messing up the layout with a lot of empty space!). This way its size is sufficient for all repetitions and excession is prevented.
4) Another strange thing that I don't understand is the following: The DataIndex of the parent report container in the Data-Event of a report control can be accessed by Last.Parent.Parent.Parent.DataIndex (3 times "Parent"), which is unintuitive. It actually seems to be another bug as it is obviously the parent of the parent container that holds the DataIndex (I also checked this fact by checking the Last.Parent.Parent.Parent.Tag!).
I know, all this sounds rather complicated,... but I'm searching for a good way to create grouped reports. I couldn't find one yet! By the way, all needed workarounds are slowing down the performance tremendously.Do you have any better ideas for grouped reports? Or are there ideas how to alter the algorithms of the gb.report2 component?
I'm looking forward to your ideas and answers. Please excuse my lengthy post...
Best regards,
Florian
<salt FCKGM-0001-A431-9BE8-4F57> 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 </salt>