MonkeyPie
asked on
Access 2010 - report with subreport - dynamically change sort order with a group
I have an Access 2010 report with a subreport. It lists jobs within division, then gives division totals.
The user selects the sort option (via a form). Within each division, the user can sort by date, job value, or job number.
The parent report just lists division totals. It is the subreport that lists the job details.
In the subreport I GROUP on division, to give me division header and footer for totals, etc.
How can I set the sort order programmatically if I use the grouping functionality of reports?
The user selects the sort option (via a form). Within each division, the user can sort by date, job value, or job number.
The parent report just lists division totals. It is the subreport that lists the job details.
In the subreport I GROUP on division, to give me division header and footer for totals, etc.
How can I set the sort order programmatically if I use the grouping functionality of reports?
ASKER
Thank you LSMConsulting.
I tried your suggestion and I get an interesting error. My main report Open Event has the following code:
You will see that I don't want the sub report to print if user has selected SUMMARY option.
Before I added the SORT code this all worked correctly. But now I get error 2455 "You entered an expression that has an invalid reference to property Form/Report" on the line:
But this is OK:
What am I doing wrong here?
I tried your suggestion and I get an interesting error. My main report Open Event has the following code:
Private Sub Report_Open(Cancel As Integer)
If Forms!frmJobSuccessOptions.fraSummaryOption = 2 Then
Me.srptJobBidSuccess.SourceObject = ""
Else
Me.srptJobBidSuccess.SourceObject = "srptJobBidSuccess"
' depending on options chosen in form - set up filters in sub report
If Forms!frmJobSuccessOptions.fraPrintWorkloadOptions = 1 Then 'ALL
Me.srptJobBidSuccess.LinkChildFields = ""
Me.srptJobBidSuccess.LinkMasterFields = ""
ElseIf Forms!frmJobSuccessOptions.fraPrintWorkloadOptions = 2 Then 'selected group
Me.srptJobBidSuccess.LinkChildFields = "GroupDivision"
Me.srptJobBidSuccess.LinkMasterFields = "GroupDivision"
ElseIf Forms!frmJobSuccessOptions.fraPrintWorkloadOptions = 3 Then 'selected controller
Me.srptJobBidSuccess.LinkChildFields = "Controller"
Me.srptJobBidSuccess.LinkMasterFields = "Controller"
End If
' sub report sort order determined by option on form
If Forms!frmJobSuccessOptions.fraOrderBy.Value = 1 Then 'Job date
Me.srptJobBidSuccess.Report.OrderBy = "GroupDivision, [Date], JobNo, Controller"
ElseIf Forms!frmJobSuccessOptions.fraOrderBy.Value = 2 Then 'job number
Me.srptJobBidSuccess.Report.OrderBy = "GroupDivision, JobNo, [Date], Controller"
ElseIf Forms!frmJobSuccessOptions.fraOrderBy.Value = 3 Then 'job value
Me.srptJobBidSuccess.Report.OrderBy = "GroupDivision, JobValue desc, JobNo, [Date], Controller"
End If
Me.srptJobBidSuccess.Report.OrderByOn = True
End If
End Sub
The user has various options to choose from:
1. detail report or summary version
2. for all divisions in company, or selected division, or selected 'controller'
3. sort order by date, or job no, or job value (descending order)
2. for all divisions in company, or selected division, or selected 'controller'
3. sort order by date, or job no, or job value (descending order)
You will see that I don't want the sub report to print if user has selected SUMMARY option.
Before I added the SORT code this all worked correctly. But now I get error 2455 "You entered an expression that has an invalid reference to property Form/Report" on the line:
Me.srptJobBidSuccess.Report.OrderBy = "GroupDivision, JobValue desc, JobNo, [Date], Controller"
In the Immediate window I get same error when I try any of the following:
?me!srptJobBidSuccess.Repo rt.Name
?me.srptJobBidSuccess.Repo rt.Filter
?me.srptJobBidSuccess.Repo rt.Name
?me.srptJobBidSuccess.Repo
?me.srptJobBidSuccess.Repo
But this is OK:
?me.srptJobBidSuccess.Sour ceObject.n ame
Report.srptJobBidSuccess
Report.srptJobBidSuccess
What am I doing wrong here?
Further investigation reveals that this may be an unreliable method (at best) to handle the OrderBy in your subreport.
A better solution would be to have the subreport look at an open form (for example the Forms!frmJobSuccessOptions form) to get the sort order. To do that, add a textbox to that form and then use code like this in the Open event of the Subreport:
Me.OrderBy = Forms!frmJobSuccessOptions .txSROrder By
Me.OrderByOn = True
So assuming i have a textbox on frmJobSuccessoptions named "txSROrderBy", this would work, and would be more reliable.
A better solution would be to have the subreport look at an open form (for example the Forms!frmJobSuccessOptions
Me.OrderBy = Forms!frmJobSuccessOptions
Me.OrderByOn = True
So assuming i have a textbox on frmJobSuccessoptions named "txSROrderBy", this would work, and would be more reliable.
ASKER
Your suggestion to try me.orderby=xxx didn't work. I got an error.
I also tried:
1. Allen Browne's idea of setting me.grouplevel(1).controlso urce="JobD ate" --> error 2191
2. Then tried to set subreport grouplevel in parent report --> error 2455
So, then I tried another idea. In the subreport I created a sort level under my DIVISION group level an used an expression for the SORT BY field:
This doesn't give an error, but it doesn't sort at all!
I like this last option best of all, but why won't it sort my subreport detail records?
I also tried:
1. Allen Browne's idea of setting me.grouplevel(1).controlso
2. Then tried to set subreport grouplevel in parent report --> error 2455
So, then I tried another idea. In the subreport I created a sort level under my DIVISION group level an used an expression for the SORT BY field:
=Choose([Forms]![frmJobSuc cessOption s].[fraOrd erBy],"Job Date","Pro jectNumber ","Project Value")
as the sort level control source.This doesn't give an error, but it doesn't sort at all!
I like this last option best of all, but why won't it sort my subreport detail records?
ASKER
Sorry the cycle of these posts is so slow, but we are in different time zones. (Australia for me!)
I'll post a sample of how I did this some time ago...
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I have put this aside for now, but think I am going to got with the option to (via code) open sub report in design view, change sort order and filter, save, and then open properly via parent report.
You can set the OrderBy property on the subreport in the main report's open event:
Me.YourReport.nameOfYoursu
Me.YourReport.nameOfYoursu
Note you can also change the Field used by the grouping in the report:
http://allenbrowne.com/ser-33.html