4D v14

Script del vídeo

Inicio

 
4D v14
Script del vídeo

Script del vídeo  


 

 

En este vídeo, vamos a aprender cómo conservar una selección y a realizar funciones (unión, intersección, diferencia).

Los conjuntos son una forma sencilla de intersectar las listas de registros de una misma tabla.

Los conjuntos son una de las formas que puede utilizar para poner una selección en espera de modo que pueda utilizarse de nuevo más adelante.
Al realizar una operación en dos conjuntos, se obtiene un nuevo conjunto que contiene el resultado de la operación realizada (de acuerdo con la teoría de conjuntos convencional).

Vamos a aplicar estos principios de inmediato a la lista de intervenciones en el formulario de navegación. Podemos crear un juego de la selección actual.

Vamos a crear un botón que busque todas las intervenciones que se iniciaron antes de las 9:00 a.m.

Aquí está el método del botón:

 QUERY([Interventions];[Interventions]Intervention_Time

y vamos a crear un segundo botón que nos dará todas las intervenciones que no se han realizado al 100%. Podemos programar este botón así:

 QUERY([Interventions];[Interventions]Progress<100)

Por el momento, en el archivo que importamos, el % de avance no se especifica.

Así que primero vamos a aplicar una fórmula en todas las intervenciones. Aquí tenemos una selección de 11,732 intervenciones en las que vamos a aplicar una fórmula y especificar que:

  • el avance es igual al valor de redondeado (devuelto por Round) del resto (calculatado con Mod) de Random (que devuelve un valor de 0 a 32,767), el Mod por 100 redondeado a la décima más cercana.

Si ahora hacemos un informe para comprobar lo que los valores de % de avance se han llenado, vemos que van de 0 a 100.

Por supuesto, si hacemos clic en el primer botón y luego en el segundo, habremos perdido la selección creada durante el primer clic.
Así que en el primer botón, puede ser útil, después de la búsqueda, conservar la información en un conjunto que podemos llamar "Morning_Interventions".

 CREATE SET([Interventions];"Morning_Interventions")

Igualmente, aquí, luego de recuperar el conjunto de las intervenciones que no han terminado, llamamos este conjunto "Interventions_in_progress".

 CREATE SET([Interventions];"Interventions_in_progress")

Entonces podemos comparar los conjuntos:

  • ya sea añadiéndolos para obtener el conjunto de las intervenciones de la mañana + las intervenciones en curso.
    Duplicamos el botón e indicamos que se trata de las intervenciones antes de las 9:00 am + los proyectos en curso;
    Luego escribimos
     UNION("Morning_Interventions";"Interventions_in_progress";"Interventions_Result")

    en un tercer conjunto llamado Interventions_Result para no sobrescribir los dos primeros conjuntos.
  • Si queremos las intervenciones de la mañana que todavía están en progreso, tenemos que comparar la parte común de ambos conjuntos, de modo que tenemos todas las intervenciones de la mañana que aún están en marcha. En este caso, el comando a utilizar no es  UNION, si no INTERSECTION.
  • Y si queremos obtener las intervenciones terminadas, tenemos que aplicar DIFFERENCE a los 2 conjuntos: todas las intervenciones de la mañana menos las intervenciones aún en curso nos dará el conjunto resultante.

Podemos probar las diferentes posibilidades ejecutando el formulario de navegación.
Tomamos todas las intervenciones, hay 11.732 y aquí (después de hacer clic en los botones de búsqueda), aún tenemos 11.732.

¿Por qué? Recuerde que en el vídeo anterior, añadimos en la función Navigation_Function, al final, esta línea nos da el número de registros encontrados después de que se crea una nueva  selección.

 vNumRecords:=Records in selection([Interventions])

Vamos a copiar este código y aplicarlo a los 2 botones de búsqueda.
En la actualidad, no tenemos el puntero de la tabla aquí, vamos a procesar las intervenciones.

Luego podemos copiar esta línea de código para los otros 4 botones:

  • en la diferencia
  • la intersección
  • la unión, vemos que en estos 3 botones, falta algo...
  • e igualmente aquí en el botón de búsqueda.

Ahora, si volvemos al formulario de navegación, tenemos:

  • 631 631 intervenciones antes de las 9:00 a.m.
  • 11,192 intervenciones que no han terminado.

Las intervenciones antes de las 9:00 a.m. + las intervenciones que están en un 100%, las intervenciones de las 9:00 a.m. en curso o de las 9:00 a.m. terminadas, no cambia el número que está aquí.

¿Por qué? Esto se debe a que la simple creación de un conjunto no implica su uso.
En este botón aquí, después de que hemos creado la unión que crea un tercer conjunto, se debe indicar el conjunto particular que debe ser utilizado.

Así que vamos a modificar el código y:

  • Aquí, añadimos el comando USE SET.
  • Copiar, luego, vamos a ponerlo en los otros 2 botones.
  • Añadimos la línea de utilización del conjunto en los otros 2 botones

Y de esa manera podemos probar:

  • las intervenciones en curso: tenemos 601
  • las intervenciones terminadas: tenemos 30
  • lo que corresponde a las intervenciones antes de las 9:00 am: en otras palabras, 631

Para completar este enfoque, vamos a cerrar el formulario y lanzar nuevamente el método Navigation para verificar su funcionamiento.
Si hacemos clic sobre uno de los tres botones a la derecha, un mensaje de error indica que los conjuntos no existen. Naturalmente, los conjuntos deben existir antes de que podamos usarlos.
Vamos a hacer seguimiento a la creación de estos conjuntos, haciendo clic en el primer botón de búsqueda.

Podemos ver, en la lista de la izquierda, el tema "Conjuntos",  que muestra la lista de los conjuntos existentes en el proceso se está rastreando. En la actualidad, no hay ninguno.

Cuando el método se ejecuta:

  • Damos nombre a un primer conjunto
  • A continuación, vamos a dar nombre a un segundo conjunto durante su ejecución
  • Usando el modo de seguimiento, esto nos permitirá ver la creación del tercer conjunto cuando cuando se ejecuta la primera línea.

Y luego veremos, que como el conjunto ya existe, es sólo la cantidad la que cambia.

Es necesario tener en cuenta que un conjunto es sólo una lista de registros que no necesariamente es la selección actual, ya que ahora la selección actual de la tabla Interventions contiene 601 registros.

Cuando pasamos al comando USE SET, la selección ahora contiene un número de registros que coinciden con el número indicado en el conjunto y la variable vNumRecords también se adaptará en consecuencia.

Otro uso de los conjuntos que es muy conveniente consiste en seleccionar un cierto número de registros y a continuación indicar que queremos volverlos la selección actual, es decir, que cuando hagamos clic en el botón, haya sólo estos X registros.

Para ello, debemos:

  • Programar el botón
  • Indicar que queremos una selección
  • Copiar una entrada en el método
  • Y escribir el código correspondiente.

El código es el siguiente:

 $SetName:="Userset_"+String(Milliseconds)
 GET HIGHLIGHTED RECORDS($TablePointer->;$SetName)
 USE SET($SetName)
 vNumRecords:=Records in selection($TablePointer->))

En otras palabras, vamos a:

  • Crear un nombre de conjunto (es decir, una parte de texto + la conversión a texto de los mili segundos)
  • Obtener los registros resaltados, es decir, aquellos que en los que han hecho clic en la tabla en cuestión y crear el conjunto correspondiente
  • Utilizar este conjunto
  • Volver a calcular el número de registros a los que esta cifra corresponde
  • A continuación, borrar el conjunto para liberar memoria.

Podemos probar:

  • todas las intervenciones
  • podemos seleccionar algunas
  • y trazamos el botón de selección

En este nivel, tenemos:

  • un nombre de conjunto
  • el conjunto se creará aquí, así que tenemos 3 elementos en este conjunto
  • lo usaremos para que se convierta en la selección actual de la tabla Interventions
  • recalculamos el número de registros
  • a continuación, vamos a borrar el conjunto.

En nuestro array, ahora tenemos la lista de registros que seleccionamos.

Un conjunto se compone de un bit por registro y por lo tanto no conserva el orden de clasificación.

Cuando sea necesario conservar esta información, debe utilizar comandos relacionados con las selecciones temporales:
COPY NAMED SELECTION y USE NAMED SELECTION

Aquí vamos a agregar un botón que nos permite:

  • Crear una primera selección (selección temporal T1)
  • Vamos a copiar el código en la selección temporal
  •  Y duplicar el botón: T2

Ahora tenemos la posibilidad de almacenar dos selecciones que tendrán en cuenta el orden de clasificación.

Las selecciones existen en la memoria pero no se utilizarán.

A continuación, vamos a:

  • Duplicar estos botones
  • Modificar su fórmula para solicitar el uso de estas selecciones (y aquí no es necesario especificar la tabla.)

Demos un vistazo a este ejemplo. Si tomamos todas las intervenciones:

  • Tomemos las primeras
  • Selección
  • Ordenémoslas por fecha y hora de intervención
  • Creamos una primera selección
  • A continuación, tomamos la misma selección
  • Vamos a ordenar por objeto y hora de intervención
  • Y creamos la segunda selección.

Ahora:

  • Si llamamos a la primera selección, viene ordenada de acuerdo a los criterios indicados: fecha y hora
  • Si hacemos clic en el segundo botón, se ordenan como lo solicitamos primero por objeto y luego por fecha.

 
PROPIEDADES 

Producto: 4D
Tema: Conjuntos y selecciones temporales

 
ARTICLE USAGE

Autoformación ( 4D v13)
Autoformación ( 4D v14)