Está en la página 1de 5

Crystal Reports FA-2

el Guille, la Web del Visual Basic, C#, .NET y más...


  Lo+ - WinFX - .NET - ADO.NET - ASP.NET - Cómo... - Colabora - VB6 - API - HTML - Vista - Links -
Foros  

Tus planes de alojamiento (hosting)


Contrátalos en 
indicando "elGuille"

Artículos, trucos y comentarios


sobre el Crystal...
 

Autor: Fernando Alvarez Lama (nueva dirección de e-mail: falvarez@intermac.com)


Fecha: 30/Ene/98

Este link te llevará a la entrega anterior

BBO Crystal CLaser supply BBO crystal for laser non-linear application www.claser-sh.com
Yellow Professional Dynamics AX Functional and Technical Consulting  www.yellowprofessional.com
Planes Movistar Elige entre Prepago y Planes para Tus Llamadas. Aprovecha Descuentos! www.movistar.com.mx

Minicursillo de Cristal Reports (Segunda)

SelectionFormula

Aquí vemos la madre de todas las propiedades. Con ella montamos los filtros que queremos usar para que nuestro
informe muestra una u otra cosa.

Su uso

Form1.CR1. SelectionFormula ="{Ofertas.OferCliente} ='" & Cliente.Text & "'"

Descargamos una variable de tipo String sobre una tabla

o…

Total_Final = Val(Total.Text)

http://www.elguille.info/vb/crystal/crystal_04.htm[08/03/2011 07:07:02 p.m.]


Crystal Reports FA-2

Form1.CR1. SelectionFormula ="{Ofertas.Total} =" & Total_Final & ""

Descargamos una variable de tipo Numérico sobre una tabla

o…

Form1.CR1. SelectionFormula ="{Ofertas.OferCliente} ='Yo Mismo'"

Descargamos una cadena fija sobre una tabla

o…

Form1.CR1. SelectionFormula ="{Ofertas.Total} =12"

Descargamos un Número fijo sobre una tabla

Bueno, esto está claro para este tipo de cosas. Recordemos que lo que va entre corchetes es:

{Nombre_de_ la_ tabla . Campo}

Pero ahora, las complicaciones.

Esta propiedad admite encadenamientos de tipo AND , así como reordenamientos de ficheros con ORDER BY. Su
síntaxis es de tipo SQL aunque no admite todos sus parámetros y tiene ciertas particularidades.

Veamos como se comporta SelectionFormula en un selección sobre un rango de fechas, que es donde difiere de
verdad del SQL tradicional.

Observa esta proción de código:

Dim Primera As Date

Dim Ultima As Date

Primera = CDate(Fecha1.Text) ‘ se supone que en Fecha1.text y Fecha2.Text tengo


fechas validas

Ultima = CDate(Fecha2.Text)

Dia1 = Day(Primera) ‘ Ahora descompongo la fecha en trocitos para que CR no se

Mes1 = Month(Primera) ‘ atragante

Agno1 = Year(Primera)

Dia2 = Day(Ultima)

Mes2 = Month(Ultima)

http://www.elguille.info/vb/crystal/crystal_04.htm[08/03/2011 07:07:02 p.m.]


Crystal Reports FA-2

Agno2 = Year(Ultima)

CR1.SelectionFormula="{Ofertas.OferFechaPropuesta} in Date(" & Agno1 & "," & Mes1


& "," _

& Dia1 & ") to Date(" & Agno2 & "," & Mes2 & "," & Dia2 & ")"

CR1.Destination=1

CR1.Action=1

Como puedes ver es un "prodigio" de sencillez, un ejercicio de estilo propio de los mas refinados creadores de
motores de bases de datos.

Si comparamos la sintaxis SQL ( que no nos sirve para nada en CR ) tenemos:

Dim Primera As Date

Dim Ultima As Date

Primera = CDate(Fecha1.Text) ‘ se supone que en Fecha1.text y Fecha2.Text tengo


fechas válidas

Ultima = CDate(Fecha2.Text)

MySQL= "SELECT * FROM Ofertas WHERE OferFechaPropuesta BETWEEN #" & Primera & "#
AND #" & Ultima & "#"

Mas fácil y lógico , ¿no?…

Observad como para que la formula reconozca el formato fecha, se introduce la variable entre

#" variable "#

Esto es valido si quiero seleccionar un dia concreto en mi informe:

Dim Fecha As Date

Fecha = Date$

Form1.CR1. SelectionFormula ="{Ofertas.FechaEmision} = #" Fecha "# "

http://www.elguille.info/vb/crystal/crystal_04.htm[08/03/2011 07:07:02 p.m.]


Crystal Reports FA-2

El uso general del rango de fehcas en CR es:

"{Tabla.CampoFecha} in Date(Año,Mes,Dia) to Date(Año,Mes2,Dia2)"

Me he extendido mas en el tema de rango de fechas, porque el otro, a poco que conozcais la sintaxis SQL lo
dominais sin problemas.

La forma más facil de depurar estas formulas, es usar el Debug.Print CR1.SelectionFormula y poner un Stop
inmediatamente después. Asi revisamos la formula antes de su impresión. Con esto veremos si un argumento que
debe ser numérico aparece entre comillas, o si una cadena cerece de ellas.

Por ejemplo, un codigo de este tipo:

Form1.CR1. SelectionFormula ="{Ofertas.Total} =" & Total_Final & ""

En ejecución , y pasado por el Debug.Print ,debe dar un resultado de este

"{Ofertas.Total} =1275"

si obtenemos este

"{Ofertas.Total} =’1275’ "

es que algo falla.

Antes de desesperaros, y empezar a acordarse de los parientes y afectos de los programadores del Crystal, cosa
que yo he hecho miles de veces, os aconsejo usar este metodo. Tanta comilla puede dar errores de esos que no
vemos ni a la de tres y tenemos delante de los ojos.

WindowControlBox

Ahora vamos con una facilita.

Cr1. WindowControlBox=True

Nos muestra la caja de control de Maximizar, minimizar y cerrar. Con false no lo hace

WindowState

Nos da el estado en el que veremos la pantalla de preimpresión

CR1.WindowState = 0

Aparecera la pantalla Normal

CR1.WindowState = 1

Aparecera la pantalla Minimizada

CR1.WindowState = 2

Aparecera la pantalla Maximizada

WindowTitle

Pone un titulo a la ventana de previsualización. Tambien podemos usar variables del tipo que queramos para cargar
esta propiedad

http://www.elguille.info/vb/crystal/crystal_04.htm[08/03/2011 07:07:02 p.m.]


Crystal Reports FA-2

CR1.WindowTitle = "Listado de Todos los Cientes"

o…

Dim TipoListado As String

TipoListado = "Listado de Todos los Cientes"

CR1.WindowTitle = TipoListado

Bueno, y con esto ya se pueden hacer , práctimanente, todos los informes que querais.

Dentro de unos días, cuando esté más despejado, prepararé una documento donde explique algunos trucos e
historias específicas para casos poco normales. También quiero dar una idea de trucos para el diseñador y otras
cosillas más, pero ya os digo, dentro de unos dias.

Por lo demás, podeis seguir consultandome en falvarez@interec.com y tened un poco de paciencia porque estoy
"muy cargado".

Gracias a todos

http://www.elguille.info/vb/crystal/crystal_04.htm[08/03/2011 07:07:02 p.m.]