Chapitre 7 Éléments de programmation ABAP

Les auteurs remercient Annie-Claude Pellerin pour sa contribution à ce chapitre.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réserv pour tous pays. Toute traduction ou toute modification sous quelque forme que ce és soit est interdite. VERSION PRÉLIMINAIRE

INTRODUCTION ENVIRONNEMENT DE DÉVELOPPEMENT ABAP Editor ABAP Dictionary Dictionary Data Browser INTRODUCTION À LA PR OGRAMMATION EN ABAP Création d’un programme ABAP La structure d’un programme ABAP Fonctions usuelles de ABAP Editor Enregistrer et activer un programme STRUCTURE D’UN PROGRAMME ABAP Exemple d’un programme ABAP Commande REPORT En-tête Section : Tables Section : Data Section : Parameters & Select options Section : Initialization Section : Start-of-Selection COMMANDE WRITE, MISE EN FORME, OPÉRANDES ET ÉLÉMENTS DE TEXTE Commande WRITE Mise en forme Opérandes Chaînes de caractères – Text-elements STRUCTURES DE CONTRÔLE Les instructions de conditions Les boucles

4 5 5 6 7 9 9 13 14 16 16 16 18 19 21 21 24 26 26 27 27 29 32 34 40 40 46

TABLES INTERNES 48 Caractéristiques d’une table interne 48 Structure d’une table interne 49 Déclaration d’une table interne 49 Ajout d’enregistrements dans une table interne : Move, Append et Clear 51 Table interne et extraction de la base de données de SAP R/3 53 Afficher le contenu d’une table interne 54 Lecture d’un enregistrement à la fois (Commande Read) 56 Modification d’une table interne (Commande Modify) 59 Effacer un enregistrement (Commande DELETE) 62 Dénombrement des enregistrements de la table interne (Commande DESCRIBE) 64

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

2

REQUÊTES SUR LA BASE DE DONNÉES La commande Select Fonctions d’agrégation Concaténer une requête RAPPORTS INTERACTIFS La commande At-line selection Champs de la table SY La commande Hide Le forage sur plusieurs niveaux La commande Window starting at […] ending at […] CRÉATION DE GRAPHIQUES Fonctions et commandes pour la création de graphiques Graphique à deux dimensions

65 65 69 70 72 72 73 74 76 79 80 80 81

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

3

INTRODUCTION Ce chapitre constitue une introduction au langage de programmation Advanced Business Application Program (ABAP). Il s’agit d’un langage de programmation propriétaire utilisé par la compagnie allemande SAP pour le développement de son progiciel R/3. Plus de 99 % du code de R/3 est programmé en ABAP et toute modification ou ajout dans R/3 implique l’utilisation de ce langage de programmation. Pour les firmes ayant implanté R/3 de même que pour les consultants SAP, le langage de programmation ABAP offre la possibilité de modifier certains aspects du progiciel R/3. Entre autres, il permet de développer des interfaces et des rapports répondant plus adéquatement aux besoins spécifiques des utilisateurs de R/3.

Ce chapitre vise à initier le lecteur à la programmation ABAP. Au cours des différentes sections, nous présentons certains éléments de base nécessaires au développement d’interfaces et de rapports simples en ABAP. Ce chapitre ne remplace pas d’autres documents de référence plus complets . À ce sujet, nous référons le lecteur aux manuels suivants :

Hoffman Theodore, Writing SAP ABAP/4 Programs, Computi ng McGraw-Hill, 1998, 335 pages; Keller, H, Krüger, S., ABAP Objects, SAP Press, pages; Addison-Wesley, 2002, 556

Rüdiger Kretschmer et Wolfgang Weiss, Developing SAP's R/3 Applications with ABAP/4, Sybex, 1996, 657 pages.

Par ailleurs, le présent chapitre assume que le lecteur possède une connaissance de base en algorithmique de même qu’en matière de bases de données. La connaissance de certains langages de programmation procéduraux tels que Visual Basic ainsi que du langage de requête SQL devrait également faciliter la lecture de ce chapitre.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

4

ENVIRONNEMENT DE DÉVELOPPEMENT L’environnement de développement se retrouve principalement dans l’ABAP

Workbench. Ce dernier contient l’ensemble des outils requis pour développer et maintenir les applications développées en langage de programmation AB AP. Dans le cadre de cette section, nous aborderons successivement les outils suivants : l’ABAP Editor, l’ABAP Dictionary et le Dictionary Data Browser. Il est à noter que le chemin d’accès à l’environnement de développement de SAP R/3 est le suivant : Tools > ABAP Workbench. La plupart des outils u tilisés dans cette section, portant sur le développement, se retrouvera principalement dans le dossier Overview et Development .

ABAP Editor L’ABAP Editor est le principal outil permettant de créer, modifier et supprimer un programme ABAP. Il gère la création et le maintien des programmes ABAP, des modules de fonctions, de la suite logique des écrans et de la logique de la base de données. C’est à l’aide de cet outil qu’il vous sera possible de programmer en ABAP. Pour y accéder, cliquez sur le module Tools > ABAP Workbench > Development > ABAP Editor ou saisir le numéro de transaction suivant : /nSE38. La prochaine section est consacré à l’ABAP Editor et explique en détails la création et la modification de programme ABAP.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

5

ABAP Dictionary Au même titre que l’ABAP Editor, l’ABAP Dictionary se retrouve aussi sous l’onglet Development du ABAP Workbench. L’ABAP Dictionary permet d’accéder aux structures de données des différentes tables contenues dans SAP R/3. Pour visualiser la structure d’une table, il suffit de se rendre dans l’ABAP Dictionary (SE11) et saisir le nom de cette table sous le champ Database Table. Prenons exemple sur la table SFLIGHT.

Cliquez sur le bouton Display pour faire afficher la structure de données de cette table. La structure de la table SFLIGHT dévoile plusieurs attributs comme le nom de ses champs, le type de données, leur longueur, leur description, etc. Avec ces attributs, il est possible d’effectuer des requêtes permettant, par exemple, de connaître le nombre d’occupants sur un vol donné.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

6

Prenons un autre exemple : la table SY. Il s’agit d’une table très utile dans le cadre du développement d’un programme ABAP. Cette table contient différentes informations de session tels que la date du système, le nom du l’utilisateur, la langue d’utilisation, etc.

Le tableau 1 présente certains des champs de cette table.

Tableau 1 - Le système Table-Champs
SY-DATUM SY-TCODE SY-MANDT SY-LANGU SY-UNAME SY-UZEIT SY-REPID SY-SUBRC

Description
Date du système Numéro de la transaction en cours (ex : SE38) Numéro du client utilisé (ex : 401) Langage de la session (ex : EN) Nom d’usager Heure du serveur Nom du programme en cours Valeur du test logique

Dictionary Data Browser Le Data Browser permet de visualiser les enregistrements des tables de données de R/3. Pour se rendre au Dictionary Data Browser: Tools > ABAP Workbench > Overview > Data Browser (/nSE16). Il suffit alors d’inscrire le nom de la table dans le champ approprié. Dans notre cas, inscrire SFLIGHT puis cliquez sur Enter .

L’écran qui apparaît permet de raffiner la recherche des enregistrements. Il affiche tous les champs de la table SFLIGHT.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

7

Pour raffiner une recherche, cliquer dans l’un des champs d’expansion prendre.

, puis sur son bouton

. Une nouvelle fenêtre affichera toutes les valeurs que le champ peut

Sélectionner la valeur désirée pour désigner la limite (en l’instance de AC à BA) inférieure et supérieure de la recherche puis cliquez sur E xécuter .

Seuls les noms des compagnies aériennes, dont l’acronyme (CARRID) se situe dans l’intervalle alphabétique saisie par l’utilisateur (en l’instance de AC à BA), seront affichés à l’écran. Voici un échantillon des résultats :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

8

Pour afficher tous les enregistrements de la table SFLIGHT, ne rien inscrire dans les champs d’intervalles et simplement cliquez sur Exécuter . La résultante de cette

action permet d’afficher tous les enregistrements de la table SFLIGHT.

INTRODUCTION À LA PROGRAMMATION EN ABAP Cette section vise à introduire le lecteur à la programmation en ABAP. Nous expliquons d’abord comment créer un programme en ABAP dans l’ABAP Editor. Un programme ABAP simple est ensuite illustré afin de mettre en évidence les différentes parties qui le composent. Après avoir présenté certaines spécificités de la programmation en ABAP de même que les fonctions usuelles de l’ABAP Editor, nous terminons cette section sur l’enregistrement des programmes ABAP de même que sur leur activation. Création d’un programme ABAP La création d’un programme ABAP se fait à partir de la transaction ABAP Editor (SE38). La figure ci-dessous présente l’écran initial de l’ ABAP Editor.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

9

Notons avant de poursuivre que, par convention, les programmes ABAP créés dans le cadre des formations SAP à HEC Montréal doivent être nommés sous la forme suivante : Y?##EX_&&. Le caractère point d’interrogation correspond à la session en cours et s’incrémente d’une année scolaire à une autre. Votre professeur vous indiquera la lettre qui est associée à votre cours pour votre session. Les caractères « ## » correspondent aux derniers numéros de votre code d’us ager et « && » au numéro de l’exercice. Par ailleurs, R/3 requiert que la première lettre d’un programme désigne sa provenance ou son utilité. Dans notre cas, le Y signifie un programme temporaire qui ne fera pas partie du système de production.

Comme il est souvent plus aisé de copier un gabarit de programme ABAP plutôt que de partir d’une feuille blanche, les opérations suivantes expliquent comment dupliquer le gabarit YX00EX_gabarit afin de l’utiliser dans un nouveau programme. Procédure pour copier le gabarit YX00EX_gabarit a) Une fois l’ABAP Editor ouvert, saisir le nom du programme recherché dans le champ Program. Dans notre cas, saisir YX00ex_gabarit.

b) Cliquez sur l’icône Copy .

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

10

c) Sous Target Program, inscrire le nom de votre programme tout en vous conformant au format décrit dans la section précédente.

« y » = programme temporaire. « ? » = lettre indiquée par le professeur (par exemple « a »). « ## » = les 2 derniers chiffres de votre code usager (par exemple si le code d’usager est zhec3715_25 , le « ## » serait remplacé par 25). « && » = numéro de l’exercice ou nom de l’exercice. Ainsi, dans cet exemple, le résultat final serait YA25ex_30.

d) Pour confirmer l’opération, cliquez sur le bouton

. Cette fenêtre apparaîtra :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

11

e) S’assurer que les deux premières options (source et text elements) soient cochées, puis appuyer sur Copy .

f) Dans la fenêtre suivante, inscrire dans le champ Development class : $TMP

Le champ Person responsible devrait représenter votre nom d’utilisateur lors de l’ouverture d’une session dans SAP R/3.

g) Enregistrer

les

modifications

apportées

en

cliquant

sur

le

bouton

d’enregistrement

.Le message suivant devrait apparaître au bas de l’écran :

h) Par défaut, l’opt ion code source (Source Code) est sélectionnée. Cette dernière permet d’accéder directement au code du programme.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

12

i) Pour faire afficher le programme nouvellement copié, cliquez sur le bouton Display et pour le modifier, utiliser le bouton « Change ».

La structure d’un programme ABAP Un programme ABAP est un ensemble d’instructions composé de variables et de procédures acceptées par R/3. Chaque programme codé en ABAP doit contenir trois parties; la première décrivant le programme en question, la seconde servant à déclarer les variables ainsi que les paramètres et la dernière contenant l’écriture de la procédure. Voici un exemple d’un programme ABAP simple illustrant ces trois sections.
REPORT YX00EX_PROGRAMME NO STANDARD PAGE HEADING. ************************************************************** * Exercice: Cours: 3 -715-00 * * Date rendue: Trimestre: * * * * Nom du programme: Programmeur: A.C.Pellerin * * Matricule: * * * * Description du programme: * * Faire afficher une phrase à l'écran * * * * Inputs: Outputs: À l'écran * * * * * * Historique des modifications: * * Date: Programmeur: Description: * * * ************************************************************** ***** Tables ********** ***** Data ************ ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** *Faire afficher à l'écran : Programmer en langage ABAP write:/ 'Programmer en langage ABAP'.

En-tête

Déclaration des variables Procédures

Lorsque le programme ci-haut sera exécuté, la phrase suivante apparaîtra à l’écran :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

13

Spécifications lors de la programmation en ABAP Lors de la programmation en ABAP, certaines règles doivent être suivies afin de s’assurer du bon fonctionnement du programme en question ou de clarifier la structure de celui-ci : •

Chaque instruction se termine par un point. L’oCha91 Tw Tj quvoion l3 0 TD /F789 Tc -0.353(-) Tj 3.75

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

14

Tableau 2 - Description des principales fonctions de la barre d'outil de l'ABAP Editor Icône Fonction
Previous Next Display/Change

Description
Revenir à la page précédente Aller à la page suivante Passer du mode Afficher (Display) au mode Modifier (Change) Le programme est disponible pour l’ensemble de R/3 lorsqu’il est actif ou se limite à l’ABAP Workbench lorsqu’il est inactif Permet d’effectuer différentes recherches sans sortir du programme. Par exemple : ouvrir un nouveau programme, visualiser les champs d’une table spécifique (/nSE11), etc. Effectue une validation de la syntaxe du programme Rend le programme disponible pour l’ensemble de R/3 Exécute le programme (et le compile si ce n’est pas déjà fait) Permet de faire afficher la liste des programmes, écrans, tables de données, vues utilisant ce même objet. Pour ce faire, double-cliquez sur l’objet en question, ou placer le curseur de la souris sur celui-ci, et sélectionner le bouton Where used-list. Affiche la liste des objets utilisés dans le programme Affiche la fenêtre de navigation Documentation disponible directement dans SAP R/3 couvrant plusieurs sujets sous le thème de la programmation en ABAP Installation et suppression de drapeaux. Permet de signaler au débogueur de SAP R/3 que le programme doit s’arrêter là où l’on retrouve cet arrêt. Permet de formater le document pour l’impression. Option rarement utilisée.

Active/Inactive

Other object

Check Activate

Test

Where used-list

Display object list Display navigation window

Help on

Set/delete breakpoint

Pretty Printer

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

15

Enregistrer et activer un programme Après toutes modifications au code d’un programme ABAP, il importe d’enregistrer ce dernier en cliquant sur l’icône de sauvegarde . Par ailleurs, il faut activer le

programme pour le rendre disponible dans SAP R/3 et ce en cliquant sur le bouton activer .

STRUCTURE D’UN PROGRAMME ABAP Cette section présente en détail la structure d’un programme ABAP. Pour faciliter la compréhens ion du lecteur, nous débutons par un exemple complet de programme. Cet exemple vise à illustrer la structure typique d’un programme ABAP. Le reste de la section s’attarde individuellement sur chacune des différentes parties d’un programme ABAP.

Exemple d’un programme ABAP Les différentes parties que l’on retrouve généralement dans un programme ABAP sont les suivantes : a) la commande Report; b) l’en-tête; c) la section Tables; d) la section Data; e) la section Parameters & Select Options; f) la section Initialization; g) et finalement la section Start of Selection.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

16

Voici un exemple de programme ABAP délimité en fonction de cette structure :

REPORT YX101 NO STANDARD PAGE HEADING.

************************************************************** * Exercice: Cours: 3-715-00 * * Date rendue: Trimestre: * * * * Nom du programme: Programmeur: ACP * * Matricule: * * * * Description du programme: * * Structure d’un programme abap * * * * Inputs: ? Parameters Outputs: * * Tables utilisées: * * * * Historique des modifications: * * Date: Programmeur: Description: * * * ************************************************************** ***** Tables ********** *utilisation de la table scarr tables: scarr. ***** Data ************ *déclaration d'une table interne data: begin of itable occurs 0. include structure scarr. data: end of itable. ***** Parameters & Select Options ***** *déclaration d'un paramètre parameters: air_id like scarr-carrid. ***** Initialization ********* ***** Start of Selection ***** *requête select * from scarr into table itable where carrid = air_id. *si on trouve des données pour la requête ... if sy-subrc = 0. *écrire comme en-tête write: /01 'ID'(001), 10 'Nom'(002), 30 'Monnaie'(003). *boucle affichant les données trouvées loop at itable. write:/ itable-carrid under text-001, itable-carrname under text-002, itable-currcode under text-003. endloop. else. write 'Aucune donnée trouvée'(004). endif.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

17

Voici l’écran de saisie appelé dans ce programme. Il s’agit de l’interface perm ettant à l’utilisateur de saisir une valeur qui sera utilisée lors de l’exécution du programme.

Compte tenu de la valeur saisie dans l’écran précédent, le programme affiche à l’écran le résultat suivant :

Commande REPORT

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

18

Tableau 3 - Options de la commande REPORT Options
NO STANDARD PAGE HEADING MESSAGE-ID

Description
Affiche un en-tête par défaut Permet l’affichage de messages à l’aide d’un numéro identifiant ce dernier Nombre de colonnes contenues dans une page Nombre de lignes par page

LINE-SIZE LINE -COUNT

Voici la commande REPORT apparaissant au haut du programme YX102 :

REPORT YX102 NO STANDARD PAGE HEADING MESSAGE-ID ZU LINE-SIZE 100 LINE-COUNT 20.

En-tête La première partie d’un programme est généralement consacrée à des informations concernant le ou les programmeurs, le programme de même que toute autre information qui pourrait faciliter la compréhension du code à un tiers. Dans le cadre des cours de formations SAP à HEC Montréal, l’en-tête utilisé est celui du gabarit YX00ex_gabarit. La figure ci-dessous présente cet en-tête.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

19

Figure 1 – En-tête du gabarit YX00EX_GABARIT

************************************************************** * Exercice: Cours: 3 -715-00 * * Date rendue: Trimestre: * * * * Nom du programme: Programmeur: A.C.Pellerin * * Matricule: * * * * Description du programme: gabarit de la structure * * d'un programme * * * * * * Inputs: Outputs: À l'écran * * * * * * Historique des modifications: * * Date: Programmeur: Description: * * * **************************************************************

On retrouve également dans ce gabarit un second bloc de commentaires (voir figure suivante). Ces 5 marqueurs sont utilisés pour délimiter les autres sections d’un programme afin d’en faciliter la lecture. Évidemment, puisque ce sont des commentaires, ils n’affectent en rien le déroulement du programme.

Figure 2 - Marqueurs de délimitation du programme YX00EX_GABARIT

***** Tables ********** ***** Data ************ ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection *****

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

20

Section : Tables Les tables de la base de données de SAP R/3

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

21

Tableau 4 - Déclaration dans la section DATA
Fonctions Description Chacune des variables que l’on retrouve dans un programme doit être déclarée dans la section Data. Le langage ABAP impose que le nom des variables :

§
NAME

Soit d’un maximum 30 caractères Débute par une lettre N’utilise pas le tiret (-) même s’il est permis; cela porte à confusion avec les champs des tables N’utilise pas de mots réservés (commandes ABAP)

§ § §

LENGTH

La longueur du champ ( length) doit être spécifiée à droite de son nom. Le type d’une nouvelle variable doit être déclaré. Les différents types de données, habituellement utilisés dans la déclaration des variables, sont présentés dans le tableau cidessous : DESCRIPTION C Caractère Date, format YYYYMMDD Point flottant Nombre entier Texte numérique Heure, format HHMMSS Décimal condensé (arrondi) EXEMPLE ‘Bonjour’ 19690623 7.5 789 10000 123456 36.50

TYPE

D F I N T P

VALUE

Ce champ permet de spécifier une valeur par défaut à la variable. Lorsqu’une variable est de type décimal (P), on doit spécifie le nombre de chiffres après la virgule.

DECIMALS

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

22

À titre d’exemple, le programme suivant crée la variable montant_total. D’une longueur de 6 caractères, cette variable est de type décimal arrondi (p) et doit afficher 2 chiffres après la virgule. Cette variable doit donc être déclarée de la façon suivante :

*****Data***** DATA : montant_total(6) TYPE p DECIMALS 2.

Notons qu’il est souvent plus facile de faire référence à une variable existante dans R/3 plutôt que d’en déclarer une complètement nouvelle. Pour ce faire, vous devez utiliser l’expression Like. Dans un tel cas, il n’est pas nécessaire de déclarer le type de donnée de la nouvelle variable, puisqu’elle viendra calquer le type du champ auquel elle fait référence. Il n’est pas non plus nécessaire de déclarer les tables de références dans la section tables.
DATA : <name> LIKE table-champs.

L’exemple suivant déclare trois variables calquées sur des champs de la table SCARR de la base de données IDES de SAP R/3.

*****Data***** DATA: s_carrid LIKE SCARR-CARRID, s_carrname LIKE SCARR-CARRNAME, s_currcode LIKE SCARR-CURRCODE.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

23

À titre d’information, la figure suivante présente un extrait de la table SCARR avec les variables de références utilisées dans l’exemple.

Section : Parameters & Select options Parameters La section Parameters permet de déclarer des variables dont la valeur sera saisie ultérieurement dans un formulaire par l’utilisateur du système. Le nom d’un paramètre ne doit pas dépasser 8 caractères. Par exemple, le programme YX110 crée une interface permettant de faire certaines opérations arithmétiques de base :

*****Parameters***** PARAMETERS: nb_1 TYPE i,

nb_2 TYPE i, operande(1) TYP E C OBLIGATORY.

À l’écran, le formulaire de saisie des paramètres s’affichera de la manière suivante :

Soulignons que l’option Obligatory oblige l’utilisateur à saisir une valeur dans le champ de la variable obligatoire spécifiée. Si ce champ n’est pas complété, le programme ne pourra pas s’exécuter.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

24

Select-Options Le Select-Options est similaire au Parameters. Il permet à l’utilisateur de saisir un intervalle de valeur. Cependant, le Select-options ne peut être utilisé que pour faire des requêtes sur les tables de SAP R/3. D’ailleurs, les tables utilisées lors de requêtes doivent être déclarées dans la section Tables. Enfin, soulignons que le nom donné à un Select-Options ne doit pas dépasser 8 caractères. Le Select-Options du programme YX120, permettra de saisir un intervalle de date pour faire afficher tous les vols effectués durant la période spécifiée. La liste des vols (champ FLDATE ) est contenue dans la table SFLIGHT :

***** Tables ********** TABLES: sflight. ***** Data ************

Parameters & Select-Options Il est possible de jumeler la déclaration du Select-Options avec celle du Parameters. Un formulaire de requête ainsi créé permet de chercher sur plusieurs champs, avec d’une part des critères et d’autre part des intervalles. Voici un exemple de programmation d’un formulaire permettant de rechercher l’ensemble des vols d’une compagnie (Cie) durant une certaine période de temps (durée).

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

25

Sele* 5.25 0

TD 0

T5

T214 0.1654

Tw (. La DataPt ra ee) & ct

À l’écran, le formulaire de saisie du programme YX130 s’affichera de la manière suivante :

Le programme en langage ABAP permettant de faire afficher l’interface ci-haute est le suivant :

***** Tables ********** TABLES: spfli, sflight. ***** Data ************ ***** Parameters & Select Options ***** PARAMETERS: Cie LIKE SPFLI-CARRID. SELECT-OPTIONS: Duree FOR SFLIGHT-FLDATE.

Section : Initialization L’événement d’initialisation est déclenché avant l’affichage du premier écran. Il est recommandé d’utiliser cet événement pour saisir des valeurs par défaut complexes. Dans le cadre des formations SAP à HEC Montréal, ce type de fonction ne sera pas utilisé.

Section : Start-of-Selection Habituellement, la majeure partie du code se situe dans le Start-of-Selection puisque c’est dans cette partie que l’on retrouve les instructions à exécuter. Les prochaines sections de ce chapitre sont consacrées à l’explication des fonctions de programmation utilisées dans le Start-of-Selection.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

26

COMMANDE WRITE, MISE EN FORME, OPÉRANDES ET ÉLÉMENTS DE TEXTE Cette section est consacrée à différentes fonctions reliées à la présentation et à la mise en forme des formulaires. Nous abordons successivement la commande d’écriture (WRITE), les fonctions de mise en forme et la déclaration des éléments de texte. Commande WRITE La commande Write permet d’afficher à l’écran les résultats de l’exécution d’un programme. Dans sa forme la plus simple, la commande Write se rédige de la manière suivante :

WRITE : 'Bonjour'.

La commande est suivi du symbole « : » et le texte à afficher doit être précédé et suivi du guillemet simple « ' ». Par ailleurs, pour ne pas entrer en confusion avec la fin réelle de la chaîne de caractères, il importe de savoir que les chaînes de caractères comportant une apostrophe doivent saisir cette dernière deux fois. Par exemple :

WRITE : 'Bienvenue à l’’aéroport Pierre-Éliot-Trudeau'.

Certaines options peuvent être ajoutées à la fonction Write afin d’identifier le positionnement, dans l’écran, du texte à afficher. Voici comment se rédigent ces options de positionnement :
WRITE : </> <colonne> <(longueur)>

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

27

Tableau 5- Options de positionnement de la commande Write Option / Colonne Description Saute à la prochaine ligne Identifie l’emplacement de l’affichage

Longueur Nombre de caractères à écrire Les deux programmes suivant présentent différentes utilisations des options de positionnement de la commande Write. Le premier programme (YX140) uniquement l’option de saut de ligne et l’option d’emplacement (colonne). utilise

***** Start of Selection ***** *affichage des phrases WRITE : /10 /15 /20 /15 'SAP', 'ABAP', 'Technologie de l’’ information', 'Aspects technologiques'.

À l’écran, le programme précédent s’affiche tel qu’illustré ci-dessous. Il est à remarquer que la fonction saut de ligne permet d’afficher ces expressions sur des lignes distinctes et que l’option d’emplacement correspond au nombre de caractères qui sépare l’expression de la gauche de l’écran.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

28

Le second programme (YX141) utilise les trois options d’affichage.
***** Start of Selection ***** *affichage des résultats WRITE : /5(3) 'SAP', /5(2) 'ABAP', /15 'Technologie de l’’ information', 'et', 'Aspects Technologiques'.

L’affichage de ce programme est illustré ci-après. Il est important de noter que l’option longueur limite le nombre de caractères affichés. Ainsi, au lieu d’écrire ABAP en entier, le programme affiche, tel que spécifié par le (2), seulement les 2 premiers caractères de l’expression.

Mise en forme L’ABAP Editor comporte différentes r t f fsi t ior rT3. T3-T020T)el , r iacertaine (misef L fonctionsepermettant une f eP.ac f f L l àg i f a oé n mp 63c 6 D 5.7j dgw0 2 2 ao ne m u 3 8 0 e non r r u e a h c

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

29

Le programme suivant (YX150) utilise ces différentes fonctions de mise en forme. Nous avons commenté le programme afin d’expliquer l’effet de chacune de ces fonctions sur l’affic hage à l’écran.

***** Start of Selection ***** *trace une ligne horizontale débutant à la colonne #1 et *se terminant à la colonne # 100 uline at /1(100). *saute 5 lignes SKIP 5. *se rend à la ligne 6 SKIP TO LINE 6. *trace une ligne verticale à la position 1, 5 et 10 en *sautant une ligne à chaque fois WRITE:/1 SY-VLINE, /5 SY-VLINE, /10 SY-VLINE. *débute l'écriture de la phrase à la colonne numéro 25 WRITE: /25 'Cette phrase commence à la position 25'.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

30

La figure ci-dessous illustre à quoi ressemblerait l’affichage de ce programme.

Notons enfin que pour réaliser l’affichage d’un tableau, l’utilisation d’une boucle est souvent nécessaire afin de répéter le nombre de lignes horizontales (ULINE) et verticales (SY-VLINE) requis. Cette fonctionnalité est présentée un peu plus tard dans ce chapitre avec les autres structures de contrôle.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

31

Opérandes Plusieurs programmes nécessitent l’utilisation d’opérandes afin d’exécuter des calculs de différentes natures. Voici donc un tableau indiquant les opérateurs arithmétiques les plus utilisés.

Tableau 7 - Opérateurs arithmétiques les plus utilisés Nom Addition Soustraction Division Multiplication Exposant Modulo Division entière Commandes + / * ** MOD DIV

Fonctions arithmétiques Racine carrée Logarithme SQRT( ) LOG( )

Il est à noter que, lors de l’utilisation des fonctions arithmétiques, les valeurs entre

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

32

Le programme suivant (YX171) exécute des calculs sur des variables déclarées dans la section Data.

***** Tables ********** ***** Data ************ DATA: R1 TYPE i, R2 TYPE i, R3 TYPE i, R4 TYPE i, D1 TYPE i VALUE '5', D2 TYPE i VALUE '20'. ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** R1 = D1 + D2. R2 = D1 * D2. R3 = D2 / D1. R4 = D1 mod D2. *La commande WRITE permet d’afficher les résultats *à l’écran et la barre *oblique produit un saut de ligne.

WRITE : / / /

R1, R2, R3,R4.

L’exécution de ce programme permet d’afficher à l’écran le résultat suivant :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

33

Chaînes de caractères – Text-elements SAP R/3 offre la possibilité de modifier la langue utilisée par l’application (fonctionnalité multilingue). Pour ce faire, chaque terme (élément de texte) utilisé dans SAP doit être répertorié et numéroté afin d’y associer la traduction appropriée. La majorité des interfaces et rapports disponibles dans R/3 ont été préalablement traduits et sont accessibles dans les principales langues disponibles dans SAP R/3. Évidemment, R/3 ne traduit pas lui-même les éléments de texte. Chaque traduction doit être saisie une à une et c’est donc pourquoi il peut arriver, à l’occasion, de tomber dans R/3 sur des expressions en allemand au sein de certains rapports ou interfaces rarement utilisées !

Lors du développement d’un rapport ou d’une interface en ABAP, il importe de déclarer toutes les chaînes de caractères utilisées dans le programme afin de faciliter sa traduction subséquente. Concrètement, il suffit d’inscrire un numéro, entre parenthèse, à la suite de chaque élément de texte du programme et de suivre la procédure cidessous pour les répertorier.

Prenons l’exemple d’une entreprise possédant une filiale francophone et une filiale anglophone. L’entreprise souhaite développer un rapport de vente journalier personnalisé pouvant s’afficher dans les deux langues. En anglais, le rapport doit afficher les informations suivantes : No_order , No_customer, O et r No_salesrep. En français, ces termes se traduisent de la manière suivante : le No_com, le No_client, la Valeur_com et le No_vendeur. Le programme YX160 est rédigé en anglais et l’en-tête du rapport est composé des éléments de texte suivants : W 'No_Order'(201), R

20 'No_Customer'(202), 36 'Order_Value'(203), 57 'No_Salesrep'(204).

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

34

Procédure pour répertorier les éléments de texte La numérotation de ces éléments de texte et le fait de les répertorier dans un index permettront de traduire automatiquement l’en-tête du rapport (en assumant que la traduction des termes a été saisie préalablement). Les cinq étapes suivantes expliquent comment répertorier les éléments de texte de l’exemple précédent.

a) Double-cliquez sur le premier élément de texte, soit ‘No_order’, ou sur le numéro suivant ce dernier (201). Une fenêtre comme celle-ci apparaîtra :

Cliquez sur Yes. b) Un écran répertoriant l’ensemble des éléments de texte du programme suivra.

Jusqu’à maintenant, nous avons répertorié que le premier élément de texte du programme.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

35

c) Pour activer l’élément sélectionné, cliquez sur le bouton Activate . Sélectionner le nom du programme puis cliquez sur le bouton Continue .

d) Enregistrer les ajouts en cliquant sur l’icône Save . Au bas de l’écran, le message suivant apparaîtra :

e) Suivre la même procédure pour tous les éléments de texte. Finalement, tous les éléments de texte se retrouvent répertoriés.

Procédure pour visualiser et modifier les éléments de texte Par ailleurs, la transaction /nSE32 permet de visualiser et de modifier tous les éléments de texte activés et enregistrés pour un programme spécifique sans passer par l’ABAP Editor. Il est aussi possible d’y accéder par le chemin d’accès suivant : Tools > ABAP Workbench > Development > Programming environ > Text elements . Voici la procédure à suivre pour visualiser et modifier un élément de texte :

a) Saisir le nom du programme sous Program.

Copyright © 2004, SAP R/3 : ComIrendre, configurer et implanter , Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

36

b) Cliquez sur le bouton Display ou Change dépendamment de l’action désirée.

Procédure permettant la traduction d’un élément de texte Il est possible de traduire les éléments de texte à partir de la transaction /nSE32 ou de l’ABAP Editor. Dans les deux cas, la saisie du nom du programme est nécessaire.

/nSE32 :

ABAP Editor :

Par la suite, cliquez sur le menu Goto, puis Transalation :

La fenêtre suivante apparaîtra :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

37

La langue originale (Original language) est celle de la session de l’utilisation. Dans notre cas, l’anglais est la langue originale. La langue de traduction, soit Target language, est la langue dans laquelle les éléments de texte seront traduits. Dans la présente situation, le français sera cette langue. Donc remplacer la Target language par FR, soit le diminutif de français, puis cliquez sur exécuter .

Tous les éléments de texte du programme en question apparaîtront dans un nouvel écran comme ceci :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

38

Pour traduire ces derniers, il suffit d’inscrire en-dessous de chacun des éléments de texte leur traduction.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

39

Ne pas oublier de sauvegarder les modifications avec le bouton

. L’écran suivant

apparaîtra en récapitulant tous les éléments de texte traduits pour le programme YX160.

STRUCTURES DE CONTRÔLE La programmation en ABAP offre différentes instructions de contrôle semblables au langage Visual Basic . En effet, il est ainsi possible d’utiliser tant des instructions de conditions que des boucles. Cette section présente ces deux approches. Les instructions de conditions Instructions de conditions IF Une instruction de condition IF exécute une procédure lorsque la condition exprimée est satisfaite. Voici de quelle manière se rédige la condition IF :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

40

If [not] condition 1. Instruction1. [Elseif condition2. Instruction2.] Else. Instruction Else. Endif.

Par exemple, le programme YX180

permet à un agent de voyage d’être informé

lorsqu’un rabais est disponible pour les groupes de plus de dix personnes.

***** Tables ********** ***** Data ************ ***** Parameters & Select Options ***** Parameters: nb_pers type i. ***** Initialization ********* ***** Start of Selection ***** if nb_pers < 10. write 'Prix de groupe non disponible'(001). else. write 'Prix de groupe disponible'(002). endif.

La fonction paramètre du programme précédent appelle, dans un premier temps, l’interface où l’agent de voyage doit indiquer le nombre de personnes. Voici l’interface en question :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

41

Puisque que la valeur cinq est saisie, le programme affiche qu’aucun prix de groupe n’est disponible.

Instructions de conditions IF et variable SY-SUBRC Il est également possible d’utiliser l’instruction IF en conjonction avec le champ SYSUBRC. Ce champ, contenu dans la table SYSTEM (voir tableau 1), concerne la valeur du dernier test logique effectué par le système. Si le résultat du test est positif, la valeur de SY-SUBRC est de zéro (0). Lorsque la valeur de SY-SUBRC est différente de zéro (<> 0), le résultat du test est négatif (i.e. échec du test logique).

L’exemple du programme YX181 effectue une requête dans la table SCARR (liste de compagnies aériennes). Plus part iculièrement, la requête vise à afficher la compagnie possédant le numéro d’identification AD.

***TABLES*** tables: scarr. ***** Data ************ ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** *requête sur la table scarr select * from scarr where carrid = 'AD'. write:/ scarr-carrname, scarr-url. endselect. *requête n'a pas trouvé de données if sy-subrc <> 0. write:/ 'aucun enregistrement trouvé'(001). endif.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

42

La figure suivante illustre en partie la table SCARR pour démontrer qu’il n’y a aucune compagnie aérienne attitrée au sigle AD.

Puisque la valeur de SY-SUBRC n’est pas égale à zéro, le IF et la commande SYSUBRC affichent donc un message d’échec.

Opérateurs logiques de l’instruction de condition IF L’instruction de condition IF peut utiliser divers opérateurs logiques afin d’exécuter la routine désirée. L’utilisation du NOT permet d’introduire la négation dans la condition tandis que le AND et le OR permettent de grouper ensembles différentes instructions de condition. Le tableau suivant rassemble les principaux opérateurs utilisés en conjonction avec l’instruction IF.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

43

Tableau 8 - Opérateurs en conjonction avec l’instruction IF
Signes = <> , >< > < >=, => <=, =< Caractères EQ NE GT LT GE LE BETWEEN var1 AND var2 NOT AND OR Égale à N’est pas égale à Plus grand que Plus petit que Égale ou plus grand que Égale ou plus petit que Exclusivement entre 2 valeurs Signification

Ne … pas ET OU

Instructions de conditions C ASE La commande CASE permet de catégoriser un certains nombres de conditions et de les comparer avec un champ déterminé. Lorsqu’une condition exprimée est satisfaite, la commande CASE prend fin. Voici de quelle manière se rédige la commande CASE :

case champs . When valeur 1. Instruction 1. When valeur 2. Instruction 2. When others, Intruction others endcase.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

44

Le programme YX190 indique le nom de la couleur correspondant au chiffre saisie dans l’interface.
***** Tables ********** ***** Data ************ ***** Parameters & Select Options ***** Parameters: chiffre type i. ***** Initialization ********* ***** Start of Selection ***** case chiffre. when '1'. write:/ 'couleur #1 rouge'(001). when '2'. write:/ 'couleur #2 noire'(002). when others. write:/ 'pas de couleur déterminée'(003). endcase.

Le programme déclenche d’abord l’écran de saisie suivant :

Selon la valeur s aisie, le programme affiche le texte approprié :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

45

Les boucles L’instruction Do est une commande permettant d’exécuter un certain nombre de fois la même procédure. Plus spécifiquement, le programme exécute dans un premier temps la procédure et, dans un deuxième temps, la suite. La boucle s’arrête sur demande (conditions IF avec un EXIT) ou lorsque le nombre de boucle désirée est atteint. Si aucune de ces deux options de complétion n’est effectuée, la boucle sera infinie. Voici le format pour écrire une boucle.

CD [ n times]. …procédure… ENDDO.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

46

Le programme YX200 permet d’afficher un tableau à l’aide d’une boucle. Notons que la variable SY-INDEX

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

47

L’exécution de ce programme mène à l’affichage du tableau suivant :

TABLES INTERNES Une table interne constitue un espace temporaire de traitement et de stockage de données. Les tables internes ne font donc pas partie des bases de données de SAP R/3. Elles sont plutôt emmagasinées dans une zone tampon de la mémoire. Cette section présente de quelle manière une table interne doit être déclarée et manipulée dans le cadre d’un programme ABAP. Caractéristiques d’une table interne Une table interne se distingue par les caractéristiques suivantes : • • • • • • La table interne possède une durée de vie limitée à l’exécution du programme; Elle ne possède pas de clé primaire; Les noms des tables internes doivent commencer par i afin de les différencier des tables des bases de données de SAP R/3; Une table interne possède un enregistrement d’en-tête (header record) et des enregistrements individuels numérotés 1, 2, 3, …; On ne peut accéder et manipuler qu’un seul enregistrement à la fois, soit celui qui se trouve dans l’enregistrement d’en-tête; Quand un enregistrement individuel est appelé par le programme, il est copié dans l’enregistrement d’en-tête.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

48

Structure d’une table interne Tel qu’illustré ci- dessous, une table interne est constituée de champs (ex : Nom, Pénom, No_tel) qui forment sa structure. Lors du déroulement du programme, la table interne se remplit de valeurs créant ainsi différents enregistrements (lignes). La structure de chaque table interne possède un index qui numérote chacun de ces enregistrements. Il est possible d’appeler un enregistrement précis en utilisant l’index de la table interne. La table interne copie alors l’enregistrement demandé et l’affiche dans l’en-tête de la table.

Nom En-tête à 3 1 2 Enregistrements à 3 4 Tremblay Chevalier Perreault Tremblay Venne

Prénom Marc Mathieu Julie Marc Justine

No_tel 450-555-4567 514-234-5678 514-345-6666 450-555-4567 450-987-6543

Déclaration d’une table interne La déclaration d’une table interne doit se faire dans la section Data

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

49

Option 1
DATA : BEGIN OF itable OCCURS n_enregistrement, Champs 1, Champs 2, Champs n, DATA : END OF itable.

Option 2
DATA : BEGIN OF nom_enregistrement, Champs 1, Champs 2, Champs n, Itable LIKE nom_enregistrement OCCURS O With Header Line.

Tableau 9 - Options d’une table interne
Options Itable Signification Représente le nom de la Table interne Représente le nombre d’enregistrements qui sera stocké dans la mémoire tampon. À partir de la version 4.0, SAP s’occupe automatiquement de la gestion de la mémoire, alors il n’est pas nécessaire de spécifier la grosseur de la table interne. Donc toujours inscrire 0 comme nombre d’enregistrement (0 = infini). Insère un enregistrement d’en-tête afin d’avoir accès aux données de la table interne. Nom donné à la structure de la table interne

n_enregistrement

With header line Nom_enregistrement

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

50

L’extrait du programme YX210 présente la déclaration de la table interne ICIE dont la structure est copiée sur COMPAGNIE.

***** Tables ********** *déclaration de la structure DATA: BEGIN OF compagnie, no_cie(3) type n, nom_cie(20) type c, END OF compagnie, *déclaration de la table interne avec une en-tête icie LIKE compagnie OCCURS 0 with header line.

Ajout d’enregistrements dans une table interne : Move, Append et Clear L’ajout d’enregistrements dans une table interne requiert une gymnastique particulière dans laquelle un nouvel enregistrement doit d’abord être copié dans l’entête de la table interne (commande Move), puis ajouter aux enregistrement de la table interne (commande Append). Enfin, l’en-tête de la table interne doit être effacée pour faire place à une nouvelle manipulation (commande Clear). Soulignons par ailleurs que la commande Append ajoute un nouvel enregistrement à la toute fin de la table interne sans considérer l’ordre de celle-ci. Voici de quelle manière cette procédure doit être rédigée :
Move : valeur to itable-champs. Append itable. Clear itable.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

51

L’exemple suivant poursuit l’exemple initié précédemment (YX210) en ajoutant des enregistrements à la table interne ICIE.

***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** *insertion manuelle de données dans la table interne MOVE: '01' to icie-no_cie, 'Plomberie ABC' to icie-nom_cie. *enregistrement de la ligne dans l'en-tête de la table *interne APPEND icie. *effacer le contenu de l'en-tête de la table interne CLEAR icie. *insertion manuelle de données dans la table interne MOVE: '02' to icie-no_cie, 'Électriciens ABC' to icie-nom_cie. APPEND icie.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

52

Table interne et e xtraction de la base de données de SAP R/3 Une table interne peut également être définie en fonction d’une table contenue dans les bases de données de SAP R/3. Il est même possible d’extraire des données de cette même table afin de peupler une table interne. Notons que nous abordons ici succinctement le sujet des requêtes dans les tables de R/3; nous y reviendrons en détails à la prochaine section. Voici de quelle manière la structure d’une table existante dans R/3 peut être utilisée pour définir une table interne. La fonction Include structure sélectionne la structure d’une table de SAP R/3 et l’utilise comme modèle pour la nouvelle table interne.

DATA : BEGIN OF itable OCCURS 0. INCLUDE STRUCTURE table DATA : END OF itable.

Les résultats de la requête à la base de données de R/3 sont ensuite copiés dans la table interne à l’aide de la fonction suivante :

into corresponding fields of table itable.

Notons que la fonction Corresponding field permet de s’assurer que la table interne possède la même structure, ou des champs correspondants, avec la table d’où les valeurs sont extraites.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

53

À titre d’exemple, prenons un programme (YX240) permettant à un employé d’une compagnie aérienne de faire afficher le nom du pays, de la ville et de l’aéroport d’où il y a des départs.

***** Tables ********** Tables: spfli. ***** Data ************ *déclaration de la table interne utilisant la structure de la table *spfli DATA: BEGIN OF itable OCCURS 0. INCLUDE STRUCTURE spfli. DATA: END OF itable. ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** *requêtes sur la table spfli select COUNTRYFR CITYFROM AIRPFROM from spfli *insertion des données trouvées dans la table interne into corresponding fields of table itable.

Afficher le contenu d’une table interne L’affichage du contenu d’une table interne s’effectue à l’aide d’une boucle ayant pour fonction d’écrire un après l’autre les enregistrements de la table. Il est possible de préciser les champs dont l’affichage est souhaité. Cette boucle doit être rédigée de la manière suivante :

loop at itable. write: [/1] itable-champs1, itable-champs2 itable-champs… # 3, 4, …, N. Endloop.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

54

Le programme suivant (YX210) poursuit l’exemple débuté précédemment. Dans cet extrait, nous procédons à l’affichage des enregistrements de la table interne.

*écriture d'un titre write:/1 'Affichage de la table interne icie'. skip 1. *boucle permettant d'afficher les données contenues dans *la table interne. Loop at icie. write:/ icie-no_cie, icie-nom_cie. Endloop.

L’exécution de ce programme mène à l’affichage de l’écran suivant :

Prenons un second exemple. Le programme YX240 termine l’exemple initié précédemment et affiche la liste des aéroports d’où il y a des départs.

*affichage des valeurs de la table interne loop at itable. write:/1 itable-countryfr, itable-cityfrom, itable-airpfrom. endloop.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

55

Voici la liste des aéroports avec leur ville et pays respectifs affichée à l’écran :

Lecture d’un enregistrement à la fois (Commande Read) La commande Read permet de chercher un enregistrement particulier dans une table interne. Pour atteindre un enregistrement (une ligne) spécifique d’une table interne à l’aide de la commande Read, il importe de suivre la procédure suivante : a) Supprimer l’enregistrement qui est présentement dans l’en-tête de la table interne b) Saisir le nom de la table interne et le nom du champ recherché puis inscrire la valeur de ce champ. Le nom du champ doit être écrit de la même manière qu’il apparaît dans la base de données de SAP R/3 (case sensitive). Il est aussi possible d’utiliser le numéro de l’index. La lecture d’un enregistrement se rédige donc de la manière suivante. D’abord, la suppression de l’entête s’effectue selon l’une des deux méthodes suivantes :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

56

Option 1
MOVE SPACE TO itable

Option 2 :
Clear itable.

Ensuite, il existe deux options pour rechercher un enregistrement. La première option consiste à effectuer la recherche sur la valeur précise d’un champ de la table. Il est à noter que la commande Read arrête sa lecture au premier enregistrement qui correspond aux spécifications demandées. L’autre option est de rechercher un enregistrement avec le numéro de l’index. Option 1 :
Itable -champ = ‘valeur_recherchée’. READ TABLE itable

Option 2:
READ TABLE itable INDEX i.

L’exemple suivant est un programme (YX241) permettant à un employé de rechercher dans une table interne le tra nsporteur ayant fait un vol le 14 janvier 2005. On peut constater à la figure 3 (extrait de la table SFLIGHT) que plusieurs vols ont été effectués lors de cette journée (faire SE16 pour visualiser cette table).
Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

57

Comme la commande Read ne rapporte que le premier enregistrement retrouvé, seul le premier vol (CARRID = AA, CONNID = 0064) est affiché :

Modification d’une table interne (Commande Modify) Pour modifier un enregistrement d’une table interne, celui-ci doit être copié dans l’entête avant d’être modifié et ensuite mis à jour dans la table interne. Comme les enregistrements dans une table interne ne possèdent pas de clé primaire, il existe deux approches pour réaliser cette procédure : a) En recherchant l’enregistrement à modifier avec le numéro de l’index de la table interne; b) En effectuant une boucle pour rechercher un enregistrement en fonction de la valeur de l’un de ses champs.

Option 1 : Attardons nous d’abord à la première option : la modification d’une table interne à l’aide de son index. Cette approche requiert que le programmeur connaisse le numéro de l’enregistrement à modifier. Par conséquent, il importe, avant tout, d’afficher la table interne et de faire apparaître les numéros de l’index. Pour ce faire, il suffit d’ajouter la variable SY-TABIX dans la boucle qui permet d’afficher la table. Le TABIX est un champ de la table System (SY) contenant les numéros d’enregistrements de l’index. L’exemple ci-dessous poursuit le programme des sections précédentes, mais d’autres enregistrements ont été rajoutés au programme initial. L programme YX211 affiche e tous les enregistrements de la table interne de même que l’index de la table.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

59

*boucle permettant d'afficher les données contenues dans la table *interne. Loop at icie. write:/ sy-tabix, icie-no_cie, icie-nom_cie. Endloop

.

Le résultat de ce programme s’affiche tel qu’illustré ci- dessous. L’index apparaît à la gauche de la liste.

Il est à noter que lorsque l’on insère des enregistrements dans une table interne, ceuxci s’affichent les uns à la suite des autres sans ordre de champ précis. C’est pourquoi la compagnie Gazon Plus se retrouve à l’index #3, malgré un numéro de clients supérieur à Menuiserie Pros.

En utilisant le numéro de l’index, il est possible d’appeler l’enregistrement souhaité dans l’en-tête, de modifier l’en-tête et de retourner l’enregistrement dans la table interne. Le programme suivant recherche et lit le 2e enregistrement (Index 2) de la table interne. S’il le trouve, il modifie le champ nom_cie avant de retourner l’enregistrem ent dans la table interne.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

60

*mise à jour du if sy-subrc = 0.

d’un champ X à l’aide de son *numéro d’index

read table itable index N. itable-champ1 = ‘nouvelle valeur’ modify itable index sy-tabix. endif.

*mise à jour du nom de la compagnie d'électriciens par son *index

read table icie index 2. if sy-subrc = 0. icie-nom_cie = ‘Électriciens ABC et fils’. modify icie index sy-tabix. endif.

Option 2 La seconde option pour modifier un enregistrement dans une table interne est d’utiliser une boucle. Cette boucle recherche dans la table interne une valeur spécifique dans un champ donné. Après que l’enregistrement ait été trouvé et amené dans l’entête, celui-ci est modifié et retourné dans la table interne. Voici donc une manière alternative de rédiger l’extrait du programme présenté précédemment dans l’option 1.

*mise à jour du

d’un champ X à l’aide d’une *boucle

loop at itable where champ1 = X. itable-champ2 = ‘ nouvelle valeur’. modify itable. endloop.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

61

*mise à jour du nom de la compagnie d'électriciens *avec une boucle loop at icie where no_cie = '02'. icie-nom_cie(30) = 'Électriciens ABC et Fils'. modify icie. endloop.

Effacer un enregistrement (Commande DELETE) Pour effacer un enregistrement de la table interne, il faut également passer par l’en-tête de la table. Il suffit de copier l’enregistrement à effacer dans l’en-tête et ensuite utiliser la commande Delete pour le supprimer. Ainsi, contrairement à la commande Clear, la commande Delete efface, en plus de l’enregistrement d’en-tête, l’enregistrement correspondant dans la table interne.

Il existe deux approches pour utiliser la commande Delete : a) En recherchant l’enregistrement à supprimer avec le numéro de l’index de la table interne;

b) En effectuant une boucle pour rechercher un enregistrement à supprimer en fonction de la valeur de l’un de ses champs. Option 1 : La première option consiste à rechercher l’enregistrement à supprimer à l’aide de son numéro d’index. Un fois trouvé, l’enregistrement est copié dans l’en-tête puis supprimé. L’enregistrement est définitivement supprimé de l’en-tête et de la table interne simultanément.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

62

*suppression de l'enregistrement possédant le *numéro de compagnie X, mais le numéro d’index Y *(SY-TABIX) read table itable index Y. if sy-subrc = 0. delete itable index sy-tabix. endif.

*suppression de l'enregistrement possédant le *numéro de compagnie 004, mais le numéro d’index *3 (SY -TABIX) read table icie index 3. if sy-subrc = 0. delete icie index sy-tabix. endif.

À noter : lors de la suppression complète d’un enregistrement avec Delete, l’index (SYTABIX) se modifiera pour tenir compte de cette suppression.

Avant la suppression :

Après la suppression :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

63

Option 2 : L’option 2 consiste à rechercher un enregis trement en fonction de la valeur d’un champ de cet enregistrement. Lorsque cet enregistrement est identifié et copié dans l’en-tête, la commande Delete permet de la supprimer aux deux endroits. L’exemple suivant (YX212) identifie et supprime la compagnie possédant le numéro de compagnie 4 soit Gazon Plus.

*suppression de l'enregistrement possédant le numéro de *compagnie X Loop at itable where no_cie = 'X'. Delete itable index sy-tabix. Endloop.

*suppression de l'enregistrement possédant le numéro de *compagnie 04 Loop at icie where no_cie = '04'. Delete icie index sy-tabix. Endloop.

Dénombrement des enregistrements de la table interne (Commande DESCRIBE) Il est possible de compter le nombre d’enregistrements d’une table interne. Pour se faire, il faut utiliser la commande Describe. Voici de quelle manière se rédige cette commande :

DESCRIBE table itable [LINES n] :

Retourne le nombre d’enregistrements de ITABLE dans la variable n.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

64

REQUÊTES SUR LA BASE DE DONNÉES La section suivante est consacrée à l’utilisation du langage de requête SQL dans le cadre de programme rédigé en ABAP. En effet, ABAP utilise le langage SQL pour extraire et manipuler des données contenus dans la BD de R/3. Bien que les commandes Update, Insert et Delete puissent être utilisées dans le cadre d’un programme ABAP, cette section s’attarde principalement à la commande Select. La commande Select La commande Select permet d’effectuer une requête sur les tables de la base de données de R/3 en spécifiant différents critères de sélection et de regroupement. La commande Select se rédige de la manière suivante :

Select [single] [distinct] champs From table Where champs [Not] [Like valeur] [In Select - Option] [between val1 And val2] Group by Having Order by Endselect. champs conditions champs.

Tableau 10 - Option de la commande SELECT
SINGLE L’utilisation du Single dans l’instruction Select offre la possibilité de choisir un seul enregistrement. Le Distinct supprime le dédoublement d’enregistrements qui pourraient être occasionné par la requête. La commande Where permet de circonsc rire le résultat de la requête.

DISTINCT

WHERE

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

65

Il importe de souligner que le point doit seulement apparaître après la dernière instruction, soit le Where, le Group by , le Having ou le Order by. De surcroît, il est recommandé de conclure la requête par un Endselect (qui lui-même doit être suivi d’un point). La combinaison du Select-endSelect crée automatiquement une boucle, facilitant ainsi l’affichage des résultats pour des programmes courts ou lorsque les données ne sont lues qu’une seule fois. En ce qui concerne la commande Where, ABAP reconnaît deux frimes. D’une part, le signe pourcentage (%) permet de remplacer un groupe de caractères au début ou à la fin d’une valeur : par exemple, tous les noms commençant par b = ‘b%’. D’autre part, le signe de soulignement ( _ ) permet de remplacer une série de caractères au centre d’une valeur : par exemple, tous les noms ressemblant à Amy = ‘A_ y’. Dans les deux cas, il importe d’utiliser la commande Like. Par exemple, une requête pour trouver les compagnies aériennes dont le ID commence par A devrait se rédiger de la manière suivante :

where carrid like ‘a%’.

Par

ailleurs,

il

est

possible

de

faire

afficher

automatiquement

le

nombre

d’enregistrements contenus dans le résultat d’une requête. Pour se faire, il suffit d’afficher le champ DBCNT de la table System (SY). Voici comment rédiger cette commande :

write : /‘enregistrements trouvés :’(001), sy-dbcnt.

Illustrons par un exemple la c ommande Select. La requête de cet exemple porte sur la table SPFLI. La requête sélectionne l’ensemble du contenu (select *) de la table SPLI (from spfli) et demande d’ordonnancer le résultats selon la ville d’origine (order by
Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

66

cityfrom ) : Ensuite le programme affiche les champs CARRID, CONTRYFR, CITYFROM, AIRPFROM, COUNTRYTO et CITYTO. Le programme utilisé est le YX222.

***** Tables ********** tables: spfli. ***** Data ************ ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** select * from spfli where period = '0' order by cityfrom. write:/ spfli-carrid, spfli-countryfr, spfli-cityfrom, spfli-airpfrom, spfli-countryto, spfli-cityto. endselect.

skip 2. *affiche le nombre d'enregistrements trouvés write:/ 'nombre d''enregistrements trouvés:', sy-dbcnt.

Il est également possible de conserver les résultats de la requête dans une table interne. L’exemple suivant (YX224) sauvegarde temporairement les données de SPFLI dans la table interne itable. L’affichage des données est effectué à l’aide d’une boucle.
Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

67

***** Tables ********** tables: spfli. ***** Data ************ *declaration d’une table interne correspondant à la *structure de la table spfli data itable like spfli occurs 0 with header line. ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** *requête sur la table Spfli select * from spfli into table itable where period = '0' order by cityfrom. *affichage des données continues dans les champs spécifiés loop at itable. write:/ itable-carrid, itable-countryfr, itable-cityfrom, itable-airpfrom, itable-countryto, itable-cityto. endloop. skip 2. write:/ 'nombre d'’enregistrements trouvés:', sydbcnt.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

68

L’exécution de ce programme mène à l’affichage de la liste d’enregistrements cidessous. Notons que le nombre d’observations retournées est affiché grâce au champ SY-DBCNT.

Fonctions d’agrégation Les fonctions d’agrégation peuvent être insérées dans une requête afin d’effectuer divers calculs sur les champs de la sélection. Voici une liste des fonctions d’agrégations les plus fréquemment utilisées.

Tableau 11 - Liste de fonctions d'agrégation
Commande AVG SUM MAX MIN COUNT Description Moyenne Somme Maximum Minimum Fréquence

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

69

Concaténer une requête Pour concaténer une requête en langage ABAP, il faut imbriquer deux SelectEndSelect. Une telle requête concaténée se rédige de la manière ci- dessous. Attention : ne pas oublier de mettre les deux Select-EndSelect.

Select * from table 1. Select * from table2 Where champ1 = table1-champ1. Endselect. Endselect.

Illustrons par un exemple la concaténation d’une requête. Supposons que nous souhaitons obtenir de l’information sur des connexions de vols. Une partie des informations désirées se trouve dans la table SFLIGHT (les champs PLANETYPE et FLDATE ) et une autre dans la table SPFLI (le champ CONNID). Les deux tables ont une clé commune : CARRID (le numéro du transporteur aérien). La requête vise à isoler les vols dont le ID de connexion (CONNID) est 17. Voici comment devrait se rédiger cette requête (YX230):

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

70

***** Tables ********** tables : sflight, spfli. ***** Data ************ ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** *en-tête write:/1 'no_connexion'(001), 15 'Type_avion'(002), 30 'Date_vol'(003). skip 1. *requête concaténée select * from sflight. select * from spfli where carrid = sflight-carrid and connid = '17'. *afficher write:/1 15 30 les résultats spfli-connid, sflight-planetype, sflight-fldate.

endselect. endselect. skip 3.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

71

À l’écran, le résultat s’affiche de la manière suivante :

RAPPORTS INTERACTIFS Cette section présente les différentes fonctions, événements et commandes pour programmer des rapports interactifs dans SAP R/3 à l’aide du langage ABAP. Dans le cadre du cours, les rapports interactifs seront surtout sous forme de listes détaillées. La commande At-line selection La commande At-line selection permet à l’utilisateur de sélectionner une ligne, dans un rapport, afin d’accéder à des informations supplémentaires contenues dans une liste. Pour exécuter la commande, il doit double-cliquez sur la ligne désirée ou sélectionner la ligne en question et presser la touche F2. La commande At-line selection se rédige de la manière suivante :
at line-selection.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

72

Champs de la table SY Certains champs, provenant de la table SY, affichent de l’information concernant l’utilisation de rapports interactifs. Le tableau ci- dessous en décrit un certain nombre.

Tableau 12 – Champs de la table SY SY-LSIND : SY-CUROW : SY-CUCOL : SY-LISEL : Niveau de la liste (liste de base = 0) Ligne sélectionnée Colonne sélectionnée Contenu de la ligne sélectionnée

Le programme YX270 est un exemple d’utilisation des notions mentionnées ci-haut.
do 30 times. write: /'line', sy-index. write /. enddo. at line-selection. if sy-lsind < 2. write: / 'Niveau de la liste write: / 'Ligne write: / 'Contenu de la ligne endif.

:'(001), / sy-lsind. :'(002), / sy-curow. :'(003), / sy-lisel.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

73

Lors de l’exécution du programme, le mot line et le nombre de fois que la boucle a été exécutée (grâce à SY-INDEX) s’affiche à l’écran.

L’utilisateur sélectionne une ligne en double-cliquant sur cette dernière (At-line selection). Le programme affic he le niveau de la liste (sy-lsind), le numéro de la ligne (sy-curow) et le contenu de la ligne ( sy-lisel). Dans l’exemple suivant, l’utilisateur a double-cliqué sur line 5.

À noter : le champ SY-LSIND utilisé conjointement avec la commande At line-selection et la condition de contrôle If, contrôle le nombre de niveaux de la liste. La commande Hide La commande Hide permet d’entreposer temporairement en mémoire de l’information spécifique à chacune des lignes de la liste. Lors de l’exécution de la commande At lineselection, le contenu est restauré. L’un des objectifs de la commande Hide est de référencier le contenu de chacune des lignes d’une liste entre le niveau de base (SYLSIND = 0) et un niveau supérieur .

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

74

Le programme YX271 est un exemple d’utilisation de la commande Hide. Il entrepose en mémoire le numéro identif iant chacune des compagnies d’aviation (carrid) à l’aide de la commande Hide. Lorsque l’utilisateur sélectionne le nom de l’une des compagnies, les numéros identifiant chacune des compagnies d’aviation (carrid) est restauré et permet ainsi d’apparier chacune des compagnies d’aviation avec leur adresse URL respective. La programmation d’un tel programme ressemble à ceci :
***** Tables ********** *tables utilisées tables: scarr, scarplan. ***** Data ************ *déclaration de la table interne data: begin of iplane occurs 0. include structure scarr. data: end of iplane. ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** ****** Selection ******* *titre write:/1 'Nom de la compagnie d''aviation'(001). uline. skip 1. select * from scarr into corresponding fields of table iplane. loop at iplane. write:/1 iplane -carrname. *conserver en mémoire les numéros identifiant chacune des cie d'aviation hide iplane-carrid. endloop. *commade pour permettre le forage at line-selection. read table iplane with key carrid = iplane-carrid. *if sy -lsind < 2. write:/1 iplane-url. *endif.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

75

À l’écran, le contenu du niveau de base (niveau = 0) s’affiche de la manière suivante :

Après avoir double-cliqué sur l’une des compagnies d’aviation, dans ce cas Qantas Airways, l’information du niveau 1 s’affiche à son tour dans une nouvelle page.

Le forage sur plusieurs niveaux Le forage sur plusieurs niveaux se fait à l’aide de la commande SY-LSIND de la table SY conjointement avec l’instruction de conditions CASE. La commande SY-LSIND gère les différents niveaux. Il est possible de lui assigner une valeur. Utilisé seule, elle affiche le niveau de forage où l’utilisateur se trouve.

Le programme YX272 est un programme présentant les informations de la table clients sur différents niveaux. Le niveau de base affiche le nom du client, le premier niveau le nom et le numéro du client, le deuxième niveau la ville et le pays du client et le troisième niveau son adresse complète.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

76

À l’écran, le niveau de base s’affiche ainsi :

En double-cliquant sur l’une des lignes de la liste, le premier niveau apparaît :

Il en est de même pour le deuxième et le troisième niveau qui ressemblent respectivement à ceci : Niveau 2 :

Niveau 3 :

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

77

La programmation ABAP du programme YX272 est la suivante :
***** Tables ********** *table utilisée TABLES: kna1. ***** Data ************ *déclaration de la table interne data: begin of iclient occurs 0. include s tructure kna1. data: end of iclient. ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** ****** Selection ******* write:/1 'Nom du client'. uline. skip 1. SELECT * FROM kna1 into corresponding fields of table iclient. loop at iclient. write:/1 iclient-name1. *conserver en mémoire les numéros identifiant chacun des clients hide iclient-kunnr. endloop. ****** Event Processing ************* AT LINE-SELECTION. case sy-lsind. read table iclient with key kunnr = iclient-kunnr. when 1. write: /5 'Nom du client: /5 'Numéro du client : when 2. write: /5 'Ville : /5 'Pays : when 3. write: /5 'Adresse : ', iclient-NAME1, ', iclient-KUNNR. ', iclient -ORT01, ', iclient -LAND1. ', iclient -stras.

endcase.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

78

La commande Window starting at […] ending at […] La commande Window starting at […] ending at […] offre la possibilité au développeur d’afficher du texte ou le résultat d’une opération, par exemple, dans une nouvelle fenêtre tout en ayant le contrôle sur les dimensions de celle-ci. Cette commande se rédige comme ceci :

Window starting at [v w] ending at[x y ].

L’attribution d’une valeur aux lettres v et w permet de contrôler le lieu d’affichage de la nouvelle fenêtre à l’écran. Le v représente la distance à partir de l’extrémité gauche de l’écran et le w la hauteur en fonction du haut de l’écran. Le x et le y représente respectivement la largeur et la longueur de la nouvelle fenêtre. Le programme YX273 est un exemple d’utilisation de cette commande.

write: / 'Cliquez sur cette phrase'. At line-selection. Window starting at 5 5 Ending at 70 5. write: 'Voici une nouvelle fenêtre ayant des dimensions de 5-5-70-5'.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

79

Après avoir double-cliqué sur « Cliquez sur cette phrase », la fenêtre suivante apparaît :

CRÉATION DE GRAPHIQUES Cette section présente brièvement les techniques de création de graphiques dans SAP R/3. Différentes fonc tions sont disponibles dans SAP R/3 pour faciliter la

programmation de graphiques en langage ABAP. Dans la plupart des cas, il ne suffit que des les appeler. Fonctions et commandes pour la création de graphiques Dans SAP R/3, l’appel d’une fonction se fait de la manière suivant e :

CALL FUNCTION ‘nom de la fonction’ EXPORTING TITL VALT TABLES DATA = italbe. = = ‘titre du graphique’ ‘Nom de l’’axe des Y’

La commande CALL FUNCTION appelle la fonction graphique désirée. La commande TITL permet de saisir le titre du graphique et la commande VALT le nom de l’axe des Y. La commande EXPORTING quant à elle, fait apparaître les valeurs de TITL et VALT dans le graphique. La section TABLES indique les tables que le graphique devra utiliser.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

80

Graphique à deux dimensions Pour créer un graphique en deux dimensions, il faut en premier lieu déclarer une table interne et saisir les valeurs, manuellement ou à l’aide d’une requête, de chacune des colonnes du graphique. Par la suite, il ne reste qu’à appeler la fonction du graphique à deux dimensions.

Le programme YX280 appelle une fonction graphique fournie par SAP R/3 soit le graphique à deux dimensions.

Une fois la fenêtre du graphique fermée, le programme YX280 affiche un tableau résumant les valeurs contenues dans le graphique à deux dimensions.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

81

La programmation en ABAP du programme YX280 est la suivante :
***** Tables ********** ***** Data ************ *déclaration d'une table interne DATA: BEGIN OF itable OCCURS 0, TEXT(25), VALUE TYPE P, END OF itable. *déclaration d'une variable : titre du graphique data: TITLE(25) VALUE 'Sales'. *déclaration d'une variable : titre de l'axe des Y du graphique data: TCOL1(5) VALUE '#1991'. *SET PF-STATUS 'GRAF'. ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** ***insertion manuelle des données dans la table interne *données de la première colonne move: 'Product_1' to itable-text, '153470' to itable-VALUE. APPEND itable. *données de la deuxième colonne itable-TEXT = 'Product_2'. itable-VALUE = 253150. APPEND itable. *données de la troisième colonne itable-TEXT = 'Product_3'. itable-VALUE = 53470. APPEND itable. *données de la quatrième colonne itable-TEXT = 'Product_4'. itable-VALUE = 182000. APPEND itable. *données de la cinquième colonne itable-TEXT = 'Product_5'. itable-VALUE = 92410. APPEND itable. ***affichage des données dans un tableau WRITE: / 'Products',22 TCOL1. SKIP 2. LOOP AT itable. WRITE: / itable-TEXT, 12 itable-VALUE. ENDLOOP. ***appele de la fonction graphique en 2 dimensions CALL FUNCTION 'GRAPH_2D' EXPORTING TITL = TITLE
Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

82

VALT TABLES DATA

= TCOL1 = itable.

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

83

Annexe 1 Liste des programmes utilisés

Nom du programme dans ABAP Editor YX00ex_gabarit YX00ex_programme YX101 YX102 YX00ex_gabarit YX110 YX120 YX130 YX140 YX141 YX150 YX171 YX160 YX180 YX181 YX190 YX200 YX210 YX210 YX240 YX210 et YX240 YX241 YX211 YX212 YX222 YX224 YX230 YX270 YX271 YX272 YX273 YX280

Description Gabarit de la structure d'un programme Exemple d’un programme Exemple d’un programme complet en ABAP (structure) Exemple de la commande Report Démo en-tête Exemple parameters Exemple select options Exemple parameters et select options Exemple #1 avec la commande Write Exemple #2 avec la commande Write Exemple de mise en forme Exemple avec opérandes Exemple text-elements Exemple avec IF Exemple avec IF et SY-SUBRC Exemple avec case Exemple avec une boucle Exemple déclaration table interne Exemple commandes Move, Append et Clear Exemple déclaration table interne (tables disponibles dans SAP) Exemple afficher le contenu d’une table interne Exemple table interne commande Read Exemple table interne Modify Exemple table interne avec Delete Exemple Select Exemple Select avec table interne Exemple requête concaténée Exemple rapport interactif et table SY Exemple rapport interactif et commande Hide Exemple rapport interactif et forage sur plusieurs niveaux Exemple rapport interactif et commande Window Exemple graphique à 2 dimensions

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.

84

Sign up to vote on this title
UsefulNot useful