2.5Eventos y tratamientos WLangage
Lo esencial en 30 segundos
- WinDev funciona por eventos: el código no se ejecuta de principio a fin, sino que se desencadena en reacción a una acción (hacer clic, abrir, modificar); estos bloques se llaman tratamientos.
- Cada elemento tiene su lista de eventos: ventana (declaraciones globales, inicialización, cierre), botón (clic), campo de entrada (entrada, salida, modificación), tabla (selección/mostrar fila).
- Colocar cada tratamiento en el lugar adecuado y mantener los eventos cortos delegando la lógica en procedimientos con nombre; desconfiar de los efectos en cascada.
Mini-caso hilado — Yacine coloca el código en el lugar adecuado
Yacine, desarrollador WinDev en una pyme de venta de material eléctrico en Orán, trabaja en la ventana de entrada de pedidos de la aplicación de gestión. Debe comprender qué código se ejecuta y cuándo. Escribe la carga de los datos y la preparación de la pantalla en la inicialización de la ventana, y la limpieza en el cierre. El control de entrada de la cantidad lo coloca en el evento Salida del campo correspondiente — para una respuesta inmediata al usuario — y no en el clic del botón Validar. El clic del botón, por su parte, sigue siendo corto: orquesta y delega la lógica de negocio (cálculo de totales, control del stock) en un procedimiento con nombre reutilizable. Por último, desconfía de los efectos en cascada: un código que modifica un campo puede desencadenar su evento de modificación.
Caso autónomo de esta sección: reaparece en el curso, el esquema, el guion y el reto de 48 h de la sección 2.5.
1. Un código desencadenado, no lineal
WinDev funciona por eventos: el código no se ejecuta de principio a fin como un guion, sino que se desencadena en reacción a algo (el usuario hace clic, se abre una ventana, cambia un valor). Comprender qué código se ejecuta y cuándo es indispensable — es la fuente de confusión n.º 1 entre los principiantes. Cada elemento posee una lista de eventos donde se escribe código, llamados tratamientos.
2. Los tratamientos más utilizados
Para una ventana: declaraciones globales (variables comunes, ejecutadas primero), inicialización (al abrir: cargar los datos, preparar la pantalla), cierre (limpieza, controles antes de salir). Para un botón: clic (la acción que hay que ejecutar). Para un campo de entrada: entrada (el campo recibe el foco), salida (se sale de él — ideal para controlar la entrada), modificación (el contenido cambia). Para una tabla: selección y visualización de una fila. El orden de ejecución: declaraciones globales, luego inicialización, luego los eventos a lo largo de las acciones.
3. Poco código, en el lugar adecuado
Buenas prácticas: poner poco código en los eventos y delegar en procedimientos con nombre (el código de negocio no debe vivir en un botón, de lo contrario no es reutilizable, ni comprobable, ni mantenible); escribir cada tratamiento en el lugar adecuado (un control de entrada va en la salida del campo, no en el clic del botón Validar); y desconfiar de los efectos en cascada (un código que modifica un campo puede desencadenar el evento de modificación de ese campo).
🔎 Ejemplo concreto — 🔎 Ejemplo concreto — ¿Dónde escribir el control de entrada?
El lugar adecuado marca la diferencia: Yacine coloca el control en la salida del campo.
// Initialisation de la fenetre FEN_SaisieCommande
FiltreStocks() // charger / preparer l'ecran
// Sortie du champ SAI_Quantite -> controle de saisie immediat
SI SAI_Quantite <= 0 ALORS
Info("La quantite doit etre positive")
RETOUR
FIN
// Clic du bouton BTN_Valider -> court, il DELEGUE
ValiderCommande() // logique metier dans une PROCEDURE nommee
Lecture : initialisation = charger ; sortie de champ = controler
Reflexe : evenements courts, logique metier dans des PROCEDURES
Lectura: el control de entrada vive en la salida del campo (respuesta inmediata), no en el clic del botón Validar.
Lección: el evento orquesta y delega en un procedimiento con nombre: el código de negocio sigue siendo reutilizable, comprobable y mantenible.
Vocabulario de la sección
- Evento / tratamiento
- El código no es lineal: se desencadena en reacción a una acción (clic, apertura, cambio de valor). Estos bloques se llaman tratamientos.
Ejemplo sencillo: Yacine escribe el clic del botón Validar del pedido.
Lo que no es: un guion ejecutado de principio a fin, una sola vez.
Reflejo: reaccionar a una acción → un evento, es decir, un tratamiento.
- Declaraciones globales
- El tratamiento ejecutado primero para una ventana: en él se declaran las variables comunes a toda la ventana.
Ejemplo sencillo: Yacine declara allí el número de pedido actual.
Lo que no es: la inicialización, ejecutada después
Reflejo: variables compartidas por la ventana → las declaraciones globales.
- Inicialización / Cierre
- La inicialización se ejecuta al abrir la ventana (cargar los datos, preparar la pantalla); el cierre, al salir (limpieza, controles).
Ejemplo sencillo: Yacine carga el catálogo en la inicialización.
Lo que no es: un clic de botón de validación.
Reflejo: al abrir o al salir → inicialización / cierre.
- Entrada / Salida / Modificación
- Los tratamientos de un campo de entrada: entrada (toma del foco), salida (se sale de él — ideal para controlar la entrada), modificación (el contenido cambia).
Ejemplo sencillo: Yacine controla la cantidad en la salida del campo.
Lo que no es: un control colocado en el clic del botón Validar.
Reflejo: controlar una entrada → la salida del campo.
- Efectos en cascada
- Un código que modifica un campo puede desencadenar el evento de modificación de ese campo, provocando encadenamientos inesperados (incluso bucles).
Ejemplo sencillo: Yacine anticipa que asignar SAI_Total desencadena su modificación.
Lo que no es: un evento totalmente aislado del resto de la ventana.
Reflejo: modificar un campo por código → pensar en los efectos en cascada.
En la práctica — En la práctica — Colocar el código en el lugar adecuado
- Abra la lista de tratamientos de una ventana y localice el orden: declaraciones globales, luego inicialización, luego los eventos a lo largo de las acciones, como Yacine.
- Escriba la carga de los datos y la preparación de la pantalla en la inicialización de la ventana.
- Coloque los controles de entrada en la salida del campo correspondiente (no en el clic del botón Validar) para una respuesta inmediata al usuario.
- Mantenga los eventos cortos: delegue la lógica de negocio en procedimientos con nombre, y desconfíe de los efectos en cascada cuando un código modifica un campo.
Guion paso a paso — colocar el código como Yacine (4 min)
1) Abra una ventana y muestre su lista de tratamientos (declaraciones globales, inicialización, cierre). 2) Ponga la carga de los datos en la inicialización. 3) Coloque el control de entrada en la salida del campo correspondiente. 4) Mantenga corto el clic del botón Validar: llama a un procedimiento con nombre. 5) Pruebe la modificación programática de un campo y observe el efecto en cascada.
Regla de oro: poco código en los eventos, y el código de negocio en procedimientos reutilizables.
Plantilla para copiar y pegar — dónde poner cada tratamiento
FENETRE : Declarations globales -> Initialisation -> ... -> Fermeture
BOUTON : Clic (court, il ORCHESTRE et delegue)
CHAMP : Entree / SORTIE (= controler la saisie) / Modification
TABLE : Selection de ligne / affichage de ligne
Ordre : globales -> initialisation -> evenements au fil des actions
Regles : (1) peu de code dans les evenements
(2) logique metier dans des PROCEDURES nommees
(3) se mefier des EFFETS EN CASCADE
Inicialización
Yacine carga el catálogo y prepara la pantalla al abrir la ventana.
Control en la salida
Yacine controla la cantidad en la salida del campo, para una respuesta inmediata.
Clic que delega
El clic del botón Validar llama al procedimiento ValiderCommande() en lugar de contenerlo todo.
Efecto en cascada
Yacine anticipa que asignar SAI_Total desencadena el evento de modificación del campo.
✓ Buenas prácticas
- Poner poco código en los eventos, delegar en procedimientos.
- Escribir el control de entrada en la salida del campo.
- Desconfiar de los efectos en cascada.
✗ Errores frecuentes
- Poner toda la lógica de negocio en el clic de un botón.
- Controlar una entrada en el clic de Validar en lugar de en la salida del campo.
- Ignorar los efectos en cascada al modificar por código.
Puntos clave
- WinDev funciona por eventos: el código se desencadena, no se ejecuta linealmente.
- Tratamientos esenciales: ventana (globales, inicialización, cierre), botón (clic), campo (entrada, salida, modificación), tabla (fila).
- Eventos cortos + lógica de negocio en procedimientos con nombre (reutilizable, comprobable, mantenible).
- Colocar cada tratamiento en el lugar adecuado y desconfiar de los efectos en cascada.
Reto 48 h — aplícalo mañana
Como Yacine, tome una ventana de su aplicación y traslade el control de entrada de un campo del clic del botón Validar a la salida del campo. Mantenga después el clic del botón corto delegando la lógica en un procedimiento con nombre, y luego provoque una modificación de campo por código para observar un efecto en cascada. Explique en una frase por qué la lógica de negocio no debe vivir en un botón.
- Sé qué tratamiento se ejecuta en cada momento (orden de los eventos).
- Coloco cada tratamiento en el lugar adecuado (control en la salida del campo).
- Mantengo los eventos cortos y delego en procedimientos con nombre.
Preguntas frecuentes
¿Por qué no hay que escribir toda la lógica de negocio en el clic de un botón?
Porque ese código no es reutilizable (la misma regla sirve en otras pantallas, informes, importaciones), ni comprobable, ni mantenible. El evento debe orquestar y delegar en procedimientos con nombre, donde vive el código de negocio compartido.
¿Dónde colocar un control de entrada: en el botón Validar o en el campo?
En la salida del campo correspondiente: el usuario obtiene una respuesta inmediata en el momento en que abandona el campo. Colocarlo en el clic del botón Validar retrasa el control y mezcla la validación de interfaz con la acción de validación.
¿Por qué no hay que escribir toda la lógica de negocio en el clic de un botón?