domingo, 22 de junio de 2025

Expedientes


DocAp para la sistematización del expediente





Caben diferentes enfoques, que no sólo distintos procedimientos en relación con esta cuestión, así que la que aquí se muestra es una de ellas; una ciertamente muy básica y de modestas pretensiones, pero interesante por lo que se ha conseguido con ella y por la información que me ha permitido recoger, permitiendo vislumbrar una tercera dimensión del trabajo con los expedientes SEO: su análisis y con él, el análisis de la práctica de los SEO tal y como queda reflejada en la documentación que deriva de ella.

Pero no es esta la cuestión que abordaré en esta entrada; en ella me limitaré a revisar el DocAp primitivo, necesidad que deriva del tiempo transcurrido desde su formulación pensando en un posible desarrollo futuro.

Se trata, como quedó dicho [en su momento] de un DocAp complejo un tanto atípico, ya que la complejidad en este caso no deriva del empleo de más de un servicio, sino del empleo de un mismo servicio (Calc) (1) con dos funciones: gestionar la recogida de datos (Gestor) y presentar los datos individuales a modo de ficha de alumno (Ficha). Paso a analizar cada una de ellas en detalle.

El Gestor es el soporte principal del DocAp, ya que desde él se realiza el análisis del contenido del expediente. Y es esta una característica y limitación en la que ahora me debo detener: este DocAp no permite automatizar la estructuración y el uso del expediente, se limita a sistematizar la recogida de información de su contenido; pero al facilitar ésta ayuda a sistematizar esa estructuración aunque no a automatizarla. De hecho crea la ilusión de que cada uno de los expedientes "reales" es idéntico en organización al modelo, cuando en realidad los expedientes difieren del mismo (2).

Este soporte aprovecha de Calc la facilidad con la que se puede implementar un formulario en este servicio, estableciendo relación entre los controles y las celdas. De esta forma nos ahorramos codificar una parte importante del procedimiento, que queda a cargo del formulario, sus controles (que se ubican en la hoja identifica) y de la asociación entre éstos y las celdas de la segunda hoja del documento (Datos). Es sobre esta (y sobre los datos que contiene) que se ejecuta la parte del script encargada de capturar los datos que previamente introducimos manualmente como usuarios en los controles del formulario (3)

oHojaDatos = ThisComponent.getSheets().getByName("Datos")

For i = 1 To 3
oCelda = oHojaDatos.getCellRangeByName("B" & i)
sDatosPer(i-1) = oCelda.getString()
Next
For i = 4 To 39
oCelda = oHojaDatos.getCellRangeByName( "B"& i )
iDatosArch(i-4) = oCelda.getString()
Next

En realidad este es el núcleo principal del DocAp, pudiendo considerar el resto como accesorio, aunque sea este un papel secundario muy importante para cómo se configura el DocAp y su funcionamiento. Un ejemplo de ello es la creación de una base de datos sobre parte de los datos recogidos y su escritura en la hoja Listado...

mListado(0) = sDatosPer(0)
mListado(1) = sDatosPer(1)

iSumaDocInic = iDatosArch(0) + iDatosArch(1) + iDatosArch(2) + iDatosArch(3)
iSumaDocFin = iDatosArch(4) + iDatosArch(5) + iDatosArch(6) + iDatosArch(7)
iDifDoc = iSumaDocInic - iSumaDocFin

mListado(2) = iSumaDocInic
mListado(3) = iSumaDocFin
mListado(4) = iDifDoc

oHojaLista = ThisComponent.getSheets().getByName("Listado")

For i= 1 To 500

oCeldaInicio = oHojaLista.getCellByPosition(0,i)
sContenido = oCeldaInicio.getString()

If sContenido = "" Then
For a =0 To 4
oCeldaInicio = oHojaLista.getCellByPosition(a,i)
oCeldaInicio.setString(mListado(a))
Next

Exit For
End If
Next

... de lo que se ocupa la siguientes parte del script (4).

El segundo desarrollo de este proceso secundario (no tan secundario) es aun más interesante, ya que implica el acceso al segundo documento (ModeloExpediente.ods) y el traslado de los datos recogidos mediante Gestor para construir la ficha de expediente de cada alumno. De esto se ocupa la última sección o parte del script principal (5) (6)

mOpciones(0).Name="AsTemplate"
mOpciones(0).Value=True
mOpciones(0).Name="MacroExecutionMode"
mOpciones(0).Value=4

sRuta = ConvertToUrl("D:\ModeloExpediente.ods")
oDoc = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones() )

sHoja = "Datos"

oHoja =oDoc.getSheets().getByName(sHoja)

For i=0 To 2
oDatosPer(i) = oHoja.getCellRangeByName("A" & i+1)
oDatosPer(i).setString(sDatosPer (i))
Next


For i = 0 To 35
oDatosNum(i)= oHoja.getCellRangeByName("A" & i+4)
oDatosNum(i).setString(iDatosArch(i))
Next

sNombreArchivo = InputBox ("Nombre del Archivo")
sRuta = ConvertToUrl( "D:\Expedientes\" & sNombreArchivo & ".ods" )

If Len(Dir(sRuta)) = 0 Then
oDoc.storeAsURL( sRuta, mOpciones() )
MsgBox "El archivo " & sNombreArchivo & ".ods se ha guardado correctamente en el directorio solicitado."
Else
MsgBox "El archivo ya existe. No ha sido sustituido."
End If

Para completar la explicación del DocAp en esta entrada sería necesario dedicar tiempo a explicar el funcionamiento del código del documento ModeloExpediente.ods, pero en realidad no es necesario, ya que éste es irrelevante para el objetivo que me he propuesto con esta revisión (7).

NOTAS

(1) En realidad sí se emplean dos servicios (Calc y Writer), pero en la práctica Writer tiene una función secundaria, por lo que en realidad se puede prescindir de su participación, cosa que haré en este reanálisis del DocAp.
(2) Algunos mucho. De hecho un número importante de expedientes son mucho más simples que el modelo; y lo son para ajustarse a la realidad de la documentación que contienen, que frecuentemente no es tanta ni tan diversa como para que sea necesaria una estructura de directorios tan pormenorizada como la que se da por supuesta en el DocAp.
(3) Esta parte del script se identifica como PASO 1.
(4) PASO 2. En él primero se crea el contenido y después se escribe en la hoja Listado.
(5) PASO 3. Se ocupa de acceder al documento creado ModeloExpediente.ods como plantilla y permitiendo la activación de las macros que contiene. El resto del procedimiento no es muy diferente al visto para acceder a los datos de la hoja Datos de GestorExpedientes.ods (Gestor), pero invirtiendo el proceso, ya que ahora escribimos datos en celdas de la hoja oculta Datos de ModeloExpediente.ods.
(6) Al eliminar los comentarios de esta reproducción del código, puede parecer más complicado, por lo que remito al archivo original para consultar el script completo (comentarios incluidos) desde el IDE.
(7) En otro momento sí trataré sobre este documento, pero desde una perspectiva diferente de la que representa el análisis realizado en esta entrada. En todo caso, el acceso y descarga de los documentos Calc de este DocAp puede hacerse [desde este enlace], sección Documentos.

No hay comentarios:

Publicar un comentario

Comenta esta entrada