domingo, 6 de noviembre de 2011

Formato condicional

Casi parece que no ha cambiado en nada, a simple vista, los asistentes parecen los mismos, pero uno se pone a meter hasta cuarenta y nueve formatos condicionales y no se queja, mientras que antes venía limitado a tres.
image
Si, además, nos fijamos bien en el asistente, vemos que tiene un desplegable, “Seleccionar tipo de regla” con una opción, comparar con otros registros.
image image

Seleccionamos entre distintas opciones, y el resultado es una barra proporcional a los distintos valores de nuestro formulario o informe, un estilo a lo que ya existía en Excel
image
No sólo funciona con informes y formularios continuos. También se pueden usar, y funciona correctamente, en formularios estándar
image

Elaborar un calendario con turnos

Tomemos una tabla de empleados, con indicación de a qué grupo pertenecen
EmpleadosTurnos
IdEmpleadoGrupo
1Pedro1
2Andrés1
3Jaime1
4Juan2
5Felipe2
6Bartolomé2
7Tomás3
8Mateo3
9Santiago3
10Judas4
11Simón4
13Matías4
Aunque el último ID sea 13, se trata de 12 empleados, pues despidieron a uno por conducta desleal. Están organizados en 4 grupos cada uno de los cuales se inicia al día siguiente del grupo anterior. Vamos a crear el calendario correspondiente a octubre del 2010 utilizando una consulta.
Sabemos que si disponemos de una tabla Numeros poblada de numeros consecutivos empezando por el 1, podemos obtener una secuencia de fechas a base de sumar una FechaInicial menos uno al campo Numero. Este truco y el de no relacionar tablas para que el resultado sea un producto cartesiano lo vamos a utilizar en la siguiente consulta.


image

El texto SQL es el siguiente:

SELECT EmpleadosTurnos.Empleado, [Numero]+CDate("01-10-10")-1 AS FechaVirtual, EmpleadosTurnos.Grupo, fturnofecha([fechavirtual],"Mañana,Tarde,Noche, Libre",CDate("04-01-07"),[Grupo]-1) AS Turno
FROM Numeros, EmpleadosTurnos
WHERE ((([Numero]+CDate("01-10-10")-1)<=CVDate("31-10-10")))
ORDER BY EmpleadosTurnos.Empleado, [Numero]+CDate("01-10-10")-1;

Y el resultado, resumiendo, porque serían 372 filas, mostraría algo parecido a lo siguiente completado hasta mostrar todos los empleados con todas las fechas de octubre del 2010 y el turno de cada fecha

qTurnosVirtuales
EmpleadoFechaVirtualGrupoTurno
Andrés01/10/101Noche
Andrés02/10/101Libre
Andrés03/10/101Mañana
Andrés04/10/101Tarde
Andrés05/10/101Noche
Andrés06/10/101Libre
Andrés07/10/101Mañana
Andrés08/10/101Tarde
Andrés09/10/101Noche
Andrés10/10/101Libre
Andrés27/10/101Mañana
Andrés28/10/101Tarde
Andrés29/10/101Noche
Andrés30/10/101Libre
Andrés31/10/101Mañana
Bartolomé01/10/102Tarde
Bartolomé02/10/102Noche
Bartolomé03/10/102Libre
Bartolomé04/10/102Mañana
Bartolomé05/10/102Tarde
Bartolomé06/10/102Noche
Bartolomé07/10/102Libre
..

La consulta la podemos personalizar para pasarle las fechas inicial y final del periodo como parámetros y también podemos tomarla como puento de partida para una consulta de datos anexado o de actualización que para cada día del año y cada empleado deje anotado el turno de trabajo. Aunque no es necesario volcar los datos en una tabla, pues podemos utilizar la consulta con cualquier periodo de fechas, si resulta muy conveniente, pues además de los distintos turnos pueden darse otras situaciones, como bajas, vacaciones, cambios de turno que hacen necesario trabajar con datos guardados.
A menudo se pretende realizar una planilla que refleje los trabajadores que entran en cada turno cada día, utilizando los días como encabezado de columna.


qTurnosVirtuales_Tabla de referencias cruzadas
EmpleadoGrupo01/10/1002/10/1025/10/1026/10/1027/10/1028/10/1029/10/1030/10/1031/10/10
Andrés1NocheLibreNocheLibreMañanaTardeNocheLibreMañana
Jaime1NocheLibreNocheLibreMañanaTardeNocheLibreMañana
Pedro1NocheLibreNocheLibreMañanaTardeNocheLibreMañana
Bartolomé2TardeNocheTardeNocheLibreMañanaTardeNocheLibre
Felipe2TardeNocheTardeNocheLibreMañanaTardeNocheLibre
Juan2TardeNocheTardeNocheLibreMañanaTardeNocheLibre
Mateo3MañanaTardeMañanaTardeNocheLibreMañanaTardeNoche
Santiago3MañanaTardeMañanaTardeNocheLibreMañanaTardeNoche
Tomás3MañanaTardeMañanaTardeNocheLibreMañanaTardeNoche
Judas4LibreMañanaLibreMañanaTardeNocheLibreMañanaTarde
Matías4LibreMañanaLibreMañanaTardeNocheLibreMañanaTarde
Simón4LibreMañanaLibreMañanaTardeNocheLibreMañanaTarde

Evidentemente es fácil de hacer con una consulta de referencias cruzadas.

image

El texto SQL sería:
TRANSFORM First(qTurnosVirtuales.Turno) AS PrimeroDeTurno
SELECT qTurnosVirtuales.Empleado, qTurnosVirtuales.Grupo
FROM qTurnosVirtuales
GROUP BY qTurnosVirtuales.Empleado, qTurnosVirtuales.Grupo
ORDER BY qTurnosVirtuales.Grupo
PIVOT qTurnosVirtuales.FechaVirtual;

Si nuestra consulta de referencias cruzadas la convertimos en un informe y usamos formato condicional, el resultado es la mar de vistoso (o la mar de hortera, según gustos). En el ejemplo le hemos quitado columnas para que nos quepa bien en la página.
image

En fin, se trata de una serie de ideas que pueden servir a alguien que debe plantearse la gestión de turnos de trabajo, pero no pretende ser ni “la solución” ni la forma canónica de plantearlo.

Plantilla de ajuste de controles

Se trata de que los controles se ajustan a una plantilla o tabla, como en las hojas de estilo en el diseño web, en la que podemos añadir o quitar filas y columnas, cambiar alto y ancho de celdas, dividir éstas o combinar varias entre sí.
Access 2007 ya había aportado algo a la colocación de los controles, agrupándolos en formato tabular o apilado, que sigue siendo posible, pero, aunque era una forma muy rápida de poner cierto orden visual, no era una solución muy lograda, ya que todos los controles apilados en el mismo grupo, tenían el mismo ancho.
En Access 2010 cuando agrupamos controles, de forma apilada o tabular, podemos moverlos a un lado, encima o debajo, como si añadieramos filas y columnas a una tabla de word; de la misma manera, podemos combinar o dividir esas celdas y los controles que coloquemos se ajustarán a ellas. Es como si debajo de los controles hubiera una tabla o plantilla invisible. Verla es fácil utilizando otra de las novedades de Access 2010, las líneas de división también en formularios.
image image image imageimage

Botones con formas, colores y relieves

Los botones, incluidos los de los TabControls, pueden tener distintas formas colores y texturas. Como muestra, unos pocos:
image

El botón “Estilos rápidos” muestra una galería rápida, pero también podemos combinar “Cambiar forma”, “Relleno de forma”, “Contorno de forma” y “Efectos de forma” para conseguir un montón de posibilidades.
imageimage image image image image imageimage
     
Las formas y colores de los botones no quitan para que puedan seguir teniendo imágenes y pie de imagen, por lo que podemos conseguir unos botones resultados muy vistosos en los que, además, se sigue visualizando el efecto de apretar el botón:
image
Los botones con formas y colores se ven afectados por el “Tema” que hayamos elegido. Al cambiar de tema, cambia la galería de “Estilos rápidos” y, si ya lo hemos creado, también cambia la apariencia de nuestro botón.
image image

Si queremos cambiar la imagen de un viejo formulario Access 2007, de entrada puede que no tengamos habilitadas estas opciones. Se soluciona fácilmente cambiando la propiedad “Usar tema” del control.
Si nuestra aplicación es en formato mdb, no existe esta propiedad y, por tanto, tendremos que conformarnos con los botones tradicionales.

Generador de expresiones

Cambia la interface del generador de expresiones.
image
Es más completa y con grafía que diferencia los objetos, pero lo más novedoso es que aplica el “intellisense” en aquellas propiedades en que se puede usar el generador.
image 

Imágenes compartidas

Aunque ya en Access 2007 las imágenes se guardan en el tamaño del formato original, no deja de ser un desperdicio de espacio repetir la misma imagen, por ejemplo el logotipo de la empresa, en cada formulario o informe. Aunque había soluciones, ésta síque es sencilla de manejar.
image
Una vez que para una imagen en la propiedad “Tipo de imagen” hemos elegido “Compartidas”, queda guardada y a disposición de los demás objetos de la aplicación en la galería que se despliega al pulsar el botón “Insertar imagen”.
image 
Las imágenes compartidas se guardan como datos adjuntos en la tabla MSysResources, de manera que sólo ocupan espacio una sóla vez. Contiuará existiendo en nuestra BD, y ocupando ese espacio, mientras no la borremos de aquí. Si queremos cambiar el anagrama de nuestra empresa en todos los formularios e informes, basta con que lo cambiemos aquí.