if the records are grouped by product code and date, then couldn't you in your formula just check when the price > 0? When it is record the date of the change. I might be different groupings, but as long as code and date are there it would seem that this would work. You could display the date in a group footer and reset it in the header.
I'm not too much for looking for items in different passes that Crystal makes, but then I prefer to use stored procs and let SQL give me answers like this, so that Crystal doesn't need to.
Hope this helped...but I might be on the wrong track altogether.