It was only available before CR8 if you begged Crystal and then only if you were of strategic importance. You needed a license key included in your code that unlocked the functionality in the old Automation Interface.
In CR8, you get a sample app on the CD. Here's part of the sample code. As with all Crystal's samples, it's over complicated but it should help:
Private Sub DoDetails(SalaryFormula As FormulaFieldDefinition, _
TeamFormula As FormulaFieldDefinition, _
YearFormula As FormulaFieldDefinition)
Dim PlayerFormula As FormulaFieldDefinition
Dim PlayerObj As FieldObject
Dim SalaryObj As FieldObject
Dim TeamObj As FieldObject
Dim YearObj As FieldObject
Dim obj As Object
Dim LocX As Long ' The X-offset for the objects
LocX = 10
' Add the formulas to the formula fields collection
' A field must be recurring if you want to group on a field or
' automatically bind it to a data source.
' Putting "WhileReadingRecords" into the formula text makes the formula
' into a recurring field.
Const Recur = "WhileReadingRecords;" & vbNewLine
Set PlayerFormula = m_Report.FormulaFields.Add("Player", Recur & "Space(10)"

Set TeamFormula = m_Report.FormulaFields.Add("Team", Recur & "Space(10)"

Set SalaryFormula = m_Report.FormulaFields.Add("Salary", Recur & "$0.0"

Set YearFormula = m_Report.FormulaFields.Add("Year", Recur & "Space(10)"
' Add the fields only if the user wants them
' The player's name
If g_PlayerName = True Then
Set PlayerObj = m_Report.Sections(3).AddFieldObject(PlayerFormula, LocX, 0)
PlayerObj.Name = "Player"
PlayerObj.Width = 2600
LocX = LocX + 2100
End If
' Add the name of the team that the player belongs to
If g_TeamName = True Then
Set TeamObj = m_Report.Sections(3).AddFieldObject(TeamFormula, LocX, 0)
TeamObj.Name = "Team"
TeamObj.Width = 2800
LocX = LocX + 2000
End If
' Add the player's salary for that year
If g_Salary = True Then
Set SalaryObj = m_Report.Sections(3).AddFieldObject(SalaryFormula, LocX, 0)
SalaryObj.Name = "Salary"
SalaryObj.Width = 1500
SalaryObj.CurrencySymbolType = crCSTFloatingSymbol
SalaryObj.DecimalPlaces = 0
LocX = LocX + 1600
End If
' Add the year that the player made this amount of money
If g_YearName = True Then
Set YearObj = m_Report.Sections(3).AddFieldObject(YearFormula, LocX, 0)
YearObj.Name = "Year"
YearObj.Width = 2000
YearObj.HorAlignment = crRightAlign
If g_GroupByTeam Then YearObj.TextColor = vbWhite
End If
' Format all the fields in the details section (Section 3) to a more
' attractive format
For Each obj In m_Report.Sections(3).ReportObjects
obj.Font.Name = "Arial"
obj.Font.Size = 11
obj.Height = 250
Next
' Sort the fields ascending or descending, depending on the user's wishes
' Default to Descending order, unless the user wants to see those players
' that made less than a certain amount of money.
If g_SortOrder = "ASC" Then
m_Report.RecordSortFields.Add SalaryFormula, crAscendingOrder
Else
m_Report.RecordSortFields.Add SalaryFormula, crDescendingOrder
End If
End Sub
Andrew Baines
Chase International