Instrucción WRITE de ABAP: Sintaxis, Opciones de Formato y Ejemplos para Salida de Listas

Kategorie
ABAP-Statements
Veröffentlicht
Autor
Johannes

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:

  1. Nueva Línea (/):

    WRITE / <salida>.

    Comienza la salida en una nueva línea en la primera columna (columna 1).

  2. Posición Absoluta (AT <columna>):

    WRITE AT <columna> <salida>.
    WRITE AT /<columna> <salida>. " Combinado: Nueva línea y columna

    Comienza la salida en la línea actual (o una nueva línea con AT /) desde el número de columna especificado <columna>.

  3. 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 izquierda
  • CENTERED: Centrado
  • RIGHT-JUSTIFIED: Alineado a la derecha (por defecto para tipos numéricos) Sin Espacio:
  • NO-GAP: Suprime el espacio automático entre salidas WRITE directamente 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 (tipo f), salida con exponente <exp>. Apariencia (Colores, etc.):
  • COLOR <color> | COL_<key> | <n>: Establece el color. <color> puede ser 1-7, <key> puede ser por ejemplo HEADING, 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 tipos SYM).
  • AS ICON: Emite un icono (por ejemplo, ICON_OKAY, ICON_CANCEL; ver grupo de tipos ICON).
  • AS LINE: Dibuja líneas (usado con ULINE, 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: Hola
WRITE 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/20
WRITE: / '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 espacio

4. 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. " Editable
WRITE: / '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ínea

Notas Importantes

  • La instrucción WRITE es fundamental para el procesamiento de listas clásicas de ABAP.
  • El ancho de la lista normalmente se determina mediante la adición LINE-SIZE de la instrucción REPORT.
  • 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í, WRITE se 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.