Les instructions en ABAP #
Messages #
Objectifs #
- Comprendre l’utilisation des
MESSAGESSAP 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 TEXTEpour lesMESSAGES - Créer et utiliser des
MESSAGESvia la transaction SE91
Definition #
Un
MESSAGEest une instruction ABAP permettant d’afficher une information à l’utilisateur pendant l’exécution d’un programme.
LesMESSAGESpeuvent ê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
MESSAGEen 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'.
MESSAGEjaune 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'.
MESSAGErouge 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'.
MESSAGEvert 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 TEXTErend lesMESSAGESdynamiques et modifiables sans toucher au code. - Étapes :
- Ouvrir l’option Saut →
ELEMENTS DE TEXTEdans un programme modifiable. - Aller dans l’onglet Symboles de texte.
- Renseigner le numéro du
MESSAGE(001) et son contenu. - Valider avec Entrée, enregistrer et activer.
- Dans le programme :
WRITE:/ ’ - MESSAGE FROM TEXT-ELEMENTS…'.
MESSAGE TEXT-001 TYPE 'I'.
les
ELEMENTS DE TEXTEsont 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
MESSAGESdans lesELEMENTS DE TEXTEcar il sera possible de renseigner leur traduction.
Créer des messages via se91 #
- Ouvrir la transaction
SE91. - Saisir le nom de la classe de
MESSAGES(ex :ZMSG_DEMO) et cliquer sur Créer si elle n’existe pas. - 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
- Le texte du
- Enregistrer et activer le
MESSAGE. - 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
MESSAGEsi 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 LIKEpermet de modifier l’apparence sans changer le type- Les
ELEMENTS DE TEXTErendent lesMESSAGESdynamiques et faciles à maintenir- La SE91 permet de créer des
MESSAGESré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 instructionsMOVE,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.
=etMOVEpermettent 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
REPLACEen ABAP - Remplacer une chaîne pattern par une autre new dans une chaîne source dobj
- Utiliser les options
FIRST OCCURRENCEouALL OCCURRENCES - Maîtriser les paramètres
REPLACEMENT COUNT,REPLACEMENT OFFSET,REPLACEMENT LENGTHetRESULTS
Definition #
REPLACEsert à 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
REPLACEpeut 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
REPLACEchange 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 COUNTpermet 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
WRITEen 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
WRITEpermet 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.
WRITEagit 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 actuelsy-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 LEFTouWRITE lv_var RIGHT - Longueur :
WRITE lv_var LENGTH 10 - Combiner texte et variable :
WRITE: / 'Nom :', lv_name, 'Age :', lv_age.
Pensez à
WRITEcomme 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
WRITEmontre directement les informations à l’utilisateur.
Concatenate #
Objectifs #
- Comprendre l’utilisation de
CONCATENATEen ABAP - Concaténer plusieurs chaînes de caractères
- Utiliser les options
SEPARATED BYetRESPECTING BLANKS - Stocker le résultat dans une variable
Definition #
CONCATENATEpermet 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 binaireSEPARATED BY= ajouter un petit séparateur entre chaque mot, comme un tiret ou une virguleRESPECTING 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 visibleRESPECTING 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
CONDENSEen ABAP - Supprimer les espaces superflus dans une chaîne de caractères
- Utiliser l’option
NO-GAPSpour enlever tous les espaces
Definition #
CONDENSEsert à 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 motsCONDENSE 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 minimalNO-GAPS= éliminer complètement tous les espaces- Très utile après un
CONCATENATEpour nettoyer le texte avant affichage ou traitement
Resume #
CONDENSE= supprimer les espaces inutiles dans une variableNO-GAPS= supprimer tous les espaces
plier le texte pour qu’il soit compact et lisible
Split #
Objectifs #
- Comprendre l’utilisation de l’instruction
SPLITen ABAP - Séparer une chaîne de caractères selon un séparateur défini
- Stocker le résultat dans des
VARIABLESou une table interne
Definition #
SPLITpermet 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_text5sont automatiquement de typeSTRING -
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
SPLITest l’inverse deCONCATENATE: 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
patterndans une chaîne sourcedobj - Identifier la première occurrence ou toutes les occurrences
- Utiliser les options
MATCH COUNT,MATCH OFFSET,MATCH LENGTH, etRESULTS
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ésMATCH COUNT= combien de motsMATCH 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
TRANSLATEpour manipuler du texte - Savoir convertir une chaîne en majuscules ou minuscules
- Savoir appliquer un masque de transformation sur une chaîne
Definition #
TRANSLATEsert à 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/LOWERest utile pour uniformiser le texte avant comparaison ou affichage.USING maskpermet 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 capitalesLOWER= écrire tout en lettres minusculesUSING 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
USINGmask 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
CLEARpour réinitialiser des variables - Savoir réinitialiser une ou plusieurs variables simultanément
- Appliquer
CLEARsur différents types de données : chaînes, numériques, dates, heures
Definition #
CLEARpermet de supprimer ou réinitialiser le contenu d’une variable.
Vider le contenu d’une boîte pour pouvoir la réutiliser.
L’instruction
CLEARremet 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.
CLEARfonctionne sur tous les types de variables : chaînes, numériques, dates, heures…- On peut
CLEARplusieurs 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,
CLEARest sûr et sans effet secondaire.
Resume #
CLEARsupprime 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’
OFFSETpour extraire des sous-chaînes - Savoir manipuler la position de départ et le nombre de caractères à extraire
- Appliquer l’
OFFSETpour réorganiser des chaînes, par exemple des dates
Definition #
L’
OFFSETpermet 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’
OFFSETpermet 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 → jourSY-DATUM+4(2): à partir de la 4ème position, prendre 2 caractères → moisSY-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
CONCATENATEpour 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