Parametrizacion

Last modified by admin on 2026/07/18 17:44

Libertya

Parametrización del Sistema

Producción de versión escrita del material:
Ing. Pablo Corace
Lic. Silvia Casal

Índice

  1. == I. Introducción al Diccionario de Datos ==

En la siguiente figura vemos un resumen de los temas generales relativos al Diccionario de Datos

  1. === 1. ¿Qué es el Diccionario de datos? ===

Compuesto por entidades que definen la estructura de la aplicación. Definición de : Tablas, Ventanas, Menús, Informes y Procesos, Traducciones

La figura anterior muestra las interrelaciones entre diversas entidades del diccionario de datos.
El TPV (Terminal de Punto de Venta) es un ejemplo de formulario del diccionario de datos

  1. === 2. ¿Cómo editar el diccionario de datos? ===

Se pueden modificar, agregar o eliminar entidades del diccionario de datos. El diccionario de datos está vinculado a una compañía especial llamada SYSTEM. Para editarlo se accede a dicha compañía

La contraseña por defecto del usuario System es System. Es importante destacar que los Maestros de la compañía System refieren exclusivamente al diccionario de datos. NO se deben confundir con los Maestros de nuestra empresa.

  1. === 3. ¿Qué se puede y qué NO se puede hacer editando el diccionario de datos? ===

Lo que NO se puede hacer en el diccionario de datos son las acciones que requieren programación. Se pueden hacer informes pero NO los de Jasper que requieren definir Clases Java. A partir de la versión 11.10 se pueden definir informes Jasper dinámicos. Se ha agregado el campo Reporte Dinámico (Si/No) en la ventana de Informes y Procesos que al ser seleccionado habilita otro campo (Jasper) donde se puede cargar la ruta al archivo jrxml creado con la herramienta i-report. Estos informes pueden usar directamente tablas o vistas como DataSource sin necesidad de programación.
A continuación se enumeran algunas de las acciones habituales sobre el Diccionario de Datos.
image1.png
A continuación, se muestran ejemplos de acciones que NO se pueden ejecutar trabajando con el Diccionario de Datos

  1. == II. Manejo y creación de tablas ==
    1. === 1. Estructura de la base de datos ===

Vistas: Se utilizan con informes o pestañas de solo lectura
Secuencias: 1 por tabla. Se trata de secuencias numéricas autogeneradas para las columnas identificadoras (ID) de cada tabla.
A continuación de enumeran algunas tablas de uso muy frecuente:

Accedemos a la base de datos: PGAdmin, usuario: Libertya

Columnas requeridas para cada tabla:

Además de estas columnas, para cada tabla se debe definir la secuencia y las primary-key y foreing- key, que son las claves de acceso primarias y a otras tablas respectivamente. En la figura a continuación se visualiza la definición de las columnas requeridas, las claves y las restricciones.

  1. === 2. Modelo de diccionario de datos ===

Sobre la izquierda figuran las entidades correspondientes al diccionario de datos y sobre la derecha las correspondientes de la base de datos. La relación existente entre las entidades se define a través del nombre. Lo mismo sucede con las columnas. Una tabla de nombre <xxxx> en la base de datos, tendrá su correspondiente tabla, del mismo nombre, en el diccionario de datos.

  1. === 3. Edición de tablas existentes ===

Lo más habitual es que se presente la necesidad de agregar una columna en una tabla existente. Como ejemplo, veremos el agregado de la columna e-mail a la tabla de entidades comerciales.

Para comenzar, vamos a trabajar con la tabla del diccionario de datos. Como siempre, se accede al diccionario de datos mediante la compañía especial System.

Accedemos a la tabla C_BPartner

A continuación, vemos las columnas de la tabla C_BPartner

A continuación, vemos un resumen de las acciones que serán necesarias para agregar la nueva columna e-mail a la tabla C_BPartner

Accedemos a la pestaña Columnas para crear un nuevo registro.
Ingresar el nombre del registro, se utiliza la convención “capper-case” es decir “letra mayúscula en cada inicial de cada palabra del nombre” (En este ejemplo, será EMail)

Esta convención vale para los nombres usados por Libertya. Para el Postgres es indiferente ya que no discrimina mayúsculas y minúsculas.
Al definir una columna, se asocia a un elemento. En la mayoría de los casos (como en este ejemplo), este elemento ya existe. De no existir, se puede crear un elemento nuevo.

Cada elemento existente trae información asociada. Cuando un elemento se invoca en una columna de una tabla, aporta la información que es común a todas las columnas donde este elemento haya sido utilizado. La información que “trae” el elemento es, por ejemplo, su descripción, ayuda, traducción, etc.

Al momento de definir los parámetros de una nueva columna, se debe determinar si su entrada será obligatoria, mediante un tilde en el campo correspondiente. Si se decide que la entrada debe ser obligatoria, hay que incluir una lógica predeterminada (o valor por defecto).
Esto se debe a que, en general, estaremos agregando una columna a una tabla que ya está en uso y, por lo tanto, tiene registros almacenados. Si no determinamos un valor por defecto, quedará un campo sin información en los registros que estaban creados con anterioridad al momento de agregado de la nueva columna y esto produce, necesariamente, error de proceso.

El campo Actualizable permite futuras ediciones del contenido. Si no queda tildado, el campo aparecerá como de sólo lectura, impidiendo actualizaciones posteriores.

El campo Siempre actualizable permite futuras ediciones, aún cuando el registro completo este desactivado
A continuación se muestra la acción de Guardar.

En el ángulo inferior derecho se informa el número de registro activo y la cantidad de registros (en este caso 31/92) Haciendo doble click sobre ese número se muestra la información correspondiente a ese registro: usuario que lo creó, fecha y hora de creación, tabla a la que pertenece e ID

En AD_Column, del diccionario de datos, se almacena toda la información correspondiente a las columnas.

Hasta aquí trabajamos sobre el diccionario de datos. Ahora corresponde trabajar sobre Postgres. En la siguiente figura, se resumen las acciones que deben desarrollarse para finalizar con el agregado de una columna a una tabla.

El botón señalado con la flecha verde, en la siguiente figura, genera la consulta SQL necesaria para modificar la tabla en Postgres.

Si luego de ejecutado el proceso se hace doble click en la linea de mensaje, (en el margen inferior de la pantalla) aparece la consulta SQL con la cuál se modifica la tabla en la base de datos.

A continuación, verificamos que la columna que hemos agregado aparece efectivamente en la tabla de la base de datos para lo cual utilizamos el PGAdmin (refresh tabla, para visualizar)

IMPORTANTE: Cada vez que se haga una modificación en una columna de una tabla en el diccionario de datos, se debe volver a Sincronizar Base de Datos para que este cambio impacte sobre la tabla de la base de datos correspondiente en Postgres.

  1. === 4. Creación de nueva tabla ===

En este caso, el orden del proceso es inverso al de Agregar una columna a una tabla existente, ya que vamos a empezar por definir la nueva tabla en la Base de Datos y luego vamos a importarla al diccionario de datos. Esto es así porque en general una tabla nueva tiene muchas columnas, y es más cómodo definirlas en Postgres y luego importarlas , que definirlas una a una en el diccionario de datos.
Entramos a pgAdmin y ejecutamos una consulta SQL (en este caso, ya la tenemos creada) para generar la nueva tabla. Esta se llamará M_Toy (Juguete)

Toda vez que tengamos que definir un script, podemos copiar uno existente para tener como referencia las columnas obligatorias y sus claves foráneas (Foreing Key). Luego le agregamos las columnas propias de la tabla a crear, que, en este ejemplo, serán Nombre (Name) y Descripción (Description)
No olvidar incluir Clave Primaria y Claves Foráneas.

Una vez que tenemos armada la consulta, la ejecutamos.
El panel de salida, del PGAdmin indica que se ha creado la tabla y un índice implícito asociado con la clave primaria que hemos definido. (M_Toy_ID)
Podemos verificar que aparece en el listado de tablas para comprobar que se ha creado.

Ahora hay que definirla en el diccionario de datos e importar las columnas. Se accede, como siempre, mediante la compañía System, tal como se resume en la siguiente vista.

Al momento de definir el nombre de la tabla, usamos el mismo con el que la creamos en Postgres. La nomenclatura a utilizar es que los prefijos son siempre en mayúsculas, sin importar el número de letras. El resto del nombre, sigue la nomenclatura “capper case”. Para este caso, será M_Toy.
En el campo Nivel de acceso a datos se despliegan varias alternativas. Las mismas limitan la visibilidad de la tabla de acuerdo al perfil que se utilice para ingresar a la aplicación. Por ejemplo, las tablas relacionadas con documentos, normalmente tienen un nivel de acceso a datos definido como Organización. El nivel de acceso Solo Compañía Activa, en general se asigna a las tablas de configuración, por ejemplo, la configuración de TPV.
La opción Compañía/Organización Activa es uno de los niveles de acceso más utilizados. Se usa para la mayoría de los maestros que comparten información a lo largo de las distintas organizaciones, por ejemplo, Entidades Comerciales.
La opción Sistema no se utiliza como nivel de acceso en la definición de tablas para una compañía. La opción Todos va a hacer que la tabla sea visible para todos los perfiles. En la siguiente vista se muestra el despliegue de estas opciones.

El tilde en Registros Eliminables hace posible que se puedan borrar registros en esta tabla.

Un tilde en Volumen Alto habilita que automáticamente se visualice la pantalla de búsqueda al ingresar a la tabla. Por ejemplo, en las tablas de facturas o pedidos.
Una vez seteadas las opciones, se guarda el registro y pasamos a definir la traducción de la tabla.
Para que se visualicen las pestañas de traducción, hay que ir al menú principal, opción Herramientas, opción Preferencias y tildar Mostrar pestañas de traducción, como muestra la flecha verde en la siguiente figura.

En la pestaña de traducción se incorpora la traducción para cada lenguaje del sistema. En este ejemplo, la palabra Juguete.

Concluido esto, tenemos definida la tabla y su traducción en el diccionario de datos.

La siguiente acción es importar la tabla, para que el diccionario de datos tome las definiciones de las columnas tal como fueron especificadas en Postgres.

Al ejecutar el proceso de Importar Tabla, el Tipo de entidad se define en general como Usuario Final. Las tablas que ya vienen con el sistema están definidas como Versión Standard.

Al finalizar este proceso, aparece una ventana de información donde se enumeran las columnas que han sido importadas desde la base de datos

Si ahora vamos a la pestaña de columnas, ya se pueden visualizar las columnas importadas.

El proceso de importación intenta inferir los tipos de datos, si es entrada obligatoria, etc. desde la definición de la base de datos.
Es necesario verificar las definiciones de cada columna a fin de asegurarnos que respondan a lo que se requiere.
Nuevamente vemos que a partir del Elemento, (si es que ya está definido), ya aparecen datos tales como Descripción y Ayuda, vinculados al mismo

Para el caso de AD_Client_ID, el tipo de dato va a ser siempre TableDir, que nos indica una referencia a otra tabla. Los diferentes tipos de datos, van a ser analizados en profundidad más adelante.

Para esta columna debemos necesariamente definir una validación, que es un filtro de cómo van a aparecer los datos en la ventana.
Para estos casos, en general se utiliza AD_Client Login o AD_Client Trx Security Validation.
En este caso en particular, vamos a utilizar AD_Client Trx Security Validation para impedir que desde la compañía System se puedan hacer transacciones sobre esta tabla.

Haciendo Zoom sobre la validación elegida, se muestra su definición

Lo anterior es válido para la columna AD_Org_ID dónde el tipo de datos también es TableDir.

Para este caso, la validación también excluye a la compañía System.

Las columnas Created y CreatedBy no requieren ser modificadas ya que vienen definidas correctamente desde la importación.
Vemos que para CreatedBy, el tipo de dato es Tabla y el valor de referencia AD_User, que es justamente la tabla de usuarios, tal como muestra la flecha verde de la siguiente vista.

Verificando una a una las columnas, llegamos a la columna M_Toy_ID. Al hacer la importación, el sistema detectó que este es el ID de la tabla y seteó correctamente el tipo de dato.

Como esta es una columna que hasta ahora no existía en el sistema, automáticamente se genera un nuevo elemento con el mismo nombre que la columna, pero que debemos editar para incorporarle descripción y ayuda, sus respectivas traducciones y eventualmente editar el nombre,
Para esto hacemos Zoom sobre el elemento y pasamos a editarlo.
Una vez definido el elemento, cuando hacemos una actualización en la columna, nos muestra los valores que hemos incorporado.
Vemos además, que como la columna es el ID de la tabla, aparece ya tildado el campo Columna Clave (como muestra la flecha verde) y el campo Entrada Obligatoria

Para la columna Name, ya aparecen definidos correctamente el Tipo de Dato y su Longitud. Como la columna Name es común a muchas tablas, el Elemento ya está definido en el sistema, por lo cual trae los datos comunes, entre ellos el que lo define como Identificador del registro.
Esto es un identificador visual que no hay que confundir con la columna clave (ID).

Las columnas Updated y UpdatedBy también están definidas correctamente desde la importación, por lo que no hay que hacer ninguna modificación.
En este momento, ya tenemos todas las columnas correctamente definidas.

Como para toda tabla nueva, debemos generar una secuencia, para lo cual ejecutamos en proceso Comprobar Secuencia, tal como se indica en la figura siguiente.

El proceso va a encontrar que M_Toy no tiene secuencia definida, de modo que la va a generar, tanto en el diccionario de datos como en Postgres.
Una vez culminado el proceso, podemos ir a pgAdmin y haciendo un refresh en las secuencias comprobamos que se ha creado la secuencia sec_m_toy para la nueva tabla.

IMPORTANTE: No olvidar generar secuencias para las nuevas tablas, para evitar que el sistema produzca errores.

  1. == III. Manejo y creación de ventanas ==

En la siguiente figura se resumen los puntos de curso:

  1. === 1. Modelo del diccionario de datos ===

Una ventana puede tener una o más pestañas. Cada pestaña, al seleccionarse, nos muestra una serie de campos. Cada pestaña tiene una relación directa con una tabla y cada campo tiene relación directa con una columna de esa tabla. Es decir que cuando en el sistema ingresamos información en una pestaña, internamente estamos actualizando una tabla. Lo mismo sucede con los campos: cada campo impacta sobre una columna de una tabla.

  1. === 2. Estructura de ventanas ===

La gran mayoría de las ventanas del sistema, presentan la misma estructura. En este ejemplo, estudiaremos la estructura de la ventana de Entidades Comerciales.
Si hacemos doble click sobre la info del registro (ángulo inferior derecho) aparece una ventana de información donde se muestran los datos básicos del registro activo.

A continuación, vemos otro ejemplo de la info del registro, en este caso, la pestaña de Localización.

Cada pestaña muestra campos de información, cuya estructura general interna de presentación es en dos columnas, secuencial de izquierda a derecha y de arriba hacia abajo. Esto es importante al momento de modificar una ventana, para que la visualización de los campos responda a lo que se requiere. Entramos a la compañía System, opción Ventana, Pestaña & Campo y buscamos la ventana de Business Partner (Entidades Comerciales)

En la pestaña de Traducción, verificamos que están definidas las traducciones de Nombre, Descripción y Ayuda, para todos los idiomas habilitados en el sistema.

La pestaña Pestaña, nos va a permitir crear o editar las pestañas de esta ventana.

Entrando a la pestaña de Entidades Comerciales vemos en el campo Tabla, el nombre de la tabla que se corresponde con esta pestaña, como muestra la flecha verde.

Del mismo modo que para todas las entidades del diccionario de datos, tenemos que verificar o ingresar las traducciones.

Vemos ahora la pestaña Secuencia de Campos. Nos permite reordenar un campo en la pantalla, organizar la secuencia o quitar/agregar mediante los botones arriba/abajo y derecha/izquierda (triángulos azules). Lo que aparecerá es lo enumerado en la lista de la derecha y en ese orden.

Entramos en la pestaña Campos, la cuál nos muestra el detalle de todos los campos utilizados

Saliendo del modo grilla, podemos visualizar los detalles de cualquier campo.
Por ejemplo, entrando al campo Compañía, el dato más relevante es la Columna de la Tabla a la que apunta, como muestra la flecha verde. A su vez, cada Campo tiene su correspondiente traducción.

  1. === 3. Edición de ventanas existentes ===

En particular, vamos a ver cómo agregar un campo a una ventana.

Anteriormente habíamos creado la columna E-Mail en la tabla C_BPartner (Entidades Comerciales). Para continuar con el ejemplo, vamos a crear ahora el campo correspondiente. Para ello, iniciamos sesión en la compañía System, elegimos la opción Ventana, Pestaña & Campo y buscamos la ventana a editar, en este caso, la ventana Business Partner (Entidades Comerciales) y seleccionamos la pestaña Entidades Comerciales que es donde queremos agregar el campo E-Mail. Debemos ejecutar el proceso Importar Campos, como indica la flecha verde. Este proceso obtiene la definición de la tabla en el diccionario de datos y por cada definición de columna de esa tabla, genera el campo correspondiente en la pestaña. En definitiva, el proceso genera aquellos campos de las columnas nuevas, que aparecen en la tabla en el diccionario de datos y que no tienen su correspondiente campo definido en la pestaña.

Al finalizar el proceso se muestra una ventana de información donde se indican los campos agregados, en este caso, sólo EMail

A continuación debemos editar la Secuencia del campo, para ubicarlo correctamente en la pestaña. Cuando se agrega un campo mediante el proceso de Importar Campos, por defecto aparece al final de la secuencia, como se muestra en la siguiente figura.

Vamos ahora a la ventana de Entidades Comerciales de la Compañía para elegir el lugar donde queremos que se vea el campo Email. En este caso, lo vamos a situar a la derecha del campo Página Web, como muestra la flecha verde

Para ello, en la secuencia subimos el campo Email para que aparezca a continuación de Página Web.

Como queremos que aparezca al lado del campo Pagina Web, en la pestaña Campo, seleccionamos el campo Email y tildamos Misma Línea, como muestra la flecha verde.

Para lograr una adecuada presentación, debemos ajustar la longitud de despliegue, ya que al importar el campo toma por defecto la longitud definida en la tabla. Normalmente utilizamos Longitud=16 para un campo de una columna y Longitud=32 para un campo que ocupe las dos columnas. Definimos entonces Longitud de despliegue en 16 y guardamos.

Vemos ahora cómo aparece el campo Email en la pestaña de Entidades Comerciales de la compañía. El guión delete que aparece como contenido, es la lógica predeterminada que habíamos definido.

Si vamos a la pestaña Traducción de Campo, vemos que ya aparecen las traducciones.

Es importante definir las traducciones de ventana, pestaña y campo porque luego serán visibles para el usuario. El Nombre que ponemos en la traducción es lo que aparece visible en pantalla como Nombre del Campo, la Descripción es lo que se muestra de manera volátil cuando apuntamos al campo con el mouse y la Ayuda en lo que aparece si seleccionamos Ayuda en la barra de herramientas.
El contenido de la ayuda del sistema se obtiene de los metadatos del diccionario de datos

  1. === 4. Creación de nueva ventana ===

Los pasos a seguir se resumen en la siguiente figura:

Continuamos con el ejemplo de M_Toy, cuya tabla ya hemos creado. Ingresamos a la compañía System, opción Ventana, Pestaña & Campo para crear una ventana para nuestra tabla M_Toy. En el campo Ventana Tipo se despliegan varias opciones. En general utilizamos Mantenimiento para Maestros, Solo Consulta si queremos que la ventana sea de Sólo Lectura y Transacción para ventanas de documentos (Facturas, Pedidos, etc.)
En general los campos Ancho de Ventana y Altura de Ventana no se definen ya que el sistema los establece de manera automática.

Una vez guardado el registro, vamos a la pestaña Traducción de Ventana. Completamos las traducciones para todos los idiomas definidos en el sistema y guardamos.

El siguiente paso es crear las pestañas de la ventana. En resumen, las acciones son las que se muestran en la siguiente figura:

Siempre en la compañía System, vamos a la pestaña Pestaña, y creamos un nuevo registro para nuestra pestaña de Juguetes. En este momento debemos completar los campos requeridos. En el campo Tabla, seleccionamos la tabla relacionada con esta pestaña, en este caso M_Toy.
En el campo Tipo de Entidad, seleccionamos Usuario Final. El campo Secuencia representa el orden, de arriba hacia abajo, en el cual aparecerán las pestañas. Es un valor numérico que se incrementa de a 10. El campo Nivel de Pestaña contiene un valor numérico que determina la identificación de la pestaña. (Por ejemplo, si observamos la figura a continuación, vemos que la pestaña Traducción de Ventana, depende de la pestaña Ventana, por lo cual, tendrá un nivel superior. Lo mismo sucede con la pestaña Traducción de Campo respecto de la pestaña Campo). Entre el campo Secuencia y el campo Nivel de Pestaña se diseña el “árbol” de las pestañas. Podemos también indicar que la pestaña sea de Sólo lectura, o que se pueda o no Insertar registro tildando los campos correspondientes. Adicionalmente, se pueden especificar condiciones de filtrado en el campo Cláusula Where SQL y criterios de ordenamiento en el campo Cláusula ORDER BY SQL. Veremos más adelante ejemplos de esto. Una vez completados los campos, guardamos el registro.

Como siempre, realizamos las traducciones de la pestaña recién creada, en este caso:

Volvemos ahora a la pestaña Pestaña y ejecutamos el proceso Importar Campos, que nos trae las definiciones de columnas de la Tabla M_Toy y genera los campos correspondientes. Una vez ejecutado aparece una ventana de información que enumera los campos importados.

A continuación debemos editar la secuencia de los campos a fin de lograr una correcta visualización. Accedemos a la pestaña Secuencia de Campos. Normalmente comenzamos con los campos Compañía y Organización, en la misma línea. El campo ID, en este caso Juguete, generalmente se oculta, dado que se trata de un dato interno del sistema y no es requerido por el usuario.

A continuación personalizamos uno a uno todos los campos. Desde la pestaña Campo:

No hacemos modificaciones en Compañía. En Organización, tildamos Misma Línea.
En Nombre, modificamos la Longitud de despliegue (=16)

En Descripción modificamos la Longitud de despliegue (=32). No modificamos Activo.
Si aparece un tilde en Mostrar en grilla, el campo será visible en modo grilla.
Muy frecuentemente, existen campos de información redundante (Ej. Compañía u Organización), que no es necesario que aparezcan en modo grilla.

Frecuentemente, la creación de una nueva ventana se puede agilizar copiando y luego editando, alguna ventana existente. En resumen, los pasos a seguir se enumeran en la siguiente figura.

Como ejemplo, vamos a crear una ventana simplificada de clientes que solo tenga tres pestañas: Entidad Comercial, Cliente y Localización. Para hacerlo, tomaremos la ventana de Entidades Comerciales.
Creamos un nuevo registro, en este caso Customers y lo guardamos

Generamos las traducciones a todos los idiomas definidos en el sistema

Luego ejecutamos el proceso de copia desde Copiar Pestañas de Ventana, tal como indica la flecha verde en la siguiente figura.

Aparece una ventana desde la cuál seleccionamos la ventana desde la cuál vamos a copiar las pestañas, en este caso, Entidades comerciales. El proceso de copia puede resultar lento, en función de las características de nuestro hardware y de la complejidad de la ventana a copiar.

Finalizado el proceso de copia, aparece una ventana de información donde se muestra el resultado del proceso de copia. En este caso, como muestra la siguiente figura, se han copiado 17 pestañas y 514 campos. Esto explica la lentitud que a veces puede tener este proceso.

Si vamos a la pestaña Pestaña vemos que tenemos una réplica de las pestañas de Entidades Comerciales. Editando una a una, quitando el tilde del campo Activo, vamos desactivando las pestañas que no queremos conservar.

Si vamos a la pestaña Pestaña, en modo grilla, vemos que sólo han quedado activas las tres que necesitábamos, como muestra el tilde en la columna Activo de la grilla

Hasta ahora, hemos personalizado nuestra nueva ventana para que sólo nos muestre las tres pestañas requeridas. Como sólo queremos que nos muestre los clientes, debemos definir una condición, o filtro en el campo Cláusula Where SQL. Este es un filtro SQL puro, que estudiaremos más adelante. En síntesis, lo que nos mostrará serán los registros de la tabla C_BPartner en los cuales aparezca una “Y” (Yes) en la columna IsCustomer.

  1. == IV. Personalización de menús ==

En la siguiente figura se resumen los temas más relevantes vinculados a la personalización de Menús:

  1. === 1. Modelo del diccionario de datos ===

Extendemos el modelo del diccionario de datos para incorporar nuevas entidades, en este caso, los menús, que nos permiten el acceso a las ventanas, procesos e informes.

Esquemáticamente, en la siguiente figura vemos la relación entre las entidades del diccionario de datos y los datos de la compañía. Para que una entidad sea accesible desde algún perfil de la compañía, en primer lugar esta debe existir en el menú del diccionario de datos, en segundo lugar debe estar contenida por algún árbol de menú definido en la compañía y por último, se le debe dar acceso en algún perfil de usuario.

  1. === 2. Visualización y edición de entradas de menú ===

Dentro de la compañía System, vamos a la opción Menú

Se despliega una pantalla que sobre la izquierda presenta una estructura de árbol. Se muestran todas las entradas de Menú que se encuentran en el diccionario de datos. Las carpetas permiten agrupar entidades; no son entradas en sí mismas.

Por ejemplo, si hacemos doble click sobre la entrada Entidades Comerciales, sobre la derecha se despliegan los detalles de esta entrada.

El Tipo de Elemento nos va a permitir indicar a qué se refiere esta entrada de menú, en este caso Ventana. Por lo tanto, debemos indicar el nombre a la ventana a la que se refiere, en este caso Entidades Comerciales (figura anterior). Si hacemos zoom sobre el campo Ventana, se abre el detalle de la ventana Business Partner en Ventana, Pestaña & Campo.

Si por ejemplo buscamos Informe de Cuenta Corriente, como se muestra en la figura siguiente, en el árbol de la izquierda, vemos que el Tipo de Elemento es un Informe que se vincula a un proceso. (Los informes y los procesos se manejan desde una misma ventana)

Si hacemos zoom en el Proceso nos dirigimos a la ventana de Informe y Procesos, donde se muestran los detalles del proceso.

Para terminar con los ejemplos, vemos el la siguiente figura un proceso, en este caso Crear Tipos de Documento de Punto de Venta

Nuevamente, si hacemos zoom, vemos el detalle del proceso:

Además, las entradas del Menú también tienen una traducción. Es importante que la traducción del nombre sea lo más clara y representativa posible, dado que esto es lo que el usuario va a visualizar en el Menú.

  1. === 3. Creación de nuevas entradas de menú y asignación de perfiles ===

3.1. Creación de nuevas entradas de menú (Diccionario de Datos)

En la siguiente figura se resumen los pasos a seguir para crear una entrada de menú en el diccionario de datos

Desde la ventana de Menú, creamos un nuevo registro.

En este ejemplo, vamos a crear una entrada a la ventana Toys, creada anteriormente. Una vez guardado el registro, vemos que aparece nuestra nueva entrada al final de árbol de Menús. Podríamos ubicar esta nueva entrada dentro de alguna de las carpetas del árbol de Menú. Este árbol no es visible desde ningún perfil de usuario de la compañía. El hecho de ubicar la nueva entrada dentro alguna carpeta del árbol tiene que ver con mantener el orden en el diccionario de datos.

Realizamos la traducción para cada idioma definido en el sistema.

Vamos a crear una entrada para la Ventana Simplificada de Clientes, creada anteriormente. A modo de ejemplo, en este caso vamos a crear una carpeta en el árbol, que llamaremos Customer. Como siempre, debemos hacer la traducción de la carpeta.

Creamos una nueva entrada, en este caso Customers para la Ventana Simplificada de Clientes creada anteriormente. Hacemos la traducción, guardamos y arrastramos dentro de la carpeta Customer recién creada. Inicialmente, las entradas creadas no aparecen traducidas en el árbol. Cuando cerremos y volvamos a abrir, se actualizará y aparecerán las entradas con sus nombres traducidos.

3.2. Asignación de perfiles (Seguridad de la Compañía)

En la siguiente figura se resumen las acciones a desarrollar para la asignación de estradas de menú a perfiles.

Como estas tareas se refieren a acciones propias de la compañía, ingresamos a Libertya con el perfil Configuración de la Compañía. Dentro de la opción Seguridad, accedemos a Mantenimiento de Diagramas Árbol

Elegimos el árbol correspondiente al perfil donde queremos añadir la entrada, en este caso, Administración. Sobre la derecha se despliega el listado completo de todas las entradas de menú y sobre la izquierda el árbol del perfil Administración.
En el lado derecho buscamos Juguetes, (Toys). Con la flecha verde, (recuadrada en rojo en la figura siguiente) pasamos esta entidad a la lista de la izquierda. Luego la podemos arrastrar a la ubicación que queramos dentro del árbol. Un detalle muy importante: la flecha doble azul, copia TODAS las entradas al árbol.

Siguiendo el mismo procedimiento, vamos al árbol del perfil de Ventas y agregamos nuestra entrada a la Ventana Simplificada de Clientes y su carpeta contenedora. Reordenamos, reubicando las entradas al comienzo del árbol.

Vamos ahora a la ventana de Perfil ya que no es suficiente poner las entradas en el menú, también hay que habilitar el acceso a la ventana para los distintos perfiles.
Para el perfil Administración vamos a la pestaña Acceso a Ventana.

Creamos un nuevo registro y en el campo Ventana seleccionamos nuestra ventana Juguetes (Toys). Le damos permiso de escritura y lo guardamos. (Utilizamos el mismo procedimiento para dar acceso a la Ventana Simplificada de Clientes en el perfil de Ventas)

Si ahora nos conectamos a Libertya con el perfil de Administración, visualizamos la entrada de Juguetes.

Haciendo doble click en la misma, vemos la ventana de Juguetes, creada anteriormente.

Si vamos al perfil de Ventas, vemos la entrada para la Ventana Simplificada de Clientes.

Haciendo doble click, vemos la ventana, tal cual la habíamos creado, con sus tres pestañas.

  1. == V. Columnas y Campos ==

En la siguiente figura se resumen los puntos a estudiar relativos a la parametrización de Columnas y Campos.

  1. === 1. Tipos de datos de columnas ===

A partir del tipo de dato, varía la forma de visualización de los campos asociados a las columnas. En el esquema a continuación se resumen los diferentes tipos de datos

En la siguiente figura vemos, por ejemplo, en la ventana de entidades comerciales, el campo Valor esperado que es un Tipo de Dato Número, ya que permite la incorporación de dos decimales. Vemos en el campo Primera Venta, un tipo de dato Fecha. En este caso, el botón control abre un calendario que nos permite elegir la fecha.

Vemos a continuación un ejemplo de tipo de dato booleano (SI / NO)

En los casos de campo numérico, el botón control, despliega una calculadora que nos permite ingresar el valor.

En la siguiente figura vemos un tipo de dato Cadena. No permite ingresar <ENTER> o <TAB>, solo letras, números y algunos caracteres especiales.

En la pestaña de Clientes, tenemos un ejemplo de tipo de dato Memo en el campo Situación de Crédito. Nos permite ingresar hasta tres lineas y podemos ingresar <ENTER>

En la siguiente figura vemos un campo tipo Lista.

El botón control despliega la lista con los valores predeterminados, que están almacenados en el diccionario de datos. El campo sólo podrá tomar uno de estos valores, ya que el ingreso manual esta inhabilitado.

Para los tipos de dato de Referencia, tenemos que un campo hace referencia a otra tabla, por lo que desde esta definición, determinamos la relación entre tablas (clave foránea de una columna de una tabla, contra otra tabla). Como ejemplo, vemos el campo Grupo que es una referencia a la tabla de Grupos de Entidades Comerciales.

Este campo es un ejemplo de TableDir.
Tanto TableDir como Tabla se visualizan como un conjunto de opciones disponibles.

En caso de un tipo de dato Búsqueda, el control abre la pantalla de búsqueda y también tiene autocompletar si escribimos parcialmente en el campo. Como ejemplo, ingresamos con el perfil de Ventas y en la ventana de Facturas de Clientes, vemos el campo Entidad Comercial

El control, en este caso nos abre el cuadro de búsqueda.
Esto se suele utilizar cuando hacemos referencia a tablas con gran volumen de datos. Si hay pocos datos, alcanza con Tabla o TableDir

Para ver más en detalle los tipos de datos de Referencia. (Tabla, TableDir y Búsqueda), vamos al diccionario de datos, a la tabla C_BPartner.

En la pestaña Columna, en modo grilla, vemos todas las columnas. Elegimos la columna Business Partner Group:

Accedemos a ver sus detalles. Vemos que el tipo de dato es TableDir, tal como señala le flecha verde en la figura a continuación.

Cuando el tipo de dato es TableDir, el sistema va a tratar de inferir la tabla referenciada a partir del nombre de la columna.

Si queremos utilizar este tipo de dato, la columna se debe llamar igual que la tabla referenciada con el agregado del sufijo _ID.

En caso de que el nombre de la columna no respete esta condición, se va a producir un error en tiempo de ejecución, porque para el sistema la tabla referenciada no existe.

Si quisiéramos tener en la tabla C_BPartner una segunda columna que referencie a la tabla C_BP_Group, no lo podríamos implementar con un tipo de dato TableDir, ya que esto implicaría tener dos columnas con el mismo nombre en una tabla, lo cuál no esta permitido.

Para evitar este problema, existe el tipo de dato Tabla.

Siempre en la tabla C_BPartner, vemos que en la pestaña de clientes podemos definir una tarifa de ventas y en la de proveedor, una tarifa de compras.

Como en realidad ambas tarifas se guardan en la misma tabla (M_PriceList), aquí podremos ver un ejemplo del uso del tipo de dato Tabla.

Si vamos a la columna de tarifa de ventas, vemos que el tipo de dato es TableDir y que el nombre de la columna es M_PriceList_ID, con lo cual va a hacer referencia a la tabla M_PriceList.

La columna de la tarifa de compras, hay que definirla con otro nombre, en este caso PO_PriceList_ID.
Vemos que el tipo de dato es Tabla, como lo señala la flecha verde.

Esto habilita el campo Valor de Referencia donde debemos indicar la tabla a la cual hacemos referencia
Es decir, que para el tipo de dato Tabla, no se intentará inferir el nombre de la tabla desde el nombre de la columna, sino que el sistema lo obtiene directamente desde el valor de referencia. En la lista desplegable del campo Valor de Referencia aparecen todas las tablas del sistema.

Vamos ahora a la tabla C_Invoice, que es la tabla de facturas. Recordemos que en la ventana de facturas, para el campo Entidad Comercial se nos despliega un control que nos permite hacer búsquedas. Vemos que para la columna C_BPartner_ID, que es el identificador de la tabla C_BPartner (Entidades Comerciales), el tipo de dato es Búsqueda. Aquí también se habilita el campo Valor de Referencia. En caso de no indicarlo, el sistema infiere el nombre de la tabla a partir del nombre de la columna, como en el caso de TableDir. Si definimos el valor de referencia, el sistema tomará este valor como en el caso de tipo de dato Tabla.

  1. === 2. Manejo de Referencias ===

Existen dos tipos de referencias, cuyas características se resumen en la figura a continuación.

2.1. Validación de tabla

Siempre dentro de la tabla de entidades comerciales, en la columna PO_PriceList_ID, si hacemos zoom en el valor de referencia (M_PriceList), no nos dirige a la tabla M_PriceList, sino a la referencia.
Vemos en la figura siguiente que el campo Tipo de Referencia está indicado como Validación de Tabla.

Esto se configura desde la pestaña Validación de Tablas en la que se indica la tabla referenciada, la columna clave de esa tabla y cuál es la columna que se quiere mostrar, como vemos en la siguiente figura.

Además podríamos ingresar una cláusula Where SQL para filtrar los registros de la tabla referenciada. También podríamos incluir una clausula ORDER BY SQL, para establecer criterios de ordenamiento.

Estas referencias existen para casi todas las tablas presentes en el diccionario de datos. Si al crear una nueva tabla queremos que se pueda referenciar desde otras tablas, debemos crear una referencia de validación de tabla.

2.2. Validación de lista

Cada valor que pueda tomar una lista reside en el diccionario de datos. No es un registro de una tabla. Tomemos el ejemplo de la tabla Juguetes. Le agregamos una columna Type que nos va a permitir definir los distintos tipos de juguetes. Definimos el tipo de dato como Lista.

Hacemos zoom en el campo Valor de Referencia que nos lleva a la ventana Referencia, en la cual vamos a crear una nueva validación de lista. Completamos los datos y guardamos.

Desde la pestaña Validación de Lista, definimos cada uno de los valores posibles que deseamos para nuestra lista. Los datos relevantes a ingresar son la clave de búsqueda (1 o 2 caracteres), que es lo que se va a guardar en la base de datos y el nombre que es lo que se va a ver al desplegar la lista. Se definen en inglés y se realizan las traducciones.

En este caso vamos a definir P=Puzzle (Rompecabezas), B=Board Games (Juegos de mesa), D=Dolls (Muñecas) y O=Others (Otros)
Obviamente, es fundamental no repetir las claves de búsqueda. Por convención, los nombres van sin acento.
Entrando al modo grilla, aparecen los valores generados, tal como se muestra en la siguiente figura.

Volvemos a la tabla de Juguetes y en el campo Valor de Referencia actualizamos (click con el botón derecho, Actualizar) para que aparezca la referencia recién creada en la lista desplegable y la seleccionamos.

Ahora vamos a visualizar cómo quedó la ventana de Juguetes. Ya tenemos creado el campo Tipo en la ventana de Juguetes, donde podemos ver que se despliegan las opciones que hemos definido en el paso anterior.

  1. === 3. Variables de entorno ===

En la siguiente figura se sintetizan las características de las variables de entorno.

Para visualizar las variables de entorno, en cualquier ventana del sistema, entramos al menú Herramientas, opción Preferencias, en la aleta Variables de Entorno.
Las variables que comienzan con el signo # son variables del sistema, las que comienzan con el signo $ están relacionadas con cuestiones económicas y las las que comienzan con un número entero, hacen referencia al registro presente, mostrando los valores de cada columna del registro.

  1. === 4. Configuración avanzada de columnas ===

En la siguiente figura se sintetizan los temas relacionados con la configuración avanzada de columnas.

Columna de enlace a tabla principal

Nos permite definir una relación maestro-detalle entre dos tablas. Por ejemplo, para el caso de las facturas, teníamos una pestaña para encabezado y otra para líneas de factura. Esta última está representada por la tabla C_InvoiceLine
Visualizando la columna C_Invoice_ID, que es la referencia al encabezado de la factura, vemos que está marcada como columna de enlace a la tabla principal. Cuando el sistema encuentra esto, más alla de la relación definida por las claves foráneas, va a tener que ejecutar un filtro especial para indicar la relación maestro-detalle entre las dos pestañas involucradas. Cada vez que definamos una relación maestro-detalle, tendremos que tildar en la tabla que representa el detalle y en la columna adecuada el campo Columna de Enlace a Tabla Principal.

Columna de selección

Nos permite indicar que una columna debe aparecer en el diálogo de búsqueda de una ventana. En la tabla C_BPartner, en la columna Email, tildamos el campo Columna de Selección y guardamos.

Si ahora vamos a la ventana de entidades comerciales y hacemos click sobre el botón de búsqueda (binocular) vemos que el campo Email aparece entre los criterios de búsqueda.

Identificador

Estamos refiriéndonos a un identificador visual, que no hay que confundir con la clave principal de la tabla (ID). Si ingresamos en la tabla de facturas y buscamos una entidad comercial, lo que no aparece es el nombre, porque en la tabla de entidades comerciales tenemos definida la columna Name como identificador de la tabla.

Podemos definir más de una columna como identificador de la tabla. Por lo tanto, debemos definir la secuencia en la cual se ordenaran los identificadores. Por ejemplo, vamos a hacer que además del nombre de la entidad comercial, nos aparezca el código. En Libertya, por convención, todas las columnas que son clave de búsqueda se llaman Value. Vamos a definir Value como identificador y le vamos a asignar secuencia=1. En la columna Name, indicamos secuencia=2 y guardamos.

Para ver el resultado, ingresamos con el perfil de ventas y abrimos la ventana de facturas de clientes. Vemos que el campo Entidad Comercial nos aparece Código_Nombre. Los identificadores se separan automáticamente con un guión bajo.

IMPORTANTE: Definir identificador visual para cada nueva tabla creada

Lógica predeterminada

Vamos a utilizar variables de entorno para definir lógicas predeterminadas más complejas. En la tabla de Juguetes, vamos a hacer que la columna AD_Client_ID tome el nombre de la compañía como valor por defecto. Para esto utilizamos la variable #AD_Client_ID como lógica predeterminada. Para diferenciar una variable de un texto normal, la debemos encerrar entre *@*, como muestra la siguiente figura.

Algo similar podemos hacer para AD_Org_ID

Como lógica predeterminada, se puede utilizar una consulta SQL. Un ejemplo es el caso de las líneas de factura. En la tabla C_InvoiceLine la columna Line es la que define el número de línea, que se incrementa de 10 en 10. En la figura siguiente vemos la consulta SQL definida a estos fines. Para que el sistema distinga que se trata de una consulta SQL, la sentencia comienza con @SQL=

Lógica de solo lectura

Se comprueba una condición, y si esta se cumple, la columna y el campo asociado serán de sólo lectura. En la tabla Juguetes, queremos que el campo Descripción sea editable solamente si el tipo de juguete es Otros. (Si se trata de Rompecabezas, por ejemplo, la descripción será de sólo lectura)
En el campo Lógica de Solo Lectura utilizamos la variable de entorno Type. El signo ! Significa Distinto y la letra O, que es la clave de búsqueda de Otros, se encierra entre comillas simples, como todos las strings. Para terminar, guardamos.

En la pantalla de Juguetes, vemos el resultado de estas configuraciones. Vemos que en el registro Monopoly, que es del tipo Juegos de Mesa, el campo Descripción está desactivado.

Vamos a crear un nuevo registro. Vemos que ya nos aparecen los campos Compañía y Organización con los valores configurados anteriormente a partir de las variables de entorno. Vemos que si ingresamos un registro para un juguete tipo Otros, se habilita el campo Descripción.

A continuación se enumeran los operadores disponibles para las consultas SQL.

Reglas de validación
Se utilizan para columnas cuyo tipo de dato es Referencia. (Tabla, TableDir o Búsqueda). Nos permiten establecer filtros sobre la tabla referenciada para acotar los valores posibles que se visualizan en los combos o en las búsquedas. Vemos en la tabla de entidades comerciales, la columna de listas de precios de compra, PO_PriceList_ID.

Si hacemos zoom sobre el campo Validación vamos a la ventana de Reglas de Validación. La validación tiene un nombre, un tipo que casi siempre es SQL y el código que se va a aplicar en la tabla referenciada. En este caso, la columna IsSOPriceList de la tabla M_PriceList va a contener Y si es una tarifa de venta o N si es una tarifa de compra. De este modo el filtro aplicado nos traerá para que visualicemos sólo las tarifas de compra.

En las validaciones tenemos también la posibilidad de utilizar las variables de entorno. En el ejemplo que se muestra a continuación, estamos en la definición de la tabla M_InOut, que es la tabla de remitos, en la columna M_Warehouse_ID, que es la referencia a la tabla de almacenes. Cuando hacemos un remito y seleccionamos una organización, sólo nos trae los almacenes de esa organización.

Haciendo zoom en la validación, vemos que el código es una consulta SQL que indica que para la tabla M_Warehouse, la columna AD_Org_ID debe ser igual a @AD_Org_ID@. Última es la variable de entorno que nos trae la organización del registro que estamos visualizando en este momento.

Los códigos de validación permiten hacer uso de cualquier consulta SQL. Cualquier condición de cláusula WHERE puede ser usada como validación.

  1. === 5. Configuración avanzada de campos ===

En la siguiente figura se resumen los temas relacionados con la configuración avanzada de campos.

Grupo de campos

Se trata de agrupar campos de contenido compatible a fin de que visualmente, aparezcan en la ventana bajo un título en común.
Vamos al campo Type de nuestra ventana de Juguetes.

Hacemos zoom en el campo Grupo del Campo para crear un nuevo registro.
Definimos Nombre y Traducciones y guardamos.

Actualizamos en el campo Grupo del Campo y elegimos de la lista el grupo recién creado.

Si vamos a la ventana de Juguetes, este campo y todos los que estén por debajo se verán agrupados bajo un título común. Este título es el nombre del grupo creado.

Despliegue encriptado de un campo

En la pestaña Contacto de la ventana Entidades Comerciales, vemos el campo Password, que es el típico ejemplo de despliegue encriptado.

En la ventana de Entidades Comerciales de la compañía, en la pestaña de Contacto, vemos que la contraseña aparece encriptada.

Restricción de caracteres

Nos permite limitar el número de caracteres que se muestran en un campo.
En la ventana Medios de Cobro, vemos el campo Número de Tarjeta de Crédito, que tiene una configuración en el campo Restringir que indica que se muestran los últimos 4 dígitos.

Vemos que hay varias posibilidades de restringir el número de caracteres mostrados.

En la ventana Medios de Cobro tenemos un cobro con tarjeta y el campo se visualiza como se muestra en la siguiente figura.

Lógica de despliegue

Define la visibilidad del campo, es decir, si aparecerá o no en pantalla. En la ventana Juguetes hemos creado un nuevo campo para registrar la cantidad de piezas de los rompecabezas.

Este campo sólo es relevante cuando el tipo de juguete sea un rompecabezas. En la lógica de despliegue, definimos la condición, tal como se muestra en la siguiente figura.

Si vamos a la ventana de Juguetes, y creamos un nuevo registro, sólo al seleccionar el tipo Rompecabezas, aparece el campo Cantidad de Piezas.

  1. == VI. Informe y Proceso ==

En la siguiente figura se resumen los temas de este capítulo:

  1. === 1. Modelo del Diccionario de Datos ===

En la siguiente figura vemos como se relacionan entre sí las entidades del Diccionario de Datos relacionadas con Informe y Proceso. En el caso del Formato de Impresión, veremos que no sólo incluye parámetros de visualización, sino también indica el origen de los datos.

1.1 Revisión de las ventanas de Entidades de Informes

Como vamos a trabajar con entidades del Diccionario de Datos, ingresamos a Libertya con la compañía System y accedemos a la opción Informe y Proceso, como se muestra en la siguiente figura.

En este caso, vamos a consultar el informe de estado de Pedidos

Al ingresar, se despliega la ventana que vemos a continuación:\\En el campo Nivel de Acceso de Datos seleccionamos Compañía/Organización activa, que es una de las opciones menos restrictivas.

Aparece tildado el campo Informe, lo cual indica que no se trata de un Proceso, sino, justamente de un Informe.

En el campo Formato de Impresión aparece la relación con el formato de impresión de los datos de este informe.

Si hacemos zoom sobre el campo Formato de Impresión llegamos a la pantalla que se muestra en la siguiente figura, desde donde podremos definir las características de el informe a imprimir.

El campo Tabla determina la relación con la tabla.

El campo Vista del Informe nos permite aplicar filtros.

Desde la pestaña Elemento de Formato, vemos en modo grilla cada uno de los elementos del informe.

Cada uno de los elementos está asociado a una columna de una tabla. Desplegando el campo Columna nos aparece la lista de todas las columnas de la tabla C_Order

Si vamos a la pestaña Orden de Despliegue, vemos que sobre la izquierda aparece la lista de todas las columnas de la tabla C_Order. Sobre la derecha, se definen las columnas que aparecerán en el informe. Con los botones azules elegimos las columnas y las ordenamos según la secuencia requerida.
Guardamos los cambios efectuados.

Desde la pestaña Criterio de Ordenamiento elegimos los elementos a partir de los cuales se ordenará el informe. En este caso, primero por Número de Documento y luego por fecha del pedido.

Cada Elemento de Formato tiene su correspondiente traducción. Esta traducción es lo que se visualizará en los encabezados del informe.

Volvemos a la ventana Informe y Proceso y accedemos a la pestaña Parámetro. Este informe tiene 6 parámetros. Vemos, por ejemplo, el parámetro Organization.

Los parámetros tienen, básicamente: Nombre, Descripción y Ayuda. Los parámetros tienen, como es habitual, su traducción a todos los idiomas definidos en el sistema.

El dato principal es el contenido del campo Nombre de Columna en BD, como indica la flecha verde en la siguiente figura. Lo que se define en este campo es el nombre de una columna existente en la tabla o vista en la cual esta basado el informe. El campo Tipo de Dato es similar al que se utiliza para la definición de columnas. Definimos Valor de Referencia, en caso de no utilizar TableDir, Validación en caso de querer filtrar datos.

El campo Rango se suele utilizar para acotar fechas.

En el caso de un tipo de dato Fecha, podemos definir Fecha Inicial y Fecha Final.

  1. === 2. Edición de Informes ===

2.1 Agregar o quitar columnas al Informe

Para comenzar con este ejemplo, ingresamos a Libertya con el perfil Ventas, elegimos la opción Listado de Pedidos. Vemos los parámetros de este informe. Indicamos un rango de fechas y accedemos al informe.

Vemos que se despliega el listado de los pedidos. En este ejemplo, vamos a eliminar la columna Regla de Facturación (flecha verde) y vamos a agregar una columna que indique la Fecha y otra que indique el Neto del pedido, además sumarizado.

¿Cómo encontramos un informe o proceso dentro del Diccionario de Datos? Como vamos a trabajar con el diccionario de datos, ingresamos a la compañía System, y accedemos a la opción Menú. Desde esta opción podemos acceder a la totalidad de entradas de menú de la aplicación.

En el ángulo inferior izquierdo tenemos un campo de búsqueda. Allí escribimos el nombre de la entrada, en este caso, Listado de Pedidos. En el campo Tipo de Elemento vemos que se trata de un informe. En el campo Proceso vemos la relación al informe/proceso, en este caso RV_Order_Trx.

Si hacemos zoom en el proceso, llegamos a la definición en la ventana Informe y Proceso del informe que estábamos buscando. En este caso vamos a trabajar sobre el campo Formato de Impresión porque queremos quitar y agregar columnas.

Hacemos zoom en el campo Formato de Impresión y llegamos a la ventana donde está la definición del formato del informe.

En la pestaña Orden de Despliegue sacamos la columna Regla de Facturación y agregamos la columna Fecha del Pedido y Total de Líneas. Reordenamos y Guardamos.

Ahora debemos realizar la edición de los elementos, para lo cual vamos a la pestaña Elemento de Formato. Comenzamos con la fecha. Verificamos que esté traducida y en este caso le cambiamos la traducción para que sea más corta. En la siguiente figura se señala la columna correspondiente en la tabla.

Vamos a editar Total de Lineas poniendo Importe Neto.

Tildamos además el campo Suma Calculada para que haga la sumatoria total. Guardamos los cambios.

Vamos nuevamente a visualizar el informe con las modificaciones realizadas. IMPORTANTE: Para que el formato se actualice, debemos reiniciar el cliente ya que en general, estos formatos son guardados en caché para que se carguen más rápidamente.

Vemos el importe neto totalizado.

2.2 Agregar algún filtro al origen de datos

Continuando con el mismo ejemplo, en el listado vemos que aparecen todos los pedidos, incluso los que están en borrador. Por ejemplo si visualizamos el pedido 50032, vemos que está en estado Borrador. Si quedemos que el informe sólo muestre los pedidos en estado Completado o Cerrado, debemos configurar un filtro de datos. Desde la ventana de Formato de Impresión, en el campo Vista del Informe (que no tiene nada que ver con una vista de la base de datos, es otra entidad) definimos los filtros adicionales.

Si hacemos zoom en dicho campo, vemos que nos muestra la descripción de la vista, que es muy sencilla, sólo tiene un nombre y la tabla en la cual está basada, en este caso C_Order.

Definimos una cláusula Where indicando que sólo muestre los registros donde el estado sea CO (Completed) o CL (Closed). Para esto hacemos referencia a la columna DocStatus. Esta columna existe en todas las tablas que se refieran a documentos para indicar el estado de los mismos.

No alcanza con asociar la vista al formato de impresión, sino que también hay que indicarla en el campo Vista del Informe en la ventana de Informe y Proceso. Guardamos los cambios.

Volvemos a entrar con el perfil de ventas y ejecutamos nuevamente el informe, para comprobar que se haya aplicado el filtro. Vemos que ya no aparece el pedido 50032.

2.3 Agregar o editar los parámetros del Informe

Continuamos con el ejemplo del listado de pedidos. La pantalla inicial de ingreso al informe es la que nos muestra los parámetros definidos. En este caso, Organización, Entidad Comercial, Comercial/Usuario y rango de Fechas

Queremos agregar el nuevo parámetro Tipo de Documento y que la lista de selección sólo nos muestre aquellos que aparecen en la ventana de pedidos, que son, Pedido y Presupuesto.
Desde la definición de Informe y Proceso, vamos a la pestaña de parámetros.

Agregamos un nuevo parámetro que llamaremos Document Type. Le asignamos secuencia 35 para que quede inserto entre los parámetros con secuencia 30 y 40. Tenemos que completar el campo Nombre de Columna en BD, en este caso, C_DocTypeTarget_ID. Si no conocemos el nombre de la columna, podemos ir a Ventana, Pestaña y Campo, buscar el campo en la ventana de Pedidos (Sales Order) y ver a qué columna de la base de datos está asociado. En Tipo de Dato indicamos Tabla y en Valor de Referencia la tabla asociada que en este caso es C_DocType. Guardamos.

Hasta ahora, con esta configuración, la lista desplegable nos mostraría todos los tipos de documentos definidos en el sistema. Vamos a definir una validación para que sólo aparezcan Pedidos y Presupuestos.
Para encontrar el tipo de validación adecuado, podemos ir a Tabla y Columna y buscar en la tabla C_Order (que es la de Pedidos) la columna C_DocTypeTarget_ID que es la que nos interesa. Allí podremos ver cual es la validación aplicada en este caso.

Vamos a utilizar la misma validación para el parámetro de modo que se nos desplieguen los mismos tipos de documento que en la ventana de Pedidos de Clientes. En la lista desplegable del campo Validación encontramos la validación elegida, seleccionamos y guardamos. Como siempre, efectuamos las traducciones, en este caso, desde la pestaña Traducción de Parámetro. Con esto tenemos definido completamente el parámetro.

Vamos a verificar ejecutando el informe Listado de Pedidos en el perfil de Ventas. Vemos que se agregó el parámetro Tipo de Documento, tal cual lo definimos.

  1. === 3. Creación de nuevos informes ===

En la siguiente figura vemos un resumen de los pasos a seguir para la creación de nuevos informes.

3.1 Creación de un nuevo informe a partir de una vista

3.1.1 Definición de la vista en la Base de Datos

Pretendemos que contemple todas las transacciones de una entidad comercial: Pedidos, Remitos, Facturas y Cobros o Pagos. Para esto utilizamos el siguiente script de creación de la vista en el PGAdmin.

CREATE OR REPLACE VIEW libertya.c_bpartner_trx_v AS

----------------------------------------------------------------------------------

-- Datos de Pedidos

----------------------------------------------------------------------------------

SELECT
-- Columnas obligatorias

ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby,
-- Datos del pedido

c_bpartner_id, c_doctype_id, documentno, docstatus, dateordered as datetrx,grandtotal::numeric(22,2),
-- Referencias

c_order_id, null::integer as m_inout_id, null::integer as c_invoice_id, null::integer as     c_payment_id
FROM libertya.c_order
WHERE docstatus IN ('CO','CL')
UNION
----------------------------------------------------------------------------------

-- Datos de Remitos

----------------------------------------------------------------------------------

SELECT
-- Columnas obligatorias

ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby,
-- Datos del remito

c_bpartner_id, c_doctype_id, documentno, docstatus, movementdate as datetrx,null::numeric(22,2) as   grandtotal,
-- Referencias

null::integer as c_order_id, m_inout_id, null::integer as c_invoice_id, null::integer as c_payment_id
FROM libertya.m_inout
WHERE docstatus IN ('CO','CL')
UNION
----------------------------------------------------------------------------------

-- Datos de Facturas

----------------------------------------------------------------------------------

SELECT
-- Columnas obligatorias

ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby,
-- Datos de la factura

c_bpartner_id, c_doctype_id, documentno, docstatus, dateinvoiced as datetrx,grandtotal::numeric(22,2),
-- Referencias

null::integer as c_order_id, null::integer as m_inout_id, c_invoice_id, null::integer as     c_payment_id
FROM libertya.c_invoice
WHERE docstatus IN ('CO','CL')
UNION
----------------------------------------------------------------------------------

-- Datos de Cobros/Pagos

----------------------------------------------------------------------------------

SELECT
-- Columnas obligatorias

ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby,
-- Datos del Cobro/Pago

c_bpartner_id, c_doctype_id, documentno, docstatus, datetrx, payamt::numeric(22,2) as grandtotal,
-- Referencias

null::integer as c_order_id, null::integer as m_inout_id, null::integer as c_invoice_id,     c_payment_id
FROM libertya.c_payment
WHERE docstatus IN ('CO','CL');

ALTER TABLE libertya.c_bpartner_trx_v OWNER TO libertya;

Una vez ejecutada la consulta en el PGAdmin nos queda definida la vista en la base de datos.

3.1.2 Definición de la vista en el Diccionario de Datos

Entramos como siempre a la compañía System a la ventana de Tabla y Columna. Vamos a crear un nuevo registro donde el nombre de tabla lo hacemos coincidir con el nombre de la vista en la base de datos. Completamos en campo Nombre y tildamos Vista (flecha verde) para que cuando ejecutemos el proceso Importar Tabla, el sistema sepa que tiene que ir a buscar dentro del conjunto de definiciones de vista y no en las definiciones de tabla.

Ejecutamos el proceso para importar las columnas

Aparece una ventana de información con las columnas importadas.

Debemos chequear columna por columna el campo Tipo de Dato que es lo único que nos va a interesar, ya que siendo una vista no vamos a definir ningun tipo de lógica adicional. En general debemos verificar que estén definidos como TableDir en aquellas columnas que hacen referencia a otras tablas, como por ejemplo, C_Payment_ID.

En el caso de los tipos de datos Lista/Tabla tendremos que indicar también el valor de referencia. Por ejemplo, en la columna DocStatus, que es del tipo Lista, deberemos indicar All_DocumentStatus que es la referencia a todos los estados posibles de un documento.

Con esto tenemos definida la vista en el Diccionario de Datos.

3.2 Crear el Formato de Impresión

Siempre dentro de la compañía System, buscamos la ventana de Formato de Impresión.

Abrimos la ventana y creamos un nuevo registro para definir el formato de impresión. En el campo Nombre, ponemos en este caso Transacciones de Entidad Comercial. En el campo Tabla seleccionamos la vista recién creada. En el campo Vista del Informe no haremos ninguna configuración, ya que los filtros necesarios ya están definidos en la vista que hemos creado. En el campo Formato de Impresión de la Tabla vamos a seleccionar Informe Estándar para que se incluyan los nombres de las columnas. También tildamos el campo Encabezamiento/Pie Estándar lo que nos va a imprimir el título, los parámetros y la paginación. Guardamos el registro.

Ahora debemos incorporar los elementos de formato con el proceso Crear Copiar. Ejecutándolo nos aparece una ventana donde debemos indicar la tabla o vista desde la cuál importamos los elementos. El proceso es similar al proceso de importación de campos para una pestaña. Una vez concluido el proceso se nos muestra una ventana de información que indica la cantidad de elementos de formato importados. Deberemos volver a escribir el nombre del formato de impresión ya que el proceso de importación lo cambia. También debemos comprobar el campo Papel de Impresión.

Desde la pestaña Orden de Despliegue, seleccionamos qué columnas mostraremos y cuáles no.

Podemos reordenar las columnas de acuerdo a lo requerido. No vamos a mostrar la Entidad Comercial porque la idea es incluirla como parámetro obligatorio.

Para el criterio de ordenamiento los definimos en el siguiente orden: Fecha, Tipo de Documento y Nro. de Documento.

En la pestaña Elemento de Formato editamos cada uno de los elementos importados, verificando sobre todo las traducciones, para mejorar el aspecto de la impresión y que no se ensanchen las columnas innecesariamente. En la columna Grand Total tildamos Suma Calculada y guardamos.

3.3 Crear el Informe

3.3.1 Asignar formato de impresión y demás propiedades

En la ventana Informe y Proceso creamos un nuevo registro, asociamos el formato de impresión recién creado, completamos los campos y guardamos.
Como siempre, realizamos las traducciones.

3.3.2 Crear los parámetros del Informe

Los definimos desde la pestaña Parámetro. En este caso, van a ser 4. En primer término la Entidad Comercial, que vamos a marcar como obligatorio. Como siempre, hacemos las traducciones. El segundo parámetro es la Organización.

En tercer lugar, determinamos el Tipo de Documento.

El cuarto parámetro es la Fecha, que definimos como un rango.

Con esto el nuevo informe está completamente definido.
Ahora debemos realizar los pasos necesarios para poder visualizar el informe recién creado. Son similares a los pasos estudiados en la creación de ventanas.. En la siguiente figura, se resumen dichos pasos.

3.4 Crear la entrada de menú

Desde la compañía System vamos a la opción Menú y creamos un nuevo registro con los datos del nuevo informe, sin olvidarnos las traducciones.

3.5 Agregar la entrada al árbol de algún perfil.

Ingresamos con el perfil Configuración de la Compañía a la opción Mantenimiento de Diagrama de Árbol donde vamos a signar el nuevo informe al árbol de Administración. Agregamos la entrada y la reubicamos, en este caso, debajo de la entrada Juguetes.

3.6 Dar acceso al Informe al Perfil

Desde la ventana de Perfil, para el perfil Administración, vamos a la pestaña Acceso a Proceso y creamos un nuevo registro indicando en el campo Proceso el nombre de nuestro informe. Guardamos los cambios.

Con esto hemos finalizado con la totalidad de las acciones necesarias para la creación de un informe.
Verificamos entrando con el perfil Administración y vemos que aparece la nueva entrada de menú.

Si accedemos, nos aparecerá la pantalla con los 4 parámetros definidos.

Al ejecutar el proceso, visualizamos el nuevo informe.

Otro ejemplo, filtrando sólo las facturas del proveedor, lo que le da sentido práctico a la suma calculada.

  1. === 4. Definición de Proceso ===

Un proceso es una entidad del Diccionario de Datos que está asociada con una lógica funcional que es la que se encarga de desarrollar las tareas y que se encuentra en los binarios del sistema. Aquí vamos a ver cómo definir un proceso en el diccionario de datos.
Siempre con la compañía System, vamos a Informe y Proceso. Los datos son similares a los de Informe, solo que no tiene tildado el campo Informe y en el campo Nombre de Clase aparece el nombre de la clase Java que ejecuta las tareas del proceso (flecha verde). Como ejemplo, vemos el proceso encargado de generar los documentos asociados a un punto de venta.

Este proceso tiene un único parámetro, que es justamente el número del punto de venta. La definición de parámetros es igual a lo que hemos estudiado en la definición de Informes.

  1. == VII. Componentes Libertya ==

En la siguiente figura se resumen los temas a estudiar referidos a los componentes Libertya.

  1. === 1. Conceptos generales del Framework ===

En la siguiente figura se resumen las características generales del framework de componentes.

La lógica de negocios incluye programación Java, que no forma parte del contenido de este capítulo.
Cuando hablamos de CORE-SAFE nos referimos al hecho de que nuevas versiones del CORE de Libertya no inhabilitan al instalarse, los componentes creados con alguna versión previa.

Una vez definidos, los componentes serán portables entre distintas instalaciones de Libertya. Hay componentes predefinidos, por ejemplo Locale AR, que contiene la lógica necesaria para adaptar el sistema a la legislación argentina.
Al trabajar con componentes, lo que desarrollamos son, en realidad, versiones del componente. Todos los cambios que hagamos en el diccionario de datos o en los datos de la compañía, se registran en una bitácora, que es una tabla más de la base de datos, de modo que se puedan exportar estos cambios registrados, en forma de componente.

  1. === 2. Creación de un Componente ===

En la siguiente figura se resumen los pasos necesarios para crear un componente. Tomamos la última versión de Libertya y trabajamos con una base de datos aislada y limpia, que se va a utilizar exclusivamente para el desarrollo de componentes. No se debe trabajar con una base que esté en producción en la cual ya se hayan implementado cambios en el diccionario de datos y/o en los datos de la compañía. Luego nos conectamos a la compañía System y definimos un nuevo componente y versión. A continuación comenzamos el desarrollo de la versión, indicando al sistema que vamos a iniciar tareas de cambio, de modo de activar la bitácora. Ampliamos el diccionario de datos como es habitual (crear ventanas, campos, tablas, etc.). Una vez finalizados los cambios, debemos indicar que hemos dado fin a la tarea, de modo de detener la grabación en la bitácora. Finalmente exportamos el componente mediante el proceso Exportar Componente.

Como ejemplo vamos a desarrollar un componente que engloba todas las modificaciones que hicimos al crear la tabla y la ventana de Juguetes. Ya tenemos creada una base de datos limpia a la que llamamos libertya_comp_toys, como vemos en la siguiente figura.

Nos conectamos con la compañía System para crear un nuevo componente. Accedemos a la opción Componentes.

Creamos un nuevo registro y completamos los datos. Los campos Nombre Público y Autor son informativos. El campo Nivel de Núcleo establece prioridades de ejecución. El nivel 0 (cero) está reservado para el CORE y el 1 (uno) para localizaciones, por ejemplo Locale AR para Argentina. A nuestro componente le pondremos nivel 2. El campo Prefijo incluye un dato que son 4 letras en mayúscula que es utilizado para definir los identificadores que se vayan generando en el diccionario de datos y para desambiguación de nombres en tablas. En el campo Nombre de Paquete se indica el nombre de la clase Java que va a utilizar en el componente. En este caso, sólo lo definimos ya que no estudiaremos aquí la programación.

En la pestaña Versión de Componente indicamos el número de versión y el nombre y guardamos. A continuación ejecutamos Comenzar Desarrollo. Con este proceso se activa la bitácora y se comienzan a grabar los cambios que hagamos en el diccionario de datos y en los datos de la compañía.

Vemos que aparece tildado el campo En Desarrollo y el botón de proceso cambia a Finalizar Desarrollo

Debemos hacer las modificaciones en el diccionario de datos, que son las mismas que ya realizamos cuando creamos la tabla y la ventana de Juguetes, pero ahora en el contexto del desarrollo de un componente. Para no reiterar, suponemos que ya están realizadas todas las modificaciones en el diccionario de datos y nos concentramos en los procesos necesarios para el desarrollo de la versión del componente. En el desarrollo de componentes tenemos dos diferencias respecto de lo estudiado anteriormente. En primer lugar, en todas las entidades que generemos, debemos indicar la versión de componente, tal como muestra la figura.

La otra diferencia es que si hacemos doble click sobre la información del registro (ángulo inferior derecho) nos aparece además de los datos habituales, la información de la bitácora de esta entidad. Para la tabla M_Toy, vemos a continuación la información que se despliega.

Vemos otros campos desplegados de la misma información.

Del mismo modo, para la ventana de Juguetes (Toys), en el campo Versión de Componente vemos indicado el nombre del componente.

Vemos a continuación la información de bitácora para esta ventana.

Una vez concluidos los cambios, finalizamos el desarrollo.
Es necesario que un componente esté finalizado para poder exportarlo.

Vamos ahora a ejecutar el proceso Exportar Componente desde el menú. En el campo Versión de Componente elegimos el nombre del que acabamos de desarrollar. En el campo Directorio indicamos la ruta a un directorio previamente creado donde queremos exportar los archivos.

Cuando ejecutamos el proceso, lo que hace es leer los cambios realizados desde la bitácora y crear los archivos necesarios para que el componente sea portable. Terminado el proceso, aparece una pantalla de información que nos indica que la exportación se ha realizado correctamente.

Una vez culminada la exportación, podemos ir al directorio a visualizar los archivos generados.

El archivo manifest.properties nos muestra los datos generales del componente. En general, no debe ser editado ya que contiene la meta información del componente.

El archivo preinstall.sql nos propone los script de creación y modificación de las tablas en la base de datos. En este caso, es conveniente llevar manualmente las modificaciones que hagamos en tablas y columnas y luego comparar con este archivo, ya que no todas las entidades son generadas automáticamente.

El archivo install.xml contiene todas las modificaciones realizadas en el diccionario de datos. No deberíamos editarlo manualmente.

El archivo postinstall.xml contiene los cambios efectuados en la compañía. Por ejemplo, aquellos realizados desde Mantenimiento de Diagrama de Árbol o los que efectuamos cuando damos acceso a una ventana para un perfil. Tampoco deberíamos editar manualmente este archivo.

Una vez que tenemos todos estos archivos, hay que generar un archivo .jar que los contenga. Desde el directorio donde tenemos los archivos, ejecutamos el comando jar cvf seguido del nombre que le queremos dar al paquete y un asterisco * para que procese todo lo que se encuentra en ese directorio.

Una vez ejecutado, ya tenemos nuestro componente empaquetado.

En la siguiente figura se ve el archivo .jar ya generado, listo para ser distribuido a otras instancias de Libertya

  1. === 3. Instalación de Componentes ===

A continuación se resumen los pasos a seguir para la instalación de componentes.

Vamos a ingresar al sistema con otra base limpia, sobre la cual instalaremos el componente. En este caso, la base libertya_clean.

Ingresamos con la compañía System y desde el menú elegimos la opción Instalador de Componentes

Completamos los datos que nos solicita indicando el archivo .jar de nuestro componente. Cuando lo seleccionamos, nos aparece el despliegue del archivo manifest.properties. Hacemos click en Instalar, para comenzar el proceso.

Se nos muestran todas las operaciones que se van realizando y finalmente aparece una ventana de fin de instalación.

Para verificar, accedemos con el perfil de Administración y vemos que ya nos aparece la ventana de Juguetes.