En ABAP existen unas variables especiales llamadas valores del sistema o system fields.
Siempre están ahí, no hace falta declararlas, y se actualizan solas cada vez que pasa algo en tu programa.
Son como pequeños “espías” que te cuentan lo que está ocurriendo en el sistema en cada momento:
- Si haces una lectura de tabla, uno de estos valores te dice si encontró datos o no.
- Si muestras algo en pantalla, otro valor te dice cuántas filas se mostraron.
💡 Por qué son importantes
Saber usar los system fields correctamente te ayuda a:
- Escribir programas más eficientes.
- Evitar errores comunes al procesar tablas o datos.
- Ahorrar tiempo al debuguear porque sabes lo que ocurre en cada paso.
Principales valores del sistema (system values)
Aquí van los más usados y con ejemplos 👇
🔹 sy-subrc – Resultado de la última operación
- Qué es: Devuelve un número que indica si la operación tuvo éxito (
0) o no (≠0). - Cómo se usa: Indica si la operación tuvo éxito.
- Ejemplo:
READ TABLE lt_clientes INTO ls_cliente WITH KEY id = ‘1001’.
IF sy-subrc = 0.
WRITE: ‘Cliente encontrado’.
ELSE.
WRITE: ‘No se encontró el cliente’.
ENDIF.
🔹 sy-tabix – Índice de tabla
- Qué es: Muestra en qué posición de la tabla interna se encontró el dato.
- Ejemplo:
READ TABLE lt_clientes INTO ls_cliente WITH KEY id = ‘1001’.
WRITE: ‘Fila encontrada en la posición: ‘, sy-tabix.
🔹 sy-datum – Fecha del sistema
- Qué es: La fecha de hoy (en formato AAAAMMDD).
- Ejemplo:
WRITE: ‘La fecha actual es: ‘, sy-datum.
🔹 sy-index – Número de iteraciones
- Qué es: Se actualiza en un
LOOPoDOpara indicar en qué vuelta estás. - Ejemplo:
DO 5 TIMES.
WRITE: / ‘Iteración número:’, sy-index.
ENDDO.
🔹 sy-uzeit – Hora del sistema
- Qué es: La hora exacta (en formato HHMMSS).
🔹 sy-uname – Usuario actual
- Qué es: El usuario de SAP que está ejecutando el programa.
🔹 sy-mandt – Mandante
- Qué es: Indica en qué mandante (client) estás trabajando.
📋 Lista de System Fields en ABAP
| Campo | Descripción breve |
|---|---|
| Generales | |
sy-datum | Fecha actual del sistema (AAAAMMDD). |
sy-uzeit | Hora actual del sistema (HHMMSS). |
sy-uname | Usuario que ejecuta el programa. |
sy-mandt | Mandante (client) actual. |
sy-langu | Idioma del usuario (ej: ES, EN, DE). |
sy-host | Servidor en el que se ejecuta el programa. |
sy-sysid | ID del sistema SAP. |
sy-repid | Nombre del programa en ejecución. |
sy-title | Título del programa. |
sy-batch | Indica si se ejecuta en background (X) o en diálogo (vacío). |
| Control de programas / loops | |
sy-index | Número de iteración en un DO o LOOP. |
sy-tabix | Índice de la tabla interna en accesos con READ TABLE. |
sy-loopc | Número de veces que se ha ejecutado un LOOP. |
sy-pagno | Número de página actual en un report. |
| Mensajes y errores | |
sy-subrc | Resultado de la última operación (0 = OK, ≠0 = error). |
sy-msgid | Clase de mensaje usada en el último MESSAGE. |
sy-msgno | Número del mensaje. |
sy-msgty | Tipo de mensaje (I = info, E = error, W = warning…). |
sy-msgv1-4 | Variables de texto para el mensaje. |
| Autorizaciones / logs | |
sy-slset | Variante de selección activa. |
sy-binpt | Indica si el programa corre en batch input. |
sy-batch | Si el programa se ejecuta en background. |
| Base de datos | |
sy-dbcnt | Número de registros afectados en la última operación DB. |
sy-tfill | Número de entradas llenas en una tabla interna. |
sy-dbcnt | Cantidad de filas procesadas por la última sentencia DB. |
| Pantalla / Dynpros | |
sy-dynnr | Número de dynpro (pantalla) actual. |
sy-dyngr | Grupo de dynpro. |
sy-dywid | ID del campo actual en la pantalla. |
sy-dyfld | Nombre del campo actual en la pantalla. |
| Spool / impresión | |
sy-pagno | Número de página en spool. |
sy-lsind | Nivel de lista actual (cuando usas listas ALV/WRITE). |
sy-lilli | Línea actual de la lista. |
sy-staro | Offset de la primera línea en listas. |
| RFC / Comunicación | |
sy-cprog | Programa de llamada (caller). |
sy-cucol | Columna actual del cursor. |
sy-curow | Fila actual del cursor. |
sy-mandt | Mandante donde corre el programa. |

