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 :
-
Nouvelle ligne (
/) :WRITE / <sortie>.Commence la sortie sur une nouvelle ligne dans la premiere colonne (colonne 1).
-
Position absolue (
AT <colonne>) :WRITE AT <colonne> <sortie>.WRITE AT /<colonne> <sortie>. " Combine: Nouvelle ligne et colonneCommence la sortie sur la ligne actuelle (ou une nouvelle ligne avec
AT /) a partir du numero de colonne specifie<colonne>. -
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 gaucheCENTERED: CentreRIGHT-JUSTIFIED: Aligne a droite (par defaut pour les types numeriques) Pas d’espace :NO-GAP: Supprime l’espace automatique entre les sortiesWRITEconsecutives 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 (typef), sortie avec exposant<exp>. Apparence (couleurs, etc.) :COLOR <couleur> | COL_<cle> | <n>: Definit la couleur.<couleur>peut etre1-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 typesSYM).AS ICON: Affiche une icone (par ex.ICON_OKAY,ICON_CANCEL; voir le groupe de typesICON).AS LINE: Dessine des lignes (utilise avecULINE,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: BonjourWRITE 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/20WRITE: / '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 espace4. 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 saisieWRITE: / 'Point:' AS SYMBOL, sym_bullet AS SYMBOL NO-GAP, ' Texte'.ULINE AT /1(30). " Ligne horizontale sur 30 colonnes sur une nouvelle ligneRemarques importantes
- L’instruction
WRITEest fondamentale pour le traitement de liste classique ABAP. - La largeur de la liste est normalement determinee par l’ajout
LINE-SIZEde l’instructionREPORT. - 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,
WRITEest 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.