Aller au contenu
  1. Documentation/

Les instructions en ABAP

··24 mins· loading · loading · · ·
SAP ERP Back-End
Adrien D'acunto
Auteur
Adrien D’acunto
Sommaire

Les instructions en ABAP
#

Messages
#

Objectifs
#

  • Comprendre l’utilisation des MESSAGES SAP en ABAP
  • Identifier les différents types de MESSAGES : Informative, Warning, Error, Success
  • Savoir utiliser l’option DISPLAY LIKE pour changer l’apparence
  • Créer et référencer des ELEMENTS DE TEXTE pour les MESSAGES
  • Créer et utiliser des MESSAGES via la transaction SE91

Definition
#

Un MESSAGE est une instruction ABAP permettant d’afficher une information à l’utilisateur pendant l’exécution d’un programme.
Les MESSAGES peuvent être informative, avertissement, erreur ou succès, chacun avec un impact différent sur le programme.

Un MESSAGE est comme un panneau lumineux : selon sa couleur et sa position, il attire plus ou moins l’attention et peut bloquer ou non l’action de l’utilisateur.

Types de messages
#

Message informatif (i)
#

WRITE:/ ’ - MESSAGE TYPE I…'.

MESSAGE 'Ceci est un MESSAGE informatif.' TYPE 'I'.
  • Affiche une fenêtre popup simple ou un MESSAGE en bas à gauche.

post-it sur le tableau indiquant une information non urgente.

Message warning (w)
#

WRITE:/ ’ - MESSAGE TYPE W…'.

MESSAGE 'Attention : Opération risquée !' TYPE 'W'.
  • MESSAGE jaune ou rouge, mais non bloquant.

signal lumineux clignotant pour attirer l’attention.

Message error (e)
#

WRITE:/ ’ - MESSAGE TYPE E…'.

MESSAGE 'Erreur : Opération impossible.' TYPE 'E'.
  • MESSAGE rouge bloquant la suite du programme.

feu rouge ; l’utilisateur doit corriger avant de continuer.

Message success (s)
#

WRITE:/ ’ - MESSAGE TYPE I…'.

MESSAGE 'Succès.' TYPE 'S'.
  • MESSAGE vert indiquant réussite.

feu vert ou badge de validation.

Utilisation de display like
#

Permet d’afficher un MESSAGE d’un type différent de son type réel :

WRITE:/ ’ - MESSAGE DISPLAY LIKE…'.

MESSAGE 'Ceci est un MESSAGE informatif.' TYPE 'I' DISPLAY LIKE 'S'.

changer la couleur du panneau lumineux sans changer le contenu du MESSAGE/comportement.

Elements de texte pour messages
#

  • Utiliser les ELEMENTS DE TEXTE rend les MESSAGES dynamiques et modifiables sans toucher au code.
  • Étapes :
  1. Ouvrir l’option Saut → ELEMENTS DE TEXTE dans un programme modifiable.
  2. Aller dans l’onglet Symboles de texte.
  3. Renseigner le numéro du MESSAGE (001) et son contenu.
  4. Valider avec Entrée, enregistrer et activer.
  5. Dans le programme :

WRITE:/ ’ - MESSAGE FROM TEXT-ELEMENTS…'.

MESSAGE TEXT-001 TYPE 'I'.

les ELEMENTS DE TEXTE sont comme des panneaux configurables : le texte peut être changé facilement sans modifier le programme principal.

A défaut, il est préférable de créer les MESSAGES dans les ELEMENTS DE TEXTE car il sera possible de renseigner leur traduction.

Créer des messages via se91
#

  1. Ouvrir la transaction SE91.
  2. Saisir le nom de la classe de MESSAGES (ex : ZMSG_DEMO) et cliquer sur Créer si elle n’existe pas.
  3. Ajouter un numéro de MESSAGE (ex : 001, 002, …) et définir :
    • Le texte du MESSAGE
    • Le type (I, W, E, S)
    • Éventuellement la longueur et les paramètres dynamiques
  4. Enregistrer et activer le MESSAGE.
  5. Dans votre programme ABAP :

WRITE:/ ’ - MESSAGE FROM SE91 CLASS MSG…'.

MESSAGE e001(ZMSG_DEMO).

la SE91, c’est comme un atelier de fabrication de panneaux lumineux : tu crées ton panneau avec son texte et sa couleur, et tu peux le réutiliser dans tous tes programmes.

C’est l’idéal de créer dans une classe de MESSAGE si le programme/class/module function présentent de multiples textes. Ici aussi, il sera possible de renseigner les traductions.

Bonnes pratiques
#

Bonne pratique Explication
Toujours préciser le type de MESSAGE Facilite la lecture et le contrôle de l’utilisateur
Utiliser DISPLAY LIKE à bon escient Adapter l’attention sans modifier la logique
Préférer les ELEMENTS DE TEXTE Pour rendre le MESSAGE dynamique et facilement modifiable
Créer des MESSAGES réutilisables via SE91 Permet cohérence et centralisation des MESSAGES
Éviter les MESSAGES bloquants inutilement Prévenir les interruptions inutiles pour l’utilisateur

Resume
#

  • MESSAGE = afficher un MESSAGE SAP pour l’utilisateur
  • Types : I, W, E, S
  • DISPLAY LIKE permet de modifier l’apparence sans changer le type
  • Les ELEMENTS DE TEXTE rendent les MESSAGES dynamiques et faciles à maintenir
  • La SE91 permet de créer des MESSAGES réutilisables dans plusieurs programmes

panneaux lumineux ou post-it, chaque couleur et type indique un niveau d’importance


Instruction de calcul
#

Objectifs
#

  • Comprendre les opérations arithmétiques en ABAP
  • Utiliser les opérateurs =, +, -, *, / pour les calculs
  • Connaître les instructions correspondantes MOVE, ADD, SUBTRACT, MULTIPLY, DIVIDE
  • Visualiser et appliquer les calculs dans un programme ABAP

Definition
#

Comme dans tout langage de programmation, les variables numériques (N, I, P, etc.) peuvent être utilisées dans des opérations arithmétiques.

Les variables numériques sont comme des boîtes contenant des chiffres, et les opérations sont des machines qui manipulent ces chiffres : addition, soustraction, multiplication, division.

Operateurs arithmetiques
#

OPERATION SIGNE INSTRUCTION ABAP
EGAL = MOVE
ADDITION + ADD ... TO ...
SOUSTRACTION - SUBTRACT ... FROM ...
MULTIPLICATION * MULTIPLY ... BY ...
DIVISION / DIVIDE ... BY ...

Les expressions mathématiques avec =, +, -, *, / sont plus lisibles que les instructions MOVE, ADD, etc.

= (egal) ou move … to …
#

WRITE:/ ’ - = (EGAL) OU MOVE TO…'.

DATA: lv_a TYPE I,
      lv_b TYPE I,
      lv_c TYPE I,
      lv_d TYPE I.

lv_a = 3.
lv_b = lv_a.

MOVE 5    TO lv_c.
MOVE lv_c TO lv_d.

WRITE:/ 'Valeur de lv_a : ', lv_a,
      / 'Valeur de lv_b : ', lv_b,
      / 'Valeur de lv_c : ', lv_c,
      / 'Valeur de lv_d : ', lv_d.
  • = et MOVE permettent d’assigner une valeur à une variable

Le = = mettre directement un objet dans une boîte
MOVE = déplacer l’objet d’une boîte à une autre

Move multiple
#

WRITE:/ ’ - MOVE TO MULTIPLE…'.

MOVE: 5 TO lv_c,
      lv_c TO lv_d.
  • Permet d’attribuer plusieurs valeurs successivement

+ (plus) ou add … to …
#

WRITE:/ ’ - + (PLUS) OU ADD TO…'.

DATA: lv_a(2) TYPE I.

lv_a = 5 + 2.
ADD 7 TO lv_a.

- (moins) ou subtract … from …
#

WRITE:/ ’ - - (MOINS) OU SUBTRACT FROM…'.

DATA: lv_a(2) TYPE I,
      lv_b(2) TYPE I.

lv_a = 5 + 2.
lv_b = lv_a - 3.
SUBTRACT 3 FROM lv_b.

* (multiplication) ou multiply … by …
#

WRITE:/ ’ - * (MULTIPLICATION) OU MULTIPLY BY…'.

DATA: lv_a(2) TYPE I,
      lv_b(2) TYPE I,
      lv_c(2) TYPE I.

lv_a = 5 + 2.
lv_b = lv_a - 3.
lv_c = lv_a * lv_b.
MULTIPLY lv_c BY 2.

/ (division) ou divide … by …
#

WRITE:/ ’ - / (DIVISION) OU DIVIDE BY…'.

DATA: lv_a(2) TYPE I,
      lv_b(2) TYPE I,
      lv_c(2) TYPE I,
      lv_d(2) TYPE I.

lv_a = 5 + 2.
lv_b = lv_a - 3.
lv_c = lv_a * lv_b.
lv_d = lv_c / 2.
DIVIDE lv_d BY 7.
  • Visualiser chaque variable comme une boîte contenant un nombre
  • Chaque opération = action sur la boîte : ajouter, retirer, multiplier ou partager
  • Préférer les expressions (+, -, *, /) pour plus de lisibilité
  • MOVE, ADD, SUBTRACT, etc., restent utiles pour des instructions historiques ou explicites

Bonnes pratiques
#

Bonne pratique Explication
Préférer les opérateurs arithmétiques Plus lisibles et concis
Toujours initialiser les variables Evite les valeurs indéfinies
Vérifier les types de données Pour éviter les erreurs lors de division ou multiplication
Utiliser MOVE / ADD … pour clarifier l’historique des calculs Utile en maintenance et pour code lisible

Resume
#

  • Les variables numériques (I, N, P, F, DECFLOAT) peuvent subir des opérations arithmétiques
  • Opérateurs : =, +, -, *, /
  • Instructions historiques : MOVE, ADD, SUBTRACT, MULTIPLY, DIVIDE
  • Préférer les expressions pour plus de lisibilité
  • Toujours initialiser les variables et vérifier leur type avant les calculs

Replace
#

Objectifs
#

  • Comprendre l’utilisation de l’instruction REPLACE en ABAP
  • Remplacer une chaîne pattern par une autre new dans une chaîne source dobj
  • Utiliser les options FIRST OCCURRENCE ou ALL OCCURRENCES
  • Maîtriser les paramètres REPLACEMENT COUNT, REPLACEMENT OFFSET, REPLACEMENT LENGTH et RESULTS

Definition
#

REPLACE sert à trouver un mot ou motif dans une chaîne et le remplacer par un autre.

Corriger un mot dans un texte en le remplaçant par le mot correct.

Le REPLACE peut agir sur la première occurrence seulement ou sur toutes les occurrences d’un motif. On peut aussi savoir combien de remplacements ont été faits et où le dernier remplacement s’est produit.

Syntaxe
#

REPLACE [ {FIRST OCCURRENCE} | {ALL OCCURRENCES} OF ] pattern
        IN [ section_of ] dobj
        WITH new
        [ IN { BYTE | CHARACTER } MODE ]
        [ { RESPECTING | IGNORING } CASE ]
        [ REPLACEMENT COUNT rcnt ]
        { { [ REPLACEMENT OFFSET roff ] [ REPLACEMENT LENGTH rlen ] } | [ RESULTS result_tab|result_wa ] }.
  • FIRST OCCURRENCE : remplacer la première occurrence seulement
  • ALL OCCURRENCES : remplacer toutes les occurrences
  • IN section_of : remplacer dans une portion spécifique de la chaîne
  • IN BYTE|CHARACTER MODE : mode de lecture des caractères
  • RESPECTING|IGNORING CASE : tenir compte ou non de la casse
  • REPLACEMENT COUNT rcnt : nombre de remplacements effectués
  • REPLACEMENT OFFSET roff : position du dernier remplacement
  • REPLACEMENT LENGTH rlen : longueur du motif remplacé
  • RESULTS result_tab|result_wa : stocke le résultat dans une table ou structure

Visualisez votre chaîne comme une feuille de texte où chaque mot peut être corrigé ou remplacé.
FIRST OCCURRENCE = changer le premier mot trouvé, ALL OCCURRENCES = tous les mots identiques.

Exemple basique
#

WRITE:/ ’ - REPLACE…'.

DATA: lv_text1 TYPE STRING,
      lv_text2 TYPE STRING.

lv_text1 = lv_text2 = 'ABADAFAX'.

REPLACE FIRST OCCURRENCE OF 'A' IN lv_text1 WITH 'I'.
REPLACE ALL OCCURRENCES OF 'A' IN lv_text2 WITH 'O'.

WRITE: / 'lv_text1 = ', lv_text1,
       / 'lv_text2 = ', lv_text2.

Comme corriger une faute dans une phrase : le premier REPLACE change seulement le premier ‘A’, le second corrige tous les ‘A’.

Exemple - replacement count
#

WRITE:/ ’ - REPLACE COUNT…’.

DATA: lv_text TYPE STRING.

lv_text = 'ABADAFAX'.

REPLACE ALL OCCURRENCES OF 'A' IN lv_text WITH 'I'
    REPLACEMENT COUNT DATA(lv_count).

WRITE: / 'Nombre de remplacements = ', lv_count.

Le REPLACEMENT COUNT permet de savoir combien de modifications ont été effectuées.

Exemple - replacement offset
#

WRITE:/ ’ - REPLACE OFFSET…'.

DATA: lv_text1 TYPE STRING,
      lv_text2 TYPE STRING.

lv_text1 = lv_text2 = 'ABADAFAX'.

REPLACE FIRST OCCURRENCE OF 'A' IN lv_text1 WITH 'I'
    REPLACEMENT OFFSET DATA(lv_offset1).

REPLACE ALL OCCURRENCES OF 'A' IN lv_text2 WITH 'I'
    REPLACEMENT OFFSET DATA(lv_offset2).

WRITE: / 'Offset du premier remplacement = ', lv_offset1,
       / 'Offset du dernier remplacement = ', lv_offset2.

Comme noter la position exacte d’une correction dans un texte pour savoir où elle se situe.

Exemple - combinaison
#

WRITE:/ ’ - REPLACE COMBINAISON…'.

DATA: lv_text TYPE STRING.

lv_text = 'ABADAFAX'.

REPLACE ALL OCCURRENCES OF 'A' IN lv_text WITH 'I'
    REPLACEMENT COUNT DATA(lv_count)
    REPLACEMENT OFFSET DATA(lv_offset1).

WRITE: / 'Texte après remplacement = ', lv_text,
       / 'Nombre de remplacements = ', lv_count,
       / 'Position du dernier remplacement = ', lv_offset1.

Pour modifier une chaîne tout en suivant le nombre de remplacements et la position du dernier changement.

Resume
#

  • REPLACE = rechercher et remplacer un motif dans une chaîne
  • Peut modifier la première occurrence ou toutes les occurrences
  • Paramètres utiles : REPLACEMENT COUNT, REPLACEMENT OFFSET, LENGTH, RESULTS

corriger un texte et suivre les modifications effectuées


Write
#

Objectifs
#

  • Comprendre l’utilisation de la commande WRITE en ABAP
  • Afficher du texte et des valeurs de variables dans la fenêtre de sortie
  • Combiner texte fixe, variables et champs systèmes
  • Organiser l’affichage sur plusieurs lignes
  • Utiliser des options de mise en forme simples (longueur, justification)

Definition
#

La commande WRITE permet d’afficher des informations dans la fenêtre de sortie ou les rapports SAP.
On peut afficher du texte, des valeurs de variables ou des champs systèmes.

WRITE agit comme un haut-parleur ou un tableau blanc : il prend ce que vous lui donnez et le montre à l’utilisateur.
Les messages et variables sont les contenus que le haut-parleur diffuse.

Exemple de base
#

WRITE:/ ’ - WRITE…'.

DATA: lv_message1 TYPE string,
      lv_message2 TYPE string,
      lv_message3 TYPE string.

START-OF-SELECTION.

  " Définition du message
  lv_message1 = 'Bienvenue dans mon rapport SAP !'.
  lv_message2 = 'Tout va bien !'.
  lv_message3 = 'Merci pour votre attention'.

  " Affichage des messages
  WRITE:/ lv_message1.
  WRITE:/ lv_message2,
        / lv_message3.
  • / : indique une nouvelle ligne
  • Plusieurs variables peuvent être affichées sur la même ligne ou sur plusieurs lignes

Chaque / = retour à la ligne sur une feuille de papier.

Affichage de variables system
#

WRITE:/ ’ - SYSTEM VARIABLES…'.

WRITE:/ 'Informations système ABAP',
      / 'Mandant :     ', sy-mandt,
      / 'Utilisateur : ', sy-uname,
      / 'Date :        ', sy-datum,
      / 'Heure :       ', sy-uzeit.
  • sy-mandt : mandant actuel
  • sy-uname : utilisateur connecté
  • sy-datum : date système (AAAAMMJJ)
  • sy-uzeit : heure système (HHMMSS)

Visualiser ces champs comme l’en-tête d’un rapport officiel. Ils sont générés automatiquement par SAP.

Options de mise en forme
#

  • Justification : WRITE lv_var LEFT ou WRITE lv_var RIGHT
  • Longueur : WRITE lv_var LENGTH 10
  • Combiner texte et variable : WRITE: / 'Nom :', lv_name, 'Age :', lv_age.

Pensez à WRITE comme un tableau blanc où vous placez le texte et les valeurs exactement là où vous voulez qu’elles apparaissent.

Bonnes pratiques
#

Bonne pratique Explication
Utiliser / pour séparer les lignes Facilite la lecture du rapport
Ajouter des messages explicites L’utilisateur comprend mieux le contexte
Combiner texte et variables clairement Evite la confusion dans les rapports
Afficher les champs systèmes si utile Fournit un contexte automatique pour le rapport

Resume
#

  • WRITE = afficher du texte ou des valeurs dans la sortie SAP
  • / = nouvelle ligne
  • Peut afficher variables, texte fixe et champs systèmes
  • Options : justification, longueur, combinaison multiple

haut-parleur ou tableau blanc, chaque WRITE montre directement les informations à l’utilisateur.


Concatenate
#

Objectifs
#

  • Comprendre l’utilisation de CONCATENATE en ABAP
  • Concaténer plusieurs chaînes de caractères
  • Utiliser les options SEPARATED BY et RESPECTING BLANKS
  • Stocker le résultat dans une variable

Definition
#

CONCATENATE permet de fusionner plusieurs chaînes de caractères ou lignes d’une table interne et de stocker le résultat dans une variable cible.

Coller plusieurs bouts de texte sur une feuille pour former une phrase complète.

Syntaxe
#

CONCATENATE [ {dobj1 dobj2 ...} | {LINES OF itab} ]
    INTO result
    [IN {BYTE|CHARACTER} MODE]
    [SEPARATED BY sep]
    [RESPECTING BLANKS].
  • dobj1, dobj2… : chaînes ou variables à concaténer
  • LINES OF itab : concatène toutes les lignes d’une table interne
  • INTO result : variable où stocker le résultat
  • IN BYTE|CHARACTER MODE : mode de traitement des caractères (peu utilisé)
  • SEPARATED BY sep : caractère de séparation entre les éléments
  • RESPECTING BLANKS : conserve les espaces de chaque chaîne
  • IN BYTE MODE = travailler en mode “octet pur”, comme manipuler les lettres en binaire
  • SEPARATED BY = ajouter un petit séparateur entre chaque mot, comme un tiret ou une virgule
  • RESPECTING BLANKS = conserver exactement l’espace prévu pour chaque mot, utile pour les fichiers plats ou formats bancaires

Exemple
#

WRITE:/ ’ - CONCATENATE…'.

CONSTANTS: lc_text1(20) TYPE C VALUE 'Hello',
           lc_text2(20) TYPE C VALUE 'World',
           lc_text3(20) TYPE C VALUE 'Bienvenue',
           lc_text4(20) TYPE C VALUE 'sur',
           lc_text5(20) TYPE C VALUE 'SAP'.

DATA: lv_resul1(50) TYPE C,
      lv_resul2(50) TYPE C,
      lv_resul3(100) TYPE C.

" CONCATENATE simple
CONCATENATE lc_text1 lc_text2 lc_text3 lc_text4 lc_text5
  INTO lv_resul1.

" CONCATENATE avec séparateur
CONCATENATE lc_text1 lc_text2 lc_text3 lc_text4 lc_text5
  INTO lv_resul2
  SEPARATED BY '-'.

" CONCATENATE en respectant les espaces
CONCATENATE lc_text1 lc_text2 lc_text3 lc_text4 lc_text5
  INTO lv_resul3
  RESPECTING BLANKS.

WRITE:/ 'Sans option :     ', lv_resul1,
      / 'SEPARATED BY:     ', lv_resul2,
      / 'RESPECTING BLANKS:', lv_resul3.
  • Premier CONCATENATE : coller les mots bout à bout sans espace supplémentaire
  • Deuxième : coller les mots avec un tiret entre chaque mot
  • Troisième : coller les mots en conservant tous les espaces définis, comme des cases fixes sur une feuille

Visualiser chaque mot comme une carte à coller sur une feuille

  • SEPARATED BY = ajouter un espace ou un séparateur visible
  • RESPECTING BLANKS = respecter exactement la largeur de chaque mot
  • Les tables internes peuvent être fusionnées automatiquement ligne par ligne avec LINES OF itab

Resume
#

  • CONCATENATE = fusionner plusieurs chaînes dans une variable
  • Options importantes : SEPARATED BY, RESPECTING BLANKS

coller des cartes ou des mots sur une feuille pour former un texte complet


Condense
#

Objectifs
#

  • Comprendre l’utilisation de l’instruction CONDENSE en ABAP
  • Supprimer les espaces superflus dans une chaîne de caractères
  • Utiliser l’option NO-GAPS pour enlever tous les espaces

Definition
#

CONDENSE sert à réduire les espaces inutiles dans une chaîne de caractères.

Pousser tous les mots ensemble pour éviter les espaces vides, ou plier une feuille pour que tout le texte tienne sans espace inutile.

Syntaxe
#

CONDENSE text [NO-GAPS].
  • text : variable contenant la chaîne à traiter
  • NO-GAPS : supprime tous les espaces, y compris ceux entre les mots
  • Sans NO-GAPS = garder un espace simple entre chaque mot
  • Avec NO-GAPS = coller tous les mots ensemble

Exemple
#

WRITE:/ ’ - CONDENSE…'.

CONSTANTS: lc_text1(20) TYPE C VALUE 'Hello    ',
           lc_text2(20) TYPE C VALUE '    World    ',
           lc_text3(20) TYPE C VALUE '    Bienvenue    ',
           lc_text4(20) TYPE C VALUE '    sur    ',
           lc_text5(20) TYPE C VALUE '    SAP    '.

DATA: lv_result(50) TYPE C.

" CONCATENATION initiale
CONCATENATE lc_text1 lc_text2 lc_text3 lc_text4 lc_text5
  INTO lv_result.

WRITE:/ 'Sans CONDENSE :         ', lv_result.

" CONDENSE pour supprimer les espaces superflus
CONDENSE lv_result.
WRITE:/ 'Avec CONDENSE :         ', lv_result.

" CONDENSE NO-GAPS pour supprimer tous les espaces
CONDENSE lv_result NO-GAPS.
WRITE:/ 'Avec CONDENSE NO GAPS : ', lv_result.
  • Premier affichage : texte avec tous les espaces ajoutés
  • CONDENSE : supprimer les espaces superflus mais garder un espace simple entre les mots
  • CONDENSE NO-GAPS : coller tous les mots ensemble sans aucun espace
  • Visualiser la chaîne comme une ligne de mots avec trop d’espaces
  • CONDENSE = réorganiser la ligne pour ne garder qu’un espace minimal
  • NO-GAPS = éliminer complètement tous les espaces
  • Très utile après un CONCATENATE pour nettoyer le texte avant affichage ou traitement

Resume
#

  • CONDENSE = supprimer les espaces inutiles dans une variable
  • NO-GAPS = supprimer tous les espaces

plier le texte pour qu’il soit compact et lisible


Split
#

Objectifs
#

  • Comprendre l’utilisation de l’instruction SPLIT en ABAP
  • Séparer une chaîne de caractères selon un séparateur défini
  • Stocker le résultat dans des VARIABLES ou une table interne

Definition
#

SPLIT permet de découper une chaîne de caractères selon un séparateur et de stocker chaque partie dans une variable ou une table interne.

Prendre une phrase et couper chaque mot pour le mettre dans des boîtes séparées.

Syntaxe
#

SPLIT dobj
  AT sep
  INTO { {result1 result2 ...} | {TABLE itab} }
  [IN {BYTE|CHARACTER} MODE].
  • dobj : chaîne de caractères à séparer
  • AT sep : caractère séparateur
  • INTO result1 result2 … : variables pour recevoir les morceaux
  • INTO TABLE itab : table interne pour recevoir tous les morceaux
  • IN BYTE|CHARACTER MODE : mode de traitement des caractères
  • IN BYTE MODE = travailler en mode binaire pur (peu utilisé)
  • IN CHARACTER MODE = travailler sur les caractères comme des lettres

Exemple de base
#

WRITE:/ ’ - SPLIT…'.

DATA: lv_text1(20) TYPE C,
      lv_text2(20) TYPE C,
      lv_text3(20) TYPE C,
      lv_text4(20) TYPE C,
      lv_text5(20) TYPE C.

CONSTANTS: lc_string(50) TYPE C VALUE 'Hello World Bienvenue sur SAP'.

SPLIT lc_string
  AT space
  INTO lv_text1 lv_text2 lv_text3 lv_text4 lv_text5.

WRITE:/ 'lv_text1 : ', lv_text1,
      / 'lv_text2 : ', lv_text2,
      / 'lv_text3 : ', lv_text3,
      / 'lv_text4 : ', lv_text4,
      / 'lv_text5 : ', lv_text5.

Chaque mot de la phrase est mis dans une boîte distincte

Declaration dynamique
#

  • Les variables peuvent être créées directement dans l’instruction SPLIT

WRITE:/ ’ - SPLIT DYNAMIQUE…'.

CONSTANTS: lc_string(50) TYPE C VALUE 'Hello World Bienvenue sur SAP'.

SPLIT lc_string AT space
  INTO DATA(lv_text1)
      DATA(lv_text2)
      DATA(lv_text3)
      DATA(lv_text4)
      DATA(lv_text5).
  • Les variables lv_text1 à lv_text5 sont automatiquement de type STRING

  • Pour une table interne :

CONSTANTS: lc_string(50) TYPE C VALUE 'Hello World Bienvenue sur SAP'.

SPLIT lc_string AT space INTO TABLE DATA(tab_result).

Chaque mot devient un élément d’une liste

  • Visualiser la chaîne comme une phrase à découper en mots
  • SPLIT est l’inverse de CONCATENATE : on passe de la phrase complète aux morceaux
  • Très utile pour analyser ou transformer des données textuelles

Resume
#

  • SPLIT = découper une chaîne selon un séparateur
  • Résultat dans variables individuelles ou table interne

mettre chaque mot dans une boîte séparée ou dans une liste


Find
#

Objectifs
#

  • Comprendre l’utilisation de l’instruction FIND en ABAP
  • Rechercher une chaîne de caractères pattern dans une chaîne source dobj
  • Identifier la première occurrence ou toutes les occurrences
  • Utiliser les options MATCH COUNT, MATCH OFFSET, MATCH LENGTH, et RESULTS

Definition
#

FIND sert à localiser des mots ou motifs dans une phrase.

Chercher un mot spécifique dans un texte pour savoir où il se trouve ou combien de fois il apparaît.

Syntaxe
#

FIND [ {FIRST OCCURRENCE} | {ALL OCCURRENCES} OF ] pattern
    IN [SECTION OFFSET i1 LENGTH i2 OF] dobj
    [IN {BYTE|CHARACTER} MODE]
    [ {RESPECTING | IGNORING} CASE]
    [MATCH COUNT mcnt]
    { { [MATCH OFFSET moff] [MATCH LENGTH mlen] } | [RESULTS lt_tab|ls_structure] }.
  • FIRST OCCURRENCE : rechercher la première occurrence
  • ALL OCCURRENCES : rechercher toutes les occurrences
  • IN SECTION OFFSET i1 LENGTH i2 OF dobj : rechercher dans une partie spécifique de la chaîne
  • IN BYTE|CHARACTER MODE : mode de lecture des caractères (peu utilisé)
  • RESPECTING|IGNORING CASE : tenir compte ou non de la casse
  • MATCH COUNT mcnt : nombre de fois que le pattern a été trouvé
  • MATCH OFFSET moff : position du motif dans la chaîne
  • MATCH LENGTH mlen : longueur du motif trouvé
  • RESULTS lt_tab|ls_structure : stocke le résultat dans une table ou structure

Cadrer la recherche dans un passage précis d’un texte et noter à quelle position apparaît le mot recherché.

Exemple - offset et length
#

WRITE:/ ’ - FIND OFFSET ET LENGTH…'.

DATA lv_text TYPE STRING.

lv_text = 'ABADAFAX'.

FIND FIRST OCCURRENCE OF 'A'
    IN SECTION OFFSET 2 LENGTH 4 OF lv_text
    RESULTS DATA(ls_result).

WRITE: /'OFFSET = ', ls_result-OFFSET,
       /'LENGTH = ', ls_result-LENGTH.

Chercher un mot dans un paragraphe limité à quelques lignes.

Exemple - match count
#

WRITE:/ ’ - FIND COUNT…'.

DATA: lv_count TYPE I,
      lv_text  TYPE STRING.

lv_text = 'ABADAFAX'.
FIND ALL OCCURRENCES OF 'A' IN lv_text MATCH COUNT lv_count.

WRITE: 'lv_count = ', lv_count.

Compter combien de fois un mot apparaît dans une phrase.

Exemple - match offset
#

WRITE:/ ’ - FIND OFFSET…'.

DATA: lv_offset1 TYPE I,
      lv_offset2 TYPE I,
      lv_text    TYPE STRING.

lv_text = 'ABADAFAX'.

FIND ALL OCCURRENCES OF 'A' IN lv_text MATCH OFFSET lv_offset1.
FIND FIRST OCCURRENCE OF 'A' IN lv_text MATCH OFFSET lv_offset2.

WRITE:  'lv_offset1 = ', lv_offset1,
      / 'lv_offset2 = ', lv_offset2.

Noter la position du mot dans la phrase pour savoir où il commence ou finit.

Exemple - combinaison
#

WRITE:/ ’ - FIND COMBINAISON…'.

DATA: lv_text TYPE STRING.

lv_text = 'ABADAFAX'.

FIND ALL OCCURRENCES OF 'A' IN lv_text
    MATCH COUNT DATA(lv_count).

FIND ALL OCCURRENCES OF 'A' IN lv_text
    MATCH OFFSET DATA(lv_offset1).

FIND FIRST OCCURRENCE OF 'A' IN lv_text
    MATCH OFFSET DATA(lv_offset2).

WRITE: /'lv_count   = ', lv_count,
       /'lv_offset1 = ', lv_offset1,
       /'lv_offset2 = ', lv_offset2.

Savoir combien de fois le mot apparaît et à quelle position exacte.

  • Visualiser la chaîne comme une phrase à scanner à la recherche d’un mot
  • FIRST OCCURRENCE = le premier mot trouvé
  • ALL OCCURRENCES = tous les mots trouvés
  • MATCH COUNT = combien de mots
  • MATCH OFFSET = position du mot dans la phrase

Resume
#

  • FIND = rechercher un motif dans une chaîne
  • Peut retourner position, longueur, nombre d’occurrences, ou résultats dans structure/table

scanner un texte pour identifier et localiser les mots précis


Translate
#

Objectifs
#

  • Comprendre l’usage de TRANSLATE pour manipuler du texte
  • Savoir convertir une chaîne en majuscules ou minuscules
  • Savoir appliquer un masque de transformation sur une chaîne

Definition
#

TRANSLATE sert à modifier la casse ou appliquer un masque sur une chaîne de caractères.

Prendre une phrase et la transformer entièrement en majuscules, en minuscules, ou selon un code de substitution précis.

les paramètres UPPER / LOWER est utile pour uniformiser le texte avant comparaison ou affichage. USING mask permet de transformer lettre par lettre selon une logique spécifique.

Syntaxe
#

TRANSLATE text {TO {UPPER | LOWER} CASE} | {USING mask}.
  • TO UPPER CASE : convertit tous les caractères en majuscules
  • TO LOWER CASE : convertit tous les caractères en minuscules
  • USING mask : applique une logique de transformation définie par un masque
  • UPPER = écrire tout en lettres capitales
  • LOWER = écrire tout en lettres minuscules
  • USING mask = appliquer un code spécial de substitution lettre par lettre, comme un message codé

Exemple basique
#

WRITE:/ ’ - TRANSLATE…'.

DATA: lv_text1 TYPE STRING,
      lv_text2 TYPE STRING.

lv_text1 = lv_text2 = 'Hello World'.

TRANSLATE lv_text1 TO UPPER CASE.
TRANSLATE lv_text2 TO LOWER CASE.

WRITE: / 'lv_text1 = ', lv_text1,
       / 'lv_text2 = ', lv_text2.
  • lv_text1 → HELLO WORLD
  • lv_text2 → hello world

Transformer une phrase en majuscules ou minuscules pour uniformiser l’écriture.

Très utile avant de comparer deux chaînes pour éviter les erreurs dues à la casse.

Exemple avec masque
#

WRITE:/ ’ - TRANSLATE WITH MASK…'.

DATA: lv_text3 TYPE STRING.

lv_text3 = 'Barbcbdbarb'.

TRANSLATE lv_text3 USING 'ABBAabba'.

WRITE: / 'lv_text3 = ', lv_text3.
  • Masque ABBAabba :

    • A → B
    • B → A
    • a → b
    • b → a
  • Résultat final : Abracadabra

Remplacer certaines lettres par d’autres selon un code précis, comme un jeu de substitutions ou un message codé.

Le masque agit lettre par lettre, remplaçant chaque caractère trouvé par son correspondant dans le masque. Pratique pour corriger ou transformer des chaînes selon un motif défini.

Vérifier que la variable cible est de type STRING pour éviter les erreurs.

Resume
#

  • TRANSLATE = modifier la casse (UPPER / LOWER) ou appliquer un masque (USING)
  • Permet d’uniformiser ou transformer le texte avant traitement
  • Les résultats sont stockés directement dans la variable cible
  • USING mask permet des transformations complexes lettre par lettre
  • Utilisation conseillée : normaliser le texte avant comparaison, affichage ou traitement automatisé

Clear
#

Objectifs
#

  • Comprendre le rôle de CLEAR pour réinitialiser des variables
  • Savoir réinitialiser une ou plusieurs variables simultanément
  • Appliquer CLEAR sur différents types de données : chaînes, numériques, dates, heures

Definition
#

CLEAR permet de supprimer ou réinitialiser le contenu d’une variable.

Vider le contenu d’une boîte pour pouvoir la réutiliser.

L’instruction CLEAR remet chaque variable à sa valeur par défaut selon son type

  • Chaîne → vide (’')
  • Numérique → 0
  • Date → 00000000
  • Heure → 000000

Syntaxe
#

CLEAR dobj.
  • dobj : la variable ou la liste de variables à réinitialiser

Mettre tous les objets d’une boîte à zéro ou à vide avant de recommencer un nouvel usage.

Réinitialiser les variables avant un calcul ou un traitement répétitif pour éviter des valeurs résiduelles.

Exemple
#

WRITE:/ ’ - CLEAR…'.

DATA: lv_result(50) TYPE C,
      lv_int(5)     TYPE I,
      lv_date       TYPE D,
      lv_hour       TYPE T.

lv_result = 'Hello World'.
lv_int    = 5.
lv_date   = SY-DATUM.
lv_hour   = SY-UZEIT.

WRITE:/ 'Avant le CLEAR'.
WRITE:/ 'Résultat  : ', lv_result.
WRITE:/ 'Entier    : ', lv_int.
WRITE:/ 'Date      : ', lv_date.
WRITE:/ 'Heure     : ', lv_hour.

CLEAR: lv_result,
       lv_int,
       lv_date,
       lv_hour.

WRITE:/.
WRITE:/ 'Après le CLEAR'.
WRITE:/ 'Résultat  : ', lv_result.
WRITE:/ 'Entier    : ', lv_int.
WRITE:/ 'Date      : ', lv_date.
WRITE:/ 'Heure     : ', lv_hour.

Après un CLEAR, toutes les boîtes sont vides et prêtes à recevoir de nouvelles informations.

  • CLEAR fonctionne sur tous les types de variables : chaînes, numériques, dates, heures…
  • On peut CLEAR plusieurs variables en même temps en les séparant par des virgules
  • Très utile pour réinitialiser avant un nouveau calcul ou traitement de données

Même si la variable est déjà vide ou à zéro, CLEAR est sûr et sans effet secondaire.

Resume
#

  • CLEAR supprime le contenu d’une variable
  • Réinitialise toutes les variables à leurs valeurs par défaut
  • Peut traiter une ou plusieurs variables simultanément
  • Utilisation conseillée pour éviter des résidus de valeurs avant de nouveaux traitements

Offset (reorganisation)
#

Objectifs
#

  • Comprendre le fonctionnement de l’OFFSET pour extraire des sous-chaînes
  • Savoir manipuler la position de départ et le nombre de caractères à extraire
  • Appliquer l’OFFSET pour réorganiser des chaînes, par exemple des dates

Definition
#

L’OFFSET permet de sélectionner une portion spécifique d’une chaîne de caractères à partir d’une position donnée et sur un nombre de caractères défini.

Prendre un morceau d’une baguette à partir d’une certaine position et d’une certaine longueur.

Chaque caractère d’une chaîne a une position, en commençant à 0. L’OFFSET permet de dire : “Je veux commencer ici et prendre tant de caractères.”

Syntaxe
#

Variable[+pos](nbre)
  • pos : position de départ dans la chaîne (0 = première position)
  • nbre : nombre de caractères à extraire

Comme découper une phrase à partir d’un mot précis et ne prendre que quelques lettres ou mots.

La position commence toujours à 0, sinon vous risquez de récupérer le mauvais caractère.

Exemple : reorganiser une date
#

WRITE:/ ’ - OFFSET…'.

DATA: lv_date(10) TYPE C.

CONCATENATE SY-DATUM+6(2)
            SY-DATUM+4(2)
            SY-DATUM(4)
  INTO lv_date
  SEPARATED BY '-'.

CONDENSE lv_date NO-GAPS.

WRITE:/ SY-DATUM,
      / lv_date.
  • SY-DATUM+6(2) : à partir de la 6ème position, prendre 2 caractères → jour
  • SY-DATUM+4(2) : à partir de la 4ème position, prendre 2 caractères → mois
  • SY-DATUM(4) : prendre les 4 premiers caractères → année

Prendre une date au format AAAAMMJJ, découper les morceaux correspondants au jour, mois et année, puis les remettre dans un nouvel ordre dans une nouvelle boîte.

  • La première position dans une chaîne commence toujours à 0
  • Très utile pour reformater des chaînes, extraire des sous-chaînes ou manipuler des dates
  • Souvent combiné avec CONCATENATE pour reconstruire une chaîne dans un nouvel ordre

Comme découper des éléments d’un puzzle pour les remettre dans l’ordre que vous souhaitez.

Resume
#

  • Variable+pos permet d’extraire une portion d’une chaîne
  • pos indique la position de départ
  • nbre indique le nombre de caractères à prendre
  • Très utile pour réorganiser et reformater des chaînes, notamment les dates ou codes

Articles connexes

Introduction ABAP
·16 mins· loading · loading
SAP ERP Back-End
Structure d'un programme ABAP
··14 mins· loading · loading
SAP ERP Back-End
Variables & Déclarations en ABAP
··11 mins· loading · loading
SAP ERP Back-End
Dracula Theme
·1 min· loading · loading
SAP ERP
Fonctions Commerciales et SAP - Guide Complet
··9 mins· loading · loading
ERP SAP
Introduction à SAP
··8 mins· loading · loading
ERP SAP