Solved

Passing shared variable from subreport back to main

Posted on 2013-11-17
10
761 Views
Last Modified: 2013-11-19
I have a main report running several sub reports.  I would like the value of a sum field (actually a sum of a formula field) calculated in the sub report to be passed back to the main for use in another formula in the main.

In main I have a formula field called subtotal_percap

WhilePrintingRecords;
Shared NumberVar subtotal_percap;
 
In the sub I have the identically named formula field,

WhilePrintingRecords;
Shared NumberVar subtotal_percap;
subtotal_percap := 99.99;

I have tried a few things, including this last line - 99.99, just to see if the 99.99 can get passed back to main, and it doesn't.   I'd actually prefer to have the sum field passed back to main.    The sum field I'd like to use is

Sum ({@sum_by_status})


Based on what I saw in other postings here on EE, it looks like I'm doing this right, but @subtotal_percap  on the main doesn't show 99.99, it just shows 0.00.

What am I doing wrong?  And, what would be the correct syntax to capture the
Sum ({@sum_by_status}) in the shared variable for passing?
 

thanks

dave
0
Comment
Question by:fhcdaver
  • 5
  • 4
10 Comments
 
LVL 100

Accepted Solution

by:
mlmcc earned 400 total points
ID: 39655216
The subreport is the last thing evaluated in a section so if the subreport is inthe same section with the formula in the main report, the main report formula is evaluated then the subreport is called.  

Try this

in the Main report add a formula to the report header.

WhilePrintingRecords;
Shared NumberVar subtotal_percap;
""

In the subreport use your formula
WhilePrintingRecords;
Shared NumberVar subtotal_percap;
subtotal_percap := 99.99;

or the one you really want
WhilePrintingRecords;
Shared NumberVar subtotal_percap;
subtotal_percap := Sum ({@sum_by_status});


in the main report in a section after the subreport use your formula
WhilePrintingRecords;
Shared NumberVar subtotal_percap;
subtotal_percap

If you need to dislay the value in the same section then
1.  Have the subreport display it
2.  Insert a section below the subreport section and disply it there
3.  Insert a section below the subeport and move everything from the main report section other than the subreport to the new section

mlmcc
0
 

Author Comment

by:fhcdaver
ID: 39655259
OK I will try that.  
In the report header, then, I would have a formula field called "@dummy" or something equivalent. Then in the main, in a section following the sub, I'd reference another formula field, maybe named "@the_real_thing".  Both formula fields can reference the same shared variable?  


additonally, to elaborate a bit:
The report has several detail sections (detail a, detail b, etc).   This sub report is in detail b.
You're suggesting that I put @the_real_thing perhaps in detail c?
0
 
LVL 100

Expert Comment

by:mlmcc
ID: 39655315
That is correct if you want it displayed in the detail section

mlmcc
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 

Author Comment

by:fhcdaver
ID: 39656777
Hi,

almost there.   I can see the 99.99 in a subsequent detail section.

When I use this in my subreport

WhilePrintingRecords;
Shared NumberVar subtotal_percap;
subtotal_percap := Sum ({@sum_by_status});

crystal complains and says "a number is required here. "
0
 
LVL 100

Expert Comment

by:mlmcc
ID: 39657587
What is the formula @sum_by_status - by its name it should be a number but it could be anything

mlmcc
0
 

Author Comment

by:fhcdaver
ID: 39657764
It is a report footer sum of a currency field.
0
 
LVL 100

Expert Comment

by:mlmcc
ID: 39657883
Crystal will not do any automatic type conversion.  I know to use a Currency value looks like a number but it is a different data type

Try this formula

WhilePrintingRecords;
Shared CurrencyVar  subtotal_percap;
subtotal_percap := Sum ({@sum_by_status});

Open in new window


Note the change in type to CurrencyVar

mlmcc
0
 
LVL 34

Assisted Solution

by:James0628
James0628 earned 100 total points
ID: 39659038
If you change the variable type to currency, you'll need to change it in every formula that uses that variable, in the main report and the subreport.

 Unless you really need the summary to be the currency data type, it might be easier to just convert the currency summary to a number:

WhilePrintingRecords;
Shared NumberVar subtotal_percap;
subtotal_percap := ToNumber (Sum ({@sum_by_status}))


 James
0
 

Author Comment

by:fhcdaver
ID: 39660709
Thanks mlmcc and James.  you both hit  it.    

What I did was in the sub report I added the ToNumber function as James suggested.    So it became a number when it was passed back "up" to the main report.  

(p.s.:  mlmcc, I see your byline everywhere  here in EE when to comes to Crystal.  Very cool. )
0
 

Author Closing Comment

by:fhcdaver
ID: 39660717
Shared effort, shared solution.   thanks to you both.
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Hot fix for .Net Crystal Reports 10.2.3600.0 to fix problems with sub reports running on 64 bit operating systems ISSUE: Reports which contain subreports fail with error "Missing Parameter Value" DEPLOYMENT SERVER OS: Windows 2008 with 64 bi…
Hello everyone, Hope you find this as helpful as we did. We have on the company I work for an application built in Delphi V with Crystal Reports 8. We all know that Crystal & Delphi can be temperamental sometimes and the worst thing is, nearly…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

829 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question