This article contains details relevant to versions up to 6.5. A future post will explain changes introduced by 7.0.
When a user runs a Crystal report from Solomon, they are actually calling ROI.exe. It looks like this. (You’ve seen it before but may have not known its name.)

In the picture, a user has clicked Trial Balance from the Reports menu of the GL module. If you were to click the down arrow on the Report Format drop-down, there are actually 2 Trial Balance formats – Combined Totals and Debit and Credit Totals. (This is how the Trial Balance comes out of the box. If you get different results, your system has been customized, but the principles are the same.)
One of the things that can be confusing about SL reporting is that the word report doesn’t mean the same thing in Solomon as it does in Crystal. From SL’s point of view, I would describe the Trial Balance as 1 report with 2 formats. If you choose the Combined Totals format, the Crystal report file that will be run is 01610a.rpt. If you choose the Debit and Credit Totals format, the Crystal report file that will be run is 01610b.rpt. So 1 Crystal report (or more specifically 1 Crystal report file) doesn’t map to 1 SL report, but rather 1 format of an SL report. Each SL report can have 1-8 formats defined by 1-8 Crystal report files. (Solomon reports usually print the name of the Crystal report file in the top right corner of the page header with the caption Report.)
Report Control Maintenance screen
Report formats are defined by using the Report Control Maintenance screen, which can be found on SL’s Utility menu. If you open this screen and type 01.610 in the Report Number field and TAB out of the field, you will see the Format names listed on the left and the corresponding Crystal report file names listed on the right. The formats defined on the left side correspond with the values in the Report Format drop down on the ROI screen. There are more options here, but we’ll cover more in the later posts.
If you look at the Delta.mnu file and search for the Trial Balance line, you’ll see it looks like this:
Trial Balance, ROI.EXE ; 01610
There’s that 01610 number again. That’s the same value you typed in the Report Control Maintenance screen to pull up the Trial Balance format information. It’s also shows up in the title bar of the ROI screen (image above). What exactly is that number?
RPTControl table
There is a table in the System database named RptControl and this value represents the primary key of that table. (The field name is ReportNbr.) If 1 Crystal report file represents 1 report format on a particular SL report, 1 record in RptControl represents 1 SL report. In fact, it’s probably better to say that the record in RptControl defines the SL report.
Here’s the way it works. When you click on the Trial Balance menu item in the SL menu, ROI.exe is called and passed a command line argument of “01610″. When ROI loads it takes the value passed in and reads that RPTControl record (select * from RptControl where ReportNbr = ’01610′), and populates the Report Format drop down list based on the values it finds in the fields ReportFormat00 – ReportFormat07 and ReportName00 – ReportName07. (It actually does a lot more here, but we’ll save that for a future article.)
You might expect report formats to be stored in another table with a 1 to many relationship between RptControl and the format table, but that’s not how it actually works. Instead there are 8 pre-defined “slots” in the RptControl record and the format name (e.g., Combined Totals) is stored in the ReportFormatXX field and the Crystal report file name (without the “.rpt” is stored in the corresponding ReportNameXX field.
Usr_Rpts folder
There is no path stored in the ReportNameXX field. ROI finds the Crystal report file by looking first, in the Usr_Rpts folder, and if it doesn’t find a matching file there – it looks in the appropriate module folder.
Let’s talk about the module folders first. Every SL screen has a 7 digit screen number that is usually displayed like this (00.000.00) in the window title. Every SL report has a 5 digit report number (01.610 is the one for Trial Balance). Notice they are segmented into 3 and 2 sections respectively. In both cases (screens and reports), the first 2 digit segment represents the module. 01 is General Ledger, 03 is Accounts Payable, 08 is Accounts Receivable, etc.
In the folder on the file server where the SL programs are installed, there are many 2 character folders under the main folder. Most of these are module folders – “GL” is General Ledger, “AP” is Accounts Payable, etc.
Based on this, you would expect to find the Crystal reports for the Trial Balance (which is a GL report because its report number begins with 01) in the GL folder. The “out of the box” versions are there.
Getting back to the Usr_Rpts folder – if you customized one or both of the Trial Balance Crystal report files and then did an SL upgrade, the upgrade process would overwrite your customized version of 01610a.rpt with the SL version. That’s the purpose of the Usr_Rpts folder. SL won’t ever put anything there. If you customize 01610a.rpt (or any other report), save your changes in the Usr_Rpts folder and it will survive a customization.
When ROI is looking for the correct file, it looks first in Usr_Rpts to see if you have saved a customized version. If you have – it uses this file. If not, it gets the “out of the box” version from the GL (in this case) folder.
Much more details to come, but that’s enough for Part 1.