Documentation du premier programme ABAP avec erreur #
Vue d’ensemble #
Ce document explique le programme ABAP ZAELION_ADA_UNIT01_03 et ses fichiers inclus.
Structure du Programme #
Le programme est composé de 4 fichiers :
- ZAELION_ADA_UNIT01_03 - Programme principal
- ZAELION_ADA_UNIT01_03_TOP - Déclarations globales (Include TOP)
- ZAELION_ADA_UNIT01_03_SCR - Écran de sélection (Include SCR)
- ZAELION_ADA_UNIT01_03_F01 - Sous-programmes et formulaires (Include F01)
Code du Programme Principal #
REPORT ZAELION_ADA_UNIT01_03.
INCLUDE ZAELION_ADA_UNIT01_03_TOP.
INCLUDE ZAELION_ADA_UNIT01_03_SCR.
INCLUDE ZAELION_ADA_UNIT01_03_F01.
DATA: lv_num TYPE i,
lv_den TYPE i,
lv_res TYPE i.
lv_num = 10.
lv_den = 0.
lv_res = lv_num / lv_den.
WRITE: / 'Résultat :', lv_res.
Explication Détaillée #
Déclaration du Report #
REPORT ZAELION_ADA_UNIT01_03.
Déclare un programme exécutable nommé ZAELION_ADA_UNIT01_03.
Inclusion des Fichiers #
INCLUDE ZAELION_ADA_UNIT01_03_TOP.
INCLUDE ZAELION_ADA_UNIT01_03_SCR.
INCLUDE ZAELION_ADA_UNIT01_03_F01.
Ces lignes incluent trois fichiers externes qui sont actuellement vides mais suivent la structure standard ABAP :
- TOP : pour les déclarations de données globales
- SCR : pour les paramètres de sélection et l’écran
- F01 : pour les routines et sous-programmes
Déclaration des Variables #
DATA: lv_num TYPE i,
lv_den TYPE i,
lv_res TYPE i.
Trois variables de type entier (i) sont déclarées :
lv_num: le numérateurlv_den: le dénominateurlv_res: le résultat
Attribution des Valeurs #
lv_num = 10.
lv_den = 0.
- Le numérateur reçoit la valeur 10
- Le dénominateur reçoit la valeur 0
Calcul de Division #
lv_res = lv_num / lv_den.
Cette ligne effectue une division : 10 / 0
Affichage du Résultat #
WRITE: / 'Résultat :', lv_res.
Affiche le résultat à l’écran.
PROBLÈME CRITIQUE : Division par Zéro #
Nature du Problème #
Ce programme contient une erreur fatale : une division par zéro à la ligne lv_res = lv_num / lv_den.
Conséquences #
- Dump Runtime : Le programme génèrera une erreur d’exécution SAP (COMPUTE_INT_ZERODIVIDE)
- Arrêt du programme : L’exécution s’arrêtera brutalement
- Aucun résultat affiché : La ligne WRITE ne sera jamais atteinte
Solution Recommandée #
Il faut ajouter une vérification avant la division :
DATA: lv_num TYPE i,
lv_den TYPE i,
lv_res TYPE i.
lv_num = 10.
lv_den = 0.
IF lv_den <> 0.
lv_res = lv_num / lv_den.
WRITE: / 'Résultat :', lv_res.
ELSE.
WRITE: / 'Erreur : Division par zéro impossible!'.
ENDIF.
Bonnes Pratiques ABAP #
Pour améliorer ce programme, considérez :
- Gestion des erreurs : Toujours vérifier les valeurs avant une division
- Paramètres d’entrée : Utiliser l’écran de sélection (SCR) pour permettre à l’utilisateur de saisir les valeurs
- Documentation : Ajouter des commentaires explicatifs
- Types de données : Utiliser des types appropriés (par exemple,
ppour des décimales)
Exemple de Code Amélioré #
REPORT ZAELION_ADA_UNIT01_03.
PARAMETERS: p_num TYPE i DEFAULT 10,
p_den TYPE i DEFAULT 2.
DATA: lv_res TYPE p DECIMALS 2.
START-OF-SELECTION.
IF p_den = 0.
MESSAGE 'Division par zéro impossible!' TYPE 'E'.
ELSE.
lv_res = p_num / p_den.
WRITE: / 'Numérateur :', p_num,
/ 'Dénominateur :', p_den,
/ 'Résultat :', lv_res.
ENDIF.
Conclusion #
Ce programme est un exemple simple de calcul en ABAP, mais il nécessite une correction urgente pour éviter une erreur d’exécution. Il sert d’exercice pédagogique pour comprendre l’importance de la gestion des erreurs en programmation.