Campos de selección
Último campo que vamos a tratar en esta serie de entradas. Es un tipo de campo que normalmente se resuelve como campo simple, solicitando la entrada de datos al usuario, pero que presenta como peculiaridad que en ciertas circunstancias disponemos de información previa que podemos tener recogida como listado o base de datos. Es el caso de los listados de alumnos con sus datos básicos, por ejemplo: NIE, nombre, apellidos y fecha de nacimiento (1).
Tanto en el informe como en el dictamen nos encontramos con campos aparentemente sencillos e inevitablemente considerados de entrada directa y simple de datos. Un ejemplo (aunque no el único) es el que representa esta imagen: Dictamen de escolarización, datos personales del alumno (2)
En este caso, y a modo de ejemplo, me limitaré a los campos de esta tabla del dictamen de la que he eliminado el campo Edad ya tratado en la [entrada anterior]. Se trata de los campos NIE, Nombre y apellidos del alumno y Fecha de nacimiento y voy a presuponer que ya disponemos de información sobre esos datos puesto que contamos con una sencilla base de datos creada en Calc (3).
Como en el resto de los campos, al tratarse de un documento prescriptivo (dictamen) crearemos previamente los marcadores necesarios (3 marcadores) que usaremos en el procedimiento de escritura del documento que, en esta ocasión, resolveremos mediante bucle que llama a una función específica de posicionamiento (o escritura)
For i = 0 To 2:sVar = mDatos(i)Posicionamiento(sVar,"mcd",i)Next
... habiendo asociado los contenidos (los datos a incluir en los campos del documento) a una matriz de datos (mDatos()) (4) la cual cumplimentaremos mediante la asociación de sus componentes a funciones...
mDatos(0) = NIE(CodAl)
... aunque por seguridad demos opción a modificar o corregir los datos que esa función devuelve en función del dato que le pasamos como parámetro (NIE(CodAl))
mDatos(0) = InputBox("NIE:","ALUMNADO", mDatos(0))
En este planteamiento, en el script principal es fundamental el papel que juega el procedimiento de obtención de la variable parámetro que se incluye en la llamada a las funciones (que veremos después). En esta ocasión he utilizado un método simple basado en InputBox():
CodAl = InputBox("Introduce el código de identificación del alumno: " & Chr(13) &_"1. Roberto Marcial Pérez" & Chr(13) &_"2. María Martínez Sanz" & Chr(13) &_"3. Adela Decastro Morán" & Chr(13) &_"4. Antonio Heernández Jiménez" & Chr(13) &_"5. Matias Luján López" & Chr(13) &_"6. Amalia Desantos Melquiades" & Chr(13), "ALUMNADO","1-2-3-4-5-6")
Este código nos permite asignar a la variable-parámetro CodAl el valor de posición que ocupan los datos de cada alumno en cada una de las matrices que se explicitan en las funciones de las cuales CodAl es parámetro, previa corrección de su valor (CodAl = CodAl-1) para asegurar la coincidencia (5).
Queda ahora analizar el funcionamiento de las funciones que devuelven esos datos (6) y como todas ellas (NIE(), Nombres(), Apellidos() y FechaNacimiento()) son iguales en su funcionamiento, me limitaré a explicar una de ellas como ejemplo.
La función NIE() se define con un parámetro (ID As Integer) y de tipo String (esto es: devuelve un dato texto) (7).
Dentro de la función se declara una matriz (Dim mNIE(5) As String), una variable (Dim AlNIE As String) y una variable contador (Dim i As Integer). A la primera se le asignan los datos de los NIE conocidos (v.g. mNIE(0) = "123456") y la variable nos sirve para hacer más claro el procedimiento de selección y la devolución de valor pertinente asignándola el valor correspondiente de la matriz anterior (AlNIE = mNIE(i)) y, posteriormente, asignando su contenido a la función (NIE = AlNIE).
Resulta clave comprender el procedimiento que permite ejecutar la búsqueda e identificación del valor de interés que se resuelve mediante este código. Muestro y explico:
For i = LBound(mNIE()) To UBound(mNIE()):mNIE(i)If i = Id ThenAlNIE = mNIE(i)End IfNext
- Un bucle For recorre la matriz de datos NIE asociando su índice con el valor de la variable contador i.
- Se condiciona (If) la asociación del contenido del NIE que se desea localizar al cumplimiento de la condición i = Id, siendo id (como sabemos) el parámetro que traslada a la función el valor seleccionado por el usuario en el script principal.
- En el momento en que la condición i = Id -> True, entonces se realiza la asociación del valor de la matriz a la variable (AlNIE) que devuelve el resultado de la función.
Finalizo esta entrada [aportando un documento] que contiene el código explicado en ella (8) con el mismo objetivo de otras veces: facilitar su comprensión y las propuestas de mejora que se quieran aportar. Me planteo, no obstante, retomar este procedimiento ya que es mejorable desde dos punto de vista: el uso de las matrices y el acceso a la base de datos que contiene la información que aquí manejo mediante las funciones y las matrices que contienen.
NOTAS
(1) Podemos ampliar este listado de campos mucho más, incluyendo datos familiares y escolares. Sería de desear que se trabajar más con bases de datos (con independencia del soporte), tanto para registro como para consulta, pero no suele ser lo habitual en el ámbito de los SEO. Por desgracia y sin una razón clara, a parte del poco conocimiento de estas herramientas, es una práctica poco frecuente.
(2) Del mismo tipo son los datos familiares del dictamen y del informe. Tanto unos (los personales del alumno) como otros (los familiares) pueden ser conocidos a priori, como resultado del análisis del expediente del alumno o de la información aportada por otros servicios (en caso de nuevas escolarizaciones). Sería deseable que así fuera, como también que el SEO tuviera actualizadas sus bases de datos sobre esta información y sobre otras, pero...
(3) De no contar con estos datos ya elaborados, deberíamos aplicar a estos campos el procedimiento básico de solicitud de información al usuario del docap mediante InputBox(). Incluso en caso de nuevas escolarizaciones (EI 3 años) es posible contar con esta información en formato tabla Excel. De ella podemos partir para construir la base de datos que necesitamos. Existen, como sabemos, diferentes modo de acceder y utilizar estos datos. En esta entrada trataremos la forma más simple que se puede concretar en forma similar a como propusimos en [esta entrada]. Este será nuestro punto de partida.
(4) En el caso de nombre y apellidos he optado por emplear, como paso previo, dos variables (AlNombre y AlApellidos) para mejor manejo de los datos al estar estos diferenciados en la base de datos de origen, posteriormente se asignan mediante concatenación al elemento de la matriz (mDatos(1) = AlNombre & " " & AlApellidos)
(5) Recuerda que las matrices se inician con el elemento 0, no con el elemento 1.
(6) Además contamos con una subrutina (Posicionamiento()) cuyo cometido es facilitar la escritura de los datos en la posición de los marcadores. No la explico ya que el funcionamiento de este código ha sido explicado en entradas anteriores, aunque integrado dentro del script principal. debido a ello, la única novedad es que aquí se emplea como subrutina y que cuenta con tres parámetros: dos para identificar el marcador y uno para recibir el dato o contenido a escribir (Posicionamiento (sDatos As String,MrN As String, i As Integer))
(7) Dado que el NIE es en realidad un código de identificación, no es necesario considerarlo un valor numérico.
(8) Si en todos los casos este paso es conveniente, en este lo es especialmente. Aunque el documento cuenta con un comando que facilita el uso del script, el mero uso de código no es el objetivo, por lo que insisto en la necesidad de acceder al IDE y conocer el código de primera mano.