Working with Crystal Reports

 

As with most visual basic programmers at some point and time you will need to create reports. As we all know Crystal Reports is included with Visual Basic. Older versions of VB came with version 4.6 and gets installed when you install VB but with VB6 you have to install it yourself off the CD, the file is called CRYSTL32.EXE and is located under \COMMON\TOOLS\VB\CRYSREPT.

I well show you how to create several reports using Crystal Reports from a basic list to a invoice and customer statement. All these reports will be created in Crystal and run from with in VB. I am by no means a Crystal Reports expert, we will not be going over Subreports, Cross-Tab, Drill Down or Special Fields just basic reports.

Since I'm making the reports a basic as possible you should be able to create them using Crystal Reports 4.6 and up. I'll be using Crystal Reports 7.0, VB5 and the database will be Access 97.

You can download the database that we will be using by clicking the link (crwDemo.zip).

 

Selecting the Report Expert

When you open Crystal Reports and click the new icon the Report Gallery dialog box will pop up, you will see 8 different types of reports you can choose from or you can bring in a already created report (Figure 1 ). For the purpose of this tutorial we will be using the Standard, Mail Label and the "Custom" report expert.

The first report we will create is a Inventory list, it will list the part number, part description and part price. Fist we will use the standard expert then the custom expert. We will then add the code to VB that will allow us to run the reports or even let us specify a specific date range we want or a specific customer we may wish to view, all from with in VB.

 

Creating an Inventory List

Open Crystal and click new then select "Standard" then click the "Data File" button (Figure 2). A dialog box will pop up asking you to choose the database the report will be based on, in our case the database (crwDemo.mdb) was selected and the "Add" button was clicked(Figure 3). Once you add the database another dialog box will popup asking you for the tables that will be used for this report (Figure 4), we will be selecting the "Inventory" table, once we select the table click on and click the "Done" button.

Now click on the "Fields" tab and we will select the records that we want the report to display, we will select the ItemNo, ItemDescp and ItemPrice1 (Figure 5 ). Next click on the "Sort" tab, since this is a parts list then we want to sort by the part number so double click on INVENTORY.ItemNo. Since we wont be totaling any thing or creating a graph we will move to the "Style" tab, and enter the name of the report, we will call it the Inventory List, so enter that in the "Title" text box. Since we will be creating a standard style report we can click the "Design Report" button on the bottom (Figure 6). The designed report will look like this and when run (by clicking the icon next to the printer) it will look like this.

Now save the report as Inventory List and make sure you uncheck "Save Data with report". Since parts may be added and removed we want fresh data each time we run the report.

 

The Clean Up

Now that we have the report created we will do some tweaking to make it look more professional. First we are going to remove Group header and Group Footer information since we do not need to duplicate the Inventory Item and since we don't need a Grand Total we will remove that also (Figure 7). Since we are removing these items from the report then we can close up the Group Header and Group Footer rows, we do this by dragging the row bar up till they are no longer visible (Figure 8).

Now we want the title of the report to be displayed in the center of the report and the print date and page number to be displayed on the far right of the report. So we will just drag then to where we want them. Right now the columns name are the names of the database base fields, we want to change them to there proper names, in order for us to do that all we have to do is select the field name and right click and select the edit option. We well change the names to Part Number, Part Description and Part Price. We will also remove the underline on the report fields, we do that by holding down the Ctrl key and clicking on each of the topics and then right click and select "Format Object". Click the "Font" tab and uncheck the "Underline" under the "Effect" section and click ok.

Since we removed the underline from each field we will place a double line between the filed names and the actual data. We do this by using the "Insert Line" command. Depending on how you have Crystal set it will be the first icon at the bottom of the screen if you selected "Supplementary Tools" in the tool bar option. If not then click on "Insert" then "Line". We will draw the line right under the field names all the way across the page, we will then place another line right under that one. The finished design view should look like thisand when the report is run should look like this

That's it you just created your first report, now to run it via VB you would use the following code. You can use it under a command button or a menu option.

Calling reports from VB

In order to call our report from with in VB we must add the Crystal Report control to our VB project. So click on "Project and select "Components" then click the "Crystal Reports Control" then add it to your form and change the control name from CrystalReport1 to Report1.  Now we're ready to call our report from with in VB.

Code with out password on database

Screen.MousePointer = vbHourglass
Report1.ReportFileName = App.Path & "\Inventory List.rpt"
Report1.DataFiles(0) = App.Path & "\crwDemo.mdb"
Report1.WindowTitle = "Inventory List Report"
Report1.WindowState = crptMaximized
*'Report1.Destination = crptToWindow
Report1.Action = 1
'Put cursor back to normal
Screen.MousePointer = vbDefault

Code with password on Database

Screen.MousePointer = vbHourglass
Report1.ReportFileName = App.Path & "\Inventory List.rpt"
Report1.Connect = ";PWD=yourpassword;"
Report1.DataFiles(0) = App.Path & "\crwDemo.mdb"
Report1.WindowTitle = "Inventory List Report"
Report1.WindowState = crptMaximized
Report1.Destination = crptToWindow
Report1.Action = 1
'Put cursor back to normal
Screen.MousePointer = vbDefault

*You have several option as to where you want the report to print, crptToWindow will show you a preview of the report allowing you to view it before you print it. crptToPrinter will immediately send the report to the printer, crptToFile will print the report to file and crptToMapi will print the report to the send mail of your email program.

 

Custom Design

Earlier we used the "Report Expert" to design our report, this time we will use the Custom option to design our report. To do custom design you will need to know a little bit more about Crystal and how it goes about creating reports. So start Crystal and click the "New" icon when the report gallery dialog box pops up select custom on the lower right hand portion of the Report Gallery. It will then ask you to choose Report type and Data type, we will be selecting Custom Report and Data file. Once you click on the appropriate buttons another dialog box will pop up asking you to choose the database the report will be based on, find the crwDemo.mdb and click open. Once again you will be asked what tables you want the report to be based on, select Inventory, the design window along with the Insert Fields dialog box will pop up (Figure 9).

We will now proceed to create the report, first we will add the title so click on the "Others" tab and double click on the "Report Title" and insert the Report Title in the middle or the Page Header. Then select "File| Summary Info" and enter "Inventory List" in the title text box. Now double click the "PageNumber" and place it on the far right side of the "Page Footer" and then double click on the "PrintDate" and place it on the far right had side of the Page Header. Now under the "Database" tab select ItemNo, ItemDescp and ItemPrice1 and place them in the details portion of the design grid (Figure 10).

When run the report will look like this, now all we have to do is make a few changes, first the font size of the report title. So select the report title and change the font size to 20 and make the title bold. Now we are going to add the column titles so select "Insert" and select "Text Object" and put the text object above the "ItemNo" table on the "Page Header", do this for each of the database fields and name them Part Number, Part Description and Part Price and make them bold. Now select the "Insert Line" and make the double lines like we did for the other report (Figure 11).

That's it, we have just created a custom report, it looks just like the one we did using the Report Expert when you save the report make sure you save it under a different name or it will over right the first Inventory List report..

 

Creating A Invoice Report

While our first report was a very basic list, this report will involve a little more. We will be creating several formulas that will be included with the report. Since an invoice can have more then one line item, if we do not create a formula that tells Crystal not to generate an invoice for each line item you would end up with 3 invoices with the same invoice number. Also we will be creating a formula to sub total each line items, since the sub total of each line item is not kept in the database only the total of the invoice. Remember a well designed database will not have redundant data.

A report can be as good or as bad as the design of the database, when designing the database you must take in to consideration that reports may or may not be created based on the information contained with in. So always make sure that the appropriate tables are linked together properly, if not you will not be able to create a report based on two or three separate tables if they do not have a common link.

Formulas

We will be creating 4 formulas, one will hold the sub total of each line item of the invoice, one will hold the amount of tax and freight if any, another will hold the the information that will keep all the line items together and the final formula will hold the total of the invoice.

The Design

Before we can create the invoice we have to design the way we want the invoice to look. To design our invoice I went to google and entered Invoice and clicked on the "Images" link and did a search. For those of you who don't know you can search for images on the google image search page. So I looked at a bunch of invoices and decided what I wanted my invoice to look like, I did a quick sketch of the invoice and then proceeded to create the invoice in Crystal. Here is the design I came up with (Figure 12).

Next up, creating the invoice in Crystal.

 

The Invoice

Now that we had designed our invoice it's time to open Crystal, and start the process of pulling the information from the database that will be used with our invoice. So start up Crystal Reports and click "New" and select standard, click the "Data" button and find the crwDemo.mdb database and add it to the report. The tables we will be selectiong for this report are ARINVDETAIL, ARINVOICE, COMPANY and CUSTOMER. Then click Add then Done, the link tab will be displayed showing all the tables that are linked (Figure 13 ). Remember if all the tables in the report don't some how link to each other, you cant included them in the report, believe me I learned the hard way.

Next we move to the "Fields" tab, here is where we will select all the fields that will be included in the report, they will be as follows.

ARINVDETAIL - ItemNo, Qty, Descp, Price, CustInv

ARINVOICE - InvDate, SalesTax, Frt

COMPANY - CompanyName, CompAdd, CompCity, CompState, CompZip, CompPhone

CUSTOMER - CustID, CustName, CustAdd, CustCity, CustState, CustZip

Under the sort tab we will be sorting by ARINVDETAIL.CustInv on the "Total" tab only select the ARINVDETAIL.CustInv. We will not be using the other items so move to the "Style" tab and click the "Design Reports" button. Your report will look like Figure 14, A big mess right now but of course we will be cleaning it up. The one good thing about using the custom feature is that when you finish physically adding the fields to the report it's done because you are placing the items exactly where they should go. Where as the Report Expert places everything linearly.

Next up putting everything where it should be.

 

Cleaning up the Invoice

Ok, now let make this report looking like a invoice. So lets first start removing items we don't need. First we will be removing all the Page Header fields, these are text fields and since we will be creating our own we don't need them. To remove them hold the Ctrl Key and select each of the text fields in the Page Header then click the delete button. We will not need a PrintDate or PageNumber so delete this items also. Now since we will not be needing a Grand Total remove those items from the Group Footer and Report Footer and lastly we do need the Group Header field showing up on our invoice remove that. The report will now look like Figure 15, its not much to look at now but be patient it will.

Now all the data we will be pulling from the database is in the "Detail" portion of the report, however the only items that will remain in that portion of the report are , ARINVDETAIL.ItemNo, ARINVDETAIL.Qty, ARINVDETAIL.Descp and ARINVDETAIL.Price. So lets starting move the other items to their rightful place. But before we do that we need to increase the size of our report to accommodate the new items that will be moved. So first we are going to increase the area of the Page Header field. You do this by holding your mouse over the bar that separates the Page Header and the Group Header, the icon will change from the arrow to a line with a top arrow and a bottom arrow. Now while hold the right mouse button just drag the bar down. Now do the same thing for the Page Footer and since the Group Header row is just taking up space lets drag that up so we can claim that space. the report should now look like Figure 16.

Next up completing the design

 

Completing the design

Now that we have enough space to place all the items where we want them, lets start moving the database fields from the Details portions of the report to their proper places. The very first item is the ARINVDETAIL.CustInv, select it and drag it to the far right hand side in the Page Header portions of the report. The next item we will be moving is the ARINVOICE.InvDate, select that and drag it under the CustInv record. Next select the ARINVOICE.SalesTax and drag it on the far right hand side to the Page Footer, just under the Report Footer. Next drag the ARINVOICE.Frt under the SalesTax record. The company name, address, city, state and zip will be placed at the top left hand side on the Page Header. The first row will have the company name, the address will go under the name and the city, state and zip will go under the address and lastly under that the company phone number

Now the last of the items we will be removing are the Customer name, ID, address, city state and zip. Place them about 6 grid line under the company phone number and abut 11 grids over, place them in the same order as the company. Your report should now look like Figure 17.

Next up adding the formulas

 

Adding the formulas

Now that we have designed the invoice and placed everything where it should be its not time to add the formulas. The first formula will be for the subtotal we will name this formula Amount. So click "Insert" and select "Formula Field" click the "New" button and name the formula Amount and click ok. The formula editor window will pop up so double click ARINVDETAIL.Qty then click the times character (*) then double click ARINVDETAIL.Price. The formula should look like Figure 18. Place this formula in the "Detail" section next to"Price".

The next formula will be adding the sales tax and frt. together this formula will be included with another formula. So select insert and formula field and click new. Name this formula "TaxFrt" and click ok, then double click on ARINVOICE.SalesTax use the plus(+) symbol then double click on ARINVOICE.Frt, the formula should look like Figure 19.

Now we are going to create the formula that will hold the total of the invoice, it does this by totaling each line item that has the same invoice number. So add a new formula like before and name it Save_Sum, then copy the formula below.

WhilePrintingRecords;

Currencyvar S:=Sum({@Amount},{ARINVDETAIL.CustInv}) + {TaxFrt}

Now place this formula in the report footer section and right click select "Format Field" click the "Common tab and click the "Suppress" check box. Doing this will make it so the formula is not displayed when you run the report, basically making it invisible. Our last and final formula is the total formula. This formula will actually print the total of the invoice, it will hold the subtotal the tax and freight if any. So create a new formula name it Print_Sum and add the code below.

WhilePrintingRecords;

Currencyvar S;

That's it you have completed the invoice report, all that is left now is to use the line and box features and add some labels to make it look more like an invoice.

Next up the finishing touches.

 

The Rap Up

Ok we have all the data placed where it should be, we have added the formulas to make everything add up. Now all we have to do is make the invoice look more like an invoice, so we will add some labels, a box and columns to divide the sections. So lets get started!

Ok, first we are going to add the labels to the columns, so click insert and Text Object and place it near the bottom of the Page Header over the ItemNo, now do the same for the Quantity, Description, Price and Amount (Figure 20).

Now we are going to add a Bill To: label so click insert and select Text Object and place it just above and to the right of the customers name. Make it bold and the font size 11. Now add labels to the Invoice number and invoice date, place the labels above each. Lastly we are going to add labels to the sales tax, freight and total. So insert a new text object for each and place the on the left had side. Your invoice should now look like (Figure 21, Figure 22)

Now the last thing we need to do is add the box around the invoice and lines between the columns. So click insert and select "Box", start at the part number and drag the box all the way to the end of the "Amount" then drag it down under the "Report Footer". Now we are going to add lines between the columns so click Insert and select line, draw a line between Part Number and Qty, Qty and Description, Description and Price and Price and Amount. The last line we will add well between the Column Labels and the "Detail" data, so insert another line and place the line just under the columns labels and drag it to the other end of the box. Your invoice is now complete and should look like this (Figure 22, Figure 24, Figure 25).

Next up, running the report from VB

 

Printing the Invoice(s)

Now that we have our invoice created we can then run it from with in VB. Since some times you may need to reprint an invoice we will have to different codes to run the invoice report. One will require you to enter an invoice number, for this one will be using the "SelectionFormula" to tell Crystal what invoice to print. The other code will print all invoices that have not been printed, this feature will allow the end user to input several invoices at a time with out having to print each one at a time.

Printing one Invoice

This code assums that you have a text box (txtPrintInv) that the invoice number will be placed.

'Check to see if they have entered a invoice 'number
            If txtPrintInv = "" Then MsgBox "Please enter a invoice number in the text box": txtPrintInv.SetFocus: Exit Sub
            'Code to print invoice
            Screen.MousePointer = vbHourglass
            'Print report
            MDIIV.Report1.ReportFileName = App.Path & "\Reports\invoice.rpt"
            'MDIIV.Report1.Connect = ";PWD=;" ' Not needed this DB does not have a password
            MDIIV.Report1.DataFiles(0) = App.Path & "\crwDemo.mdb"
            MDIIV.Report1.SelectionFormula = "{ARINVOICE.CustInv}=" & CInt(txtPrintInv)
            MDIIV.Report1.WindowTitle = "Print Invoice"
            MDIIV.Report1.WindowState = crptMaximized
            MDIIV.Report1.Action = 1 

Now that you have printed the invoice you need to update the database so it shows the invoice printed. This is needed so you can use the "Print All Open Invoices" feature.

'Now update the database to show that the invoice was printed
            Dim db As Database
            Dim rs As Recordset
            Dim sql As String
           
            sql = "Select Printed From ARINVOICE Where CustInv =" & CInt(txtPrintInv)
            Set db = OpenDatabase(App.Path & "\crwDemo.mdb", False, False, ";pwd=")
            Set rs = db2.OpenRecordset(sql)
                rs.Edit
                rs("Printed") = 1
                rs.Update
            rs.Close
            db.Close
           

Print All Open Invoices

This code assumes that you have a printed options in the database and once an invoice gets printerd it marked printerd.

Screen.MousePointer = vbHourglass
    'Print report
    Report1.ReportFileName = App.Path & "\Reports\invoice.rpt"
    'Report1.Connect = ";PWD=;" 'Not needed this DB does not have a password
    Report1.DataFiles(0) = App.Path & "\crwDemo.mdb"
    Report1.SelectionFormula = "{ARINVOICE.Printed}= No"
    Report1.WindowTitle = "Print Invoice"
    Report1.WindowState = crptMaximized
    Report1.Action = 1

    'We need to clear the SelectionFormula so it won't effect any other reports
    Report1.SelectionFormula = ""

Screen.MousePointer = vbDefault

Now you need code that will mark the invoices printed.

Private Sub markPrinted()
On Error Resume Next
Dim db As Database
Dim rs As Recordset
Dim sql As String
Dim i, rCount As Integer
       
    sql = "Select * From ARINVOICE Where Printed=No"
    Set db = OpenDatabase(App.Path & "\crwDemo.mdb", False, False, ";pwd=")
    Set rs = db.OpenRecordset(sql)
    rs.MoveLast
    rs.MoveFirst
       
    rCount = rs.RecordCount
   
        Do Until i = rCount
            rs.Edit
            rs("Printed") = 1
            rs.Update
            rs.MoveNext
            i = i + 1
        Loop

rs.Close
db.Close

That's it we were done!

 

Creating a Customer Statement

This will be the final report we will design for this tutorial. We well use the custom feature so we wont have to go back and clean up every thing once were done. So let get started!

Start a new report in the report gallery select the custom option, under data type choose Data File now find the database that this report will be based on (crwDemo.mdb). Select ARINVOICE, Company and Customer, now grab the Report Header bar and drag it up so that the header field is very small. Now grab the Page Header bar and drag it down so that you will have more room to add the company and customer information. Now put the company Name, address, city, state, zip and phone on the report. Do the same for the customer information. Under the "Insert Field" module click the "Others" tab and double click on "Report Title" and place it at the top of the Page Header in the middle. Under "File" select "Summary Info" and enter Customer Statement in the Title text box. Now we are going to add two labels, one to show the statement date and the other to show the outstanding balance. Your report should look like (Figure 26)

Now we have to create a Group Header, so click Insert, Group and select ARInvoice.CustID click the "Keep together" box and click ok. Under the Group Header we are going to add several labels they will be as follows; Invoice #, Date, PO#, 0-30, 31-60, 61-90 and Over 90. Now select them all and click bold, and since we want to separate the field names from the data add to lines under the field titles. The report should now look like (Figure 27). Now we need to add the corresponding data so select Insert then select database field. Now under ARInvoice double click CustInv and put it under the invoice label in the Details section, do the same for the date and PO #, don't forget to delete the titles that are created automatically in the Page Header section. Now hold your mouse over InvDate and right click and select "Format Field" and change Date Time to just  Date.

Next up creating the formulas.

 

Creating date formulas

Now that we have designed the form and put the titles and data in the correct place we need to and the formulas that will put the invoice in the correct date range. We well be creating 5 formulas once for each 30 day period and one that will hold the total of outstanding invoices. Crystal come with a built in Date Range that we will use, so select "Insert" Formula and click New, name the formula 0-30 and then copy and past the code below in the formula editor. You will find the AgeTo in the Function section of the formula editor under date range.

if {ARINVOICE.InvDate} in Aged0To30Days then
    {ARINVOICE.Total}

Now insert that formula under the 0-30 column in the report, do this for each of the other dates. The last formula will be the balance outstanding so create a new formula name it Stmt_Total and copy the code below and insert it next to the Outstanding Balance label.

Sum ({@0-30}, {ARINVOICE.CustID})+Sum ({@31-60}, {ARINVOICE.CustID})+Sum ({@61-90}, {ARINVOICE.CustID})+Sum ({@90plus}, {ARINVOICE.CustID})

Now we need to total up each field, so lets add a Total label and select each of the date formulas and right click and select "Insert Grand Total" a grand total will be added to the Report footer. You need to to this for each of the date values.

Now we are going to make sure that only relevant data is displayed, we don't check this all invoices will displayed paid or not. So first lets select the each date formula right click and select format field. Under the number tab check the box that says "Suppress if Zero". Now the last thing we will do is tell Crystal that if the invoice is paid then don't include it in the statement. So from the menu click "Format" then select "Section". Select "Details", click the "Suppress(No Drill-Down)" then click the edit button next to it. In the Format Formula Editor, double click on "ARINVOICE.Paid" the formula should look like this.

{ARINVOICE.Paid}= Yes

This will tell Crystal to suppress any invoice that is paid, so it will not be included in the report. Your finished report should look like (Figure 28). And when run will look like (Figure 29, Figure 30).

That's it we just completed a customer statement that will only print open invoices.

Next up More on Formulas

 

Date range formulas

There will come a time when you need to run a report based on a date range. Lets say that you need to keep track of your sales, but you also want to know what the sales were for one month or the year, now you don't want to create separate reports to achieve this. That's where the SectionForumla comes in, you can use this to pull just the specified dates for your report. So the code below will be used to get a specific date range for your sales report.

This code assumes that you have two text boxes one for the start date and one for the end date.

Dim SDate, EDate As String
If txtSDate = "" Then MsgBox "Please enter a start date in the mm/dd/yy format": txtSDate.SetFocus: Exit Sub
If txtEDate = "" Then MsgBox "Please enter a end date in the mm/dd/yy format": txtEDate.SetFocus: Exit Sub

Screen.MousePointer = vbHourglass
       
        SDate = Format(txtSDate, "yyyy,mm,dd")
        EDate = Format(txtEDate, "yyyy,mm,dd")
        
        Dim rptDate As String
        rptDate = "{ARINVOICE.InvDate}"
        
        Dim rptSelect As String
        rptSelect = rptDate & " in Date(" & SDate & ") to Date (" & EDate & ")"
   
    'Print report
    Report1.ReportFileName = App.Path & "\Sales Report.rpt"
    Report1.Connect = ";PWD=pwd;"
    Report1.DataFiles(0) = App.Path & "\dbname.mdb"
    Report1.WindowTitle = "Sales Report By Date"
    Report1.SelectionFormula = rptSelect$
    Report1.WindowState = crptMaximized
    Report1.Action = 1
      
Screen.MousePointer = vbDefault

First we take the date in the text boxes and format them in a way that Crystal understands. Then we get the table that date will be based on, then we use the "In Date" and "To Date" functions to tell Crystal what dates we want displayed for our report. Then finally we use the SelectionFormula to tell Crystal pull the records between the two dates.

 

Getting a specific record

Sometimes when you create a report it my be built around many customers or employees, sometimes you may only want to view one customers records or one employees information. Once again we can use the SelectionFormula to achieve this instead of creating a new report.

Scenario, we have an application that helps businesses keep track of there tech support calls. The report "Open Tickets" keeps track of all the open problem tickets. This report lets you know who is working on the problem, what the problem is, the priority of the problem and how long it's been open. But what if you only wanted to view the records for one employee to see how they are handling their "Open Tickets". To do this would be very easy, all you would have to do is add a new menu item "Open Tickets by Technician" Then use the code below.

Private Sub mnuOpnTickTech_Click()
Dim tID As String

tID = InputBox("Please enter the Tech ID you wish to view.")

Screen.MousePointer = vbHourglass
            Report1.ReportFileName = App.Path & "\Open Tickets.rpt"
            Report1.Connect = ";PWD=pwd;" 'Needed only if the database has a password
            Report1.DataFiles(0) = App.Path & "\dbname.mdb"
            Report1.SelectionFormula = "{CallLog.Tech}='" & tID & "'"
            Report1.WindowTitle = "Print Open Tickets by Technician"
            Report1.WindowState = crptMaximized
            Report1.Action = 1
           
Screen.MousePointer = vbDefault

The code above tells Crystal instead of pulling all the Open Ticket orders, only pull the ones were the Technician is tID. It's the same report but now instead of showing all the employees Open Tickets it only displays one.

 

Crystal Reports Resources

This will conclude, "Working with Crystal Reports". Although we only touched on what can be done with Crystal Reports there are many other resources on the web that can help you understand and use Crystal Reports. The first place to do that is the Crystal Reports site itself. Below is a list of other resources on Crystal Reports.

Crystal decisions - Crystal Reports technical support

http://support.crystaldecisions.com/library/kbase.asp

Crystal Reports Tutorials and Forums

http://keptin.net/crystaldecisions/crystalreports/

Crystal Reports - Mailing list

http://groups.yahoo.com/group/crystalreports/

Getting Started with Crystal Reports 8.5

http://www.thinkydink.com/crystal.html

Using the Report Designer Components (RDC) in VB

http://www.crystalkeen.com/articles/crystalreports/rdcinvba.htm

 

Element K Courses

Don't forget that ElementK also has several courses on Crystal Reports, both instructor led and self-study courses.

Crystal Reports 8.0, Level 1 - Instructor-led

http://learn.elementk.com/CourseCatalog/course_syllabus.asp?CourseID=6135&CourseType=1

Crystal Reports 8.0, Level 2 - Instructor-led

http://learn.elementk.com/CourseCatalog/course_syllabus.asp?CourseID=6153&CourseType=1

Crystal Reports 8.5: Basic Skills - Self-Study

http://learn.elementk.com/CourseCatalog/course_syllabus.asp?CourseID=1848&CourseType=4

Crystal Reports 8.5: Advanced - Self-Study

http://learn.elementk.com/CourseCatalog/course_syllabus.asp?CourseID=1869&CourseType=4

Crystal Reports 8.0: Basic Skills - Self-Study

http://learn.elementk.com/CourseCatalog/course_syllabus.asp?CourseID=1641&CourseType=4

Crystal Reports 8.0: Advanced - Self-Study

http://learn.elementk.com/CourseCatalog/course_syllabus.asp?CourseID=1683&CourseType=4

 

 

Copyright© 2003 Marietta Crockett
Disclaimer