Professional Documents
Culture Documents
• Developed by the people who wrote the code – experts who can explain their
secrets, step by step
• Based on the most common questions identified by Technical Support
• Designed to help you get the most out of Crystal Reports. Learn to unlock
the value inside your information to help your organization improve
business performance.
..
Top 20 Secrets
Secrets for Report Designers:
#1. How to display every nth record in Crystal Reports ........................ 9
#2. How to display only the report file name on a report ...................11
#3. How to suppress a blank subreport from displaying....................12
#4. How to share subreport data with the main report .......................15
#5. Evaluate null field values in formulas or record selection ..........18
#6. How different 'Keep Together' options affect the report .............23
#7. How to export to PDF or RTF in Crystal Reports............................28
#8. Suppress a section that contains a blank subreport ....................30
#9. How to create a table of contents for a report ...............................39
#10. How to add time fields .........................................................................43
#11. What font types are supported in Crystal Reports? ....................47
#12. How to format specific words or characters within a string ......50
#13. How to display a date range parameter on a report ....................52
#14. How to suppress a blank subreport .................................................54
Summary: ....................................................................................................................78
• More resources available
Worldwide contact information: .........................................................................79
Organizations around the world invest in business intelligence (BI), enterprise resource
planning (ERP) and customer relationship management (CRM) solutions – yet
frequently fail to arm their people with the training they need to get the most out of the
implementation.
According to Meta Group research, three out of every four ERP users raise the white
flag – they do not have the skills they require.
The good news is that the time you invest in learning the secrets presented in this
document and in formal learning will pay off right away – in greater efficiency, boosted
confidence, and better reports.
76% user
competency 83%
substandard or didn’t
institute a
failing compre-
hensive
training
42%
plan
no end-user training
beyond that provided at
24% user competency the end of the
satisfactory implementation
Source: Meta Group research, August 2003 as cited in ZD Net online article
“Three out of four ERP users raise the white flag.”
X Fact: Preparation and skill development are key project success factors
The impact of inadequate preparation may be greater than you think. We all suffer from
the tyranny of the urgent – putting off learning critical skills even though we will
desperately need these very skills in the middle of a demanding project.
Here is the question: What is the cost of failure or delay on your project?
Organizations often believe that users are resourceful enough to find their own way
through new programs and systems. While this may be true, an unguided learning
process is much less effective than a systematic approach to training.
Learning the techniques that make a user proficient requires a one-time investment –
whereas failure to master these techniques requires a time investment every time the
user performs a task.
“On average, most individuals spend 50 percent of their time gathering and
collecting the information for standard report analysis and the remaining time
analyzing the information. At those companies where BI tools and technologies have
been implemented in a consistent manner, roughly 20 percent of an individual's time
is spent gathering and collecting, while 80 percent is spent reporting and analyzing
the information for trends, business opportunities, forecasting and other related
value-based analysis”
Hackett Best Practices Strategic Decision Making benchmark, 2002
Once you’ve had a chance to digest these tips and tricks, you’ll probably want to take
your skills to the next level. Trained users take advantage of 20% more product features
– and have both greater competence and higher confidence as a result of their training.
Learn from the experts, the people who created the software. Both classroom and e-
learning training is available.
• Business Objects Education group has trained over 200,000 users.
• Only the creators of the software have in-depth understanding of all of the
software features.
• We employ only the most experienced instructors – professionals with a proven
track record in sharing time-saving tips and best practices.
• 95% of trainees rank their experience as “good” to “excellent” in terms of job
1
relevance.
1
Source: Analysis of post class evaluations. 2004.
Crystal Reports 10
X Applies to:
In Crystal Reports (CR), is it possible to display every nth record without indexing the
database table?
For example, you have a report with 100 records but you only want to see every 25th
record. Your report connects to a database table that does not contain an indexed field.
X Solution:
A formula can be created that will display every nth record by conditionally
suppressing all other records. The example below shows how to display every 25th
record.
X Example Formula:
Remainder((recordnumber),25) <> 0
3. Leave the check box cleared and click the 'X+2' command button next to 'Suppress
(No Drill-Down)'. The formula editor opens.
You will now only see every 25th record. All other records do not display on the report
because of the conditional suppression at the details level.
X Background Information
This formula returns a value of true for all records not divisible by 25 and a value of false
for all records that are divisible by 25. CR reads the results of the formula to determine if
a record will appear.
X More Information
For more information about the 'Remainder' function or 'Record Number' special
field, refer to the Crystal Reports Online Help by pressing the 'F1' key.
X Training:
http://www.crystaldecisions.com/training
Crystal Reports 10
X Applies to:
All versions
Formulas
Return File Name
X Synopsis
When using the special field called 'filename' the report shows the entire path
including the file name.
How do you display just the report file name on the report?
NOTE: X Solution
The report must be To display just the report file name on a report, use a formula similar to this:
saved before the
formula will return
@ReportFileName:
a value, or it will //This is the formula name
return an empty
string. StringVar Array File:=Split(filename,'\');
NumberVar i := Ubound(File);
This formula is not File[i];
version-specific and
can be placed in any X Training:
report, because it
uses the special
field 'filename', Learn more about Crystal Reports - Report Design.
which exists in
Crystal Reports 8.5, Refer to 'Courses & Schedules' at:
9, and 10.
http://www.crystaldecisions.com/training
http://support.businessobjects.com/library/kbase/articles/c2000055.asp
X Applies to:
NOTE: How can you suppress a blank subreport from displaying on the main report.
Moreover, you want to suppress the sections within a subreport, if there is no data, so
New to Crystal that it does not display on the main report?
Reports 9 is the
'Suppress Blank
Subreport' check
box. For more X For example:
information on how
There is a subreport contained in the main report. If the subreport does not contain any
to suppress blank
data, you do not want it to display in the main report. You want to suppress the sections
subreports in CR 9,
of the blank subreport.
refer to our
knowledge base
article c2011893.
X Solution
A subreport is an object within the Crystal Reports designer. Since the subreport is
NOTE:
inserted into the main report, it cannot be entirely suppressed.
This workaround
Even when a subreport does not have any records, the subreport object still exists
applies to Crystal
within a section of the main report. This means the Crystal Reports designer does not
Reports 8.5 and
consider a section that contains a subreport as a blank section.
earlier.
You notice that by selecting the 'Suppress if blank' option, from the 'Section Expert'
does not work.
To workaround this, you must first suppress the blank subreport, then shrink the blank
section.
· on the main report, right-click the subreport object and click 'Format Subreport'.
· on the 'Borders' tab, select 'None' from the Top, Bottom, Right and Left boxes.
2. In 'Design' tab of the main report, resize the height of the subreport object so it is as
short as possible.
5. Select the section containing the subreport, select the 'Fit Section' checkbox, and then
click 'OK' to return to the report.
Now when you preview the main report, the blank subreports are hidden from view.
CAUTION:
If you want to actually suppress the section in the main report that contains the blank
subreport, instead of merely concealing the blank subreport on the main report, refer to
knowledge base article c2005853.
Keep in mind, however, that the solution in knowledge base article c2005853 requires
inserting another subreport, which will significantly increase the time it takes to process and
display your report.
X Training:
http://www.crystaldecisions.com/training
A report contains a subreport. Data from the subreport is required for calculations in
the main report.
How can you share subreport data with the main report in version 7 (or higher) of the
Crystal Reports Designer?
X Solution
Shared variables, introduced in Crystal Reports version 7, make it easier to pass values
NOTE: from a subreport to the main report. Using shared variables requires two formulas: one
to store the value in a shared variable, the other to retrieve the value from the shared
This is not possible variable.
with On Demand
Subreports in The most important thing to remember when using shared variables is that Crystal
Crystal Reports. Reports must first evaluate the formula where the value is stored before evaluating the
formula that retrieves the shared variable.
For example if you want to pass a grand total from the subreport to do a calculation in
the main report, follow these steps:
//@SubFormula
//Stores the grand total of the
//{Orders.Order Amount} field
//in a currency variable called 'myTotal'
WhilePrintingRecords;
Shared CurrencyVar myTotal := Sum ({Orders.Order Amount})
3. In the main report, create a formula that declares the same variable name:
//@MainFormula
//Returns the value that was stored
//in the shared currency variable called
//myTotal in the subreport
WhilePrintingRecords;
Shared CurrencyVar myTotal;
myTotal
4. Place @MainFormula in a main report section that is beneath the section containing
the subreport.
For the shared variable to return the correct value in the main report, you must place
@MainFormula in a main report section that is beneath the section containing the
subreport. This ensures Crystal Reports evaluates the @SubFormula before
@MainFormula.
One way to do this is to insert a section below the section containing the subreport, and
place @MainFormula in this new sub-section:
· Click 'Insert' (at top of dialog box). This inserts an additional subsection.
· Click 'OK' to return to the report, and insert @MainFormula into this new sub-
section.
The next time you preview the report, @MainFormula displays the value from the
subreport. In this particular example, that value was the grand total of the
{Orders.Order Amount} field.
5. Once you have verified that @MainFormula is returning the correct value from the
subreport, you can include this formula in other main report formulas, such as:
//@NewFormula
//includes data from subreport
Place this formula in the same section as @MainFormula, or in a section further down
on the report.
You have now successfully shared data from a subreport with the main report.
X Training
http://www.businessobjects.com/training
Crystal Reports 9
X Applies to:
All versions
Record selection criteria
Formula displays unexpected results
IsNull function
X Synopsis
A database field contains values and null values. In Crystal Reports (CR), when
previewing the report, a list of values and blank values appears in the Details section.
How can you evaluate this database field in formulas or record selection criteria to
return the expected result set?
X Example Scenario
{YourDatabaseTable.NumberField} < 3
3. Upon adding the record selection criteria, the values that appear on the report are not
what you expected.
Why do the null values not appear in the result set based on the record selection criteria?
How can you evaluate the null values in the Number field to return the expected result
set?
Why do blank values or incorrect values appear in the result set of a formula?
X Solution
The expected result set does not appear because the example of record selection criteria
does not evaluate the null values. Null values in the Number field are not evaluated as
zero (0) values by default.
In CR, to evaluate fields that contain null values to return the expected result set, use one
of the following solutions:
Option A) Convert the null value to the default value of their data type.
* The null values in a Number field are converted to a zero (0) number value.
* The null values in a String (Text) field are converted to an empty string ("") value.
* The null values in a Date field are converted to zero (0, 0, 0) date values.
* The null values in a Date-time field are converted to zero (0, 0, 0, 0, 0, 0) date-time
values.
- OR -
Option B) Evaluate the null value within record selection criteria or within
formulas using the IsNull function.
Follow the steps below for A) or B) to evaluate null values to return the expected result
set.
Also, with regards to the related issue, blank values or incorrect values appear because
the formula includes a database field that contains null values. Follow the steps below
for A) or B) to correctly evaluate the null values to return the expected result set.
The IsNull Selecting 'Convert NULL Field Values to Default' affects all database fields on the
function report. CR is now able to successfully evaluate any null or blank values contained in
evaluates the the database fields according to the default value of their data type.
database field(s)
for null values.
B) STEPS TO EVALUATE THE NULL FIELD VALUES IN CR
It is important to
1. Create formula or record selection criteria.
evaluate every
database field
2. Use the IsNull function at the beginning of the formula or record selection criteria.
included in the
formula or record
3. If applicable, specify a value or action if the IsNull function evaluates a null record.
selection criteria
for null values.
//Date values that are not null are returned based on this record selection criteria. //Also, date
values are returned where it is less than the current date.
Not IsNull({YourDatabaseTable.DateField})
And {YourDatabaseTable.Datefield} < CurrentDate;
//This formula evaluates if the Number field contains null records. If the record contains a //null
value, the total is increased by a zero value. If the record is not null, the total is //increased by the
value of the record.
Whileprintingrecords;
Numbervar Total;
If IsNull({YourDatabaseTable.NumberField})
Then Total := Total
Else Total := Total + {YourDatabaseTable.NumberField};
//This formula evaluates if the String field contains null records. Additionally, the Trim
//formula function is used to account for a blank space caused by pressing the Space Bar.
WhilePrintingRecords;
Stringvar Message;
If IsNull({YourDatabaseTable.StringField}) or Trim({YourDatabaseTable.StringField}) = ""
Then Message := "Your Message"
Else Message := {YourDatabaseTable.StringField}
Upon completing the above steps, CR will successfully evaluate null field values in a
formula or record selection criteria to return the expected result set.
X Background information
If the 'Convert Null Field Values to Default' check box is not selected or if the database
field has not been evaluated using the IsNull function, the following behavior occurs in
CR when a null value is encountered:
* Formulas or record selection criteria stop evaluating the null value. For example, if the
formula is incrementing a value based on the database field, the value does not
increment nor does the remainder of the formula continue to evaluate. However, the
formula continues on to evaluate the next record.
* Formulas or record selection criteria return a blank value. If the formula's calculations
are based on the field values, it is possible to return incorrect values.
X Training:
http://www.crystaldecisions.com/education
In the Crystal Reports (CR) Designer, how do the different 'Keep Together' options
affect the report?
* Keep Together
* Keep Group Together
* Keep Object Together
* Keep Columns Together
Where do you find the 'Keep Together' options in CR and how do they affect your
report?
X Solution
The 'Keep Together' options are available to format objects and sections of the report.
The 'Keep Together' options affect how the report displays the particular object or
section.
Based on the report sections and commonly used report objects, this article provides
the following:
Report sections and commonly used report objects that include the 'Keep Together'
options:
B) Group Options
D) Cross-tabs
To locate the 'Keep Together' option for the different sections of the report, follow these
steps:
B) GROUP OPTIONS
To locate the 'Keep Group Together' option for inserting or changing a group, follow
these steps:
NOTE:
1. Click the following options depending on whether you are inserting a new group or
If the group changing an existing group:
instance spans
multiple pages, * Insert > Group for inserting a new group
'Keep Group * Report > Change Group Expert > Options for changing an existing group
Together' option
starts on a new 2. Under the "Group Options" heading, select the 'Keep Group Together' check box.
page and continues
through the 3. Click 'OK'.
multiple pages
until the particular EXAMPLE REPORT DETAILS:
group instance is
completed. * The Group Header, Details and Group Footer are displayed for each group instance.
* The amount of space required to display for a group instance exceeds the remaining
If more than one space available on the report page.
group instance can
fit on one page, Based on the EXAMPLE REPORT DETAILS, the entire group instance will start on a new
more than one page. The entire group instance includes the Group Header, Details and Group Footer.
group instance will
display on the same
page. C) SUBREPORTS, TEXT OBJECTS, OLE OBJECTS, AND OTHER DATABASE
FIELDS
Do not use this
option if the To locate the 'Keep Object Together' option for formatting subreports, text objects, OLE
intended purpose is objects, and other database fields, follow these steps:
to have each group
start on a new page. 1. Right-click the report object.
If the intended
purpose is to have 2. Select the one of following available options depending on the object type:
each group start on
* 'Format Subreport' for subreports
* 'Format Text' for text objects
* 'Format Graphic' for OLE objects
* 'Format Field' for database fields
3. Under the Common tab, select the 'Keep Object Together' check box.
When the 'Keep Object Together' option is selected, CR keeps the entire instance of the
particular object on the same page.
Based on the EXAMPLE REPORT DETAILS, the subreport will start on a new page.
However, the Group Footer instance and the text object will start on the previous page.
The 'Keep Object Together' option is only applicable to the particular object.
D) CROSS-TABS:
To locate the 'Keep Columns Together' option for formatting a cross-tab, follow these
steps:
3. Under the Customize Style tab, select the 'Keep Columns Together' check box.
When the 'Keep Columns Together' option is selected, CR keeps the columns together if
a column width spans across to a second page.
Based on the EXAMPLE REPORT DETAILS, the 'Keep Columns Together' option is
selected, the columns that would span across the edge of the pages start on a new page.
A cross-tab column is not divided between two pages.
X Training
http://www.businessobjects.com/training
Crystal Reports 9
X Applies to:
Can I export my report to Adobe Acrobat PDF (Portable Document Format) or RTF
(Rich Text Format) from the Crystal Reports report designer? If so, how?
X Solution
Crystal Reports 8.5 and later allows exporting to PDF. Exporting to PDF in Crystal
Reports 8 and earlier is not supported. Crystal Reports 8 and later allows exporting to
RTF.
Exporting to PDF or RTF in Crystal Reports 8.5 retains the best WYSIWYG (What-you-
see-is-what-you-get) format of the original report.
Exporting to PDF and RTF in Crystal Reports 8.5 support many features that other
exporting formats cannot.
X Export to PDF
NOTE: X 1. On the 'File' menu, click 'Export'.
This export DLL is 2. In the 'Export' dialog box, click 'Acrobat Format (PDF)' from the 'Format' drop-down
designed to work box.
with Adobe Acrobat
3. Click the destination of your choice from the 'Destination' drop-down box. (To save to
a file on your computer, click 'Disk file'.)
4. Click 'OK'.
X Export to RTF
2. In the 'Export' dialog box, click 'Rich Text Format' from the 'Format' drop-down box.
3. Click the destination of your choice from the 'Destination' drop-down box. (To save to
a file on your computer, click 'Disk file'.)
4. Click 'OK'.
X More Information
For information on troubleshooting errors exporting to PDF and RTF refer to our
knowledge base article c2012282.
For information on ALL the formats that Crystal Reports has exporting functionality to,
download the applicable document.
These documents also list all supported and unsupported exporting features in Crystal
Reports 7, 8, and 8.5.
X Training
Learn more about exporting in the Crystal Reports - Report Design I training course.
In Crystal Reports (CR) 8.5 and earlier, how do you suppress a section in the main
report that contains a blank subreport?
For example:
A subreport is placed in the group header of the main report.
You notice that if the subreport does not return data the group header contains a blank
space the size of the subreport. You want to suppress the group header of the main
report when the subreport is blank.
X Solution
NOTE:
The group header that contains the blank subreport does not shrink because the
subreport is an object within the Crystal Reports designer. A section containing a
New to Crystal
subreport is never blank even if the subreport is because it contains a subreport object.
Reports 9 is the
'Suppress Blank
You notice that by selecting the 'Suppress if blank' option, from the 'Section Expert'
Subreport' check
does not work.
box. For more
information on
This knowledge base article provides a solution to suppress a section that contains a
how to suppress
blank subreport for CR 6, 7, 8 and 8.5. The following procedures must be completed in
blank subreports
order to achieve the desired results:
in CR 9, refer to
our knowledge
· creating a duplicate subreport
base article
c2011893.
· placement of a duplicate subreport
You must create To suppress a section that contains a blank subreport in CR 7, 8 and 8.5, complete the
another subreport following:
based on the original
subreport. To create X Creating a Duplicate Subreport
a duplicate
subreport, complete Place the duplicate subreport into the section above the original subreport. For example,
the following steps: if the original subreport is contained in the group header of the main report, create
1. From the main another group header and place the duplicate subreport into it.
report in CR, right-
click the subreport. To insert a section into the report, complete the following steps:
2. From the fly-out
menu, select 'Save 1. In design mode, right-click the left gray margin where the subreport is located.
Subreport As'.
3. Provide a name for For example, if the subreport is located in the group header, right-click the left gray
the duplicate margin at the group header level.
subreport and click
'Save'. 2. From the fly-out menu, select 'Insert Section Below'. You notice another section is
Placement of a inserted into the report labeled 'b'.
Duplicate Subreport
For example, by inserting another group header you notice that there is group header A
and group header B.
3. Select the original subreport, drag and drop it into the second section.
4. Insert the duplicate subreport by selecting 'Subreport', from the 'Insert' menu.
9. Insert the subreport in the new section (such as group header b from step 2).
10. In the main report, on the 'Edit' menu click 'Subreport Links'. The top drop-down box
will contain both the original and duplicate subreports. Compare these two subreports
and enure that the fields in the 'Filed(s) to link to' box are the same. Also, check that the
parameter in the bottom-left drop-down box and the field in the bottom-right drop-
down box are the same.
In the duplicate subreport, you must create a formula to test whether the contents of the
subreport are blank. The results of this formula are going to be stored as a shared
variable and shared with the main report.
1. Right-click on the duplicate subreport and from the fly-out menu, select 'Edit
Subreport'.
2. From the 'Insert' menu, select ' select 'Field Object'. This launches the 'Field Explorer'.
4. Type a name into the 'Formula Name' box and click 'OK'. For example, CheckForNull.
This launches the formula editor.
// @CheckForNull
Whileprintingrecords;
Shared BooleanVar Suppress;
If IsNull(Count({Table.field})) or Count(Table.field) = 0 then Suppress:= TRUE
Else Suppress:= FALSE
To conditionally suppress the section that contains the original subreport, complete the
following steps:
1. From the 'Format' menu, select 'Section'. This launches the 'Section Expert'.
2. From the 'Section Expert' dialog box, select the section that contains the original
subreport.
3. Click the 'X+2' button beside the 'Suppress (No drill down) check box. Ensure the
checkbox is clear.
Now when you preview the report, you notice that the sections that contain a blank
subreport are suppressed. However, the section that contains the duplicate subreport is
visible on the main report. In order to suppress the section still visible you must
minimize and resize the section.
To minimizing the duplicate subreport on the main report and resize the section,
complete the following steps:
5. Right-click the duplicate subreport, and from the fly-out menu, select 'Format
Subreport'.
7. From 'Line style', select 'None' for Left, Right, Top, Bottom.
9. Resize the section that contains the duplicate subreport to be as small as possible.
X Crystal Reports 6
Before you begin this process, you will need to download uflstore.zip from our website
at:
http://support.crystaldecisions.com/downloads
The reason you need to obtain this file is because shared variables were introduced in
Crystal Reports 7. In order to suppress a section that contains a blank subreport in
Crystal Reports 6, you will need to use the store and fetch function.
To suppress a section that contains a blank subreport in Crystal Reports 6, complete the
following:
You must create another subreport based on the original subreport. To create a duplicate
subreport, complete the following steps:
Place the duplicate subreport into the section above the original subreport. For example,
if the original subreport is contained in the group header the main report, create another
group header and place the duplicate subreport into it.
1. In design mode, right-click the left gray margin where the subreport is located.
For example, f the subreport is located in the group header, right-click the left gray
margin at the group header level.
2. From the fly-out menu, select 'Insert Section Below'. You notice another section is
inserted into the report labeled 'b'.
For example, by inserting another group header you notice that there is group header A
and group header B.
3. Select the original subreport, drag and drop it into the second section.
4. Insert the duplicate subreport by selecting 'Subreport', from the 'Insert' menu.
9. Insert the subreport in the new section (such as group header b from step 2).
10. In the main report, on the 'Edit' menu click 'Subreport Links'. The top drop-down box
will contain both the original and duplicate subreports. Compare these two subreports
and enure that the fields in the 'Filed(s) to link to' box are the same. Also, check that the
parameter in the bottom-left drop-down box and the field in the bottom-right drop-
down box are the same.
In the duplicate subreport, you must create a formula to test whether the contents of the
subreport are blank. The results of this formula are going to be stored as a shared
variable and shared with the main report.
1. Right-click on the duplicate subreport and from the fly-out menu, select 'Edit
Subreport'.
2. From the 'Insert' menu, select ' select 'Field Object'. This launches the 'Field Explorer'.
4. Type a name into the 'Formula Name' box and click 'OK'. For example, CheckForNull.
This launches the formula editor.
// @CheckForNull
Whileprintingrecords;
If IsNull(Count(Table.field)) or Count(Table.field) = 0 then
StoreBooleanVar ("Suppress", True)
else StoreBooleanVar("Suppress", False)
To conditionally suppress the section that contains the original subreport, complete the
following steps:
1. From the 'Format' menu, select 'Section'. This launches the 'Section Expert'.
2. From the 'Section Expert' dialog box, select the section that contains the original
subreport.
3. Click the 'X+2' button beside the 'Suppress (No drill down) check box. Ensure the
checkbox is clear.
Now when you preview the report, you notice that the sections that contain a blank
subreport are suppressed. However, the section that contains the duplicate subreport is
visible on the main report. In order to suppress the section still visible you must
minimize and resize the section.
To minimize the duplicate subreport on the main report and resize the section,
complete the following steps:
5. Right-click the duplicate subreport, and from the fly-out menu, select 'Format
Subreport'.
7. From 'Line style', select 'None' for Left, Right, Top, Bottom.
TIP:
To distinguish between the section containing the duplicate subreport and the section
containing the original subreport, you can format one of the sections with a different
background color.
1. Right click the section to select it and from the fly out menu select 'Format Section'.
2. In the 'Section Expert' select the section containing the duplicate subreport from the
'Sections' dialog box.
3. Click the 'Color' tab and select the 'Background Color' check box.
X Training:
http://www.crystaldecisions.com/training
Crystal Reports 9
X Applies to:
A table of contents would be in the Report Header, showing group names next to the
page numbers the groups start on.
X Solution
You can make a table of contents using a subreport with a command object.
Using a command object it is possible to write to a database from CR. The following
example will use a subreport to write group names and page numbers to a new table in
your database.
WARNING:
Crystal Reports is not recommended as a tool to write to, update or delete from a
database. Database clients or applications designed specifically to edit databases should
be used instead. However, now that CR has full SQL functionality it is possible to write
to, update and delete from databases. This article is provided as a tip.
Before attempting to implement the steps in this article, consult your Database
Administrator (DBA). Your DBA needs to grant specific rights to your database.
1. Create a new table in your database called TableOfContents. Create three fields in this
table:
· Grouper (String data type)(Ensure this field is at least as large as your longest group
field value)
2. Assign rights to write to, delete, and update this table to any users of this report. The
TableOfContents table will be updated as the report changes.
WARNING:
Use INSERT INTO, DELETE or UPDATE statements at your own risk. Once a
command object containing an INSERT INTO, DELETE or UPDATE statement has
run, the database has changed and the changes may not be reversible.
3. On a grouped report (for this example the report is grouped on the ProductName
field), in the 'Insert' menu, click 'Subreport'. Name this subreport 'Table Of Contents'.
Connect this subreport to the new TableOfContents table and insert the
TableOfContents.Grouper and TableOfContents.Page fields in the Details section.
Sort this subreport by the TableOfContents.Page field.
5. Right-click the gray area to the left of the Report Footer, and then click 'Insert Section
Below'. There will now be 'Report Footer a' (RFa) and 'Report Footer b' (RFb).
6. In the Main report, on the 'Insert' menu, click 'Subreport'. Name this subreport
'UpdateTOC'. In the 'Database Expert' dialog box, browse to your Table of Contents data
source, then double-click 'Add Command'. The 'Add Command to Report' dialog
box will appear.
7. Click the 'Create' button to create a parameter. Name the parameter 'LinkReceiver' and
click 'String' from the 'Value Type' drop-down box. Create another parameter named
'DateTime' with a 'DateTime' value type.
NOTE: 8. In the 'Add Command to Report' dialog box enter a SQL Query similar to the
following:
This SQL Query (and
any other SQL syntax {?LinkReceiver}
in this article) is DELETE FROM "TableOfContents"
written for a WHERE "TableOfContents"."DateTime" <> {?DateTime};
Microsoft SQL Server SELECT * FROM "TableOfContents"
database. Consult the
database manual or This command object will add new GroupName and PageNumber data to the
Database TableOfContents table and delete any existing data based on the ?DateTime
Administrator for the parameter.
correct syntax for
your data source. 9. Insert the Grouper and the Page fields in the subreport Details section. Suppress all of
the subreport sections.
Business Objects
Technical Support 10. Insert the 'UpdateTOC' subreport in the Report Footer B (RFb) section. (This is to
does not provide ensure that the formula used to link the subreport is processed before the subreport is
support for writing processed.)
SQL queries, as they
are database specific. 11. Right-click the 'UpdateTOC' subreport, and then click 'Format Subreport'. Click the
'Border' tab, and then click 'None' from the 'Left', 'Right', 'Top' and 'Bottom' drop-down
boxes. Click 'OK' to close the 'Format Editor' dialog box.
12. In the main report, create a formula named 'DateTime' with the following syntax:
CurrentDateTime
NOTE:
13. Insert this formula in the main report's Report Header section.
The output of this
formula will look 14. Create another formula named 'LinkMaker' with the following syntax and place it in
similar to the Group Header section of the main report:
this:
INSERT INTO
WhilePrintingRecords;
TableOfContents VALUES StringVar link;
('Bikes',1,'2003-04-04 If Not InRepeatedGroupHeader Then
12:32:01') link := link &
INSERT INTO
TableOfContents VALUES
"INSERT INTO TableOfContents VALUES ('" &
('Locks',2,'2003-04-04 GroupName ({Product.Product Name}) & "'," &
12:32:01') ToText(PageNumber,0) & ",'" &
ToText({@DateTime}, "yyyy-MM-dd HH:mm:ss") &
"')" & chr(10);
link
15. Create another formula named 'LinkPasser' with the following syntax and place it in
the Report Footer A (RFa) Section of the main report:
WhilePrintingRecords;
StringVar link;
link
16. In the main report, in the 'Edit' menu, click 'Subreport Links'. In the 'Subreport Links'
dialog box click the 'UpdateTOC' subreport from the 'For subreport' drop-down box.
17. Click the '@DateTime' Formula field from the 'Available Fields' box and move it to
the 'Field(s) to link to' box. In the 'Subreport parameter field to use' drop-down box, click
the '?DateTime' parameter.
18. Repeat step 15, connecting the '@LinkPasser' Formula field to the '?LinkReceiver'
parameter. Click 'OK' to close the 'Subreport Links' dialog box.
19. In the 'Field Explorer' of the main report, click 'Special Field'. Insert the 'PageNofM'
field in the Page Footer.
20. Preview the report to write the Table of Contents data to the database.
NOTE: 21. Refresh the report again and the Table of Contents will display the group and page
number values based on your report.
If changes are made
to the report that
affect X Training:
the page numbering,
refresh the report
twice to update the Learn more about Crystal Reports - Report Design.
TableOfContents
table. Refer to 'Courses & Schedules' at:
How do you create a formula in Crystal Reports (CR) that adds more than one time
field and displays the total in the same format: hh:mm:ss?
For example:
1:45:01 + 1:45:01 should display 03:30:02 and not 2:90:02
X Solution
In order to get the sum of more than one time field and to display the total of the time
field in the
same format (hh:mm:ss) you must complete the following steps:
1. Convert all the time fields to a common time unit such as seconds
Convert the time fields to seconds so that a common time unit is used to sum up all
three different time units.
2. To convert the datetime field to seconds, create a formula similar to the following:
To convert the string field, with the format of hh:mm:ss to seconds create a formula
similar to the following:
2. Create a formula similar to the following to convert the string field to seconds:
sum(@ConvertTimeToSeconds, Group)
- OR -
sum(@ConvertTimeStringToSeconds, Group)
Create a formula that converts the @TotalSeconds results back to hh:mm:ss format.
2. To convert the results from @TotalSeconds back to hh:mm:ss format, create a formula
similar to the following:
//divide the @TotalSeconds by 3600 to calculate hours. Use truncate to remove the decimal
//portion.
Hours := truncate({@TotalSeconds} / 3600);
// Divide RemainingSeconds by 60 to get minutes. Use truncate to remove the decimal portion.
Minutes := truncate(RemainingSeconds/60);
// Subtract the Hours and Minutes and what is left over is seconds.
Seconds := {@Totalseconds} - (Hours * 3600) - (Minutes * 60);
X Training:
http://www.crystaldecisions.com/training
Crystal Reports 9
X Applies to:
For Crystal Reports (CR), this knowledge base article answers the following questions
regarding embedded fonts:
NOTE:
b) The following font types are supported when exporting to PDF:
Font File Names
· True Type Fonts (TTF)
(FONT) is a font
· True Type Collection (TTC)
type that is not
supported by
When exporting a report that contains a font type other than TTF or TTC to PDF
Crystal Reports
format, the font is not successfully exported or the following error message appears:
c) To verify the embedded security level of a font, review the font properties. If the
security level contains "No-embedding" permissions, then exporting to PDF will not be
NOTE:
successful.
For the utility to
True Type Fonts (TTF) has embedding permissions that determine if they can be
allow you to view
converted into an embedded font format.
the embedded
security level of a
The permissions associated with the embedded security level of a font are as follows:
font, download the
"Font properties
· No-embedding - This does not allow fonts to be embedded. Contact the font vendor
extension" from
to request a possible upgrade to an embeddable font.
Microsoft's web site
at:
· Print and preview - This allows fonts to be embedded. However, only within pages
that remains static on the client computer. If a page allows fonts to be changed, then
www.microsoft.com
editable or installable fonts are required. Examples of a page that allows fonts to be
/typography
changed are an online Java-based word processor or an email editor.
· Editable - This allows fonts to be embedded using a tool such as Microsoft Web
Embedding Fonts Tools (WEFT) beyond the limitations of the "Print and preview"
permissions.
X Summary
Not all fonts that can be displayed in Crystal Reports are supported when exporting to
PDF. Since PDF format embeds fonts, the font types that are exported must allow
embedding. Embedding permissions are determined by the font vendor.
X Background Information
X More Information
Search for "Embedding Fonts" or "About Font Embedding" on the Microsoft support site
at:
http://support.microsoft.com
Search for "Font Format Types" or "Font File Formats" on the Adobe support site at:
http://support.adobe.com
X Related Information
Search for the file name, Scrprinterdependency.pdf, on our support site at:
http://support.crystaldecisions.com/docs
Search for the knowledge base articles, c2011114 and c2010555, on our support site at:
http://support.crystaldecisions.com/kbase
X Training:
http://www.crystaldecisions.com/training
How can you format occurrences of a specific word or character within a string field?
X Solution
To format occurrences of a specific word or character within a string field, use the
'Replace' function in a formula to replace the word or character.
For example, to bold all occurrences of the word "City' in the Customer Name field of
the Xtreme sample database, use this formula:
//@boldcity
//This is the formula name
NOTE:
Replace({Customer.Customer Name}, "City", "<b>City</b>")
Word or character Place this formula field on the report instead of the database field 'Customer Name'
formatting is and then select HTML Text Interpretation for the paragraph format as follows:
limited to the
supported HTML 1. Right-click the formula field and click the
tags. A list of 'Paragraph' tab in the Format Editor.
supported HTML
tags can be found 2. In the 'Text interpretation' list, click 'HTML
in the on-line help Text'.
files by pressing
F1. 3. Click 'OK' to close the Format Editor.
X Training:
http://www.crystaldecisions.com/training
X Applies to:
A report uses parameter fields to prompt you for a start and end date. These dates are
then used in the report's record selection formula.
To display the date range for this report, a formula similar to the example below is
placed in the Report Header:
//{@DateRange}
WhilePrintingRecords;
DateVar date1;
DateVar date2;
date1:=Minimum ({Datefield});
date2:=Maximum ({Datefield});
"my selection is: " + totext(date1) + " " + totext(date2)
However, when entering a date that is not in the database, this formula returns
confusing results.
For example:
The database contains date values from November 3rd (11/3/97) to November 30
(11/30/97).
If you enter '11/1/97' as the start date, and '11/30/97' as the end date, the @DateRange
formula in the Report Header displays "11/3/97 - 11/30/97".
This happens because there are no records for November 1st and 2nd.
X Solution
NOTE: To display a parameter-based date range for a report, regardless of whether thos dates
are in the database, use text objects.
In Crystal Reports
version 7 or higher, Using Text Objects to Display Date Range:
you can create ranged
parameters. 1. On the 'Insert' menu, click 'Text Object'. Place the text object in the Report Header.
This means that 2. On the 'Insert' menu, click 'Parameter fields'. This opens the 'Parameter fields' tab of
instead of creating the 'Insert fields' dialog box.
both a start and end
parameter, you only 3. Click the Start Date parameter and insert it into the text object.
need one date
parameter, which 4. Press the spacebar to insert a space in the text object, then type the string "to"
prompts for the start (without the quotes).
AND end dates.
5. Go back to the 'Insert fields' dialog box to insert the End Date parameter into the text
To learn how to use object, after the string 'to'. The text object now appears similar to this:
ranged parameters,
please consult chapter [{?pm-startdate} to {?pm-enddate}]
on parameters in the
Crystal Reports User This displays the date range that was entered for this report.
Guide:
· Chapter 16 of the CR
version 7 User Guide X Training:
· Chapter 22 of the CR
version 8 User Guide. Learn more about Crystal Reports - Report Design.
Crystal Reports 9
X Applies to:
To suppress a blank subreport, select the 'Suppress Blank Subreport' check box. This
feature is new to version 9 of Crystal Reports.
To suppress a section that contains a blank subreport, select the 'Suppress Blank
Section' check box.
X How to Suppress a Blank Subreport and then Suppress the Section
5. Right-click the section containing the subreport and select 'Section Expert'.
6. In the Section Expert dialog box, select the 'Suppress Blank Section' check box.
Upon selecting the 'Suppress Blank Subreport' and 'Suppress Blank Section' check
boxes, the subreport and section will not display on the main report when no data is
contained in the subreport.
X Background
In Crystal Reports 8.5 and earlier, a blank subreport cannot be suppressed. The blank
subreport is recognized as an object in the section. Therefore, a section containing a
blank subreport cannot be suppressed.
For more information on how to workaround this issue in CR 8.5 and earlier, refer to our
knowledge base article c2005853.
X Training:
http://www.crystaldecisions.com/training
How do you deploy an application that uses Crystal Reports and Visual Studio .NET?
X Solution
Before you deploy an application that uses Crystal Reports and Visual Studio .NET
you must confirm the version of Crystal Reports being used with Visual Studio .NET.
The possible versions are:
- Crystal Reports for Visual Studio .NET 2002
- Crystal Reports for Visual Studio .NET 2003
- Crystal Reports 9
- Crystal Reports 10
To do this, check the assembly version of the Crystal Reports managed components.
The Crystal Reports managed components include:
- CrystalDecisions.CrystalReports.Engine
- CrystalDecisions.Shared
- CrystalDecisions.Reportsource
- CrystalDecisions.Web
- CrystalDecisions.Windows.Forms.
· If your Crystal Reports managed assemblies are version 9.1.3300, your application
uses Crystal Reports for Visual Studio .NET 2002.
· If your Crystal Reports managed assemblies are version 9.1.5000, your application
uses Crystal Reports for Visual Studio .NET 2003.
· If your Crystal Reports managed assemblies are version 9.2.3300, your application
uses Crystal Reports 9.
· If your Crystal Reports managed assemblies are version 10.0.3300, your application
uses Crystal Reports 10.
X To deploy an application that uses Crystal Reports for Visual Studio .NET 2002
1. Ensure that the assembly version of the Crystal Reports managed components is
9.1.3300.
3. Open Crnet_deployment.pdf and refer to the 'Crystal Reports Bundled Version with
VS 2002' section.
X To deploy an application that uses Crystal Reports for Visual Studio .NET 2003
1. Ensure that the assembly version of the Crystal Reports managed components is
9.1.5000.
3. Open Crnet_deployment.pdf and refer to the 'Crystal Reports Bundled Version with
VS 2003' section.
2. Go to http://support.businessobjects.com/search and
download "crnet_deployment.pdf".
2. Go to http://support.businessobjects.com/search and
download "deploying_cr10_net.pdf".
X Training:
http://www.crystaldecisions.com/training
Crystal Reports 9
X Applies to:
The Crystal Reports (CR) 9 Developer Runtime Help (Runtime.chm) lists Unicows.dll
as a dependency file for the Report Designer Component (RDC) and Crystal Print
Engine API.
http://www.crystaldecisions.com/training
#17 How to change the data source using CR for VS .NET application
http://support.businessobjects.com/library/kbase/articles/c2011464.asp
X The information in the article refers to:
An application uses Crystal Reports for Visual Studio .NET as the reporting
development tool.
For example, if a report is designed against the 'pubs1' database and the 'server1'
server, how can you change the database to 'pubs2' and the server to 'server2'?
X Solution
To change the database and server at runtime, copy one of the following code samples into your class
(use the logon method defined in the code to change the database and server):
CAUTION:
• When using ODBC, the DSN name is the server name. The DSN should be under the System
DSN, and not under the User DSN.
• The Logon method cannot change database file name when using DAO (Microsoft Access
File/.mdb).
• If you have a subreport that connects to a different database or server than your main report,
use the ApplyLogon method instead of the Logon method. When using the ApplyLogon
method, ensure you iterate through each subreports.
• It is not possible to use the CR for VS .NET SDK to change a report from using SQL
Authentication to Windows Authentication, or vice versa. This functionality is available
through the Report Application Server (RAS) .NET SDK or Report Designer Component (RDC).
if (tbl.TestConnectivity())
{
// drop fully qualified table location
if (tbl.Location.IndexOf(".") > 0)
{
tbl.Location = tbl.Location.Substring(tbl.Location.LastIndexOf(".") + 1);
}
else tbl.Location = tbl.Location;
}
else return(false)
}
return(true);
}
bool Logon(ReportDocument cr, string server, string db, string id, string pass)
{
ConnectionInfo ci = new ConnectionInfo();
SubreportObject subObj;
ci.ServerName = server;
ci.DatabaseName = db;
ci.UserID = id;
ci.Password = pass;
if (!ApplyLogon(cr, ci)) return (false);
Dim li As TableLogOnInfo
Dim tbl As Table
If (tbl.TestConnectivity()) Then
'drop fully qualified table location
If (tbl.Location.IndexOf(".") > 0)
Then
tbl.Location = tbl.Location.Substring(tbl.Location.LastIndexOf(".") + 1)
Else
tbl.Location = tbl.Location
End If
Else
Return False
End If
Return True
Next
End Function
ci.ServerName = server
ci.DatabaseName = db
ci.UserID = id
ci.Password = pass
X Training:
http://www.crystaldecisions.com/training
A VB .NET application uses Crystal Reports for Visual Studio .NET as the reporting
development tool.
How do you pass database logon information to a Crystal Report at runtime in this
VB .NET application?
X Solution:
To pass logon information to a Crystal Report at runtime, use the following code
sample:
<VB .NET>
-----------
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
'If you are using a Non-Typed report, and loading a report outside of the project, use the
'following:
crReportDocument.Load("c:\myReports\myReport.rpt")
With crConnectionInfo
.ServerName = "DSN or Server Name"
'If you are connecting to Oracle there is no DatabaseName. Use an empty string.
'For example, .DatabaseName = ""
.DatabaseName = "DatabaseName"
.UserID = "Your User ID"
.Password = "Your Password"
End With
'This code works for both user tables and stored procedures. Set the CrTables to the Tables
'collection of the report
CrTables = crReportDocument.Database.Tables
'Loop through each table in the report and apply the LogonInfo information
CrystalReportViewer1.ReportSource = crReportDocument
<C# .NET>
-----------
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
//Setup the connection information structure to log on to the data source for the report.
// If using ODBC, this should be the DSN. If using OLEDB, etc, this should be the physical
//server name
crConnectionInfo.ServerName = "DSN or
Server Name";
crConnectionInfo.DatabaseName = "DatabaseName";
crConnectionInfo.UserID = "Your UserID";
crConnectionInfo.Password = "Your Password";
// This code works for both user tables and stored procedures
//Loop through all tables in the report and apply the connection information for each table.
for (int i = 0; i < crTables.Count; i++)
{
crTable = crTables [i];
crTableLogOnInfo = crTable.LogOnInfo;
crTableLogOnInfo.ConnectionInfo =
crConnectionInfo;
crTable.ApplyLogOnInfo(crTableLogOnInfo);
//If your DatabaseName is changing at runtime, specify the table location. For example, when
//you are reporting off of a Northwind database on SQL server you should have the following
//line of code:
crTable.Location = "Northwind.dbo." +
crTable.Location.Substring(crTable.Location.LastIndexOf (".") + 1)
}
crystalReportViewer1.ReportSource = crReportDocument;
CAUTION:
• If you're using a web application make sure that, you do not specify or call the DataBind in your code
as this will nullify the code above.
If the above code still results in a LogOn Failure in a Web application (ASP.NET), please refer to the
Knowledge base article c2010867 (For Windows 2000) or c2013758 (Windows 2003 server (IIS6)), and
make sure ASPNET account has enough access to the database, reports, and the application
directories.
• If you are changing database at runtime, it is important that you specify the table location after you
apply logon information (this is a case sensitive property). You can either specify the tablename only or
the fully qualified tablename such as:
crTable.location = "databaseName.dbo.tablename"
• If you are reporting off of an Access Database, then you only need to specify either the ServerName or
DatabaseName to the ConnectionInfo Object depending on how you are connecting to Access.
For example, if you are connecting to Access through ODBC, then you just need to set the
DatabaseName for the ConnectionInfo object as the following:
With crConnectionInfo
.DatabaseName = "C:\mydatabase\mydata.mdb"
End With
• If you are connecting to Access via OLEDB, then you
just need to set the ServerName:
With crConnectionInfo
.ServerName = "C:\mydatabase\mydata.mdb"
End With
X Training:
http://www.crystaldecisions.com/training
#19 How to create a report and add a parameter field using Report
Creation API
http://support.businessobjects.com/library/kbase/articles/c2007184.asp
NOTE: 2. In the dialog box select the 'Crystal Report 8 ActiveX Designer Run Time Library'
check box. Click 'OK' to save the changes.
For more
information on the 3. On the 'Project' menu, click 'Components'. The 'Components' dialog box appears.
RCAPI refer to the
'Seagate Crystal 4. In the dialog box click 'Controls', select the 'Crystal Report Viewer' check box and
Reports 8 Technical then click 'Apply'. This adds the CRViewer icon to the Microsoft Visual Basic toolbar.
Reference Guide'. Click 'OK' to save the changes.
The guide can be
found in the Docs 5. On the Microsoft Visual Basic toolbar double-click 'CRViewer'. The Crystal Report
folder of the Crystal Viewer is added to the form.
Report 8 installation
CD. 6. Double-click 'Form1' to open the 'Code' module. Insert the 'Sample RDCAPI code' in
the code module.
7. Once you have inserted the code, on the 'Run' menu, click 'Start' to run the
application.
Option Explicit
'RDC Runtime Objects used in this sample.
Dim crApplication As CRAXDRT.Application
Dim crReport As CRAXDRT.Report
'***********************************************
'The Form_Load event creates an instance of the RDC engine, then makes calls to routines
'that will setup the report and finally display the report in the Crystal Report Viewer control.
'***********************************************
'Calling a routine that will add a database connection for the report
Call AddDatabase
'Calling a routine that will add a parameter field to the ParameterFieldDefinitions collection,
'and include the parameter in a record selection formula.
Call AddParameterField
End Sub
'***********************************************
'The AddDatabase() routine is used to add a native database connection to the sample
'database, Xtreme.MDB. In this sample the 'Customer' table is being added.
'***********************************************
'Get the Tables collection because it has the Add() method needed
'to add a connection to the report
Set crDBTables = crReport.Database.Tables
'Set the values for the connection variables The full path and name of the Access database.
'The database resides in the same directory as the application
' sDatabasePath = App.Path & "\xtreme.mdb"
'Use the .Add() method to add the database table to the report. There are several optional
'arguments for the Add method. Which arguments are passed will depend on the type of
'database, the type of table and the type of connection.
'***********************************************
'The AddToDetails () routine is used to add objects to the Detail section. In this case, two 'fields
from the 'Customer' table are added.
'***********************************************
Public Sub AddToDetails()
Dim crSection As CRAXDRT.Section
Dim crFieldObject As CRAXDRT.FieldObject
'****Add database fields and the formula field to the Details section*****
'Since we are working with the Details section of the report, we need to get the 'D' section of 'the
report.
Set crSection = crReport.Sections.Item("D")
'**Add the 'Customer Name and 'Last Year's Sales' fields to the details section**
'Set a Field object to the AddFieldObject method of the Detail Section
'The Field parameter is set to the table.fieldname
'The Left and Top parameters are passed as integers to position the field
Set crFieldObject = crSection.AddFieldObject("{Customer.Customer Name}", 600, 0)
End Sub
'***********************************************
'The AddParameterField () routine is used to add a parameter field to the
'ParameterFieldDefinitions collection. The default values for the parameter field will be set and
'the parameter will be included in a record selection formula
'***********************************************
Public Sub AddParameterField()
'Since we are adding a formula field to the ParameterFieldDefinitions collection we need to get
'the ParameterFields from the report object Set crParameterFields = crReport.ParameterFields
'With the new parameter field set the default values Set the Value to be a single discrete
'value and do not allow multiple values This is the first parameter field created in the report so
'we access the first item in the ParameterFieldDefinitions collection
With crReport.ParameterFields(1)
.AddDefaultValue 50
.AddDefaultValue 500
.AddDefaultValue 10000
.AddDefaultValue 25000
.AddDefaultValue 50000
.AddDefaultValue 100000
.AddDefaultValue 150000
.AddDefaultValue 200000
.AddDefaultValue 250000
.AddDefaultValue 500000
.AddDefaultValue 1000000
.DiscreteOrRangeKind = crDiscreteValue
.EnableMultipleValues = False
End With
'Pass a record selection formula to the report The record selection formula contains the newly
'created parameter When the report is run the parameter will prompt the user. The default
'values set previously will be available to the user to select the name of the parameter field in
'the recordslection formula will follow this format:
'{? + The name of the new parameterfield + }
'crReport.RecordSelectionFormula = "{Customer.Last Year's Sales} < {?Sales Maximum 'Value}"
End Sub
'***********************************************
'The Form_Resize event is used to size the Crystal Report
'Viewer control to the size of the Parent form (Form1).
'***********************************************
Private Sub Form_Resize()
With CRViewer1
.Top = 0
.Left = 0
.Width = Me.ScaleWidth
.Height = Me.ScaleHeight
End With
End Sub
'***********************************************
'The Form_Unload event is used to clean up the objects
End Sub
X Training:
http://www.crystaldecisions.com/training
X Synopsis
Where can you find documentation or help files for Crystal Reports for Visual Studio
.NET (VS .NET)?
X Solution
You can also find CR for VS .NET resources on the Business Objects support site.
Documentation is accessible through a variety of methods in VS .NET. The common ones are:
X Training:
http://www.crystaldecisions.com/training
Summary:
Whether you are a novice or an expert, there are additional resources available to help
you get more from your investment. To investigate all of the options, please visit
http://www.businessobjects.com/services/training/crystalreports.asp
You might also want to consider certification. “73% of employees surveyed said
certification played a significant role in career advancement.”
(Certification Magazine’s 2003 Salary Survey, December 2003.)
http://www.businessobjects.com/services/training/crystal/certification.asp
A final tip: If you are responsible for team or organization training or if user adoption is
important to you, we have a white paper just for you. The comprehensive report is free
of charge – download your copy by visiting www.businessobjects.com/training
Thank you for investing the time to learn our Crystal Reports secrets. We hope that you
already feel more confident in your ability to design better reports, faster.
If you have any questions, please contact us. Our customer service representatives are
ready to help you. In North America call 1-866-665-4176 or contact a worldwide office.
Americas
Business Objects Americas
3030 Orchard Parkway
San Jose, California 95134
USA
Tel: +1 408 953 6000
+1 800 877 2340
Asia-Pacific
Business Objects Asia Pacific Pte Ltd
350 Orchard Road
#20-04/06 Shaw House
238868
Singapore
Tel: +65 6887 4228
Japan
Business Objects Japan K.K.
Head Office
Yebisu Garden Place Tower 28th Floor
4-20-3 Ebisu, Shibuya-ku
Tokyo 150-6028
Tel: +81 3 5720 3570
For a complete listing of our sales offices, please visit our website.
http://www.businessobjects.com