Another factor is that using a Stored Procedure (or a SQL Command Object, which is conceptually the same) will hinder you from efficiently using some Crystal Reports functionality.
As an example:
You have a report design requirement to have a single parameter that allows users to select one item, multiple items or all items. You can do this with Crystal Reports parameters in such a way that the criteria is always passed to the database for processing. Stored Procedure parameters, however, do not allow you to select an array (multiple) of parameter values. In order to provide the same functionality, you'd have to:
1) Create a single string-type parameter with user-delimited values and then parse out the values within the SQL itself. This is much more difficult than it needs to be....
2) Create a Crystal Reports parameter on top of the stored procedure. The problem is that this parameter will always be processed on the client instead of on the server when the stored procedure is executed (because the stored procedure has to be called before any Crystal functionality is allowed). The result is slower processing, too much data being passed over the network and an inefficient report.
As satinsilhouette said, unless you need to manipulate the data in a more advanced manner, views are typically better.
Personally, I create as many of my reports on views as I possibly can...
~Kurt