Para mejorar el informe: cabeceras y pies de página
Para personalizar las cabeceras
********************************************
La definición de cada informe o herramienta programada, se guarda en un concepto de Tipo Informe o procedimiento como un texto que es un programa en lenguaje JavaScript. La aplicación lo interpretará en el momento de imprimir o ejecutar la herramienta.
Si se quiere hacer un cambio permanente en un informe, tendrá que modificar el programa en el concepto correspondiente, pero si lo que quiere es hacer una modificación temporal, puede utilizar una de las configuraciones e incluso dentro de cada una, modificar los parámetros. La selección de ambos se encuentra tanto en la propia ventana de propiedades, como en el diálogo de selección de informe.
Lo habitual es que no necesite definir nuevos informes, ya que con los informes distribuidos con la aplicación y utilizando los parámetros que veremos, obtendrá la información que necesita en la mayoría de los casos.
Como ejercicio, trabajaremos con el archivo de BD "\Ejemplos\Edificio". Con el archivo en modo Edición, podemos crear un nuevo concepto de Tipo Informe o procedimiento, desde la opción Nuevo concepto correspondiente, pero no quedará relacionado con ningún otro concepto, a no ser que pulsemos el conmutador Cuelga del Diálogo de creación de concepto.
La otra forma rápida es situarnos donde queramos colgar el informe, seleccionar una línea en blanco en la ventana principal, y teclear en el campo de edición del la columna Código un nuevo código (inexistente en el archivo) precedido del nombre del tipo (inf) y el punto central, por ejemplo, "inf·00010"
Ahora, para crear un informe desde cero, en la pestaña Código JavaScript teclearemos el siguiente código (también puede seleccionarlo con el ratón desde este texto de ayuda y pegar el texto en la pestaña):
// Informe de prueba
incluir("cab")
incluir("libcap")
conraiz="PM"
capitulo_recorre (concepto);
function concepto (que, ci,ri,niv,pos)
{
imp.tabla ("20 10 . 20")
if (que==1) {
imp (bas.con.cod(ci));
imp(); imp (bas.con.res(ci));
imp(); imp.linea ("l2");
return
}
if (!que) {
imp (bas.con.cod(ci));
imp (bas.con._uni(ci));
imp (bas.con.res(ci));
imp (bas.con.pref(ci),"a5");
imp.linea
imp.linea("v2",1)
}
}
La sintaxis es de JavaScript, aunque si se tiene soltura programando en este lenguaje, se ve que hay varias partes desconocidas. Esto es porque se utilizan métodos y objetos implementados en el programa mediante una ampliación COM del lenguaje y además se utilizan dos archivos de librería que ya tienen implementadas funciones y declarados objetos de propósito general para cualquier informe, cuyo código se incorpora mediante la función incluir().
Si pulsamos Preliminar, como tenemos definido en el propio archivo de ejemplo una estructura de capítulos que comienza con una carpeta de código "PM·Plan de mantenimiento", se mostrará una lista del presupuesto de esa estructura de carpetas. No tiene un formato muy profesional, pero tampoco lo hemos programado con muchas líneas... y muestra el Número y Resumen de cada capítulo y debajo, cada actividad con su Código, Unidad, Resumen y Precio. Algo como:
Las funciones incluidas con el código del concepto "cab·Cabecera general", definen en todas las páginas una impresión de cabecera de la que hay varios modelos, que consiste en 3 líneas para titulares, una imagen de logotipo y datos del informe. Pero se puede incluir un segundo nivel de cabecera a añadir a esa cabecera general, y que también aparecerá en todas las páginas, antes de comenzar a imprimir datos. Para ver una prueba, modifique el programa de nuestro informe de ejemplo, añadiendo las líneas en color rojo:
// Informe de prueba
incluir("cab")
incluir("libcap")
var
conlineas=1 ////B Imprime líneas
verticales [[0]]
conraiz="PM"
capitulo_recorre (concepto);
function paginicia2()
{
imp.tabla ("20 10 .
20")
imp ("Código");
imp("Ud");
imp("Descripción");
imp("Precio");
imp.linea ("a4 l0
b")
if
(conlineas) imp.ver (imp.y2, -1,0,20,10,-20,-1)
imp.linea ("v3");
}
function
pagtermina2()
{
imp.hor;
}
function concepto (que, ci,ri,niv,pos)
{
imp.tabla ("20 10 . 20")
if (que==1) {
imp (bas.con.cod(ci));
imp(); imp (bas.con.res(ci));
imp(); imp.linea ("l2");
return
}
if (!que) {
imp (bas.con.cod(ci));
imp (bas.con._uni(ci));
imp (bas.con.res(ci));
imp (bas.con.pref(ci),"a5");
imp.linea
imp.linea("v2",1)
}
}
Pulsamos el botón Preliminar para ver el nuevo resultado, y obtenemos rótulos de encabezado de las columnas, y hasta un parámetro con el que podemos modificar el aspecto del informe sin modificar directamente el código: en la pestaña Configuraciones y parámetros, podemos cambiar el valor del parámetro "Imprime líneas" haciendo doble clic sobre el parámetro.
En general, casi todos los informes utilizan el mismo formato de cabeceras, pies, márgenes, etc. por legibilidad y presentación. Todos comparten uno o varios programas de informe que no se han hecho para imprimirlos, sino para introducir los mismos datos en todos lo demás informes (librerías). Haciendo cambios en un programa de cabecera, las modificaciones afectarán a todos los informes que lo incorporen.
La función incluir( ) permite introducir el código de un archivo de programa dentro de otro, en el punto en que se llama a esa función. En la definición de cualquier informe se puede incluir cualquiera de las cabeceras, librerías con funciones de propósito general, otros programas para que se ejecuten secuencialmente, etc. Por ejemplo, en la lista de informes predefinidos en el archivo común se incluye: \CABECERAS Y LIBRERÍAS\cab·Cabecera general que es la que hemos visto.
Para modificar una librería de cabecera ya existente, se hace incluyendo un estilo nuevo dentro de la definición de encabezados de las funciones especiales paginicia() y pagtermina(), que definen las cabeceras y pies de todas las páginas de cada informe. Estos nombres de funciones son especiales y se ejecutan SIEMPRE al principio y al final, respectivamente, de la impresión de cada hoja. Es decir, son zonas especiales para definir cabeceras y pies de página que se repiten en todas las páginas con el mismo formato (claro que datos como variables, números de página u otros pueden cambiar, como es habitual).
Tal como están diseñadas las cabeceras y pies del informe "cab", puede ver que admiten otras definiciones paginicia2() y pagtermina2() de modo que se puedan añadir datos en cabeceras y pies, en cada informe. Tenga en cuenta que cada vez que se hace una llamada a las funciones principales (paginicia), se anula la definición de las añadidas (paginicia2).
Podríamos ir a la ventana Informes y Procedimientos, abrir las propiedades del informe de cabecera, e incluir al final de la definición de la función paginicia( ) una condición del tipo:
else if (estilo==30) { ... }
Especificando dentro un formato de tabla, líneas, espacios, definiciones y datos que quiera en su nuevo formato. Si utilizamos en cualquier informe que incluya esta cabecera la definición: estilo=30, se tomará este formato.
Seleccione en ventana principal el concepto raíz del que cuelga toda la estructura de carpetas, pulsando el botón Compos. Abra la ventana de Gráficos y pulse el botón Imprime, con lo que se muestra el Diálogo de selección con los informes contextuales a conceptos que tienen asociadas imágenes (los que comienzan con código gra*).
Verá que se ofrece sólo un informe para los gráficos seleccionados, y se tienen dos configuraciones: una para imprimir 4 gráficos por página y otra para 16. Si seleccionamos cada una de ellas y pasamos a la pestaña Parámetros del informe, veremos las diferencias: la segunda configuración redefine 3 de los parámetros para tener guardado ese formato y no cambiarlos cada vez que queremos alternar entre uno y otro formato.
La definición de cómo se especifican en el programa de un informe las configuraciones y parámetros, están detalladas en la documentación de la pestaña Código Javascript de la ventana Propiedades del informe.
El diálogo permite de una forma cómoda modificar algunas variables de los programas de informes, ya que también se podrían modificar directamente. Para crear nuevas configuraciones se puede hacer desde el diálogo, dando un nombre y modificando las variables que se han copiado. En cambio, para añadir nuevos parámetros habría que modificar el informe como se ha visto con nuestro parámetro conlineas.