2.4 · Recorrido de registros y tablas de archivo

Nivel 2 · Intermedio: datos, consultas e informes

2.4Recorrido de registros y tablas de archivo

Objetivo: Recorrer los datos (POUR TOUT), alimentar campos Tabla y gestionar el filtrado/ordenación según el volumen.
Tiempo estimado: 11 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • El recorrido examina los registros de un archivo o de una consulta; dos enfoques: el bucle POUR TOUT (moderno, recomendado) y el recorrido manual (HLitPremier / HLitSuivant con prueba HEnDehors).
  • El campo Tabla muestra varios registros; la tabla de archivo está vinculada a un archivo o una consulta y se rellena automáticamente, cargando solo las filas mostradas.
  • La tabla en memoria se rellena por código (TableAjouteLigne): libertad total pero carga que hay que gestionar — reservarla a datos construidos o de volumen controlado.

Mini-caso hilado — Yacine muestra y recorre el catálogo de productos

Yacine, desarrollador WinDev en una pyme de venta de material eléctrico en Orán, debe mostrar el catálogo de productos y detectar los que hay que reabastecer. Para la lista mostrada en pantalla, elige una tabla de archivo vinculada a una consulta filtrada: se rellena automáticamente y solo carga las filas visibles, incluso con miles de referencias. Para calcular las alertas de stock, escribe un recorrido con el bucle POUR TOUT Produit, conciso y recomendado, y luego añade las filas afectadas a una segunda tabla. Procura escribir también el recorrido manual (HLitPremier / HLitSuivant + prueba HEnDehors) para comprender el mecanismo subyacente. Por último, se prohíbe rellenar una tabla en memoria recorriendo todo un archivo grande: con grandes volúmenes prefiere la tabla de archivo con un filtro y consultas en lugar de un bucle que procesa cada registro uno a uno.

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.4.

1. Dos formas de recorrido

Después de manipular un registro, se procesan conjuntos. El recorrido examina los registros de un archivo o de una consulta. (1) El bucle POUR TOUT: forma moderna y recomendada, concisa y legible — recorre automáticamente todos los registros y gestiona el final del recorrido. (2) El bucle manual con HLitPremier y luego HLitSuivant, comprobando HEnDehors para saber cuándo detenerse: más verboso pero indispensable para comprenderlo. En ambos casos se puede recorrer según un orden (una clave/índice) y con un filtro.

2. Tabla de archivo o tabla en memoria

El campo Tabla es el compañero natural del recorrido: muestra varios registros en filas y columnas. (1) La tabla de archivo (llamada «sobre archivo/consulta») está vinculada a un origen de datos y se rellena automáticamente; WinDev solo carga las filas necesarias para la visualización, lo que la hace eficaz incluso con volúmenes muy grandes — el modo que hay que privilegiar en gestión. (2) La tabla en memoria se rellena por código (TableAjouteLigne): libertad total pero carga que hay que gestionar — reservarla a datos construidos o de volumen controlado.

3. Vigilancia del rendimiento

Con grandes volúmenes, no cargue todo en memoria: prefiera la tabla de archivo con un filtro. Y para los tratamientos masivos, privilegie las consultas o las funciones de conjunto en lugar de un bucle que procesa un millón de registros uno a uno. El error clásico — rellenar una tabla en memoria recorriendo todo un archivo grande — se manifiesta sobre todo en producción, cuando llegan los datos reales.

Error frecuente de interpretación: «La tabla en memoria siempre es más rápida; una tabla de archivo no puede ordenarse; y POUR TOUT es solo una forma más corta de escribir el recorrido manual». No, triple error. La tabla de archivo solo carga las filas mostradas y sigue siendo eficaz con grandes volúmenes, mientras que la tabla en memoria carga todo; por tanto, suele ser más rápida con grandes conjuntos de datos procedentes de la base. Una tabla de archivo se ordena perfectamente (orden del origen). Por último, POUR TOUT es la forma recomendada que gestiona automáticamente la progresión y el final del recorrido, distinta del recorrido manual. Yacine, por tanto, privilegia la tabla de archivo con los datos de la base.
Recorrer y mostrar: dos elecciones El recorrido procesa conjuntos; la tabla muestra eligiendo archivo (automático) o memoria (por código). POUR TOUTRecorrido moderno, gestiona el fin+Recorrido manualHLitPremier / HLitSuivant + HEnDehors+Tabla de archivoVinculada a archivo/consulta, filas mostradas+Tabla en memoriaRellena por código (TableAjouteLigne) Con grandes volúmenes: tabla de archivo + filtro, sin cargarlo todo en memoria.
El recorrido procesa conjuntos; la tabla muestra eligiendo archivo (automático) o memoria (por código).
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Yacine, desarrollador WinDev en una pyme de venta de material eléctrico en Orán, aprende que el recorrido examina los registros de un archivo o de una consulta, con dos formas: el bucle POUR TOUT (moderno, recomendado) y el recorrido manual (HLitPremier / HLitSuivant + prueba HEnDehors). 2) Retiene que el campo Tabla muestra los registros, que la tabla de archivo vinculada a un archivo o una consulta se rellena automáticamente cargando solo las filas mostradas, y que la tabla en memoria se rellena por código con TableAjouteLigne. 3) Para su catálogo, muestra una tabla de archivo basada en una consulta filtrada, utiliza POUR TOUT para calcular las alertas de stock y evita cargarlo todo en memoria. Lección: privilegiar la tabla de archivo con los datos de la base y las consultas para los tratamientos masivos.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — POUR TOUT vs recorrido manual

Dos escrituras del mismo recorrido: Yacine detecta los productos que hay que reabastecer.

// Forme recommandee : POUR TOUT
POUR TOUT Produit
    SI Produit.Stock < 5 ALORS
        TableAjouteLigne(TABLE_Alerte, Produit.CodeProduit, Produit.Stock)
    FIN
FIN

// Forme manuelle (comprendre le mecanisme)
HLitPremier(Produit, hOrdreCroissant, "CodeProduit")
TANTQUE HEnDehors(Produit) = Faux
    // ... traiter Produit ...
    HLitSuivant(Produit)
FIN

Lecture   : POUR TOUT gere la progression et la fin ; le manuel montre le mecanisme
Reflexe   : table FICHIER pour afficher, pas de tout charger en memoire

Lectura: POUR TOUT recorre todos los registros y se detiene solo; el recorrido manual explicita HLitPremier / HLitSuivant y la prueba HEnDehors.

Lección: para la visualización, preferir una tabla de archivo vinculada a una consulta en lugar de cargarlo todo en memoria.

Vocabulario de la sección

Recorrido
Pasar revista a los registros de un archivo o de una consulta, eventualmente según un orden (una clave) y con un filtro.

Ejemplo sencillo: Yacine recorre el archivo Produit para detectar los stocks bajos.

Lo que no es: leer un único registro identificado por su clave.

Reflejo: procesar un conjunto de registros → un recorrido.

POUR TOUT
La forma moderna y recomendada de recorrido: concisa y legible, gestiona automáticamente la progresión y el final del recorrido.

Ejemplo sencillo: Yacine escribe POUR TOUT Produit para calcular las alertas.

Lo que no es: un bucle manual con HLitPremier / HLitSuivant.

Reflejo: recorrido simple y legible → POUR TOUT.

Recorrido manual
La forma clásica: HLitPremier y luego HLitSuivant, comprobando HEnDehors para detectar el final.

Ejemplo sencillo: Yacine escribe la versión manual para comprender el mecanismo.

Lo que no es: el bucle POUR TOUT, que oculta estas etapas.

Reflejo: ver lo que ocurre realmente → recorrido manual.

Tabla de archivo
Campo tabla vinculado directamente a un archivo o una consulta: relleno automático, WinDev solo carga las filas mostradas.

Ejemplo sencillo: Yacine muestra su catálogo en una tabla de archivo basada en una consulta.

Lo que no es: una tabla rellenada línea a línea por código.

Reflejo: mostrar grandes volúmenes → tabla de archivo.

Tabla en memoria
Campo tabla rellenado por código (TableAjouteLigne): libertad total pero carga que hay que gestionar uno mismo.

Ejemplo sencillo: Yacine rellena una tabla en memoria con los únicos productos en alerta.

Lo que no es: una tabla vinculada a una consulta de la base.

Reflejo: datos construidos por código → tabla en memoria.

En la práctica — En la práctica — Recorrer y mostrar registros

  1. Escriba un recorrido con POUR TOUT (forma recomendada) para procesar todos los registros de un archivo o de una consulta, como Yacine.
  2. Escriba el mismo recorrido en versión manual (HLitPremier / HLitSuivant + prueba HEnDehors) para comprender bien el mecanismo subyacente.
  3. Para la visualización, utilice preferentemente una tabla de archivo vinculada a un archivo o una consulta: se rellena automáticamente y sigue siendo eficaz con grandes volúmenes.
  4. Reserve la tabla en memoria (TableAjouteLigne) a los datos construidos por código y, con grandes volúmenes, filtre en lugar de cargarlo todo.
Sabe recorrer conjuntos de registros en código y mostrarlos eficazmente, eligiendo el tipo de tabla adecuado según el volumen y el origen de los datos.

Guion paso a paso — recorrer el catálogo como Yacine (5 min)

1) Cree una tabla de archivo vinculada a una consulta Produit filtrada (stock < umbral). 2) Escriba un recorrido POUR TOUT Produit que compruebe Produit.Stock. 3) Añada los productos en alerta a una tabla en memoria mediante TableAjouteLigne. 4) Reescriba el recorrido en versión manual (HLitPremier / HLitSuivant + HEnDehors) para analizarlo. 5) Con un gran volumen, compruebe que no lo carga todo en memoria.

Reflejo por defecto en gestión: en cuanto los datos vienen de la base, utilice una tabla de archivo basada en una consulta.

Plantilla para copiar y pegar — mi recorrido y mi tabla

Parcours POUR TOUT : POUR TOUT Produit ... FIN   (recommande)
Parcours manuel    : HLitPremier(...) ; TANTQUE HEnDehors(...) = Faux ... HLitSuivant(...) ; FIN
Table FICHIER      : liee a un fichier/requete, remplissage AUTO, lignes affichees
Table MEMOIRE      : remplie par CODE (TableAjouteLigne)
Regles : (1) affichage sur base -> table FICHIER
         (2) gros traitements de masse -> REQUETES, pas une boucle ligne a ligne

Recorrido POUR TOUT

Yacine recorre todo el archivo Produit para recalcular las alertas de stock.

Recorrido manual

Yacine escribe la versión HLitPremier / HLitSuivant para comprender el desarrollo.

Tabla de archivo

Yacine muestra el catálogo mediante una tabla vinculada a una consulta, cargada a demanda.

Tabla en memoria

Yacine rellena por código una pequeña tabla con los únicos productos en rotura.

✓ Buenas prácticas

  • Utilizar POUR TOUT por defecto, conocer el recorrido manual.
  • Mostrar datos de la base con una tabla de archivo vinculada a una consulta.
  • No cargarlo todo en memoria con grandes volúmenes.

✗ Errores frecuentes

  • Rellenar una tabla en memoria recorriendo un archivo grande.
  • Creer que una tabla de archivo no se puede ordenar.
  • Procesar un millón de registros uno a uno en lugar de mediante consulta.

Puntos clave

  • Dos formas de recorrido: POUR TOUT (recomendada) y recorrido manual (HLitPremier / HLitSuivant + HEnDehors).
  • El campo Tabla muestra los registros; la tabla de archivo está vinculada a un archivo/consulta y solo carga las filas mostradas.
  • La tabla en memoria se rellena por código (TableAjouteLigne) — reservarla a los datos construidos.
  • Con grandes volúmenes: tabla de archivo + filtro; tratamientos masivos mediante consultas.

Reto 48 h — aplícalo mañana

Como Yacine, escriba un recorrido POUR TOUT sobre un archivo de su aplicación y luego reescríbalo en versión manual (HLitPremier / HLitSuivant + prueba HEnDehors). Muestre después esos datos en una tabla de archivo vinculada a una consulta y compruebe que solo carga las filas visibles. Explique en una frase por qué no hay que rellenar una tabla en memoria recorriendo todo un archivo grande.

Lista de salida de la sección
  • Sé escribir un recorrido en POUR TOUT y en versión manual.
  • Elijo entre tabla de archivo y tabla en memoria según el origen y el volumen de los datos.
  • Sé no cargarlo todo en memoria con grandes volúmenes.
Autoevaluación 1-5: ¿distingo POUR TOUT y el recorrido manual?Autoevaluación 1-5: ¿sé cuándo utilizar una tabla de archivo en lugar de una tabla en memoria?

Preguntas frecuentes

¿Qué diferencia hay entre una tabla de archivo y una tabla en memoria?

La tabla de archivo está vinculada a un archivo o una consulta y solo carga las filas mostradas: es eficaz incluso con volúmenes muy grandes. La tabla en memoria se rellena por código y lo carga todo en memoria: libertad total pero inadecuada para grandes volúmenes. En gestión, por tanto, se privilegia la tabla de archivo.

¿Por qué aprender el recorrido manual si existe POUR TOUT?

Porque muestra lo que ocurre realmente (avanzar de un registro a otro, comprobar el final) y sigue siendo útil en casos particulares. POUR TOUT es la forma moderna y recomendada para el día a día; comprender el recorrido manual ayuda a diagnosticar situaciones delicadas.

Comprueba tu comprensión

¿Qué diferencia hay entre una tabla de archivo y una tabla en memoria?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 2Preguntas inéditas y más difíciles para validar tus conocimientos