Ventana Histórico de campos

Controles habituales  Conceptos básicos

La ventana cuadrante se mostrará mediante la opción Concepto > Histórico de campos

Esta ventana está compuesta de dos paneles verticales. En el izquierdo se muestra la lista de valores que han cambiado para una campo desde la creación de la BD, o los datos que se han dejado después de manipularlos en esta ventana. En el derecho hay varias pestañas para analizar y gestionar los datos históricos de cada campo.

Recordatorio:

Hay otro tipo de control de eventos (llamémosles 'físicos' en oposición a este tipo de eventos de campos históricos que son más de ámbito 'lógico'). Se definen en la librería JavaScript "\Colecciones especiales\Menús y controladores\Controladores\eventos · Controlador de eventos de la BD" y se ejecuta la función asociada al evento (que puede ser la modificación de un campo, crear o eliminar un registro, abrir o cerrar la base...). ATENCIÓN a que podemos definir un controlador de eventos particular para cada base (con un informe con el mismo código "eventos".

El tipo de evento 'lógico' digamos que controla qué valor se ha introducido en el campo y qué rango posible tenía; el 'físico' sólo comprueba si se ha modificado un valor en un registro de BD.

Pestañas Gráfica y Estadísticas:

Muestran respectivamente una gráfica de línea con todos los valores tomados por el campo en el concepto actual, y una tabla con los valores más representativos: por meses y años, los valores máximo, medio y mínimo. Sólo muestran datos si la ventana está sincronizada con un par "concepto-campo histórico" del que puedan mostrar los valores.

Pestaña Eventos:

En la pestaña eventos, se pueden definir condiciones para que se dispare un evento al cambiar un dato de un campo histórico. En ese caso, se puede ejecutar una acción como crear conceptos (por ejemplo, para generar una orden de aviso por el cambio de valor), grabar un dato en otro campo, o realizar cualquier operación que se pueda programar en una función JavaScript que se definirá en la librería "histórico · Librería del histórico de campos".

Los cuatro valores que pueden intervenir como máximo en la comprobación de si se ha verificado una condición de evento son:

1. Valor actual: el que se está introduciendo en el campo y que provoca que se realice la comprobación

2. Valor anterior: el último que había almacenado en el histórico de ese campo para ese concepto. Como la mayor parte de condiciones involucran una comparación con el valor anterior, habitualmente debe haber tenido al menos dos valores para disparar un evento.

3. Valor último que disparó un evento: se registra el último de los valores históricos que disparó un evento, con la fecha y hora en que lo hizo.

4. Valor umbral: el de referencia con el cual se compara en condiciones como 'menor que', 'mayor o igual que'...

En la lista desplegable Operador se puede elegir una condición de entre una lista de 5 opciones, para comparar con un Valor umbral del campo siguiente.

IMPORTANTE: la descripción de estos dos campos cambia dependiendo de si los valores proceden de la plantilla de eventos del campo (es decir es genérico para todos los campos de ese tipo y clase), o se ha particularizado para el campo del concepto actual. En el primer caso se rotula: "Operador y valor umbral genéricos del campo", y en el segundo, "Operador y valor umbral del actual".

1. UMBRAL CRECIENTE, Superación por encima del valor de referencia - Cuando el valor actual supere el umbral superior impuesto por el valor umbral, siendo el valor anterior inferior al de referencia y no existiendo un evento entre ambos valores. Un caso de este tipo sería ir sumando las horas de funcionamiento de una máquina de la cual hay que hacer una revisión cada cierto número de horas de funcionamiento.

2. UMBRAL DECRECIENTE, Superación por debajo del valor de referencia - Cuando el valor actual rebase el umbral inferior impuesto por el valor de referencia siendo el valor anterior superior al de referencia y no existiendo un evento entre ambos valores. Un caso podría ser el rellenado de un depósito del que se va consumiendo, al llegar un nivel mínimo de reserva.

3. DIFERENCIA - Cuando la diferencia entre el valor actual y el del último evento supere el valor de referencia. Si el valor de referencia es positivo se entiende que la toma de medidas será creciente, si no decreciente.

4. SUMATORIO - Cuando la diferencia entre el valor actual y el del último evento supere el valor de referencia. Se entiende que el valor actual es la suma de este valor más la de todas las medidas anteriores. Es el caso de un equipo de medición que puede llegar al final de su capacidad y volver a empezar a contar desde cero.

5. RANGO - Cuando el valor actual entre en el rango de la posición de la lista indicada como válida, es decir, el valor umbral será una posición del rango, y los límites de esa posición serán el anterior y el posterior (si los hay). Por ejemplo introduciendo en la lista de rangos un valor de '1000' y '3000' se obtiene la lista de selección:

-            =0
1.000     >0 <=1000
3.000     >1000 <=3000
-            >3000

si especificamos como válida la selección '1', se cumplirá con un valor de '1100' por ejemplo.

Las limitaciones serían:

  • Fechas, sólo admiten 2 condiciones: diferencia y rango (las fechas hay que introducirlas para establecer los rangos, en su formato de número entero AAAAMMDD), con un valor umbral en días.
  • Lista, sólo se pueden comparar mediante Rango, poniendo en valor umbral un valor o lista de valores separados por comas, de los códigos de opciones a verificar.
  • Booleanos, sólo se pueden comparar mediante Rango, poniendo en valor umbral el valor 0(falso) ó 1(verdadero).
  • Selección, sólo se pueden comparar mediante Rango, poniendo en valor umbral la posición válida comenzando con la 0.

La lista de operadores muestra debajo, con cada opción, una descripción de en qué consiste la condición: Por ejemplo, con la primera opción (en blanco) se muestra "Seleccione operador", con Umbral creciente, que se cumple si "actual>umbral  y anterior <=umbral" lo que quiere decir que el evento sólo se dispara una vez cuando se supera el límite umbral, para que no se dispara en todos los valores posteriores que lo superen.

En Último evento aparece el último del histórico que generó un evento, con su fecha y hora. Servirá con operadores como Diferencia y Sumatorio.

Ejecutar el siguiente procedimiento, puede contener funciones particulares en JavaScript, a ejecutar cuando se verifique una condición de evento. Para no definir funciones particulares para campos de CADA concepto, lo habitual es tenerlas definidas en la librería "histórico·Librería del histórico de campos", que al incluirse por defecto en el código, la tenemos accesible en todos. Sólo tendremos que especificar para cada par 'concepto-campo histórico' la llamada a una función.

El botón Abre histórico.xjs accede al procedimiento de librería para consultarlo o modificarlo.

En la pestaña Rangos, el rótulo de cabecera cambia (igual que hemos visto en la de Eventos), dependiendo de que la definición del rango provenga de la plantilla de rangos del campo (es decir es genérico para todos los campos de ese tipo y clase), o se ha definido uno particular para el campo del concepto actual. En el primer caso se rotula: "Rango genérico del campo" y en  el segundo, "Rango".

Los rangos se definen tecleando en el campo punto (·) uno de los valores límite, con lo que la primera vez se crearán los superiores e inferiores a ese (hasta el cero y hasta el infinito), es decir, introduciendo un valor de 1000, se crean ya 3 selecciones:
-           =0
1000     >0 <=1000
-           >1000

y cualquier nuevo valor, se situará en su posición correspondiente.

Ambas pestañas están relacionadas, porque una de las operaciones consiste en comprobar si un valor está dentro de los límites de un rango.

 

Ejemplo de definición de evento:

Supongamos un concepto de tipo espacio (planta de un edificio), que tiene un campo histórico como 'Contador de temperatura' en el que se guardan las medidas tomadas cada mes. El el campo para un concepto concreto, seleccionamos la operación 'Umbral creciente', ponemos en valor umbral '27' ºC. Cuando se vayan introduciendo valores y uno supere ese límite -por ejemplo con 28º-, y el último valor antes de ese (guardado en el histórico) no, se cumplen las condiciones para que se dispare el evento que programemos en el campo inferior.

Si tuviésemos el código Javascript:

crea_aviso (hoy+2,"N01","Aviso por aumento de temperatura");

y tenemos en librería la definición de función:

function crea_aviso (fec,cod,res)
{
  var bas= Cbas; bas.edicion=1;
  var ide= bas.orden_crea(coni,!fec?hoy():fec,cod,res); if (!ide) return 0;
  bas.ord.concami(ide)= concami;
  return ide;
}

se creará un concepto con la fecha de dos días posteriores a la introducción del dato, con un código secuencial que comienza con 'N01' y la descripción especificada, añadiendo una línea en la orden de trabajo con el concepto y el campo involucrados.

Pestaña Todas:

Es la que permite seleccionar mediante dos paneles, un par "concepto-campo histórico". Sin esta selección, la única forma de ver los valores a lo largo de tipo de un campo en un concepto es acceder a esta ventana pulsando la marca verde a la derecha de un campo histórico.

Seleccionando el campo deseado en el panel superior y el concepto en el inferior, se muestra en el panel izquierdo una lista con todos los Valores en orden descendente de Fecha de modificación. También se tiene la información de la Hora de modificación, el Usuario que la realizó y el Concepto del que procede el dato, cuando es un proceso automático de la aplicación el que lo ha rellenado. Los dos últimos no son campos editables.

La selección del par "concepto-campo" se muestra en la cabecera de la ventana, una debajo de otra, con sus descripciones.

Los valores almacenados en la lista histórica son todos los que ha contenido el campo cada vez que ha cambiado, incluso si era un valor erróneamente tecleado, pero la lista se puede manipular cambiando una fecha o corrigiendo el propio valor si es necesario, o eliminando una línea que no queremos que se guarde. Por supuesto, si queremos mantener un histórico de datos de los que ya tenemos los valores en un momento anterior a comenzar a trabajar con la aplicación, podemos introducir el histórico directamente en esta lista sin tener que pasar por el campo.