Vous êtes sur la page 1sur 84

Chapitre 7

lments 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 LGER et Suzanne
RIVARD, HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce
soit est interdite. VERSION PRLIMINAIRE

INTRODUCTION

ENVIRONNEMENT DE DVELOPPEMENT
ABAP Editor
ABAP Dictionary
Dictionary Data Browser

5
5
6
7

INTRODUCTION LA PR OGRAMMATION EN ABAP


Cration dun programme ABAP
La structure dun programme ABAP
Fonctions usuelles de ABAP Editor
Enregistrer et activer un programme

9
9
13
14
16

STRUCTURE DUN PROGRAMME ABAP


Exemple dun programme ABAP
Commande REPORT
En-tte
Section : Tables
Section : Data
Section : Parameters & Select options
Section : Initialization
Section : Start-of-Selection

16
16
18
19
21
21
24
26
26

COMMANDE WRITE, MISE EN FORME, OPRANDES ET LMENTS DE TEXTE


Commande WRITE
Mise en forme
Oprandes
Chanes de caractres Text-elements

27
27
29
32
34

STRUCTURES DE CONTRLE
Les instructions de conditions
Les boucles

40
40
46

TABLES INTERNES
48
Caractristiques dune table interne
48
Structure dune table interne
49
Dclaration dune table interne
49
Ajout denregistrements dans une table interne : Move, Append et Clear
51
Table interne et extraction de la base de donnes de SAP R/3
53
Afficher le contenu dune table interne
54
Lecture dun enregistrement la fois (Commande Read)
56
Modification dune table interne (Commande Modify)
59
Effacer un enregistrement (Commande DELETE)
62
Dnombrement des enregistrements de la table interne (Commande DESCRIBE)
64

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

REQUTES SUR LA BASE DE DONNES


La commande Select
Fonctions dagrgation
Concatner une requte

65
65
69
70

RAPPORTS INTERACTIFS
La commande At-line selection
Champs de la table SY
La commande Hide
Le forage sur plusieurs niveaux
La commande Window starting at [] ending at []

72
72
73
74
76
79

CRATION DE GRAPHIQUES
Fonctions et commandes pour la cration de graphiques
Graphique deux dimensions

80
80
81

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

INTRODUCTION
Ce chapitre constitue une introduction au langage de programmation Advanced
Business Application Program (ABAP). Il sagit dun langage de programmation
propritaire utilis par la compagnie allemande SAP pour le dveloppement 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 lutilisation de ce langage de programmation.
Pour les firmes ayant implant R/3 de mme 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 dvelopper des interfaces et des rapports rpondant plus
adquatement aux besoins spcifiques des utilisateurs de R/3.

Ce chapitre vise initier le lecteur la programmation ABAP. Au cours des diffrentes


sections, nous prsentons certains lments de base ncessaires au dveloppement
dinterfaces et de rapports simples en ABAP. Ce chapitre ne remplace pas dautres
documents de rfrence plus complets . ce sujet, nous rfrons le lecteur aux
manuels suivants :

Hoffman Theodore, Writing SAP ABAP/4 Programs, Computi ng McGraw-Hill, 1998,


335 pages;

Keller, H, Krger, S., ABAP Objects, SAP Press,

Addison-Wesley, 2002, 556

pages;

Rdiger Kretschmer et Wolfgang Weiss, Developing SAP's R/3 Applications with


ABAP/4, Sybex, 1996, 657 pages.

Par ailleurs, le prsent chapitre assume que le lecteur possde une connaissance de
base en algorithmique de mme quen matire de bases de donnes. La connaissance
de certains langages de programmation procduraux tels que Visual Basic ainsi que du
langage de requte SQL devrait galement faciliter la lecture de ce chapitre.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

ENVIRONNEMENT DE DVELOPPEMENT
Lenvironnement

de

dveloppement

se

retrouve

principalement

dans

lABAP

Workbench. Ce dernier contient lensemble des outils requis pour dvelopper et


maintenir les applications dveloppes en langage de programmation AB AP. Dans le
cadre de cette section, nous aborderons successivement les outils suivants : lABAP
Editor, lABAP Dictionary et le Dictionary Data Browser.
Il est noter que le chemin daccs lenvironnement de dveloppement de SAP R/3
est le suivant : Tools > ABAP Workbench. La plupart des outils utiliss dans cette
section, portant sur le dveloppement, se retrouvera principalement dans le dossier
Overview et Development .

ABAP Editor
LABAP Editor est le principal outil permettant de crer, modifier et supprimer un
programme ABAP. Il gre la cration et le maintien des programmes ABAP, des
modules de fonctions, de la suite logique des crans et de la logique de la base de
donnes. Cest laide de cet outil quil vous sera possible de programmer en ABAP.
Pour y accder, cliquez sur le module Tools > ABAP Workbench > Development >
ABAP Editor ou saisir le numro de transaction suivant : /nSE38. La prochaine section
est consacr lABAP Editor et explique en dtails la cration et la modification de
programme ABAP.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

ABAP Dictionary
Au mme titre que lABAP Editor, lABAP Dictionary se retrouve aussi sous longlet
Development du ABAP Workbench. LABAP Dictionary permet daccder aux structures
de donnes des diffrentes tables contenues dans SAP R/3. Pour visualiser la structure
dune table, il suffit de se rendre dans lABAP 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 donnes de cette table.
La structure de la table SFLIGHT dvoile plusieurs attributs comme le nom de ses
champs, le type de donnes, leur longueur, leur description, etc. Avec ces attributs, il
est possible deffectuer des requtes permettant, par exemple, de connatre le nombre
doccupants sur un vol donn.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

Prenons un autre exemple : la table SY. Il sagit dune table trs utile dans le cadre du
dveloppement dun programme ABAP. Cette table contient diffrentes informations de
session tels que la date du systme, le nom du lutilisateur, la langue dutilisation, etc.

Le tableau 1 prsente certains des champs de cette table.

Tableau 1 - Le systme
Table-Champs

Description

SY-DATUM

Date du systme

SY-TCODE

Numro de la transaction en cours (ex : SE38)

SY-MANDT

Numro du client utilis (ex : 401)

SY-LANGU

Langage de la session (ex : EN)

SY-UNAME

Nom dusager

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 donnes de
R/3. Pour se rendre au Dictionary Data Browser: Tools > ABAP Workbench > Overview
> Data Browser (/nSE16). Il suffit alors dinscrire le nom de la table dans le champ
appropri. Dans notre cas, inscrire SFLIGHT puis cliquez sur Enter

Lcran qui apparat 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

Pour raffiner une recherche, cliquer dans lun des champs


dexpansion

, puis sur son bouton

. Une nouvelle fentre affichera toutes les valeurs que le champ peut

prendre.

Slectionner la valeur dsire pour dsigner la limite (en linstance de AC BA)


infrieure et suprieure de la recherche puis cliquez sur E xcuter

Seuls les noms des compagnies ariennes, dont lacronyme (CARRID) se situe dans
lintervalle alphabtique saisie par lutilisateur (en linstance de AC BA), seront
affichs lcran. Voici un chantillon des rsultats :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

Pour afficher tous les enregistrements de la table SFLIGHT, ne rien inscrire dans les
champs dintervalles et simplement cliquez sur Excuter

. La rsultante de cette

action permet dafficher tous les enregistrements de la table SFLIGHT.

INTRODUCTION LA PROGRAMMATION EN ABAP


Cette section vise introduire le lecteur la programmation en ABAP. Nous expliquons
dabord comment crer un programme en ABAP dans lABAP Editor. Un programme
ABAP simple est ensuite illustr afin de mettre en vidence les diffrentes parties qui le
composent. Aprs avoir prsent certaines spcificits de la programmation en ABAP
de mme que les fonctions usuelles de lABAP Editor, nous terminons cette section sur
lenregistrement des programmes ABAP de mme que sur leur activation.
Cration dun programme ABAP
La cration dun programme ABAP se fait partir de la transaction ABAP Editor (SE38).
La figure ci-dessous prsente lcran initial de l ABAP Editor.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

Notons avant de poursuivre que, par convention, les programmes ABAP crs dans le
cadre des formations SAP HEC Montral doivent tre nomms sous la forme
suivante : Y?##EX_&&. Le caractre point dinterrogation correspond la session en
cours et sincrmente dune anne scolaire une autre. Votre professeur vous
indiquera la lettre qui est associe votre cours pour votre session. Les caractres
## correspondent aux derniers numros de votre code dus ager et && au
numro de lexercice. Par ailleurs, R/3 requiert que la premire lettre dun programme
dsigne sa provenance ou son utilit. Dans notre cas, le Y signifie un programme
temporaire qui ne fera pas partie du systme de production.

Comme il est souvent plus ais de copier un gabarit de programme ABAP plutt que de
partir dune feuille blanche, les oprations suivantes expliquent comment dupliquer le
gabarit YX00EX_gabarit afin de lutiliser dans un nouveau programme.
Procdure pour copier le gabarit YX00EX_gabarit
a) Une fois lABAP Editor ouvert, saisir le nom du programme recherch dans le champ
Program. Dans notre cas, saisir YX00ex_gabarit.

b) Cliquez sur licne Copy .

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

10

c) Sous Target Program, inscrire le nom de votre programme tout en vous conformant
au format dcrit dans la section prcdente.

y = programme temporaire.
? = lettre indique par le professeur (par exemple a ).
## = les 2 derniers chiffres de votre code usager (par exemple si le code
dusager est zhec3715_25 , le ## serait remplac par 25).
&& = numro de lexercice ou nom de lexercice.
Ainsi, dans cet exemple, le rsultat final serait YA25ex_30.

d) Pour confirmer lopration, cliquez sur le bouton

. Cette fentre apparatra :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

11

e) Sassurer que les deux premires options (source et text elements) soient coches,
puis appuyer sur Copy

f) Dans la fentre suivante, inscrire dans le champ Development class : $TMP

Le champ Person responsible devrait reprsenter votre nom dutilisateur lors de


louverture dune session dans SAP R/3.

g) Enregistrer

les

denregistrement

modifications

apportes

en

cliquant

sur

le

bouton

.Le message suivant devrait apparatre au bas de lcran :

h) Par dfaut, lopt ion code source (Source Code) est slectionne. Cette dernire
permet daccder directement au code du programme.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

12

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

La structure dun programme ABAP


Un programme ABAP est un ensemble dinstructions compos de variables et de
procdures acceptes par R/3. Chaque programme cod en ABAP doit contenir trois
parties; la premire dcrivant le programme en question, la seconde servant dclarer
les variables ainsi que les paramtres et la dernire contenant lcriture de la
procdure. Voici un exemple dun programme ABAP simple illustrant ces trois sections.
REPORT YX00EX_PROGRAMME
NO STANDARD PAGE HEADING.
**************************************************************
* Exercice:
Cours: 3 -715-00
*
* Date rendue:
Trimestre:
*
*
*
* Nom du programme:
Programmeur: A.C.Pellerin
*
*
Matricule:
*
*
*
* Description du programme:
*
*
Faire afficher une phrase l'cran
*
*
*
* Inputs:
Outputs: l'cran
*
*
*
*
*
* Historique des modifications:
*
*
Date:
Programmeur:
Description:
*
*
*
**************************************************************
***** Tables **********

En-tte

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


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

Dclaration
des variables

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


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

Procdures

*Faire afficher l'cran : Programmer en langage ABAP


write:/ 'Programmer en langage ABAP'.

Lorsque le programme ci-haut sera excut, la phrase suivante apparatra lcran :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

13

Spcifications lors de la programmation en ABAP


Lors de la programmation en ABAP, certaines rgles doivent tre suivies afin de
sassurer du bon fonctionnement du programme en question ou de clarifier la structure
de celui-ci :

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

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

14

Tableau 2 - Description des principales fonctions de la barre d'outil de l'ABAP


Editor
Icne

Fonction
Previous
Next

Description
Revenir la page prcdente
Aller la page suivante

Display/Change

Passer du mode Afficher (Display) au mode Modifier


(Change)

Active/Inactive

Le programme est disponible pour lensemble de R/3


lorsquil est actif ou se limite lABAP Workbench
lorsquil est inactif

Other object

Permet deffectuer diffrentes recherches sans sortir


du programme. Par exemple : ouvrir un nouveau
programme, visualiser les champs dune table
spcifique (/nSE11), etc.

Check

Effectue une validation de la syntaxe du programme

Activate

Test

Rend le programme disponible pour lensemble de


R/3
Excute le programme (et le compile si ce nest pas
dj fait)

Where used-list

Permet de faire afficher la liste des programmes,


crans, tables de donnes, vues utilisant ce mme
objet. Pour ce faire, double-cliquez sur lobjet en
question, ou placer le curseur de la souris sur celui-ci,
et slectionner le bouton Where used-list.

Display object list

Affiche la liste des objets utiliss dans le programme

Display navigation window

Affiche la fentre de navigation

Help on

Documentation disponible directement dans SAP R/3


couvrant plusieurs sujets sous le thme de la
programmation en ABAP

Set/delete breakpoint

Installation et suppression de drapeaux. Permet de


signaler au dbogueur de SAP R/3 que le programme
doit sarrter l o lon retrouve cet arrt.

Pretty Printer

Permet de formater le document pour limpression.


Option rarement utilise.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

15

Enregistrer et activer un programme


Aprs toutes modifications au code dun programme ABAP, il importe denregistrer ce
dernier en cliquant sur licne 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 DUN PROGRAMME ABAP


Cette section prsente en dtail la structure dun programme ABAP. Pour faciliter la
comprhens ion du lecteur, nous dbutons par un exemple complet de programme. Cet
exemple vise illustrer la structure typique dun programme ABAP. Le reste de la
section sattarde individuellement sur chacune des diffrentes parties dun programme
ABAP.

Exemple dun programme ABAP


Les diffrentes parties que lon retrouve gnralement dans un programme ABAP sont
les suivantes :
a) la commande Report;
b) len-tte;
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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

16

Voici un exemple de programme ABAP dlimit 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 dun programme abap
*
*
*
* Inputs: ? Parameters
Outputs:
*
* Tables utilises:
*
*
*
* Historique des modifications:
*
*
Date:
Programmeur:
Description:
*
*
*
**************************************************************
***** Tables **********
*utilisation de la table scarr
tables: scarr.
***** Data ************
*dclaration d'une table interne
data: begin of itable occurs 0.
include structure scarr.
data: end of itable.
***** Parameters & Select Options *****
*dclaration d'un paramtre
parameters: air_id like scarr-carrid.
***** Initialization *********
***** Start of Selection *****
*requte
select *
from scarr
into table itable
where carrid = air_id.
*si on trouve des donnes pour la requte ...
if sy-subrc = 0.
*crire comme en-tte
write: /01 'ID'(001),
10 'Nom'(002),
30 'Monnaie'(003).
*boucle affichant les donnes trouves
loop at itable.
write:/ itable-carrid under text-001,
itable-carrname under text-002,
itable-currcode under text-003.
endloop.
else.
write 'Aucune donne trouve'(004).
endif.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

17

Voici lcran de saisie appel dans ce programme. Il sagit de linterface perm ettant
lutilisateur de saisir une valeur qui sera utilise lors de lexcution du programme.

Compte tenu de la valeur saisie dans lcran prcdent, le programme affiche lcran
le rsultat suivant :

Commande REPORT

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

18

Tableau 3 - Options de la commande REPORT


Options
NO STANDARD PAGE HEADING
MESSAGE-ID

LINE-SIZE
LINE -COUNT

Description
Affiche un en-tte par dfaut
Permet laffichage de messages laide dun
numro identifiant ce dernier
Nombre de colonnes contenues dans une
page
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-tte
La premire partie dun programme est gnralement consacre des informations
concernant le ou les programmeurs, le programme de mme que toute autre
information qui pourrait faciliter la comprhension du code un tiers. Dans le cadre des
cours de formations SAP HEC Montral, len-tte utilis est celui du gabarit
YX00ex_gabarit. La figure ci-dessous prsente cet en-tte.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

19

Figure 1 En-tte 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 utiliss pour dlimiter les autres sections dun
programme afin den faciliter la lecture. videmment, puisque ce sont des
commentaires, ils naffectent en rien le droulement du programme.

Figure 2 - Marqueurs de dlimitation 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

20

Section : Tables
Les tables de la base de donnes de SAP R/3

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

21

Tableau 4 - Dclaration dans la


section DATA
Fonctions

Description
Chacune des variables que lon retrouve dans un
programme doit tre dclare dans la section Data. Le
langage ABAP impose que le nom des variables :

NAME

LENGTH

Soit dun maximum 30 caractres

Dbute par une lettre

Nutilise pas le tiret (-) mme sil est permis; cela porte
confusion avec les champs des tables

Nutilise pas de mots rservs (commandes ABAP)

La longueur du champ (length) doit tre spcifie droite


de son nom.
Le type dune nouvelle variable doit tre dclar. Les
diffrents types de donnes, habituellement utiliss dans la
dclaration des variables, sont prsents dans le tableau cidessous :

TYPE

DESCRIPTION

EXEMPLE

Caractre

Bonjour

Date, format YYYYMMDD

19690623

Point flottant

7.5

Nombre entier

789

Texte numrique

10000

Heure, format HHMMSS

123456

Dcimal condens (arrondi)

36.50

VALUE

Ce champ permet de spcifier une valeur par dfaut la


variable.

DECIMALS

Lorsquune variable est de type dcimal (P), on doit spcifie


le nombre de chiffres aprs la virgule.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

22

titre dexemple, le programme suivant cre la variable montant_total. Dune longueur


de 6 caractres, cette variable est de type dcimal arrondi (p) et doit afficher 2 chiffres
aprs la virgule. Cette variable doit donc tre dclare de la faon suivante :

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

Notons quil est souvent plus facile de faire rfrence une variable existante dans R/3
plutt que den dclarer une compltement nouvelle. Pour ce faire, vous devez utiliser
lexpression Like. Dans un tel cas, il nest pas ncessaire de dclarer le type de donne
de la nouvelle variable, puisquelle viendra calquer le type du champ auquel elle fait
rfrence. Il nest pas non plus ncessaire de dclarer les tables de rfrences dans la
section tables.
DATA :

<name>
LIKE table-champs.

Lexemple suivant dclare trois variables calques sur des champs de la table SCARR
de la base de donnes 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

23

titre dinformation, la figure suivante prsente un extrait de la table SCARR avec les
variables de rfrences utilises dans lexemple.

Section : Parameters & Select options


Parameters
La section Parameters permet de dclarer des variables dont la valeur sera saisie
ultrieurement dans un formulaire par lutilisateur du systme. Le nom dun paramtre
ne doit pas dpasser 8 caractres. Par exemple, le programme YX110 cre une
interface permettant de faire certaines oprations arithmtiques de base :

*****Parameters*****
PARAMETERS:

nb_1 TYPE i,

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

lcran, le formulaire de saisie des paramtres saffichera de la manire suivante :

Soulignons que loption Obligatory oblige lutilisateur saisir une valeur dans le champ
de la variable obligatoire spcifie. Si ce champ nest pas complt, le programme ne
pourra pas sexcuter.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

24

Select-Options
Le Select-Options est similaire au Parameters. Il permet lutilisateur de saisir un
intervalle de valeur. Cependant, le Select-options ne peut tre utilis que pour faire des
requtes sur les tables de SAP R/3. Dailleurs, les tables utilises lors de requtes
doivent tre dclares dans la section Tables. Enfin, soulignons que le nom donn un
Select-Options ne doit pas dpasser 8 caractres.
Le Select-Options du programme YX120, permettra de saisir un intervalle de date pour
faire afficher tous les vols effectus durant la priode spcifie. La liste des vols (champ
FLDATE ) est contenue dans la table SFLIGHT :

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


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

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

25

lcran, le formulaire de saisie du programme YX130 saffichera de la manire


suivante :

Le programme en langage ABAP permettant de faire afficher linterface 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
Lvnement dinitialisation est dclench avant laffichage du premier cran. Il est
recommand dutiliser cet vnement pour saisir des valeurs par dfaut complexes.
Dans le cadre des formations SAP HEC Montral, 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
cest dans cette partie que lon retrouve les instructions excuter. Les prochaines
sections de ce chapitre sont consacres lexplication des fonctions de programmation
utilises dans le Start-of-Selection.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

26

COMMANDE WRITE, MISE EN FORME, OPRANDES ET LMENTS DE TEXTE


Cette section est consacre diffrentes fonctions relies la prsentation et la mise
en forme des formulaires. Nous abordons successivement la commande dcriture
(WRITE), les fonctions de mise en forme et la dclaration des lments de texte.
Commande WRITE
La commande Write permet dafficher lcran les rsultats de lexcution dun
programme. Dans sa forme la plus simple, la commande Write se rdige de la manire
suivante :

WRITE : 'Bonjour'.

La commande est suivi du symbole : et le texte afficher doit tre prcd et suivi
du guillemet simple ' . Par ailleurs, pour ne pas entrer en confusion avec la fin relle
de la chane de caractres, il importe de savoir que les chanes de caractres
comportant une apostrophe doivent saisir cette dernire deux fois. Par exemple :

WRITE : 'Bienvenue laroport Pierre-liot-Trudeau'.

Certaines options peuvent tre ajoutes la fonction Write afin didentifier le


positionnement, dans lcran, du texte afficher. Voici comment se rdigent ces options
de positionnement :
WRITE : </> <colonne> <(longueur)>

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

27

Tableau 5- Options de positionnement de


la commande Write
Option
/

Description
Saute la prochaine ligne

Colonne

Identifie lemplacement de laffichage

Longueur Nombre de caractres crire


Les deux programmes suivant prsentent diffrentes utilisations des options de
positionnement de la commande Write. Le premier programme (YX140)

utilise

uniquement loption de saut de ligne et loption demplacement (colonne).

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


*affichage des phrases
WRITE : /10

'SAP',

/15

'ABAP',

/20

'Technologie de l information',

/15

'Aspects technologiques'.

lcran, le programme prcdent saffiche tel quillustr ci-dessous. Il est remarquer


que la fonction saut de ligne permet dafficher ces expressions sur des lignes distinctes
et que loption demplacement correspond au nombre de caractres qui spare
lexpression de la gauche de lcran.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

28

Le second programme (YX141) utilise les trois options daffichage.


***** Start of Selection *****
*affichage des rsultats
WRITE : /5(3) 'SAP',
/5(2) 'ABAP',
/15 'Technologie de l information', 'et', 'Aspects Technologiques'.

Laffichage de ce programme est illustr ci-aprs. Il est important de noter que loption
longueur limite le nombre de caractres affichs. Ainsi, au lieu dcrire ABAP en entier,
le programme affiche, tel que spcifi par le (2), seulement les 2 premiers caractres de
lexpression.

Mise en forme
LABAP Editor comporte diffrentes fonctions permettant une certaine mise

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

29

Le programme suivant (YX150) utilise ces diffrentes fonctions de mise en forme. Nous
avons comment le programme afin dexpliquer leffet de chacune de ces fonctions sur
laffic hage lcran.

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


*trace une ligne horizontale dbutant 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.
*dbute l'criture de la phrase la colonne numro 25
WRITE: /25 'Cette phrase commence la position 25'.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

30

La figure ci-dessous illustre quoi ressemblerait laffichage de ce programme.

Notons enfin que pour raliser laffichage dun tableau, lutilisation dune boucle est
souvent ncessaire afin de rpter le nombre de lignes horizontales (ULINE) et
verticales (SY-VLINE) requis. Cette fonctionnalit est prsente un peu plus tard dans
ce chapitre avec les autres structures de contrle.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

31

Oprandes
Plusieurs programmes ncessitent lutilisation doprandes afin dexcuter des calculs
de diffrentes natures. Voici donc un tableau indiquant les oprateurs arithmtiques les
plus utiliss.

Tableau 7 - Oprateurs arithmtiques les plus utiliss


Nom

Commandes

Addition

Soustraction

Division

Multiplication

Exposant

**

Modulo

MOD

Division entire

DIV

Fonctions arithmtiques
Racine carre

SQRT( )

Logarithme

LOG( )

Il est noter que, lors de lutilisation des fonctions arithmtiques, les valeurs entre

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

32

Le programme suivant (YX171) excute des calculs sur des variables dclares 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 dafficher les rsultats
* lcran et la barre
*oblique produit un saut de ligne.

WRITE : /

R1,

R2,

R3,R4.

Lexcution de ce programme permet dafficher lcran le rsultat suivant :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

33

Chanes de caractres Text-elements


SAP R/3 offre la possibilit de modifier la langue utilise par lapplication (fonctionnalit
multilingue). Pour ce faire, chaque terme (lment de texte) utilis dans SAP doit tre
rpertori et numrot afin dy associer la traduction approprie. La majorit des
interfaces et rapports disponibles dans R/3 ont t pralablement traduits et sont
accessibles dans les principales langues disponibles dans SAP R/3. videmment, R/3
ne traduit pas lui-mme les lments de texte. Chaque traduction doit tre saisie une
une et cest donc pourquoi il peut arriver, loccasion, de tomber dans R/3 sur des
expressions en allemand au sein de certains rapports ou interfaces rarement utilises !

Lors du dveloppement dun rapport ou dune interface en ABAP, il importe de dclarer


toutes les chanes de caractres utilises dans le programme afin de faciliter sa
traduction subsquente. Concrtement, il suffit dinscrire un numro, entre parenthse,
la suite de chaque lment de texte du programme et de suivre la procdure cidessous pour les rpertorier.

Prenons lexemple dune entreprise possdant une filiale francophone et une filiale
anglophone. Lentreprise souhaite dvelopper un rapport de vente journalier
personnalis pouvant safficher dans les deux langues. En anglais, le rapport doit
afficher

les

informations

suivantes :

No_order ,

No_customer,

et

No_salesrep. En franais, ces termes se traduisent de la manire suivante : le No_com,


le No_client, la Valeur_com et le No_vendeur. Le programme YX160 est rdig en
anglais et len-tte du rapport est compos des lments de texte suivants : W

'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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

34

Procdure pour rpertorier les lments de texte


La numrotation de ces lments de texte et le fait de les rpertorier dans un index
permettront de traduire automatiquement len-tte du rapport (en assumant que la
traduction des termes a t saisie pralablement). Les cinq tapes suivantes expliquent
comment rpertorier les lments de texte de lexemple prcdent.

a) Double-cliquez sur le premier lment de texte, soit No_order, ou sur le numro


suivant ce dernier (201). Une fentre comme celle-ci apparatra :

Cliquez sur Yes.


b) Un cran rpertoriant lensemble des lments de texte du programme suivra.

Jusqu maintenant, nous avons rpertori que le premier lment de texte du


programme.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

35

c) Pour activer llment slectionn, cliquez sur le bouton Activate . Slectionner le


nom du programme puis cliquez sur le bouton Continue .

d) Enregistrer les ajouts en cliquant sur licne Save . Au bas de lcran, le message
suivant apparatra :

e) Suivre la mme procdure pour tous les lments de texte.


Finalement, tous les lments de texte se retrouvent rpertoris.

Procdure pour visualiser et modifier les lments de texte


Par ailleurs, la transaction /nSE32 permet de visualiser et de modifier tous les lments
de texte activs et enregistrs pour un programme spcifique sans passer par lABAP
Editor. Il est aussi possible dy accder par le chemin daccs suivant : Tools > ABAP
Workbench > Development > Programming environ > Text elements . Voici la procdure
suivre pour visualiser et modifier un lment de texte :

a) Saisir le nom du programme sous Program.

Copyright 2004, SAP R/3 : ComIrendre, configurer et implanter , Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

36

b) Cliquez sur le bouton Display ou Change dpendamment de laction dsire.

Procdure permettant la traduction dun lment de texte


Il est possible de traduire les lments de texte partir de la transaction /nSE32 ou de
lABAP Editor. Dans les deux cas, la saisie du nom du programme est ncessaire.

/nSE32 :

ABAP Editor :

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

La fentre suivante apparatra :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

37

La langue originale (Original language) est celle de la session de lutilisation. Dans


notre cas, langlais est la langue originale. La langue de traduction, soit Target
language, est la langue dans laquelle les lments de texte seront traduits. Dans la
prsente situation, le franais sera cette langue. Donc remplacer la Target language par
FR, soit le diminutif de franais, puis cliquez sur excuter

Tous les lments de texte du programme en question apparatront dans un nouvel


cran comme ceci :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

38

Pour traduire ces derniers, il suffit dinscrire en-dessous de chacun des lments de
texte leur traduction.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

39

Ne pas oublier de sauvegarder les modifications avec le bouton

. Lcran suivant

apparatra en rcapitulant tous les lments de texte traduits pour le programme


YX160.

STRUCTURES DE CONTRLE
La programmation en ABAP offre diffrentes instructions de contrle semblables au
langage Visual Basic . En effet, il est ainsi possible dutiliser tant des instructions de
conditions que des boucles. Cette section prsente ces deux approches.
Les instructions de conditions
Instructions de conditions IF
Une instruction de condition IF excute une procdure lorsque la condition exprime est
satisfaite. Voici de quelle manire se rdige la condition IF :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

40

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

Par exemple, le programme YX180

permet un agent de voyage dtre inform

lorsquun 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 paramtre du programme prcdent appelle, dans un premier temps,


linterface o lagent de voyage doit indiquer le nombre de personnes. Voici linterface
en question :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

41

Puisque que la valeur cinq est saisie, le programme affiche quaucun prix de groupe
nest disponible.

Instructions de conditions IF et variable SY-SUBRC


Il est galement possible dutiliser linstruction IF en conjonction avec le champ SYSUBRC. Ce champ, contenu dans la table SYSTEM (voir tableau 1), concerne la valeur
du dernier test logique effectu par le systme. Si le rsultat du test est positif, la valeur
de SY-SUBRC est de zro (0). Lorsque la valeur de SY-SUBRC est diffrente de zro
(<> 0), le rsultat du test est ngatif (i.e. chec du test logique).

Lexemple du programme YX181 effectue une requte dans la table SCARR (liste de
compagnies ariennes). Plus part iculirement, la requte vise afficher la compagnie
possdant le numro didentification AD.

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

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

42

La figure suivante illustre en partie la table SCARR pour dmontrer quil ny a aucune
compagnie arienne attitre au sigle AD.

Puisque la valeur de SY-SUBRC nest pas gale zro, le IF et la commande SYSUBRC affichent donc un message dchec.

Oprateurs logiques de linstruction de condition IF


Linstruction de condition IF peut utiliser divers oprateurs logiques afin dexcuter la
routine dsire. Lutilisation du NOT permet dintroduire la ngation dans la condition
tandis que le AND et le OR permettent de grouper ensembles diffrentes instructions de
condition. Le tableau suivant rassemble les principaux oprateurs utiliss en
conjonction avec linstruction IF.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

43

Tableau 8 - Oprateurs en conjonction avec linstruction IF


Signes

Caractres

EQ

gale

<> , ><

NE

Nest pas gale

>

GT

Plus grand que

<

LT

Plus petit que

>=, =>

GE

gale ou plus grand que

<=, =<

LE

gale ou plus petit que

BETWEEN var1
AND var2

Signification

Exclusivement entre 2 valeurs

NOT

Ne pas

AND

ET

OR

OU

Instructions de conditions C ASE


La commande CASE permet de catgoriser un certains nombres de conditions et de les
comparer avec un champ dtermin. Lorsquune condition exprime est satisfaite, la
commande CASE prend fin. Voici de quelle manire se rdige 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

44

Le programme YX190 indique le nom de la couleur correspondant au chiffre saisie dans


linterface.
***** 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 dtermine'(003).
endcase.

Le programme dclenche dabord lcran 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

45

Les boucles
Linstruction Do est une commande permettant dexcuter un certain nombre de fois la
mme procdure. Plus spcifiquement, le programme excute dans un premier temps
la procdure et, dans un deuxime temps, la suite. La boucle sarrte sur demande
(conditions IF avec un EXIT) ou lorsque le nombre de boucle dsire est atteint. Si
aucune de ces deux options de compltion nest effectue, la boucle sera infinie. Voici
le format pour crire une boucle.

CD [ n times].
procdure
ENDDO.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

46

Le programme YX200 permet dafficher un tableau laide dune boucle. Notons que la
variable SY-INDEX

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

47

Lexcution de ce programme mne laffichage du tableau suivant :

TABLES INTERNES
Une table interne constitue un espace temporaire de traitement et de stockage de
donnes. Les tables internes ne font donc pas partie des bases de donnes de SAP
R/3. Elles sont plutt emmagasines dans une zone tampon de la mmoire. Cette
section prsente de quelle manire une table interne doit tre dclare et manipule
dans le cadre dun programme ABAP.
Caractristiques dune table interne
Une table interne se distingue par les caractristiques suivantes :

La table interne possde une dure de vie limite lexcution du programme;

Elle ne possde pas de cl primaire;

Les noms des tables internes doivent commencer par i afin de les diffrencier des
tables des bases de donnes de SAP R/3;

Une table interne possde un enregistrement den-tte (header record) et des


enregistrements individuels numrots 1, 2, 3, ;

On ne peut accder et manipuler quun seul enregistrement la fois, soit celui qui se
trouve dans lenregistrement den-tte;

Quand un enregistrement individuel est appel par le programme, il est copi dans
lenregistrement den-tte.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

48

Structure dune table interne


Tel quillustr ci- dessous, une table interne est constitue de champs (ex : Nom,
Pnom, No_tel) qui forment sa structure. Lors du droulement du programme, la table
interne se remplit de valeurs crant ainsi diffrents enregistrements (lignes). La
structure de chaque table interne possde un index qui numrote chacun de ces
enregistrements. Il est possible dappeler un enregistrement prcis en utilisant lindex
de la table interne. La table interne copie alors lenregistrement demand et laffiche
dans len-tte de la table.

Nom

Prnom

No_tel

Tremblay

Marc

450-555-4567

Chevalier

Mathieu

514-234-5678

Perreault

Julie

514-345-6666

Enregistrements 3

Tremblay

Marc

450-555-4567

Venne

Justine

450-987-6543

En-tte

Dclaration dune table interne


La dclaration dune table interne doit se faire dans la section Data

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

49

Option 1
DATA :

BEGIN OF itable OCCURS n_enregistrement,


Champs 1,
Champs 2,
Champs n,

DATA :

END OF itable.

DATA :

BEGIN OF nom_enregistrement,

Option 2

Champs 1,
Champs 2,
Champs n,
Itable LIKE nom_enregistrement OCCURS O With Header Line.

Tableau 9 - Options dune table interne


Options
Itable

Signification
Reprsente le nom de la Table interne

n_enregistrement

Reprsente le nombre denregistrements qui sera stock


dans la mmoire tampon. partir de la version 4.0, SAP
soccupe automatiquement de la gestion de la mmoire,
alors il nest pas ncessaire de spcifier la grosseur de
la table interne. Donc toujours inscrire 0 comme nombre
denregistrement (0 = infini).

With header line

Insre un enregistrement den-tte afin davoir accs aux


donnes 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

50

Lextrait du programme YX210 prsente la dclaration de la table interne ICIE dont la


structure est copie sur COMPAGNIE.

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


*dclaration de la structure
DATA: BEGIN OF compagnie,
no_cie(3) type n,
nom_cie(20) type c,
END OF compagnie,
*dclaration de la table interne avec une en-tte
icie LIKE compagnie OCCURS 0 with header line.

Ajout denregistrements dans une table interne : Move, Append et Clear


Lajout denregistrements dans une table interne requiert une gymnastique particulire
dans laquelle un nouvel enregistrement doit dabord tre copi dans lentte de la table
interne (commande Move), puis ajouter aux enregistrement de la table interne
(commande Append). Enfin, len-tte de la table interne doit tre efface 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 considrer lordre de celle-ci. Voici de quelle manire cette procdure doit tre
rdige :
Move : valeur to itable-champs.
Append itable.
Clear itable.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

51

Lexemple suivant poursuit lexemple initi prcdemment (YX210) en ajoutant des


enregistrements la table interne ICIE.

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


***** Initialization *********
***** Start of Selection *****
*insertion manuelle de donnes dans la table interne
MOVE: '01' to icie-no_cie,
'Plomberie ABC' to icie-nom_cie.
*enregistrement de la ligne dans l'en-tte de la table
*interne
APPEND icie.
*effacer le contenu de l'en-tte de la table interne
CLEAR icie.
*insertion manuelle de donnes 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

52

Table interne et e xtraction de la base de donnes de SAP R/3


Une table interne peut galement tre dfinie en fonction dune table contenue dans les
bases de donnes de SAP R/3. Il est mme possible dextraire des donnes de cette
mme table afin de peupler une table interne. Notons que nous abordons ici
succinctement le sujet des requtes dans les tables de R/3; nous y reviendrons en
dtails la prochaine section.
Voici de quelle manire la structure dune table existante dans R/3 peut tre utilise
pour dfinir une table interne. La fonction Include structure slectionne la structure
dune table de SAP R/3 et lutilise comme modle pour la nouvelle table interne.

DATA : BEGIN OF itable OCCURS 0.


INCLUDE STRUCTURE table
DATA : END OF itable.

Les rsultats de la requte la base de donnes de R/3 sont ensuite copis dans la
table interne laide de la fonction suivante :

into corresponding fields of table itable.

Notons que la fonction Corresponding field permet de sassurer que la table interne
possde la mme structure, ou des champs correspondants, avec la table do les
valeurs sont extraites.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

53

titre dexemple, prenons un programme (YX240) permettant un employ dune


compagnie arienne de faire afficher le nom du pays, de la ville et de laroport do il y
a des dparts.

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


Tables: spfli.
***** Data ************
*dclaration 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 *****
*requtes sur la table spfli
select COUNTRYFR CITYFROM AIRPFROM
from spfli
*insertion des donnes trouves dans la table interne
into corresponding fields of table itable.

Afficher le contenu dune table interne


Laffichage du contenu dune table interne seffectue laide dune boucle ayant pour
fonction dcrire un aprs lautre les enregistrements de la table. Il est possible de
prciser les champs dont laffichage est souhait. Cette boucle doit tre rdige de la
manire 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

54

Le programme suivant (YX210) poursuit lexemple dbut prcdemment. Dans cet


extrait, nous procdons laffichage 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 donnes contenues dans
*la table interne.
Loop at icie.
write:/ icie-no_cie,
icie-nom_cie.
Endloop.

Lexcution de ce programme mne laffichage de lcran suivant :

Prenons un second exemple. Le programme YX240 termine lexemple initi


prcdemment et affiche la liste des aroports do il y a des dparts.

*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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

55

Voici la liste des aroports avec leur ville et pays respectifs affiche lcran :

Lecture dun enregistrement la fois (Commande Read)


La commande Read permet de chercher un enregistrement particulier dans une table
interne. Pour atteindre un enregistrement (une ligne) spcifique dune table interne
laide de la commande Read, il importe de suivre la procdure suivante :
a) Supprimer lenregistrement qui est prsentement dans len-tte 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 mme manire quil apparat
dans la base de donnes de SAP R/3 (case sensitive). Il est aussi possible dutiliser
le numro de lindex.
La lecture dun enregistrement se rdige donc de la manire suivante. Dabord, la
suppression de lentte seffectue selon lune des deux mthodes suivantes :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

56

Option 1
MOVE SPACE TO itable

Option 2 :
Clear itable.

Ensuite, il existe deux options pour rechercher un enregistrement. La premire option


consiste effectuer la recherche sur la valeur prcise dun champ de la table. Il est
noter que la commande Read arrte sa lecture au premier enregistrement qui
correspond aux spcifications demandes. Lautre option est de rechercher un
enregistrement avec le numro de lindex.
Option 1 :
Itable -champ = valeur_recherche.
READ TABLE itable

Option 2:
READ TABLE itable INDEX i.

Lexemple 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 effectus
lors de cette journe (faire SE16 pour visualiser cette table).
Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

57

Comme la commande Read ne rapporte que le premier enregistrement retrouv, seul le


premier vol (CARRID = AA, CONNID = 0064) est affich :

Modification dune table interne (Commande Modify)


Pour modifier un enregistrement dune table interne, celui-ci doit tre copi dans lentte avant dtre modifi et ensuite mis jour dans la table interne. Comme les
enregistrements dans une table interne ne possdent pas de cl primaire, il existe deux
approches pour raliser cette procdure :
a) En recherchant lenregistrement modifier avec le numro de lindex de la table
interne;
b) En effectuant une boucle pour rechercher un enregistrement en fonction de la valeur
de lun de ses champs.

Option 1 :
Attardons nous dabord la premire option : la modification dune table interne laide
de son index. Cette approche requiert que le programmeur connaisse le numro de
lenregistrement modifier. Par consquent, il importe, avant tout, dafficher la table
interne et de faire apparatre les numros de lindex. Pour ce faire, il suffit dajouter la
variable SY-TABIX dans la boucle qui permet dafficher la table. Le TABIX est un
champ de la table System (SY) contenant les numros denregistrements de lindex.
Lexemple ci-dessous poursuit le programme des sections prcdentes, mais dautres
enregistrements ont t rajouts au programme initial. Le programme YX211 affiche
tous les enregistrements de la table interne de mme que lindex de la table.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

59

*boucle permettant d'afficher les donnes contenues dans la table


*interne.
Loop at icie.
write:/ sy-tabix,
icie-no_cie,
icie-nom_cie.
Endloop

Le rsultat de ce programme saffiche tel quillustr ci- dessous. Lindex apparat la


gauche de la liste.

Il est noter que lorsque lon insre des enregistrements dans une table interne, ceuxci saffichent les uns la suite des autres sans ordre de champ prcis. Cest pourquoi la
compagnie Gazon Plus se retrouve lindex #3, malgr un numro de clients suprieur
Menuiserie Pros.

En utilisant le numro de lindex, il est possible dappeler lenregistrement souhait dans


len-tte, de modifier len-tte et de retourner lenregistrement dans la table interne. Le
programme suivant recherche et lit le 2e enregistrement (Index 2) de la table interne. Sil
le trouve, il modifie le champ nom_cie avant de retourner lenregistrem ent dans la table
interne.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

60

*mise jour du

dun champ X laide de son *numro dindex

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 dutiliser
une boucle. Cette boucle recherche dans la table interne une valeur spcifique dans un
champ donn. Aprs que lenregistrement ait t trouv et amen dans lentte, celui-ci
est modifi et retourn dans la table interne. Voici donc une manire alternative de
rdiger lextrait du programme prsent prcdemment dans loption 1.

*mise jour du

dun champ X laide dune *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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

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 len-tte
de la table. Il suffit de copier lenregistrement effacer dans len-tte et ensuite utiliser
la commande Delete pour le supprimer. Ainsi, contrairement la commande Clear, la
commande Delete efface, en plus de lenregistrement den-tte, lenregistrement
correspondant dans la table interne.

Il existe deux approches pour utiliser la commande Delete :


a) En recherchant lenregistrement supprimer avec le numro de lindex de la table
interne;

b) En effectuant une boucle pour rechercher un enregistrement supprimer en fonction


de la valeur de lun de ses champs.
Option 1 :
La premire option consiste rechercher lenregistrement supprimer laide de son
numro dindex. Un fois trouv, lenregistrement est copi dans len-tte puis supprim.
Lenregistrement est dfinitivement supprim de len-tte et de la table interne
simultanment.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

62

*suppression de l'enregistrement possdant le


*numro de compagnie X, mais le numro dindex
Y *(SY-TABIX)
read table itable index Y.
if sy-subrc = 0.
delete itable index sy-tabix.
endif.

*suppression de l'enregistrement possdant le


*numro de compagnie 004, mais le numro dindex
*3 (SY -TABIX)
read table icie index 3.
if sy-subrc = 0.
delete icie index sy-tabix.
endif.

noter : lors de la suppression complte dun enregistrement avec Delete, lindex (SYTABIX) se modifiera pour tenir compte de cette suppression.

Avant la suppression :

Aprs la suppression :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

63

Option 2 :
Loption 2 consiste rechercher un enregis trement en fonction de la valeur dun champ
de cet enregistrement. Lorsque cet enregistrement est identifi et copi dans len-tte,
la commande Delete permet de la supprimer aux deux endroits.
Lexemple suivant (YX212) identifie et supprime la compagnie possdant le numro de
compagnie 4 soit Gazon Plus.

*suppression de l'enregistrement possdant le numro de *compagnie X


Loop at itable where no_cie = 'X'.
Delete itable index sy-tabix.
Endloop.

*suppression de l'enregistrement possdant le numro de *compagnie 04


Loop at icie where no_cie = '04'.
Delete icie index sy-tabix.
Endloop.

Dnombrement des enregistrements de la table interne (Commande DESCRIBE)


Il est possible de compter le nombre denregistrements dune table interne. Pour se
faire, il faut utiliser la commande Describe. Voici de quelle manire se rdige cette
commande :

DESCRIBE table itable [LINES n] :

Retourne le nombre denregistrements de ITABLE dans la variable n.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

64

REQUTES SUR LA BASE DE DONNES


La section suivante est consacre lutilisation du langage de requte SQL dans le
cadre de programme rdig en ABAP. En effet, ABAP utilise le langage SQL pour
extraire et manipuler des donnes contenus dans la BD de R/3. Bien que les
commandes Update, Insert et Delete puissent tre utilises dans le cadre dun
programme ABAP, cette section sattarde principalement la commande Select.
La commande Select
La commande Select permet deffectuer une requte sur les tables de la base de
donnes de R/3 en spcifiant diffrents critres de slection et de regroupement. La
commande Select se rdige de la manire suivante :

Select [single] [distinct] champs


From table
Where champs [Not] [Like valeur] [In Select - Option]
[between val1 And val2]
Group by

champs

Having

conditions

Order by

champs.

Endselect.

Tableau 10 - Option de la commande SELECT


SINGLE

Lutilisation du Single dans linstruction Select offre la possibilit de choisir


un seul enregistrement.

DISTINCT

Le Distinct supprime le ddoublement denregistrements qui pourraient tre


occasionn par la requte.

WHERE

La commande Where permet de circonsc rire le rsultat de la requte.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

65

Il importe de souligner que le point doit seulement apparatre aprs la dernire


instruction, soit le Where, le Group by , le Having ou le Order by. De surcrot, il est
recommand de conclure la requte par un Endselect (qui lui-mme doit tre suivi dun
point). La combinaison du Select-endSelect cre automatiquement une boucle, facilitant
ainsi laffichage des rsultats pour des programmes courts ou lorsque les donnes ne
sont lues quune seule fois.
En ce qui concerne la commande Where, ABAP reconnat deux frimes. Dune part, le
signe pourcentage (%) permet de remplacer un groupe de caractres au dbut ou la
fin dune valeur : par exemple, tous les noms commenant par b = b%. Dautre part, le
signe de soulignement ( _ ) permet de remplacer une srie de caractres au centre
dune valeur : par exemple, tous les noms ressemblant Amy = A_ y. Dans les deux
cas, il importe dutiliser la commande Like. Par exemple, une requte pour trouver les
compagnies ariennes dont le ID commence par A devrait se rdiger de la manire
suivante :

where carrid like a%.

Par

ailleurs,

il

est

possible

de

faire

afficher

automatiquement

le

nombre

denregistrements contenus dans le rsultat dune requte. Pour se faire, il suffit


dafficher le champ DBCNT de la table System (SY). Voici comment rdiger cette
commande :

write : /enregistrements trouvs :(001), sy-dbcnt.

Illustrons par un exemple la c ommande Select. La requte de cet exemple porte sur la
table SPFLI. La requte slectionne lensemble du contenu (select *) de la table SPLI
(from spfli) et demande dordonnancer le rsultats selon la ville dorigine (order by
Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

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 trouvs
write:/ 'nombre d''enregistrements trouvs:', sy-dbcnt.

Il est galement possible de conserver les rsultats de la requte dans une table
interne. Lexemple suivant (YX224) sauvegarde temporairement les donnes de SPFLI
dans la table interne itable. Laffichage des donnes est effectu laide dune boucle.
Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

67

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


tables: spfli.
***** Data ************
*declaration dune 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 *****
*requte sur la table Spfli
select *
from spfli into table itable
where period = '0'
order by cityfrom.
*affichage des donnes continues dans les champs
spcifis
loop at itable.
write:/ itable-carrid,
itable-countryfr,
itable-cityfrom,
itable-airpfrom,
itable-countryto,
itable-cityto.
endloop.
skip 2.
write:/ 'nombre d'enregistrements trouvs:', sydbcnt.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

68

Lexcution de ce programme mne laffichage de la liste denregistrements cidessous. Notons que le nombre dobservations retournes est affich grce au champ
SY-DBCNT.

Fonctions dagrgation
Les fonctions dagrgation peuvent tre insres dans une requte afin deffectuer
divers calculs sur les champs de la slection. Voici une liste des fonctions dagrgations
les plus frquemment utilises.

Tableau 11 - Liste de fonctions d'agrgation


Commande

Description

AVG

Moyenne

SUM

Somme

MAX

Maximum

MIN

Minimum

COUNT

Frquence

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

69

Concatner une requte


Pour concatner une requte en langage ABAP, il faut imbriquer deux SelectEndSelect. Une telle requte concatne se rdige de la manire 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 concatnation dune requte. Supposons que nous


souhaitons obtenir de linformation sur des connexions de vols. Une partie des
informations dsires 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 numro du transporteur arien). La requte vise isoler
les vols dont le ID de connexion (CONNID) est 17. Voici comment devrait se rdiger
cette requte (YX230):

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

70

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


tables : sflight,
spfli.
***** Data ************
***** Parameters & Select Options *****
***** Initialization *********
***** Start of Selection *****
*en-tte
write:/1 'no_connexion'(001),
15 'Type_avion'(002),
30 'Date_vol'(003).
skip 1.
*requte concatne
select * from sflight.
select * from spfli
where carrid = sflight-carrid
and connid = '17'.
*afficher
write:/1
15
30

les rsultats
spfli-connid,
sflight-planetype,
sflight-fldate.

endselect.
endselect.
skip 3.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

71

lcran, le rsultat saffiche de la manire suivante :

RAPPORTS INTERACTIFS
Cette section prsente les diffrentes fonctions, vnements et commandes pour
programmer des rapports interactifs dans SAP R/3 laide du langage ABAP. Dans le
cadre du cours, les rapports interactifs seront surtout sous forme de listes dtailles.
La commande At-line selection
La commande At-line selection permet lutilisateur de slectionner une ligne, dans un
rapport, afin daccder des informations supplmentaires contenues dans une liste.
Pour excuter la commande, il doit double-cliquez sur la ligne dsire ou slectionner la
ligne en question et presser la touche F2. La commande At-line selection se rdige de
la manire suivante :
at line-selection.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

72

Champs de la table SY
Certains champs, provenant de la table SY, affichent de linformation concernant
lutilisation de rapports interactifs. Le tableau ci- dessous en dcrit un certain nombre.

Tableau 12 Champs de la table SY


SY-LSIND :

Niveau de la liste (liste de base = 0)

SY-CUROW :

Ligne slectionne

SY-CUCOL :

Colonne slectionne

SY-LISEL :

Contenu de la ligne slectionne

Le programme YX270 est un exemple dutilisation des notions mentionnes ci-haut.


do 30 times.
write: /'line', sy-index.
write /.
enddo.
at line-selection.
if sy-lsind < 2.
write: / 'Niveau de la liste
write: / 'Ligne
write: / 'Contenu de la ligne
endif.

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

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

73

Lors de lexcution du programme, le mot line et le nombre de fois que la boucle a t


excute (grce SY-INDEX) saffiche lcran.

Lutilisateur slectionne une ligne en double-cliquant sur cette dernire (At-line


selection). Le programme affic he le niveau de la liste (sy-lsind), le numro de la ligne
(sy-curow) et le contenu de la ligne (sy-lisel). Dans lexemple suivant, lutilisateur a
double-cliqu sur line 5.

noter : le champ SY-LSIND utilis conjointement avec la commande At line-selection


et la condition de contrle If, contrle le nombre de niveaux de la liste.
La commande Hide
La commande Hide permet dentreposer temporairement en mmoire de linformation
spcifique chacune des lignes de la liste. Lors de lexcution de la commande At lineselection, le contenu est restaur. Lun des objectifs de la commande Hide est de
rfrencier le contenu de chacune des lignes dune liste entre le niveau de base (SYLSIND = 0) et un niveau suprieur .

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

74

Le programme YX271 est un exemple dutilisation de la commande Hide. Il entrepose


en mmoire le numro identif iant chacune des compagnies daviation (carrid) laide de
la commande Hide. Lorsque lutilisateur slectionne le nom de lune des compagnies,
les numros identifiant chacune des compagnies daviation (carrid) est restaur et
permet ainsi dapparier chacune des compagnies daviation avec leur adresse URL
respective.
La programmation dun tel programme ressemble ceci :
***** Tables **********
*tables utilises
tables: scarr,
scarplan.
***** Data ************
*dclaration 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 mmoire les numros 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

75

lcran, le contenu du niveau de base (niveau = 0) saffiche de la manire suivante :

Aprs avoir double-cliqu sur lune des compagnies daviation, dans ce cas Qantas
Airways, linformation du niveau 1 saffiche son tour dans une nouvelle page.

Le forage sur plusieurs niveaux


Le forage sur plusieurs niveaux se fait laide de la commande SY-LSIND de la table
SY conjointement avec linstruction de conditions CASE. La commande SY-LSIND gre
les diffrents niveaux. Il est possible de lui assigner une valeur. Utilis seule, elle affiche
le niveau de forage o lutilisateur se trouve.

Le programme YX272 est un programme prsentant les informations de la table clients


sur diffrents niveaux. Le niveau de base affiche le nom du client, le premier niveau le
nom et le numro du client, le deuxime niveau la ville et le pays du client et le
troisime niveau son adresse complte.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

76

lcran, le niveau de base saffiche ainsi :

En double-cliquant sur lune des lignes de la liste, le premier niveau apparat :

Il en est de mme pour le deuxime et le troisime niveau qui ressemblent


respectivement ceci :
Niveau 2 :

Niveau 3 :

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

77

La programmation ABAP du programme YX272 est la suivante :


***** Tables **********
*table utilise
TABLES: kna1.
***** Data ************
*dclaration 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 mmoire les numros identifiant chacun des clients
hide iclient-kunnr.
endloop.
****** Event Processing *************
AT LINE-SELECTION.
case sy-lsind.
read table iclient with key kunnr = iclient-kunnr.
when 1.
write: /5 'Nom du client:
/5 'Numro du client :

', iclient-NAME1,
', iclient-KUNNR.

when 2.
write: /5 'Ville :
/5 'Pays :

', iclient -ORT01,


', iclient -LAND1.

when 3.
write: /5 'Adresse :

', iclient -stras.

endcase.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

78

La commande Window starting at [] ending at []


La commande Window starting at [] ending at [] offre la possibilit au dveloppeur
dafficher du texte ou le rsultat dune opration, par exemple, dans une nouvelle
fentre tout en ayant le contrle sur les dimensions de celle-ci. Cette commande se
rdige comme ceci :

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

Lattribution dune valeur aux lettres v et w permet de contrler le lieu daffichage de la


nouvelle fentre lcran. Le v reprsente la distance partir de lextrmit gauche de
lcran et le w la hauteur en fonction du haut de lcran. Le x et le y reprsente
respectivement la largeur et la longueur de la nouvelle fentre.
Le programme YX273 est un exemple dutilisation de cette commande.

write: / 'Cliquez sur cette phrase'.


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

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

79

Aprs avoir double-cliqu sur Cliquez sur cette phrase , la fentre suivante apparat :

CRATION DE GRAPHIQUES
Cette section prsente brivement les techniques de cration de graphiques dans SAP
R/3.

Diffrentes

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 cration de graphiques
Dans SAP R/3, lappel dune fonction se fait de la manire suivant e :

CALL FUNCTION nom de la fonction


EXPORTING
TITL

titre du graphique

VALT

Nom de laxe des Y

italbe.

TABLES
DATA

La commande CALL FUNCTION appelle la fonction graphique dsire. La commande


TITL permet de saisir le titre du graphique et la commande VALT le nom de laxe des Y.
La commande EXPORTING quant elle, fait apparatre 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

80

Graphique deux dimensions


Pour crer un graphique en deux dimensions, il faut en premier lieu dclarer une table
interne et saisir les valeurs, manuellement ou laide dune requte, 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 fentre du graphique ferme, le programme YX280 affiche un tableau


rsumant les valeurs contenues dans le graphique deux dimensions.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

81

La programmation en ABAP du programme YX280 est la suivante :


***** Tables **********
***** Data ************
*dclaration d'une table interne
DATA: BEGIN OF itable OCCURS 0,
TEXT(25),
VALUE TYPE P,
END OF itable.
*dclaration d'une variable : titre du graphique
data: TITLE(25) VALUE 'Sales'.
*dclaration 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 donnes dans la table interne
*donnes de la premire colonne
move: 'Product_1' to itable-text,
'153470' to itable-VALUE.
APPEND itable.
*donnes de la deuxime colonne
itable-TEXT = 'Product_2'.
itable-VALUE = 253150.
APPEND itable.
*donnes de la troisime colonne
itable-TEXT = 'Product_3'.
itable-VALUE = 53470.
APPEND itable.
*donnes de la quatrime colonne
itable-TEXT = 'Product_4'.
itable-VALUE = 182000.
APPEND itable.
*donnes de la cinquime colonne
itable-TEXT = 'Product_5'.
itable-VALUE = 92410.
APPEND itable.
***affichage des donnes 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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

82

VALT
TABLES
DATA

= TCOL1
= itable.

Copyright 2004, SAP R/3 : Comprendre, configurer et implanter, Benoit A. AUBERT, Pierre-Majorique LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

83

Annexe 1
Liste des programmes utiliss

Nom du
programme dans
ABAP Editor

Description

YX00ex_gabarit

Gabarit de la structure d'un programme

YX00ex_programme

Exemple dun programme

YX101

Exemple dun programme complet en ABAP (structure)

YX102

Exemple de la commande Report

YX00ex_gabarit

Dmo en-tte

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 oprandes

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 dclaration table interne

YX210

Exemple commandes Move, Append et Clear

YX240

Exemple dclaration table interne (tables disponibles dans SAP)

YX210 et YX240

Exemple afficher le contenu dune 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 requte concatne

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 LGER et Suzanne RIVARD,
HEC Montral, Tous droits rservs pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite.
VERSION PRLIMINAIRE.

84

Vous aimerez peut-être aussi