La instrucción WRITE es una de las instrucciones más fundamentales en ABAP para la salida de datos. Su propósito principal es escribir valores (contenidos de variables, literales, campos del sistema, etc.) en la lista de salida actual (también conocida como “lista clásica” o “lista de spool”). Esta lista se muestra típicamente cuando se ejecuta un programa ejecutable (report) en modo de diálogo, o se guarda como trabajo de spool cuando el programa se ejecuta en segundo plano.
Sintaxis
La forma más simple de la sintaxis es:
WRITE <salida> [opciones_formato].<salida>: Este es el valor que se va a emitir. Puede ser:
- Un objeto de datos (variable, constante)
- Un literal de texto (por ejemplo,
'Hola Mundo') - Un símbolo de campo
- Un campo del sistema (por ejemplo,
sy-datum,sy-uzeit) - Un componente de una estructura (por ejemplo,
estructura-campo) - Una expresión
[opciones_formato]: Adiciones opcionales para controlar la posición y la apariencia de la salida.
Posicionamiento en la Lista
Por defecto, cada instrucción WRITE continúa directamente después de la salida anterior en la línea actual (con un espacio entre ellas). Sin embargo, puedes controlar la posición exactamente:
-
Nueva Línea (
/):WRITE / <salida>.Comienza la salida en una nueva línea en la primera columna (columna 1).
-
Posición Absoluta (
AT <columna>):WRITE AT <columna> <salida>.WRITE AT /<columna> <salida>. " Combinado: Nueva línea y columnaComienza la salida en la línea actual (o una nueva línea con
AT /) desde el número de columna especificado<columna>. -
Posición con Especificación de Longitud (
AT <columna>(<longitud>)):WRITE AT <columna>(<longitud>) <salida>.WRITE AT /<columna>(<longitud>) <salida>.Emite
<salida>desde la columna<columna>, pero reserva exactamente<longitud>caracteres para ello. El contenido se trunca o se rellena si es necesario (por defecto: alineado a la derecha para números, alineado a la izquierda para texto).
Opciones de Formato Importantes
Hay numerosas opciones para influir en la apariencia de la salida:
Alineación:
LEFT-JUSTIFIED: Alineado a la izquierdaCENTERED: CentradoRIGHT-JUSTIFIED: Alineado a la derecha (por defecto para tipos numéricos) Sin Espacio:NO-GAP: Suprime el espacio automático entre salidasWRITEdirectamente consecutivas en la misma línea. Máscaras de Formato:USING EDIT MASK <máscara>: Aplica una máscara.<máscara>es un literal o una variable, por ejemplo'__:__'para hora,'RR__,___,___.__'para números,'TT.MM.JJJJ'para fecha.USING NO EDIT MASK: Suprime la aplicación de rutinas de conversión estándar (por ejemplo, para formatos de fecha). Formatos de Números:CURRENCY <campo_moneda>: Formatea un importe según la clave de moneda en<campo_moneda>. Considera el número de decimales y el separador de miles de la moneda.DECIMALS <cant>: Emite el valor con<cant>decimales.NO-ZERO: No emite nada si el valor es cero o el valor inicial del tipo de datos.NO-SIGN: Suprime la salida del signo (+/-).EXPONENT <exp>: Para números de punto flotante (tipof), salida con exponente<exp>. Apariencia (Colores, etc.):COLOR <color> | COL_<key> | <n>: Establece el color.<color>puede ser1-7,<key>puede ser por ejemploHEADING,NORMAL,TOTAL,POSITIVE,NEGATIVE.INTENSIFIED [ON|OFF]: Visualización intensificada (brillante).INVERSE [ON|OFF]: Visualización inversa (color de fondo/primer plano intercambiado).INPUT [ON|OFF]: Hace que el campo sea editable (solo tiene sentido en listas que sirven para entrada). Salidas Especiales:AS CHECKBOX: Emite el campo como casilla de verificación (valor ‘X’ = marcado, ’ ’ = no marcado).AS SYMBOL: Emite un símbolo predefinido (por ejemplo,SYM_BULLET,SYM_PHONE; ver grupo de tiposSYM).AS ICON: Emite un icono (por ejemplo,ICON_OKAY,ICON_CANCEL; ver grupo de tiposICON).AS LINE: Dibuja líneas (usado conULINE,VLINE).
Ejemplos
1. Salidas Simples y Saltos de Línea
DATA: text1 TYPE string VALUE 'Hola', text2 TYPE string VALUE 'Mundo ABAP!', count TYPE i VALUE 10, today TYPE d.
today = sy-datum. " Fecha actual (por ejemplo, 20250420)
WRITE text1. " Salida: HolaWRITE text2. " Salida: Mundo ABAP! (con espacio)WRITE / 'Nuevo párrafo.'. " Salida: Nuevo párrafo. (en nueva línea)WRITE / 'Cantidad:'.WRITE count. " Salida: 10 (alineado a la derecha en longitud estándar)WRITE / 'Fecha:'.WRITE today. " Salida: 20.04.2025 (formato estándar del usuario)2. Posicionamiento
WRITE: / AT 5 'Texto en columna 5', / AT 10(20) 'Texto limitado desde columna 10 a 20 caracteres', sy-vline, " Línea vertical en posición actual AT 40 'Después de la línea'.3. Opciones de Formato
DATA: price TYPE p DECIMALS 2 VALUE '1234.99', currency_code TYPE waers VALUE 'EUR', datum TYPE d VALUE '20250420', uhrzeit TYPE t VALUE '103000'.
WRITE: / 'Precio (Estándar):', price.WRITE: / 'Precio (Moneda):', price CURRENCY currency_code.WRITE: / 'Precio (Centrado):', price CENTERED.WRITE: / 'Precio (Sin Ceros):' NO-ZERO price.
WRITE: / 'Fecha (Máscara):', datum USING EDIT MASK '____/__/__'. " Salida: 2025/04/20WRITE: / 'Hora (Máscara):', uhrzeit USING EDIT MASK '__:__:__'. " Salida: 10:30:00
WRITE: / 'Mensaje Importante' COLOR COL_NEGATIVE INTENSIFIED.WRITE ' aquí' COLOR COL_NEGATIVE INTENSIFIED NO-GAP. " Directamente junto, sin espacio4. Salidas Especiales
DATA: checkbox_val TYPE c LENGTH 1 VALUE 'X'.
WRITE: / 'Estado:' AS ICON, icon_led_green AS ICON NO-GAP.WRITE: / 'Opción A:' AS CHECKBOX, checkbox_val AS CHECKBOX INPUT. " EditableWRITE: / 'Punto de Viñeta:' AS SYMBOL, sym_bullet AS SYMBOL NO-GAP, ' Texto'.ULINE AT /1(30). " Línea horizontal sobre 30 columnas en nueva líneaNotas Importantes
- La instrucción
WRITEes fundamental para el procesamiento de listas clásicas de ABAP. - El ancho de la lista normalmente se determina mediante la adición
LINE-SIZEde la instrucciónREPORT. - En aplicaciones ABAP modernas (por ejemplo, con ALV = ABAP List Viewer, o aplicaciones Fiori), la visualización de datos generalmente es manejada por los frameworks de UI. Allí,
WRITEse usa con menos frecuencia para la visualización primaria de datos, pero sigue siendo útil para registros simples, depuración o generación de listas de spool simples en segundo plano.