Crystal Report - Campo Formula que cambia de cadena a numero

 
Vista:

Campo Formula que cambia de cadena a numero

Publicado por Antonio (13 intervenciones) el 03/03/2010 14:02:46
Hola a todos.
Tengo definido un campo fórmula (cNumPed) en un informe .rpt (CR11.5) como Cadena (""), si paso el puntero del ratón por encima de el en el informe (en tiempo de diseño) así me lo reconoce: @cNumPed(Cadena).

En la Form (VB6) que abre el informe referido, tengo puesto el siguiente código para pasar el valor que ha de poner en dicho campo fórmula:


Código:
Option Explicit

Private objApp As New CRAXDDRT.Application 'Objeto que representa una instancia del programa Crystal Reports.
Private crReport As New CRAXDDRT.Report 'Objeto que representa el reporte que deseamos abrir.
Private mflgContinuar As Boolean 'Variable booleana que nos indica si hubo error al tratar de abrir el archivo RPT. 'variables para pasar las formulas y parametros al informe
Dim NombreFormula As String
Dim ValorFormula As Variant
Dim I As Long

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'al presionar la techa ESC (keycode = 27), descargamos el formulario
If KeyCode = 27 Then Unload Me
End Sub

'En este evento hacemos que el control crViewer1 ocupe toda el área del formulario en el que se encuentra.
Private Sub Form_Resize()
crViewer1.Top = 0
crViewer1.Left = 0
crViewer1.Height = ScaleHeight
crViewer1.Width = ScaleWidth
End Sub

'He aquí la razón fundamental del uso de la variable mflgContinuar, recordemos que el evento Load se ejecuta antes del evento Activate, 'por lo tanto, si en el evento Load del formulario aparece un error, en el evento Activate haremos que el formulario se descargue de la memoria, 'en pocas palabras, si se genera algún tipo de error, el formulario ni siquiera se muestra en la pantalla.
Private Sub Form_Activate()
If Not mflgContinuar Then Unload Me
End Sub

Private Sub Form_Load()
'Las siguientes líneas se utilizan para establecer los valores de los parámetros. A continuación se muestra su descripción.
Dim crParamDefs As CRAXDRT.ParameterFieldDefinitions 'Objeto que representa a la colección de Parámetros de un reporte.
Dim crParamDef As CRAXDRT.ParameterFieldDefinition 'Objeto que representa a un parámetro en específico. Esta variable 'se utilizará para iterar por la colección crParamDefs.
Dim CrxFFD As CRAXDRT.FormulaFieldDefinitions
Dim CRXFormula As CRAXDRT.FormulaFieldDefinition
'En otras palabras crParamDefs será la variable que utilizaremos para referirnos a la colección de parámetros del reporte y 'crParamDef se utilizará para referirnos a un parámetro en particular.
On Error GoTo ErrHandler 'Manejador de error.
'Abrir el reporte
Screen.MousePointer = vbHourglass 'Establece el puntero del cursor como reloj de arena por si acaso llegara a tardar mucho esta operación.

mflgContinuar = True

Set rsPed = New ADODB.Recordset
strSQL = "SELECT * FROM PedidSEA WHERE Numero = '" & TBcNumPed & "'"
rsPed.Open strSQL, g_db, adOpenDynamic, adLockOptimistic
Set crReport = objApp.OpenReport(App.Path & "\A4LiPeSEA.rpt", 1) 'Instrucción que abre el archivo RPT y 'establece la referencia a nuestra variable crReport. 'Parametros del reporte
Set crParamDefs = crReport.ParameterFields 'Establecer los valores de los parámetros antes de visualizar el reporte. 'Ya podemos hacer una iteración por la colección de parámetros para asignarle un valor a cada uno de ellos. 'Dentro del ciclo usamos la estructura Select Case para evaluar el nombre del parámetro, el cual está contenido en el 'miembro ParameterFieldValue del objeto crParamDef. Cabe aclarar que para la cláusula Case debemos usar exactamente 'el mismo nombre que le dimos a cada parámetro dentro de Crystal Reports.
For Each crParamDef In crParamDefs
Select Case crParamDef.ParameterFieldName
Case "cNumPed"
crParamDef.AddCurrentValue (TBcNumPed)
'Case "Parametro2"
'crParamDef.AddCurrentValue (mlngParametro2)
End Select
Next
'este es el nombre de la formula
NombreFormula = "cNumPed"
'el valor de la formula, TBcNumPed es una variable pública tipo String 'que este caso vale: "09-0027"
ValorFormula = TBcNumPed
Set CrxFFD = crReport.FormulaFields
For I = 1 To CrxFFD.Count
Set CRXFormula = CrxFFD.Item(I)
If CRXFormula.FormulaFieldName = NombreFormula Then
CRXFormula.Text = ValorFormula
End If
Next

With crReport
.Database.SetDataSource rsPed
.PaperOrientation = 1
.PaperSize = 0
.DiscardSavedData
End With

With crViewer1
.ReportSource = crReport
.ViewReport
.Zoom (95)
End With

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

Private Sub Form_Unload(Cancel As Integer)
Set crReport = Nothing
Set objApp = Nothing
End SubUna vez abierto el informe, donde debe poner el valor del campo fórmula, me pone -18,00, como si TBcNumPed ("09-0027") fuera un número, cuando es una cadena. Si pongo el puntero el ratón encima del -18,00 del informe, aparece: @cNumPed(Número), cuando como he dicho está definido como cadena en tiempo de diseño en el .rpt.

Espero vuestra ayuda, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Campo Formula que cambia de cadena a numero

Publicado por Antonio (13 intervenciones) el 03/03/2010 21:52:54
Solucionado gracias a un amigo.

He sustituido la línea:
CrxFormula.Text = ValorFormula

por:
CrxFormula.Text = "'" + ValorFormula + "'"

Lo que no entiendo es lo de tantas comillas y lo del signo +, si alguien me lo puede explicar, se lo agradecería.

Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Campo Formula que cambia de cadena a numero

Publicado por darell (1 intervención) el 27/10/2010 06:13:02
"" cadena dentro de ella pondras el texto, el mas, es concatenacion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar