1.4Vincular los campos a los datos y manipular los registros
Lo esencial en 30 segundos
- El enlace campo ↔ rúbrica es muy productivo: ÉcranVersFichier() copia la entrada hacia las rúbricas y FichierVersÉcran() hace lo contrario para la visualización.
- Las funciones HFSQL (prefijo H) manipulan los datos: HAjoute, HModifie, HSupprime, HLitPremier/Suivant, HLitRecherche, HRAZ.
- Probar siempre HEnDehors después de una lectura o una búsqueda: de lo contrario se trabaja con datos inexistentes — o incluso se modifica el registro equivocado.
Mini-caso guiado — Yacine conecta su ficha de pedido con los datos
Yacine ha dibujado su ventana «Ficha pedido». Ahora la conecta con los datos. Primero vincula cada campo a su rúbrica: SAI_NomClient ↔ Client.Nom, SAI_Ville ↔ Client.Ville. Después escribe el código de gestión. Para crear un pedido: llama a HRAZ para vaciar las rúbricas, deja que el usuario introduzca los datos y luego ÉcranVersFichier() copia de golpe la entrada y HAjoute registra. Para buscar un cliente por su código, utiliza HLitRecherche y después prueba HEnDehors: si no se encuentra nada, muestra un mensaje claro en lugar de explotar datos fantasma. Gracias a los campos vinculados, la modificación de una ficha cabe en unas pocas líneas. Yacine retiene: el enlace automatiza el intercambio pantalla/archivo, y la prueba HEnDehors es un reflejo obligatorio.
Caso autónomo de esta sección: vuelve en el curso, el esquema, el script y el reto 48 h de la sección 1.4.
1. El enlace campo ↔ rúbrica
He aquí uno de los mecanismos más productivos de WinDev: el ENLACE entre los campos de una ventana y las rúbricas del análisis. Cuando un campo está vinculado a una rúbrica (SAI_NomClient ↔ Client.Nom), WinDev sabe dónde tomar y dónde guardar el valor.
Dos funciones hacen entonces todo el trabajo: ÉcranVersFichier() (copia la entrada de la pantalla hacia las rúbricas, antes del registro) y FichierVersÉcran() (copia los valores del archivo hacia los campos, para la visualización). Se acabaron las decenas de asignaciones manuales — y una fuente de errores menos.
2. Las funciones HFSQL
Para manipular los datos, el WLangage proporciona las funciones HFSQL, todas con prefijo H: HAjoute (añadir), HModifie (actualizar el registro en curso), HSupprime, HLitPremier / HLitDernier / HLitSuivant / HLitPrécédent (desplazarse), HLitRecherche (buscar por una clave) y HRAZ (vaciar las rúbricas en memoria antes de una entrada).
Noción clave: el REGISTRO EN CURSO. En un instante dado, un registro es «actual» en memoria, y es a él al que HModifie o HSupprime afectarán. Equivocarse de registro en curso es un error clásico.
3. El reflejo HEnDehors
Después de una lectura o una búsqueda, HEnDehors indica si se está fuera del archivo: no se encontró nada o se alcanzó el final. Hay que probarla siempre antes de explotar el resultado.
El ciclo típico de una ficha es por tanto: HRAZ → entrada → ÉcranVersFichier → HAjoute (o HModifie). Olvidar la prueba HEnDehors es mostrar datos residuales o incluso modificar el registro equivocado — una corrupción silenciosa que hay que evitar absolutamente.
🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Registrar y buscar una ficha
El ciclo de Yacine para su ficha de pedido:
// Créer une nouvelle commande (champs liés)
HRAZ(Commande) // vider les rubriques en mémoire
// ... l'utilisateur saisit dans les champs liés ...
ÉcranVersFichier(Commande) // recopier la saisie vers les rubriques
HAjoute(Commande) // enregistrer le nouvel enregistrement
// Rechercher un client, puis TOUJOURS tester HEnDehors
HLitRecherche(Client, IDClient, 1042)
SI HEnDehors(Client) ALORS
Info("Client introuvable : vérifiez le code.")
SINON
FichierVersÉcran(Client) // afficher la fiche trouvée
FIN
Lectura: dos llamadas (ÉcranVersFichier / FichierVersÉcran) sustituyen a decenas de asignaciones; la prueba HEnDehors protege contra una búsqueda vacía.
Reflejo: HEnDehors se prueba inmediatamente después de la lectura o la búsqueda, antes de cualquier explotación.
Vocabulario de la sección
- Campo vinculado a una rúbrica
- Campo de pantalla asociado a una rúbrica (SAI_NomClient ↔ Client.Nom): WinDev sabe leer y registrar el valor automáticamente.
Ejemplo sencillo: Yacine vincula SAI_Ville a Client.Ville en su ventana.
Lo que no es: copiar cada valor a mano en el código, campo por campo.
Reflejo: un campo de pantalla ↔ una rúbrica → vincularlos.
- ÉcranVersFichier / FichierVersÉcran
- Las dos funciones clave del enlace: ÉcranVersFichier copia la entrada hacia las rúbricas; FichierVersÉcran copia los valores del archivo hacia los campos.
Ejemplo sencillo: Yacine llama a ÉcranVersFichier justo antes de HAjoute.
Lo que no es: asignar manualmente treinta rúbricas y olvidar una.
Reflejo: transferencia pantalla ↔ archivo → estas dos funciones.
- Funciones HFSQL (prefijo H)
- Funciones de manipulación de los datos: HAjoute, HModifie, HSupprime, HLitPremier/Suivant/Précédent/Dernier, HLitRecherche, HRAZ.
Ejemplo sencillo: Yacine añade un pedido con HAjoute y lo relee con HLitRecherche.
Lo que no es: modificar un registro escribiendo directamente en el archivo.
Reflejo: datos → funciones con prefijo H.
- Registro en curso
- Registro «actual» en memoria: es a él al que HModifie o HSupprime afectarán.
Ejemplo sencillo: Yacine se posiciona en el cliente correcto antes de llamar a HModifie.
Lo que no es: llamar a HModifie sin haberse posicionado en el registro correcto.
Reflejo: modificar/suprimir → verificar el registro en curso.
- HEnDehors (hay que probarla)
- Indica que se está fuera del archivo después de una lectura o una búsqueda (no se encontró nada o se alcanzó el final); hay que probarla sistemáticamente.
Ejemplo sencillo: Yacine muestra «Cliente no encontrado» cuando HEnDehors es verdadera.
Lo que no es: explotar el resultado de una búsqueda sin probar HEnDehors.
Reflejo: después de lectura/búsqueda → probar HEnDehors.
En la práctica — En la práctica — Registrar y releer una ficha
- VINCULE los campos de la ventana a las rúbricas correspondientes del análisis (SAI_NomClient ↔ Client.Nom) mediante las propiedades del campo.
- Para una CREACIÓN: llame a HRAZ para vaciar las rúbricas, deje que el usuario introduzca los datos y después ÉcranVersFichier seguido de HAjoute.
- Para una MODIFICACIÓN: posicionése en el registro correcto (HLitRecherche), muéstrelo con FichierVersÉcran y después, tras la entrada, ÉcranVersFichier y HModifie.
- PRUEBE SISTEMÁTICAMENTE HEnDehors después de toda lectura o búsqueda, antes de explotar el resultado.
Script paso a paso — conectar la ficha como Yacine (4 min)
1) Vincule cada campo a su rúbrica (SAI_NomClient ↔ Client.Nom) en las propiedades del campo. 2) Creación: HRAZ, entrada del usuario, ÉcranVersFichier, HAjoute. 3) Modificación: HLitRecherche para posicionarse, FichierVersÉcran para mostrar y después ÉcranVersFichier y HModifie. 4) Después de cada lectura o búsqueda, pruebe HEnDehors y trate el caso «no encontrado». 5) Supresión: posicionése y después HSupprime.
No encadenar nunca una escritura después de una búsqueda sin haber probado HEnDehors.
Modelo para copiar y pegar — el ciclo de ficha de Yacine
// Création
HRAZ(Fichier)
< saisie de l'utilisateur >
ÉcranVersFichier(Fichier)
HAjoute(Fichier)
// Recherche + contrôle
HLitRecherche(Fichier, Clé, valeur)
SI HEnDehors(Fichier) ALORS
< cas non trouvé >
SINON
FichierVersÉcran(Fichier)
FIN
// Modification / Suppression (enregistrement en cours)
ÉcranVersFichier(Fichier)
HModifie(Fichier) // ou HSupprime(Fichier)
Consulta de solo lectura
Yacine utiliza únicamente HLitRecherche y después FichierVersÉcran para mostrar un pedido, sin registrar.
Alta desde una tabla
Desde la tabla de pedidos, Yacine abre la ficha de alta, HRAZ, ÉcranVersFichier, HAjoute y después actualiza la tabla.
Búsqueda infructuosa
Cuando HEnDehors es verdadera, Yacine propone crear un nuevo cliente en lugar de mostrar una ficha vacía.
Transferencia manual
Para un campo calculado (el total con IVA), Yacine calcula el valor y lo asigna a mano, sin campo vinculado.
✓ Buenas prácticas
- Vincular los campos a las rúbricas en lugar de asignar a mano.
- Utilizar ÉcranVersFichier / FichierVersÉcran antes de registrar o mostrar.
- Probar HEnDehors después de toda lectura o búsqueda.
✗ Errores frecuentes
- Olvidar la prueba HEnDehors después de una búsqueda.
- Modificar el registro equivocado (registro en curso).
- Reescribir a mano decenas de asignaciones en lugar de usar campos vinculados.
Puntos clave
- El enlace campo ↔ rúbrica es muy productivo: ÉcranVersFichier copia la entrada, FichierVersÉcran muestra los valores.
- Las funciones HFSQL (prefijo H) manipulan los datos: HAjoute, HModifie, HSupprime, HLit…, HLitRecherche, HRAZ.
- El registro en curso es el que HModifie o HSupprime afectan: equivocarse es un error clásico.
- Reflejo obligatorio: probar HEnDehors después de toda lectura o búsqueda antes de explotar el resultado.
Reto 48 h — aplícalo mañana
Tome un archivo de su análisis y escriba, como Yacine, el ciclo completo de una ficha: HRAZ → ÉcranVersFichier → HAjoute, y después una búsqueda HLitRecherche seguida de la prueba HEnDehors. Escriba en una frase qué ocurre si se olvida probar HEnDehors.
- Sé vincular los campos de una ventana a las rúbricas del análisis.
- Sé añadir, buscar y modificar un registro con las funciones HFSQL.
- Tengo el reflejo de probar HEnDehors después de cada lectura o búsqueda.
Preguntas frecuentes
¿Por qué hay que probar sistemáticamente HEnDehors después de una búsqueda?
Porque una búsqueda puede no encontrar nada. Sin esa prueba, el código continúa explotando los valores residuales de la memoria — a menudo el último registro leído — y la aplicación muestra datos falsos sin bloquearse. Peor aún: encadenar un HModifie tras una búsqueda infructuosa puede modificar un registro que no era el buscado. Por tanto, se prueba HEnDehors inmediatamente después de la lectura o la búsqueda, antes de cualquier explotación.
¿Qué diferencia hay entre los campos vinculados y el código manual?
Los campos vinculados automatizan la transferencia pantalla ↔ archivo mediante ÉcranVersFichier / FichierVersÉcran: es rápido, seguro y preferible. El código manual (asignaciones una por una) sigue siendo útil para casos particulares: datos transformados en la visualización (cálculo, conversión) o campos no vinculados (filtros, totales, indicadores). En una ficha de treinta campos, los campos vinculados ahorran un tiempo considerable y evitan muchos olvidos.
¿Cómo se registran los datos introducidos en una ventana vinculada?