domingo, 5 de noviembre de 2023

Procedimientos. Docap.

DOCAP combinado Calc + Writer

También es posible crear docap complejos empleando dos archivos del mismo servicio: dos hojas de cálculo o dos documentos de texto). Pero tampoco tenemos por qué limitarnos a utilizar dos documentos.


Eso es precisamente lo que he hecho en esta ocasión: utilizar dos hojas de cálculo como componentes básicos del docap y opcionalmente un documento Writer; este último de cumplirse una condición. La imagen anterior representa la composición del modelo de docap complejo que expondré en esta entrada.

En ella me voy a limitar a explicar el funcionamiento de este modelo de docap y mostrar las instrucciones fundamentales de su código, pero si deseas saber qué objetivo se persigue con el docap concreto que utilizo de ejemplo, deberás leer [esta entrada]. También dispones de un vídeo en [YouTu.be] para visualizar su funcionamiento.

Veamos ahora la estructura de componentes del docap, empezando por visualizar su esquema general.



En este docap se pueden diferenciar tres fases:

Primera: Fase input mediante formulario sobre documento Calc Gestor. Como ya sebes de otros docap anteriores, los controles del formulario se asocian celdas directamente desde la configuración de los controles que lo componen.



... y mediante script accedo al contenido de estas celdas para asignarlos a una matriz. 

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

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

Tomando parte de estos datos creo un listado a modo de base de datos. Esta base de datos es muy simple y se limita a unos pocos campos, pero el procedimiento que implica es de gran importancia, ya que nos puede servir de base para crear docap entrados en los procesos de evaluación grupal. De hecho, sin esta funcionalidad que ahora es complementaria, el docap puede considerarse referente básico para crear soportes para la aplicación de test estandarizados, pero el hecho de crear este listado-BD permite avanzar en la creación de soportes de evaluación que toman como referencia el grupo-clase y permiten crear baremos locales (1).

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

El paso siguiente y con el que finaliza esta primera fase consiste en el acceso al documento Calc Ficha como plantilla y activando el uso de macros.

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() )

Segunda: La plantilla Ficha genera automáticamente el documento que concreta la ficha del alumno y que se archiva dentro de la carpeta Expedientes. Dentro de este archivo se concreta el doble proceso de traslado de datos al listado de campos y su asociación a un conjunto de celdas que muestras dichos datos en formato ficha (de ahí el nombre del documento.


Posteriormente se accede al contenidos de determinados campos...


For i=0 To 10
    oCelda(i) = oHojaDatos.getCellRangeByName( "A" & i+1 )
     sDatos(i) = oCelda(i).getString
Next

... para posteriormente analizar los datos que contienen y que se consideran relevantes (2).

If iTotalDif = 0 Then
sValorDif = " no existe diferencia en cuanto al númer de documentos, lo que indica que el expediente se ha mantenido actualizado hasta el momento."
ElseIf iTotalDif > 0 Then
sValorDif = "una reducción del número de archivos (" & ABS(iTotalDif) & " documentos)"
ElseIf iTotalDif < 0 Then
sValorDif = "un incremento del número de archivos (" & ABS(iTotalDif) & " documentos)"
End If

En función de este análisis se plantean diferentes opciones de documentación, incluyendo la creación de un tercer soporte (Writer) que denomino Informe.

If dPorcentajeDif > 25 Then
CrearInfo (sIdentificador,sNumDoc,sAnalisisTotal,sValoraPorcentaje)
Else
MsgBox ("ANÁLISIS DE RESULTADOS: " & Chr(13) & sIdentificador & Chr(13) & sNumDoc & " " & sAnalisisTotal & " " & sValoraPorcentaje)
End If

Tercera: Esta fase se desarrolla bien dentro de Ficha, cuando no se considera necesario crear un informe (3) o, y de forma más específica y compleja, a partir del propio documento Writer Informe. En este caso se puede (también es opcional) aplicar una macro de formato. Esta macro es universal, pero podría estar específicamente creada para formatear dicho documento, aunque necesariamente deberá ser ubicada en Mis macros (4)

dim args4(4) as new com.sun.star.beans.PropertyValue
args4(0).Name = "CharFontName.StyleName"
args4(0).Value = ""
args4(1).Name = "CharFontName.Pitch"
args4(1).Value = 2
args4(2).Name = "CharFontName.CharSet"
args4(2).Value = -1
args4(3).Name = "CharFontName.Family"
args4(3).Value = 5
args4(4).Name = "CharFontName.FamilyName"
args4(4).Value = "Verdana"
dispatcher.executeDispatch(document, ".uno:CharFontName", "", 0, args4())

NOTAS

(1) La relevancia de esta cuestión sobrepasa el objetico de esta entrada, por lo que ahora no seguiré tratando este tema, pero sí quiero señalar su gran importancia para la definición de un modelo de intervención de los SEO, diferenciado del modelo clínico aun predominante en la práctica profesional real.

(2) El análisis que se realizar en este docap en concreto está limitado conscientemente por la función que se pretende que cumpla, evitando entrar en procesos de mayor complejidad. En caso de ser empleado para desarrollar el uso de en test en concreto, sería necesario profundizar en el modelo de análisis.

(3) En este caso (cuando se incumple el criterio de una diferencia superior al 25%) se emite un breve informe soportado en MsgBox desde la propia ficha.

(4) Esto está relacionado obviamente por ser un documento creado desde el propio código del documento Ficha.

No hay comentarios:

Publicar un comentario

Comenta esta entrada