Admin. de informes

 Principal Novedades Utilidades Código Enlaces Access Acerca de mí

     
 
Principal
Arriba

 

 

 

 

 

 

 

 

 

 

 

 

 

Instalación Código Descarga

Administrador de Informes

Aplicación muy sencilla que permite tener todos los informes que se quieran en un solo formulario, ordenado por temas, con comentarios, etc. Es un archivo MDB desde el que se deben importar todos los objetos

Instalación

No tiene instalación. Debes importar todos sus objetos desde de base de datos en que lo quieras instalar.

Consta de dos formularios, el primero llamado "Reports" es el que se usará habitualmente para abrir los informes. En la cabecera tiene un campo, que es donde debes introducir el tema por el que se agrupan los informes, y las teclas de desplazamientos por registros. En el detalle del formulario nos encontramos con la lista de los informes correspondientes a cada tema y unos campos que nos muestran para cada informe el nombre, la descripción y si necesita que haya una formulario abierto; finalmente, en el pie tenemos los botones de "vista previa", "imprimir" y "salir"

El segundo formulario se llama "Añadir Informe" y sirve para rellenar la lista de informes del tema seleccionado en el formulario "Reports", por eso le abrimos desde el formulario "Reports" pulsando el botón con icono que hay a la derecha de la lista. "Añadir informe" muestra una lista con todos los informes que tenemos en la base de datos, podemos irlos seleccionando, describiendo qué hacen y señalando si necesitan un formulario abierto, y si queremos que lo abra, finalmente, pulsando la tecla "añadir" lo añadimos a la lista del formulario "Reports" del registro desde el que hemos hecho la llamada.

Si pruebas esta utilidad con una base en blanco difícilmente encontrarás como funciona, es cuando tienes informes hechos cuando le encuentras utilidad. Al abrir el formulario "Reports" por primera vez estará todo en blanco, mientras que "añadir informes" te mostrará los informes que hayas hecho.

Esta utilidad está pensada para utilizarla de dos maneras, la primera, la más común, para llamarla desde el menú principal o panel de control y que el usuario tenga a su disposición todos los informes bien ordenados por temas y con su descripción y, la segunda, para ser llamada desde un formulario de manera que sólo muestre el tema que corresponde a ese formulario.

Cuando se trata de una aplicación cerrada para un cliente es preferible bloquear el campo tema y ocultar los botones de desplazamiento de registro y el que hace la llamada a "añadir informes". Basta con cambiarles la propiedad visible a false. Nos evitamos así que un cliente inexperto nos descomponga todo, pero fácilmente podemos recuperar para nosotros la operatividad si queremos añadir más informes.

Código comentado

El código no tiene nada de especial.

Puede ser interesante comentar cómo se obtiene una lista que no está basada en ninguna tabla o consulta, como es el caso de la lista de todos los informes o la de todos los formularios de la base de datos, aunque no es nada original, está fusilado creo recordar que de Neptuno.mdb

Para la gente que está empezando, también puede ser interesante mostrar cómo se pueden obtener otros campos a partir de la selección de la lista usando la propiedad column.

Cómo se obtiene una lista que no está basada en ninguna tabla o consulta.  

¡Ojo! ésta no es la mejor manera de obtener una lista de los formularios de la base de datos. En su momento lo hice así y el ejemplo puede valer para otras cosas pero la forma más rápida de obtener la lista de Forms es con una consulta basada en la tabla MsysObjects seleccionando el campo "name" y poniendo como condición que "type" es igual a -32768 (con signo menos delante)

No fijaremos en el combobox "Formulario" del formulario "Añade_informe".

Debemos poner en la propiedad "tipo de origen de la fila" el nombre de una función que debemos crear, en este caso la llamamos "ListaForms".

A continuación creamos la función:

 

Private Function Listaforms(campo As Control, ID As Long, fila As Long, Col As Long, código As Integer)

Static lsforms(127), Entradas

Dim ValRetorno

ValRetorno = Nulo

Select Case código

Case LB_INITIALIZE 'Inicializar.

Dim midb As Database, micontenedor As Container

Set midb = CurrentDb()

Set micontenedor = midb.Containers("Forms")

Entradas = micontenedor.Documents.Count

For zx = 0 To Entradas - 1

lsforms(zx) = micontenedor.Documents(zx).Name

Next zx

ValRetorno = Entradas

Case LB_OPEN 'Abrir.

ValRetorno = Timer 'ID único para control.

Case LB_GETROWCOUNT 'Número de filas.

ValRetorno = Entradas

Case LB_GETCOLUMNCOUNT 'Número de columnas.

ValRetorno = 1

Case LB_GETCOLUMNWIDTH 'Anchura de columna.

ValRetorno = -1 'Usar la anchura predeterminada.

Case LB_GETVALUE 'Obtener los datos.

ValRetorno = lsforms(fila)

Case LB_END 'Terminar

For Entradas = 0 To 127

lsforms(Entradas) = ""

Next

End Select

Listaforms = ValRetorno  

End Function

La función debe llevar forzosamente siempre esos parámetros.

Access irá llamando a esta función para obtener distintos valores a medida que los va necesitando, el valor resultante dependerá del parámetro que pasa como "código" y que se analizan en la función mediante una estructura "select case". Esta estructura debe permanecer inamovible, lo mismo que el nombre de las constantes LB_... de cada case; donde debemos intervenir es en los valores asignados a la variable ValRetorno en cada case, especialmente con LB_INITIALIZE  y con LB_GETVALUE.

 

Con LB_INITIALIZE debemos rellenar los valores que se van a mostrar en la lista y proporcionar una variable con el número de elementos que va a contener. En este caso, utilizamos la colección "documents", de la colección "containers" para rellenar una matriz (lsforms) con los nombres de los formularios de nuestra base de datos.

 

Con LB_GETVALUE debemos asigna el valor que va a tener el control combobox. Si la lista se corresponde con una matriz, normalmente será el valor de la matriz para el índice "fila" (lsforms(fila)).

En el resto de los "case" normalmente no deberás intervenir, salvo en LB_END.

En este caso hemos utilizado una lista que no se modifica mientras está abierta, sin embargo, a veces nos puede interesar ir cambiando los valores, por ejemplo, podríamos ir pasando los formularios seleccionados a otra lista. En ese caso, la función seguiría prácticamente igual, pero la matriz con los valores la definiríamos a nivel de módulo y los valores los iríamos modificando desde fuera de la función y dentro de la función deberíamos controlar la variable "Entradas".

Cómo se pueden obtener otros campos a partir de la selección de la lista usando la propiedad column.

Es una pregunta muy común en las News, cómo obtener el valor de otros campos del mismo registro a partir de un campos seleccionado en una lista, y es un error bastante común en principiantes recurrir a soluciones tipo dlookup etc.

El formulario "Reports" en modo diseño es bastante explícito: a simple vista se aprecia que la propiedad "origen del control" es en varios controles "=[campo0].[Columna](0)", "=[campo0].[Columna](1)"... .

[Campo0] es la lista, pero ¿de dónde sacamos los valores de las distintas columnas?. En la propiedad origen de la fila hemos puesto una consulta con siete campos de salida, cada uno de ellos es una columna, empezando la numeración desde cero. Aunque sólo mostremos una columna en la lista los valores de las demás columnas están disponibles.

 

Descarga 

Descargar archivo .MDB

 

Atrás ] Principal ] Arriba ] Siguiente ]  

 

J.Bengoechea, 12 de septiembre de 1999