Febrero 2009


Algo para recordar. Para acceder al SQL Server de una PC Host desde una máquina virtual hay que:

  • Deshabilitar el firewall de Windows XP (o cualquier otro que sea) en el HOST.
  • Deshabilitar el cliente del ISA Server de la máquina virtual.

Lo primero que debemos hacer para poder imprimir reportes de CR12 desde VB5/6 es tener bien referenciado el producto. Para esto debemos agregar en las Referencias (ProyectàReferences) las siguientes referencias:

·          Crystal Reports ActiveX Designer Design and Runtime Library 12.0  (si no esta en la lista, se puede agregar desde “C:\Program Files\Business Objects\BusinessObjects Enterprise 12.0\win32_x86\craxddrt.dll”

·         Crystal ActiveX Reports Viewer Library 12.0

Y también agregar el componente:

·         Crystal ActiveX Report Viewer Library 12.0

Para poder mostrar el reporte por pantalla.

Luego, procedemos de la siguiente manera:

Private Sub Imprimir()

‘ Objetos CR 2008
Dim crApp           As New CRAXDDRT.Application
Dim crReport        As New CRAXDDRT.Report
Dim crParamDefs     As New CRAXDDRT.ParameterValueInfos
Dim crParamDef      As New CRAXDDRT.ParameterValueInfo

 Dim crParamDefs     As CRAXDDRT.ParameterFieldDefinitions
 Dim crParamDef      As CRAXDDRT.ParameterFieldDefinition
 Dim x               As Integer
 Dim intPosicion     As Integer
 Dim strNombreParam  As String
 Dim resultado       As String

On Error GoTo Imprimir_EH
x = 0
  ‘Abrir el reporte
Screen.MousePointer = vbHourglass
mflgContinuar = True
Set crReport = crApp.OpenReport(Me.ReportFileName, 1)

‘ Pasa Parametros del reporte
Set crParamDefs = crReport.ParameterFields
For Each crParamDef In crParamDefs
intPosicion = buscarValor(crParamDef.ParameterFieldName)
Select Case crParamDef.ValueType
    Case 7
         crParamDef.AddCurrentValue (CInt(ParametroValor(intPosicion)))
    Case 12
         crParamDef.AddCurrentValue (CStr(ParametroValor(intPosicion)))
    Case 16
         crParamDef.AddCurrentValue (CDate(ParametroValor(intPosicion)))
End Select
 Next

‘ Valida si muestra vista previa o imprime directamente
If UCase(strShowPreview) = “S” Then
     ‘ Setea variables del Viewer
     Me.Caption = strWindowTitle
     CRViewer.ReportSource = crReport
     CRViewer.DisplayGroupTree = False
     CRViewer.ViewReport
     Me.Show
Else
     crReport.ReadRecords
     crReport.PrintOut
End If

Screen.MousePointer = vbDefault
Set crParamDefs = Nothing
Set crParamDef = Nothing

Exit Sub

Imprimir_EH:
If
Err.Number = -2147206461 Then
      MsgBox “El archivo de reporte no se encuentra, restáurelo de los discos de instalación”, vbCritical, vbOKOnly
Else
      MsgBox
“Error inesperado: ” & Err.Description, vbCritical + vbOKOnly
End If
mflgContinuar = False
Screen.MousePointer = vbDefault
Set
crParamDefs = Nothing
Set
crParamDef = Nothing

End Sub