Instruction WRITE en ABAP : syntaxe, options de formatage et exemples pour l

Catégorie
ABAP-Statements
Publié
Auteur
Johannes

L’instruction WRITE est l’une des instructions les plus fondamentales en ABAP pour la sortie de donnees. Son objectif principal est d’ecrire des valeurs (contenus de variables, litteraux, champs systeme, etc.) dans la liste de sortie actuelle (egalement connue sous le nom de “liste classique” ou “liste spool”). Cette liste est generalement affichee lorsqu’un programme executable (report) s’execute en mode dialogue, ou elle est enregistree comme job spool lorsque le programme s’execute en arriere-plan.

Syntaxe

La forme la plus simple de la syntaxe est :

WRITE <sortie> [options_formatage].

<sortie> : C’est la valeur a afficher. Cela peut etre :

  • Un objet de donnees (variable, constante)
  • Un litteral texte (par ex. 'Bonjour le monde')
  • Un symbole de champ
  • Un champ systeme (par ex. sy-datum, sy-uzeit)
  • Un composant d’une structure (par ex. structure-nom_champ)
  • Une expression

[options_formatage] : Ajouts optionnels pour controler la position et l’apparence de la sortie.

Positionnement sur la liste

Par defaut, chaque instruction WRITE continue directement apres la sortie precedente sur la ligne actuelle (avec un espace entre les deux). Cependant, la position peut etre controlee precisement :

  1. Nouvelle ligne (/) :

    WRITE / <sortie>.

    Commence la sortie sur une nouvelle ligne dans la premiere colonne (colonne 1).

  2. Position absolue (AT <colonne>) :

    WRITE AT <colonne> <sortie>.
    WRITE AT /<colonne> <sortie>. " Combine: Nouvelle ligne et colonne

    Commence la sortie sur la ligne actuelle (ou une nouvelle ligne avec AT /) a partir du numero de colonne specifie <colonne>.

  3. Position avec specification de longueur (AT <colonne>(<longueur>)) :

    WRITE AT <colonne>(<longueur>) <sortie>.
    WRITE AT /<colonne>(<longueur>) <sortie>.

    Affiche <sortie> a partir de la colonne <colonne>, mais reserve exactement <longueur> caracteres. Le contenu est tronque ou complete si necessaire (par defaut : aligne a droite pour les nombres, aligne a gauche pour le texte).

Options de formatage importantes

Il existe de nombreuses options pour influencer l’apparence de la sortie :

Alignement :

  • LEFT-JUSTIFIED : Aligne a gauche
  • CENTERED : Centre
  • RIGHT-JUSTIFIED : Aligne a droite (par defaut pour les types numeriques) Pas d’espace :
  • NO-GAP : Supprime l’espace automatique entre les sorties WRITE consecutives sur la meme ligne. Masques de formatage :
  • USING EDIT MASK <masque> : Applique un masque. <masque> est un litteral ou une variable, par ex. '__:__' pour l’heure, 'RR__,___,___.__' pour les nombres, 'JJ.MM.AAAA' pour la date.
  • USING NO EDIT MASK : Supprime l’application des routines de conversion standard (par ex. pour les formats de date). Formats numeriques :
  • CURRENCY <champ_devise> : Formate un montant selon la cle de devise dans <champ_devise>. Prend en compte le nombre de decimales et le separateur de milliers de la devise.
  • DECIMALS <nb> : Affiche la valeur avec <nb> decimales.
  • NO-ZERO : N’affiche rien si la valeur est zero ou la valeur initiale du type de donnees.
  • NO-SIGN : Supprime l’affichage du signe (+/-).
  • EXPONENT <exp> : Pour les nombres a virgule flottante (type f), sortie avec exposant <exp>. Apparence (couleurs, etc.) :
  • COLOR <couleur> | COL_<cle> | <n> : Definit la couleur. <couleur> peut etre 1-7, <cle> peut etre par ex. HEADING, NORMAL, TOTAL, POSITIVE, NEGATIVE.
  • INTENSIFIED [ON|OFF] : Affichage intensifie (clair).
  • INVERSE [ON|OFF] : Affichage inverse (couleurs d’arriere-plan/premier plan inversees).
  • INPUT [ON|OFF] : Rend le champ pret pour la saisie (utile uniquement dans les listes servant a la saisie). Sorties speciales :
  • AS CHECKBOX : Affiche le champ comme case a cocher (valeur ‘X’ = coche, ’ ’ = non coche).
  • AS SYMBOL : Affiche un symbole predefini (par ex. SYM_BULLET, SYM_PHONE ; voir le groupe de types SYM).
  • AS ICON : Affiche une icone (par ex. ICON_OKAY, ICON_CANCEL ; voir le groupe de types ICON).
  • AS LINE : Dessine des lignes (utilise avec ULINE, VLINE).

Exemples

1. Sorties simples et sauts de ligne

DATA: text1 TYPE string VALUE 'Bonjour',
text2 TYPE string VALUE 'monde ABAP!',
count TYPE i VALUE 10,
today TYPE d.
today = sy-datum. " Date du jour (par ex. 20250420)
WRITE text1. " Sortie: Bonjour
WRITE text2. " Sortie: monde ABAP! (avec espace)
WRITE / 'Nouveau paragraphe.'. " Sortie: Nouveau paragraphe. (nouvelle ligne)
WRITE / 'Nombre:'.
WRITE count. " Sortie: 10 (aligne a droite dans la longueur standard)
WRITE / 'Date:'.
WRITE today. " Sortie: 20.04.2025 (format standard des parametres utilisateur)

2. Positionnement

WRITE: / AT 5 'Texte en colonne 5',
/ AT 10(20) 'Texte limite a partir de la colonne 10 sur 20 caracteres',
sy-vline, " Ligne verticale a la position actuelle
AT 40 'Apres la ligne'.

3. Options de formatage

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: / 'Prix (standard):', price.
WRITE: / 'Prix (devise):', price CURRENCY currency_code.
WRITE: / 'Prix (centre):', price CENTERED.
WRITE: / 'Prix (pas de zeros):' NO-ZERO price.
WRITE: / 'Date (masque):', datum USING EDIT MASK '____/__/__'. " Sortie: 2025/04/20
WRITE: / 'Heure (masque):', uhrzeit USING EDIT MASK '__:__:__'. " Sortie: 10:30:00
WRITE: / 'Message important' COLOR COL_NEGATIVE INTENSIFIED.
WRITE ' ici' COLOR COL_NEGATIVE INTENSIFIED NO-GAP. " Directement accole, sans espace

4. Sorties speciales

DATA: checkbox_val TYPE c LENGTH 1 VALUE 'X'.
WRITE: / 'Statut:' AS ICON, icon_led_green AS ICON NO-GAP.
WRITE: / 'Option A:' AS CHECKBOX, checkbox_val AS CHECKBOX INPUT. " Pret pour la saisie
WRITE: / 'Point:' AS SYMBOL, sym_bullet AS SYMBOL NO-GAP, ' Texte'.
ULINE AT /1(30). " Ligne horizontale sur 30 colonnes sur une nouvelle ligne

Remarques importantes

  • L’instruction WRITE est fondamentale pour le traitement de liste classique ABAP.
  • La largeur de la liste est normalement determinee par l’ajout LINE-SIZE de l’instruction REPORT.
  • Dans les applications ABAP modernes (par ex. avec ALV = ABAP List Viewer, ou applications Fiori), l’affichage des donnees est generalement gere par les frameworks UI. Dans ce contexte, WRITE est moins utilise pour l’affichage principal des donnees, mais reste utile pour les protocoles simples, le debogage ou la generation de listes spool simples en arriere-plan.