Crystal Reports: how to inventory hundreds of .rpt files before a migration
Why reports break in a legacy migration, how to find every .rpt file, which ones are still used, and how to recover logic hidden in report formulas.
Why reports break in a legacy migration, how to find every .rpt file, which ones are still used, and how to recover logic hidden in report formulas.
Who this is for
Project sponsors and IT managers replacing a legacy application that has Crystal Reports attached.
Question this answers
How much work is our reporting going to be, and how do we find out before committing?
What you'll leave with
Reporting is what derails legacy migrations, and it derails them late. The application gets scoped, the budget gets approved, and then somebody discovers four hundred Crystal Reports that nobody counted, each with its own connection string, pointing at a database that is about to change shape.
The good news is that the inventory almost always makes the project smaller rather than larger. This guide is the method.
The core fact, and the one that surprises people: a .rpt file is
largely self-contained. It typically holds
So the reports are not really part of your application. They are a parallel system that happens to point at the same database. Change the database underneath and every report that reads a changed table stops working, all at once, with no warning at build time.
It is also why reports survive application changes that everybody expected to break them, and then break during a change nobody thought was risky.
Reports are rarely in one place. Search for *.rpt across
everywhere, not just the obvious folder:
For each one, record the filename, where it was found, the tables it references and the connection it points at. That last field is what tells you whether it will survive the migration.
Expect duplicates and near-duplicates: SalesSummary.rpt,
SalesSummary_v2.rpt, SalesSummary_FINAL.rpt and
SalesSummary_FINAL_use_this_one.rpt. Resolving which is current is
part of the inventory, and it is usually quicker to ask the person who runs it
than to compare the files.
This is where the project shrinks, and it is worth doing carefully because the saving is large.
Ways to establish real usage, in rough order of reliability:
In our experience the live set is a small fraction of the total. A system with four hundred report files often has thirty that anybody would notice disappearing. The other three hundred and seventy become an archive, which costs almost nothing compared with rebuilding them.
Crystal formulas are worth reading even for reports you are not going to rebuild. They routinely contain business rules that exist nowhere else in the organisation, because somebody needed a figure calculated a particular way and the report was the fastest place to put it.
Typical examples we find:
If a report produces a number the board sees, read its formulas before replacing it. Rebuilding the report from the visible output rather than the formula is how organisations quietly change what a figure means, and nobody notices until somebody asks why this year does not compare with last.
For the live set, rebuild in whatever reporting tool suits where the data is going and who writes reports. The tool matters far less than the reconciliation.
Reconciliation means running the old report and the new one over the same period and comparing figure by figure until they agree. Not approximately, exactly. Reporting is the part of a migration the business checks first and trusts least, and a single unexplained variance will cost you more credibility than the whole rest of the project earns.
A useful and underused option: if the database structure survives the migration largely intact, the Crystal reports can keep running against it while the application is replaced. You then deal with reporting as a separate project afterwards.
This works when you are replacing the application layer and keeping the database. It does not work when the data model itself changes, which is the case in most true legacy migrations, so check early rather than assuming.
Either way the inventory comes first. It is a few days of work, it usually reduces the reporting scope by an order of magnitude, and it turns the one part of the project most likely to produce a nasty surprise into a known quantity before anybody commits to a number.
Ask the author
Ask it here and it comes straight to Kasun, who wrote this. No sales call, no obligation, and a real answer even if the answer is that you do not need us.
Kasun Wijayamanna
Founder, replies within one business day
Tell us what you are comparing, replacing, or trying to improve. We will come back with a practical recommendation and realistic scope.
Built here. Your data stays here.
Thanks for reaching out. We will get back to you within one business day.
See what else we do