Informe. Carátula sobre DocAp simple.
Con independencia de la complejidad del documento a automatizar, podemos optar por procedimientos diferentes, incluyendo el continuum categorial en función del nivel de complejidad de la propuesta técnica. En esta entrada vamos a trabajar con las carátulas del informe psicopedagógico, lo que supone tratar un caso de automatización de un documento complejo, aunque limitando su automatización a su componente tabular del documento (por lo que entra dentro de esta sección), lo que supone que sólo será automatizado parcialmente, y mediante un procedimiento relativamente simple (un DocAp simple, esto es, que no implica recurrir a más de un servicio LO; en este caso Writer)
Esta estrategia de automatización comparte la simplicidad, pero también la complejidad del procedimiento simple visto [en esta entrada], que la que podemos considerarla expansión. Por ello presenta la ventaja de simplicidad que permite que sea generalizable a documentos de similar o menor nivel de dificultad, especialmente si el uso del documento no va a ser frecuente o va a estar limitado temporalmente.
Se trabaja directamente sobre el documento-modelo que tras la creación del DocAp pasará a ser usado como plantilla y no requiere utilizar otro servicio más que Writer.
Aunque no se da por sentado, resulta conveniente que el usuario final (se espera que la misma persona que crea el DocAp) conozca y acceda al IDE para establecer en él aquellos valores de las variables que en realidad, para esa persona, van a funcionar como constantes. De hecho, aunque no se da en el DocAp que aquí sirve de modelo, es posible eliminar de esas variables el uso de la función InputBox() y hacer una asignación directa de datos, evitando o saltando esta parte en el funcionamiento visible del script.
Otros datos que no corresponde sean tratados como constantes, sí pueden ser expresados mediante ejemplos. Esto es lo que aquí se hace consiguiendo ejemplificando qué se espera del usuario y, en algún caso, incluso ofreciendo una opción que sólo necesita aceptar como respuesta.
Este DocAp no pretende disimular que sólo es capaz de automatizar la escritura de datos en las tablas, dejando el resto del documento para se tratado "manualmente" por el usuario, pero ya sólo este limitado resultado supone un ahorro de trabajo: el que conlleva el desplazamiento "a mano" por los diferentes campos de las tablas y por las diferentes tablas del documento. No obstante, no es la única solución disponible y, sin salirse del ámbito procedimental de los DocAp, es posible generar respuestas de mayor rendimiento. Aun así, repito, el procedimiento que aquí se presenta puede ser suficiente en determinados casos. Si así lo considerar, sólo necesitas copiar el código del IDE, trasladarlo al módulo del nuevo documento al que lo quieras aplicar (tras crear los marcadores correspondientes, respetando el identificador que se usa en este documento, eso sí) y realizar las adaptaciones de contenido que sea pertinente.
Por eso te expongo y explico a continuación el código OOo Basic de este DocAp, el cual, como verás, consta de un script largo y una subrutina corta:
Sub Main'Variables y matrizDim Conta As IntegerDim sVar As StringDim mDatos (33) As StringDim AlNombre As String, AlApellidos As StringDim iMAD_RepOrd As Integer, iMAD_PermanExt As Integer, iMAD_MedOrd As Integer, iMAD_MedExt As Integer,iMAD_Otras As IntegerDim sInfoMotivacion As String'Datos de identificación del informemDatos(0) = InputBox("SEO","DATOS DEL INFORME","EOE de Oviedo")mDatos(1) = InputBox("Fecha de presentación del informe","DATOS DEL INFORME","12/03/2024")mDatos(2) = InputBox("Orientador/a responsable del informe","DATOS DEL INFORME","Javier Alonso")'Datos personales del alumnoAlNombre = InputBox("Nombre del alumno/a","DATOS DEL ALUMNADO","Jaime")AlApellidos = InputBox("Apellidos de " & AlNombre,"DATOS DE" & AlNombre,"López Pérez")mDatos(3) = InputBox("NIE de " & AlNombre,"DATOS DE " & AlNombre & " " & AlApellidos,"11122233")mDatos(4) = AlNombre & " " & AlApellidosmDatos(5) = InputBox("Fecha de nacimiento de " & AlNOmbre,"DATOS DE " & AlNombre & " " & AlApellidos,"12/03/2018")mDatos(6) = InputBox("Edad actual de " & AlNOmbre,"DATOS DE "& AlNombre & " " & AlApellidos,"7:03 años")'Datos de escolarización actualmDatos(7) = InputBox("Centro actual de escolarización de " & AlNombre,"DATOS DE ESCOLARIZACIÓN DE "& AlNombre & " " & AlApellidos,"CP Auleriano Buendía")mDatos(8) = InputBox("Curso actual de " & AlNombre,"DATOS DE ESCOLARIZACIÓN DE "& AlNombre & " " & AlApellidos,"2º")mDatos(9) = InputBox("Etapa educativa","DATOS DE ESCOLARIZACIÓN DE "& AlNombre & " " & AlApellidos,"E. Primaria")'Datos familiaresmDatos(10) = InputBox ("Nombre y apellidos de la madre de" & AlNombre,"Datos familiares de "& AlNombre & " " & AlApellidos,"Maria Soledad Pérez Ramírez")mDatos(11) = InputBox ("DNI/NIF de la madre","Datos familiares de "& AlNombre & " " & AlApellidos,"10456765J")mDatos(12) = InputBox ("Nombre y apellidos del padre de" & AlNombre,"Datos familiares de "& AlNombre & " " & AlApellidos,"Domingo López Aramendi")mDatos(13) = InputBox ("DNI/NIF del padre","Datos familiares de "& AlNombre & " " & AlApellidos,"12345676M")mDatos(14) = InputBox("Domicilio actual de "& AlNombre,"Datos familiares de "& AlNombre & " " & AlApellidos,"Adv de Portugal 23 - 3º D")mDatos(15) = InputBox("Código postal del domicilio","Datos familiares de "& AlNombre & " " & AlApellidos,"33011")mDatos(16) = InputBox("Localidad de residencia","Datos familiares de "& AlNombre & " " & AlApellidos,"Oviedo")mDatos(17) = InputBox("Teléfono de contacto para notificación","Datos familiares de "& AlNombre & " " & AlApellidos,"654 765 567")'Escolarización previamDatos(18) = InputBox("Centro anteriores (en caso de ser el actual mantener lo propuesto","Escolarización y medidas educativas previas de "& AlNombre & " " & AlApellidos, mDatos(7) & " desde los inicios de la escolarización.")'MAD previasiMAD_RepOrd = MsgBox("¿Ha realizado " &AlNombre & " repetición ordinaria de curso a lo largo de su escolarización?",4,"Medidas previas de respuesta educativa")If iMAD_RepOrd = 6 ThenmDatos(19) = "Sí"mDatos(20) = InputBox("¿En qué curso o curso realizó repetición ordinaria?","MAD previas")ElsemDatos(19) = "No"End IfiMAD_PermanExt = MsgBox("¿Ha realizado " &AlNombre & " repetición extraordinaria a lo largo de su escolarización?",4,"Medidas previas de respuesta educativa")If iMAD_PermanExt = 6 ThenmDatos(21) = "Sí"mDatos(22) = InputBox("¿En qué curso o curso realizó permanencia extraordinaria?","MAD previas")ElsemDatos(21) = "No"End IfiMAD_MedOrd = MsgBox("¿Se han aplicado " &AlNombre & " medidas ordinarias en los cursos anteriores (ajustes organizativos y/o adaptaciones no significativas)?",4,"Medidas previas de respuesta educativa")If iMAD_MedOrd = 6 ThenmDatos(23) = "Sí"mDatos(24) = InputBox ("¿Qué medidas ordinarias se aplicarón?","MAD previas","Ajuste organizativos,Ajustes curriculares de acceso y Adaptaciones metodológicas")ElsemDatos(23) = "No"End IfiMAD_MedExt = MsgBox("¿Y medidas extraordinarias (amplicación, flexibilización,exención o ACS)?",4,"Medidas previas de respuesta educativa")If iMAD_MedExt = 6 ThenmDatos(25) = "Sí"mDatos(26) = InputBox("¿Qué medidas extraordinarias se han aplicado? (en caso de ACS especificar área(s)","MAD previas","Amplicación, flexibilizazación, exención,ACS en el área de...")ElsemDatos(25) = "No"End IfiMAD_Otras = MsgBox("Ha tenido " &AlNombre & " medidas educativas específicas (refuerzo educativo ordinario, apoyos especializados...)?",4,"Medidas previas de respuesta educativa")If iMAD_Otras = 6 ThenmDatos(27) = "Sí"mDatos(28) = InputBox("Indica las medidas adoptadas. En caso de apoyos especializados indicar cuáles","MAD previas")ElsemDatos(27) = "No"End If'Circunstancias que motivan el informesInfoMotivacion= InputBox("Selecciona el motivo por el que se emite este informe" & Chr(13) &_"A - Por cambio de centro" & Chr(13) &_"B - Por nueva escolarización" & Chr(13) &_"C - Por cambio de etapa" & Chr(13) &_"D - Para revisión o modificación","Motivación del Informe","A-B-C-D")If sInfoMotivacion="A" ThenmDatos(29) = "X"ElseIf sInfoMotivacion="B" ThenmDatos(30) = "X"ElseIf sInfoMotivacion="C" ThenmDatos(31) = "X"ElseIf sInfoMotivacion="D" ThenmDatos(32) = "X"End IfmDatos(33) = InputBox("Puedes basarte en el modelo de respuesta que se propone o indicar las que consideres pertinentes.","OBSERVACIONES","Este informe responde a la demanda formulada con fecha 10/02/2024 por la Dirección del centro a petición del Tutor del alumno a fin de ajustar la respuesta educativa a sus actuales necesidades específicas de apoyo.")'Escritura de contenidosFor Conta = 0 To 33:sVar = mDatos(Conta)Posicionamiento(sVar,Conta)NextEnd Sub
La mayor parte del script está ocupada por el tratamiento de los elementos de la matriz de datos mDatos(), que en la mayoría de los casos se resuelve con el uso repetido de la función InputBox(), aunque en otros se requieren procedimientos algo más complejos que implican el uso de condicionales. Esto se observa en el bloque MAD previas y Circunstancias...
Aunque ni por extensión ni por complejidad lo parezca, resulta de vital importancia comprender el interés que tiene el bucle con el que finaliza el script, (For Conta = 0 To 33:) que implica llamar a la subrutina que facilita la escritura de los datos en las posiciones que indican los marcadores.
Sub Posicionamiento (sDatos As String,i As Integer)Dim oMarca As ObjectoMarca = ThisComponent.getBookmarks().getByName("m"+CStr(i))oMarca.getAnchor.setString(sDatos)End Sub
Esta subrutina, que se puede construir de otra forma (por ejemplo incluyendo en ella el bucle con el que finaliza el script), recibe dos parámetros: el contenido del elemento de la matriz de datos y el valor de una variable contador. Con ellos ejecuta la acción de acceder al objeto marcador (Dim oMarca As Object) referenciado por el valor del contador (oMarca = ThisComponent.getBookmarks().getByName("m"+CStr(i))) y ubicar en esa posición el contenido de la variable (oMarca.getAnchor.setString(sDatos)) que, a su vez el bucle For que lo llama ha pasado desde el elemento de la matriz de datos (sVar = mDatos(Conta)).
Documento. Desde este enlace puedes descargar el DocAp. Te sugiero creer inmediatamente una versión plantilla con la que trabajar; al menos una copia de seguridad para evitar problemas con los marcadores, que ya sabes son muy sensibles y es fácil perderlos.

No hay comentarios:
Publicar un comentario
Comenta esta entrada