Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Apprendre à programmer avec ABAP
  3. Instructions basiques ABAP
Extrait - Apprendre à programmer avec ABAP Les fondamentaux du développement sur SAP (avec exercices et corrigés)
Extraits du livre
Apprendre à programmer avec ABAP Les fondamentaux du développement sur SAP (avec exercices et corrigés) Revenir à la page d'achat du livre

Instructions basiques ABAP

Variables et constantes

Comme dans tout langage de programmation, l’ABAP contient des variables et des constantes. Par définition, une variable est un symbole informatique associant un nom à une valeur qui peut varier durant l’exécution du programme. Cette définition s’applique également à une constante, à la différence près que sa valeur est fixée dès le début et ne changera jamais au cours de l’exécution du programme.

On retrouve sur SAP les types de variables suivants :

Types de variables ABAP

Type

Description

Longueur par défaut

Valeur par défaut

Exemple

c

Chaîne de caractères alphanumériques

1

"

’ABC012’

n

Numérique

1

0

5

d

Date

8

00000000

20090412

t

Heure

6

000000

134523

x

Hexadécimal

1

X’0’

65AF

i

Entier

4

0

5

p

Nombre à virgule

8

0

5,6

f

Format scientifique

8

0

2,2 E+209

string

Texte long

Variable

"

N’importe quelle chaîne de caractères

xstring

String d’hexadécimal

Variable

N’importe quelle chaîne hexadécimale

Le format date est de type AnnéeMoisJour (AAAAMMJJ), pour un affichage plus adéquat, il faudra toujours modifier la variable date (voir un exemple dans la section Opérations sur variable texte de ce chapitre).

Si le type entier i et le type numérique n sont comparés, il apparaît qu’ils sont sensiblement les mêmes. En fait, pour apporter un peu plus de précisions, le type entier i est, comme son nom l’indique, une chaîne numérique de nombres entiers alors que le type numérique n est aussi une chaîne numérique mais stockée sous forme de caractères, ce qui est pratique lors d’un travail avec des instructions sur des variables texte comme le CONCATENATE (cf. section Opérations sur variable texte de ce chapitre).

Maintenant que les différents types de variables ont été vus, il reste à savoir comment elles sont déclarées en ABAP. Pour cela, on utilise l’instruction DATA puis le nom de la variable (libre), sa longueur entre parenthèses, l’instruction de référence (qui peut être égale à TYPE, LIKE... comme dans l’exemple ci-dessous) puis son type :


DATA v_name(10) TYPE...

Opérations arithmétiques

Comme dans tout langage de programmation, les variables de types numériques (entier, avec décimales...) peuvent être utilisées dans des opérations arithmétiques.

Tout d’abord, pour assigner une valeur à une variable, les instructions MOVE ou égal (=) sont utilisées.

Exemple


DATA: v_a(2) TYPE i, 
      v_b(2) TYPE i, 
      v_c(2) TYPE i, 
      v_d(2) TYPE i. 
 
v_a = 3. 
v_b = v_a. 
MOVE 5   TO v_c. 
MOVE v_c TO v_d. 
 
WRITE:/ 'Valeur de v_a : ', v_a, 
      / 'Valeur de v_b : ', v_b, 
      / 'Valeur de v_c : ', v_c, 
      / 'Valeur de v_d : ', v_d.
 

Quatre variables ont été créées V_A, V_B, V_C et V_D, toutes de type entier i avec une longueur d’une seule position. Tout d’abord, la valeur ’3’ sera assignée par un égal (=) à la variable V_A, puis la variable V_B prendra la valeur de V_A. Dans un deuxième temps, l’instruction MOVE va commencer par attribuer la valeur ’5’ à...

Opérations sur variable texte

Comme pour les variables de type numérique, il existe des opérations sur les chaînes de caractères dont voici quelques-unes des plus utilisées.

Le chapitre s’organisera de la façon suivante : pour chaque opération, l’instruction complète sera affichée avec tous les paramètres disponibles (obligatoires ou optionnels entre crochets), suivie d’une description détaillée afin que son rôle soit bien compris et facilement utilisable lors d’un cas d’emploi.

1. CONCATENATE


CONCATENATE {dobj1 dobj2 ...}|{LINES OF itab}  
            INTO result  
            [IN {BYTE|CHARACTER} MODE]  
            [SEPARATED BY sep]  
            [RESPECTING BLANKS]. 
 

CONCATENATE permet comme son nom l’indique de concaténer plusieurs chaînes de caractères définies par dobj1, dobj2… ou les lignes d’une table interne (LINES OF itab - itab pour l’anglais Internal Table, soit table interne), et de stocker le résultat dans une variable cible définie après le INTO.

Paramètres supplémentaires optionnels :

  • IN BYTE MODE ou IN CHARACTER MODE, est un paramètre qui revient assez souvent en ABAP. La valeur par défaut sera toujours IN CHARACTER MODE. IN BYTE MODE est le plus souvent utilisé lors d’un travail avec des variables de type hexadécimal, autant dire assez rarement.

  • SEPARATED BY renseigne le caractère de séparation entre les chaînes de caractères dans la variable résultat.

  • RESPECTING BLANKS affiche la chaîne complète y compris les espaces. Par exemple, si la variable de sortie est définie comme une chaîne de caractères de vingt positions, mais que le résultat du CONCATENATE est seulement un texte de cinq, le RESPECTING BLANKS affichera le texte de cinq caractères puis quinze espaces. Ce procédé est utilisé pour l’envoi de fichiers plats à des banques par exemple et dont le nombre de colonnes de chaque cellule...

Instructions conditionnelles

1. IF... ENDIF


IF log_exp1.  
  [statement_block1]  
[ELSEIF log_exp2.  
  [statement_block2]]  
...  
[ELSE.  
  [statement_blockn]]  
ENDIF. 
 

L’instruction IF est une condition permettant de contrôler et de comparer une variable selon une valeur ou une autre variable, et d’exécuter un traitement si la condition est vraie.

Exemple


DATA: v_a TYPE i,  
      v_b TYPE i,  
      v_c TYPE i. 
 
v_b = 3.  
V_c = 2.  
 
v_a = v_b + v_c. 
 
IF v_a = 5. 
  WRITE:/ 'Condition confirmée, v_a = 5'. 
ENDIF.
 

Trois variables ont été créées, V_A, V_B et V_C de type entier. V_B prend la valeur ’3’, V_C, la valeur ’2’, quant à V_A elle est la somme de V_B et V_C. Vient ensuite une condition, comparant la variable V_A avec la valeur ’5’. Si cette condition est valide, le texte ’Condition confirmée, v_a = 5’ sera affiché.

images/04RI18.png

L’opérateur de comparaison de cette condition est le signe égal (=) mais d’autres existent également sur SAP.

a. Pour tout type de données

Les opérateurs de comparaison suivants peuvent être utilisés pour tous les types de données, que ce soit pour des valeurs numériques, alphanumériques ou même du texte.

Opérateurs de comparaison pour tout type de données

Opération

Signe

Mot-clé

Signification

Egal

=

EQ

EQual

Strictement supérieur à

>

GT

Greater Than

Supérieur ou égal à

>=

GE

Greater or Equal

Strictement inférieur à

<

LT

Less Than

Inférieur ou égal à

<=

LE

Less or Equal

Différent

<>

NE

Not Equal

Au début du livre dans la section concernant le dump (cf. chapitre Qu’est-ce que la programmation ? - Les étapes de la programmation), il a été vu que l’exécution d’un programme pouvait s’arrêter brutalement et retourner un dump dû à une division par zéro par exemple.

Exemple d’un code retournant un dump lors de l’exécution


DATA: v_a      TYPE i, 
      v_b ...

Les boucles

1. DO… ENDDO


DO [n TIMES].  
  [statement_block]  
ENDDO.
 

Une boucle en programmation est un processus permettant de répéter une opération autant de fois que nécessaire. En ABAP, il en existe trois au total (une sera développée dans le chapitre Les tables internes - Organisation et Lecture) dont la première est le DO… ENDDO.

L’option n TIMES permet de définir combien de fois la boucle doit être répétée.

Cas pratique avec l’exemple ci-dessous :


DO 5 TIMES. 
  WRITE:/ sy-index. 
ENDDO.
 

La variable système SY-INDEX est un compteur et indique donc combien de fois la boucle a été exécutée. Ainsi le DO a été paramétré pour être exécuté cinq fois et à chaque fois, la variable SY-INDEX est affichée. Le résultat final sera le suivant :

images/04RI30.png

Il est très important de toujours définir une sortie à une boucle au risque de créer une boucle infinie. Dans cet exemple l’option n TIMES a été utilisée, mais il est également possible d’utiliser des instructions comme EXIT.

Ainsi en reprenant l’exemple ci-dessus, mais sans l’utilisation de n TIMES :


DO. 
  IF sy-index > 5. 
    EXIT. 
  ENDIF. 
  WRITE:/ sy-index. 
ENDDO.
 

La boucle est appelée mais sans paramètre de sortie défini au préalable, une première condition va vérifier si la variable système SY-INDEX est strictement supérieure à ’5’ : si oui alors le programme sortira de la boucle (EXIT), sinon, il n’entrera pas dans cette condition et affichera la valeur de SY-INDEX à l’écran.

À noter qu’il aurait été possible également d’utiliser un ELSE sans qu’il n’y ait de changement dans le résultat :


DO. 
  IF sy-index > 5. 
    EXIT. 
  ELSE. 
    WRITE:/ sy-index.  
  ENDIF. 
ENDDO.
 

Il existe également deux...

Les erreurs ABAP

Pour terminer ce chapitre, il serait intéressant de s’attarder sur les types d’erreurs rencontrées pendant un développement. Il en existe deux principales : l’erreur de syntaxe et le dump.

Dans l’éditeur ABAP, il a été vu qu’il était possible de contrôler le programme afin de s’assurer qu’il ne comporte pas d’erreurs de syntaxe comme dans l’exemple qui suit :


DATA: v_a      TYPE i, 
      v_b      TYPE i, 
      v_result TYPE i. 
 
v_a = 5. 
v_b égal 0. 
 
v_result = v_a / v_b. 
WRITE v_result.
 

Le mot ’égal’ a été délibérément écrit ainsi. Une fois ces lignes insérées, le programme est sauvé puis contrôlé. Une liste d’erreurs et/ou de warning apparaît en bas de l’écran.

images/04RI43.png

En double cliquant sur la ligne de description, l’éditeur va automatiquement se rendre au niveau du code avec un problème pour correction. Il est possible de tenter également d’activer le programme, mais cette fois, une fenêtre pop-up est affichée avec trois options possibles :

images/04RI44.png

1.

Activer et donc ne pas tenir compte des erreurs, et continuer l’activation.

2.

Traiter pour afficher les erreurs en bas de l’écran comme lors du Contrôle.

3.

Interrompre pour terminer le processus d’activation.

Bien évidemment, l’option Activer, alors qu’il existe une erreur, est à bannir, elle ne doit jamais être choisie, excepté...

Exercice

Dans un nouveau programme Z que vous aurez créé en local (nom libre), écrivez un code en langage ABAP répondant à ces critères :

1.

Extraire le jour, le mois et l’année de la date système SY-DATUM et l’afficher sous format ’DD/MM/AAAA’ (il pourrait être précédé par le texte d’introduction ’Date du jour : ’).

2.

Ensuite le programme ira lister toutes les dates du mois en cours à partir de la date du jour (faire bien attention aux mois de 30 et de 31 jours). Dans un souci de facilité, on considérera le mois de février avec 28 jours. Toutes les dates seront au format ’JJ/MM/AAAA’.

3.

Ce programme devra être utilisable pour n’importe quelle date sans avoir à le modifier quand nécessaire.