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 enAT 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 NEWdeben 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.




