Ver Mensaje Individual
  #8 (permalink)  
Antiguo 26/12/2006, 21:35
roortiz
 
Fecha de Ingreso: abril-2004
Ubicación: Añatuya
Mensajes: 95
Antigüedad: 20 años
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