DOCAP. Calc + Writer
Por oposición a los docap simples, denomino docap complejo a aquel que se formula sobre un documento de un servicio pero también involucra al menos a otro documento del mismo servicio o de otro diferente. En esta entrada voy a explicar cómo crear un docap (complejo) que combina una hoja de cálculo Calc y un documento Writer.
La característica que define a un docap complejo es, pues, el uso de al menos dos documentos, de lo que deriva tanto la complejidad (del código, en relación al que se necesita para crear un docap simple) y el carácter compuesto, dado que hace uso de al menos dos componentes documentales cuyo manejo es preciso comprender para evitar errores en su gestión.
En esta entrada he optado por una fórmula relativamente simple, ya que Calc soporta muy bien el uso de macros y script, así como el empleo de formularios (y sus controles) para la generación de una interface gráfica sin un incremento significativo del coste de elaboración ni de complejidad de programación. Por estos dos motivos considero que debe ser la forma privilegiada de trabajar con docap complejos, siendo preferible a otras posibles formulaciones.
La creación de un docap Calc+Writer requiere, en lo fundamental, seguir los mismo pasos que seguimos para crear un docap simple sobre Calc en lo que se refiere a la forma en que se expresa la fase input. En ésta, la facilidad con la que Calc trabaja con los controles de formulario facilitan mucho la cosa, por lo que resuelve (en parte) la creación de la interface gráfica.
El acceso a los datos se resuelve gracias al procedimiento de acceso a las celdas mediante OOo Basic, mientras que el procesamiento de los datos se realiza de modo independiente respecto al proceso anterior y tiene que ver con la sintaxis del lenguaje (OOo Basic), de la cual ya sabemos lo suficiente.
En realidad la novedad de un docap complejo radica en la fase output, la cual requiere la creación del segundo documento mediante código, y el paso de estar trabajando sobre el primero a trabajar sobre el segundo (en este caso, un documento Writer).
Una vez explicado el proceso general, toca analizarlo punto por punto, empezando por la interface gráfica basada en el uso de formulario sobre Calc respecto a la cual decía antes que es mi opción preferida, afirmación ésta que interesa aclarar retomando lo ya explicado en entradas anteriores, concretamente las [accesibles desde GUI] y más específicamente la serie dedicada al trabajo con formularios en Calc que se inicia con [esta entrada].
Si bien el uso de formularios en Writer presenta cierta complejidad, en Calc éstas se simplifican mucho al disponer los controles de un procedimiento específico de asociación a las celda de la hoja de cálculo, lo que nos ahorra trabajo de programación, ya que esta parte (la creación de la interface gráfica) cae de parte de la preparación previa del documento Calc o documento gestor por su función en este tipo de docap.
El paso siguiente es acceder al contenidos de las celdas del gestor para poder asignar los datos a las variables, algo que también hemos trabajado ya [en esta entrada].
Podríamos decir que aquí finaliza la fase input y empieza la de procesamiento, pero sabemos que esto es una simplificación por lo visto respecto al [uso complejo de la función InputBox()], pero sobre todo por explicado en [esta entrada] sobre variables. No obstante sí nos puede servir de referencia para el inicio de esa segunda fase o de procesamiento. En este caso, para ello remito a [esta entrada].
La fase output se inicia con la creación en un documento (en este caso Writer) desde OOo Basic, un procedimiento muy similar al que empleamos para [crear una nueva hoja de cálculo], como tenderemos ocasión de comprobar. Lo que viene a continuación es la escritura del resultado en forma de párrafos de texto, siendo crucial mantener el foco en el documento Writer para que todo funcione correctamente.
El resultado final es [este documento Calc] que debes descargar para acceder al IDE si quieres visualizar el código. También puedes consultar la serie de vídeos que se inicia [con este].