Docstoc

ABAP Programmation

Document Sample
ABAP Programmation Powered By Docstoc
					                                                   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
                                        és
RIVARD, HEC Montréal, Tous droits réserv pour tous pays. Toute traduction ou toute modification sous quelque forme que ce
soit est interdite. VERSION PRÉLIMINAIRE
INTRODUCTION                                                                                                                               4

ENVIRONNEMENT DE DÉVELOPPEMENT                                                                                                             5
ABAP Editor                                                                                                                                5
ABAP Dictionary                                                                                                                            6
Dictionary Data Browser                                                                                                                    7

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


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

•    Hoffman Theodore, Writing SAP ABAP/4 Programs, Computi ng McGraw-Hill, 1998,
     335 pages;
•    Keller, H, Krüger, S., ABAP Objects, SAP Press,                                            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.
                                                                                                                                          4
ENVIRONNEMENT DE DÉVELOPPEMENT
L’environnement                de      développement                se     retrouve          principalement              dans        l’ABAP
Workbench. Ce dernier contient l’ensemble des outils requis pour développer et
maintenir les applications développées en langage de programmation AB AP. Dans le
cadre de cette section, nous aborderons successivement les outils suivants : l’ABAP
Editor, l’ABAP Dictionary et le Dictionary Data Browser.


Il est à noter que le chemin d’accès à l’environnement de développement de SAP R/3
est le suivant : Tools > ABAP Workbench. La plupart des outils 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.
                                                                                                                                          5
ABAP Dictionary
Au même titre que l’ABAP Editor, l’ABAP Dictionary se retrouve aussi sous l’onglet
Development du ABAP Workbench. L’ABAP Dictionary permet d’accéder aux structures
de données des différentes tables contenues dans SAP R/3. Pour visualiser la structure
d’une table, il suffit de se rendre dans l’ABAP Dictionary (SE11) et saisir le nom de cette
table sous le champ Database Table. Prenons exemple sur la table SFLIGHT.




Cliquez sur le bouton Display pour faire afficher la structure de données de cette table.


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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          6
Prenons un autre exemple : la table SY. Il s’agit d’une table très utile dans le cadre du
développement d’un programme ABAP. Cette table contient différentes informations de
session tels que la date du système, le nom du l’utilisateur, la langue d’utilisation, etc.




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


                                                    Tableau 1 - Le système

                        Table-Champs                                         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.
                                                                                                                                          7
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 E xécuter                                             .




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




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

champs d’intervalles et simplement cliquez sur Exécuter                                               . La résultante de cette
action permet d’afficher tous les enregistrements de la table SFLIGHT.




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


Création d’un programme ABAP
La création d’un programme ABAP se fait à partir de la transaction ABAP Editor (SE38).
La figure ci-dessous présente l’écran initial de l’ ABAP Editor.




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          9
Notons avant de poursuivre que, par convention, les programmes ABAP créés dans le
cadre des formations SAP à HEC Montréal doivent être nommés sous la forme
suivante : Y?##EX_&&. Le caractère point d’interrogation correspond à la session en
cours et s’incrémente d’une année scolaire à une autre. Votre professeur vous
indiquera la lettre qui est associée à votre cours pour votre session. Les caractères
« ## » correspondent aux derniers numéros de votre code d’us ager et « && » au
numéro de l’exercice. Par ailleurs, R/3 requiert que la première lettre d’un programme
désigne sa provenance ou son utilité. Dans notre cas, le Y signifie un programme
temporaire qui ne fera pas partie du système de production.


Comme il est souvent plus aisé de copier un gabarit de programme ABAP plutôt que de
partir d’une feuille blanche, les opérations suivantes expliquent comment dupliquer le
gabarit YX00EX_gabarit afin de l’utiliser dans un nouveau programme.


Procédure pour copier le gabarit YX00EX_gabarit
a) Une fois l’ABAP Editor ouvert, saisir le nom du programme recherché dans le champ
     Program. Dans notre cas, saisir YX00ex_gabarit.




b) Cliquez sur l’icône Copy .




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          10
c) Sous Target Program, inscrire le nom de votre programme tout en vous conformant
     au format décrit dans la section précédente.




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


Ainsi, dans cet exemple, le résultat final serait YA25ex_30.



d) Pour confirmer l’opération, cliquez sur le bouton                                               . Cette fenêtre apparaîtra :




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          11
e) S’assurer que les deux premières options (source et text elements) soient cochées,

     puis appuyer sur Copy                                   .


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




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


g) Enregistrer              les       modifications              apportées             en       cliquant          sur       le       bouton

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




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          12
i) Pour faire afficher le programme nouvellement copié, cliquez sur le bouton Display
     et pour le modifier, utiliser le bouton « Change ».




La structure d’un programme ABAP
Un programme ABAP est un ensemble d’instructions composé de variables et de
procédures acceptées par R/3. Chaque programme codé en ABAP doit contenir trois
parties; la première décrivant le programme en question, la seconde servant à déclarer
les variables ainsi que les paramètres et la dernière contenant l’écriture de la
procédure. Voici un exemple d’un programme ABAP simple illustrant ces trois sections.

           REPORT YX00EX_PROGRAMME
           NO STANDARD PAGE HEADING.

           **************************************************************
           * Exercice:                  Cours: 3 -715-00                *
           * Date rendue:               Trimestre:                      *
           *                                                            *
           * Nom du programme:          Programmeur: A.C.Pellerin       *
           *                            Matricule:                      *
           *                                                            *
           * Description du programme:                                  *                                     En-tête
           *    Faire afficher une phrase à l'écran                     *
           *                                                            *
           * Inputs:                        Outputs: À l'écran          *
           *                                                            *
           *                                                            *
           * Historique des modifications:                              *
           *   Date:         Programmeur:         Description:          *
           *                                                            *
           **************************************************************
           ***** Tables **********

           ***** Data ************

           ***** Parameters & Select Options *****
                                                                                                              Déclaration
                                                                                                              des variables
           ***** Initialization *********

           ***** Start of Selection *****
                                                                                                              Procédures
           *Faire afficher à l'écran : Programmer en langage ABAP
           write:/ 'Programmer en langage ABAP'.


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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          13
Spécifications lors de la programmation en ABAP
Lors de la programmation en ABAP, certaines règles doivent être suivies afin de
s’assurer du bon fonctionnement du programme en question ou de clarifier la structure
de celui-ci :
•    Chaque instruction se termine par un point. L’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.
                                                                                                                                          14
   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

                                                              Passer du mode Afficher (Display) au mode Modifier
                                Display/Change
                                                              (Change)

                                                              Le programme est disponible pour l’ensemble de R/3
                                 Active/Inactive              lorsqu’il est actif ou se limite à l’ABAP Workbench
                                                              lorsqu’il est inactif

                                                              Permet d’effectuer différentes recherches sans sortir
                                  Other object
                                                              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

                                                              Exécute le programme (et le compile si ce n’est pas
                                       Test
                                                              déjà fait)

                                                              Permet de faire afficher la liste des programmes,
                                                              écrans, tables de données, vues utilisant ce même
                                Where used-list               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

                                                              Documentation disponible directement dans SAP R/3
                                     Help on                  couvrant plusieurs sujets sous le thème de la
                                                              programmation en ABAP

                                                              Installation et suppression de drapeaux. Permet de
                             Set/delete breakpoint            signaler au débogueur de SAP R/3 que le programme
                                                              doit s’arrêter là où l’on retrouve cet arrêt.

                                                              Permet de formater le document pour l’impression.
                                  Pretty Printer
                                                              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.
                                                                                                                                          15
Enregistrer et activer un programme
Après toutes modifications au code d’un programme ABAP, il importe d’enregistrer ce

dernier en cliquant sur l’icône de sauvegarde                                            . Par ailleurs, il faut activer le
programme pour le rendre disponible dans SAP R/3 et ce en cliquant sur le bouton

activer         .


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


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




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


                       REPORT YX101
                       NO STANDARD PAGE HEADING.


                       **************************************************************
                       * Exercice:                  Cours: 3-715-00                 *
                       * Date rendue:               Trimestre:                      *
                       *                                                            *
                       * Nom du programme:          Programmeur: ACP                *
                       *                            Matricule:                      *
                       *                                                            *
                       * Description du programme:                                  *
                       *            Structure d’un programme abap                   *
                       *                                                            *
                       * Inputs: ? Parameters           Outputs:                    *
                       * Tables utilisées:                                          *
                       *                                                            *
                       * Historique des modifications:                              *
                       *   Date:         Programmeur:        Description:           *
                       *                                                            *
                       **************************************************************

                       ***** Tables **********
                       *utilisation de la table scarr
                       tables: scarr.

                       ***** Data ************
                       *déclaration d'une table interne
                       data: begin of itable occurs 0.
                             include structure scarr.
                       data: end of itable.

                       ***** Parameters & Select Options *****
                       *déclaration d'un paramètre
                       parameters: air_id like scarr-carrid.

                       ***** Initialization *********

                       ***** Start of Selection *****
                       *requête
                       select *
                       from scarr
                       into table itable
                       where carrid = air_id.

                       *si on trouve des données pour la requête ...
                       if sy-subrc = 0.
                       *écrire comme en-tête
                       write: /01 'ID'(001),
                               10 'Nom'(002),
                               30 'Monnaie'(003).

                       *boucle affichant les données trouvées
                       loop at itable.
                       write:/ itable-carrid under text-001,
                               itable-carrname under text-002,
                               itable-currcode under text-003.
                       endloop.

                       else.
                        write 'Aucune donnée trouvée'(004).
                       endif.




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          17
Voici l’écran de saisie appelé dans ce programme. Il s’agit de l’interface perm ettant à
l’utilisateur de saisir une valeur qui sera utilisée lors de l’exécution du programme.




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




Commande REPORT
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.
                                                                                                                                          18
                               Tableau 3 - Options de la commande REPORT

                               Options                                                 Description

               NO STANDARD PAGE HEADING                          Affiche un en-tête par défaut

                                                                 Permet l’affichage de messages à l’aide d’un
                            MESSAGE-ID
                                                                 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.
                                                                                                                                          19
                              Figure 1 – En-tête du gabarit YX00EX_GABARIT



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




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


         Figure 2 - Marqueurs de délimitation du programme YX00EX_GABARIT



                                         ***** Tables **********

                                         ***** Data ************

                                         ***** Parameters & Select Options *****

                                         ***** Initialization *********

                                         ***** Start of Selection *****




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          20
Section : Tables
Les tables de la base de données de SAP R/3 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.
                                                                                                                                          21
                                                Tableau 4 - Déclaration dans la
                                                        section DATA

                    Fonctions                                            Description

                                        Chacune des variables que l’on retrouve dans un
                                        programme doit être déclarée dans la section Data. Le
                                        langage ABAP impose que le nom des variables :
                                            §    Soit d’un maximum 30 caractères
                       NAME
                                            §    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) doit être spécifiée à droite
                                        La longueur du champ (
                     LENGTH
                                        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
                       TYPE
                                        F         Point flottant                             7.5

                                        I         Nombre entier                              789

                                        N         Texte numérique                            10000

                                        T         Heure, format HHMMSS                       123456

                                        P         Décimal condensé (arrondi)                 36.50

                                        Ce champ permet de spécifier une valeur par défaut à la
                      VALUE
                                        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.
                                                                                                                                          22
À titre d’exemple, le programme suivant crée la variable montant_total. D’une longueur
de 6 caractères, cette variable est de type décimal arrondi (p) et doit afficher 2 chiffres
après la virgule. Cette variable doit donc être déclarée de la façon suivante :



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




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

                                            DATA :               <name>
                                                                 LIKE table-champs.




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



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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          23
À titre d’information, la figure suivante présente un extrait de la table SCARR avec les
variables de références utilisées dans l’exemple.




Section : Parameters & Select options

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



                                            *****Parameters*****

                                            PARAMETERS:          nb_1 TYPE i,

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




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




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


Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          24
Select-Options
Le Select-Options est similaire au Parameters. Il permet à l’utilisateur de saisir un
intervalle de valeur. Cependant, le Select-options ne peut être utilisé que pour faire des
requêtes sur les tables de SAP R/3. D’ailleurs, les tables utilisées lors de requêtes
doivent être déclarées dans la section Tables. Enfin, soulignons que le nom donné à un
Select-Options ne doit pas dépasser 8 caractères.


Le Select-Options du programme YX120, permettra de saisir un intervalle de date pour
faire afficher tous les vols effectués durant la période spécifiée. La liste des vols (champ
FLDATE ) est contenue dans la table SFLIGHT :



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


                                 ***** Data ************


                                 ***** Parameters & Select Options *****
                                 *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.
                                                                                                                                          25
À l’écran, le formulaire de saisie du programme YX130 s’affichera de la manière
suivante :




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


                      ***** Tables **********
                      TABLES: spfli,
                              sflight.

                      ***** Data ************


                      ***** Parameters & Select Options *****
                      PARAMETERS:        Cie LIKE SPFLI-CARRID.
                      SELECT-OPTIONS:    Duree FOR SFLIGHT-FLDATE.




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


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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          26
COMMANDE WRITE, MISE EN FORME, OPÉRANDES ET ÉLÉMENTS DE TEXTE
Cette section est consacrée à différentes fonctions reliées à la présentation et à la mise
en forme des formulaires. Nous abordons successivement la commande d’écriture
(WRITE), les fonctions de mise en forme et la déclaration des éléments de texte.


Commande WRITE
La commande Write permet d’afficher à l’écran les résultats de l’exécution d’un
programme. Dans sa forme la plus simple, la commande Write se rédige de la manière
suivante :


                                            WRITE : 'Bonjour'.




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




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




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


                                            WRITE : </> <colonne> <(longueur)>




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

                          Option                                       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.
                                                                                                                                          28
Le second programme (YX141) utilise les trois options d’affichage.


        ***** Start of Selection *****


        *affichage des résultats
        WRITE : /5(3) 'SAP',
                      /5(2) 'ABAP',
                      /15 'Technologie de l’’ information', 'et', 'Aspects Technologiques'.




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




Mise en forme
L’ABAP Editor comporte différentes 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.
                                                                                                                                          29
Le programme suivant (YX150) utilise ces différentes fonctions de mise en forme. Nous
avons commenté le programme afin d’expliquer l’effet de chacune de ces fonctions sur
l’affic hage à l’écran.



                ***** Start of Selection *****


                *trace une ligne horizontale débutant à la colonne #1 et
                *se terminant à la colonne # 100
                uline at /1(100).


                *saute 5 lignes
                SKIP 5.


                *se rend à la ligne 6
                SKIP TO LINE 6.


                *trace une ligne verticale à la position 1, 5 et 10 en
                *sautant une ligne à chaque fois
                WRITE:/1 SY-VLINE,
                          /5 SY-VLINE,
                          /10 SY-VLINE.


                *débute l'écriture de la phrase à la colonne numéro 25
                WRITE: /25 'Cette phrase commence à la position 25'.




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          30
La figure ci-dessous illustre à quoi ressemblerait l’affichage de ce programme.




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          31
Opérandes
Plusieurs programmes nécessitent l’utilisation d’opérandes afin d’exécuter des calculs
de différentes natures. Voici donc un tableau indiquant les opérateurs arithmétiques les
plus utilisés.


                         Tableau 7 - Opérateurs arithmétiques les plus utilisés

                                                     Nom                    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.
                                                                                                                                          32
Le programme suivant (YX171) exécute des calculs sur des variables déclarées dans la
section Data.




                      ***** Tables **********


                      ***** Data ************
                      DATA: R1 TYPE i, R2 TYPE i, R3 TYPE i, R4 TYPE i,
                                D1 TYPE i VALUE '5',
                                D2 TYPE i VALUE '20'.


                      ***** Parameters & Select Options *****


                      ***** Initialization *********


                      ***** Start of Selection *****


                      R1 = D1 + D2.
                      R2 = D1 * D2.
                      R3 = D2 / D1.
                      R4 = D1 mod D2.


                      *La commande WRITE permet d’afficher les résultats
                      *à l’écran et la barre
                      *oblique produit un saut de ligne.




                      WRITE : /         R1,
                                  /     R2,
                                  /     R3,R4.




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          33
Chaînes de caractères – Text-elements
SAP R/3 offre la possibilité de modifier la langue utilisée par l’application (fonctionnalité
multilingue). Pour ce faire, chaque terme (élément de texte) utilisé dans SAP doit être
répertorié et numéroté afin d’y associer la traduction appropriée. La majorité des
interfaces et rapports disponibles dans R/3 ont été préalablement traduits et sont
accessibles dans les principales langues disponibles dans SAP R/3. Évidemment, R/3
ne traduit pas lui-même les éléments de texte. Chaque traduction doit être saisie une à
une et c’est donc pourquoi il peut arriver, à l’occasion, de tomber dans R/3 sur des
expressions en allemand au sein de certains rapports ou interfaces rarement utilisées !


Lors du développement d’un rapport ou d’une interface en ABAP, il importe de déclarer
toutes les chaînes de caractères utilisées dans le programme afin de faciliter sa
traduction subséquente. Concrètement, il suffit d’inscrire un numéro, entre parenthèse,
à la suite de chaque élément de texte du programme et de suivre la procédure 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.
                                                                                                                                          34
Procédure pour répertorier les éléments de texte
La numérotation de ces éléments de texte et le fait de les répertorier dans un index
permettront de traduire automatiquement l’en-tête du rapport (en assumant que la
traduction des termes a été saisie préalablement). Les cinq étapes suivantes expliquent
comment répertorier les éléments de texte de l’exemple précédent.


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




Cliquez sur Yes.


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




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          35
c) Pour activer l’élément sélectionné, cliquez sur le bouton Activate . Sélectionner le
     nom du programme puis cliquez sur le bouton Continue .




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




e) Suivre la même procédure pour tous les éléments de texte.


Finalement, tous les éléments de texte se retrouvent répertoriés.




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


a) Saisir le nom du programme sous Program.




Copyright © 2004, SAP R/3 : 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
b) Cliquez sur le bouton Display ou Change dépendamment de l’action désirée.




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


/nSE32 :




ABAP Editor :




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




La fenêtre suivante apparaîtra :




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          37
La langue originale (Original language) est celle de la session de l’utilisation. Dans
notre cas, l’anglais est la langue originale. La langue de traduction, soit Target
language, est la langue dans laquelle les éléments de texte seront traduits. Dans la
présente situation, le français sera cette langue. Donc remplacer la Target language par
FR, soit le diminutif de français, puis cliquez sur exécuter                                     .




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          38
Pour traduire ces derniers, il suffit d’inscrire en-dessous de chacun des éléments de
texte leur traduction.




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          39
Ne pas oublier de sauvegarder les modifications avec le bouton                                                      . L’écran suivant
apparaîtra en récapitulant tous les éléments de texte traduits pour le programme
YX160.




STRUCTURES DE CONTRÔLE
La programmation en ABAP offre différentes instructions de contrôle semblables au
langage Visual Basic . En effet, il est ainsi possible d’utiliser tant des instructions de
conditions que des boucles. Cette section présente ces deux approches.


Les instructions de conditions
Instructions de conditions IF
Une instruction de condition IF exécute une procédure lorsque la condition exprimée est
satisfaite. Voici de quelle manière se rédige la condition IF :




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          40
                                           If [not] condition 1.
                                                                 Instruction1.
                                                      [Elseif condition2.
                                                      Instruction2.]
                                                      Else.
                                                                 Instruction Else.
                                           Endif.




Par exemple, le programme YX180                                  permet à un agent de voyage d’être informé
lorsqu’un rabais est disponible pour les groupes de plus de dix personnes.



                               ***** Tables **********

                               ***** Data ************

                               ***** Parameters & Select Options *****
                               Parameters: nb_pers type i.


                               ***** Initialization *********

                               ***** Start of Selection *****
                               if nb_pers < 10.
                                 write 'Prix de groupe non disponible'(001).
                               else.
                                 write 'Prix de groupe disponible'(002).
                               endif.




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          41
Puisque que la valeur cinq est saisie, le programme affiche qu’aucun prix de groupe
n’est disponible.




Instructions de conditions IF et variable SY-SUBRC
Il est également possible d’utiliser l’instruction IF en conjonction avec le champ 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.
                                                                                                                                          42
La figure suivante illustre en partie la table SCARR pour démontrer qu’il n’y a aucune
compagnie aérienne attitrée au sigle AD.




Puisque la valeur de SY-SUBRC n’est pas égale à zéro, le IF et la commande 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.
                                                                                                                                          43
                    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                Exclusivement entre 2 valeurs
                                                 AND var2

                                                       NOT                 Ne … pas

                                                       AND                 ET

                                                        OR                 OU




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



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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          44
Le programme YX190 indique le nom de la couleur correspondant au chiffre saisie dans
l’interface.

                         ***** Tables **********

                         ***** Data ************

                         ***** Parameters & Select Options *****
                         Parameters: chiffre type i.

                         ***** Initialization *********

                         ***** Start of Selection *****
                         case chiffre.
                           when '1'.
                             write:/ 'couleur #1 rouge'(001).
                           when '2'.
                             write:/ 'couleur #2 noire'(002).
                           when others.
                             write:/ 'pas de couleur déterminée'(003).
                         endcase.




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




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          45
Les boucles
L’instruction Do est une commande permettant d’exécuter un certain nombre de fois la
même procédure. Plus spécifiquement, le programme exécute dans un premier temps
la procédure et, dans un deuxième temps, la suite. La boucle s’arrête sur demande
(conditions IF avec un EXIT) ou lorsque le nombre de boucle désirée est atteint. Si
aucune de ces deux options de complétion n’est effectuée, la boucle sera infinie. Voici
le format pour écrire une boucle.




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          46
Le programme YX200 permet d’afficher un tableau à l’aide d’une boucle. Notons que la
variable SY-INDEX 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.
                                                                                                                                          47
L’exécution de ce programme mène à l’affichage du tableau suivant :




TABLES INTERNES
Une table interne constitue un espace temporaire de traitement et de stockage de
données. Les tables internes ne font donc pas partie des bases de données de SAP
R/3. Elles sont plutôt emmagasinées dans une zone tampon de la mémoire. Cette
section présente de quelle manière une table interne doit être déclarée et manipulée
dans le cadre d’un programme ABAP.


Caractéristiques d’une table interne
Une table interne se distingue par les caractéristiques suivantes :
•    La table interne possède une durée de vie limitée à l’exécution du programme;
•    Elle ne possède pas de clé primaire;
•    Les noms des tables internes doivent commencer par i afin de les différencier des
     tables des bases de données de SAP R/3;
•    Une table interne possède un enregistrement d’en-tête (header record) et des
     enregistrements individuels numérotés 1, 2, 3, …;
•    On ne peut accéder et manipuler qu’un seul enregistrement à la fois, soit celui qui se
     trouve dans l’enregistrement d’en-tête;
•    Quand un enregistrement individuel est appelé par le programme, il est copié dans
     l’enregistrement d’en-tête.




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          48
Structure d’une table interne
Tel qu’illustré ci- dessous, une table interne est constituée de champs (ex : Nom,
Pénom, No_tel) qui forment sa structure. Lors du déroulement du programme, la table
interne se remplit de valeurs créant ainsi différents enregistrements (lignes). La
structure de chaque table interne possède un index qui numérote chacun de ces
enregistrements. Il est possible d’appeler un enregistrement précis en utilisant l’index
de la table interne. La table interne copie alors l’enregistrement demandé et l’affiche
dans l’en-tête de la table.


                                                   Nom               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

 Enregistrements à 3                           Tremblay                 Marc               450-555-4567

                                     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.
                                                                                                                                          49
Option 1

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




Option 2

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




                                      Tableau 9 - Options d’une table interne

                     Options                                                    Signification

                       Itable                   Représente le nom de la Table interne

                                                Représente le nombre d’enregistrements qui sera stocké
                                                dans la mémoire tampon. À partir de la version 4.0, SAP
                                                s’occupe automatiquement de la gestion de la mémoire,
              n_enregistrement
                                                alors il n’est pas nécessaire de spécifier la grosseur de
                                                la table interne. Donc toujours inscrire 0 comme nombre
                                                d’enregistrement (0 = infini).

                                                Insère un enregistrement d’en-tête afin d’avoir accès aux
               With header line
                                                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.
                                                                                                                                          50
L’extrait du programme YX210 présente la déclaration de la table interne ICIE dont la
structure est copiée sur COMPAGNIE.



                           ***** Tables **********
                           *déclaration de la structure
                           DATA: BEGIN OF compagnie,
                                        no_cie(3) type n,
                                        nom_cie(20) type c,
                           END OF compagnie,


                           *déclaration de la table interne avec une en-tête
                           icie LIKE compagnie OCCURS 0 with header line.




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

                                            Move : valeur to itable-champs.
                                            Append itable.
                                            Clear itable.




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          51
L’exemple suivant poursuit l’exemple initié précédemment (YX210) en ajoutant des
enregistrements à la table interne ICIE.



                      ***** Parameters & Select Options *****


                      ***** Initialization *********


                      ***** Start of Selection *****


                      *insertion manuelle de données dans la table interne
                      MOVE: '01' to icie-no_cie,
                                'Plomberie ABC' to icie-nom_cie.


                      *enregistrement de la ligne dans l'en-tête de la table
                      *interne
                      APPEND icie.


                      *effacer le contenu de l'en-tête de la table interne
                      CLEAR icie.


                      *insertion manuelle de données dans la table interne
                      MOVE: '02' to icie-no_cie,
                                'Électriciens ABC' to icie-nom_cie.


                      APPEND icie.




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          52
Table interne et e xtraction de la base de données de SAP R/3
Une table interne peut également être définie en fonction d’une table contenue dans les
bases de données de SAP R/3. Il est même possible d’extraire des données de cette
même table afin de peupler une table interne. Notons que nous abordons ici
succinctement le sujet des requêtes dans les tables de R/3; nous y reviendrons en
détails à la prochaine section.


Voici de quelle manière la structure d’une table existante dans R/3 peut être utilisée
pour définir une table interne. La fonction Include structure sélectionne la structure
d’une table de SAP R/3 et l’utilise comme modèle pour la nouvelle table interne.



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




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




                                 into corresponding fields of table itable.




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          53
À titre d’exemple, prenons un programme (YX240) permettant à un employé d’une
compagnie aérienne de faire afficher le nom du pays, de la ville et de l’aéroport d’où il y
a des départs.



              ***** Tables **********
              Tables: spfli.

              ***** Data ************
              *déclaration de la table interne utilisant la structure de la table
              *spfli
              DATA: BEGIN OF itable OCCURS 0.
                     INCLUDE STRUCTURE spfli.
              DATA: END OF itable.


              ***** Parameters & Select Options *****

              ***** Initialization *********

              ***** Start of Selection *****

              *requêtes sur la table spfli
              select COUNTRYFR CITYFROM AIRPFROM
              from spfli
              *insertion des données trouvées dans la table interne
              into corresponding fields of table itable.




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




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          54
Le programme suivant (YX210) poursuit l’exemple débuté précédemment. Dans cet
extrait, nous procédons à l’affichage des enregistrements de la table interne.



                      *écriture d'un titre
                      write:/1 'Affichage de la table interne icie'.
                      skip 1.


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




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




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



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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          55
Voici la liste des aéroports avec leur ville et pays respectifs affichée à l’écran :




Lecture d’un enregistrement à la fois (Commande Read)
La commande Read permet de chercher un enregistrement particulier dans une table
interne. Pour atteindre un enregistrement (une ligne) spécifique d’une table interne à
l’aide de la commande Read, il importe de suivre la procédure suivante :


a) Supprimer l’enregistrement qui est présentement dans l’en-tête de la table interne


b) Saisir le nom de la table interne et le nom du champ recherché puis inscrire la valeur
     de ce champ. Le nom du champ doit être écrit de la même manière qu’il apparaît
     dans la base de données de SAP R/3 (case sensitive). Il est aussi possible d’utiliser
     le numéro de l’index.


La lecture d’un enregistrement se rédige donc de la manière suivante. D’abord, la
suppression de l’entête s’effectue selon l’une des deux méthodes suivantes :




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

                                                      MOVE SPACE TO itable




Option 2 :

                                                      Clear itable.




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


Option 1 :

                                       Itable -champ = ‘valeur_recherchée’.


                                       READ TABLE itable




Option 2:

                                                  READ TABLE itable INDEX i.




L’exemple suivant est un programme (YX241) permettant à un employé de rechercher
dans une table interne le tra nsporteur ayant fait un vol le 14 janvier 2005. On peut
constater à la figure 3 (extrait de la table SFLIGHT) que plusieurs vols ont été effectués
lors de cette journée (faire SE16 pour visualiser cette table).

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




                                ***** Tables **********
                                Tables: sflight.

                                DATA: BEGIN OF itab le 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.
                                                                                                                                          58
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
                                                        e
enregistrements ont été rajoutés au programme initial. L 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.
                                                                                                                                          59
                *boucle permettant d'afficher les données contenues dans la table
                *interne.
                Loop at icie.
                   write:/ sy-tabix,
                                icie-no_cie,
                                icie-nom_cie.
                Endloop




                                                                       .



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




Il est à noter que lorsque l’on insère des enregistrements dans une table interne, 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.
                                                                                                                                          60
                    *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.
                                                                                                                                          61
                        *mise à jour du nom de la compagnie d'électriciens
                        *avec une boucle
                        loop at icie where no_cie = '02'.
                          icie-nom_cie(30) = 'Électriciens ABC et Fils'.
                          modify icie.
                        endloop.




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


Il existe deux approches pour utiliser la commande Delete :


a) En recherchant l’enregistrement à supprimer avec le numéro de l’index de la table
     interne;


b) En effectuant une boucle pour rechercher un enregistrement à supprimer en fonction
     de la valeur de l’un de ses champs.


Option 1 :
La première option consiste à rechercher l’enregistrement à supprimer à l’aide de son
numéro d’index. Un fois trouvé, l’enregistrement est copié dans l’en-tête puis supprimé.
L’enregistrement est définitivement supprimé de l’en-tête et de la table interne
simultanément.




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          62
                                *suppression de l'enregistrement possédant le
                                *numéro de compagnie X, mais le numéro d’index
                                Y *(SY-TABIX)
                                read table itable index Y.
                                if sy-subrc = 0.
                                delete itable index sy-tabix.
                                endif.




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




À noter : lors de la suppression complète d’un enregistrement avec Delete, l’index (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.
                                                                                                                                          63
Option 2 :
L’option 2 consiste à rechercher un enregis trement en fonction de la valeur d’un champ
de cet enregistrement. Lorsque cet enregistrement est identifié et copié dans l’en-tête,
la commande Delete permet de la supprimer aux deux endroits.


L’exemple suivant (YX212) identifie et supprime la compagnie possédant le numéro de
compagnie 4 soit Gazon Plus.



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




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




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



                      DESCRIBE table itable [LINES n] :




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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          64
REQUÊTES SUR LA BASE DE DONNÉES
La section suivante est consacrée à l’utilisation du langage de requête SQL dans le
cadre de programme rédigé en ABAP. En effet, ABAP utilise le langage SQL pour
extraire et manipuler des données contenus dans la BD de R/3. Bien que les
commandes Update, Insert et Delete puissent être utilisées dans le cadre d’un
programme ABAP, cette section s’attarde principalement à la commande Select.


La commande Select
La commande Select permet d’effectuer une requête sur les tables de la base de
données de R/3 en spécifiant différents critères de sélection et de regroupement. La
commande Select se rédige de la manière suivante :



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




                                Tableau 10 - Option de la commande SELECT

                        L’utilisation du Single dans l’instruction Select offre la possibilité de choisir
    SINGLE
                        un seul enregistrement.

                        Le Distinct supprime le dédoublement d’enregistrements qui pourraient être
    DISTINCT
                        occasionné par la requête.


    WHERE               La commande Where permet de circonsc rire 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.
                                                                                                                                          65
Il importe de souligner que le point doit seulement apparaître après la dernière
instruction, soit le Where, le Group by , le Having ou le Order by. De surcroît, il est
recommandé de conclure la requête par un Endselect (qui lui-même doit être suivi d’un
point). La combinaison du Select-endSelect crée automatiquement une boucle, facilitant
ainsi l’affichage des résultats pour des programmes courts ou lorsque les données ne
sont lues qu’une seule fois.


En ce qui concerne la commande Where, ABAP reconnaît deux frimes. D’une part, le
signe pourcentage (%) permet de remplacer un groupe de caractères au début ou à la
fin d’une valeur : par exemple, tous les noms commençant par b = ‘b%’. D’autre part, le
signe de soulignement ( _ ) permet de remplacer une série de caractères au centre
d’une valeur : par exemple, tous les noms ressemblant à Amy = ‘A_ y’. Dans les deux
cas, il importe d’utiliser la commande Like. Par exemple, une requête pour trouver les
compagnies aériennes dont le ID commence par A devrait se rédiger de la manière
suivante :


                                           where carrid like ‘a%’.




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




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




Illustrons par un exemple la c ommande Select. La requête de cet exemple porte sur la
table SPFLI. La requête sélectionne l’ensemble du contenu (select *) de la table SPLI
(from spfli) et demande d’ordonnancer le résultats selon la ville d’origine (order by

Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          66
cityfrom ) : Ensuite le programme affiche les champs CARRID, CONTRYFR,
CITYFROM, AIRPFROM, COUNTRYTO et CITYTO. Le programme utilisé est le
YX222.




                        ***** Tables **********
                        tables: spfli.


                        ***** Data ************


                        ***** Parameters & Select Options *****


                        ***** Initialization *********


                        ***** Start of Selection *****


                        select *
                        from spfli
                        where period = '0'
                        order by cityfrom.
                         write:/ spfli-carrid,
                                       spfli-countryfr,
                                       spfli-cityfrom,
                                       spfli-airpfrom,
                                       spfli-countryto,
                                       spfli-cityto.
                        endselect.



                        skip 2.


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




Il est également possible de conserver les résultats de la requête dans une table
interne. L’exemple suivant (YX224) sauvegarde temporairement les données de SPFLI
dans la table interne itable. L’affichage des données est effectué à l’aide d’une boucle.

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


                      ***** Data ************


                      *declaration d’une table interne correspondant à la
                      *structure de la table spfli
                      data itable like spfli occurs 0 with header line.


                      ***** Parameters & Select Options *****


                      ***** Initialization *********


                      ***** Start of Selection *****


                      *requête sur la table Spfli
                      select *
                      from spfli into table itable
                      where period = '0'
                      order by cityfrom.


                      *affichage des données continues dans les champs
                      spécifiés
                      loop at itable.
                       write:/ itable-carrid,
                                     itable-countryfr,
                                     itable-cityfrom,
                                     itable-airpfrom,
                                     itable-countryto,
                                     itable-cityto.
                      endloop.


                      skip 2.
                      write:/ 'nombre d'’enregistrements trouvés:', 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.
                                                                                                                                          68
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.
                                                                                                                                          69
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.
                                                                                                                                          70
***** Tables **********
tables : sflight,
         spfli.
***** Data ************

***** Parameters & Select Options *****


***** Initialization *********

***** Start of Selection *****

*en-tête
write:/1 'no_connexion'(001),
       15 'Type_avion'(002),
        30 'Date_vol'(003).
skip 1.

*requête concaténée
select * from sflight.
  select * from spfli
   where carrid = sflight-carrid
   and connid = '17'.

*afficher       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.
                                                                                                                                          71
À l’écran, le résultat s’affiche de la manière suivante :




RAPPORTS INTERACTIFS
Cette section présente les différentes fonctions, événements et commandes pour
programmer des rapports interactifs dans SAP R/3 à l’aide du langage ABAP. Dans le
cadre du cours, les rapports interactifs seront surtout sous forme de listes détaillées.


La commande At-line selection
La commande At-line selection permet à l’utilisateur de sélectionner une ligne, dans un
rapport, afin d’accéder à des informations supplémentaires contenues dans une liste.
Pour exécuter la commande, il doit double-cliquez sur la ligne désirée ou sélectionner la
ligne en question et presser la touche F2. La commande At-line selection se rédige de
la manière suivante :


                                            at line-selection.




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          72
Champs de la table SY
Certains champs, provenant de la table SY, affichent de l’information concernant
l’utilisation de rapports interactifs. Le tableau ci- dessous en décrit un certain nombre.


                                        Tableau 12 – Champs de la table SY

                             SY-LSIND :                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.
                                                                                                                                          73
Lors de l’exécution du programme, le mot line et le nombre de fois que la boucle a été
exécutée (grâce à SY-INDEX) s’affiche à l’écran.




L’utilisateur sélectionne une ligne en double-cliquant sur cette dernière (At-line
selection). Le programme affic he le niveau de la liste (sy-lsind), le numéro de la ligne
                                     sy-lisel). Dans l’exemple suivant, l’utilisateur a
(sy-curow) et le contenu de la ligne (
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.
                                                                                                                                          74
Le programme YX271 est un exemple d’utilisation de la commande Hide. Il entrepose
en mémoire le numéro identif iant chacune des compagnies d’aviation (carrid) à l’aide de
la commande Hide. Lorsque l’utilisateur sélectionne le nom de l’une des compagnies,
les numéros identifiant chacune des compagnies d’aviation (carrid) est restauré et
permet ainsi d’apparier chacune des compagnies d’aviation avec leur adresse URL
respective.

La programmation d’un tel programme ressemble à ceci :

         ***** Tables **********
         *tables utilisées
         tables: scarr,
                 scarplan.

         ***** Data ************
         *déclaration de la table interne
         data: begin of iplane occurs 0.
               include structure scarr.
         data: end of iplane.

         ***** Parameters & Select Options *****

         ***** Initialization *********

         ***** Start of Selection *****


         ****** Selection *******
         *titre
         write:/1 'Nom de la compagnie d''aviation'(001).
         uline.
         skip 1.


         select * from scarr into corresponding fields of table iplane.
         loop at iplane.
         write:/1 iplane -carrname.
         *conserver en mémoire les numéros identifiant chacune des cie d'aviation
         hide iplane-carrid.
         endloop.

         *commade pour permettre le forage
         at line-selection.
           read table iplane with key carrid = iplane-carrid.

         *if sy -lsind < 2.
           write:/1 iplane-url.
         *endif.




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          75
À l’écran, le contenu du niveau de base (niveau = 0) s’affiche de la manière suivante :




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




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


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


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




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




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


Niveau 2 :




Niveau 3 :




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

                 ***** Tables **********
                 *table utilisée
                 TABLES: kna1.

                 ***** Data ************
                 *déclaration de la table interne
                 data: begin of iclient occurs 0.
                       include s tructure kna1.
                 data: end of iclient.

                 ***** Parameters & Select Options *****

                 ***** Initialization *********

                 ***** Start of Selection *****

                 ****** Selection *******

                 write:/1 'Nom du client'.
                 uline.
                 skip 1.

                 SELECT *
                 FROM kna1 into corresponding fields of table iclient.
                   loop at iclient.
                 write:/1 iclient-name1.
                 *conserver en mémoire les numéros identifiant chacun des clients
                 hide iclient-kunnr.
                 endloop.

                 ****** Event Processing *************
                 AT LINE-SELECTION.
                   case sy-lsind.
                     read table iclient with key kunnr = iclient-kunnr.

                 when 1.
                 write: /5 'Nom du client:                                        ', 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.
                                                                                                                                          78
La commande Window starting at […] ending at […]
La commande Window starting at […] ending at […] offre la possibilité au développeur
d’afficher du texte ou le résultat d’une opération, par exemple, dans une nouvelle
fenêtre tout en ayant le contrôle sur les dimensions de celle-ci. Cette commande se
rédige comme ceci :




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




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


Le programme YX273 est un exemple d’utilisation de cette commande.



                      write: / 'Cliquez sur cette phrase'.


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




Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          79
Après avoir double-cliqué sur « Cliquez sur cette phrase », la fenêtre suivante apparaît :




CRÉATION DE GRAPHIQUES
Cette section présente brièvement les techniques de création de graphiques dans SAP
R/3.      Différentes          fonc tions sont disponibles                        dans        SAP        R/3       pour       faciliter   la
programmation de graphiques en langage ABAP. Dans la plupart des cas, il ne suffit
que des les appeler.


Fonctions et commandes pour la création de graphiques
Dans SAP R/3, l’appel d’une fonction se fait de la manière suivant e :



                                  CALL FUNCTION ‘nom de la fonction’
                                          EXPORTING
                                                  TITL       =     ‘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.
                                                                                                                                          80
Graphique à deux dimensions
Pour créer un graphique en deux dimensions, il faut en premier lieu déclarer une table
interne et saisir les valeurs, manuellement ou à l’aide d’une requête, de chacune des
colonnes du graphique. Par la suite, il ne reste qu’à appeler la fonction du graphique à
deux dimensions.


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




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




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

***** Tables **********

***** Data ************

*déclaration d'une table interne
DATA: BEGIN OF itable OCCURS 0,
        TEXT(25),
        VALUE TYPE P,
      END OF itable.

*déclaration d'une variable : titre du graphique
data: TITLE(25) VALUE 'Sales'.

*déclaration d'une variable : titre de l'axe des Y du graphique
data: TCOL1(5) VALUE '#1991'.
*SET PF-STATUS 'GRAF'.

***** Parameters & Select Options *****
***** Initialization *********
***** Start of Selection *****
***insertion manuelle des données dans la table interne
*données de la première colonne
move: 'Product_1' to itable-text,
      '153470' to itable-VALUE.
APPEND itable.

*données de la deuxième colonne
itable-TEXT = 'Product_2'.
itable-VALUE = 253150.
APPEND itable.

*données de la troisième colonne
itable-TEXT = 'Product_3'.
itable-VALUE = 53470.
APPEND itable.

*données de la quatrième colonne
itable-TEXT = 'Product_4'.
itable-VALUE = 182000.
APPEND itable.

*données de la cinquième colonne
itable-TEXT = 'Product_5'.
itable-VALUE = 92410.
APPEND itable.

***affichage des données dans un tableau
WRITE: / 'Products',22 TCOL1.
SKIP 2.
LOOP AT itable.
  WRITE: / itable-TEXT, 12 itable-VALUE.
ENDLOOP.

***appele de la fonction graphique en 2 dimensions
CALL FUNCTION 'GRAPH_2D'
       EXPORTING
            TITL = TITLE
Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD,
HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRÉLIMINAIRE.
                                                                                                                                          82
                   VALT      = 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.
                                                                                                                                          83
                                                                Annexe 1
                                             Liste des programmes utilisés


                      Nom du
                  programme dans                                               Description
                    ABAP Editor

                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




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

				
DOCUMENT INFO
Shared By:
Tags:
Stats:
views:216
posted:8/3/2011
language:French
pages:84