Chris, there's probably other ways to do this, but the way I found that I was able to get working is to use the AddGroup method of the report object. Such as:
LOCAL loCR as CrystalRuntime.Application
LOCAL loReport as CrystalRuntime.Report
loCR = CREATEOBJECT("CrystalRuntime.Application"

loreport = loCR.NewReport()
loreport.AddGroup(0,loreport.Database.Tables(1).Fields(1), LOC_crGCAnyValue, LOC_crAscendingOrder)
Note this is Visual Foxpro code (not everyone codes in VB <s>).
The 4 parameters passed to the AddGroup method are the group number in the report (this is the 1st group), the condition to group on (in this case its that field, and you can't use the field name like 'customer.cname' there, you have to use reference the position in the database heirarchy), the Group Condition (which can be all kinds of weird stuff, in this case, that LOC_crGCAnyValue simply says to start a new group whenever that field changes), and then the sort order.
The thing about this AggGroup method is that it will not display the group name on the report, i.e. the "customer's name" will not be placed in the group header automatically, which is what happens when you add a new group to a report in the regular Crystal IDE. What's really frustrating is that in the CrystalDevHelp.chm they have a sample for adding a new group to a report, but they state right at the top of the sample code "Please note that using this method will not display the group name on the report". And of course they don't state what to use to display the name. So if you can figure out how to display the name, please let me know.
Thanks,
Dan