La instrucción CLEAR es una de las instrucciones más básicas y frecuentemente utilizadas en ABAP. Su propósito es restablecer el contenido de un objeto de datos (una variable) a su valor inicial según el tipo. Es decir, “elimina” o “vacía” el valor actual de la variable y establece el estado que tendría la variable directamente después de su declaración (sin el agregado VALUE).
CLEAR es aplicable a casi todos los tipos de objetos de datos:
- Variables elementales (números, texto, fecha, hora, etc.)
- Estructuras (Work Areas)
- Tablas internas
- Variables de referencia (referencias a objetos, referencias a datos)
- Field symbols (actúa sobre el objeto de datos asignado)
Sintaxis
La sintaxis es muy simple:
1. Restablecer un único objeto de datos
CLEAR <objeto_de_datos>.<objeto_de_datos>: El nombre de la variable, estructura, tabla interna, etc., que se debe restablecer.
2. Restablecer múltiples objetos de datos (instrucción encadenada)
CLEAR: <objeto_de_datos1>, <objeto_de_datos2>, ..., <objeto_de_datosN>.Con dos puntos después de CLEAR y comas entre los nombres de variables, se pueden restablecer múltiples objetos de datos en una sola instrucción.
Funcionamiento y efecto en diferentes tipos de datos
El valor inicial al que CLEAR restablece depende del tipo de datos del objeto:
Tipos elementales
- Numéricos (
I,P,F, …):0 - Cadena de caracteres de longitud fija (
C,N,D,T): Rellenado con espacios (según la longitud definida). P.ej.C(5)se convierte en' '. - Cadena de caracteres de longitud variable (
STRING): Cadena vacía (''). - Cadena de bytes de longitud fija (
X): Rellenado con00hexadecimal (según la longitud definida). P.ej.X(2)se convierte enX'0000'. - Cadena de bytes de longitud variable (
XSTRING): Cadena de bytes vacía. - Referencias (
TYPE REF TO ...): La referencia se vuelveNULL(ya no apunta a ningún objeto o área de datos).
Estructuras
CLEAR actúa sobre cada componente de la estructura individualmente, según el tipo de datos del respectivo componente. Hacer CLEAR a una estructura significa establecer todos sus campos a sus valores iniciales.
Tablas internas
CLEAR <tabla_interna>. elimina todas las filas del cuerpo de la tabla. La tabla queda vacía después (contiene 0 filas). La memoria que ocupaban las filas se libera (con excepción de una memoria base posiblemente reservada por INITIAL SIZE).
- Nota sobre tablas con línea de cabecera (obsoleto): En tablas que aún fueron declaradas con la antigua sintaxis
DATA <tabla> TYPE <tipo> OCCURS n WITH HEADER LINE.,CLEAR <tabla>.restablece tanto el cuerpo de la tabla como la línea de cabecera.CLEAR <tabla>[].solo eliminaría el cuerpo. En declaraciones de tablas modernas (DATA <tabla> TYPE TABLE OF ...) no hay línea de cabecera, yCLEAR <tabla>.siempre elimina el cuerpo.
Diferencia con FREE
Aunque CLEAR en tablas internas libera la memoria de las filas, también existe la instrucción FREE.
CLEAR: Restablece el valor. En tablas: Elimina el contenido de filas y libera la memoria de filas.FREE: Es más agresivo en la liberación de memoria, especialmente para tablas internas y objetos como strings.FREE <tabla>.intenta devolver toda la memoria de la tabla (incluyendo información de administración) al sistema operativo.FREEtambién restablece la variable a su valor inicial. Se usaFREEprincipalmente cuando tablas u objetos muy grandes definitivamente ya no se necesitan y la memoria debe liberarse urgentemente. Para variables elementales simples,FREEse comporta comoCLEAR.
Casos de uso típicos para CLEAR
- Inicializar una variable antes de la (re)utilización, para asegurar que no hay valores antiguos presentes.
- Restablecer una estructura de trabajo (Work Area) antes de leer datos de una nueva fila de una tabla interna (importante en loops
LOOP AT ... INTO wa.). - Vaciar una tabla interna antes de llenarla con nuevos datos.
- Restablecer contadores, sumas o indicadores de estado.
Ejemplos
1. Variables elementales
DATA count TYPE i VALUE 55.DATA description TYPE string VALUE 'Un texto'.DATA is_valid TYPE abap_bool VALUE abap_true.
WRITE: / 'Antes:', count, description, is_valid.
CLEAR: count, description, is_valid.
WRITE: / 'Después:', count, description, is_valid.Salida:
Antes: 55 Un texto XDespués: 0 ' '(Nota: abap_false se representa como espacio ’ ‘).
2. Estructura
TYPES: BEGIN OF ty_person, name TYPE string, age TYPE i, END OF ty_person.
DATA person TYPE ty_person.
person-name = 'Meier'.person-age = 42.
WRITE: / 'Persona antes:', person-name, person-age.
CLEAR person.
WRITE: / 'Persona después:', person-name, person-age.Salida:
Persona antes: Meier 42Persona después: 03. Tabla interna
DATA number_table TYPE STANDARD TABLE OF i WITH EMPTY KEY.
APPEND 1 TO number_table.APPEND 2 TO number_table.APPEND 3 TO number_table.
WRITE: / 'Filas antes de CLEAR:', lines( number_table ).
CLEAR number_table.
WRITE: / 'Filas después de CLEAR:', lines( number_table ).Salida:
Filas antes de CLEAR: 3Filas después de CLEAR: 04. Área de trabajo en un loop
TYPES: BEGIN OF ty_item, id TYPE i, END OF ty_item.DATA: lt_items TYPE STANDARD TABLE OF ty_item, ls_item TYPE ty_item.
APPEND VALUE #( id = 10 ) TO lt_items.APPEND VALUE #( id = 20 ) TO lt_items.
LOOP AT lt_items INTO ls_item. WRITE: / 'Procesando ID:', ls_item-id. " ... Lógica con ls_item ...
" Buena práctica: Vaciar Work Area para la próxima iteración o uso posterior CLEAR ls_item. WRITE: ' | Work Area ID después de CLEAR:', ls_item-id.ENDLOOP.Salida:
Procesando ID: 10 | Work Area ID después de CLEAR: 0Procesando ID: 20 | Work Area ID después de CLEAR: 0En resumen: CLEAR es una instrucción indispensable para restablecer objetos de datos de manera controlada a su estado inicial definido. Es fácil de aplicar y esencial para el procesamiento limpio de datos en muchos escenarios de programación ABAP.