Introducción

Para crear un nuevo informe, ve al módulo Generador de Reportes. Si no tienes acceso a este módulo, probablemente sea porque no tienes los derechos de acceso necesarios o porque no has tildado la casilla ‘Generador de Reportes’ en la opción ???Configuración’ del módulo Sistema.

El módulo Generador de Reportes posee tres registros de los cuales el más importante es el registro Informes. Los otros dos registros (Formularios y Estilos) están presentes también en el módulo Sistema. En esencia, cada registro individual creado en el registro Informes, contiene toda la definición del informe respectivo (abrir páginas correspondientes desde esta página - introducción). Para abrir el registro Informes, haz clic en el botón [Informes] desde el Panel de Control. Así se abrirá la ventana ‘Definiciones de Informes: Hojear’ mostrando los informes que han sido diseñados anteriormente:

Para empezar a diseñar un nuevo informe, haz clic en el botón [Crear] (teclas Ctrl-N para Windows y Linux; o ⌘-N para Macintosh). Alternativamente, puedes resaltar un informe similar al que deseas crear y luego pulsar el botón [Duplicar].

De este modo se abrirá la ventana ‘Definición de Informe: Crear’ y estará vacía si pulsaste el botón [Crear] o conteniendo un duplicado si pulsaste el botón [Duplicar].

El encabezado está conformado por los campos ‘Cód.’ y ‘Nombre Informe’. Además existen cuatro solapas con sus respectivos nombres:
Data
Esta solapa sirve para la programación respectiva del informe. Esto incluye el diseño de la ventana de especificación (es decir, la creación de variables para introducir el criterio de búsqueda); la recurrencia hacia la información de tu base de datos en respuesta a aquello que se carga en la ventana de especificación; la ordenación y filtros de los resultados; el cálculo de los totales y la extracción de información desde otros registros.

Diseño
Esta solapa sirve para diseñar la apariencia del informe, determinar la información que ha de mostrarse y decidir en qué parte de la página se colocarán los datos. Todo esto abarca el encabezado, el pie el informe, los encabezados de las columnas, los campos de la base de datos, los totales y los subtotales.

Entrada
Esta solapa contiene una vista preliminar de la ventana de especificación del informe. Aquí podrás decidir qué casillas y radio botones estarán disponibles en la ventana de especificación.

Opciones
Esta solapa sirve para especificar el destino de impresión por defecto.
Todas estas cuatro solapas constan de un panel de botones y un área de vista preliminar del informe.

Para ir definiendo un informe, haz clic en el botón respectivo dentro de las diferentes solapas. Así se abrirá una casilla de diálogo para que puedas especificar el elemento correcto del informe que estás diseñando. Al pulsar [OK] en esa casilla de diálogo, el área de vista preliminar del editor mostrará el elemento que has creado. En algunos casos, deberás hacer clic en un elemento existente antes de pulsar el botón respectivo. Esto garantizará que el elemento que has de agregar, aparezca en la posición correcta.

En caso que un elemento no esté en el lugar deseado, puedes arrastrarlo y depositarlo en el lugar apropiado.

En caso que un elemento contenga un error, haz doble clic sobre él para reabrir la casilla de diálogo y corregir el error. Si deseas borrar un elemento, haz clic una vez sobre él y luego presiona la tecla Espacio Atrás (o selecciona ‘Limpiar’ desde el menú Registro o pulsa el botón [Borrar]). Debes tener cuidado cuando borres elementos en tu diseño de reportes ya que no podrás recuperar elementos que has borrado.

En estas páginas, vamos a ilustrar el uso del Generador de Reportes a través del diseño de una Lista de Contactos con varias funcionalidades. Por favor, haz clic en los vínculos correspondientes para conocer más sobre:


Cómo especificar un Registro Primario

Lo primero que debes hacer cuando comienzas a diseñar tu informe, es especificar el registro que ha de constituirse en la base de tal informe – es decir, el registro que habrá de ser el registro ???primario”. Para nuestro ejemplo, el registro ???primario” del informe Lista de Contactos, será el registro Contactos. El procedimiento es el siguiente:
  1. Estando en la solapa ‘Data’ del la ventana ‘Definición de Informe: Crear???, haz clic en el botón [Registro]. Así se abrirá la casilla de diálogo ‘Registro’:

    Registro
    Pegado Especial    Seleccionar algún Registro de HansaWorld Enterprise
    Escoge un registro (con Pegado Especial) para determinar que éste será la base del informe.

    Ordenar por
    Pegado Especial    Campos e índices dentro del Registro seleccionado
    Este campo sirve para especificar la ordenación que se empleará en el informe.

    Cada Registro del sistema posee un conjunto de claves de ordenación predefinidas. Cada tipo de ordenación es conocida como “índice”. Un índice puede incluir un tipo de ordenación secundario o terciario (es decir, puedes seleccionar un índice para ordenar Contactos por Categoría de Cliente y luego ordenarlos por Código de Contacto). Puedes ordenar según un solo campo o puedes seleccionar uno de los índices predefinidos. La lista Pegado Especial es una lista de campos situados en el registro que has seleccionado:

    Haz clic en el botón [Índices] (lista Pegado Especial desplegada desde el campo ‘Ordenar por’) para que puedas ver los índices disponibles dentro del registro que has seleccionado.

    En nuestro ejemplo, el informe Lista de Contactos tomará en cuenta aquellos registros individuales de Contacto, colocándolos según su Código de Contacto.

    Ordenar Invertido
    Por defecto, el tipo de ordenación que especifiques en el anterior campo, dará como resultado un informe que se organizará en orden ascendente (ej. del 1 al 10). En este sentido, puedes tildar esta casilla para organizar el informe en orden descendente (ej. del 10 al 1).

    Nombre Variable
    Carga aquí un nombre para la variable que contendrá los datos a mostrarse en el informe. El volumen de esta información puede ser registros enteros o una selección como resultado de una búsqueda.

    Toma en cuenta que necesitarás remitirte a esta variable cuando estés diseñando otras partes de tu informe (por eso es necesario que le des un nombre). Debes incluir al menos un carácter alfa en el nombre de esta variable y no deberás usar espacios o signos de puntuación. Puedes utilizar un guión bajo en lugar de un espacio.

    Nivel
    La definición de tu informe puede contener ciertos niveles como para restringir la impresión de la información dependiendo de la cantidad de registros. Por ejemplo, si quieres imprimir una Lista de Contactos que muestre Facturas abiertas de cada Cliente, los registros recurrentes serán el registro Contactos y el registro Facturas. El registro Contactos es el registro “primario” por tanto corresponde al Nivel 1. El registro Facturas es el registro “secundario” por tanto corresponde al Nivel 2.

    En caso de una Lista de Contactos sin ninguna información vinculada, existirá solamente un Nivel el cual será 1.

    Condición
    Si fuese necesario, puedes especificar una condición la cual debe respetarse para cuando la información evoque al registro que has seleccionado (es decir, para delimitar la paginación de los registros individuales en ese Registro). Por ejemplo, supongamos que estás diseñando un informe que simplemente ha de listar registros individuales provenientes de Registros y pretendes que la persona que ejecute este informe, seleccione los Registros usando ya sea casillas o radio botones en la ventana de especificación. En esencia, cuando el usuario seleccione una casilla o un radio botón, esta acción hará que se configure una variable “real”. En el campo ‘Condición’ de cada Registro, deberás indicar que ese Registro se imprimirá única y exclusivamente cuando la variable correspondiente sea “real???. Por favor, haz clic aquí para observar un ejemplo.

  2. Cuando completes la casilla de diálogo ‘Registro’, haz clic en [OK] para cerrar la ventana. De este modo, toda la información que has cargado será resumida en una línea de texto la cual se colocará en el área de vista preliminar. Verás que cada línea dentro del área de vista preliminar del editor, iniciará con una palabra de identificación (en este caso "Register:").

Bien, ahora que has especificado un registro “primario”, haz clic aquí para aprender cómo ajustar la apariencia de tu informe.

Confeccionando la Apariencia de tus Informes

Cuando diseñes tus informes, debes ineludiblemente especificar la información que deseas extraer del registro seleccionado. Para una Lista de Contactos, los datos a ser incluidos serán el Código, Nombre, Categoría y Número Telefónico del Contacto. Haz esto en la solapa ‘Diseño’:

La diagramación de los informes está dividida en secciones – siempre existe un Encabezado general y un Pie de Informe para todos los Informes. Todo aquel registro que agregues a tu diseño de informe (solapa ‘Data’) tendrá cuatro secciones: Encabezado, Antes, Después y Pie.

En sumatoria, el informe Lista de Contactos tendrá seis secciones en el siguiente orden:

Encabezado
Set Encabezado
Set Antes (Contacto)
Set Después (Contacto)
Set Pie Pág.
Pie de Reporte
Las secciones ‘Antes de Sección’ y ‘Después de Sección’ se imprimirán una sola vez para cada registro individual – por ende, formarán la armazón principal del informe. Estas mismas secciones también se imprimirán una sola vez por informe – para así desplegar los espacios apropiados para los encabezados de columnas y los totales respectivamente. Las secciones vacías no se mostrarán en el informe.

Una sección dentro de un informe puede contener cualquier combinación de objetos (ej. objetos de texto, campo, totales y fórmulas). No se permite la superposición de objetos de ninguna naturaleza. El Encabezado y el Pie no están vinculados a registros específicos, de modo que no podrás diseñar objetos de campo – solo podrás insertar objetos de texto en estas secciones. El Encabezado de Contacto y las secciones ‘Antes de Sección’ (Contacto), ‘Después de Sección’ (Contacto) y ‘Pie de Pág.’ sí estarán efectivamente conectadas al registro Contactos. Si deseas, en estas secciones puedes insertar objetos de campo según el registros Contactos, pero ningún objeto de campo proveniente de algún otro registro que no sea el registro Contactos.

El ancho de las barras plomas que contienen el nombre de las secciones, equivalen al grosor de la ventana de informe cuando el informe en cuestión está en pantalla. Toma en cuenta que cualquier objeto (campo, texto, etc) que esté al margen de estas barras plomas, no será incluido en el informe. Si necesitas cambiar el ancho de la ventana de informe, utiliza el campo ‘Ancho’ ubicado en la solapa ‘Opciones’.

Si necesitas borrar un objeto, haz clic sobre él y luego pulsa el botón [Borrar] – o selecciona el comando ‘Limpiar’ desde el menú Editar.

Además, puedes borrar toda una sección pulsando la barra ploma y luego utilizando el botón [Borrar] – o seleccionado el comando ‘Limpiar’ desde el menú Editar. De esta manera, cada objeto (campo, texto, etc.) dentro de la sección, será borrado y no podrá ser recuperado. Si borras una sección por accidente, haz clic en el botón [Sección] para reemplazarla. Cuando se abra la ventana de diálogo ‘Sección’, deberás especificar una sección usando los radio botones en el área ‘Tipo’ y también deberás especificar el ‘Set Nombre’ usando Pegado Especial:

Por favor, haz clic en los vínculos correspondientes para conocer más detalles sobre:

- Cómo agregar un Título a un Informe

El título del informe es un texto breve que aparece en la parte superior del informe, por lo tanto deberá ser insertado en la sección ‘Reporte Encabezado’.
  1. Haz clic en la sección ???Reporte Encabezado’ para lograr resaltarla con un color más plomo. Siempre debes pulsar una sección antes de agregar un objeto al diseño de tu informe. De este modo aseguras la buena posición de tus objetos dentro de la sección correcta.

  2. Haz clic en el botón [Texto] para abrir la casilla de diálogo ‘Texto’:

    Texto
    Ingresa aquí el texto que deseas mostrar en el informe.

    Izquierda
    Ya que el texto estará enmarcado en una casilla de texto, debes especificar aquí en qué parte del lado izquierdo (dentro de la página) aparecerá el texto creado – lo que debes hacer es especificar un número de píxeles desde el extremo izquierdo de la página. Si todavía no sabes exactamente cuál será la ubicación del texto, entonces no cambies el dato por defecto. En caso que quieras mover el texto eventualmente, arrastra el objeto de texto y deposítalo en el lugar apropiado.

    Derecha
    Especifica aquí en qué parte del lado izquierdo (dentro de la página) aparecerá el texto creado. Lo que debes hacer es especificar un número de píxeles desde el extremo derecho de la página.

    Estilo
    Pegado Especial    opción Estilos, módulo Sistema/ también en registro Estilos del módulo Generador de Reportes
    Utiliza este campo para asignar una estilo de fuente al texto creado. Si no especificas un estilo de fuente, se utilizará la fuente y el tamaño de fuente tal cual aparece en la opción Información de Empresa del módulo Sistema.

    Doble Tachado
    Puedes hacer que el texto creado aparezca tachado con una línea roja – lo cual dependerá de una condición que deberás especificar en este campo. Esto se describe aquí.

    Justificación
    Estas alternativas sirven para determinar que el texto creado aparezca justificado a la derecha o izquierda dentro de su casilla.

  3. Una vez completada la casilla de diálogo ‘Texto’, pulsa el botón [OK] para que puedas visualizar la casilla de texto que has creado:

    La casilla de texto te ayuda a ver en parte del informe aparecerá el texto que has creado. Toma en cuenta que la casilla no se imprimirá puesto que solo sirve para orientación. Cuando traslades un objeto (campo, texto, etc.) hacia otra sección, simplemente debes arrastrarlo hacia la barra ploma que contiene la sección hacia donde deseas trasladar. Si la casilla de texto fuese demasiado diminuta para mostrar el texto entero, haz doble clic sobre ella y cambia las dimensiones usando los campos ‘Izquierda’ y ‘Derecha’.

    El texto dentro de la casilla de texto utilizará un estilo de texto estándar. Es decir que aunque especifiques un Estilo de fuente en la casilla de diálogo ‘Texto’, éste no será utilizado en la solapa ‘Diseño’ – solo cuando pases el informe a pantalla o papel.

Luego de especificar el Título de tu informe, por favor haz clic en los vínculos correspondientes para conocer más detalles sobre:

- Cómo agregar Encabezados de Columnas

Para agregar encabezados de columnas a tu diseño de informe, primero debes tomar en cuenta que este espacio sirve para identificar la información contenida en el informe. Los encabezados de columnas se imprimen una sola vez y se posicionan encima de la información respectiva del Contacto.
Dependiendo de tu diseño, puedes colocar los encabezados de columnas dentro del sector del Encabezado general o en la sección del Encabezado del Contacto. En nuestro ejemplo de Lista de Contactos, los encabezados de columnas son indispensables para identificar el Código, Nombre, Categoría y Número Telefónico del Contacto.
  1. Haz clic en la sección ‘Encabezado de Contacto’ para poder resaltarla con un color más plomo.

  2. Pulsa el botón [Texto] y úsalo según se describe aquí para de esa manera, crear cuatro encabezados:

Luego de agregar los encabezados de columnas, haz clic en los vínculos correspondientes para conocer más sobre:

- Cómo agregar Campos a un Informe

Ahora debes insertar los campos respectivos para el Código, Nombre y Número Telefónico del Contacto. Estos campos serán independientes para cada Contacto y por tanto aparecerán en el informe las veces que sea necesario. Dicho esto, deberás colocar este tipo de objetos dentro de la sección ‘Antes de Sección’ (Contacto) para incluir esta información en tu informe.
  1. Haz clic en la sección ‘Antes de Sección’ la cual estará marcada "Contacts vrContact Before").

  2. Haz clic el [Campo] para abrir la casilla de diálogo ‘Campo’:

    Nombre Campo
    Pegado Especial    Campos en el registro correspondiente
    Selecciona los campos que desees imprimir en el informe. Para esto, puedes utilizar la lista Pegado Especial – asumiendo que los campos no están vinculados a otro registro del sistema. Si deseas imprimir la información desde otro registro, deberás utilizar variables según lo descrito aquí.

    Izquierda
    Especifica aquí en qué parte del lado izquierdo, dentro del campo, aparecerá en la página. Para esto, especifica un número de píxeles. Si no sabes todavía en qué parte quieres insertar el campo, no vuelvas a configurar el valor por defecto. Si es necesario, podrás mover posteriormente mover el campo arrastrando su objeto y depositándolo en el lugar apropiado. Para alinear el campo dentro de su encabezado de columna, ingresa aquí las mismas dimensiones.

    Derecha
    Especifica aquí en qué parte del lado derecho dentro del objeto de texto, ha de aparecer el campo. Para esto, carga una número píxeles.

    Estilo
    Pegado Especial    opción Estilos, módulo Sistema/ también en registro Estilos del módulo Generador de Reportes.
    Este campo sirve para asignar una fuente y un estilo de fuente. Toma en cuenta que si no ingresas una Estilo aquí, se utilizarán la fuente y el tamaño de fuente tal cual se especifica en la opción Información de Empresa del módulo Sistema.

    Doble Tachado
    Puedes hacer que un campo aparezca tachado con una línea roja - lo cual dependerá de la condición que ingreses en este campo. Esto se describe explícitamente aquí.

    Drill-down
    Tilda esta casilla para que puedas utilizar esta funcionalidad desde tu informe hacia el registro respectivo. En nuestro ejemplo de Lista de Contactos, probablemente resulte muy beneficioso poder abrir el registro individual de un Contacto en particular.

    Justificación
    Estas alternativas sirven para determinar que el texto aparezca justificado ya sea a la derecha o a la izquierda dentro del campo creado. Por lo general, los campos que contengan información alfanumérica o algún texto, deberán estar justificados a la izquierda. Por su parte, los campos que contengan cifras deberán estar justificados a la derecha.

  3. Una vez completada la información en la casilla de diálogo ‘Campo’, haz clic en el botón [OK]. De este modo el campo que has creado aparecerá en el área de vista preliminar (en la sección ‘Antes de Sección’ Contacto):

  1. Repite los pasos 2 y 3 tres veces para crear los campos respectivos de Nombre, Categoría y Número Telefónico del Contacto:

Haz clic en los vínculos correspondientes para conocer más sobre:

Cómo seleccionar un destino de impresión para tu informe

Para especificar un destino de impresión por defecto, abre la solapa ‘Opciones’ y activa el radio botón correspondiente en el área llamada Medio p/Defecto:

Si el informe que estás diseñando ha de pasar frecuentemente a una impresora y deseas tener una casilla de diálogo para esta acción, tilda la casilla ‘Diálogo de Impresión’. De este modo, cuando se ejecute este informe, será posible especificar la cantidad de copias del informe que se necesitan.

Usualmente, cuando imprimes un informe existe una sección en la parte superior que muestra el nombre del informe, el criterio de búsqueda y la fecha/hora de ejecución. En este sentido, si no deseas imprimir esta sección, tilda la casilla ‘Omitir Encabezado’.

Luego de esto, abre aquí para averiguar detalles sobre cómo ajustar el ancho del informe.

Dimensiones de tus Informes

El campo ‘Ancho’ ubicado en la solapa ‘Opciones’, sirve para ajustar la anchura de la ventana de informe. Este ajuste se reflejará cuando el informe esté en pantalla. La dimensión especificada para la anchura debe ser en píxeles (por defecto es 600). Al modificar esta cifra, podrás ver el resultado en la solapa ‘Diseño’ puesto que las diferentes franjas de color plomo cambiarán para ajustarse a la anchura que especifiques aquí.

Cuando el informe pase a papel se ajustará para que ocupe la anchura del papel, es decir, todos los objetos que hayas creado serán alargados o encogidos de manera proporcional. Cuando los objetos se encojan, probablemente el texto respectivo ocupará dos o más renglones. Si estás diseñando un informe teniendo en mente su resolución de impresión (no su resolución en pantalla), seguramente querrás que la solapa ‘Diseño’ refleje lo más asertivamente posible la resolución de impresión de ese informe. En esta situación, ajusta la Anchura colocando 418 píxeles (aprox.) ya que esta dimensión cubre aproximadamente la anchura de una hoja A4 y por tanto, no habrá necesidad de reducir o encoger el informe cuando se imprima.

Cuando el informe se encuentre en pantalla, podrás todavía cambiar la anchura de la ventana que contiene al informe – para esto, debes mantener presionado el botón derecho del Mouse mientras modificas las dimensiones de la ventana. Por defecto, los objetos creados permanecerán en el mismo lugar y conservarán su mismo tamaño. Si deseas que los objetos creados sean alargados o encogidos proporcionalmente cuando modifiques las dimensiones de la ventana, tilda la casilla ‘Escala’.

Luego de esto, abre aquí para averiguar detalles sobre cómo imprimir tu informe.

Impresión de tu Informe

Asegurándote de haber especificado correctamente el registro primario, la apariencia, el destino de impresión y las dimesiones de página para tu informe, podrás recién imprimir tal informe por primera vez. El procedimiento es el siguiente:
  1. Ingresa un Código y un Nombre para el informe (si es que no lo has hecho todavía – utiliza los campos en el encabezado del informe que has creado). El Nombre de Informe se colocará en el borde superior de la ventana de informe y en el encabezado (junto con la fecha, la hora y el nombre de la empresa).

  1. Haz clic en el botón [Ejecutar] para abrir una ventana de especificación la cual estará vacía puesto que todavía no has definido ningún criterio de búsqueda para el informe.

    Como ves, el Nombre de Informe aparece en el borde superior de la ventana de especificación. En la sección ‘Medio’, aparecerá activada la alternativa que has determinado en la solapa ‘Opciones’.

  2. Haz clic en el botón [Ejecutar] para producir el informe:

    De igual modo, el Nombre de Informe aparece en el borde superior de la ventana de informe y en el encabezado.

    Dentro del informe, el Encabezado general va seguido de los encabezados de las columnas que especificaste en la sección Encabezado de Contacto. De este modo podrás ver también la información que proviene de tu base de datos. Estos datos utilizarán los campos que especificaste en la sección ‘Antes Sección’ (Contacto) usando la cantidad de espacio que sea necesaria. Verás que los Contactos serán organizados por Nombre de Contacto según lo especificado en la solapa ‘Data’.

    Los Códigos de Contacto aparecen subrayados lo cual indica que el informe que has creado posee la funcionalidad Drill-Down (esto se determinó cuando creabas el campo para el Código de Contacto – solapa ‘Diseño’). De esta manera, al pulsar un Código de Contacto podrás abrir el registro individual respectivo:

Bien, luego de imprimir tu informe, haz clic en los vínculos correspondientes para conocer más sobre:

Agregar espacios en blanco en tu diseño de informe

Al observar el informe que has creado, seguramente decidirás graduar el espacio entre sí que tienen el Encabezado del informe y los encabezados de las columnas para así mejorar la legibilidad de los datos. Para esto, el procedimiento es el siguiente:
  1. Vuelve a la ventana de edición del informe y abre la solapa ‘Diseño’.

  2. Para ilustrar este proceso, haz clic en cualquier lugar dentro del área donde se encuentran la barras plomas correspondientes a la secciones de tu informe pero trata de no pulsar el Mouse sobre ninguno de los encabezados de las columnas. De esta manera, se dibujará una casilla (negra o roja dependiendo del sistema operativo) que encierra los encabezados de las columnas:

    Esta casilla se llama “Línea” ya que cuando colocas un objeto (texto o campo) en una sección por primera vez, una “Línea” se coloca automáticamente en esa sección. Esta “Línea” determina la altura de la sección. Las “Líneas” son generalmente invisibles - es decir, la casilla roja o negro significa que ha seleccionado una de ellas.
  1. Haz doble clic en cualquier parte de una “Línea” evitando hacerlo sobre los cuatro encabezados de las columnas. De esta manera se abrirá la casilla de diálogo ‘Línea’:

    La altura por defecto de una línea es 15 píxeles. Si colocas 30 como altura de línea y luego pulsas [OK], se agregará un poco de espacio en blanco por encima de los encabezados de las columnas (es decir, entre el Encabezado general del informe y los encabezados de las columnas):

  1. Cualquier objeto creado dentro de una “Línea” debe ser posicionado al pie de esa “Línea”. Así que si deseas un poco de espacio en blanco desde los encabezados de columnas hacia abajo, no podrás arrastrar hacia arriba los elementos que deseas dentro de su propia “Línea”. Por esta razón debes colocar una segunda “Línea” vacía que vaya hacia abajo de los encabezados de columnas. Haz clic en la barra ploma del Encabezado de Contacto para resaltarla y luego haz clic en el botón [Línea]. De esta manera se volverá a abrir la ventana de diálogo ‘Línea’ en donde deberás ingresar la altura y tildar la casilla ‘Imprimir Siempre’. Si no tildas la casilla ‘Imprimir Siempre’, la “Línea” no se imprimirá si está vacía. En este caso, la Línea siempre estará vacía de modo que tú deberás tildar esta casilla para que pueda imprimirse. En el primer caso (paso 3), la “Línea” no se encuentra vacía puesto que contiene los encabezados de las columnas – por tanto, no será necesario el uso de la casilla ???Imprimir Siempre’. Haz clic en [OK] para que efectivamente se agregue la Línea al Encabezado de tu informe:

    Si tienes varias “Líneas” dentro de una misma sección, podrás reorganizarlas arrastrándolas hacia arriba una por una.

    Este será el resultado:

    Notemos que se ha agregado una nueva Línea a la sección de Encabezado Contacto. No hemos aumentado la altura de la “Línea” que contiene los campos de la ‘Antes Sección’ (Contacto). Si hubiéramos hecho eso, el espacio en blanco se hubiera colocado en medio de cada Contacto dentro del listado y hubiese dificultado su legibilidad.

    Dado que todos los objetos (texto o campo) dentro de una “Línea”, deben estar posicionados al pie de esa “Línea”, podrás tener una hilera de objetos en una “Línea”. Si deseas más de una hilera de objetos en una sección, debes agregar primero una nueva “Línea”. Por ejemplo, si deseas tener una segunda hilera de campos en la ‘Antes Sección’ (Contacto), primero debes agregar una nueva “Línea” a esa sección. Luego, resalta la nueva “Línea” antes de pulsar el botón [Campo] para así asegurar que los nuevos campos serán agregados a la “Línea” correcta. Si resaltas la “Antes Sección” (Contacto), los nuevos objetos de campo podrían ser agregados a la “Línea” incorrecta, en cuyo caso podrás trasladarlos a la “Línea Correcta” arrastrándolos.

    Si borras una “Línea”, todos los objetos (de texto o campo) dentro de ella serán borrados también. Para borrar una Línea, haz clic sobre ella y luego presiona la tecla Espacio Atrás. Alternativamente, puedes pulsar el botón [Borrar] en la ventana de definición del informe que has creado o seleccionar ‘Limpiar’ desde el menú Editar. Toma en cuenta que no podrás recuperar una Línea que ha sido borrada.Por favor, haz clic en los vínculos correspondientes para conocer más sobre:


    Agregar Búsquedas

    El informe que has creado puede ser potenciado gracias a las búsquedas. Los criterios de búsqueda pueden ser automáticos o pueden estar controlados por la persona que ejecuta el informe. En este último caso, cada persona especifica qué datos habrán de ser abarcados por el informe. Esta página nos instruirá primero sobre búsquedas automáticas y luego sobre búsquedas controladas por el usuario.

    Nuestro informe de ejemplo es la Lista de Contactos el cuál, hasta el momento, ha corrido la búsqueda de todos y cada uno de los registros individuales en el registro Contactos (Proveedores, Clientes y Personas de Contacto). Para agregar una búsqueda automática que tome en cuenta solamente Clientes y deseche Proveedores y Personas de Contactos, haz lo siguiente:

    1. Vuelve a la ventana de Definición del informe que has creado y abre la solapa ‘Data’.

    2. Haz clic sobre la línea marcada “Registro: Contactos…” para especificar que la búsqueda habrá de ejecutarse sobre en registro Contactos. Luego, haz clic en el botón [Selección] para abrir una casilla de diálogo:

      Como ves, la casilla de diálogo ‘Selección’ está dividida en dos secciones. En nuestro ejemplo, hemos asumido que el usuario desea ejecutar el informe tomando en cuenta solamente Clientes. Así que no hay necesidad de saber si los “no-clientes” serán ignorados en el informe. La búsqueda, por tanto, puede ser automática para que puedas ignorar la casilla ‘No’ y los seis campos inferiores de esta ventana de diálogo. Es decir, solo necesitas utilizar los tres primeros campos para definir una búsqueda automática (puedes utilizar los otros campos para colocar variables en la ventana de especificación).
      Nombre Campo
      Pegado Especial    Campos en el registro respectivo
      Selecciona el campo que habrá de ser sujeto de la búsqueda. La lista ‘Pegado Especial’ desde aquí, mostrará todos los campos en el registros con el que estás trabajando (es decir, el registro Contactos).

      Cuando el informe sea ejecutado, se correrá una búsqueda en el campo que especifiques aquí en función al dato que ingreses en el campo ‘Valor’. En nuestro ejemplo, el campo ‘CUType’ será el sujeto de la búsqueda (CUType es el nombre interno de la casilla ‘Cliente’ en el encabezado de un registro individual de un Contacto) y por tanto este es el campo que debes especificar aquí.

      Fórmula, Valor
      Usa uno de estos campos (no ambos) para especificar aquello que deseas buscar. En otras palabras, debes especificar el dato o valor que necesitas estar presente en el campo especificado arriba. De este modo, esto jalará el registro individual correcto hacia el informe.

      Si deseas buscar un dato en especial, ingresa esto en el campo ‘Valor’. Si deseas buscar los contenidos de una variable u otro campo, ingresa entonces esa variable o campo en el campo ‘Fórmula’.

      En nuestro ejemplo, necesitas Contactos que hayan sido marcados como Clientes, es decir, aquellos Contactos cuyo registro individual muestre la casilla ‘Cliente’ tildada efectivamente. Técnicamente, cuando tildas esta casilla, el valor “1” se almacena en el campo CUType del registro respectivo. Por lo tanto, debes ingresar “1” en el campo ‘Valor’ para el búsqueda recaiga sobre todos los Contactos donde el CUType sea “1”.

    1. Después de cargar los datos correctos en la casilla de diálogo, la información respectiva aparecerá como segunda línea en el área de vista preliminar del editor:

      La búsqueda de Clientes en el registro Contactos será automática, lo cual significa que siempre se efectuará sin necesidad de ser activada por la persona que produzca el informe.

      Por otro lado, puedes agregar búsquedas controladas por las personas que producen el informe. Es decir, el usuario que esté ejecutando el informe podrá especificar la búsqueda que ha de efectuarse y el valor/dato donde recaerá tal búsqueda. Por ejemplo, puede resultar ventajoso producir una lista de aquellos Clientes pertenecientes a una Categoría en particular.

      Para esto, necesitas una variable de la Categoría de Contacto en la ventana de especificación del informe y debes configurar el informe para que realice una búsqueda basada en el dato que ingrese el usuario. Para esta configuración utilizarás la ventana de diálogo ‘Selección’:

      En este caso, utilizarás los seis campos inferiores de la ventana de diálogo ‘Selección’ para determinar la variable y para colocarla en la ventana de especificación. Los tres primeros campos de la parte superior, sirven para definir la búsqueda que se correrá.
      Nombre Campo
      Pegado Especial    Campos en el registro respectivo
      Selecciona aquí el campo que habrá de ser el sujeto de la búsqueda. La lista Pegado Especial mostrará todos los campos dentro del registros con el que estás trabajando (es decir, el registro Contactos).

      Cuando el informe se ejecutado, se correrá una búsqueda en el campo especificado aquí en función al valor/dato en el campo ‘Nombre Variable’. En nuestro ejemplo, el campo ‘Categoría Cliente’ es el sujeto de la búsqueda, así que ese es el campo que necesitas especificar acá.

      Fórmula
      La Fórmula no se utiliza en esta situación.

      Valor
      Si deseas colocar un valor por defecto en la variable cuando se abra la ventana de especificación del informe, especifica tal valor aquí.

      No
      Tilda esta casilla cuando desees realizar una búsqueda “inversa”, por ej. cuando decidas buscar registros individuales que no coinciden con lo que se especificó en la ventana de especificación. Por ejemplo, puedes tildar esta casilla para que la búsqueda recaiga sobre todos los Clientes excepto aquellos pertenecientes a la Categoría especificada en la ventana de especificación.

      Etiqueta Entrada
      Ingresa el nombre de la variable tal cual ha de aparecer en la ventana de especificación (ver abajo). La Etiqueta debe indicarle al usuario qué se debería ingresar en ese variable.

      Nombre Variable
      Ingresa un nombre para la variable que constituirá el criterio de búsqueda. Para ingresar este dato, asegúrate de ingresar al menos un carácter alfa y no separas este nombre no ningún espacio o signos de puntuación. Puedes utilizar un guión bajo _ en lugar de un espacio. Idealmente, el nombre de la variable deberá indicar el propósito de la variable.

      La persona que ejecute el informe ingresará su criterio de búsqueda en este variable cuando abra la ventana de especificación. Al pulsar [Ejecutar], se correrá una búsqueda usando el Nombre de Campo que especificaste y el sistema tratará de hallar los registros individuales que coincidan con el criterio de búsqueda. En nuestro ejemplo, se correrá una búsqueda para hallar los Clientes cuya Categoría coincida con el dato que el usuario ingrese en esta variable (ventana de especificación).

      Pegar Registro
      Pegado Especial    Registros en HansaWorld Enterprise
      Si deseas que la persona que ejecuta el informe, use Pegado Especial para extraer un valor/dato hacia la variable, debes especificar aquí el registro cuyos contenidos habrán de aparecer en la lista Pegado Especial.

      Puede que sea muy ventajoso ingresar aquí un bloque en lugar de un registro. Aunque los bloques no se incluyen en la lista Pegado Especial, puedes obtener un listado de bloques interesantes pulsando el botón [Pegar Ventana]. Los bloques ofrecidos en esta lista son:
      PerSClass
      opción Periodos de Informe

      VATCodeSClass
      opción Cód. IVA

      PasteCurDate
      Ventana 'Pegar Fecha'

      LandSClass
      opción Idiomas

      PMSClass
      opción Formas de Pago
      Por ejemplo, si quieres que un usuario pueda escoger un Código IVA como criterio de informe, haz clic en el botón [Pegar Ventana] y selecciona "VATCodeSClass".

      Ancho
      Especifica aquí (en píxeles) las dimensiones de la variable en la ventana de especificación. Idealmente, la anchura deberá reflejar la cantidad de caracteres que han de ingresarse en la variable. Por defecto el la dimensión es ???-1”, lo cual significa que la variable ocupará toda la anchura de la ventana de especificación (ver ilustración anterior).

      h, v
      Utiliza estos dos campos para especificar dónde deseas colocar la variable en la ventana de especificación. Ingresa coordinadas (en píxeles) para la esquina superior izquierda de la variable (no la etiqueta): “h” (horizontal) se refiere a la distancia desde el extremo izquierdo de la ventana de especificación. “v” (vertical) se refiere a la distancia desde el extremo superior. Verás que tienes ajustes por defecto los cuales aplican el espacio estándar de Hansa, el cual es 20 píxeles entre variables.
      El ejemplo a continuación utiliza una variable llamada vsCategory en la ventana de especificación. La persona que ejecute el informe indicará una Categoría de Cliente (o un rango de Categorías separadas por dos puntos) en este variable; o seleccionará una Categoría de Cliente usando el botón respectivo dentro de la lista Pegado Especial que se abre desde el campo ‘Pegar Registro’. Luego de la búsqueda descrita anteriormente en esta página, habrá una segunda búsqueda en función a Clientes cuya Categoría coincida exactamente con lo que se ingresó en la variable vsCategory ("CustCat" es el nombre interno del campo Categoría de Cliente en el registro Contactos). La búsqueda respeta el uso de mayúsculas y minúsculas. Si la variable vsCategory queda vacía en la ventana de especificación, todos los Clientes serán tomados en cuenta en el informe.

    1. Cuando hayas cargado correctamente los datos en la ventana de diálogo, haz clic en [OK] para cerrar la ventana. De este modo verás que la información que has ingresado en la ventana de diálogo ‘Selección’, aparecerá en el área de vista preliminar de la ventana de definición:

      El orden de las dos líneas “Selección:??? no es importante ya que ambas búsquedas se ejecutarán de todas formas. El informe listará únicamente registros individuales donde el CUType sea 1 y donde la Categoría de Cliente coincida con el dato respectivo que el usuario ingresó en la ventana de especificación.
    Bien, ahora haz clic en los vínculos correspondientes para conocer más sobre:

    - Prueba

    Es muy práctico realizar una prueba en cada paso de tu definición de informe. De esta manera podrás percatarte a tiempo de los errores. Puedes realizar esto de tres maneras:
    1. Haz clic en el botón [Check] el cual se encuentra en la parte del encabezado de la ventana de definición del informe que estás creando/o has creado. Esta acción verificará que no existan errores sintácticos en el informe y hallará también algunos errores lógicos (no todos). Si se detecta un error, el sistema te comunicará la naturaleza de tal error y abrirá la casilla de diálogo respectiva para que puedas realizar la enmienda. Alternativamente, puedes pulsar el botón [Check] mientas mantienes presionada la tecla Shift para producir un informe que lista todos los elementos del informe que has diseñado – incluyendo aquellos que tienen errores. Por favor, revisa la página Mensajes de Error comunes para saber cuáles son los errores más comunes.

    2. Haz clic en el botón [Ejecutar] para producir el informe y visualizar la apariencia del informe. Así podrás verificar que el informe está según lo deseado. Toma en cuenta que si la verificación hecha con el botón [Check] detecta un error de sintaxis, el informe no podrá ser visualizado.

    3. Los botones [Check] y [Ejecutar] no encontrarán todos los errores lógicos. Por lo tanto, deberás revisar detenidamente el área de vista preliminar del informe (solapas ‘Data’ y ???Diseño’) para analizar la lógica de tu informe antes de imprimirlo. ¡La edición de definiciones de informe está íntimamente ligada a la codificación de tu copia de HansaWorld Enteprise! Como en cualquier otro tipo de programación informática, un importante error lógico en una definición de informe haría que HansaWorld Enteprise se caiga.

    !

    Por favor, revisa minuciosamente la lógica de tu informe para no correr el riesgo de perder datos.


    También es una buena idea guardar frecuentemente la Definición de Informe a medida que avanzas en el proceso de diseño. Sin embargo, los botones [Check] y [Ejecutar] incluirán los últimos cambios no-guardados también.

    Para probar la búsqueda de la Categoría, haz clic en el botón [Ejecutar]. Así se abrirá la ventana de especificación y ahora incluirá la variable respectiva para la Categoría:

    Ingresa una Categoría y luego haz clic en el botón [Ejecutar]. En la ilustración de abajo, hemos buscado Clientes que pertenecen a la Categoría “CUST”. Esta información aparece a la derecha del encabezado en el informe. No olvides que la búsqueda respeta el uso de mayúsculas y minúsculas, de modo que “cust” no producirá nada.

    Por favor, haz clic en los vínculos correspondientes para conocer más sobre:

    - Agregar una segunda búsqueda - Ventana de Especificación

    Tu informe puede tener una segunda búsqueda que se aplique por separado o en combinación con la primera búsqueda. Por ejemplo, puede resultar ventajoso correr la búsqueda de Clientes usando sus Códigos, mismos que entran en un rango que a su vez pertenece a una Categoría de Cliente específica. El procedimiento es el siguiente:
    1. Vuelve a la ventana de definición de tu informe y abre la solapa ‘Data’.

    2. Haz clic en la barra llamada “Registro: Contactos…” para determinar que la búsqueda se correrá en el registro Contactos. Luego, haz clic en el botón [Selección] y completa los datos de la casilla de diálogo según lo descrito aquí – ve la siguiente ilustración:

      En el anterior ejemplo, una nueva variable llamada vsCustNo habrá se colocarse en la ventana de especificación y estará vinculada al campo Código (“Código” es el nombre interno del campo ‘Cód.’ en el registro Contactos). Si la persona que ejecuta el informe ingresa un Código de Contacto o un rango de Códigos en la variable vsCustNo, se correrá una búsqueda de todos aquellos Contactos cuyo Código coincida con lo ingresado en esta variable. Recuerda que la búsqueda automática de Contactos donde el CUType es 1, obviará todos aquellos Contactos dentro del rango que no sean Clientes.

      La cifra cargada por defecto en el camp ‘v’ tiene el poder de configurar la nueva variable (vsCustNo) en 20 píxeles por debajo de la existente variable llamada vsCategory.

    1. La nueva variable y la nueva búsqueda aparecerán en una nueva franja llamada “Selección:” dentro del área de vista preliminar en tu editor:

    1. Abre ahora la solapa ‘Entrada’ para que puedas visualizar el aspecto que tendrá la ventana de especificación:

      Si la nueva variable no estuviere del todo correcta (ej. si no está en la posición correcta dentro de la ventana de especificación o si existe un error de escritura en la Etiqueta), puedes enmendar esto haciendo doble clic en la variable dentro de la solapa ‘Entrada’ o haciendo doble clic en la franja respectiva llamada “Selección:” en la solapa ‘Data’.

      El área de color blanco representa la anchura de la ventana de especificación. Si necesitas cambiar esto, utiliza el campo ‘Espec. Ancho Ventana??? en la solapa ‘Opciones’.

    Por favor, haz clic en los vínculos correspondientes para conocer más sobre:

    - Probando la segunda búsqueda

    Para probar la segunda búsqueda, abre la ventana de especificación de tu informe usando el botón [Ejecutar]:

    La apariencia de la ventana de especificación debe ser prácticamente igual a la solapa ‘Entrada’. Si presionas la tecla Tab algunas veces, el cursor recorrerá las diferentes variables siguiendo el orden de especificación que muestra la solapa ‘Data’. En la ilustración de más abajo, hemos realizado la búsqueda de Clientes que pertenecen a la Categoría “CUST” y cuyos Códigos de Contacto están dentro del rango 001- 010. Ambas búsquedas se mostrarán en el encabezado del informe:

    Por favor, haz clic en los vínculos correspondientes para conocer más sobre:

    - Búsqueda de Objetos, Clasificaciones de Ítem y Contactos

    Puedes utilizar el método estándar (ver aquí) para establecer búsquedas en casi todos los campos de la ventana de especificación. Las tres excepciones a esto son las búsquedas de Objetos, Clasificaciones de Ítem y Clasificaciones de Contacto puesto que estos tres campos pueden contener varios datos separados por comas. Por ejemplo, un Contacto podría pertenecer a las Clasificaciones A, B y C en cuyo caso su campo de Clasificación contendrá “A,B,C”. El método estándar de búsqueda no permite correr la búsqueda de un Contacto con varias Clasificaciones ya que solo recae sobre campos que coinciden exactamente con lo ingresado en la ventana de especificación.

    Si necesitas correr búsquedas en el campo Objeto, Clasificación de Ítem o Clasificación de Contacto, debes realizar un procedimiento diferente. En esta página describiremos cómo colocar una variable de Clasificación en la ventana de especificación del informe para de este modo activar la búsqueda de Contactos que pertenezcan a una Clasificación particular o Clasificaciones:

    1. Vuelve a la ventana de definición del informe y abre la solapa ‘Entrada’.

    2. Haz clic en el botón [Campo] para abrir la ventana de diálogo ‘Campo de Entrada’. Aquí podrás colocar una variable que se utilizará en la ventana de especificación para especificar aquello sobre lo cual se desea correr la búsqueda:

      Etiqueta
      Carga aquí un nombre para la variable el cuál se verá en la ventana de especificación. La Etiqueta debe indicarle al usuario qué dato debe ingresar dentro de la variable respectiva.

      Nombre Variable
      Carga aquí un nombre para la variable el cual representará el criterio de búsqueda (aquello sobre lo cual se desea correr la búsqueda). Debes incluir al menos un carácter alfa y no debes usar espacios o signos de puntuación inusuales. Puedes utilizar un guión bajo _ en lugar de espacios. Idealmente, el nombre de la variable debe indicar el propósito de esa variable.

      Tipo
      Pegado Especial    Tipos de Variables
      Especifica aquí el tipo de variable. Este dato determinará el tipo de información que irá contenida en la variable.

      En nuestro ejemplo, la variable contendrá la Clasificación que desea ser encontrada por el ejecutor del informe. Por esta razón, debe ser una variable de tipo “string”.

      Para tener una lista de los diferentes tipos de variables, por favor revisa la página Tipos de Campo y Variable.

      Valor Inicial
      Si deseas que se coloque un dato por defecto en la variable cuando la ventana de especificación se abra, especifica tal dato aquí.

      Pegar Registro
      Pegado Especial    Registros en HansaWorld Enterprise
      Si deseas que la persona que ejecute el informe pueda usar la funcionalidad Pegado Especial para extraer un dato hacia la variable, debes especificar aquí el registros cuyo contenido ha de aparecer en la lista Pegado Especial.

      Toma en cuenta que podría resultar mejor especificar aquí un bloque en lugar de un registro. Aunque los Bloques no están incluidos en la lista Pegado Especial que se despliega desde este campo, puedes abrir una selección de bloques interesantes pulsando el botón [Pegar Ventana]. Los bloques de esta lista son los siguientes:
      PerSClass
      opción Periodos de Informe

      VATCodeSClass
      opción Cód. IVA

      PasteCurDate
      ventana 'Pegar Fecha'

      LandSClass
      opción Idiomas

      PMSClass
      opción Formas de Pago
      Por ejemplo, si deseas que haya la posibilidad de seleccionar un Código IVA como criterio de informe, haz clic en el botón [Pegar Ventana] y selecciona "VATCodeSClass".

      Ancho
      Debes especificar aquí (en píxeles) la anchura que tendrá la variable en la ventana de especificación. Idealmente, la anchura de la variable deberá depender de la cantidad de caracteres que se ingresarán dentro de su espacio. Por defecto se carga -1 lo cual significa que la variable ocupará toda la anchura de la ventana de especificación (ver ilustración).

      h, v
      Estos dos campos sirven para especificar la posición de la variable en la ventana de especificación. Debes cargar coordinadas (en píxeles) para la esquina superior izquierda de la variable (no para la etiqueta): “h” (horizontal) se refiere a la distancia desde el borde izquierdo de la ventana de especificación, mientras que “v” (vertical) se refiere a la distancia desde el borde superior. Como verás, se ofrecen respectivamente dimensiones por defecto las cuales asumen el espacio vertical estándar de Hansa (20 píxeles entre variables).

    3. Una vez hayas cargado los datos correctos en la ventana de diálogo ‘Campo de Entrada’, haz clic en [OK]. De esta manera, la variable se agregará y podrás verla en la solapa ‘Entrada’ respetando la posición especificada en los campo ???h’ y ‘v’. De manera preliminar la solapa ???Entrada’ te muestra cómo la nueva variable afectará la apariencia de la ventana de especificación:

    1. Has insertado las variables vsCategory y vsCustNo en la ventana de especificación usando la ventana de diálogo ‘Selección’ (según lo descrito aquí). Básicamente, la ventana de diálogo ‘Selección’ ha servido tanto para insertar variables y para especificar la búsqueda que se efectuará cuando se ingrese un dato dentro de tales variables.

      Por su parte, la ventana de diálogo ‘Campo de Entrada’ solo inserta una variable en en la ventana de especificación pero no especifica qué pasará cuando algún dato ingrese en tal variable. Por tanto en este último caso, deberás especificar personalmente lo que sucederá cuando se cargue un dato dentro de la variable. En este sentido, necesitas especificar que si la variable vsClass contiene un dato, se correrá una búsqueda de todos aquellos Contactos cuyos campos de Clasificación contenga un dato igual o parcialmente semejante a los contenidos vinculados a la variable vsClass. Recuerda que la búsqueda automática de Contactos donde el CUType es 1, obviará todos aquellos Contactos que no sean Clientes.

      Ve a la solapa ‘Data’ y haz clic sobre la franja llamada “Registro: Contactos…” para especificar la búsqueda que ha de ejecutarse en el registro Contactos y luego haz clic en el botón [Imprimir Si]. De esta manera, se abrirá la ventana de diálogo ‘Imprimir Si’:

    2. Ingresa una Condición así:

      SetInSet se refiere a una función dentro de HansaWorld Enterprise la cual detecta campos que coinciden parcial o totalmente con el criterio de búsqueda. Esta función emplea dos parámetros (en los corchetes separados por comas) de la siguiente manera:

      1. la variable (inscrita en el paso 2) la cual contiene los criterio de búsqueda (vsClass en el ejemplo); y

      2. el campo que constituye el sujeto de búsqueda (vrContact.Classification en el ejemplo). Esta es una expresión que se refiere al campo Clasificación en el registro Contactos. Es una expresión en dos partes: la primer parte ("vrContact") es el nombre de la variable que contiene el registro Contactos. Este nombre fue dado a la variable en la ventana de diálogo ‘Registro’ (ver página Cómo especificar un Registro Primario). La segunda parte ("Classification") es el nombre interno del campo Clasificación en el registro Contactos. Como ves, las dos parte están separadas por un punto. Por lo tanto, la expresión "vrContact.Classification" significa “campo clasificación en registro Contactos”. Toma en cuenta que esta expresión respeta el uso de mayúsculas y minúsculas. No podrás referirte directamente al registro Contactos sino que deberás usar la variable vrContact.

      En nuestro ejemplo, la nomenclatura completa a la que se refiere la función SetInSet es:
      SetInSet(vsClass,vrContact.Classification)
    3. Cuando pulses [OK], se agregará una franja o línea conteniendo la condición que has especificado:

      Aparentemente para la persona que produzca el informe, no habrá diferencia entre vsClass y las otras dos variables:

      Cuando abras la ventana de especificación, si presionas la tecla Tab algunas veces, el cursor recorrerá las distintas variables siguiendo el orden que has especificado en la solapa ‘Data’. Notarás que las franjas “Imprimir Si:” siempre van debajo de las franjas “Selección:”. Es por esto que se recomienda colocar variables (en la ventana de especificación) usando el botón [Campo de Entrada] de tal modo que se posicionen por debajo de aquellas variables insertadas usando el botón [Selección] (como en la anterior ilustración).
    También te verás obligado a utilizar “SetInSet” en un informe que conforme un listado de Actividades donde la búsqueda recaiga sobre una Persona o Cc.

    Nosotros hemos usado “SetInSet” para dejar que el ejecutor del informe obtenga un informe después de especificar un rango de Clasificaciones de Contacto separadas por comas. Por ejemplo, si el ejecutor del informe especificó "1,2", el informe mostrará Contactos con las Clasificaciones "1,2" y "1,2,3" pero omitirá aquellos Contactos con Clasificación "1" y aquellos con Clasificación "2".

    Una alternativa ofrecida para lo descrito anteriormente, es “SetInSet2”. Esta acción brindará flexibilidad extra al correr la búsqueda de Clasificaciones de Contacto. Así:

    1,2
    Listará Contactos con Clasificaciones 1 y 2 (incluyendo Contactos con Clasificaciones 1, 2 y 3). Esto también es posible con “SetInSet”.

    1+2
    Listará Contactos con Clasificaciones 1 o 2.

    !2
    Listará todos los Contactos excepto aquellos con Clasificación 2.

    1,!2
    Listará Contactos con Clasificación 1 y excluirá aquellos con Clasificación 2 (es decir que los Contactos con Clasificaciones 1 y 2 no aparecerán). Notemos el uso de la coma antes del signo de exclamación.

    !1,!2
    Listará todos los Contactos excepto aquellos con Clasificación 1 o 2 o ambas. Nuevamente, notemos el uso de la coma.

    !(1,2)
    Listará todos los Contactos excepto aquellos con Clasificaciones 1 y 2 (es decir que los Contactos con Clasificaciones 1, 2 y 3 no aparecerán).

    !1+2
    Listará Contactos sin la Clasificación 1 y aquellos con la Clasificación 2 (es decir que los Contactos con Clasificación 1 y 2 aparecerán).

    (1,2)+(3,4)
    Listará Contactos con Clasificaciones 1 y 2 y aquellos con Clasificaciones 3 y 4.
    Por favor, haz clic en los vínculos correspondientes para conocer más sobre:

    Agregar un Registro Secundario

    Es posible especificar un registro secundario para tus informes. Por ejemplo, tal vez resulte ventajoso obtener una lista de las Facturas de Clientes en sumatoria al Código, Nombre, Categoría y Teléfono del Contacto. El procedimiento es el siguiente:
    1. Ve a la ventana de Definición de tu informe (registro Informes) y abre la solapa ‘Data’. Haz clic en el botón [Registro] y rellena correctamente los campos de la ventana de diálogo ‘Registro’:

      Coloca 2 en el campo ‘Nivel’ para indicarle al sistema que esta vez te refieres a un registro secundario. De esta manera, el informe correrá la búsqueda de los Clientes en el registro Contactos (registro Nivel 1) y luego Facturas de esos Clientes (registro Nivel 2). Por favor, revisa la página Registros para más detalles sobre los distintos Niveles.

    2. Haz clic en [OK] para cerrar la ventana de diálogo ‘Registro’ y comprobar que se ha agregado una nueva franja o línea en el área de vista preliminar:

      Es bueno recalcar que el registro Facturas es un registro donde se pueden invalidar registros individuales usando 'Invalidar' desde el menú Registro. Siempre que añadas un registro de esta naturaleza a tu diseño de informe, se agregará también de manera automática una franja o línea de tipo “Selección:” lo cual indica que se correrá una búsqueda automática para obviar registros individuales que estén invalidados. Si fuese necesario podrás eliminar esta franja presionando la tecla Espacio Atrás; o incluso podrías cambiarla para que tu informe solo liste registros individuales que sí están invalidados.
    Luego de agregar un registro secundario, por favor haz clic en los vínculos correspondientes para conocer más sobre:

    - Cómo enlazar el Reg. Primario y el Reg. Secundario

    Cuando por primera vez especificas un registro secundario para tu informe, resulta que todo su contenido estará disponible en la selección ejecutable para tal registro. En este sentido, si el informe es mantenido tal cual es su diseño, éste respetará este modelo:
    Cliente 1
    Todas las Factuas en la Base de Datos
    Cliente 2
    Todas las Facturas en la Base de Datos
    Cliente 3
    Todas las Facturas en la Base de Datos
    Bien, luego de que cada Cliente figure en el informe, la selección ejecutable de Facturas (ej. todas ellas) también se mostrará. Por ende, el siguiente paso consiste en reducir la selección ejecutable de Facturas en función a solamente aquellas Facturas procesadas para el Cliente de la línea precedente (el Cliente ejecutable). Este sería el resultado al cual apuntamos:
    Cliente 1
    Primera Factura del Cliente 1
    Segunda Factura del Cliente 1
    Tercera Factura del Cliente 1
    Cliente 2
    Primera Factura del Cliente 2
    Segunda Factura del Cliente 2
    Tercera Factura del Cliente 2
    Cliente 3
    Primera Factura del Cliente 3
    Segunda Factura del Cliente 3
    Tercera Factura del Cliente 3
    Para lograr esto se necesita correr una búsqueda sobre Facturas en donde se indique un Código de Cliente igual al Código de Contacto del Cliente ejecutable. El procedimiento es el siguiente:
    1. Haz clic en la franja llamada “Registro: Facturas…” para indicarle al sistema que este el registro sobre el cual se ejecutará la búsqueda.

    2. Haz clic en el botón [Selección] para abrir la ventana de diálogo ‘Selección’. Rellena los datos correctamente como se muestra a continuación:

      Coloca "CustCode" en el campo ‘Nombre Campo’ (puedes utilizar Pegado Especial). Este dato evoca el nombre interno del campo Código de Cliente en el registro Facturas.

      Coloca "vrContact.Code" en el campo ‘Fórmula’.

      Esta última expresión se refiere al campo Código de Contacto en el registro Contactos. Como verás, la expresión consta de dos partes: la primer parte ("vrContact") se refiere al nombre de la variable que contiene el registro Contactos. Este nombre fue dado a la variable usando la ventan de diálogo ‘Registro’ (según se describe aquí). La segunda parte ("Code") se refiere al nombre interno del campo Código de Contacto en el registro Contactos. Ambas parte están separadas por un punto. Toma en cuanta que esta expresión respeta el uso de mayúsculas y minúsculas. En síntesis, la nomenclatura de "vrContact.Code" significa “Código de Contacto del registro individual actualmente en variable vrContact”.

      De manera conjunta, el Nombre Campo y la Fórmula indican que se correrá una búsqueda en función al campo Código de Cliente en el registros Facturas. El objetivo será hallar Facturas cuyos Códigos de Cliente sean igual al Código de Contacto del cliente en cuestión. Tal será el caso que solo Facturas que cumplan esta condición podrán aparecer en el informe.

      No habrá necesidad de ingresar una Etiqueta de Entrada, un Nombre Variable y un Pegar Registro ya que no será necesario colocar una variable en la ventana de especificación - ¡La búsqueda será automática! Si dejas en blanco el campo ‘Etiqueta Entrada’, expresarás que la dimensión del campo ‘v’ será colocada en cero automáticamente cuando cierres la ventana de diálogo ‘Selección’. Esto confirmará que ninguna variable se insertará en la ventana de especificación de tu informe.

    1. Haz clic en el botón [OK] para agregar una nueva franja de tipo “Selección:” la cual representa la búsqueda en el registro Facturas:

    Por favor, haz clic en los vínculos correspondientes para conocer más detalles sobre:

    - Imprimir Información desde el Registro Secundario

    Luego de especificar un registro secundario y enlazarlo al registro primario, necesitas determinar la información que se extraerá del registro Facturas (para nuestro ejemplo) y será tomada en cuenta en el informe. En nuestro ejemplo de una Lista de Contactos, el Número, la Fecha, la Fecha de Vencimiento y el Total serán mostrados en el informe sumándose a la información básica. El Código de Contacto estará inevitablemente presente para poder constatar que el informe ha sido producido correctamente.
    1. Ve a la solapa ‘Diseño’:

      Notarás cuatro secciones que han sido agregadas (automáticamente) al diseño del informe. Estás secciones te permiten incluir la información arrojada por el registro Facturas. En sumatoria, la solapa ‘Diseño’ constará de 10 secciones desplegadas en este orden:
      Encabezado
      Contacto Encabezado
      Contactos Antes
      Factura Encabezado
      Facturas Antes
      Facturas Después
      Factura Pie
      Contactos Después
      Contacto Pie
      Pie
      Las secciones ‘Contactos Antes’ y ‘Contactos Después’ aparecerán respectivamente para cada Cliente y por tanto conformarán una lista de Clientes. Las secciones ‘Factura Encabezado’ y ‘Factura Pie’ también aparecerán respectivamente para cada Cliente. Por su parte, las secciones ‘Facturas Antes’ y Facturas Después’ aparecerán una vez para cada Factura. Las demás secciones se mostrarán una sola vez por informe.

      Las secciones ‘Factura Encabezado’, ‘Factuas Antes’, ‘Facturas Después’ y ???Factura Pie’ permanecerán conectadas al registro Facturas. En ese sentido, puedes insertar campos del registro Facturas dentro de cualquiera de estas secciones – no puedes insertar campos de ningún otro registro.

    1. El siguiente paso consiste en agregar encabezados de columna para identificar la información concerniente a las Facturas. Para esto, haz clic en la sección ???Factura Encabezado’ (en el ejemplo - "Invoices vrInvoice Header") y luego utiliza el botón [Texto] según lo descrito aquí. Esta acción agregará adecuadamente los encabezados respectivos para las columnas:

      También puedes incrementar la Altura de la Línea según lo descrito aquí de tal forma que amplies los espacios dados a los encabezados de las columnas.
    1. Ahora debes agregar al informe los campos que contienen la información que deseas reflejar en el informe. Haz clic en la sección ‘Facturas Antes’ (en el ejemplo - "Invoices vrInvoice Before") para resaltar la franja. Luego, pulsa el botón [Campo] y realiza el procedimiento descrito aquí para así agregar los campos respectivos desde el registro Facturas a esta sección:

      "Sum1" se refiere al nombre interno del campo respectivo en el registro Facturas el cual contiene el Total de la Factura (excluyendo IVA). Esta cifra se encuentra justificada a la derecha.
    1. Ahora puedes agregar una cifra total para mostrar el Total de las Facturas para cada Cliente. Para esto, habrá que enmarcase en la sección ‘Factura Pie??? ya que esta información se muestra una vez por Cliente (la sección ‘Facturas Después’ se muestra una vez por Factura). Haz clic en la sección ‘Factura Pie’ (en el ejemplo "Invoices vrInvoice Footer") para resaltarla. Luego haz clic en el botón [Total] para abrir la ventana de diálogo ‘Total’:

      Campo
      Pegado Especial    Campos en el registro respectivo
      Selecciona el campo para el cual deseas mostrar el total. Abriendo la lista Pegado Especial podrás ver todos los campos del registro con el que estás trabajando (en este caso, el registro Facturas).
      Puedes ingresar también el número “1” aquí. Esto, en vez de configurar el total de un campo, hará que el total cuente el número de registros individuales expuestos en el informe. (Abrir aquí para más detalles de esto).

      Borrar en Impresión
      Tilda esta casilla cuando no desees que el total sea acumulativo (ej. cuando el total vuelva cada vez a cero las veces que ejecutes el informe). En el ejemplo, esta casilla deberá ser tildada cuando decidas mostrar totales para cada Cliente.

      Izquierda
      Especifica aquí en qué parte de la hoja ha de aparecer el total. Para esto, ingresa aquí un número (en píxeles) que representen la distancia desde el borde izquierdo de la página. Si no estás seguro del lugar en que debe aparecer el total, no modifiques la cifra por defecto de este campo. Para tu facilidad, podrás mover el total posteriormente arrastrándolo hacia un lugar de tu elección. Para alinear el total con el campo que arroja el total, debes asegurarte de ingresar aquí las mismas medidas (derecha e izquierda) que ingresaste para el campo.

      Derecha
      Especifica aquí en qué parte de la hoja ha de aparecer el total. Para esto, ingresa un número (en píxeles) que representan la distancia desde el borde derecho de la página.

      Estilo
      Pegado Especial    opción Estilos, módulo Sistema/registro Estilos del módulo Generador de Reportes
      Utiliza este campo para asignar una fuente y un estilo de fuente al total. Si no especificas un Estilo aquí, se utilizará la fuente y el tamaño de fuente tal cual aparecen en la opción Información de Empresa del módulo Sistema.

      Nombre Variable
      Sabiendo que la cifra total será calculada y expuesta en el informe, debes saber también que no se guardará en ningún lugar, por tanto no podrás usarla en ninguna otra parte del informe. En este sentido, si deseas usar la cifra en cualquier otra situación, necesitas copiarla a una variable. Para esto, debes especificar aquí una Variable existente. Debes asegurarte que el tipo de variable sea “decimal” o ???integer” dependiendo de la cifra a ser insertada (el total) – esta acción toma lugar en la solapa ‘Data’. (Abre aquí para conocer los tipos de variables).

      Condición
      Sujeto a la uso de la casilla ‘Solo en Impresión’ (abajo), cada registro individual mostrado en el informe contribuye al total. Bajo esta lógica, puedes utilizar este campo para especificar si es que un registro individual debe cumplir alguna condición para contribuir efectivamente al total. Por ejemplo, probablemente no deseas tener Facturas Invalidadas, No Aprobadas o Notas de Crédito como elementos que afectan el total. Por favor, observa el ejemplo mostrado en la página Imprimir Objetos tachados en rojo.

      Un caso en el que este campo sirve de mucha ayuda es en una lista de Facturas. Las Notas de Crédito serán mostradas en tal lista como valores positivos, de modo que si la lista tiene una sola cifra total sujeta a ninguna condición, todas la Notas de Crédito serán agregadas al valor total de la Factura perteneciente al Cliente – cuando en realidad deberían substraerse. Para evitar este problema, usa una condición a fin de calcular totales por separado para Facturas y Notas de Crédito; luego copia los dos totales dentro de variables como has aprendido. Finalmente, usa el botón [Fórmula] para substraer una cifra de la otra para mostrar una cifra verdaderamente total.

      Solo en Impresión
      Hasta este momento, el informe (en nuestro ejemplo) lista todas las Facturas pertenecientes al cada Cliente y por tanto cada Factura contribuye al total. Sin embargo, podrías decidir cambiar el informe para que algunas Facturas no sean mostradas. Por ejemplo, podrías ingresar una condición que estipule que una Factura solo se imprima cuando su valor sea mayor a 100.00. Para esto utilizarás el botón [Imprimir si] ubicado en la solapa ‘Data’. Esta casilla puede servir para determinar si las Facturas no mostradas en el informe (aquellas cuyo valor es menor a 100.00) han de contribuir al total. En el ejemplo que tendremos más adelante en esta página, el Cliente 001 tiene dos Facturas cuyo valor es mayor a 100.00. El valor total de estas dos Facturas es 1109.00. El total mostrado en el informe (en relación al Cliente 001) será 1109.00 cuando hayas tildado esta casilla; y será 1239.00 cuando no tildes esta casilla.

      Doble Tachado
      Puedes hacer que el total aparezca tachado con una línea roja dependiendo de la condición que ingreses en este campo. Esto se describe más detalladamente en esta página.

      Justificación
      Utiliza estas alternativas para determinar si la cifra total habrá de estar justificada a la derecha o a la izquierda. Por lo general, las cifras se justifican al lado derecho.

      Decimales
      Si deseas redondear el total usando una cantidad x de decimales, ingresa esa cantidad aquí.

      Cuando pulses el botón [OK], el total se colocará apropiadamente en el informe. Si te fijas en la ilustración, también hemos agregado un texto aclarativo y una Línea vacía (en la cual hemos tildado la casilla ‘Imprimir Siempre’) abajo del total:

      La ilustración que ves muestra el informe resultante. Verás que hemos agregado un total acumulado para ilustrar el efecto de no usar la casilla ‘Borrar en Impresión’ (ventana de diálogo ‘Total’):

    Para más información sobre totales y separadores, por favor revisa la página Separadores , Subtotales y Totales. Por favor, haz clic en los vínculos correspondientes para conocer más sobre:

    - Imprimir Objetos tachados en rojo

    Cualquier objeto de texto, campo o fórmula puede ser tachado con una línea roja o un doble tachado dependiendo de alguna condición en particular. Por ejemplo, si la lista de Facturas incluye Facturas Invalidadas, probablemente querrás que tales sean tachadas para que se las pueda distinguir fácilmente.

    Cuando agregues un objeto a la solapa ‘Diseño’, podrás especificar una condición para el doble tachado:

    En el anterior ejemplo, el Número único de identificación de cada Factura Invalidada aparecerá con un doble tachado.

    La condición para el Doble Tachado es "vrInvoice.Invalid == 1" la cual se refiere al estado “invalidado” en el registro Facturas. Como ves, estas expresión consta de dos partes: la primer parte ("vrInvoice") se refiere al nombre de la variable que contiene al registro Facturas. Este nombre fue dado a la variable en la ventana de diálogo ‘Registro’ según se describió aquí. La segunda parte ("Invalid") se refiere al nombre interno del estado “invalidado” en el registro Facturas. Notemos que ambas partes están separadas por un punto. Básicamente, esta nomenclatura expresa “estado Invalidación de la factura actualmente en la variable vrInvoice " – ej. "Si es que la Factura actual está Invalidada”.

    El campo que se refiere a “Invalidado” puede contener dos valores: será 0 cuando la Factura no esté invalidada; o será 1 cuando la factura haya sido invalidada. Este campo está tipificado como “boolean” de modo que no hay necesidad de poner la condición de prueba dentro de comillas. El signo == significa "igual a ". Por tanto, toda la expresión "vrInvoice.Invalid == 1" indica que si vrInvoice.Invalid es igual a 1 (es decir, si la Factura actual está invalidada), el Número de Factura llevará un Doble Tachado. Debes asegurarte de no confundir == con = (para este caso son dos cosas diferentes). Para interiorizarte sobre la sintaxis que deberías utilizar al especificar una Condición para Doble Tachado, por favor revisa la página sobre Sintaxis.

    Cabe hacer notar que aunque la Condición para Doble Tachado se aplica a un campo que está en el mismo registro que el campo que ha de mostrarse, aún así deberás utilizar toda la expresión vrInvoice.Invalid – sin omisiones.

    También puedes incluir una variable en una Condición para Doble Tachado. Por ejemplo, si estás usando una variable para mantener un total en ejecución y decides colocar un doble tachado cuando el valor de esa variable caiga por debajo de cero, la Condición para Doble Tachado será:

    TotalVar < 0
    Las variables se describen en más detalle aquí.

    En el informe ilustrado a continuación, hemos agregado la Condición de Doble Tachado a los cinco campos de la sección ‘Facturas Antes’:

    Notemos que la Factura Invalidada está incluida en el total. Si el total no incluyese Facturas Invalidadas, deberás agregar la Condición al total:

    Esta Condición emplea la misma sintaxis que la Condición Doble Tachado (descrita anteriormente). Aquí se indica que solamente Facturas que no hayan sido Invalidadas podrán contribuir al total. Tú puedes especificar una condición más compleja como la siguiente:
    (vrInvoice.Invalid==0) y (vrInvoice.PayDeal!="CN") y (vrInvoice.OKFlag==1)
    Esta condición indica que única y exclusivamente las Facturas que contribuyan al total, serán aquellas que no hayan sido invalidadas; aquellas que no representen Notas de Crédito y aquellas que hayan sido aprobadas. Cada parte de la condición, como verás, está dentro de corchetes y las tres partes están separadas por un “y”. Esto quiere decir que se debe respetar las tres partes de la condición para tener derecho a influir en el total del informe (es decir, la Factura no deberá estar invalidada y no deberá representar una Nota de Crédito). PayDeal se refiere al nombre interno del campo ‘Térm. Pago’ en las Facturas; OKFlag se refiere al nombre interno de la casilla OK. PayDeal es un campo tipificado como “string” de modo que el valor a ser probado/testeado está dentro de comillas. La combinación de signos != significa "no es igual a ".

    Por favor, haz clic aquí para detalles sobre cómo omitir contenido del Registro Primario cuando no hay nada en el Registro Secundario.

    - Falta de contenido en Registro Primario - Reg. Secundario

    Los registros individuales provenientes del Registro Primario se incluyen en el informe aún cuando no existan registros individuales pertinentes en el Registro Secundario. En el ejemplo, un Contacto será incluido en el informe aún cuando su registro individual represente un Cliente que no tiene Facturas. Esto resulta adecuado pues el informe es una lista de todos los Clientes en el registro Contactos; pero en otras circunstancias podrías decidir omitir estos Clientes del informe. En ese sentido, debes realizar el siguiente procedimiento:
    1. Estando en la ventana de definición de tu informe, abre la solapa ‘Diseño’.

    2. Para nuestro ejemplo, las secciones ‘Contactos Antes’ y ‘Contactos Después’ aparecen para cada Cliente. El objetivo es omitir un Cliente que no tenga Facturas para lo cual deberás evitar que estas secciones aparezcan en el informe. Haz doble clic en cada una de estas dos secciones. Así se abrirá la casilla de diálogo ‘Sección’:

    3. Tilda la casilla ‘Omitir si loops internos están vacíos’ y luego haz clic en [OK].
    De esta manera y en lo posterior, el informe contendrá solamente Clientes que tengan al menos una Factura.

    Por favor, haz clic en los vínculos correspondientes para conocer más sobre:


    Usar Variables y Fórmulas

    En gran parte, la fortaleza y flexibilidad del módulo Generador de Reportes se basa en el uso de variables. Hasta aquí, ya has insertado ciertas variables en la ventana de especificación correspondiente a tu informe. Ya sabes que las variables sirven para ir almacenando criterios de búsqueda. También, has utilizado el tipo de variable que contiene al registro individual ejecutable para correr la búsqueda de los registros individuales vinculados en el registro secundario. A todo esto, tienes la posibilidad de utilizar variables y fórmulas para incluir cálculos en tu informe de modo que puedas emplear estos elementos para contar el número de registros individuales aglutinados en tu informe. Podrás tener comparaciones porcentuales entre dos campos o podrás calcular los totales. En las páginas que vienen a continuación, hemos de ilustrar el uso de variables y fórmulas mediante la incorporación de un elemento que cuente los registros individuales en el informe. Esto se reflejará al final del informe para mostrar la cantidad de Clientes (en nuestro ejemplo) que conforman el listado.

    Por favor, abre las siguientes páginas para detalles sobre:


    - Declarar una Variable

    Lo primero que debes hacer es colocar un nombre, tipo y valor inicial para tu variable. Este procedimiento se denomina “declarar la variable” y debe ser ejecutado siempre al comenzar el diseño de tu informe. De esta manera, podrás utilizar tus variables permanentemente cuando especifiques tus criterios de impresión. La declaración de variables puede darse a través de varios métodos:
    • Utilizando el botón [Selección] tanto para declarar la variable como para insertarla en la ventana de especificación de tu informe.

    • Utilizando el botón [Registro] para declarar una variable y disponerla para la recepción de contenido proveniente del registro seleccionado.

    • Utilizando el botón [Variable] según lo descrito en la presente página. Este método se aplicará cuando no necesites insertar la variable en la ventana de especificación de tu informe.
    El procedimiento es el siguiente:
    1. Estando en la ventana de definición de tu informe, utiliza el botón [Variable] para abrir la ventana de diálogo ‘Variable’:

      Nombre Variable
      Ingresa un nombre para la variable incluyendo al menos un carácter alfa y no utilizando espacios o signos de puntuación de ninguna naturaleza. Puedes utilizar un guión bajo _ en lugar de espacios. Lo ideal es que el Nombre de la Variable refleje su propósito.

      Tipo
      Pegado Especial    Tipos de Variable
      Especifica aquí el tipo de variable que has de utilizar. Este dato determinará el tipo de información que será contenida dentro de la variable.

      Para nuestro ejemplo, la variable servirá para tener el resultado referente a la cantidad de registros individuales listados en el informe. Por lo tanto, la cifra a mostrar será siempre un número entero, lo cual significa que la variable deberá estar tipificada como “integer”.

      Ve a la página Tipos de Campo y Variable para observar una lista de los distintos tipos de variables.

      Valor Inicial
      Si deseas que se coloque un dato por defecto en tu variable, debes especificar tal cosa aquí.

    2. Luego de completar correctamente la ventana de diálogo ‘Variable’, haz clic en el botón [OK]. De esta manera, el área de vista preliminar mostrará una franja llamada "Variable:" que ha sido agregada y posicionada encima de la sección ‘Registro: Contactos’:

    Por favor, abre las siguientes páginas para conocer más sobre:

    - Asignar un Valor a una Variable

    En caso de variables que han de servir para contabilizar la cantidad de registros individuales listados en el informe o aquellas que calculan totales, sucede que su valor se irá acumulando el ejecutar el informe. Por esta razón, debes procurar incrementar estas variables en un momento sabio para así asegurar que mantengan su veracidad. En nuestro ejemplo, la variable contabilizará la cantidad de Clientes en el informe y por ende, el incremento de tal variable deberá estar enlazado al registro Contactos. De este modo, el valor de la variable deberá incrementarse sobre una escala de uno cada vez que se ejecuta el informe.
    1. Haz clic en la franja llamada "Registro: Contactos..." para indicarle al sistema que la acción recaerá sobre el registro Contactos (asegúrate de esto para que el código sea colocado en la sección correcta y evitar que la variable contenga un valor incorrecto).

    2. Haz clic en el botón [Cód.] para abrir la ventana de diálogo ‘Código’:

    3. Ingresa el código para incrementar el valor de la variable sobre una escala de uno cada vez que aparezca un Cliente en el informe. Esto se realizar especificando que el nuevo valor de la variable es igual al valor previo + uno. El signo = asignará el nuevo valor a la variable.

    4. Haz clic en el botón [OK] para agregar el código a la sección “Registro: Contactos…”:

      Por favor, para entender mejor la sintaxis que deberías usar en la ventana de diálogo ‘Código’, ve a la página referente a la Sintaxis.
    Abre las siguientes páginas para conocer más detalles sobre:

    - Imprimir una Variable

    Luego de declarar tu variable o variables habiendo asignado un valor respectivo, necesitas insertar la variable como parte de la diagramación de tu informe de tal modo que aparezca en el lugar correcto.
    1. Abre la solapa ‘Diseño’.

    2. En en el supuesto que tu variable ha de referirse a la cantidad de Clientes listados en tu informe Lista de Contactos, ésta deberá aparecer al final del informe – al pie. Bien, debes pulsar la sección ‘Pie’ del informe para resaltarla y luego pulsar el botón [Fórmula]. Así se abrirá la ventana de diálogo ‘Fórmula’:

    3. Ingresa el nombre de tu variable en el campo ‘Fórmula’ y luego especifica las coordinadas apropiadas para que la justificación (derecha o izquierda) aplique estas medidas.

    4. Cuando pulses [OK], la variable se posicionará en el lugar correcto dentro del Pie de tu informe. En la siguiente ilustración vemos también que hemos ingresado un texto aclarativo:

      El resultado es el siguiente:

    Por favor, abre las siguientes páginas para conocer más sobre:

    - Variables en la práctica - ejemplos

    1. Así como es posible contabilizar la cantidad de Clientes en el informe, también es posible contabilizar la cantidad total de Facturas o la cantidad de Facturas por cada Cliente. En nuestro ejemplo a continuación, hemos decidido contabilizar la cantidad de Facturas por Cliente:

      La variable viInvCount debe ser tipificada como “integer” (dentro de la franja "Variable:") al comienzo del informe.

      El valor de la variable viInvCount deberá incrementarse en base a una escala de uno cada vez que una Factura aparezca en el informe. Este código será por tanto insertado en la sección “Registro: Facturas…”:

      código: viInvCount=viInvCount+1
      Dado que pretendemos contabilizar la cantidad de Facturas por cada Cliente, necesitamos configurar la variable viInvCount para que sea cero cada vez que el Cliente ejecutable cambie. Por esta razón, hemos colocado el código en la sección “Registro: Contactos…”:
      código: viInvCount=0
      Cuando se muestre el primer Cliente, la variable viInvCount es colocada en cero – a medida que se vayan mostrando las Facturas del Cliente, la variable viInvCount seguirá contabilizando. La cifra resultante será mostrada después de la lista de Facturas – en la sección ‘Factura Pie’. Cuando se muestre el segundo Cliente, la variable viInvCount es colocada en cero otra vez y así consecutivamente.
    1. A estas alturas, el informe ya contiene cifras totales que indican el total de Facturas para cada Cliente. Ahora podemos agregar una variable para mostrar el total de Facturas de todo el informe. Para esto debemos utilizar una variable de modo que el total aparezca al final del Pie de Informe. El Pie del informe no está vinculado a ningún registro, por tanto no puede contener ningún campo. Debido a esto, no podemos utilizar el método que habíamos utilizado en la sección ‘Factura Pie’ (para colocar un total global en el pie delimitado al campo Suma 1); más bien, debemos usar uno de los siguientes métodos:

      1. Podemos declarar una nueva variable tipificada como “decimal” al comienzo del informe y citarla en el campo ‘Nombre Variable’ de la ventana de diálogo ‘Total’ – la cual controla la impresión del total de las Facturas para cada Cliente. Así, cada vez que una cifra total y global aparezca en el informe, ésta se copiará en la nueva variable de tipo “decimal”. Si esta variable ha de contener el total de las Facturas de todo el informe, no debes tildar la casilla ‘Borrar en Impresión’ (ventana de diálogo ‘Total’). Este método nos demandará la inserción de totales acumulados en todo el informe. Si no fuese el caso (es decir, si tildamos la casilla ‘Borrar en Impresión’ para mostrar totales), la nueva variable decimal contendrá el total de las Facturas solo del último Cliente. Si decidimos no mostrar ningún total, no se copiará ningún valor a la nueva variable decimal.

      2. Si decidimos no mostrar totales acumulados en el informe, habrá un método más flexible y más manual de declarar una nueva variable decimal el comienzo del informe – y también se la podrá incrementar para cada Factura a través del uso del código respectivo en la solapa ‘Data’. En el ejemplo ilustrado abajo hemos usado la variable vdInvTotal:

        Esta variable es una variable de tipo “decimal” puesto que los totales de las Facturas pueden contener cifras decimales.

        El código que se encarga de incrementar el valor de la variable vdInvTotal por el Total de cada Factura, se coloca en la sección “Registro: Facturas…” para que pueda ser usado una vez por Factura. El código es el siguiente:

        código: vdInvTotal=vdInvTotal + vrInvoice.Sum1
        La nomenclatura "vrInvoice.Sum1" usa la misma estructura que vrContact.Code (ver aquí lo cual significa “El Total de cada Factura actualmente en la variable vrInvoice, es decir, el Total de cada Factura actualmente mostrada en el informe. Toma en cuenta que estas nomenclaturas respetan el uso de mayúsculas y minúsculas.

        En la solapa ‘Diseño’, sabiendo que la variable es de tipo “decimal”, podemos especificar en la ventana de diálogo ‘Fórmula’ que el contenido de tal variable sea redondeado usando cierta cantidad de decimales. Para esto, activa el radio botón ‘Valor’ en el área Tipo Datos de la ventana de diálogo ‘Fórmula’ y además especifica cuántos decimales habrán de usarse (en el campo ‘Decimales’):

    Por favor, abre las siguientes páginas para conocer más sobre:

    - Usar el botón [Total] para contar registros individuales

    En los anteriores ejemplos, vimos cómo usar variables para contabilizar la cantidad de registros individuales contenidos en tu informe (cantidad de Clientes y cantidad de Facturas). Alternativamente, puedes hacer esto utilizando el botón [Total] el cual se encuentra en la solapa ‘Diseño’. El beneficio de utilizar el botón [Total] es la facilidad de habilitarlo para esta acción – no necesitas utilizar el botón [Cód.] para incrementar el valor de la variable. Es más, no necesitas usar la solapa ‘Data’ para aplicar este método. La desventaja es que existen ciertas restricciones en relación al lugar donde se posicionará la cifra (solo podrá aparecer en una sección vinculada a un Registro cuyos registros individuales están siendo contabilizados).

    Para utilizar el botón [Total] cuando quieras contabilizar registros individuales, realiza el siguiente procedimiento:

    1. Ve a la solapa ‘Diseño’.

    2. Haz clic en la sección donde ha de aparecer la cifra global o total. Si pretendes contabilizar la cantidad de Clientes, seguramente utilizarás la sección ???Contactos Pie’ – si necesitas contabilizar la cantidad de Facturas, seguramente utilizarás ‘Facturas Pie’. Toma en cuenta que no podrás colocar ningún total en el Pie del informe puesto que esta sección no está vinculada a ningún registro y por ende no puede contener totales calculados usando este método. Las variables deben ser determinados como ya hemos descrito anteriormente.

    3. Haz clic en el botón [Total] para abrir la ventana de diálogo ‘Total’. NO especifiques un campo en esta ventana sino más bien ingresa ???1” como Campo:

      El hecho de especificar “1” le indica al [Total] que contabilice los registros individuales arrojados por el registro correcto. Por ejemplo, la sección ‘Contactos Pie’ está conectada al registro Contactos, de modo que si colocas el total ahí, se contabilizará la cantidad de Contactos en el informe (Clientes, en nuestro ejemplo). Si colocas el total en la sección ‘Facturas Pie’, se contabilizará la cantidad de Facturas en el informe.

      Recuerda que la sección ‘Facturas Pie’ aparece una vez para cada Cliente. Por esta razón, podrás hacer uso de la casilla ‘Borrar en Impresión’ tal como se describió anteriormente. Si no deseas que el total sea acumulativo, tilda esta casilla (‘Borrar en Impresión’) para que se muestre una cantidad total de Facturas por Cliente. Si no tildas la casilla ‘Borrar en Impresión’, la cifra se acumulará de modo que la última vez que aparezca el Pie de factura, éste contendrá la cantidad total de Facturas en el informe (correspondientes a todos los Cliente).

    4. Tal como mencionamos al comienzo de este apartado, existen ciertas restricciones en relación al lugar donde se posicionará la cifra (solo puede aparecer en una sección vinculada al Registro cuyos registros individuales están siendo contabilizados). Si deseas utilizar la cifra total en alguna otra locación dentro del informe (ej. en el Pie del informe), debes especificar una variable tipificada como “integer” en el campo ‘Nombre Variable” cuando te encuentres en la ventana de diálogo ‘Total???. Deberás haber declarado la variable “integer” en la solapa ‘Data’. Luego, inserta la variable en el informe como es normal usando el botón [Fórmula].
    Por favor, abre las siguientes páginas para conocer más sobre:

    - Conjunción de 2 o más piezas de información

    Puedes confeccionar varias piezas de información dentro de una misma variable. Esta acción lleva el nombre de “concatenación” y sirve por ejemplo, dentro de la sección ‘Contactos Pie’, para mejorar la apariencia de tu informe en caso de haber anexado el Código o Nombre de Contacto al texto “Total por Cliente” que ya existe en la diagramación. Toma en cuenta que las diferentes piezas de información que pretendas confeccionar deberán ser de tipo “string”. Bien, utilizarás uno de los siguientes métodos:
    1. Primero, declara una variable tipificándola como “string” al comienzo del informe – usa la solapa ???Data’. Luego, pulsa el botón [Cód.] para agregar una franja de código la cual constituye el elemento de coyuntura de las distintas piezas de información e inserta el resultado de la variable ???string”. Abre la solapa ‘Diseño’ y pulsa el botón [Fórmula] para insertar la variable “string” dentro de la sección apropiada en el informe.

    2. Un método alternativo es pasar de largo de la solapa ‘Data’. Estando en la solapa ‘Diseño’, pulsa el botón [Fórmula] para unir las diferentes piezas de información e insertar el resultado en la sección apropiada del informe. Este segundo método es más veloz e implica una menor cantidad de variables en el informe. Sin embargo, al pasar por alto la solapa ‘Data’, corres el riesgo de desfavorecer la legibilidad y la edición futura de tu informe puesto que el código estará dividido entre las solapas ‘Data’ y ‘Diseño’.
    El ejemplo mostrado abajo ilustra el primer método. Hemos declarado una nueva variable “string” (vsCustText) al comienzo del informe y sus contenidos están modificados para cada Cliente:

    El código que une el texto estándar ("Total por Cliente ") y el Código de Contacto, se encuentra en la sección ???Registro: Contactos…”, por ende este será el código (de definición) que se utilizará para cada Contacto. Consecuentemente, cualquier otra cosa tipificada previamente en la variable vsCustText se perderá. El código es:
    código: vsCustText="Total por Cliente"&vrContact.Code
    El texto estándar que incluye un texto final está colocado en comas invertidas "". El texto estándar y el Código de Contacto están unidos usando el signo &. Tú puedes colocar un espacio a cualquier lado de este signo para mejorar la legibilidad del código:
    código: vsCustText="Total por Cliente" & vrContact.Code
    Estos espacios serán ignorados cuando el informe se imprima.

    Utiliza el botón [Fórmula] para insertar la variable en la sección ‘Facturas Pie’ – solapa ‘Diseño’ – tal cual describe la página que describe cómo Imprimir una Variable:

    Si decides no utilizar variables (es decir, si decides usar el segundo método descrito en esta página), simplemente haz clic en el botón [Fórmula] en la solapa ‘Diseño’ y escribe el código que une las diferentes piezas de información. Por ejemplo, la variable vsCustText y su franja de código podrían ser reemplazadas por esta fórmula:

    Al igual que el primer método, para unir varias piezas de información debes colocar un signo (&) en medio de cada elemento. El siguiente ejemplo nos muestra que la palabra “Cliente:” irá seguida del Código y Nombre de Contacto. Una coma y un espacio serán insertados entre el Código y el Nombre. La palabra “Cliente:”, la coma y el espacio son textos fijos y por lo tanto están dentro de comas invertidas:
    "Cliente: " & vrContact.Code & ", " & vrContact.Name
    Por favor, abre las siguientes páginas para conocer más sobre:

    - Conjunción de Strings y No-Strings

    Cuando empalmas varias piezas de información en una variable, cada una de ellas debe ser un string (renglón o línea). Si deseas unir un texto estándar y un campo o variable que no es de tipo “string”, estás obligado a convertir el campo o variable en un elemento de tipo “string”. Puedes hacer esto en el código o fórmula que une las piezas de información.

    Decimales e Integers
    Utiliza la nomenclatura ValToString para convertir “decimales” e “integers” en “strings”. A continuación vemos cómo un “decimal” es convertido en un “string” y luego es agregado a un texto estándar:

    vsInvText="Total: " & ValToString(vrInvoice.Sum1,2,",",".",0)
    En este otro ejemplo vemos cómo un “integer” es convertido en un “string” y luego es agregado a un texto estándar:
    vsInvCount="No. of Invoices: "&ValToString(viInvCount,23,",",".",0)
    La nomenclatura ValToString emplea cinco parámetros (dentro de corchetes y separados por comas). Así:
    1. El campo, la variable o número que deseas convertir en un ???string”

    2. El número que indica si el primer parámetro es un decimal o un integer. Este número deberá ser 2 cuando el primer parámetro sea un decimal y deberá ser 23 cuando el parámetro sea un integer. Si ingresas un número incorrecto, probablemente el primer parámetro no será convertido a un “string”. Si dejas el parámetro vacío, probablemente ocasiones que el sistema HansaWorld Enterprise se caiga cuando imprimas el informe.

    3. El separador de mil que deseas utilizar en el “string”. En ambos ejemplos, el separador de mil es una coma. Notemos que este separador de mil deberá estar dentro de comillas (“”) puesto que es efectivamente un “string”.

    4. El punto decimal que deseas utilizar en el “string”. En ambos ejemplos, el punto decimal es un punto. Notemos que este punto decimal debe estar dentro de comillas (“”) puesto que es efectivamente un “string”.

    5. Si el primer parámetro es un decimal, configura el quinto parámetro en cero (0) cuando desees que los números subsecuentes al punto decimal sean incluidos en el “string”. De lo contrario (si no deseas incluir los números subsecuentes el punto decimal), configura este quinto parámetro en 1.
    En la fórmula de ejemplo que tenemos abajo, el texto "Total para el Informe: " está empalmada con la variable decimal vdInvTotal (descrita en la página que contiene el Total de Facturas para todo el informe):

    Fechas
    Utiliza la nomeclatura DateToString para converter fechas en ???strings”:
    vsDateText="Fecha: " & DateToString(vdDateVariable, "DD/MM/YYYY")
    La nomenclatura DateToString emplea dos parámetros (entro de corchetes y separados por una coma). Así:
    1. El campo de fecha o variable que deseas convertir en un “string”

    2. Un “string” que especifica el formato de fecha a ser utilizado en el “string” final. En el ejemplo, hemos especificado que la fecha aparezca en la variable vsDateText ordenada según el Día, Mes y Año – usando dos dígitos para el Día y el Mes (los ceros que encabezan han de ser usados) – cuatro dígitos para el Año. Este parámetro debe estar dentro de comillas (“”) puesto que es un “string”.
    Horas
    Utiliza la nomenclatura TimeToString para convertir horas en “strings”:
    vsTimeText="Hora: " & TimeToString(vtTimeVariable)
    Esta nomenclatura emplea un parámetro. Debes especificar esto dentro de corchetes y luego el nombre del campo o variable que deseas convertir en un “string”.

    Largas
    Puedes agregar variables largas a “strings” sin conversion:

    vsLongText=" Text: " & vlLongVariable
    Por favor, haz clic en los vínculos correspondientes para conocer más sobre:

    - Testear

    La ilustración que tenemos más adelante nos muestra las variables y fórmulas descritas aquí – en sus respectivas posiciones dentro de la solapa ‘Diseño’:

    La sección ‘Reporte Pie’ contiene dos fórmulas:
    • Una es la que une el texto "Nro. de Clientes: " con la variable “integer” viCustCount (convertida a “string”); y

    • Otra es la que une el texto "Total del Informe: " con la variable “decimal” vdInvTotal (convertida a “string???).
    La sección ‘Factura Pie’ contiene una fórmula que empalma el texto "Nro. de Facturas: " y la variable “integer” viInvCount y la variable “string” vsCustText.

    Este es el informe resultante:

    Por favor, haz clic en los vínculos correspondientes para conocer más sobre:

    Imprimir Información desde Matrices

    Una matriz es el espacio cuadriculado que aparece en muchos registros. Por ejemplo, una Factura contiene una matriz que lista los Ítems de esa Factura. En este apartado vamos a ilustrar la impresión de información desde una matriz que lista Ítems de Facturas. Esto se reflejará en nuestro informe Lista de Contactos. El procedimiento es el siguiente:
    1. Ve a la ventana de definición de tu informe y abre la solapa ‘Data’.

    2. Haz clic en la franja llamada "Registro: Facturas..." para indicarle al sistema que has de utilizar el registro Facturas.

    3. Haz clic en el botón [Matriz] para abrir la ventana de diálogo ???Matriz de Filas’ en la que verás ciertos datos por defecto puesto que ya determinaste el registro afectado en el anterior paso:

      Registro/Bloque
      Pegado Especial    Registros en HansaWorld Enterprise
      Especifica aquí el registro “madre”, es decir, el registro al cual pertenece la matriz. Para nuestro ejemplo, la matriz de Ítems de Factura pertenece al registro Facturas de modo que es registro debe estar especificado aquí.

      Registro Madre
      Ingresa el nombre de la variable que contiene el registro individual ejecutable (es decir, el registro que ha de mostrarse en el informe).

      Nombre Variable
      Ingresa un nombre para la variable que contendrá el registro ejecutable de matriz – en nuestro ejemplo será el Ítem ejecutable de la Factura.

      Nivel
      La matriz deberá estar en un nivel menor (una escala) al nivel de registro madre.

      Condición
      Si es necesario, puedes especificar una condición que debe respetarse para que la matriz sea procesada (ej. que el informe corra la búsqueda sobre datos dentro de la matriz). Esta condición podría estar basada en el valor de la variable, de una casilla o de un radio botón en la ventana de especificación; o podría basarse en el valor de un campo en el registro madre. Si la condición está basada en el valor de un campo en el registro madre, entonces debes ingresar el nombre completo de ese campo incluyendo la variable del registro respectivo (ej. vrInvoice.Invalid==0, not Invalid==0).

    4. Haz clic en [OK] para guardar la matriz. De este modo, podrás ver que una franja llamada "Register Matriz:" ha sido agregada al área de vista preliminar – con un espacio de sangría respectivo para mostrar que está en la tercer nivel:

    Por favor, abre las siguientes páginas para conocer más sobre:

    - Cómo enlazar el Registro a su Matriz

    ¿Recuerdas que cuando vinculaste el registro primario y el registro secundario (ver aquí), fue necesario ejecutar una búsqueda en el registro secundario para hallar los registros individuales vinculados al registro ejecutable en el registro primario? (es decir, tuviste que buscar Facturas pertenecientes a cada Cliente). Ahora, cuando vincules un registro individual con su respectiva matriz, no habrá necesidad de ejecutar ninguna búsqueda. En nuestro ejemplo de lista de Contactos con Facturas, los Ítems correctos de las Facturas serán listados automáticamente. En otras palabras, bastará con especificar el registro madre en la casilla de diálogo ‘Filas de Matriz’ para establecer el vínculo.

    Por favor, abre las siguientes páginas para conocer más sobre:


    - Imprimir Información desde una Matriz

    Luego de agregar la matriz de ítems en las Facturas, debes especificar la información arrojada por la matriz que se verá reflejada en el informe. En nuestro ejemplo de Lista de Contactos con Facturas, vamos a imprimir el Código y Nombre de Ítem, el Precio Unitario, la Cantidad y la Suma.
    1. Ve a la solapa ‘Diseño’:

      Como ves, la solapa ‘Diseño’ ahora tiene cuatro nuevas secciones que sirven para insertar la información de la matriz de ítems en las Facturas. Estas secciones se agregan automáticamente.

      En sumatoria, las catorce secciones aparecerán en el siguiente orden:

      Encabezado
      Contacto Encabezado
      Contactos Antes
      Factura Encabezado
      Facturas Antes
      Ítem de Factura Encabezado
      Ítems de Factura Antes
      Ítems de Factura Después
      Ítem de Factura Pie
      Facturas Después
      Factura Pie
      Contactos Después
      Contacto Pie
      Pie
      Las secciones ‘Ítem de Factura Encabezado’ e ‘Ítem de Factura Pie’ aparecen una vez para cada una de las Facturas; las secciones ‘Ítems de Factura Antes’ e ‘Ítems de Factura Después’ aparecen una vez para cada uno de los Ítem de las Facturas.
    1. Agrega los encabezados de las columnas para aclarar la información de cada Ítem. Parar esto, resalta la sección ‘Ítem de Factura Encabezado’ y luego presiona el botón [Texto].

    2. Agrega los campos respectivos al informe. Para esto, resalta la sección ‘Ítems de Factura Antes’ y luego presiona el botón [Campo].

      Como ves, hemos trasladado el total de las Facturas desde la sección ‘Factura Encabezado’ hacia la sección ‘Facturas Después’. De este modo, el dato respectivo (el total) aparecerá en una posición más lógica (es decir, después de los Ítems de las Facturas). La sección ‘Facturas Después’ se muestra una vez por Factura y luego aparecen los Ítems de las Facturas.

      También decidimos utilizar el botón [Separador] para agregar una franja divisoria encima de la cifra total de Facturas.

      Este es el informe resultante:

    Por favor, haz clic aquí para conocer los detalles de filas de matriz de diversos tipos.

    - Filas de Matriz de diversos Tipos

    Algunas matrices (por ej. la matriz de ítems en las Facturas) pueden contener diferentes filas de diversos Tipos. Por ejemplo, si una Factura es una Nota de Crédito, habrá una fila que contiene la frase "Crédito de Factura " y el Número de la Factura a ser abonada. Si una Factura es un Anticipo, habrá una fila que donde se muestre la frase ???Anticipo’ y el Número de la Orden para la cual se requiere el depósito. Si una Factura ha sido conectada a un Anticipo, habrá una fila donde se muestre el Número de Anticipo y el monto pagado. Habrán posiblemente otras filas para el Encabezado, uno o más Subtotales y/o filas ocultas. Todas estas filas responden a un tipo diferente, es decir son distintas. Por ejemplo, una fila de una Factura estándar es una fila de Tipo 1 – las filas de una Nota de Crédito son de Tipo 3 – las filas del Anticipo son de Tipo 5 y las filas de Pagos son de Tipo 6. (Puedes encontrar una lista completa al final de esta página).

    Cuando agregas una matriz a tu informe, se insertan también automáticamente cuatro secciones en la solapa ‘Diseño’ (ver aquí). En nuestro ejemplo, las secciones ‘Ítem de Factura Encabezado’, ‘Ítem de Factura Pie’, ‘Ítems de Factura Antes’ e ‘Ítems de Factura Después’ han sido agregadas a la solapa ‘Diseño’. Cuando agregues campos a cualquiera de estas secciones, tales campos mostrarán información de cada una de las filas de las facturas – sin importar el Tipo. En algunos casos, los campos que coloques en estas secciones serán suficientes para mostrar la información de cada Tipo de fila. En el informe que vemos más adelante, la primera Factura es un Anticipo y la segunda Factura es una Factura completa desde donde se ha retirado el Monto Recibido. Cada Factura por tanto, contiene una fila de Tipo 5 y la información proveniente de esas filas aparecerá de manera apropiada:

    Sin embargo, los campos insertados en estas secciones no mostrarán la información proveniente de filas que responden a todos los Tipos. Por ejemplo, para una fila de una Nota de Crédito, el número de la Factura que está siendo abonada no será visible. Para una fila de un Recibo (de Tipo 6), el Número de Recibo no será visible:

    El Monto Recibido también aparece en la columna Suma, lo cual es algo confuso ya que es un pago parcial contra una factura – no es una cifra que contribuye al total de la Factura.

    De modo que en este ejemplo, los campos en las cuatro secciones de ítems de factura, no muestran información proveniente de filas de Tipo 6 – o no habrá una información satisfactoria. Para evitar este problema, podemos agregar una nueva sección exclusivamente para filas de Tipo 6. El procedimiento es el siguiente:

    1. Estando en la solapa ‘Diseño’, haz clic en el botón [Sección] para abrir la ventana de diálogo ‘Sección’:

    2. Completa la información en esta ventana de la siguiente manera:
      Tipo
      Selecciona el tipo de sección. Por lo general, es necesario agregar una nueva sección debido a que los campos en una sección existente no están correctos. Los campos están contenidos usualmente por la sección ‘…Antes’, así que activa el radio botón ‘Set Antes’.

      Set Nombre
      Pegado Especial    Registros y Matrices en el informe
      Utiliza Pegado Especial para asignar la sección que está editando a un de los registros recurrentes del informe.

      Tipo Fila
      Especifica aquí el Tipo de Fila.

    3. Haz clic en el botón [OK] para agregar la sección al informe. De esto modo verás que has editado aparecerá en el área de vista preliminar y se posicionará debajo de la sección ‘Ítems de Factura Antes’ (estándar):

      La nueva sección se imprimirá para filas de Tipo 6 mientras que la existente sección ‘Ítems de Factura Antes’ se imprimirá para filas de todos los Tipos. Las secciones se imprimirán en el siguiente orden:
      Encabezado
      Contacto Encabezado
      Contactos Antes
      Factura Encabezado
      Facturas Antes
      Ítem de Factura Encabezado
      Ítems de Factura Antes o Ítems de Factura Tipo 6 Antes
      Ítems de Factura Después
      Ítem de Factura Pie
      Facturas Después
      Factura Pie
      Contactos Después
      Contacto Pie
      Pie
    1. Agrega los campos pertinentes a la nueva fila como es normal.

      En este ejemplo, hemos agregado un texto (“Nro. Recibo”) y un campo para que muestren el Número de Recibo. Además, dependiendo de la Tipo de Fila, podríamos asignar un Estilo diferente a estos campos (tal vez para las filas del Encabezado o Subtotal).

      Este sera el informe resultante:

    Los distintos Tipos de Fila son los siguientes:

    Facturas

    1    Estándar
    3    Nota de Crédito (Usa el campo OrdRow para mostrar el Número de Factura de la Factura que está siendo abonada)
    4    Interés
    5    Anticipo
    6    Recibo (usa el campo CUPNr para mostrar el Número de Recibo)
    9    Subtotal
    10    Fila Oculta
    11    Filas marcadas con K en Factura Corregidas
    13    Venta de Voucher de Regalos (Facturas Touch-Screen) (usa el campo GCNr para mostrar el Número de Certificado de Regalo)
    14    Recepción de Voucher de Regalo (Facturas Touch-Screen) (usa el campo GCNr para mostrar el Número de Certificado de Regalo)
    15    Pagos al Contado (Facturas Touch-Screen)
    16    Pagos con Tarjeta de Crédito (Facturas Touch-Screen)
    17    Encabezado

    En la mayoría de los casos, puedes utilizar el campo ???Espec.’ respectivo para poder incluir algún texto editable dentro de la fila (ej. comentario de un Anticipo o comentario del Subtotal, etc.). Los Tipos de Fila 9, 10 y 17 también sirven en Cotizaciones y Órdenes de Venta – los Tipos 9 y 17 en Presupuestos de Proyecto. El Tipo de Fila 6 sirve también en Facturas de Compra (usando el campo PrepayNr para mostrar el Núemro de Recibo y usando el campo PrepayAmount para mostrar el Monto Recibido).

    Recibos

    1    Estándar
    5    Acuerdo de Descuento
    6    Anulación
    7    Cobros Bancarios

    Pagos

    1    Estándar
    5    Acuerdo de Descuento
    7    Cobros Bancarios

    Por favor, abre los vínculos correspondientes para conocer más sobre:


    Vincular información desde otros Registros

    Habrá ocasiones en que el registro que has seleccionado no contendrá toda la información que deseas imprimir. Cuando esto suceda, puedes enlazar otro registro u opción para extraer desde allí la información que necesitas. Por ejemplo, cada registro individual de Contacto tiene un campo para el código de la Categoría de Cliente, sin embargo no tiene un campo para el nombre de Categoría de Cliente. Si deseas imprimir una lista de Clientes que incluya los nombre de las Categorías, deberás establecer un vínculo hacia la opción Categorías Cliente (módulo Ventas). Lo propio pasará para Facturas – cada ítem de factura incluye el Precio Unitario y la Suma a cobrarse al Cliente. En este sentido, tendrás la posibilidad de vincular tu informe al registro Ítems para extraer el Precio Base del Ítem de modo que el precio estándar de venta de los Ítems (su Precio Base) pueda ser comparado con el precio real de venta (el Precio Unitario en una Factura). El procedimiento es el siguiente:
    1. Ve a la ventana de definición de tu informe y permanece en la solapa ‘Data’.

    2. Selecciona el registro desde el cual establecerás el vínculo. Por ejemplo, para imprimir una lista de Clientes en donde se incluye Nombres de Categorías, deberás establecer un vínculo desde el registro Contactos hacia la opción ‘Categorías Cliente’. Pues bien, haz clic en la franja llamada "Registro: Contactos...".

    3. Pulsa el botón [Buscar] para abrir la ventana de diálogo ‘Registro de Búsqueda’:

      Registro
      Pegado Especial    Registros en HansaWorld Enterprise
      Especifica aquí el registro en función al cual deseas establecer el vínculo.

      Toma en cuenta que el registro desde donde estás estableciendo el vínculo y el registro hacia el cual estás estableciendo el vínculo deben tener un campo en común. En nuestro ejemplo, el código Categoría de Cliente es común para el registro Contactos y para la opción ‘Categorías Cliente’.

      El nexo será por lo general “desde muchos a uno??? (o “de uno-a-uno”). Sólo existirá un registro al final del vínculo. En nuestro ejemplo, varios Clientes pueden tener el mismo código Categoría de Cliente, en cambio solo una Categoría de Cliente puede tener ese mismo código. Es decir que en este caso habrá solamente una Categoría de Cliente al final del vínculo o nexo.

      Índice
      Pegado Especial    Índices en el registro seleccionado
      Utiliza este campo para especificar el tipo de orden a ser usado en el registro hacia el cual estás vinculando la información.

      Es mucho mejor si ordenas este registro según el campo que existe en común (ver más atrás).

      Nombre Variable
      Ingresa aquí un nombre para la variable que contendrá al registro individual vinculado (en nuestro ejemplo, este registro se refiere a la opción ‘Categorías Cliente’).

      dónde, está
      Utiliza estos campos para confeccionar la expresión de búsqueda que hallará el registro resultante de tal búsqueda. ‘Dónde’ deberá contener el campo (en el registro vinculado) en función al cual se correrá la búsqueda; mientras que el campo ‘está’ deberá contener aquello que se buscará en tal campo.

      Los campos llamados ‘dónde’ contienen una lista de campos referentes a un registro particular o en una opción específica (en este caso, la opción ‘Categorías Cliente’). Esta lista no puede ser modificada y está en dependencia con el Índice que has especificado en el campo ‘Índice’. Dado el caso que desees correr una búsqueda en un campo que no está en la lista que hemos mencionado, necesitarás cambiar primeramente el Índice. En este ejemplo, puedes correr la búsqueda en el campo ‘Código’ de la opción ‘Categorías Cliente’.

      Debes utilizar los campos ‘está’ para especificar aquello que estás buscando (en este caso, el código para la Categoría de Cliente). Como verás en la ilustración a continuación, el primero de los campos llamados ‘está’ hemos cargado una expresión que se refiere a esta información: "vrContact.CustCat".

      Notemos que aunque el campo para el código de la Categoría Cliente está en el campo común, los nombres internos para este campo (en el registro Contactos y en la opción ‘Categorías Cliente’) no son iguales: En el registro Contactos, el código es "CustCat" y en la opción ‘Categorías Cliente’ el código es "Code".

      Buscar
      Como mencionamos previamente en esta página (campo ‘Registro???), el vínculo establecido será generalmente del tipo "varios-a-uno " (o "uno-a-uno") – habrá solo un registro individual al final del vínculo. Sin embargo, podría darse el caso que sea un vínculo del tipo "varios-a-varios " en cuyo caso habrá varios registros individuales al final del vínculo. Si es así, puedes utilizar los radio botones ‘Primero’ o ‘Último’ para determinar si el vínculo se hará con el primero de los registros o con el último.
      Cuando presiones [OK], aparecerá una franja que inicia diciendo "Lookup, Register:…" en la ventana de edición de tu informe:

      Habiendo determinado que la búsqueda es en la sección de Clientes, se ejecutará efectivamente una búsqueda (una vez) para cada Cliente listado en el informe.
    1. Luego de esto, podrás especificar cuál es la información proveniente del registro vinculado que ha de mostrarse. Toma en cuenta que este trabajo requiere el uso de variables debido a que el registro vinculado no posee secciones propias (en la solapa ‘Diseño’). Las secciones que ya estén en el informe no podrán aceptar campos provenientes del registro sujeto al vínculo o nexo. En el ejemplo, el Encabezado de Contacto, las secciones Antes y Después, solo podrán aceptar campos provenientes del registro Contactos no de la Categoría de Cliente.

      Abre la solapa ‘Diseño’ y haz clic en la sección donde deseas insertar la variable. Luego, haz clic en el botón [Fórmula] para abrir la casilla de diálogo ‘Fórmula’ e ingresa el nombre de la variable, las coordinadas (derecha – izquierda) y elige una alternativa de justificación.

      En este ejemplo, la expresión "vrCategory.Comment" evoca al nombre de la Categoría de Cliente (hará que se muestre en el informe). "vrCategory" evoca al nombre de la variable que contiene la Categoría de Cliente (según lo especificado en la casilla de diálogo ‘Registro de Búsqueda’) y la expresión "Comment" evoca al nombre interno del campo ???Nombre de Categoría de Cliente” proveniente de la opción ‘Categorías Cliente’.

    2. Cuando pulses el botón [OK], la fórmula se colocará en la posición correcta (sección Antes Contacto – en nuestro ejemplo):

      Este será el resultado

    Por favor, haz clic aquí para más detalles sobre cómo extraer información de otros registros para utilizarla en cálculos.

    - Registros Vinculados y Cálculos

    En este segundo ejemplo veremos cómo establecer un vínculo en función al registro Ítems. Así, podremos correr la búsqueda del Precio Base de cada Ítem mencionado en una Factura y obtener una comparación de los precios estándar de ventas (su Precio Base) frente el precio de venta real (Precio Unitario en la Factura). El procedimiento es el siguiente:
    1. Ve a la ventana de definición de tu informe y permanece en la solapa ‘Data???.

    2. Selecciona el registro desde el cual establecerás el vínculo (en este caso, el vínculo estará en función a la matriz de Facturas y el registro Ítems), pulsando sobre la franja que dice "Matriz Registro: Facturas...".

    3. Haz clic en el botón [Buscar] y rellena correctamente la ventana ‘Registro de Búsqueda’ como en la siguiente ilustración:

      "Code" evoca al nombre interno del campo ‘Cód.’ en el registro Ítems. Es así debido a que el campo ???Cód.’ es común a la matriz de las Facturas y al registro Ítems (Nota: Deberás organizar el registro Ítems según el código de ítem).

      La expresión que cargues en los campos llamados ???donde’ y ‘está’, indica que se correrá una búsqueda para hallar el ítem cuyo código es igual al código en la fila correspondiente de la Factura vinculada. "vrInvRow" evoca a la variable que contiene la fila respectiva en la Factura; "ArtCode" evoca al nombre interno de la columna ‘Ítem’ en la Factura.

    4. De esta manera, cuando pulses [OK], se colocará una nueva franja que inicia diciendo "Lookup, Register:…." dentro de la sección Matriz Factura en la ventana de edición:

    1. El siguiente paso es agregar la fórmula que calculará la diferencia entre el Precio Base y el Precio Unitario en una Factura. El resultado de tal formula deberá mostrarse al lado del Total de la Factura. Así que, ve a la solapa ‘Diseño’ y haz clic en la sección Matriz Factura Antes.

    2. Haz clic en el botón [Fórmula] e ingresa una fórmula tal como vemos a continuación:

      vrItem.UPrice1 es la expresión que evoca al Precio Base del ítem current, mientras que vrInvRow.Price es la expresión que evoca al Precio Unitario en la línea respectiva de la Factura. Como es de esperar, esas expresiones respetan el uso de mayúsculas y minúsculas. En este ejemplo, hemos asumido que todas las Facturas están en Moneda local, así que no hay necesidad de convertir vrInvRow.Price antes de realizar la comparación (vrInvRow.Price contiene una cifra en la Moneda de la Factura).

      En la ilustración, hemos colocado espacios a cada lado del carácter (-) para hacer que la fórmula sea más fácil de leer. Por tanto, los espacios son aceptables y serán ignorados al momento de ejecución de la fórmula. Los espacios en la variable y los nombres de las expresiones (ej. vrInvRow . Precio) no son legales y aparecerán como errores cuando presiones el botón [Check].

    3. La siguiente ilustración muestra la fórmula que debería ser usada para expresar la diferencia entre el Precio Base y el Precio Unitario (como porcentaje):

      Las dos formulas aparecen en la sección Matriz Factura Antes – como verás, se han colocado los encabezados respectivos de las columnas en la sección Encabezado Matriz, así el informe será fácil de leer:

      El resultado es el siguiente:

    Por favor, haz clic en los siguientes subtítulos para más detalles sobre:

    Creating a Report Generator Report - Page Breaks

    This page describes adding page breaks to the output of a Report Generator report.

    ---

    You can specify that each section of a report is to be printed on a separate page. For example, you might want to print each Customer and its Invoices on a separate page. Follow these steps:

    1. Return to the Report Definition record and go to the 'Layout' card.

    2. Double-click on the section that is to control the page breaking. This must be a section that is printed the appropriate number of times. For example, if a report is a list of Customers and you would like each Customer to be printed on its own page, you must double-click on a section that is printed once for each Customer. This means either the Contact Before section or the Contact After section. The 'Section' dialogue box opens:

      In the example, we double-clicked on the Contact After section. This is the second of the two sections that are printed for each Contact record, so we need the page break to occur after this section is printed. Choose the After Section option in the lower left-hand corner of the window, and click [OK].
    From now on, whenever the report is printed on paper, a page break will occur after each Customer is printed. When the report is printed to screen, the page break will have no effect.

    When the report is printed on paper, there will be a page break after the last Customer so that anything in the Report Footer section (e.g. overall report totals) will be printed on its own page.

    Placing the page break in the Contact Before section (choosing the Before Section option in the 'Section' dialogue box) would produce a similar report. The main difference would be that any overall Report Header and anything in the Contact Header section will be printed on its own page. There would then be a page break followed by the first Customer. There would not be a page break after the last Customer, so anything in the Report Footer section would be printed on the same page as the last Customer. The choice of where to place the page break in this example would therefore depend on what is in the overall Report Header and Report Footer sections and which one of these two sections is to be printed on its own page. (You can of course add more page breaks to ensure these two sections are each printed on their own page.)

    In both cases, you might want to move the column headings from the Contact Header section to a separate Line in the Contact Before section, so that they are printed on each new page as well. This will make it easy to identify each piece of Customer information.

    This completes the definition of the example Customer List report that has been built up throughout these web pages. In the following sections, we will illustrate some more features of the Report Generator using simple individual Report Definitions. Please follow the links below for more details about:

    ---

    Go back to:

    Filtrar registros individuales - Imprimir Si

    Habrá ocasiones en que tendrás que filtrar registros individuales para asegurar que aquellos registros irrelevantes no aparezcan en tu informe. Usualmente, puedes realizar esto a través de una búsqueda. Sin embargo, esto no será posible si la condición referente a incluir un registro individual en el informe no está en el registro en cuestión sino en un registro vinculado. Por ejemplo, supongamos que quieres producir un informe que lista las Facturas emitidas a Clientes con cierto límite de crédito. Existen dos formas de hacer esto:
    1. Haz las acciones necesarias para convertir al registro Contactos en tu registro principal, y al registro Facturas en tu registro secundario. Busca, en el registro Contactos, aquellos Clientes con cierto límite de crédito y luego lista las Facturas que pertenecen a tales Clientes. Si las cuatro secciones llamadas ‘Registro Contactos’ (solapa ‘Diseño’), están vacías, el informe final dará la impresión que el registro Facturas es el registro principal. La desventaja de este método es que las Facturas tendrán que imprimirse según el orden de los clientes.

    2. Haz las acciones necesarias para convertir al registro Facturas en tu registro primario. Utiliza el botón [Buscar] para verificar el límite de crédito de cada Cliente; utiliza también el botón [Imprimir Si] para mostrar la Factura en el informe si el límite de crédito satisface la condición del informe. Este método te permite ordenar las Facturas en cualquier orden. Sin embargo, el informe tardará más en ejecutarse puesto que se correrá una búsqueda para verificar el límite de crédito de los Clientes en cada Factura, incluso si un Cliente en particular ya pasó por esta revisión.

      Este método es asimismo ventajoso cuando listas registros individuales que son dependientes de una opción del sistema. Por ejemplo, eventualmente desearás listar Actividades con un atributo particular vinculado al Tipo de Actividad o Clase de Actividad.

    En esta página describiremos el segundo método. Los pasos son los siguientes:
    1. Crear un nuevo informe. Debes especificar en la solapa ‘Data’ que el registro Facturas será el registro primario. Utiliza el botón [Selección] para agregar cualquier criterio de búsqueda. En la solapa ‘Diseño’ debes diagramar el informe según tus requerimientos.

    2. Constatar que el informe liste solo Facturas emitidas a Clientes con cierto límite de crédito. Para esto, debes establecer un vínculo desde el registro Facturas hacia el registro Contactos, luego, debes agregar una condición “Imprimir Si” en el registro Facturas. De este modo, solo se permitirá la impresión de Facturas cuando los Clientes adscritos a tales Facturas cumplan la condición.

      Abrir la solapa ‘Data’. Debes pulsar la línea del informe que dice "Registro: Facturas..." y luego el botón [Buscar]. Completa la información respectiva en la ventana ‘Registro de Búsqueda’ según lo descrito en la página Vincular información desde otros Registros. Así:

      "Code" evoca al nombre interno del campo ‘Cód.’ en el registro Contactos. Es así porque el campo ‘Cód.’ es común al registro Facturas y al registro Contactos (por tanto, no olvides ordenar el registro Contactos según el código de contacto).

      La expresión especificada en los campos ‘dónde’ y ‘está’, indica que se correrá una búsqueda del Cliente cuyo código es igual al código de cliente en la Factura. "vrInvoice" evoca a la variable que contiene la Factura y; "CustCode" evoca al nombre interno del campo ‘Cliente’ en la Factura.

      La búsqueda se correrá una vez para cada Factura de la selección (es decir, una vez por cada Factura del registro Facturas o; una vez por cada Factura del rango).

    3. El siguiente paso es agregar una condición “Imprimir Si” al registro Facturas. Si la franja que dice "Register: Facturas..." no está resaltada, debes resaltarla y luego pulsar el botón [Imprimir Si] para abrir la ventana de diálogo ‘Imprimir Si’:

    4. Ingresa la condición como se muestra a continuación:

      "CreditLimit" evoca al nombre interno del campo ‘Límite Crédito Vtas.’ en el registro Contactos. Esta condición indica que si el Límite de Crédito del Cliente en cuestión, es mayor que o igual 10,000, entonces la Factura aparecerá en el informe. Esta condición se aplicará a cada Factura en la selección.

    5. Cuando pulses el botón [OK], se agregará una franja llamada "Imprimir Si:" la cual contendrá la condición apropiada:

      Para nuestro ejemplo, hemos incluido el Límite de Crédito del Cliente y vemos que el informe funciona perfectamente:

    Para detalles sobre la sintaxis para las condiciones de impresión, por favor revisa la página Sintaxis.

    Por favor, haz clic en los siguientes subtítulos para más detalles sobre:


    Agregar Casillas a la Ventana de Especificación

    Un campo de tipo “boolean” o una variable son elementos que tienen dos valores posibles: 1 y 0 (cero). En pantalla, los campos “boolean” y las variables se muestran en forma de casillas. Una casilla puede estar tildada o no tildada; cuando está tildada, el valor de la variable es 1. Básicamente, las variables y los campos “boolean” te permiten determinar las alternativas con respecto al si/no en la ventana de especificación de tu informe.

    Las casillas pueden iniciar dos tipos de búsqueda: Búsquedas inclusivas y Búsquedas exclusivas. Estas últimas se corren desde el punto específico donde todos los registros individuales de un registro particular, estarán listados; y tales registros individuales son omitidos del informe cuando son alcanzados por el criterio controlado por las casillas. Por ejemplo, para una Lista de Contactos puedes utilizar casillas con tal de omitir Contactos Cerrados, excluir Contactos que tienen algún campo vacío o excluir Proveedores. Por su parte, las Búsquedas inclusivas se corren desde un informe vacío y los registros individuales serán agregados a tal informe cuando cumplan con el criterio controlado por las casillas de la ventana de especificación. En este caso, podrías por ejemplo usar casillas para agregar Contactos Cerrados, incluir Contactos que tienen algún campo vacío o incluir Proveedores.

    Cuando colocas una casilla en la ventana de especificación de un informe (usando la solapa ‘Entrada’), también necesitarás agregar una franja que diga "Selección:" como ya hemos explicado (solapa ‘Data’). La franja "Selección:" que crees, deberá contener una fórmula que determine qué pasará cuando la casilla esté tildada. Esta fórmula constará de dos partes: un testeo para el valor de la casilla, y la búsqueda que consecuentemente se llevará a cabo. En una búsqueda exclusiva, estas dos partes están unidas por "o". En una búsqueda inclusiva, las dos partes de la fórmula estarán unidas por "y".

    Por favor, haz clic en los siguientes subtítulos para ver la descripción detallada sobre:


    - Búsquedas Exclusivas Controladas por las Casillas

    Las Búsquedas Exclusivas inician desde el punto específico en donde todos los registros individuales de un registro particular, estarán listados en el informe; y tales registros individuales serán omitidos del informe cuando sean alcanzados por el criterio controlado por las casillas. En este apartado vamos a ilustrar una búsqueda exclusiva en una Lista de Contactos. Lo que haremos es agregar una casilla que excluya todos aquellos Contactos con número de fax. El procedimiento es el siguiente:
    1. Crea un nuevo informe. Luego, estando en la solapa ‘Data’, especifica que el registro Contactos ha de ser tu registro primario. Ve a la solapa ‘Diseño’ y diseña la diagramación de tu informe (según tus requerimientos).

    2. Pasa a la solapa ‘Entrada’ y haz clic en el botón [Casilla] para abrir la ventana de diálogo ‘Casilla’:

      Etiqueta
      Ingresa el nombre de la casilla. Este dato aparecerá idéntico en la ventana de especificación. Procura colocar un nombre que indique el propósito de la casilla para que las persona que ejecute el informe sepa para qué sirve.

      Nombre Variable
      Ingresa un nombre para la variable “boolean” que está controlada por la casilla. Debes incluir al menos un carácter alfa en el nombre y no deberás usar espacios o signos de puntuación. Si quieres, puedes usar un guión bajo en lugar de un espacio. Lo ideal es que el nombre de la variable refleje su propósito.

      Técnicamente, la variable será puesta en 1 cuando la persona que ejecute el informe decida tildar la casilla. De lo contrario, el valor de la variable será 0.

      Tilde p/Defecto
      Tilda esta casilla para hacer que el valor de la variable se coloque en 1 por defecto. Así, la casilla aparecerá tildada cuando el usuario abra la ventana de especificación. Si no tildas esta casilla, el valor de la variable será 0 por defecto y la casilla no aparecerá tildada en la ventana de especificación.

      Ancho
      Este campo no se utiliza en casillas.

      h, v
      Estos dos campos sirven para especificar dónde deseas colocar las casilla en la ventana de especificación. Simplemente, debes ingresar las coordenadas (en píxeles) en función a la esquina superior izquierda de la casilla (no de la etiqueta): “h” (horizontal) se refiere a la distancia desde el borde izquierdo de la ventana de especificación; “v” (vertical) se refiere a la distancia desde el borde superior de la ventana de especificación. Verás que el sistema te ofrece coordenadas por defecto las cuales coinciden con el espacio vertical estándar usado por HansaWorld Enterprise – esto es 20 píxeles entre cada casilla.

    3. Luego de esto, haz clic en [OK] para cerrar la ventana ‘Casilla’ y ver cómo aparece la casilla que has creado en el área de edición:

      El hecho de crear una casilla de esta manera tiene el efecto de “declarar” la variable, de modo que no hay necesidad de hacerlo en la solapa ‘Data’.
    1. Hasta aquí, la casilla que has creado existe solamente en la ventana de especificación. Ahora, deberás especificar qué sucederá cuando el usuario la seleccione. Para nuestro ejemplo, si el usuario tilda la casilla, se debería correr una búsqueda de los Contactos que no tienen Número de Fax, por tanto se omitiría aquellos que sí tienen Número de Fax. Si el usuario no tilda la casilla, no debería correrse ninguna búsqueda sino que los todos los Contactos (con o sin número de fax) deberían aparecer en el informe.

      En este sentido, ve a la solapa ‘Data’ y haz clic sobre la franja llamada "Register: Contactos..." para así poder especificar que la búsqueda se ha de correr sobre el registro Contactos. Luego, haz clic el botón [Imprimir Si].

    2. Ingresa una fórmula (condición) en la ventana de diálogo ‘Imprimir Si’ tal como muestra la siguiente ilustración:

      La fórmula es:
      (cExclFax == 1 y blank(vrContact.Fax)) o (cExclFax == 0)
      Esto indica que si la casilla (cExclFax) está tildada, se correrá una búsqueda de Contactos que no tengan Número de Fax. De lo contrario, no se correrá ninguna búsqueda y no se tomará ninguna acción al respecto. En la expresión vrContact.Fax, la palabra "Fax" se refiere al nombre interno del campo ‘Fax’ en el registro individual de Contacto.

      “blank” es una función dentro de HansaWorld Enterprise la cual sirve para hallar aquellos registros individuales en donde el campo (de tipo “string”) especificado, está vacío. Puedes también utilizar el string_fieldname: == "" (ej. vrContact.Fax == ""). Puedes usar !blank, nonblank o un string_fieldname > "" para hallar aquellos registros individuales en donde un campo específico contiene un valor (cualquier valor). En caso de campos de tipo “decimal” o “integer”, toma en cuenta que “vacío” y “0” no son necesariamente lo mismo. Por su parte, num_fieldname == 0 hallará aquellos registros individuales donde un campo específico de tipo “decimal” o “integer” esté vacío o contenga el valor 0 ----- blank(num_fieldname) hallará solamente archivos donde el campo de tipo “decimal” o “integer” esté vacío, no aquellos que contengan el valor 0.

    3. Haz clic en el botón [OK] para agregar la selección deseada al la sección “Register: Contactos:…” en el área de edición de tu informe:

    1. Cuando el informe sea producido sin usar la nueva alternativa de especificación, éste listará solo Contactos que no tengan números de fax.

      Una posible mejora a la casilla ‘Omitir Contactos con Nro. Fax’ (la casilla que hemos creado), podría consistir en ofrecer alternativas para mostrar Solo Contactos con Nro. Fax, Solo Contactos sin Nro. Fax y Contactos con o sin Nro. Fax. Esto se logrará de manera más eficiente con el uso de radio botones (ver aquí).

    Cómo agregar una segunda Casilla
    Puedes agregar casillas extra a tu ventana de especificación, sin embargo éstas deben iniciar también búsquedas exclusivas (es decir, búsquedas para omitan registros individuales la selección inicial). Para nuestro ejemplo (Lista de Contactos), hemos de agregar una casilla que excluya Contactos con dirección de mail.
    1. En la solapa ‘Entrada’, agrega una nueva casilla (según lo descrito anteriormente en el paso 2).

    2. En la solapa ‘Data’, agrega una nueva condición de Impresión si (botón [Imprimir Si]) a la sección “Register: Contactos???” (según lo descrito anteriormente en los pasos 4 al 6).

      "eMail" se refiere al nombre interno del campo ‘E-mail’ en el registro individual de un Contacto.

      El resultado será dos franjas que dirán "Imprimir Si:". El orden en que se colocan estas franjas no importará.

      Cuando hay más de una franja llamada "Imprimir Si:", ésas son tratadas como si tuviesen el operador lógico "y". La búsqueda se correrá en función a los registros individuales que cumplan con la primera condición y que cumplan con la segunda condición. Otra forma de hacer esto es uniendo las dos franjas "Imprimir Si:":
      ((cExclFax == 0 o blank(vrContact.Fax)) o (cExclFax == 0)) y ((cExclEmail == 0 o blank(vrContact.eMail)) o (cExclEmail == 0))
      Notemos que cada condición está dentro de sus propios corchetes. Las dos partes de una única casilla con condición exclusiva están unidas por "o", mientras que las diversas condiciones de una casilla están unidas usando "y". Esto garantiza que se correrá una búsqueda de registros individuales que cumplan la condición uno y que cumplan la condición dos.

      De esta manera, la ventana de especificación contendrá dos alternativas que podrás utilizar de la siguiente forma:

      Ninguna opción tildada
      El informe listará todos los registros individuales del registro Contactos.

      Una opción tildada
      El informe listará registros individuales que no tengan Número de Fax o registros individuales que no tengan Dirección de E-mail (dependiendo de la opción seleccionada).

      Ambas opciones tildadas
      El informe listará solamente aquellos registros individuales que no tengan Número de Fax ni tampoco Dirección de E-mail.
    Para más detalles sobre la sintaxis que deberías usar al ingresar la fórmula (en la ventana de diálogo ‘Selección’), por favor ve la página Sintaxis.

    Por favor, haz clic en los siguientes subtítulos para ver la descripción detallada sobre:


    - Búsquedas Inclusivas Controladas por las Casillas

    Las Búsquedas Inclusivas inician desde el punto específico en que ningún registro individual en un registro particular, es listado en el informe; y tales registros individuales son agregados al informe siempre y cuando cumplan con el criterio controlado por las casillas. En este apartado vamos a ilustrar una búsqueda inclusiva en una Lista de Contactos. Lo que haremos es agregar una casilla que incluya Contactos que han sido marcados como ‘Clientes’. El procedimiento es el siguiente:
    1. Crea un nuevo informe. Luego, estando en la solapa ‘Data’, especifica que el registro Contactos ha de ser tu registro primario. Ve a la solapa ‘Diseño’ y diseña la diagramación de tu informe (según tus requerimientos).

    2. Pasa a la solapa ‘Entrada’ y haz clic en el botón [Casilla] para abrir la ventana ‘Casilla’ en donde deberás rellenar los campos con la información apropiada (ver aquí). Observa la siguiente ilustración:

    3. Después de cargar la información adecuada, haz clic el botón [OK] para insertar la casilla que has creado en el área de edición de tu informe.

    4. Pasa a la solapa ‘Data’ y haz clic sobre la franja llamada "Register: Contactos..." para especificar que la búsqueda se correrá sobre el registro Contactos. Después de esto, haz clic el botón [Imprimir Si].

    5. Ingresa una fórmula en la ventana de diálogo ‘Imprimir Si’ tal como muestra la siguiente ilustración:

      La fómula es:
      cInclCust == 1 y vrContact.CUType == 1
      Esto indica que si la casilla (cInclCust) está tildada, se correrá una búsqueda de Contactos que hayan sido marcados como Clientes. "CUType" se refiere al nombre interno de la casilla ???Cliente’ ubicada en el encabezado del registro individual de todos los Contactos. Si el usuario no tilda la casilla cInclCust, no se correrá ninguna búsqueda.

    6. Haz clic en el botón [OK] para agregar la Selección a la sección “Register: Contactos…” dentro del área de edición de tu informe:

    1. Cuando el informe sea producido sin usar la nueva alternativa de especificación, éste quedará vacío. Cuando el informe sea producido usando la nueva alternativa de especificación, éste listará solo aquellos registros individuales del registro Contactos que hayan sido marcados como Clientes.
    Cómo agregar una segunda Casilla
    Puedes agregar casillas extra a tu ventana de especificación, sin embargo éstas deben iniciar también búsquedas inclusivas (es decir, búsquedas que agreguen registros individuales a partir de la selección inicial). Para nuestro ejemplo (Lista de Contactos), hemos de agregar una casilla que incluya Contactos marcados como Proveedores.
    1. En la solapa ‘Entrada’, agrega una nueva casilla a la ventana de especificación (según lo descrito anteriormente en el paso 2).

    2. Tal cual se explicó en el apartado para búsquedas exclusivas, siempre que haya más de una franja del tipo “Imprimir Si:”, éstas serán tratadas como si tuviesen el operador lógico “y”. Se correrá una búsqueda de los registros individuales que cumplan con la primera condición y que cumplan con la segunda condición. Esto es aceptable cuando existen dos búsquedas exclusivas, pero no cuando hay dos búsquedas inclusivas. En este último caso, se deberá correr una búsqueda de los registros individuales que cumplan la condición uno o que cumplan la condición dos. Por lo tanto, no podrás agregar una nueva franja del tipo “Imprimir Si:” sino que deberás abrir la existente para modificarla.

      Ingresa esta fórmula:

      (cInclCust == 1 y vrContact.CUType == 1) o (cInclSupp == 1 y vrContact.VEType == 1)
      Notemos que cada casilla está dentro de sus propios corchetes. Las dos partes de una casilla única inclusiva están unidas por "y" mientras que las condiciones diversas de una casilla inclusiva están unidas usando "or". Esto garantiza que se correrá una búsqueda de los registros individuales que cumplan con la condición uno o que cumplan con la condición dos. "VEType" se refiere al nombre interno de la casilla ‘Proveedor’ en el encabezado de todos los registros individuales de Contactos.

      Finalmente, verás que la ventana de especificación ahora contendrá dos alternativas que podrás usar de dos formas:

      Ninguna opción tildada
      El informe no listará ningún registro individual del registro Contactos.

      Una opción tildada
      El informe listará Clientes o Proveedores (incluyendo aquellos que sea ambas cosas) dependiendo de la opción seleccionada.

      Ambas opciones tildadas
      El informe listará Clientes y Proveedores – incluyendo aquellos que sean ambas cosas.
    Para más detalles sobre las sintaxis que deberías usar al ingresar la fórmula (en ventana de diálogo ‘Selección’), por favor ve a la página Sintaxis.

    Por favor, haz clic en los siguientes subtítulos para ver la descripción detallada sobre:


    Impresión de Registros usando Condiciones de las Casillas

    Si estás diseñando un informe que simplemente listará los registros individuales provenientes de diversos registros, puedes hacer que el usuario que ejecuta el informe tenga alternativas (o casillas) para decidir qué registros serán tomados en cuenta en el informe. Por ejemplo, supongamos que estás diseñando una Lista de Contactos que conforma un listado del los registros individuales de cada Contacto según diversos registros del sistema como ser Facturas, Órdenes de Venta, Cotizaciones, Actividades, etc. El procedimiento es el siguiente:
    1. Crea un nuevo informe. Estando en la solapa ‘Data’, especifica que el registro Contactos ha de ser tu registro primario. Agrega las búsquedas que sean necesarias. Pasa a la solapa ‘Diseño’ y diseña la diagramación de tu informe (según tus requerimientos).

    2. Pasa a la solapa ‘Entrada’ y pulsa el botón [Casilla]. Agrega las casillas que sean necesarias para cada registro (según lo descrito en el paso 2 aquí). Una de las casillas para nuestro ejemplo es la siguiente:

    3. Luego de agregar las diferentes casillas, ésas serán visibles en el área de edición de la solapa ‘Entrada’:

    1. Para nuestro ejemplo, las casillas permitirán al usuario producir un informe que liste Facturas, Órdenes, Cotizaciones y/o Actividades para cada Cliente. La estructura del informe será la siguiente:
      Cliente 1
      Facturas del Cliente 1 (si se opta por esto)
      Órdenes del Cliente 1 (si se opta por esto)
      Cotizaciones del Cliente 1 (si se opta por esto)
      Actividades del Cliente 1 (si se opta por esto)
      Cliente 2
      Facturas del Cliente 2 (si se opta por esto)
      Órdenes de Cliente 2 (si se opta por esto)
      Cotizaciones del Cliente 2 (si se opta por esto)
      Actividades del Cliente 2 (si se opta por esto)
      Como podemos ver, los registros Facturas, Órdenes de Venta, Cotizaciones y Actividades serán todos registros secundarios. Ve ahora a la solapa ‘Data’ y agrega esto al informe (según describe la página Agregar un Registro Secundario) con la excepción de que en cada caso deberás también especificar una Condición:

      La Condición determina que las Facturas serán visible (para cada Cliente) sólo si cPrintInv es igual a 1 (es decir, si es que el usuario que produce el informe decidió tildar la casilla ‘Facturas’). Es más, el registro Facturas será procesado (el “bucle” correrá) solo si la casilla ???Facturas’ ha sido tildada. De modo que si la casilla ‘Facturas’ no ha sido tildada, el sistema no derrochará tiempo procesando un registro que no contribuye al resultado final del informe.

    2. Debes cerciorarte de conectar cada uno de los registros secundarios al registro primario (según los descrito en la página Cómo enlazar el Reg. Primario y el Reg. Secundario):

    1. Pasa a la solapa ‘Diseño’ y diseña la diagramación del cada uno de los registros secundarios según tus requerimientos.
    El informe de ejemplo que hemos elaborado, tomará en cuenta a cada Cliente. Si el usuario que ejecuta el informe tilda una de las casillas creadas, el informe listará también los registros individuales correspondientes (en el registro respectivo) para cada Cliente. Por ejemplo, si se ha tildado las casillas ‘Facturas’ y ‘Órdenes’, el informe mostrará las Facturas y las Órdenes de cada Cliente. Dado que las alternativas que regulan la cantidad de registros de sub-diario a ser listados están en forma de casillas, el usuario puede tildar la cantidad que desee o puede decidir no tildar ninguna. No obstante, las alternativas también pueden tener forma de radio botones en cuyo caso solo se podrá activar una de las alternativas.

    Por favor, haz clic en los siguientes subtítulos para ver la descripción detallada sobre:


    Agregar Radio Botones a la Ventana de Especificación

    Los Radio Botones son otra forma de ofrecer diferentes alternativas de filtro para tus informes. En este caso, a diferencia de las Casillas, el usuario solo podrá seleccionar una alternativa para producir el informe. Por ejemplo, se podrá usar radio botones cuando desees que la ventana de especificación tenga diferentes alternativas de ordenación u organización aplicables al informe. O también cuando desees tener algunas alternativas de búsqueda las cuales no son compatibles unas con otras.

    Los Radio Botones deben estar debidamente ordenados en la ventana de especificación. Te reiteramos que cuando un radio botón está activado, todos los demás estarán desactivados automáticamente. Un grupo de radio botones controla una sola variable. Cuando activas un radio botón, la variable se configura para usar un valor pre-definido. Consecuentemente, una fórmula debe testear el valor de la variable y ejecutar una búsqueda o una ordenación en función a ese valor.

    Por favor, haz clic en los siguientes subtítulos para la descripción detallada sobre:


    - Búsquedas Controladas por Radio Botones

    Puedes crear Radio Botones para ofrecer algunas alternativas de búsqueda que no son compatibles entre sí. En este apartado, diseñaremos una Lista de Contactos cuya ventana de especificación tendrá tres radio botones que ofrecerán filtrar el informe por: 1) Solo Contactos con Nro. Fax, 2) Solo Contactos sin Nro. Fax y 3) Contactos con o sin Nro. Fax. Estos tres radio botones controlarán una única variable llamada rFax. El valor de rFax variará dependiendo del radio botón activado y se correrá una búsqueda diferente para cada alternativa (dependiendo del valor de rFax). El procedimiento es el siguiente:
    1. Crea un nuevo informe. Estando en la solapa ‘Data’, especifica que el registro Contactos ha de ser tu registro primario. Ve a la solapa ‘Diseño’ y diseña la diagramación de tu informe (según tus requerimientos).

    2. Pasa a la solapa ‘Entrada’ y haz clic en botón [Radio Button] para abrir la ventana de diálogo ‘Radio Button’:

      Etiqueta
      Ingresa aquí el nombre que llevará el radio botón tratando de usar un nombre que indique claramente su propósito.

      Nombre Variable
      Ingresa un nombre para la variable que estará controlada por el radio botón. Deberás incluir al menos un carácter alfa y no deberás usar ningún espacio ni signos de puntuación. Podrás usar un guión bajo en lugar de espacios. Lo ideal es que el nombre de la variable refleje su propósito.

      La variable especificada será configurada según el valor indicado en el campo ‘Valor’ (más abajo) si el usuario produce el informe habiendo seleccionado la alternativa respectiva.

      Deberás usar el mismo nombre de la variable para cada radio botón de un mismo grupo. En otras palabras, un radio botón con un nombre de variable diferente pertenece por definición a otro grupo.

      Valor
      Debes especificar aquí el valor que será asignado a la variable cuando el radio botón sea activado. La variable es de tipo “integer” de modo que deberás ingresar un número entero. Lo habitual será asignar 0 (cero) a la variable en función al primer radio botón del grupo, 1 al segundo radio botón y así sucesivamente. Cerciórate de no asignar un mismo valor a más de un radio botón puesto que esto ocasionaría que el informe no se producido y/o falle cuando presiones el botón [Check].

      Por Defecto
      Tilda esta casilla para hacer que el radio botón creado aparezca activado por defecto en la ventana de especificación. Si decides no usar el radio botón por defecto, entonces se usará aquel cuyo valor es 0. Cerciórate de no elegir más de un radio botón por defecto (dentro de un mismo grupo) puesto que esto ocasionaría que el informe no sea producido y/o falle cuando presiones el botón [Check].

      Ancho
      Este campo no se utiliza en radio botones.

      h, v
      Estos dos campos sirven para especificar dónde será colocado el radio botón dentro de la ventana de especificación. Por tanto, debes ingresar las coordenadas (en píxeles) en función a la esquina superior izquierda del radio botón (no de la etiqueta): “h” (horizonal) se refiere a la distancia desde el borde izquierdo de la ventana de especificación; “v” se refiere a la distancia desde el borde superior. El sistema te ofrecerá coordenadas por defecto las cuales asumen el espacio vertical estándar de HansaWorld Enterprise (20 píxeles) entre cada radio botón.

    3. Haz clic en [OK] para cerrar la ventana y visualizar el radio botón que has creado en la ventana de edición de tu informe. Así es como se verá la ventana de especificación de la Lista de Contactos que estás diseñando:

      El hecho de incluir un radio botón de esta manera tiene el efecto de “declarar” la variable y por ende no habrá necesidad de hacerlo en la solapa ‘Data’.
    1. Repite los pasos 2 y 3 para agregar dos radio botones más referentes a: Solo Contactos sin Nro. Fax y Contactos con o sin Nro. Fax. Recuerda usar el mismo nombre de variable que usaste para el primer radio botón creado; si quieres puedes decidir que uno de ellos sea el radio botón por defecto (si no lo hiciste en el primer radio botón). Se recomienda que estos dos radio botones impongan un valor a la variable usando las cifras 1 y 2 respectivamente.

    1. Hasta aquí, hemos logrado que los radio botones sean visibles en la ventana de especificación, ahora deberás especificar qué sucederá cuando el usuario seleccione cada uno de ellos. En nuestro ejemplo, si el usuario selecciona el primer radio botón y por ende coloca el valor de la variable en 0 (cero), se deberá correr una búsqueda de los Contactos que no tienen Nro. de Fax. Si el usuario selecciona el segundo radio botón, el valor de la variable será 1 y se correrá una búsqueda de los Contactos que tengan un Nro. de Fax. De lo contrario, no habrá necesidad de correr ninguna búsqueda y el informe mostrará Contactos con y sin Nro. de Fax.

      Ve a la solapa ‘Data’ y haz clic sobre la franja llamada "Register: Contactos..." para especificar que la búsqueda se correrá sobre el registro Contactos. Luego, haz clic en el botón [Imprimir Si].

    2. Ingresa una fórmula en la ventana de diálogo ‘Imprimir Si’ (la fórmula visible en la siguiente ilustración – notarás la fórmula completa):

      La fórmula es:
      (rFax==0 y !blank(vrContact.Fax)) o (rFax==1 y blank(vrContact.Fax)) o (rFax==2)
      Esto indica que si la variable rFax está con valor 0, se correrá una búsqueda de los Contactos que tengan Nro. de Fax. Si la variable rFax está con valor 1, se correrá una búsqueda de los Contactos que no tengan Nro. de Fax. Si la variable rFax está con valor 2, no se realizará ninguna búsqueda. Cabe resaltar que es necesario testear esto para ver si rFax ha sido configurada en 2 (aunque el sistema no realice ningún proceso en este caso).
    1. Haz clic en el botón [OK] para agregar la Selección a la sección “Register: Contactos…” (Ver anterior ilustración).

      Así los tres radio botones estarán disponibles en la ventana de especificación para ser seleccionados y correr la búsqueda respectiva (radio botones 1 y 2).

    Por favor, haz clic en los siguientes subtítulos para ver la descripción detallada sobre:

    - Tipos de Ordenación Controlados por Radio Botones

    Cuando declaras un registro como tu registro primario o como tu registro secundario, debes usar el campo ‘Ordenar por’ en la ventana de diálogo ???Registro’. Así habrás especificado el orden en el que los registros individuales de tal registro serán listados en el informe (ver página Cómo especificar un Registro Primario). El campo ‘Ordenar por’ te permite organizar el informe según un solo campo; o usar uno de los índices pre-definidos. Esto quiere decir que el diseñador del informe tiene el control sobre el tipo de ordenación del informe, no la persona que ejecuta tal informe. Si deseas darle esta potestad a la persona que ejecuta el informe (si quieres ofrecer varias alternativas de ordenación), puedes hacerlo usando radio botones y variables.

    Según lo expuesto aquí, un grupo de radio botones determinan el valor de una variable de tipo “integer”. Eventualmente, usarás el valor de la variable “integer” para determinar el valor de una variable “string”, la cual será el nombre de la alternativa de ordenación seleccionada por el usuario. Dicho esto, comprenderás que debes ingresar el nombre de la variable “string??? en el campo ‘Ordenar por’ de la ventana ‘Registro’. Esto garantizará que los registros individuales del informe estén listados en el orden correcto. El procedimiento es el siguiente:

    1. Crea un nuevo informe y ve a la solapa ‘Entrada’. Pulsa el botón [Radio Button] y agregar diferentes alternativas para los diferentes tipos de ordenación que deseas poder a disposición en la ventana de especificación.

      En nuestro ejemplo, se ofrece cuatro alternativas:

    1. El siguiente paso consiste en declarar la variable “string” que contendrá la alternativa para el tipo de orden seleccionado por el usuario. Pasa a la solapa ???Data’ y pulsa el botón [Variable] y rellena la ventana resultante usando la información apropiada. Así:

    2. Ahora, necesitas configurar el valor de la variable “string” dependiendo del radio botón seleccionado por el usuario. Para esto, estando en la solapa ‘Data’, pulsa el botón [Cód.] y ve agregando una franja de tipo “Código:..” para cada radio botón creado.

      Este es el primero:

      El código es:
      if (rSort == 0) luego empieza vsSort = "Code"; fin;
      Este código primero testea el valor de la variable rSort correspondiente a los radio botones. Si el valor es 0 (cero), entonces “Code” es asignado a la variable vsSort de tipo “string”. Dado que la variable vsSort es de tipo “string”, “Code” debe estar dentro de comas invertidas. “Code” se refiere al nombre de una alternativa de ordenación (para el informe), en este caso, especificando que los Contactos serán ordenados según su Código de Contacto. vsSort puede contener cualquier tipo válido de ordenación frente al registro en cuestión. En este sentido, para obtener un listado de los tipos de ordenación y para cerciorarte de la correcta escritura, abre la ventana ‘Registro’ y usa Pegado Especial desde el campo ‘Ordenar por’. Nota: Asegúrate de confundir == y =.

      Chequea la sintaxis que debes usar en el enunciado “if”:

      if (condición) luego empieza la acción consecutiva; fin;
      La condición debe estar dentro de corchetes e ir seguida de la frase "luego empieza ". La acción consecutiva debe estar seguida por un punto y coma (;), después la palabra "fin" finalmente otro punto y coma (;).

      Las cuatro franjas llamadas “Código” deberán aparecer en área de edición de tu informe. Así:

    1. Haz clic en el botón [Registro] para declarar el registro primario. Ingresa el nombre de la variable “string??? en el campo ‘Ordenar por’:

      Así, cuando pulses [OK], el registro será agregado al área de edición de tu informe como es normal:

      Podría decirse que los radio botones determinan el valor de la variable rSrot de tipo “integer”. Esta variable, en su tiempo, configura el valor de la variable vsSort de tipo “string” la cual se usa en la ventana de diálogo ‘Registro’ para determinar el tipo de ordenación.

      Notemos que las cuatro franjas de tipo “Código:” deben aparecer tras la declaración del registro. Tales franjas configuran el valor de la variable “string” (esta variable debe ya deberá contener el valor adecuado cuando sea usada en la declaración del registro). De modo que, si declaras el registro primario antes de agregar las franjas “Código:”, debes cerciorarte de no pulsar la franja "Register: Contactos..." antes de utilizar el botón [Cód.].

    1. Diseña la diagramación del informe según tus requerimientos en la solapa ‘Diseño???.
    Por favor, haz clic en los siguientes subtítulos para la descripción detallada sobre:

    Buscar registros individuales dentro de un Periodo

    Muchas veces se hace necesario proporcionar una búsqueda de los registros individuales que caen dentro de un periodo específico. Por ejemplo, supongamos que deseas producir un listado de facturas correspondientes a cierto periodo, lo que debes hacer es esencialmente agregar una búsqueda estándar en función a tu requerimiento (facturas) según lo descrito aquí. El procedimiento es el siguiente:
    1. Crea un nuevo informe. Estando en la solapa ‘Data’, especifica que el registro Factura ha de ser tu registro primario. Ve a la solapa ‘Diseño’ y diseña la diagramación de un informe (según tus requerimientos).

    2. Para agregar un búsqueda de periodo, vuelve a la solapa ‘Data’ y haz clic en la franja llamada "Register: Facturas..." para especificar que la búsqueda se correrá sobre el registro Facturas. Luego, haz clic en el botón [Selección] y completa la ventana ‘Selección’ tal como se ve en la siguiente ilustración:

      Así, habrás colocado una variable llamada vdDate en la ventana de especificación. Allí, el usuario podrá ingresar el periodo requerido (es decir, la fecha inicio y fin separadas por dos puntos). El registro pegado (es decir, el dato extraído del campo ‘Pegar Registro’) es PerSClass, de modo que el usuario podrá seleccionar un periodo según la opción Periodos de Informes usando 'Pegado Especial'. Puedes ingresar manualmente el dato "PerSClass", o puedes seleccionarlo desde una lista de alternativas pulsando el botón [Pegar Ventana]. Esto garantizará que el dato está correctamente escrito. No hay necesidad de especificar un Valor en la ventana de diálogo ‘Selección’; el primer periodo de informe proveniente de la opción ‘Periodos de Informes’ se ofrecerá por defecto para la variable vdDate cuando el usuario abra la ventana de especificación.

      Así, cuando se ejecute el informe, se correrá una búsqueda de Facturas cuya Fecha de Factura sea posterior o igual a la fecha inicio del periodo especificado – y anterior o igual a la fecha fin del periodo especificado.

    Por favor, haz clic en los siguientes subtítulos para ver la descripción detallada sobre:

    Break Points, Sutotales y Totales

    Si necesitas calcular y mostrar subtotales, debes organizar tu informe de tal manera que los registros individuales que contribuyen a un subtotal, estén alineados todos de forma grupal en el informe. Es decir que los subtotales aparecen luego de cada grupo.

    Como recordarás, ya habíamos descrito un ejemplo de cómo mostrar un subtotal (paso 4 de la página Imprimir Información desde el Registro Secundario). Vimos que la Lista de Contactos mostraba cada Factura de los Clientes y las alineaba bajo los detalles respectivos de cada Cliente. Así:

    Cliente 1
    Primra Factura del Cliente 1
    Segunda Factura del Cliente 1
    Tercera Factura del Cliente 1
    Cliente 2
    Primera Factura del Cliente 2
    Segunda Factura del Cliente 2
    Tercera Factura del Cliente 2
    Cliente 3
    Primera Factura del Cliente 3
    Segunda Factura del Cliente 3
    Tercera Factura del Cliente 3
    Esta estructura constituye efectivamente un listado de Facturas ordenadas según el Código de Contacto y se mostrará la información de cada Cliente según corresponda. El tipo de ordenación para las Facturas (registro secundario) ha sido impuesto por el registro primario. Esto nos permite calcular varios subtotales para cada Cliente (ej. subtotales para el número de facturas, valor de las facturas, cantidad de ítems vendidos, etc.). Tales subtotales son calculados desde el registro secundario. Dicho esto, si deseas que tu informe contenga subtotales, necesitas un “percutador” (a veces conocido como “break point”) para mostrarlos. En este caso, la última factura de un Cliente en particular (al final de la búsqueda en el registro secundario), es el “break point” que hace que los subtotales se muestren en el informe.

    Podría darse el caso que no desees mostrar ningún detalle del Cliente en el informe. Es más, el informe podría ser titulado “Lista de Facturas” no “Lista de Contactos???, de modo que solo aparezca una simple lista de Facturas ordenadas por el Código de Cliente con respectivos subtotales para cada Cliente. Una manera de hacer esto es usando exactamente la misma estructura y decidir simplemente no mostrar ninguna información proveniente del registro primario. Así que la persona que lea el informe, estará leyendo una lista de facturas. Ahora, si has decidido convertir el registro Facturas en tu registro primario, puedes ordenar las Facturas según el Código de cliente, pero no habrá ningún “break point??? entre los diferentes Clientes y por ende no se mostrarán subtotales (es decir, la búsqueda se correrá desde la última factura de un Cliente hasta la primera factura del siguiente cliente sin interrupciones).

    Este método a través del cual se usa el registro primario para imponer un tipo de ordenación al registro secundario pero solo mostrar información del secundario, es una manera muy práctica de estructurar un informe con subtotales. Por ejemplo, a lo mejor decidirás mostrar una lista de clientes con varios subtotales para cada Categoría de Cliente en cuyo caso la opción ???Categorías Cliente’ será el registro primario. Nada provendrá de la Categoría de Cliente pero el registro Contacto será el registro secundario. El informe correrá una búsqueda en la opción ‘Categorías Cliente’ – para cada registro individual en tal opción se procederá a correr una búsqueda en el registro Contactos para hallar aquellos Contactos que pertenecen a la Categoría sujeto de la búsqueda. En resultado será un informe que mostrará Contactos ordenados según su Categoría y luego mostrará los subtotales.

    El desventaja de este método es que no puedes usarlo cuando no existe ningún registro para ser usado como el registro primario y así imponer un tipo de ordenación sobre el registro secundario. Por ejemplo, no podrás usar este método para ordenar Facturas por orden de fecha e imprimir subtotales para cada fecha; esto debido a que no existe ningún registro que almacene fechas. Y, como ya se mencionó, no puedes hacer que el registro Facturas sea el registro primario y ordenar las Facturas por orden de fecha puesto que no habría ningún “break point” entre las diferentes fechas y por ende no habrá una separación para los subtotales. La solución es hacer que el registro Facturas sea tanto registro primario y registro secundario. Es decir, al ser registro primario ordenado por orden de fecha, hallará los “break points” entre las fechas; al ser registro secundario, mostrará las Facturas correctas y calculará los subtotales.

    El procedimiento es el siguiente:

    1. Crea un nuevo informe. Estando en la solapa ‘Data’, especifica que el registro Facturas ha de ser tu registro primario y que las Facturas estarán ordenadas por orden de fecha (las fechas de las facturas). Tal vez querrás agregar una búsqueda sobre Facturas que caigan dentro de un periodo específico (según lo descrito aquí), y una segunda búsqueda para omitir Facturas no aprobadas. No diseñes ningún elemento en la solapa ‘Diseño???.

    2. La idea es hacer que el informe corra una búsqueda de las Facturas dentro del periodo especificado. Cuando la búsqueda se tope con una Factura cuya fecha es diferente a la fecha de la Factura anterior, entonces se deberá correr una búsqueda en el registro secundario (que es también el registro Facturas) en función a Factura emitidas en la fecha nueva. Para comprobar que la fecha de una Factura es diferente a la fecha de la Factura anterior, cada Fecha de Factura deberá estar registrada dentro de su respectiva variable. Cuando la búsqueda se tope con la siguiente Factura, se realizará la comparación de su fecha con la fecha de la variable (es decir, la fecha de la Factura anterior). Después de esto, el próximo paso consiste en declarar la variable de la fecha al comienzo del informe.

    3. En el anterior ejemplo de una Lista de Contactos, el informe corría una búsqueda de Clientes en el registro Contactos y para cada Cliente se buscaban las Facturas – en el registro Facturas – emitidas para ese Cliente. La búsqueda de Factura se efectuó una vez para cada Cliente. En la presente Lista de Facturas, el informe correrá una búsqueda sobre el registro Facturas y cuando se tope con una Factura cuya fecha es diferente a la fecha de la Factura previa, deberá por ende efectuarse una búsqueda en el registro secundario (que es también el registro Facturas) en función a Facturas emitidas en la fecha nueva. En otras palabras, a diferencia de la Lista de Contactos, no deseamos exigirle al sistema una búsqueda de cada registro individual en el registro primario, solo necesitamos que la búsqueda se efectúe cuando la fecha cambie. Se requiere de una variable para registrar el hecho de que la fecha ha cambiado y para correr la búsqueda. Si la variable es auténtica, la búsqueda se efectuará exitosamente. Si no lo es, no habrá ninguna búsqueda. Bien, el siguiente paso consiste en declarar la variable al comienzo del informe. La variable en cuestión puede ser de tipo “boolean” (puede contener verdadero o falso) o de tipo “integer” (puede contener 1 o 0).

    4. El siguiente paso es agregar dos franjas de tipo “Code:..” a la sección del registro primario. A la primera franja se le asignará la variable vbChanged configurada en ???falso” cuando el bucle de búsqueda se tope con la siguiente Factura. La segunda franja comparará la Fecha de Factura de tal Factura frente a la fecha de la factura anterior (en la variable vdDate). Si las dos fechas resultan diferentes, la Fecha de Factura será copiada a la variable vdDate que estará lista para la siguiente comparación; y la variable vbChanged será configurada como “verdadero” para disparar la búsqueda en el registro secundario.

    1. Debes especificar que el registro Facturas ha de ser tu registro secundario. Debes además agregar una Condición que estipule que el registro secundario solo será procesado si vbChanged está configurada en “verdadero”.

    2. Agrega una búsqueda en la sección del registro secundario – tal búsqueda debe ser en función a Facturas cuyas Fechas sean igual a vdDate.

      Seguramente, querrás también agregar una búsqueda que omita aquellas Facturas no aprobadas, especialmente si agregaste una búsqueda similar en el registro primario (paso 1).
    1. Dado que el informe es una Lista de Facturas, deberás usar una variable para calcular los subtotales, no así el botón [Total]. Si usas el botón [Total], las Notas de Crédito serán agregadas al valor facturado de una jornada cuando en realidad deberían ser restadas. Haz el procedimiento normal para declarar la variable al comienzo del informe y agrega el código al las secciones del registro primario y secundario para calcular subtotales. Aparte de esto, necesitarás una variable para mostrar el valor por separado de cada Factura si es que quieres mostrar el valor de las Notas de Créditos como cifras negativas:

    1. Pasa a la solapa ‘Diseño’ para proceder con el diseño de la diagramación del registro secundario (según tus requerimientos).

    1. Este es el resultado:

    Por favor, haz clic en los siguientes subtítulos para ver la descripción detallada sobre:

    Bloques

    Un bloque es una opción que solamente puede contener un solo registro individual. Los Bloques no tienen su ventana hojear. Algunos de ellos aceptan ajustes de manera plana (ej. Manejo de Cuentas de Ventas), mientras que otros están conformados por matrices con varias filas (ej. Formas de Pago y Cód. IVA). Básicamente, un informe que muestra información en bloques posee una construcción diferente a un informe basado en un registro u opción. Además, se requieren técnicas diferentes dependiendo si el bloque es un bloque multi-filas.

    Por favor, abre las siguientes páginas para conocer más sobre:


    - Bloques Multi-Filas

    Puedes diseñar un informe que liste los contenidos de un bloque multi-filas (por ej. Formas de Pago o Cód. IVA). Un bloque multi-filas contiene un solo registro (en el sistema) con su respectiva matriz. Al diseñar un informe vinculado a este tipo de información, no podrás especificar un bloque para que éste sea el registro primario. Es más, el informe no poseerá ningún registro primario sino que tendrás que especificar la matriz del bloque al comienzo del informe. El procedimiento es el siguiente:
    1. Crea un nuevo informe. Estando en la solapa ‘Data’, haz clic en el botón [Matriz] y rellena los campos de la ventana ‘Matriz de Filas’ con la información apropiada. El ejemplo a continuación nos muestra un listado de Códigos IVA:

      Registro/Bloque
      Debes especificar aquí el Bloque que ha de constituirse en la base del informe. Puedes usar Pegado Especial para asegurarte que el nombre del bloque esté correctamente escrito. Toma en cuenta que al usar Pegado Especial, primero se desplegará un listado de registros; por eso, deberás pulsar el botón [Bloques] que está disponible dentro de la ventana ‘Pegar Registro’.

      Registro Madre
      Deja este campo en blanco cuando pretendas agregar un bloque a un informe.

      Nombre Variable
      Ingresa un nombre para la variable que albergará los contenidos del bloque.

      Nivel
      Ingresa el nivel adecuado para el informe. En una lista sencilla (como en el ejemplo), el bloque es efectivamente el registro primario y por ende el nivel deberá ser 1.
    2. Haz clic en el botón [OK] para insertar la franja "Register Matriz:" en el área de edición de tu informe:

    1. Si quieres, puedes agregar otros aspectos a tu informe del modo normal. Por ejemplo, puedes agregar una búsqueda usando el botón [Selección]. Luego, diseña la diagramación de tu informe en la solapa ‘Diseño’:

    1. Este es el resultado:

    Por favor, abre aquí para más detalles sobre el uso de bloques simples en tus informes.

    - Bloques Simples (Información transferida al Encabezado)

    Puedes diseñar un informe que liste los contenidos de un bloque simple (ej. Manejo de Cuentas de Venta o Información de Empresa). A lo mejor, seguramente necesitarás mostrar los contenidos del bloque (es decir, en el caso de la opción ‘Manejo de Cuentas de Venta’, querrás mostrar una lista de las Cuentas); o necesitarás incluir una porción de información proveniente de un bloque y vincularla a un informe más extenso.

    En este apartado describiremos cómo extraer información proveniente de la opción ‘Información de Empresa’ y plasmarla en la sección “Reporte Encabezado”. Este ejemplo demuestra dos técnicas: Primero, la extracción de información de un bloque; segundo, el copiado de esta información en la sección “Informe Encabezado”.

    Bien, para mostrar información proveniente de un bloque simple ya sabemos que no podemos especificar tal bloque para que sea al registro primario. Dado que el bloque con que deseamos trabajar no es un bloque multi-filas, tampoco puedes especificar una matriz. Para extraer información de un bloque, necesitas usar el botón [Buscar] en cualquiera de las secciones de tu informe.

    Si necesitas que alguna información aparezca en el Encabezado (del informe) (información que puede ser extraída de un bloque o de un registro), tienes igualmente que usar el botón [Buscar]. El motivo de esto es que el Encabezado aparecerá antes de que cualquier registro sea declarado (en este punto, no habrá ningún registro primario). A continuación vemos un informe común:

    En este ejemplo, el Encabezado aparecerá luego de que la variable2 haya sido declarada y configurada en 0 (cero), pero también antes de que la franja "Register: Contactos?" indique que el registro Contactos es el registro primario. De modo que, si necesitas alguna información para insertarla en el Encabezado, debes procesarla antes de la primer franja de tipo "Register:".

    Para mostrar información proveniente de un bloque o registro en el Encabezado (ej. para mostrar el nombre de tu empresa u otro dato proveniente de la opción ‘Información de Empresa’), el procedimiento es el siguiente:

    1. En un nuevo informe, haz clic en el botón [Buscar]. En un informe existente, resalta cualquier franja sobre la primera franja de tipo "Register:" y luego haz clic en el botón [Buscar].

    2. Rellena los campos de la ventana ‘Registro de Búsqueda’ con la información apropiada tal como se describen en la página Vincular Información desde otros Registros. Puedes escoger el bloque o registro que deseas usando Pegado Especial. Toma en cuenta que cuando abras la lista Pegado Especial desde el campo ‘Registro’, solo verás registros y no bloques. Para poder ver registros, haz clic en el botón [Bloques] dentro de la misma ventana de ‘Pegar Registro’.

      Si necesitas extraer información desde un bloque, solo necesitas cargar el bloque respectivo y un nombre para la variable. Un bloque constituye un registro unitario y el hecho de establecer un vínculo con él, hace que éste se convierta en el registro en vigencia. Así, no hay necesidad de realizar una búsqueda. Observa el siguiente ejemplo en donde hemos conectado el informe a la opción ‘Información de Empresa’:

      Es poco probable que decidas mostrar información de un registro y el Encabezado del informe. Sin embargo, si así lo decides, deberás buscar dentro de un registro hasta encontrar el registro individual que proporcionará la información que deseas mostrar. En el siguiente ejemplo, hemos conectado el informe al registro Contactos y se buscará aquel Contacto cuyo Código coincida con la variable vsContCode en la ventana de especificación:

    3. Ve a la solapa ‘Diseño’ y haz clic en la sección “Reporte Encabezado”. Bien, para mostrar la información proveniente del bloque o registro que ha sido conectado, haz clic en el botón [Fórmula]. No podrás usar el botón [Campo] para esta acción puesto que no hay un registro primario todavía y la sección “Reporte Encabezado” no puede aceptar campos del bloque o registro conectado. Especifica el nombre de la variable, las coordenadas (izquierda-derecha) y selecciona una justificación.

      En este ejemplo, la expresión "vrCY.CompName" mostará el nombre de empresa según la opción ‘Información de Empresa’. "vrCY" evoca al nombre de la variable que contiene a la opción ‘Información de Empresa’ (según lo especificado anteriormente en la ventana de diálogo ‘Registro de Búsqueda’); y "CompName" se refiere al nombre interno del campo ‘Nombre de Empresa’ en la opción ‘Información de Empresa’.
    Por favor, abre aquí para más detalles sobre el uso de bloques multi-filas en tus informes.

    Sintaxis

    Debes usar la sintaxis mostrada a continuación para tus condiciones de impresión. Es decir, debes especificar esta sintaxis en el campo ‘Fórmula??? de la ventana de diálogo ‘Selección’, ‘Código’ (solapa ‘Data’) y ‘Fórmula’ (solapa ‘Diseño’):

    Operadores Relacionales
    ==    es igual a
    <>    no es igual a
    !=    no es igual a
    >    es mayor que
    >=    es mayor que o igual a
    <    es menor que
    <=    es menor que o igual a

    No debes confundir == con =. Usa == cuando necesites comparar dos valores – para preguntar si un valor es igual al otro. Las condiciones de impresión y de tachado son las situaciones apropiadas para usar ==. Usa = cuando necesites asignar un valor a una variable – tipicamente, luego de pulsar el botón [Cód.]. Por ejemplo:

    testvar == 1
    Cuando esto aparezca en una condición de impresión o tachado, se te está preguntado si testvar es igual a 1.

    testvar = 1
    Cuando esto aparezca en una franja de tipo “Código:”, está indicando que testvar es ahora igual a 1. Es decir, cualquier valor que testvar haya tenido antes sera olvidado.
    Luego de pulsar el botón [Cód.] en la solapa ‘Data’, puedes una condición de impresión en la que se use tanto == como =:
    if (var1 == 1) then begin var2 = 1; end;
    En este ejemplo, primero hay una prueba par aver si var1 es igual a 1. Si lo es, entonces var2 se configurará en 1 también. Si no lo es, entonces var2 retendrá el valor que tenía anteriormente.

    Múltiples Condiciones
    Puedes utilizar múltiples condiciones igualmente a través del botón [Imprimir Si]. En este sentido, une las múltiples condiciones usando los siguientes operadores lógicos:

    Se deben cumplir las conficiones “and”    “ambas” (o todas)
    or    Se de cumplir al menos una condición
    and !    Se debe cumplir la primera condición y no la segunda.
    or !    Se debe cumplir ya sea la primera condición o verificar que no se cumpla la segunda condición.

    Funcionalidades Especiales

    Este apartado describe algunas funciones de HansaWorld Enterprise que se pueden usar como herramientas para la definición de muchos informes. Puedes usar estas funciones en tus condiciones de impresión (botón [Imprimir Si]), en el campo ‘Fórmula’ de las ventanas de diálogo ‘Selección’, ‘Código’ y ‘Fórmula’. El nombre de estas funciones respeta el uso de mayúsculas y minúsculas, así que debes tomar en cuenta eso.

    Las descripciones en es página contienen franjas “Código:” de ejemplo, las cuales usan el siguiente formato:

    variable1 = function(variable2,variable3);
    La función procesará los contenidos del a variable2 y variable3 y copiará el resultado a la variable1. Por ende, podrás usar la variable1 para cualquier cálculo en el informe.

    En todos los casos, puedes reemplazar la franja de ejemplo con una Fórmula en la solapa ‘Diseño’. Así:

    function(variable2,variable3)
    El resultado será un informe más veloz que utiliza menos variables por cuanto no necesitas declarar la variable1. Esto será ventajoso cuando todo lo que desees mostrar sea solo el resultado de la función. Sin embargo, esto es menos flexible ya que no podrás usar el resultado de la función (es decir, los contenidos de la variable1) en ninguna otra parte del informe.

    En una franja de tipo “Código:”, el resultado de la función se coloca en la variable. En una Fórmula, el resultado de la función se coloca en un elemento dentro de la diagramación del informe. Algunas funciones no devuelven ningún resultado a una variable de la misma forma. Sólo usarás estas funciones en una franja de tipo “Código:”. Sigue leyendo para ver distintos ejemplos.

    blank(field or variable), nonblank(field or variable)
    blank devuelve “verdadero??? si el campo o variable está vacío. nonblank devuelve “verdadero” si el campo o variable no está vacío. Puedes también usar!blank en lugar de nonblank.

    El siguiente ejemplo de una condición de impresión, muestra efectivamente todos los Contactos sin ningún Nro. de Fax:
    blank(vrContact.Fax)
    Si el campo o variable es un número, blank devolverá “verdadero” si el campo o variable está vacío; o devolverá “falso” si el campo o variable contiene 0 o 0.00. nonblank devolverá “falso” si el campo o variable está vacío; o devolverá “verdadero??? si contiene 0 o 0.00.

    blankval
    Puedes utilizar blankval para vaciar una variable decimal. Esto puede resultar ventajoso cuando quieres insertar un espacio en el informe en lugar de que aparezca simplemente 0.00 would be printed. El siguiente ejemplo de Código configura una variable decimal a blankval si la anterior contenía 0.00:
    if(vdTestVar==0.00) then begin vdTestVar= blankval; end;
    blankval no vaciará una variable de tipo “integer” pero configurará la variable en 0.

    No puedes realizar un testeo de blankval. Por ejemplo, no puedes usar la siguiente condición de impresión para mostrar todos los Contactos donde el Límite de Crédito de Ventas es inexistente:
    vrContact.CreditLimit==blankval
    Esta condición de impresión mostrará todos los Contactos en donde el Límite de Crédito de Ventas sea inexistente y aquellos Contactos en donde el Límite de Crédito de Ventas sea 0.00. Si necesitas testear que un campo o variable está en blanco (en nuestro ejemplo, para mostrar todos los Contactos donde el Límite de Crédito Vtas. esté en blanco pero no 0.00), debes usar !blank o nonblank en la condición de impresión:
    nonblank(vrContact.CreditLimit)
    Si necesitas testear 0.00 (es decir, para mostrar todos los Contactos donde el Límite de Crédito Vtas. es 0.00 pero no está en blanco), debes usar la siguiente condición de impresión:
    (vrContact.CreditLimit == 0.00) y (nonblank(vrContact.CreditLimit))
    CurrentDate
    Utiliza CurrentDate para mostrar la fecha actual en un informe; o usa la fecha actual en una fórmula o cálculo.

    El siguiente Código de ejemplo colocará la fecha actual dentro de la variable específica para fechas; la cual luego puede mostrarse o usarse en cualquier otra parte del informe:
    vdDate = CurrentDate;
    La fecha aparecerá en el informe usando el formato especificado en las diferentes opciones (seteos) referentes al Formato de Fecha y Número. Este es un formato numérico (ej. 01/01/2007). Si deseas mostrar la fecha en palabras, entonces usa las funciones GetDateMonthInWords, GetMonthName o MonthShortName las cuales se describen más abajo.

    El siguiente ejemplo de una condición de impresión hará que se muestren todos aquellos Contactos que fueron modificados de último durante el día en que se produjo el informe:
    vrContact.DateChanged == CurrentDate
    CurrentTime
    Usa CurrentTime para mostrar la hora actual en un informe; o usa la hora actual en una fórmula o cálculo.

    El siguiente ejemplo de Código colocará la hora actual dentro de una variable específica para la hora; la cual luego puede mostrarse o usarse en cualquier otra parte del informe:
    vtTime = CurrentTime;
    La hora se mostrará en el informe usando el formato HH:MM:SS.

    CurrentUser
    Usa CurrentUser para mostrar las iniciales de la Persona que está actualmente conectado en el sistema (es decir, el usuario que produce el informe); o usa las iniciales de tal persona en una fórmula o cálculo.

    El siguiente Código de ejemplo colocará las iniciales (de la Persona) dentro de una variable de tipo “string”; la cual luego puede ser mostrada o usada en cualquier otra parte del informe:
    vsUser = CurrentUser;
    El siguiente ejemplo de una condición de impresión hará que se muestren todos aquellos Contactos cuyo Vendedor sea el usuario actual:
    vrContact.SalesMan == CurrentUser
    Para lograr el mismo resultado de manera más veloz, usa CurrentUser en el campo ‘Fórmula’ de la ventana de diálogo ‘Selección’:

    SetInSet(string variable,string field), SetInSet2(string variable,string field)
    Estas dos funciones te permiten encontrar un valor único (el valor en la variable de tipo “string”) dentro de los campos que pueden albergar varios valores como ser Objetos, Clasificaciones de Contacto y Clasificaciones de Ítems (también Personas y Cc en Actividades). Por favor, abre aquí para detalles y ejemplos.

    ValToString(number,type,thousands separator,decimal separator,rounding)
    Usa esta función para convertir un número (ej. una variable o campo de tipo “integer” o “decimal” o un número) en un elemento de tipo “string”. Por favor, abre aquí para detalles y ejemplos.

    DateToString(date,date format)
    Usa esta función para convertir una fecha (ej. una variable o campo de fecha; o una fecha) en un elemento de tipo “string”. Por favor, abre aquí para detalles y ejemplos.

    TimeToString(time)
    Usa esta función para convertir una hora (ej. una variable o capo de hora; o una hora) en un elemento de tipo “string”. Por favor, abre aquí para detalles y ejemplos.

    GetDay(date), GetMonth(date), GetYear(date)
    Estas funciones devuelven como “integers” datos como el número de día, número de mes y número de año respectivamente desde una fecha. GetYear siempre devuelve una “integer” de cuatro dígitos que siempre incluye el siglo sin importar los ajustes de la opción Formato de Fecha y Número de Empresa.

    El siguiente ejemplo de una condición de impresión hará que se muestren todos aquellos Contactos que fueron modificados de último durante el primer día de un mes:
    GetDay(vrContact.DateChanged) == 1
    El siguiente ejemplo de Código colocará el día de la Fecha Inicio de una Actividad dentro de una variable de tipo “integer”; la cual luego podrá ser mostrarse o usarse en cualquier otra parte del informe:
    viDay = GetDay(vrAct.TransDate);
    El siguiente ejemplo de una condición de impresión hará que se muestren todos aquellos Contactos que fueron modificados de último durante el 2007:
    GetYear(vrContact.DateChanged) == 2007
    Este ejemplo de una condición de impresión hará que se muestren todos aquellos Contactos que fueron modificados de último en el año actual:
    GetYear(vrContact.DateChanged) == GetYear(CurrentDate)
    GetDateMonthInWords(date,string variable)
    Esta función copia una fecha en un formato que incluye el nombre del mes y la colocará en una variable de tipo “string”. Por ejemplo, si la fecha actual es 27/09/2007, este Código colocará "27 Septiembre 2007" dentro de vsDate:
    GetDateMonthInWords(CurrentDate,vsDate);
    El nombre del mes estará en el Idioma local de tu sistema HansaWorld Enterprise.

    No podrás usar GetDateMonthInWords en una Fórmula diseñada desde la solapa ‘Diseño’.

    GetMonthName(language,date,string variable)
    Esta función copia el nombre del mes de una fecha usando el Idioma específico y la coloca en una variable de tipo “string”. Por ejemplo, si la fecha actual es 27/09/2007, este Código colocará "Septiembre " dentro de vsMonth:
    GetMonthName("ENG",CurrentDate,vsMonth);
    Este Código colocará la traducción apropiada del mes dentro de vsMonth dependiendo del Idioma de la Factura en cuestión:
    GetMonthName(vrInvoice.LangCode,vrInvoice.InvDate,vsMonth);
    El nombre del mes en el Idioma especificado será tomado de la opción ‘Días y Meses’ (módulo Sistema). Si esta opción no contiene el nombre respectivo del mes en el Idioma especificado, el nombre del mes estará en el Idioma local de tu sistema HansaWorld Enterprise. Si no deseas especificar un Idioma (ej. si quiere omitir la opción ‘Días y Meses’ y siempre usar el Idioma local, el primer parámetro deberá ser un conjunto vacío de comillas:
    GetMonthName("",vrInvoice.InvDate,vsMonth);
    No puedes usar GetMonthName en una Fórmula insertada desde la solapa ‘Diseño’.

    MonthShortName(date)
    Esta función devuelve el nombre abreviado del mes (de la fecha respectiva) como un elemento de tipo “string”. Por ejemplo, si la fecha actual es 27/09/2007, este Códgo colocará "Sep" dentro de vsMonth:
    vsMonth = MonthShortName(CurrentDate);
    El nombre abreviado del mes siempre tendrá tres caracteres y estará en el Idioma local de tu sistema HansaWorld Enterprise.

    DateDiff(date2,date1)
    Esta función devuelve como un elemento “integer”, el número días entre la fecha2 y la fecha1. Si la fecha1 es posterior a la fecha2, el resultado será negativo. El siguiente Código de ejemplo coloca la edad de una Factura (basada en su Fecha de Vencimiento) cuando el informe es producido dentro de una variable de tipo “integer”:
    viAge = DateDiff(CurrentDate,vrInvoice.PayDate);
    El siguiente ejemplo de una condición de impresión hará que se muestren todas aquellas Facturas con más de 30 días de antigüedad (basadas en sus fechas):
    DateDiff(CurrentDate,vrInvoice.InvDate)
    Si deseas usar una fecha actual para la función, pon la función dentro de comillas como si fuese un elemento de tipo “string”. Esto se aplica a cada función con parámetro de fecha:
    DateDiff("01/01/2008",vrInvoice.InvDate);
    TimeToSeconds(time,long integer)
    Usa esta función para convertir una hora a segundos. Por ejemplo, 00:00:00 será convertido a 0 segundos; 23:59:59 será convertido a 86399 segundos. El siguiente Código de ejemplo convertirá la Hora Inicio de una Actividad en segundos y colocará tal dato en la variable vlSeconds:
    TimeToSeconds(vrActivity.StartTime,vlSeconds);
    Si deseas convertir la hora actual a segundos, pon la función dentro de comillas como si fuese un elemento de tipo “string”. Esto se aplica a cada función con parámetro de hora:
    TimeToSeconds("23:59:59",vlSeconds);
    No podrás usar HoraASegundos en una Fómula insertada desde la solapa ‘Diseño???.

    SecondsToTime(long integer,time)
    Usa esta función para convertir un número de segundos a una hora respectiva. El siguiente Código de ejemplo convierte la Hora Inicio de una Actividad a segundos; si agregas una hora, la convierte nuevamente a una hora:
    TimeToSeconds(vrActivity.StartTime,vlSeconds); vlSeconds = vlSeconds + 3600; SecondsToTime (vlSeconds,vtTime);
    No puedes utilizar SecondsToTime en una Fómula insertada desde la solapa ‘Diseño’.

    TimeDiffInSeconds(time1,time2)
    Esta función devuelve, como un elemento “long integer”, el número de segundos entre la hora1 y la hora2. Si la hora2 es posterior a la hora1, la función asume que se trata de dos momentos en un mismo día. Si la hora1 es posterior a la hora2, la función asume que la hora2 es del día siguiente. Por ejemplo, si la hora1 es 10:00:00 y la hora2 es 09:00:00, la función te dará 82800 (23 horas expresadas en segundos). El siguiente Código de ejemplo coloca la hora extraída a fin de completar una Actividad. Lo hace usando una variable de tipo “long”:
    vlElapsed = TimeDiffInSeconds(vrAct.StartTime, vrAct.EndTime);
    Si fuese el caso que la hora1 y hora2 corresponderán a dos días distintos, podrás utilizar HoursDiff (ver más adelante) para que el resultado sea la diferencia entre la hora1 y la hora2 expresado en un número de horas. Alternativamente, puedes usar DateDiff para calcular el número de días, substraer uno si la hora1 es posterior a la hora2, convertir el resultado a segundos y agregar este resultado al resultado de TimeDiffInSeconds.

    TimeDiff(time1,time2)
    Esta función es similar a TimeDiffInSeconds, pero te da como resultado, una hora.

    HoursDiff(date1,time1,date2,time2)
    Esta función te muestra a modo de decimales, el número de horas entre la hora1 y la hora2 tomando en cuanta la fechas. Por ejemplo, si la diferencia entre las dos horas es 3 horas 30 minutos, HoursDiff te dará como resultado 3.5. El siguiente Código de ejemplo coloca la hora extraída para completar una Actividad dentro de una variable de tipo “decimal”:
    vdElapsed = HoursDiff(vrAct.TransDate, vrAct.StartTime,vrAct.EndDate,vrAct.EndTime);
    AddTime2(time,long integer)
    Usa esta función para agregar un número de minutos a una hora. El resultado se reflejará como una hora. El siguiente Código de ejemplo agregar una hora a la hora actual:
    vtTime = AddTime2(CurrentTime,60);
    Left(string1,number)
    Esta función devuelve como un elemento de tipo ???string”, los caracteres iniciales de string1. Por ejemplo, si el número es tres, Left dará como resultado los tres primeros caracteres de string1. El siguiente Código de ejemplo coloca los dos primeros caracteres de la fecha actual dentro de una variable de tipo “string” (si estás usando el formato dd/mm/aaaa con ceros iniciales, se colocará la fecha dentro de la variable “string”):
    vsDay = Left(CurrentDate,2);
    Right(string1,number)
    Esta función devuelve como un elemento de tipo “string”, los últimos caracteres de string1. Por ejemplo, si el número es tres, Right dará como resultado los últimos tres caracteres de string1. El siguiente Código de ejemplo coloca los últimos cuatro caracteres de la fecha actual dentro de la variable ???string” (si estás usando el formato dd/mm/aaaaa con ceros iniciales, se colocará el año dentro de la variable “string”):
    vsYear = Right(CurrentDate,4);

    Example Reports - Listing Sales Figures

    The example on this page describes using the Report Generator to create a report listing sales figures for a particular period. You can base such a report on the Contact, Item, Item Group, Item Classification, or Person registers. The report will list the records in one of these registers together with sales figures. For this example, we will base the report on the Item Group register, adding the Item register later on. Follow these steps:
    1. Create a new record in the Report register and . For this example, the primary register is the Item Group register:

    2. Add a variable to hold the sales figures. This should be a decimal variable:

    3. Change to the 'Input' card and use the [Field] button to add two fields for the beginning and end of the report period. These should be date fields, and optionally you can specify default values. You can also add PasteCurDate if you would like users to be able to choose dates using 'Paste Special':

    4. Return to the 'Data' card. If the Contact register is the primary register, a report listing sales figures will need to include Customers and exclude Contacts of other types. To achieve this, click on the "Register: Contacts…" line and then use the [Selection] button to specify that the report should only list Contacts in which the Customer check box is ticked. "CUType" is the internal name for the Customer check box:

    5. The report will loop through the records in the primary register and for each record it will obtain and print a sales figure for the specified period. In this example, a sales figure for each Item will be printed in the report. In this step, we will add the function that will obtain the sales figures. This function is IVGetTurnover. The syntax for this function is:

      IVGetTurnover(customer number,item number,item group code,item class,branch,bar tab class, person signature,string variable,date1,date2)

      In this example, as the Item Group register is the primary register, we can leave the customer number, item number, item class. branch, bar tab class, and person signature parameters all blank. As these are strings, we need to use empty sets of inverted commas for these parameters.

      To add the IVGetTurnover function to the report, click on the "Register:…" line and then use the [Code] button:

      The code is:

      vdSales = IVGetTurnover("","",vrItemGp.Code,"","","","","salesexclvat",FromDate,ToDate);

      where:

      • "vdSales" is the decimal variable from step 2 that will contain the sales figure.

      • "vrItemGp.Code" is the third parameter. This expression includes "vrItemGp" (the name of the variable containing the Item Group register) and "Code", the internal name for the Item Group Code field in the Item Group register. The two parts are separated by a full stop. As the report loops through the records in the Item Group register, the vrItemGp variable will in turn contain each individual Item Group record. The "vrItemGp.Code" expression means "the Item Group Code of the Item Group record that is currently in the vrItemGp variable" i.e. "the Item Group Code of the current Item Group".

      • "vdFromDate" and "vdToDate" are the fields from step 3 that will contain the report period.

      Depending on the primary register, change the parameters as follows:

      Primary register = Contacts

      vdSales = IVGetTurnover(vrContact.Code,"","","","","","","salesexclvat",vdFromDate,vdToDate);

      "vrContact.Code", the Contact Number of the current Customer, should be the first parameter.

      Primary register = Items

      vdSales = IVGetTurnover("",vrItem.Code,"","","","","","salesexclvat",vdFromDate,vdToDate);

      "vrItem.Code", the Item Number of the current Item, should be the third parameter.

      Primary register = Item Classifications

      vdSales = IVGetTurnover("","","",vrItemClass.Code,"","","","salesexclvat",vdFromDate,vdToDate);

      "vrItemClass.Code" should be the fourth parameter.

      Primary register = Persons

      vdSales = IVGetTurnover("","","","","","",vrPerson.Code,"salesexclvat",vdFromDate,vdToDate);

      "vrPerson.Code" should be the seventh parameter.

      You can also mix parameters. For example, the following code will display sales to Customer 001:

      vdSales = IVGetTurnover("001","",vrItemGp.Code,"","","","","salesexclvat",FromDate,ToDate);

      As the Customer Number 001 is a string, it is placed in inverted commas "". In a complex report where you are looping through Customers and then Items you can of course use vrContact.Code as the first parameter, in which case do not place it in inverted commas.

      If you specify a Branch as the fifth parameter, sales figures will be compiled from all Sales Invoices and from POS Invoices and Bar Tabs from the Branch. Similarly, if you specify a Bar Tab Class as the sixth parameter, sales figures will be compiled from all Sales and POS Invoices and from Bar Tabs with the Class.

      IVGetTurnover can return one of four figures. This is determined by the eighth parameter. The available options for this parameter (which should be included in inverted commas) are:

      "salesexclvat"
      "salesinclvat"
      "grossprofit"
      "quant"

    6. Change to the 'Layout' card and design the report output. Use the [Formula] button to place the variable from step 2 (i.e. the variable containing the sales figures) in the Before section for the register:

      This is a simple example:

      This is the output:

      For clarity, in this example we added a "Print If" condition to the Item register that excludes Items with no sales (i.e. to exclude Items for which the "vdSales" variable holds a zero value):

    7. For this example, we will divide the Item Groups into broader categories and calculate totals for each category. We will need one total for audio Items as a whole, to include the sales figures for the "AUDIO" and "AUACC" Item Groups, and a second total for video Items as a whole, including the "VIDEO" and "VIACC" Item Groups. We will declare two more variables at the beginning of the report to hold the two category totals:

      As the variables are both decimal variables and they will have the same initial value, we can declare them together in the same 'Variable' window, separating the two variable names with a comma. You must include at least two characters in a variable name, up to a maximum of 20.

    8. We will now use the [Code] button to add two lines of code to calculate the category totals. The first one will add the contents of the "vdSales" variable to the "vdAudio" variable if the current Item Group is "AUDIO" or "AUACC". The second will add the contents of the "vdSales" variable to the "vdVideo" variable if the current Item Group is "VIDEO" or "VIACC". These two lines must be placed after the call to IVGetTurnover to ensure that the "vdSales" variable will contain the correct value: to do this, click on the call to IVGetTurnover before clicking the [Code] button:

      The first line of code is:

      if (vrItemGp.Code=="AUDIO" or vrItemGp.Code=="AUACC") then begin vdAudio = vdAudio + vdSales; end;

      The value of vdAudio will therefore increase as the report is printed.

      The 'Data' card of the report is now as follows:

    9. Change to the 'Layout' card and use the [Formula] button to place the two new variables in the Report Footer section:

      In this example, we used the [Line] button to add a second line to the Report Footer section so the variables will be printed on separate lines. We also added some identifying labels using the [Text] button.

      This is the output:

    10. If we need to list the Items in each Item Group individually, we can add the Item register as a secondary register. On the 'Data' card, click on the last line and then use the [Register] button to add the Item register:

    11. In this step, we will use the [Selection] button to ensure that an Item Group will be printed in the report followed by the Items belonging to that Item Group. Click on the line in the report display area marked "Register: Items…" and then click the [Selection] button. Enter "Group" as the field name (this is the internal name for the Item Group field in the Item register) and "vrItemGp.Code" as the Formula:

      For more details, please refer to the Linking the Primary and Secondary Registers page.

    12. We will add a new decimal variable vdSales2 and use it together with the IVGetTurnover function to print the sales value of each Item. This requires us to use vrItem.Code as the second parameter, as mentioned in step 5:

    13. Change to the 'Layout' card and add fields and the vdSales2 variable to the report output:

      To add clarity and white space to the report, we indented the fields, we increased the size of the Line in the "Items vrItem Header" section as described on the Adding White Space page, and we added an empty Line to the "Items vrItem Footer" section in which we ticked the Always Print option:

      This is the report output:

    ---

    Creating a Report Generator Report:

    Go back to:

    Mensajes de Error comunes

    A continuación tenemos algunos de los mensajes de error más comunes que aparecerán al diseñar un informe:
    Co_typ_match with unknown types
    El botón [Check] mostrará este error si intentas mostrar una variable usando una Fórmula con un Tipo de Dato incorrecto. Por lo general, la variable será una hora o fecha y el Tipo de Dato en la Fórmula será el Valor. El Tipo de Dato deberá ser String para hora y fecha para variable.

    También verás este error si tu codificas un fecha u hora en una función estando es una franja de Código o Fórmula sin antes haber encerrado la fecha u hora dentro de comas invertidas. Por ejemplo, la siguiente Fórmula con una sintaxis incorrecta generará este error:
    DateDiff(01/01/2008,vrInvoice.InvDate);
    La sintaxis correcta es:
    DateDiff("01/01/2008",vrInvoice.InvDate);
    Field without a set
    Este mensaje aparecerá cuando presiones el botón [Check] habiendo colocado un campo en las secciones “Reporte Encabezado” y ???Reporte Pie”. Es decir que no puedes colocar campos en estas secciones.

    Got STRING wanted VAL
    El botón [Check] arrojará este mensaje de error cuando intentes mostrar una variable que use una Fórmula con el Tipo de Dato incorrecto. Por lo general, la variable será de tipo “string” y el Tipo de Dato en la Fórmula será el Valor. El Tipo de Dato deberá ser String para variables de tipo “string”.

    Invalid name
    El botón [Check] arrojará este mensaje de error cuando hayas agregado un campo no-existente en la solapa ‘Diseño’ de tu informe; o cuando hayas usado un campo no-existente el algún lugar de la solapa ‘Data’. La causa más frecuente será el intento de agregar algún texto habiendo usado el botón [Campo] en lugar del botón [Texto]. Toman también en cuenta que los nombres de los campos respetan el uso de mayúsculas y minúsculas.

    Mark something first
    Cuando intentes agregar cualquier elemento a tu diseño en la solapa ‘Diseño’, el sistema te mostrará este mensaje si no has marcado/resaltado ninguna franja primero.