 
			
				26/12/2006, 21:35
			
			
			     |  
      |    |    |    Fecha de Ingreso: abril-2004  Ubicación: Añatuya  
						Mensajes: 95
					  Antigüedad: 21 años, 6 meses Puntos: 0     |        |  
  |      Re: enlace dinamico a reporte crystal        Antes que nada quiero agradecer a todos los que siempre contestan o aportan alguna idea aunque sea minuscula, porque con una pequeña idea podemos reencaminar la solucion de un problema.   
Yo utilizo Windows 2000, VB6 y Crystal Reports 10 (no he probado con otra configuracion, pero el sistema solo funciona en windows 2000 o superior)   
Para resolver el problema hice lo siguiente:   
En el Administrador Visual de Datos he creado mi base de datos con el formato MS Access 7. 
Luego utilizando el cristal reports 10 hice el reporte (por ejemplo para listar los ventas de la empresa en order cronologico). Aqui es donde esta una de la claves para que los reportes funcionen bien, despues de crearlo me fui al menu FILE y deshabilite la opcion SAVE DATA WITH FILE (guardar los datos con el archivo) esto me permite que el repporte pueda ser dinamico, sino mostraria siempre los mismos datos. y luego lo guarde en la carpeta de mi aplicacion con el nombre "ventasxart.rpt"   
El menu que llama al selector de parametros (que en este caso son fechas y el codigo del articulo) tiene el siguiente codigo:    Private Sub SM_PORARTICULO_Click() 
      NomRep = "VENTAS POR ARTICULO" 
      TipRep = "ARTICULO" 
      Parametros.Show 
  End If   
el form PARAMETROS tiene dos controles DTPicker, un textbox y un boton, el codigo de este formulario es el siguientes:    Private Sub CmdBusCli_Click() 
Dim Visor As New ReportLisArt '(Es el nombre del form que tiene el control CRVIEWER)   
  If Text1.Text = "" Then 
    MsgBox "Debe introducir el código que corresponda para listar el reporte", vbExclamation + vbOKOnly, "Aviso" 
    Exit Sub 
  End If 
  If IsNumeric(Text1.Text) = False Then 
    MsgBox "El código debe ser un número", vbExclamation + vbOKOnly, "Aviso" 
    Exit Sub 
  End If 
  FechaIN = DTPicker1.Value 
  FechaFI = DTPicker2.Value 
  CodXXX = Text1.Text 
  Visor.Show vbModal 
  Set Visor = Nothing 
End Sub   
Private Sub CmdCancelaRegVentas_Click() 
  Unload Me 
End Sub   
Private Sub Form_Load() 
  If TipRep = "ARTICULO" Then 
    Label3.Caption = "Código del Articulo" 
  End If 
End Sub   
luego tengo un form donde puse un control data apuntado a la tabla ventas de mi db (la misma tabla a la que apunta el reporte) y en el mismo form puse un control CrystalActiveXReportViewer con el nombre CRViewer.   
con el siguiente codigo:    Private crApp As New CRAXDRT.Application 
Private crReport As New CRAXDRT.Report 
Private mflgContinuar As Boolean 
Private mstrParametro1 As String 
Private mlngParametro2 As Long 
Dim QsRs As Recordset   
Private Sub Form_Resize() 
  CrViewer.Top = 0 
  CrViewer.Left = 0 
  CrViewer.Height = ScaleHeight 
  CrViewer.Width = ScaleWidth 
End Sub   
Private Sub Form_Load() 
    Dim crParamDefs As CRAXDRT.ParameterFieldDefinitions 
    Dim crParamDef As CRAXDRT.ParameterFieldDefinition 
   On Error GoTo ErrHandler 
    Screen.MousePointer = vbHourglass 
    mflgContinuar = True 
    Select Case NomRep   
      Case "VENTAS POR ARTICULO"   Data14.RecordSource = "Select * from [ventas] where [Codigo_Art] = '" & CodXXX & "' and [Fecha] between #" & Format(FechaIN, "mm/dd/yyyy") & "# And #" & Format(FechaFI, "mm/dd/yyyy") & "# order by [Fecha] DESC"  
        Data14.Refresh 
        If Data14.Recordset.RecordCount = 0 Then 
          MsgBox "No se encontraron datos para listar", vbExclamation + vbOKOnly, "Aviso" 
          Screen.MousePointer = vbDefault 
          Exit Sub 
        End If 
        Set crReport = crApp.OpenReport("c:\Archivos de programa\APLICACION\venxart.rpt") 
        crReport.DiscardSavedData 
        crReport.Database.SetDataSource Data14.Recordset 
    End Select   
    CrViewer.ReportSource = crReport 
    CrViewer.DisplayGroupTree = False 
    CrViewer.ViewReport 
    Screen.MousePointer = vbDefault 
    Set crParamDefs = Nothing 
    Set crParamDef = Nothing 
    Exit Sub   
ErrHandler:   
    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 Err.Description, vbCritical + vbOKOnly 
    End If 
    mflgContinuar = False 
    Screen.MousePointer = vbDefault 
End Sub   
la parte del texto que esta marcada en verde es la que me permite cambiar la sentencia SQL y asi poder ver cualquier cosa que necesite de mi base de datos que pueda caber dentro del diseño del reporte. tengo otros reportes que se manejan exactamente igual, es por eso que en algunos casos van a ver sentencias SELECT...CASE o IF...THEN...ELSE tal ves sin sentido pero lo que pasa es que para el ejemplo deje un solo reporte. Cuando tenga mas tiempo disponible pienso hacer un proyecto donde majene varios reportes y que sea bien claro y lo mejor explicado posible (pero todavia estoy en la etapa de la experimentacion y ademas no termine mi pagina para poder subir el zip)   
Espero que les sirva, lo mejor de todo siempre es practicar, practicar y practicar, asi que si esto les sirve de ayuda o les da una idea de como encarar el problema bienvenido sea y como siempre digo:    Gracias a ustedes...     
				__________________  Un angel le dice a Dios - Señor han descifrado el genoma humano - a lo que Dios contesta - Condenados hackers, voy a tener que cambiar la contraseña         
					
						Última edición por roortiz; 26/12/2006 a las 21:42           |