Claro que es totalmente posible. Te muestro un ejemplo mio.
Private Sub BtImprimir_Click()
Dim rsCD As New ADODB.Recordset
Dim rsDet As Variant
rsCD.StayInSync = False
sqlPH = _
"SHAPE {" & sqlCSP_FUL_CAB(Fec1, Fec2) & "} AS Cabecera " & _
"APPEND ({" & sqlDSP_FUL_DET(Fec1, Fec2) & "} AS Deta " & _
"RELATE CSP_ID to CSP_ID) AS Deta"
rsCD.Open sqlPH, dB, 1, 1
rsDet = rsCD("Deta")
Set RepOV.DataSource = rsCD
RepOV.Show 1
'----------------
Private Function sqlCSP_FUL_CAB(Fec1 As String, Fec2 As String)
sqlCSP_FUL_CAB = _
"SELECT CSP.CSP_SER, CSP.CSP_NUM, MCL.MCL_TIT, CSP.CSP_ID as CSP_ID " & _
"FROM CSP " & _
"WHERE (CAST(CSP.CSP_FDMA AS DATE) BETWEEN '" & Fec1 & "' AND '" & Fec2 & "')"
End Function
Public Function sqlDSP_FUL_DET(Fec1 As String, Fec2 As String)
sqlDSP_FUL_DET = _
"SELECT DSP.DSP_CANT, MPR.MPR_NCOMPLETO AS NCOMPLETO, DSP.DSP_PRECIO, DSP.DSP_CSP_ID AS CSP_ID " & _
"From DSP, MPR, CSP " & _
"Where " & _
"(Cast(CSP.CSP_FDMA AS date) BETWEEN '" & Fec1 & "' and '" & Fec2 & "') And " & _
"CSP.CSP_ID = DSP.DSP_CSP_ID AND DSP.DSP_MPR_ID = MPR.MPR_ID"
End Function
Explicación.
No soy un ducho en el tema, pero te señalo algo, para que te pinte el detalle debes tener una relacion que en mi ejemplo es: "RELATE CSP_ID to CSP_ID) AS Deta" No me funcionó si hacia:
"RELATE CSP_ID to DSP.DSP_CSP_ID) AS Deta" y por eso tuve que ponerle el mismo alias.
Luego abres un nuevo reporte, y no lo conectas con ningun DataE, o sea que los valores DataMember y DataSource quedan vacios (del reporte), luego simplemente pones los controles rptTextBox con su propiedad Datafield igual al campo de la cabecera de tu consulta.
Y para el detalle pones en la propiedad Datafield el campo del detalle de tu consulta PERO también pones en las propiedades el nombre del DataMember (en mi ejemplo Deta)
Si no quedo claro la explicación me avisas para ahondar mas.