¡Esta es una revisión vieja del documento!


Generación Documentación::Gramática plantillas y campos

Los campos disponibles se encuentran en el menu 'Herramientas' → 'Etiquetas OpenOffice'

Gramática plantillas

  • {entidad.campo}
    • será sustituido por el valor del campo en la entidad indicada
    • si no se puede traducir, se deja como esta. Por ejemplo, {entidad_inexistente.campo}, {entidad.campo_inexistente}, {sihubiera} o {sinexiste}
    • ejemplos: {cuenta.nombre}, {contacto.direccion}, {producto.nombre}
  • {siexiste entidad} … {/siexiste}
    • todo el texto entre {siexiste} y {/siexiste} se pasará al documento final si existe al menos una entidad relacionada con la cuenta siendo tratada
    • si no existe la entidad ({siexiste entidad_inexistente}) se elimina toda la sección
    • dentro del bloque estarán disponibles para combinación los valores de la primera entidad encontrada
    • ejemplos: {siexiste activo}, {siexiste contacto}, {siexiste campaña}, {siexiste product}, {siexiste servicio}
  • {siexiste entidad.campo=valor} … {/siexiste}
    • todo el texto entre {siexiste} y {/siexiste} se pasará al documento final si existe al menos una entidad relacionada con la cuenta siendo tratada cuyo campo indicado tenga el valor indicado. Para campos con múltiples valores (por ejemplo en campos con selección múltiple), se empleará la cadena |##| como separador entre valores, en este caso TODOS los valores en el campo y TODOS los valores con los que comparamos deben ser iguales para que sea verdadero.
    • si no existe la entidad y/o el campo se elimina toda la sección
    • dentro del bloque estarán disponibles para combinación los valores de la primera entidad encontrada cuyo campo sea igual a valor
    • otros operadores soportados: > < >= ⇐ = !=
    • ejemplos: {siexiste activo.tipo=Fichero}, {siexiste contacto.tipo=Responsable Seguridad}, {siexiste campaña=GAdwords Noviembre08}
  • {siexiste entidad.campo en (valor1,valor2,valor3)} … {/siexiste}
    • todo el texto entre {siexiste} y {/siexiste} se pasará al documento final si existe al menos una entidad relacionada con la cuenta siendo tratada cuyo campo indicado tenga uno de los valores indicados. Para campos con múltiples valores (por ejemplo en campos con selección múltiple), al menos uno de los valores con los que comparamos deben ser iguales para que sea verdadero.
    • si no existe la entidad y/o el campo se elimina toda la sección
    • dentro del bloque estarán disponibles para combinación los valores de la primera entidad encontrada cuyo campo sea igual a valor
    • ejemplos: {siexiste activo.tipo en (Fichero,Contacto,Aplicación)}, {siexiste contacto.tipo en (Responsable Seguridad,Responsable Ficheros)}
  • {sinoexiste entidad} … {/sinoexiste}
    • caso negado de {siexiste…}
  • {sinoexiste entidad.campo=valor} … {/sinoexiste}
    • caso negado de {siexiste…}
  • {sinoexiste entidad.campo en (valor1,valor2,valor2)} … {/sinoexiste}
    • caso negado de {siexiste…}
  • {paracada entidad} … {/paracada}
    • para cada una de los registros de la entidad indicada relacionada con la cuenta se combinará el texto entre las 2 directivas y se añadirá al documento
    • si no hay registros desaparecerá el bloque entero
    • esta directiva es OBLIGATORIA para recorrer entidades relacionadas (aunque la relación sea unitaria) a partir de noviembre/2011. Esto permite poder recorrer diferentes niveles en la relaciones, por ejemplo desde una Cuenta acceder a los empleados de los terceros relacionados con la cuenta.
  • {paracada entidad.campo=valor} … {/paracada}
    • para cada una de los registros de la entidad indicada relacionada con la cuenta cuyo campo contenga el valor, se combinará el texto entre las 2 directivas y se añadirá al documento. Para campos con múltiples valores (por ejemplo en campos con selección múltiple), se empleará la cadena |##| como separador entre valores, en este caso TODOS los valores en el campo y TODOS los valores con los que comparamos deben ser iguales para que sea verdadero.
    • si no hay registros desaparecerá el bloque entero
    • otros operadores soportados: > < >= ⇐ = !=
  • {paracada entidad.campo en (valor1,valor2,valor3)} … {/paracada}
    • para cada una de los registros de la entidad indicada relacionada con la cuenta cuyo campo contenga uno de los valores indicados, se combinará el texto entre las 2 directivas y se añadirá al documento. Para campos con múltiples valores (por ejemplo en campos con selección múltiple), al menos uno de los valores con los que comparamos deben ser iguales para que sea verdadero.
    • si no hay registros desaparecerá el bloque entero
  • {paracada entidad.campo!=valor} … {/paracada}
    • para cada una de los registros de la entidad indicada relacionada con la cuenta cuyo campo NO contenga el valor, se combinará el texto entre las 2 directivas y se añadirá al documento. Para campos con múltiples valores (por ejemplo en campos con selección múltiple), se empleará la cadena |##| como separador entre valores, en este caso TODOS los valores en el campo y TODOS los valores con los que comparamos deben ser iguales para que sea verdadero.
    • si no hay registros desaparecerá el bloque entero
  • {paracada entidad.campo !en (valor1,valor2,valor3)} … {/paracada}
    • para cada una de los registros de la entidad indicada relacionada con la cuenta cuyo campo NO contenga ninguno de los valores indicados, se combinará el texto entre las 2 directivas y se añadirá al documento. Para campos con múltiples valores (por ejemplo en campos con selección múltiple), ninguno de los valores con los que comparamos deben ser iguales para que sea verdadero.
    • si no hay registros desaparecerá el bloque entero
  • repeticion: Existe una variable especial disponible dentro de los bloques paracada denominada “repeticion” a la que podemos acceder para obtener la iteración en la que estamos. Esto puede ser util para enumerar los elementos o para imprimir cosas según la iteración. Ver Ejemplos.
  • {fecha}: Con esta etiqueta podemos introducir en el documento la fecha en la que se ha generado. Se substituye por la fecha actual (en la que se genera el documento), en formato dd-mm-aaaa.
  • {entidad.campo.enletras}: Con esta etiqueta podemos traducir un campo NUMÉRICO en letras. Por ejemplo, si le pesamos el total de un presupuesto: “{Quotes.hdnGrandTotal.enletras}” siendo este 160,00 se traducirá por ciento sesenta.
  • {incluir Num_Documento}
    • Con esta directiva podemos incluir cualquier documento guardado en el sistema dentro de otro. Por ejemplo, si tenemos el documento con número DOC699, pondremos al principio de un párrafo nuevo {incluir DOC699} en la posición donde queremos insertar el documento. Al compilar se incluirá todo el DOC699 donde se encuentra la directiva {incluir} y desaparecerá la directiva
    • Se puede utilizar cualquier otra directiva dentro del documento incluido, siguiendo las mismas reglas que con cualquier otro documento
    • NO se pueden anidar {incluir} (no lo hemos probado, no sabemos lo que pasará)
    • Al principio de la página donde se incluye el documento,comprobar en Formato»Párrafo»Flujo del Texto»Saltos» que el numero de página este a 0 para evitar que el contador de páginas empieze a contar de nuevo.
  • {incluir entidad}
    • Con esta directiva podemos incluir cualquier documento, de una entidad relacionada con la principal, guardado en el sistema dentro de otro. Por ejemplo, si tenemos alguna entidad Copia de Seguridad relacionada con la entidad sobre la que compilamos el documentos, pondremos al principio de un párrafo nuevo {incluir Copias de Seguridad} (en este caso deberá ir dentro de un bucle paracada) en la posición donde queremos insertar el documento. Al compilar se incluirá todo el documento relacionado con la Copia de Seguridad donde se encuentra la directiva {incluir} y desaparecerá la directiva
    • Se puede utilizar cualquier otra directiva dentro del documento incluido, siguiendo las mismas reglas que con cualquier otro documento
    • NO se pueden anidar {incluir} (no lo hemos probado, no sabemos lo que pasará)
    • Al principio de la página donde se incluye el documento,comprobar en Formato»Párrafo»Flujo del Texto»Saltos» que el numero de página este a 0 para evitar que el contador de páginas empieze a contar de nuevo.
  • {insertarindice}
    • Inserta un índice de contenidos creado a partir del esquema del documento.
    • Se puede utilizar más de una vez en el mismo documento pero el índice será siempre el mismo.
  • {imagen entidad}
    • Esta directiva ha de estar al principio de un párrafo.
    • El párrafo con la directiva desaparecerá por completo
    • El siguiente párrafo ha de contener una imagen que será la que se sustituirá
    • En caso de contener varias etiquetas imagen, cada imagen a sustituir deberá ser diferente
    • Se respetará toda la configuración de la imagen que se haya hecho al poner la imagen, solo se sustituirá la imagen
    • Las imagenes las tratamos de manera especial. El tema es que hay tantas opciones de configuración de una imagen (ancho, alto, alineación, anclaje, ….) que nos sería muy complicado incluirlas todas en la etiqueta para saber exactamente como quieres mostrar la imagen. Así que hemos decidido que incluyas una imagen cualquiera donde va a aparecer el logo y le das el formato que quieres utilizando las opciones que ya tienes disponible en openoffice. Después, cuando compilamos, respetamos todas las opciones que has elegido y solo cambiamos la imagen.
  • Reglas
    • Las etiquetas han de estar en el mismo párrafo. No puede haber un nuevo párrafo en medio de un etiqueta. Por ejemplo,
      Estimado {contacto.
      nombre},

      es incorrecto.

    • Las directivas {siexiste}, {sinoexiste}, {paracada} y sus cierres correspondientes han de aparecer al inicio de línea y en su propio párrafo. Toda la línea desaparecerá. Por ejemplo,
      este es el final del párrafo anterior.
      {siexiste activo.tipo=fichero}
      Este "si existe" funciona correctamente mientras que este {siexiste activo.tipo=fichero} es ignorado completamente
      y se quedará tal cual en el resultado final.
      Este es otro párrafo que puede contener etiquetas como el nombre del cliente: {cuenta.nombre}.
      {/siexiste}
    • Si se ponen directivas {siexiste}, {sinoexiste}, {paracada} al principio de párrafo (lo que es obligatorio) pero el párrafo está dentro de una lista, entonces sus cierres correspondientes también han de estar obligatoriamente como párrafo de la lista. Esto se consigue pulsando ALT-INTRO
    • No se puede poner ningún carácter después de la directiva. Por ejemplo,
      {siexiste activo.tipo=fichero} y más texto aqui en el mismo párrafo

      es incorrecto.

    • Los bloques {paracada} se pueden anidar.
    • Los bloques {siexiste} se pueden anidar. Con la única excepción de los bloques {siexiste} en los que comprobamos un valor de una lista de elementos. Por ejemplo:
      {paracada Soportes}
        {siexiste Soportes.soporte_movil=1}
           XXXXXXX
        {/siexiste}
      {/paracada}

      En este caso, el {siexiste} volverá a hacer una comprobación igual que un paracada, con lo que el proceso fallará. En general podremos poner un {siexiste} dentro de un paracada si estamos comprobando una entidad diferente a la del paracada, por ejemplo, esto ES CORRECTO:

      {paracada Soportes}
        {siexiste Accounts.bill_provincia=Alicante}
             XXXXXXXXX
        {/siexiste}
      {/paracada}

      En este ejemplo listará todos los soportes y si la cuenta asociada es de la provincia de Alicante incorporará el bloque XXXXXXXXXXX.

Formato de texto en etiquetas

Se trata de permitir dar formato a texto proveniente de la aplicación. Con esta característica se permite dar formato al texto contenido en una etiqueta. O sea, el formato se introduce al crear el texto en el campo correspondiente de la aplicación y el generador de documentos convertirá esos formatos a directivas comprensibles para openoffice. Solo se permiten 4 elementos de formato, con los que se permitirá aplicar cualquier formato posible de openoffice a los textos.

  • <b>texto</b>, se aplicará el estilo de carácter SIGPAC_BOLD
  • <strong>texto</strong>, se aplicará el estilo de carácter SIGPAC_BOLD
  • <i>texto</i>, se aplicará el estilo de carácter SIGPAC_ITALIC
  • <em>texto</em>, se aplicará el estilo de carácter SIGPAC_ITALIC
  • <style estilo=estilo_openoffice>texto</style>, se aplicará el estilo de carácter estilo_openoffice
  • <gendocstyle estilo=estilo_openoffice>texto</gendocstyle>, se aplicará el estilo de carácter estilo_openoffice
  • <br> <br/>, salto de línea (NO de párrafo)

Este formato se aplicará a cualquier texto que contenga estas directivas.

No funciona anidar <b> e <i>, utiliza <style> para conseguir este efecto.

Los estilos de carácter SIGPAC_BOLD, SIGAC_ITALIC y cualquier otro estilo definido por el usuario o existente de openoffice ha de ser creado por el usuario en la plantilla, el generador solo aplica el estilo, si no está definido el texto aparecerá normal. Con esto realmente podríamos convertir la negrita en cualquier otro estilo que quisiéramos.

Hay abundante información de los estilos de caracteres en la documentación online de openoffice. Aqui se ve la pantalla de estilos:

Aqui la plantilla utilizada para hacer pruebas para que se vea donde y como definir los estilos.
Aqui el texto con directivas de compilación.

<b>EVIDENCIA</b>: El Responsable de seguridad declara que los sistemas de información se han sometido a la precpetiva auditoría bienal en <br/><style estilo=MiEstilo>materia de protección de datos</style>
<i>DEFICIENCIA</i>: No se aprecian.


Aqui el resultado de la compilación.
Otro ejemplo de formato de caracteres.

Información Empresa

También podemos acceder a la información de la empresa configurada en la sección Configuración de la aplicación utilizando la metaetiqueta Organization como puede ver en la extensión Etiquetas OpenOffice.

Como la información disponible en la sección de configuración de la empresa es bastante limitada y podrías necesitar más, el proceso de instalación creó la variable global GenDoc_Company_Account donde puedes configurar el accountid de cualquier registro de Cuentas desde el que deseas acceder a la información de tu empresa. La idea es crear un registro de cuenta para tu empresa y usar todos los campos que hay ahí.

FAQ

Así:

{fecha:d} de {fecha:F} de {fecha:Y}
y este sería el día de la semana: {fecha:l}

La directiva siexiste cuando se aplica a listas de elementos relacionados (como los ficheros en una cuenta) indica si existe alguno con esa caracteristica. Por ejemplo

{paracada Fichero}

{siexiste Fichero.origen_registropublico=si}

    ORIGEN REGISTRO PUBLICO

{/siexiste}

{/paracada}

Si hay algun Fichero con el campo origen_registropublico a si, SIEMPRE sacara la cadena “ORIGEN REGISTRO PUBLICO” ya que es lo que revisa el siexiste en este caso

Depende de lo que quieras conseguir se podría hacer filtrando el paracada:

{paracada Fichero.origen_registropublico=si}
    Texto acortado sin los campos que no quieres que salgan
{/paracada}

{paracada Fichero.origen_registropublico=no}
    Texto entero con todos los campos
{/paracada} 

coreBOS Documentación