Hola, soy novato con esto de los blogs y con reporting services esto se basa en un requerimiento que tuve recientemente, espero que si alguien más tiene un problema similar si le es de ayuda utilice lo aqui indicado en caso de existir una forma diferente de resolver el problema no duden en contarmelo
Cuantas veces se nos ha pedido crear reportes con cabeceras con datos extraidos de la base, al menos a mi solo en una ocasión por lo cual me parecio una buena idea comentar sobre el.
El primer problema es que de forma directa no podermos seleccionar como valor de text el dato extraido por un dataset, despues de investigar en la red me tope que la solución era crear un ítem en el body del reporte y tomar el valor de ese item pero para conseguir esto se tiene que utilizar la coleccion ReportItems, con lo cual tendriamos lo siguiente
- item en el body con un valor = First(Fields!Campo.Value, "ds_nombre"), cambiando el nombre de text### a campoCabecera (esto no es necesario solo nos servira para evitar confusiones)
- item en la cabecera con un valor = ReportsItems!campoCabecera.Value
- Para evitarnos inconvenientes ponemos la propiedad del item campoCabecera hidden a true
Hasta aqui logramos ubicar el valor de un campo obtenido desde la base a un item en la cabecera del reporte pero podriamos toparnos con el siguiente problema (como fue en mi caso), si tenemos en cuenta que:
- La cabecera se mostrará en todas las páginas, y
- Tenemos ítems que produzcan quiebres de página (Page break), entre los más usados las tablas y los rectangulos (al menos los que mas he utilizado)
el problema radica en que dependiendo de la página donde se encuentre nuestro item será la pagina donde la cabecera poseera el valor esto es si el item esta en la página 2/4 solo en esta el item de cabecera aparecera con dicho valor en la otra aparecerá en blanco. Después de algunos experimentos me encontre con unos algo que al final utilice como herramienta para la resolución de este problema esto es la declaración de variables y de funciones en el reporte esto se realiza:
- Seleccionar la opcion Report Properties en el menu Reports
- Seleccionar el tab Code
dentro del text Custom Code podemos escribir codigo VB hasta el momento he probado declarar variables y funciones no he explotado más la herramienta, con lo cual declarando el siguiente codigo
Public dim nombrevariable as String = ""
Public dim i as Integer = 0
Public Function FncCampoCabecera(byval valorCampo as String) as String
i = i + 1
if i = 1 then
nombrevariable = valorCampo
end if
return nombrevariable
End Function
esta función la usuaremos a continuación pero la pregunta sería como utilizar estas variables y funciones declaradas en el reporte? esto se realiza con Code, esto es dentro del valor de un item podriamos asignarle el valor de una variable haciendo lo siguiente = Code!nombrevariable y en el caso de funciones = Code!FncCampoCabecera(parametro) y como nos imaginamos podemos poner cualquier valor dentro de parametro el problema es que aunque tratemos de engañar a reporting services enviando el valor de un campo de un dataset y haciendo que la función nos retorne ese valor en la cabecera esto no funcionará porque nos indicará que no se puede utilizar campos de dataset en la cabecera por lo cual podemos utilizar lo anterior y enviar el valor del item campoCabecera, esto es = Code!FncCampoCabecera(campoCabecera.Value)
Con lo indicado anteriormente se puede ubicar el valor de un campo en la cabecera de un reporte y solucionar el problema de que desaparezca el valor en la cabecera al tener elementos que crean quiebres de pagina.