Hola,
Al generar el DataEnvironment éste crea automáticamente un recordset asociado al objeto Command, éste lo nombra anteponiendo "rs" al nombre asignado a Command (en tu caso rsfactura_detalle), éste es el que tienes que cerrar.
Si siempre vas a utilizar el mismo DE para el DataReport, es mas eficiente enlazarlo en diseño piniendo en la propiedad DataSource el nombre del DE y en DataMember el nombre del comando y en sección 'Detalle' a cada rptTextBox asignarle el nombre del campo en la propiedad DataField y el nombre del Command en la propiedad DataMember. Con esto el código quedaría así:
Código Visual Basic:
Ver originalPrivate Sub imprimir_Click()
Dim sql As String
sql = "select coste_total from facturas where id_factura= " & idFactura.Text
With conexion.rsfactura_detalle
If .State Then .Close
.Open sql
End With
report.Show vbModal, Me
End Sub
Saludos