Chap7 Elements Program Mat Ion
Transcript of Chap7 Elements Program Mat Ion
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
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és pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE.
2
INTRODUCTION 4 ENVIRONNEMENT DE DÉVELOPPEMENT 5 ABAP Editor 5 ABAP Dictionary 6 Dictionary Data Browser 7 INTRODUCTION À LA PROGRAMMATION EN ABAP 9 Création d’un programme ABAP 9 La structure d’un programme ABAP 13 Fonctions usuelles de ABAP Editor 14 Enregistrer et activer un programme 16 STRUCTURE D’UN PROGRAMME ABAP 16 Exemple d’un programme ABAP 16 Commande REPORT 18 En-tête 19 Section : Tables 21 Section : Data 21 Section : Parameters & Select options 24 Section : Initialization 26 Section : Start-of-Selection 26 COMMANDE WRITE, MISE EN FORME, OPÉRANDES ET ÉLÉMENTS DE TEXTE 27 Commande WRITE 27 Mise en forme 29 Opérandes 32 Chaînes de caractères – Text-elements 34 STRUCTURES DE CONTRÔLE 40 Les instructions de conditions 40 Les boucles 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.
3
REQUÊTES SUR LA BASE DE DONNÉES 65 La commande Select 65 Fonctions d’agrégation 69 Concaténer une requête 70 RAPPORTS INTERACTIFS 72 La commande At-line selection 72 Champs de la table SY 73 La commande Hide 74 Le forage sur plusieurs niveaux 76 La commande Window starting at […] ending at […] 79 CRÉATION DE GRAPHIQUES 80 Fonctions et commandes pour la création de graphiques 80 Graphique à deux dimensions 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.
4
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, Computing McGraw-Hill, 1998,
335 pages;
• Keller, H, Krüger, S., ABAP Objects, SAP Press, Addison-Wesley, 2002, 556
pages;
• 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.
5
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 ABAP. 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 utilisé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.
6
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.
7
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 Description
SY-DATUM Date du système
SY-TCODE Numéro de la transaction en cours (ex : SE38)
SY-MANDT Numéro du client utilisé (ex : 401)
SY-LANGU Langage de la session (ex : EN)
SY-UNAME Nom d’usager
SY-UZEIT Heure du serveur
SY-REPID Nom du programme en cours
SY-SUBRC 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.
8
Pour raffiner une recherche, cliquer dans l’un des champs , puis sur son bouton
d’expansion . Une nouvelle fenêtre affichera toutes les valeurs que le champ peut
prendre.
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 Exé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.
9
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.
10
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’usager 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.
11
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.
12
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.
13
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
Procédures
Déclaration des variables
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.
14
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’omission du point provoque l’échec de
l’exécution du programme;
• Afin de faciliter la lecture des programmes, une instruction peut être divisée sur plus
d’une ligne;
• Il est possible, mais non recommandable, d’inscrire plus d’une instruction par ligne;
• Les chaînes de caractères doivent se retrouver entre des guillemets simples comme
ceci : ‘Bonjour’. ;
• L’ABAP Editor ne tient pas compte de la différence entre les minuscules et les
majuscules (« case insensitive») sauf en ce qui concerne les chaînes de caractères;
• Pour faire des commentaires utiliser l’étoile (*); le texte apparaîtra alors en bleu.
Fonctions usuelles de ABAP Editor
La figure ci-dessous présente la barre d’outil de l’ABAP Editor. La fonction de chacun
des icônes est expliquée dans le tableau 2.
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
Tableau 2 - Description des principales fonctions de la barre d'outil de l'ABAP Editor
Icône Fonction Description
Previous Revenir à la page précédente
Next Aller à la page suivante
Display/Change Passer du mode Afficher (Display) au mode Modifier (Change)
Active/Inactive Le programme est disponible pour l’ensemble de R/3 lorsqu’il est actif ou se limite à l’ABAP Workbench lorsqu’il est inactif
Other object
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.
Check Effectue une validation de la syntaxe du programme
Activate Rend le programme disponible pour l’ensemble de
R/3
Test Exécute le programme (et le compile si ce n’est pas
déjà fait)
Where used-list
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.
Display object list Affiche la liste des objets utilisés dans le programme
Display navigation window Affiche la fenêtre de navigation
Help on
Documentation disponible directement dans SAP R/3 couvrant plusieurs sujets sous le thème de la programmation en ABAP
Set/delete breakpoint
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.
Pretty Printer Permet de formater le document pour l’impression. Option rarement utilisé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.
16
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.
17
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.
18
Voici l’écran de saisie appelé dans ce programme. Il s’agit de l’interface permettant à
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
La première ligne d’un programme ABAP se nomme la commande REPORT. Lors de la
création d’un nouveau programme, elle s’ajoute automatiquement afin de l’identifier.
Il est à noter que lorsque l’on copie un programme existant, le nouveau programme
affiche la commande REPORT du programme original. Le programmeur doit donc
changer le nom affiché, dans la commande REPORT, en fonction du nom du nouveau
programme.
La commande REPORT offre différentes options permettant de spécifier certaines
fonctions et limites du programme. Par exemple, il est possible de limiter le nombre de
lignes et de colonnes par page qu’affichera le programme. La commande REPORT se
rédige de la manière suivante :
REPORT nom_programme [NO STANDARD PAGE HEADING] [MESSAGE-ID] [LINE-SIZE] [LINE-COUNT]
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
Tableau 3 - Options de la commande REPORT
Options Description
NO STANDARD PAGE HEADING Affiche un en-tête par défaut
MESSAGE-ID Permet l’affichage de messages à l’aide d’un numéro identifiant ce dernier
LINE-SIZE Nombre de colonnes contenues dans une page
LINE-COUNT Nombre de lignes par page
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.
20
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.
21
Section : Tables
Les tables de la base de données de SAP R/3 qui sont utilisées dans un programme
doivent être identifiées dans la section Tables . Ainsi, un programme qui utilise le champ
PLANETYPE de la table SFLIGHT, doit contenir la déclaration suivante :
*****Tables***** *table utilisée TABLES: sflight.
Si le programme utilise plusieurs tables, il suffit d’ajouter le nom des tables en question,
les uns à la suite des autres, en les séparant par une virgule.
*****Tables***** TABLES: sflight, spfli.
Section : Data
Toutes les nouvelles variables utilisées dans un programme ABAP doivent être
déclarées dans la section Data. Voici le format utilisé pour déclarer une nouvelle
variable en ABAP :
DATA : <name> LENGTH TYPE VALUE 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
Tableau 4 - Déclaration dans la section DATA
Fonctions Description
NAME
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 :
§ 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 ci-dessous :
DESCRIPTION EXEMPLE
C Caractère ‘Bonjour’
D Date, format YYYYMMDD 19690623
F Point flottant 7.5
I Nombre entier 789
N Texte numérique 10000
T Heure, format HHMMSS 123456
TYPE
P Décimal condensé (arrondi) 36.50
VALUE Ce champ permet de spécifier une valeur par défaut à la variable.
DECIMALS Lorsqu’une variable est de type décimal (P), on doit spécifie le nombre de chiffres après la virgule.
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’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.
24
À 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) TYPE 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.
25
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 ***** *interface de sélection des dates SELECT-OPTIONS: Date_vol FOR SFLIGHT-FLDATE.
À l’écran, le formulaire de saisie des dates de vols qui ont été effectués durant un
intervalle donné s’affichera de la manière suivante :
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.
26
À 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.
27
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.
28
Tableau 5- Options de positionnement de la commande Write
Option Description
/ Saute à la prochaine ligne
Colonne 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) utilise
uniquement l’option de saut de ligne et l’option d’emplacement (colonne).
***** Start of Selection *****
*affichage des phrases
WRITE : /10 'SAP',
/15 'ABAP',
/20 'Technologie de l’’ information',
/15 '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.
29
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 fonctions permettant une certaine mise en forme de
l’affichage à l’écran. Pour ce faire, le programmeur doit insérer les commandes de mise
en forme dans son code afin de modifier la présentation à l’écran. Cette section
présente un résumé des commandes les plus utilisées.
Tableau 6 - Principales fonctions de mise en forme de l'affichage
Fonction Description
ULINE Trace une ligne horizontale
SY-VLINE Ligne verticale utilisée pour la création d’un tableau
SKIP n Saute n lignes
SKIP TO LINE n Saute à la ligne n
WRITE: /colonne n Écrire à partir de la colonne 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.
30
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’affichage à 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.
31
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.
32
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 Commandes
Addition +
Soustraction -
Division /
Multiplication *
Exposant **
Modulo MOD
Division entière DIV
Fonctions arithmétiques
Racine carrée SQRT( )
Logarithme LOG( )
Il est à noter que, lors de l’utilisation des fonctions arithmétiques, les valeurs entre
parenthèses doivent être précédées et suivies d’un espace comme ceci :
sqrt ( 10 ) .
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
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.
34
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 ci-
dessous 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, Order_value et
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 : WRITE: /02
'No_Order'(201),
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.
35
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.
36
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 : 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
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.
38
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.
39
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.
40
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.
41
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.
42
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 SY-
SUBRC. 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.
43
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 SY-
SUBRC 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.
44
Tableau 8 - Opérateurs en conjonction avec l’instruction IF
Signes Caractères Signification
= EQ Égale à
<> , >< NE N’est pas égale à
> GT Plus grand que
< LT Plus petit que
>=, => GE Égale ou plus grand que
<=, =< LE Égale ou plus petit que
BETWEEN var1 AND var2
Exclusivement entre 2 valeurs
NOT Ne … pas
AND ET
OR OU
Instructions de conditions CASE
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.
45
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.
46
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.
47
Le programme YX200 permet d’afficher un tableau à l’aide d’une boucle. Notons que la
variable SY-INDEX indique le nombre de fois qu’une boucle a été exécutée.
***** Tables **********
***** Data ************
***** Parameters & Select Options *****
***** Initialization *********
***** Start of Selection *****
*écrire un titre
write:/25 'Écriture d’un tableau'(001).
uline at /25(22).
*écrire l’en-tête
Uline at /2(74).
Write : /2 sy-vline,
3 'nom'(002),
19 sy-vline,
20 'prénom'(003),
37 sy-vline,
38 'programme'(004),
54 sy-vline,
55 'spécialisation'(005),
75 sy-vline,
77 'no boucle (sy-index)'(006).
Uline at /2(74).
Do 3 times.
Write : /2 sy-vline,
19 sy-vline,
37 sy-vline,
54 SY-yline,
75 SY-yline.
Uline at /2(74).
*afficher le # de la boucle
write sy-index
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.
48
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.
49
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 Prénom No_tel
En-tête à 3 Tremblay Marc 450-555-4567
1 Chevalier Mathieu 514-234-5678
2 Perreault Julie 514-345-6666
3 Tremblay Marc 450-555-4567 Enregistrements à
4 Venne Justine 450-987-6543
Déclaration d’une table interne
La déclaration d’une table interne doit se faire dans la section Data. Il existe deux
façons de déclarer une table interne. La première option est de déclarer immédiatement
la table interne au moment où sa structure est définie. La deuxième option est de définir
d’abord la structure et de déclarer une table interne similaire à cette structure. Le
tableau 9 explique, pour sa part, les commandes utilisées dans la déclaration d’une
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.
50
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 Signification
Itable Représente le nom de la Table interne
n_enregistrement
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).
With header line Insère un enregistrement d’en-tête afin d’avoir accès aux données de la table interne.
Nom_enregistrement Nom donné à la structure de 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.
51
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.
52
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.
53
Table interne et extraction 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.
54
À 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.
55
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.
56
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.
57
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 transporteur 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.
58
Figure 3 Extrait de la table SFLIGHT
***** Tables ********** Tables: sflight. DATA: BEGIN OF itable OCCURS 0. INCLUDE STRUCTURE sflight. DATA: END OF itable. ***** Data ************ ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** select * from sflight into corresponding fields of table itable. WRITE:/1 'Date de départ'(001), 22 'ID du transporteur'(002). Uline at /1(50). *effacer l’en-tête MOVE SPACE TO itable. *valeur recherchée Itable-FLDATE = '20050114'. *lire la table interne READ TABLE itable. *si on trouve des données; les afficher IF SY-SUBRC = 0. write:/1 itable-FLDATE, 22 itable-CARRID. *sinon: écrire un message d'erreur Else. write:/1 'aucune donnée trouvée.'(003). 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.
59
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’en-
tê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. Le programme YX211 affiche
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.
60
*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, ceux-
ci 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.
61
*mise à jour du d’un champ X à l’aide de son *numéro d’index
read table itable index N.
if sy-subrc = 0.
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.
62
*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.
63
*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 (SY-
TABIX) 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.
64
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.
65
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 champs
Having conditions
Order by champs.
Endselect.
Tableau 10 - Option de la commande SELECT
SINGLE L’utilisation du Single dans l’instruction Select offre la possibilité de choisir un seul enregistrement.
DISTINCT Le Distinct supprime le dédoublement d’enregistrements qui pourraient être occasionné par la requête.
WHERE La commande Where permet de circonscrire le résultat de la requê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.
66
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 commande 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.
67
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.
68
***** 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:', sy-
dbcnt.
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
L’exécution de ce programme mène à l’affichage de la liste d’enregistrements ci-
dessous. 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 Description
AVG Moyenne
SUM Somme
MAX Maximum
MIN Minimum
COUNT 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.
70
Concaténer une requête
Pour concaténer une requête en langage ABAP, il faut imbriquer deux Select-
EndSelect. 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.
71
***** 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 les résultats write:/1 spfli-connid, 15 sflight-planetype, 30 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.
72
À 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.
73
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 : Niveau de la liste (liste de base = 0)
SY-CUROW : Ligne sélectionnée
SY-CUCOL : Colonne sélectionnée
SY-LISEL : 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 :'(001), / sy-lsind. write: / 'Ligne :'(002), / sy-curow. write: / 'Contenu de la ligne :'(003), / sy-lisel. 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.
74
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 affiche 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 line-
selection, 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 (SY-
LSIND = 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.
75
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.
76
À 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.
77
À 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.
78
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 structure 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: ', iclient-NAME1, /5 'Numéro du client : ', iclient-KUNNR. when 2. write: /5 'Ville : ', iclient-ORT01, /5 'Pays : ', iclient-LAND1. when 3. write: /5 'Adresse : ', 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.
79
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.
80
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 fonctions 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 suivante :
CALL FUNCTION ‘nom de la fonction’
EXPORTING
TITL = ‘titre du graphique’
VALT = ‘Nom de l’’axe des Y’
TABLES
DATA = italbe.
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.
81
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.
82
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.
83
VALT = TCOL1 TABLES DATA = 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.
84
Annexe 1
Liste des programmes utilisés
Nom du programme dans
ABAP Editor Description
YX00ex_gabarit Gabarit de la structure d'un programme
YX00ex_programme Exemple d’un programme
YX101 Exemple d’un programme complet en ABAP (structure)
YX102 Exemple de la commande Report
YX00ex_gabarit Démo en-tête
YX110 Exemple parameters
YX120 Exemple select options
YX130 Exemple parameters et select options
YX140 Exemple #1 avec la commande Write
YX141 Exemple #2 avec la commande Write
YX150 Exemple de mise en forme
YX171 Exemple avec opérandes
YX160 Exemple text-elements
YX180 Exemple avec IF
YX181 Exemple avec IF et SY-SUBRC
YX190 Exemple avec case
YX200 Exemple avec une boucle
YX210 Exemple déclaration table interne
YX210 Exemple commandes Move, Append et Clear
YX240 Exemple déclaration table interne (tables disponibles dans SAP)
YX210 et YX240 Exemple afficher le contenu d’une table interne
YX241 Exemple table interne commande Read
YX211 Exemple table interne Modify
YX212 Exemple table interne avec Delete
YX222 Exemple Select
YX224 Exemple Select avec table interne
YX230 Exemple requête concaténée
YX270 Exemple rapport interactif et table SY
YX271 Exemple rapport interactif et commande Hide
YX272 Exemple rapport interactif et forage sur plusieurs niveaux
YX273 Exemple rapport interactif et commande Window
YX280 Exemple graphique à 2 dimensions