Control Break Statements: AT FIRST, AT LAST, AT NEW, AT END OF

Los eventos AT FIRST, AT LAST, AT NEW y AT END OF se utilizan dentro de un LOOP sobre una tabla interna ordenada para ejecutar acciones al inicio o al final de grupos de registros con la misma clave. Son ideales para generar subtotales, cabeceras de grupo o pies de página.

⚠️ Requisito indispensable: la tabla interna debe estar ordenada (SORT) por los mismos campos que usarás en AT NEW / AT END OF. Si no, los resultados serán incorrectos.

Todos ellos se utilizan dentro de un LOOP AT.

AT FIRST – Al principio del LOOP

Se ejecuta una sola vez, antes de procesar la primera línea de la tabla.

LOOP AT gt_data INTO gs_data.
  AT FIRST.
    WRITE: / '--- Inicio del informe ---'.
  ENDAT.
  " Procesamiento normal
ENDLOOP.

Uso típico: escribir cabeceras de informe, inicializar totales globales.

AT LAST – Al final del LOOP

Se ejecuta una sola vez, después de procesar la última línea de la tabla.

LOOP AT gt_data INTO gs_data.
  " Procesamiento normal
  AT LAST.
    WRITE: / '--- Fin del informe ---'.
  ENDAT.
ENDLOOP.

Uso típico: escribir pies de página, mostrar totales finales.

AT NEW – Cambio de valor en un campo

Se ejecuta cuando cambia el valor de uno o varios campos especificados. Antes de la primera línea también se dispara, pero con el valor inicial de los campos.

SORT gt_data BY cliente.

LOOP AT gt_data INTO gs_data.
AT NEW cliente.
WRITE: / 'Cliente:', gs_data-cliente.
ENDAT.
" Líneas del cliente
ENDLOOP.
  • Los campos que aparecen en AT NEW deben estar al principio de la clave de ordenación.
  • Durante el bloque AT NEW, los campos listados contienen el nuevo valor; el resto de campos de la estructura tienen su valor inicial (vacío, cero, etc.).

Uso típico: escribir cabecera de un grupo (ej. cambio de cliente, de material, de mes).

AT END OF – Fin de un grupo

Se ejecuta cuando termina el grupo de un campo específico. Justo después de la última línea de ese grupo.

SORT gt_data BY cliente.

LOOP AT gt_data INTO gs_data.
" Acumular totales
total_cliente = total_cliente + gs_data-importe.

AT END OF cliente.
WRITE: / 'Total cliente:', total_cliente.
CLEAR total_cliente.
ENDAT.
ENDLOOP.
  • También requiere la ordenación correspondiente.
  • Dentro de AT END OF, los campos listados contienen el valor del grupo que termina.

Uso típico: mostrar subtotales por grupo, reiniciar acumuladores.

Son herramientas potentes para procesar datos agrupados sin tener que escribir bucles complejos. Solo recuerda: sin SORT no funcionan.