Artículos, trucos y comentarios sobre el Crystal...

 
Autor: Juan José Fernández López jj2fernandez@recol.es
Fecha: 30/Ene/98


Me comenta Juan José que tiene problemas con la cuenta de mail, asi que si lke escribes y no te responde, no pienses que es tan informal como el Guille, osease yo... 8-)

Pulsa este link, si quieres ver la entrega anterior

Preliminares: (osea el texto que me manda con los ejemplos)

Te mando un par de ejemplos que pueden ser utiles. Uno de ellos viene en la ayuda de CR pero es interesante por que no se encuentra muy a la vista y en el emplea variables numericas en formulas y por ningun sitio de la ayuda te dice como declararlas y aqui ves como se hace, tambien se pueden usar otro tipo de variables, yo he empleado las de cadena que se declaran con stringvar.

El otro ejemplo es un report que he hecho en el trabajo, y que aunque las tablas no estan para poder ver como queda, sirve para ver el empleo de las formulas para calcular sumas de campos y para ver junto con el codigo de ejemplo del archivo CR como se diseña un informe y se colocan los campos en las distintas secciones que hay y como se colocan formulas vacias que luego se rellenan desde VB.

Creo que lo mejor es mandar el ejemplo que me imagino que aclarará mas las dudas que con lo mal que yo me explico escribiendo. Aunque el ideal habria sido poder limpiar un poco el informe o usar las tablas que trae de ejemplo el CR para que en la vista preliminar se pudiera ver algo, pero es que estoy fastidiado de tiempo.


Los ejemplos:

******** COSILLAS INTERESANTES DEL CRISTAL REPORT ********************

- Espero que con estos fragmentos de codigo te hagas una idea de como
    usar el CR

Public Sub proImprimir()
    
    ' Procedimiento para llamar al Crystal
    Dim PathString As String
    Dim stIntervalo As String
    Dim viForm As Integer
    
    PathString = App.Path 'Recoje la ruta de la aplicacion

    ' Llamamos al procedimiento que me obtiene la SQL ********************
    proConsulta ' Aqui montas la SQL que le quieras mandar al CR, con las 
        ' condiciones que tengas en ejecucion, rango de fechas, etc
        ' aqui es donde mandas
            ' CrystalReport.SQLQuery = stSQL


    ' ********************************************************************

    stIntervalo = "Desde: " & FechaIni & "   Hasta: " & FechaFin
    ' Por ejemplo en el informe quieres sacar ademas del titulo, el rango
    ' de fechas pero hasta el momento de la ejecucion no lo sabes el que
    ' vas a mostrar, y en fechaini y fechafin recoges las fechas
    CMDIMenu.CrystalReport.WindowState = crptMaximized
    CMDIMenu.CrystalReport.Destination = crptToWindow
    ' Se rellenan formulas con variables de tipo cadena donde pones lo que
    ' quieres que salga en la formula.
    ' Esto es util para cuando quieres mandar cosas que solo sabes en ejecucion
    CMDIMenu.CrystalReport.Formulas(0) = "FORM1= """ & Variable1 & """"
    CMDIMenu.CrystalReport.Formulas(1) = "FORM2= """ & Variable2 & """"
    CMDIMenu.CrystalReport.Formulas(2) = "FORM3= """ & Variable3 & """"
    CMDIMenu.CrystalReport.Formulas(3) = "FECHAS= """ & stIntervalo & """"
    CMDIMenu.CrystalReport.Formulas(4) = "PresentarTotalN= """ & stTotalN & """"
    CMDIMenu.CrystalReport.Formulas(5) = "PresentarTotalP= """ & stTotalP & """"
    CMDIMenu.CrystalReport.Formulas(6) = "PresentarTotalU= """ & stTotalU & """"
    CMDIMenu.CrystalReport.Formulas(7) = "PresentarTotalPR= """ & stTotalPR & """"
    
    CMDIMenu.CrystalReport.WindowTitle = "Listado de Estadísticas de Actividad por Servicio"

    CMDIMenu.CrystalReport.ReportFileName = PathString & "\rpt\ces730r1.rpt"
    ' Le dices la ruta donde encontrará el informe, yo fijo que todos los
    ' informes colgaran de una carpeta llamada rpt
    CMDIMenu.CrystalReport.Action = 1
    ' Lanza el informe
    viForm = 8 ' Esta es una variable que recoje el numero de formulas 
        '  que estoy rellenando en ejecucion, se crea una matriz
        '  que hay que limpiar siempre
    Vacia_formulas CrystalReport, viForm
    Me.MousePointer = 0
    
End Sub

Public Sub Vacia_formulas(listado As Crystal.CrystalReport _
                          , iNumero As Integer)
    
    Dim tiForm As Integer
    
    For tiForm = 0 To iNumero
        listado.Formulas(tiForm) = ""
    Next tiForm
    
    For tiForm = 0 To 10
        listado.SortFields(tiForm) = ""
    Next tiForm

End Sub



' *******************************************************************
' *******************************************************************
' *******************************************************************
- En la ventana donde tengas insertado el objeto CR preferiblemente
    en la MDI si la tienes debes poner la conexion para el CR
    'CrystalReport.Connect = "DSN=" & stNombreDsn
    donde stNombreDsn es el nombre del DSN que tienes que tener en 
    el ODBC
    Con esto le dices a que base de datos se conecta.
    Si en el transcurso del programa debes "enganchar" el CR a otra
    BD debes cambiar la propiedad connect y poner el nuevo DSN
    no olvidando volverlo a poner como lo tenias si quieres de nuevo
    tener ligado el CR a la BD anterior. Es decir si en alguna parte 
    del programa tienes que crear una tabla temporal y que el CR lea
    sobre esta tabla temporal hecha por ejemplo en ACCESS en lugar 
    de leer sobre el SQL Server por ejemplo le cambias el DSM al ACCESS
    pero luego hay que volver a conectar con SQL Server (ej.).

El reporte de ejemplo: (ces730r1.zip 3.21 KB)


 

ir al índice