none
VB 6.0 Crystal Reports RRS feed

  • Pregunta

  • Buenos días,

     

     

    No sé si pueda preguntar sobre VB 6.0 aqui. Lo que pasa es que tengo que hacer de manera urgente un reporte en VB 6.0 con Crytal Reports (No importa la versión). Pero la verdad no tengo ni idea de como hacerlo, como comenzar.

     

    Necesito hacer un informe que sea totalmente dinámico tanto en columnas como en filas.

     

    O sea que mi consulta puede variar.

     

    ¿Como lo puedo hacer?.

     

    Les agradezco de antemano su colaboración.

     

     

    La necesidad de que sea en crystal reports es la posibilidad de exportar dicho informe. Por favor si alguno sabe algo se lo agradezco.

     

     

    Gracias nuevamente.

    jueves, 7 de agosto de 2008 17:01

Respuestas

  • Estoy casualmente dando los primero pasos en esto y te puedo decir que me ha sorprendido CR (al menos yo uso la version 9.2), donde he probado lo siguiente:
    He creado un formulario CR por separado de vb6 y probé que funcione con todos los requisitos, sin incluirlo en mi programa, pero como no está parametrizado trae todos los datos del archivo. Se llama "ListadoCtaCte".

    Despues lo he inlcuido en VB6, que al instalar el CR 9.2, genera dentro de "Proyecto" , y dentro de este en "Mas controles Activex" (aunque a veces en "Proyecto", ya esta"), "Crystal Report 9" . Haciendo Click, se abre y pregunta

    si quiero uno nuevo o uno existente. Elijo este ultimo y permite buscar "ListadoCtaCte". Entonces le hago aceptar... aceptar...aceptar, hasta finalizar y ya dentro de mi programa cierro en "DISEÑADOR", un formulario con el nombre

    CrystalReport1 (si es el primero). Luego viene el sector donde programamos y alli poner lo que esta mas abajo. A continuacion tenes el FORM que debes cambiar, por defecto se llama FORM1, pero le puedes poner el nombre que

    tu quieras.

    Mi ejemplo es una cuenta corriente por cuotas donde figuran todos los deudores - cancelados o no - con todos sus creditos - cancelados o no  - y con todas sus cuotas - canceladas o no. En este ejemplo voy a presentar un cliente con todos sus créditos (cancelados o no) y todas sus cuotas (canceladas o no):

    Option Explicit
    Dim Reportx As New CrystalReport30    ' Crear una nueva instancia de Crystal Report
    ----------------------------------------------------------------------------------
    Private Sub Form_Load()
    Dim strquery As Variant
        ' Abrir el recordset
        strquery = "Select * from CuentaCorrienteConsulta" 'aqui puede ir el SQL que quieras
        Adodc1.RecordSource = strquery
        Adodc1.Refresh

        ' paso el siguiente Recordset al reporte. Esto elimina el anterior Recordset y pone uno nuevo
        Reportx.Database.SetDataSource Adodc1.Recordset

        ' Le digo que me cambie el título o cabecera del listado
     Reportx.Text10.SetText "Resumen de cuenta corriente por Cliente" 'El text10 es mi cabecera, se debe cambiar por el correspondiente de cada listado.Con esto se deja en claro que hay acceso a todos los objetos del reporte.

        ' visualizo el reporte
        CRViewer91.ReportSource = Reportx

        CRViewer91.ViewReport
    End Sub
    --------------------------------------------------------------------------

    Private Sub Form_Resize()
        CRViewer91.Top = 1000 ' cambio el tamaño porque de 0 a 1000 pongo los textbox, commands , etc que usaré 0para paramtrizar. Lo miso se debe hacer en tiemo de diseño del CRViewer, poner Top a 1000 o lo que se necesite.  Tambien le cambio en tiempo de diseño al Form, donde esta el CRViewer el BackColor, en mi caso use &H00000040& (bordó oscuro)
        CRViewer91.Left = 0
        CRViewer91.Height = ScaleHeight
        CRViewer91.Width = ScaleWidth
    End Sub
    ------------------------------------------------------------------------
    Private Sub Command1_Click()
    Dim strquery As Variant
        ' Abra el recordset
        strquery = "Select * from CuentaCorrienteConsulta  where NroSocio = '" & Text1.Text & "'"
        Adodc1.RecordSource = strquery
        Adodc1.Refresh

        Reportx.Database.SetDataSource Adodc1.Recordset

        CRViewer91.ReportSource = Reportx
        CRViewer91.Refresh ' Esto no me funcionó y debe hacer click en Actualizar y Refresh en tiempo de ejecución

        CRViewer91.ViewReport
       
    End Sub
    ------------------------------------------------------------------------
    En el form tengo los siguientes controles:
    Text1.Text (donde cambio el codigo del cliente, por lógica puedo agregar una busqueda por combo, escribiendo parte del nombre y que me aparezca completo, etc.etc. pero esto es solo un ejemplo)
    Command1 que es el que me actualiza el recordset, el caption le puse "Actualizar"
    Adodc, llamado aqui Adodc1, que lo puse Visible=False, enganchado en este caso a la misma base de datos con que viene originalmente el CR que importé a mi programa y analizado por fuera del VB. Esto los uso así, porque casualmente es lo que quiero mostrar, pero como dije antes, no es que no se pueda cambiar, pero los nombres de las variables de totales, de sumas, de cabecera, de listado, etc. si no es el mismo archivo, puede cambiar o por lógica tener un solo CRVIEWER y cambiarlo por programa todos los listados que quiera... etc.etc. en fin, muchas posibilidades.

    PERO... ahora vienen los peros y las cosas que aun no he analizado en profundidad....
    Pongo un codigo de cliente en el textbox, y hago click en actualizar. Parece que la pantalla hace el refresh que está programado, pero me muestra de nuevo todos los datos y sólo lo hace cuando hago click en el boton refresh del CR (el rayito amarillo). Hasta aquí mi aporte, espero de los que mas saben de CR para completarlo. Y lo expongo porque muchas veces se ha preguntado esto. En especial listar entre dos fechas... bien ahora es así de facil, en el SQL, consultar entre dos fechas ingresadas en sendos dtpickers, por ejemplo.
    Algo mas, lo expuesto en Form Load, es solo un ejemplo de como cambiarse de Recordset para un listado que previamente he parametrizado, sin necedidad de ingresarlo por un text, pero no hace falta programarlo si uso lo expuesto al presionar Command. Aviso que la actualización la he visto en este foro, sin necesidad de presionar actualizar y el rayito, pero no lo he probado.
    Saludos
    ---------------------------------------------------

     

    • Marcado como respuesta xGs_Manco martes, 12 de julio de 2011 16:29
    domingo, 24 de agosto de 2008 8:15

Todas las respuestas

  • Es importante la versión del Crystal Report. El 2 es una cosa, el 3 otra, el 7 otra, el 8 otra, el 8.5 otra, el 9 y 9.2 otra, el 11 otra (aunque parecida a 9.2) y 12 otra. De 9 para atras no funciona lo mismo.

     

    martes, 12 de agosto de 2008 16:18
  • Gracias por responder man:

     

    Man te informo yo tnego todas las versiones de crystal reports.

     

    En este momento estoy trabajando con la 8.5 puesto que no fui capaz de conectarme de ninguna manera a ninguna de estas versiones 10, 11,12.

     

    En este momento tengo un reporte que me funciona pero que no es lo que yo quiero (El tutorial lo bajé de la pag del ElGiulle). Puesto que estoy usando el Crviewer y al parecer a este no le puedo decir donde esta mi Base de datos.

     

    Lo que yo quiero es yo generar mi consulta SQL por código(Ya sé que debo mantener la estructura del reporte), decirle donde esta mi base de datos por código,  los parametros. Tanto código como se pueda.

     

    Según he visto por ahi he visto que existe una propiedad .database(index) a la cual se le dice la ruta de l acces.

     

    Sip eso es otra cosa lo manejo con acces pero prontamente migraremos a SQL Server 2005, por esto es que necesto saber como le digo al reporte donde esta la base de datos.

     

    GRACIAS  espero un minitutorialsito o algo que un ignorante como yo pueda entender, ya que nunca en mi vida había hecho reportes de esta manera.

     

     

     

     

    martes, 12 de agosto de 2008 16:56
  • intenta con el SQl native client q se encuentra entre el OLE DB (ADO) q genera el crystal reports hay le das la ubicacion del servidor en el cual te encuentras trabajando escoges la base de datos y las tablas q necesitas y de hay en adelante ya tu sabras q hacer

     

    sábado, 23 de agosto de 2008 1:15
  • Estoy casualmente dando los primero pasos en esto y te puedo decir que me ha sorprendido CR (al menos yo uso la version 9.2), donde he probado lo siguiente:
    He creado un formulario CR por separado de vb6 y probé que funcione con todos los requisitos, sin incluirlo en mi programa, pero como no está parametrizado trae todos los datos del archivo. Se llama "ListadoCtaCte".

    Despues lo he inlcuido en VB6, que al instalar el CR 9.2, genera dentro de "Proyecto" , y dentro de este en "Mas controles Activex" (aunque a veces en "Proyecto", ya esta"), "Crystal Report 9" . Haciendo Click, se abre y pregunta

    si quiero uno nuevo o uno existente. Elijo este ultimo y permite buscar "ListadoCtaCte". Entonces le hago aceptar... aceptar...aceptar, hasta finalizar y ya dentro de mi programa cierro en "DISEÑADOR", un formulario con el nombre

    CrystalReport1 (si es el primero). Luego viene el sector donde programamos y alli poner lo que esta mas abajo. A continuacion tenes el FORM que debes cambiar, por defecto se llama FORM1, pero le puedes poner el nombre que

    tu quieras.

    Mi ejemplo es una cuenta corriente por cuotas donde figuran todos los deudores - cancelados o no - con todos sus creditos - cancelados o no  - y con todas sus cuotas - canceladas o no. En este ejemplo voy a presentar un cliente con todos sus créditos (cancelados o no) y todas sus cuotas (canceladas o no):

    Option Explicit
    Dim Reportx As New CrystalReport30    ' Crear una nueva instancia de Crystal Report
    ----------------------------------------------------------------------------------
    Private Sub Form_Load()
    Dim strquery As Variant
        ' Abrir el recordset
        strquery = "Select * from CuentaCorrienteConsulta" 'aqui puede ir el SQL que quieras
        Adodc1.RecordSource = strquery
        Adodc1.Refresh

        ' paso el siguiente Recordset al reporte. Esto elimina el anterior Recordset y pone uno nuevo
        Reportx.Database.SetDataSource Adodc1.Recordset

        ' Le digo que me cambie el título o cabecera del listado
     Reportx.Text10.SetText "Resumen de cuenta corriente por Cliente" 'El text10 es mi cabecera, se debe cambiar por el correspondiente de cada listado.Con esto se deja en claro que hay acceso a todos los objetos del reporte.

        ' visualizo el reporte
        CRViewer91.ReportSource = Reportx

        CRViewer91.ViewReport
    End Sub
    --------------------------------------------------------------------------

    Private Sub Form_Resize()
        CRViewer91.Top = 1000 ' cambio el tamaño porque de 0 a 1000 pongo los textbox, commands , etc que usaré 0para paramtrizar. Lo miso se debe hacer en tiemo de diseño del CRViewer, poner Top a 1000 o lo que se necesite.  Tambien le cambio en tiempo de diseño al Form, donde esta el CRViewer el BackColor, en mi caso use &H00000040& (bordó oscuro)
        CRViewer91.Left = 0
        CRViewer91.Height = ScaleHeight
        CRViewer91.Width = ScaleWidth
    End Sub
    ------------------------------------------------------------------------
    Private Sub Command1_Click()
    Dim strquery As Variant
        ' Abra el recordset
        strquery = "Select * from CuentaCorrienteConsulta  where NroSocio = '" & Text1.Text & "'"
        Adodc1.RecordSource = strquery
        Adodc1.Refresh

        Reportx.Database.SetDataSource Adodc1.Recordset

        CRViewer91.ReportSource = Reportx
        CRViewer91.Refresh ' Esto no me funcionó y debe hacer click en Actualizar y Refresh en tiempo de ejecución

        CRViewer91.ViewReport
       
    End Sub
    ------------------------------------------------------------------------
    En el form tengo los siguientes controles:
    Text1.Text (donde cambio el codigo del cliente, por lógica puedo agregar una busqueda por combo, escribiendo parte del nombre y que me aparezca completo, etc.etc. pero esto es solo un ejemplo)
    Command1 que es el que me actualiza el recordset, el caption le puse "Actualizar"
    Adodc, llamado aqui Adodc1, que lo puse Visible=False, enganchado en este caso a la misma base de datos con que viene originalmente el CR que importé a mi programa y analizado por fuera del VB. Esto los uso así, porque casualmente es lo que quiero mostrar, pero como dije antes, no es que no se pueda cambiar, pero los nombres de las variables de totales, de sumas, de cabecera, de listado, etc. si no es el mismo archivo, puede cambiar o por lógica tener un solo CRVIEWER y cambiarlo por programa todos los listados que quiera... etc.etc. en fin, muchas posibilidades.

    PERO... ahora vienen los peros y las cosas que aun no he analizado en profundidad....
    Pongo un codigo de cliente en el textbox, y hago click en actualizar. Parece que la pantalla hace el refresh que está programado, pero me muestra de nuevo todos los datos y sólo lo hace cuando hago click en el boton refresh del CR (el rayito amarillo). Hasta aquí mi aporte, espero de los que mas saben de CR para completarlo. Y lo expongo porque muchas veces se ha preguntado esto. En especial listar entre dos fechas... bien ahora es así de facil, en el SQL, consultar entre dos fechas ingresadas en sendos dtpickers, por ejemplo.
    Algo mas, lo expuesto en Form Load, es solo un ejemplo de como cambiarse de Recordset para un listado que previamente he parametrizado, sin necedidad de ingresarlo por un text, pero no hace falta programarlo si uso lo expuesto al presionar Command. Aviso que la actualización la he visto en este foro, sin necesidad de presionar actualizar y el rayito, pero no lo he probado.
    Saludos
    ---------------------------------------------------

     

    • Marcado como respuesta xGs_Manco martes, 12 de julio de 2011 16:29
    domingo, 24 de agosto de 2008 8:15
  •  

    Hey man te agradezco de todo corazón, ya había perdido las esperanzas que alguién me contestara.

     

    Todavía no lo he probado apenas lo pruebo te comento. Respecto al Adodc es ese un recordset? o es un control Activex que hay que descargar?

     

     

    Gracias estoy pendiente de responderte.

    domingo, 24 de agosto de 2008 12:36