84
Copyright © 2004, SAP R/3 : Comprendre, configurer et implanter , Benoit A. AUBERT, Pierre-Majorique LÉGER et Suzanne RIVARD, HEC Montréal, Tous droits réservés pour tous pays. Toute traduction ou toute modification sous quelque forme que ce soit est interdite. VERSION PRÉLIMINAIRE Chapitre 7 Éléments de programmation ABAP Les auteurs remercient Annie-Claude Pellerin pour sa contribution à ce chapitre.

Chap7 Elements Program Mat Ion

Embed Size (px)

Citation preview

Page 1: Chap7 Elements Program Mat Ion

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

Chapitre 7

Éléments de programmation ABAP

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

Page 2: Chap7 Elements Program Mat Ion

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

2

INTRODUCTION 4 ENVIRONNEMENT DE DÉVELOPPEMENT 5 ABAP Editor 5 ABAP Dictionary 6 Dictionary Data Browser 7 INTRODUCTION À LA PROGRAMMATION EN ABAP 9 Création d’un programme ABAP 9 La structure d’un programme ABAP 13 Fonctions usuelles de ABAP Editor 14 Enregistrer et activer un programme 16 STRUCTURE D’UN PROGRAMME ABAP 16 Exemple d’un programme ABAP 16 Commande REPORT 18 En-tête 19 Section : Tables 21 Section : Data 21 Section : Parameters & Select options 24 Section : Initialization 26 Section : Start-of-Selection 26 COMMANDE WRITE, MISE EN FORME, OPÉRANDES ET ÉLÉMENTS DE TEXTE 27 Commande WRITE 27 Mise en forme 29 Opérandes 32 Chaînes de caractères – Text-elements 34 STRUCTURES DE CONTRÔLE 40 Les instructions de conditions 40 Les boucles 46 TABLES INTERNES 48 Caractéristiques d’une table interne 48 Structure d’une table interne 49 Déclaration d’une table interne 49 Ajout d’enregistrements dans une table interne : Move, Append et Clear 51 Table interne et extraction de la base de données de SAP R/3 53 Afficher le contenu d’une table interne 54 Lecture d’un enregistrement à la fois (Commande Read) 56 Modification d’une table interne (Commande Modify) 59 Effacer un enregistrement (Commande DELETE) 62 Dénombrement des enregistrements de la table interne (Commande DESCRIBE) 64

Page 3: Chap7 Elements Program Mat Ion

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

3

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

Page 4: Chap7 Elements Program Mat Ion

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

4

INTRODUCTION

Ce chapitre constitue une introduction au langage de programmation Advanced

Business Application Program (ABAP). Il s’agit d’un langage de programmation

propriétaire utilisé par la compagnie allemande SAP pour le développement de son

progiciel R/3. Plus de 99 % du code de R/3 est programmé en ABAP et toute

modification ou ajout dans R/3 implique l’utilisation de ce langage de programmation.

Pour les firmes ayant implanté R/3 de même que pour les consultants SAP, le langage

de programmation ABAP offre la possibilité de modifier certains aspects du progiciel

R/3. Entre autres, il permet de développer des interfaces et des rapports répondant plus

adéquatement aux besoins spécifiques des utilisateurs de R/3.

Ce chapitre vise à initier le lecteur à la programmation ABAP. Au cours des différentes

sections, nous présentons certains éléments de base nécessaires au développement

d’interfaces et de rapports simples en ABAP. Ce chapitre ne remplace pas d’autres

documents de référence plus complets . À ce sujet, nous référons le lecteur aux

manuels suivants :

• Hoffman Theodore, Writing SAP ABAP/4 Programs, Computing McGraw-Hill, 1998,

335 pages;

• Keller, H, Krüger, S., ABAP Objects, SAP Press, Addison-Wesley, 2002, 556

pages;

• Rüdiger Kretschmer et Wolfgang Weiss, Developing SAP's R/3 Applications with

ABAP/4, Sybex, 1996, 657 pages.

Par ailleurs, le présent chapitre assume que le lecteur possède une connaissance de

base en algorithmique de même qu’en matière de bases de données. La connaissance

de certains langages de programmation procéduraux tels que Visual Basic ainsi que du

langage de requête SQL devrait également faciliter la lecture de ce chapitre.

Page 5: Chap7 Elements Program Mat Ion

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

5

ENVIRONNEMENT DE DÉVELOPPEMENT

L’environnement de développement se retrouve principalement dans l’ABAP

Workbench. Ce dernier contient l’ensemble des outils requis pour développer et

maintenir les applications développées en langage de programmation ABAP. Dans le

cadre de cette section, nous aborderons successivement les outils suivants : l’ABAP

Editor, l’ABAP Dictionary et le Dictionary Data Browser.

Il est à noter que le chemin d’accès à l’environnement de développement de SAP R/3

est le suivant : Tools > ABAP Workbench. La plupart des outils utilisés dans cette

section, portant sur le développement, se retrouvera principalement dans le dossier

Overview et Development .

ABAP Editor

L’ABAP Editor est le principal outil permettant de créer, modifier et supprimer un

programme ABAP. Il gère la création et le maintien des programmes ABAP, des

modules de fonctions, de la suite logique des écrans et de la logique de la base de

données. C’est à l’aide de cet outil qu’il vous sera possible de programmer en ABAP.

Pour y accéder, cliquez sur le module Tools > ABAP Workbench > Development >

ABAP Editor ou saisir le numéro de transaction suivant : /nSE38. La prochaine section

est consacré à l’ABAP Editor et explique en détails la création et la modification de

programme ABAP.

Page 6: Chap7 Elements Program Mat Ion

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

6

ABAP Dictionary

Au même titre que l’ABAP Editor, l’ABAP Dictionary se retrouve aussi sous l’onglet

Development du ABAP Workbench. L’ABAP Dictionary permet d’accéder aux structures

de données des différentes tables contenues dans SAP R/3. Pour visualiser la structure

d’une table, il suffit de se rendre dans l’ABAP Dictionary (SE11) et saisir le nom de cette

table sous le champ Database Table. Prenons exemple sur la table SFLIGHT.

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

La structure de la table SFLIGHT dévoile plusieurs attributs comme le nom de ses

champs, le type de données, leur longueur, leur description, etc. Avec ces attributs, il

est possible d’effectuer des requêtes permettant, par exemple, de connaître le nombre

d’occupants sur un vol donné.

Page 7: Chap7 Elements Program Mat Ion

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

7

Prenons un autre exemple : la table SY. Il s’agit d’une table très utile dans le cadre du

développement d’un programme ABAP. Cette table contient différentes informations de

session tels que la date du système, le nom du l’utilisateur, la langue d’utilisation, etc.

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

Tableau 1 - Le système

Table-Champs Description

SY-DATUM Date du système

SY-TCODE Numéro de la transaction en cours (ex : SE38)

SY-MANDT Numéro du client utilisé (ex : 401)

SY-LANGU Langage de la session (ex : EN)

SY-UNAME Nom d’usager

SY-UZEIT Heure du serveur

SY-REPID Nom du programme en cours

SY-SUBRC Valeur du test logique

Dictionary Data Browser

Le Data Browser permet de visualiser les enregistrements des tables de données de

R/3. Pour se rendre au Dictionary Data Browser: Tools > ABAP Workbench > Overview

> Data Browser (/nSE16). Il suffit alors d’inscrire le nom de la table dans le champ

approprié. Dans notre cas, inscrire SFLIGHT puis cliquez sur Enter .

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

les champs de la table SFLIGHT.

Page 8: Chap7 Elements Program Mat Ion

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

8

Pour raffiner une recherche, cliquer dans l’un des champs , puis sur son bouton

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

prendre.

Sélectionner la valeur désirée pour désigner la limite (en l’instance de AC à BA)

inférieure et supérieure de la recherche puis cliquez sur Exécuter .

Seuls les noms des compagnies aériennes, dont l’acronyme (CARRID) se situe dans

l’intervalle alphabétique saisie par l’utilisateur (en l’instance de AC à BA), seront

affichés à l’écran. Voici un échantillon des résultats :

Page 9: Chap7 Elements Program Mat Ion

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

9

Pour afficher tous les enregistrements de la table SFLIGHT, ne rien inscrire dans les

champs d’intervalles et simplement cliquez sur Exécuter . La résultante de cette

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

INTRODUCTION À LA PROGRAMMATION EN ABAP

Cette section vise à introduire le lecteur à la programmation en ABAP. Nous expliquons

d’abord comment créer un programme en ABAP dans l’ABAP Editor. Un programme

ABAP simple est ensuite illustré afin de mettre en évidence les différentes parties qui le

composent. Après avoir présenté certaines spécificités de la programmation en ABAP

de même que les fonctions usuelles de l’ABAP Editor, nous terminons cette section sur

l’enregistrement des programmes ABAP de même que sur leur activation.

Création d’un programme ABAP

La création d’un programme ABAP se fait à partir de la transaction ABAP Editor (SE38).

La figure ci-dessous présente l’écran initial de l’ABAP Editor.

Page 10: Chap7 Elements Program Mat Ion

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

10

Notons avant de poursuivre que, par convention, les programmes ABAP créés dans le

cadre des formations SAP à HEC Montréal doivent être nommés sous la forme

suivante : Y?##EX_&&. Le caractère point d’interrogation correspond à la session en

cours et s’incrémente d’une année scolaire à une autre. Votre professeur vous

indiquera la lettre qui est associée à votre cours pour votre session. Les caractères

« ## » correspondent aux derniers numéros de votre code d’usager et « && » au

numéro de l’exercice. Par ailleurs, R/3 requiert que la première lettre d’un programme

désigne sa provenance ou son utilité. Dans notre cas, le Y signifie un programme

temporaire qui ne fera pas partie du système de production.

Comme il est souvent plus aisé de copier un gabarit de programme ABAP plutôt que de

partir d’une feuille blanche, les opérations suivantes expliquent comment dupliquer le

gabarit YX00EX_gabarit afin de l’utiliser dans un nouveau programme.

Procédure pour copier le gabarit YX00EX_gabarit

a) Une fois l’ABAP Editor ouvert, saisir le nom du programme recherché dans le champ

Program. Dans notre cas, saisir YX00ex_gabarit.

b) Cliquez sur l’icône Copy .

Page 11: Chap7 Elements Program Mat Ion

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

11

c) Sous Target Program, inscrire le nom de votre programme tout en vous conformant

au format décrit dans la section précédente.

« y » = programme temporaire.

« ? » = lettre indiquée par le professeur (par exemple « a »).

« ## » = les 2 derniers chiffres de votre code usager (par exemple si le code

d’usager est zhec3715_25 , le « ## » serait remplacé par 25).

« && » = numéro de l’exercice ou nom de l’exercice.

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

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

Page 12: Chap7 Elements Program Mat Ion

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

12

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

puis appuyer sur Copy .

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

Le champ Person responsible devrait représenter votre nom d’utilisateur lors de

l’ouverture d’une session dans SAP R/3.

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

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

h) Par défaut, l’opt ion code source (Source Code) est sélectionnée. Cette dernière

permet d’accéder directement au code du programme.

Page 13: Chap7 Elements Program Mat Ion

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

13

i) Pour faire afficher le programme nouvellement copié, cliquez sur le bouton Display

et pour le modifier, utiliser le bouton « Change ».

La structure d’un programme ABAP

Un programme ABAP est un ensemble d’instructions composé de variables et de

procédures acceptées par R/3. Chaque programme codé en ABAP doit contenir trois

parties; la première décrivant le programme en question, la seconde servant à déclarer

les variables ainsi que les paramètres et la dernière contenant l’écriture de la

procédure. Voici un exemple d’un programme ABAP simple illustrant ces trois sections.

REPORT YX00EX_PROGRAMME NO STANDARD PAGE HEADING. ************************************************************** * Exercice: Cours: 3-715-00 * * Date rendue: Trimestre: * * * * Nom du programme: Programmeur: A.C.Pellerin * * Matricule: * * * * Description du programme: * * Faire afficher une phrase à l'écran * * * * Inputs: Outputs: À l'écran * * * * * * Historique des modifications: * * Date: Programmeur: Description: * * * ************************************************************** ***** Tables ********** ***** Data ************ ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** *Faire afficher à l'écran : Programmer en langage ABAP write:/ 'Programmer en langage ABAP'.

En-tête

Procédures

Déclaration des variables

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

Page 14: Chap7 Elements Program Mat Ion

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

14

Spécifications lors de la programmation en ABAP

Lors de la programmation en ABAP, certaines règles doivent être suivies afin de

s’assurer du bon fonctionnement du programme en question ou de clarifier la structure

de celui-ci :

• Chaque instruction se termine par un point. L’omission du point provoque l’échec de

l’exécution du programme;

• Afin de faciliter la lecture des programmes, une instruction peut être divisée sur plus

d’une ligne;

• Il est possible, mais non recommandable, d’inscrire plus d’une instruction par ligne;

• Les chaînes de caractères doivent se retrouver entre des guillemets simples comme

ceci : ‘Bonjour’. ;

• L’ABAP Editor ne tient pas compte de la différence entre les minuscules et les

majuscules (« case insensitive») sauf en ce qui concerne les chaînes de caractères;

• Pour faire des commentaires utiliser l’étoile (*); le texte apparaîtra alors en bleu.

Fonctions usuelles de ABAP Editor

La figure ci-dessous présente la barre d’outil de l’ABAP Editor. La fonction de chacun

des icônes est expliquée dans le tableau 2.

Page 15: Chap7 Elements Program Mat Ion

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

15

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

Icône Fonction Description

Previous Revenir à la page précédente

Next Aller à la page suivante

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

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

Other object

Permet d’effectuer différentes recherches sans sortir du programme. Par exemple : ouvrir un nouveau programme, visualiser les champs d’une table spécifique (/nSE11), etc.

Check Effectue une validation de la syntaxe du programme

Activate Rend le programme disponible pour l’ensemble de

R/3

Test Exécute le programme (et le compile si ce n’est pas

déjà fait)

Where used-list

Permet de faire afficher la liste des programmes, écrans, tables de données, vues utilisant ce même objet. Pour ce faire, double-cliquez sur l’objet en question, ou placer le curseur de la souris sur celui-ci, et sélectionner le bouton Where used-list.

Display object list Affiche la liste des objets utilisés dans le programme

Display navigation window Affiche la fenêtre de navigation

Help on

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

Set/delete breakpoint

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

Pretty Printer Permet de formater le document pour l’impression. Option rarement utilisée.

Page 16: Chap7 Elements Program Mat Ion

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

16

Enregistrer et activer un programme

Après toutes modifications au code d’un programme ABAP, il importe d’enregistrer ce

dernier en cliquant sur l’icône de sauvegarde . Par ailleurs, il faut activer le

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

activer .

STRUCTURE D’UN PROGRAMME ABAP

Cette section présente en détail la structure d’un programme ABAP. Pour faciliter la

compréhens ion du lecteur, nous débutons par un exemple complet de programme. Cet

exemple vise à illustrer la structure typique d’un programme ABAP. Le reste de la

section s’attarde individuellement sur chacune des différentes parties d’un programme

ABAP.

Exemple d’un programme ABAP

Les différentes parties que l’on retrouve généralement dans un programme ABAP sont

les suivantes :

a) la commande Report;

b) l’en-tête;

c) la section Tables;

d) la section Data;

e) la section Parameters & Select Options;

f) la section Initialization;

g) et finalement la section Start of Selection.

Page 17: Chap7 Elements Program Mat Ion

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

17

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

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

Page 18: Chap7 Elements Program Mat Ion

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

18

Voici l’écran de saisie appelé dans ce programme. Il s’agit de l’interface permettant à

l’utilisateur de saisir une valeur qui sera utilisée lors de l’exécution du programme.

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

le résultat suivant :

Commande REPORT

La première ligne d’un programme ABAP se nomme la commande REPORT. Lors de la

création d’un nouveau programme, elle s’ajoute automatiquement afin de l’identifier.

Il est à noter que lorsque l’on copie un programme existant, le nouveau programme

affiche la commande REPORT du programme original. Le programmeur doit donc

changer le nom affiché, dans la commande REPORT, en fonction du nom du nouveau

programme.

La commande REPORT offre différentes options permettant de spécifier certaines

fonctions et limites du programme. Par exemple, il est possible de limiter le nombre de

lignes et de colonnes par page qu’affichera le programme. La commande REPORT se

rédige de la manière suivante :

REPORT nom_programme [NO STANDARD PAGE HEADING] [MESSAGE-ID] [LINE-SIZE] [LINE-COUNT]

Page 19: Chap7 Elements Program Mat Ion

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

19

Tableau 3 - Options de la commande REPORT

Options Description

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

MESSAGE-ID Permet l’affichage de messages à l’aide d’un numéro identifiant ce dernier

LINE-SIZE Nombre de colonnes contenues dans une page

LINE-COUNT Nombre de lignes par page

Voici la commande REPORT apparaissant au haut du programme YX102 :

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

En-tête

La première partie d’un programme est généralement consacrée à des informations

concernant le ou les programmeurs, le programme de même que toute autre

information qui pourrait faciliter la compréhension du code à un tiers. Dans le cadre des

cours de formations SAP à HEC Montréal, l’en-tête utilisé est celui du gabarit

YX00ex_gabarit. La figure ci-dessous présente cet en-tête.

Page 20: Chap7 Elements Program Mat Ion

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

20

Figure 1 – En-tête du gabarit YX00EX_GABARIT

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

**************************************************************

On retrouve également dans ce gabarit un second bloc de commentaires (voir figure

suivante). Ces 5 marqueurs sont utilisés pour délimiter les autres sections d’un

programme afin d’en faciliter la lecture. Évidemment, puisque ce sont des

commentaires, ils n’affectent en rien le déroulement du programme.

Figure 2 - Marqueurs de délimitation du programme YX00EX_GABARIT

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

Page 21: Chap7 Elements Program Mat Ion

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

21

Section : Tables

Les tables de la base de données de SAP R/3 qui sont utilisées dans un programme

doivent être identifiées dans la section Tables . Ainsi, un programme qui utilise le champ

PLANETYPE de la table SFLIGHT, doit contenir la déclaration suivante :

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

Si le programme utilise plusieurs tables, il suffit d’ajouter le nom des tables en question,

les uns à la suite des autres, en les séparant par une virgule.

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

Section : Data

Toutes les nouvelles variables utilisées dans un programme ABAP doivent être

déclarées dans la section Data. Voici le format utilisé pour déclarer une nouvelle

variable en ABAP :

DATA : <name> LENGTH TYPE VALUE DECIMALS.

Page 22: Chap7 Elements Program Mat Ion

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

22

Tableau 4 - Déclaration dans la section DATA

Fonctions Description

NAME

Chacune des variables que l’on retrouve dans un programme doit être déclarée dans la section Data. Le langage ABAP impose que le nom des variables :

§ Soit d’un maximum 30 caractères

§ Débute par une lettre

§ N’utilise pas le tiret (-) même s’il est permis; cela porte à confusion avec les champs des tables

§ N’utilise pas de mots réservés (commandes ABAP)

LENGTH La longueur du champ (length) doit être spécifiée à droite de son nom.

Le type d’une nouvelle variable doit être déclaré. Les différents types de données, habituellement utilisés dans la déclaration des variables, sont présentés dans le tableau ci-dessous :

DESCRIPTION EXEMPLE

C Caractère ‘Bonjour’

D Date, format YYYYMMDD 19690623

F Point flottant 7.5

I Nombre entier 789

N Texte numérique 10000

T Heure, format HHMMSS 123456

TYPE

P Décimal condensé (arrondi) 36.50

VALUE Ce champ permet de spécifier une valeur par défaut à la variable.

DECIMALS Lorsqu’une variable est de type décimal (P), on doit spécifie le nombre de chiffres après la virgule.

Page 23: Chap7 Elements Program Mat Ion

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

23

À titre d’exemple, le programme suivant crée la variable montant_total. D’une longueur

de 6 caractères, cette variable est de type décimal arrondi (p) et doit afficher 2 chiffres

après la virgule. Cette variable doit donc être déclarée de la façon suivante :

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

Notons qu’il est souvent plus facile de faire référence à une variable existante dans R/3

plutôt que d’en déclarer une complètement nouvelle. Pour ce faire, vous devez utiliser

l’expression Like. Dans un tel cas, il n’est pas nécessaire de déclarer le type de donnée

de la nouvelle variable, puisqu’elle viendra calquer le type du champ auquel elle fait

référence. Il n’est pas non plus nécessaire de déclarer les tables de références dans la

section tables.

DATA : <name> LIKE table-champs.

L’exemple suivant déclare trois variables calquées sur des champs de la table SCARR

de la base de données IDES de SAP R/3.

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

Page 24: Chap7 Elements Program Mat Ion

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

24

À titre d’information, la figure suivante présente un extrait de la table SCARR avec les

variables de références utilisées dans l’exemple.

Section : Parameters & Select options

Parameters

La section Parameters permet de déclarer des variables dont la valeur sera saisie

ultérieurement dans un formulaire par l’utilisateur du système. Le nom d’un paramètre

ne doit pas dépasser 8 caractères. Par exemple, le programme YX110 crée une

interface permettant de faire certaines opérations arithmétiques de base :

*****Parameters***** PARAMETERS: nb_1 TYPE i, nb_2 TYPE i, operande(1) TYPE C OBLIGATORY.

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

Soulignons que l’option Obligatory oblige l’utilisateur à saisir une valeur dans le champ

de la variable obligatoire spécifiée. Si ce champ n’est pas complété, le programme ne

pourra pas s’exécuter.

Page 25: Chap7 Elements Program Mat Ion

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

25

Select-Options

Le Select-Options est similaire au Parameters. Il permet à l’utilisateur de saisir un

intervalle de valeur. Cependant, le Select-options ne peut être utilisé que pour faire des

requêtes sur les tables de SAP R/3. D’ailleurs, les tables utilisées lors de requêtes

doivent être déclarées dans la section Tables. Enfin, soulignons que le nom donné à un

Select-Options ne doit pas dépasser 8 caractères.

Le Select-Options du programme YX120, permettra de saisir un intervalle de date pour

faire afficher tous les vols effectués durant la période spécifiée. La liste des vols (champ

FLDATE ) est contenue dans la table SFLIGHT :

***** Tables ********** TABLES: sflight. ***** Data ************ ***** Parameters & Select Options ***** *interface de sélection des dates SELECT-OPTIONS: Date_vol FOR SFLIGHT-FLDATE.

À l’écran, le formulaire de saisie des dates de vols qui ont été effectués durant un

intervalle donné s’affichera de la manière suivante :

Parameters & Select-Options

Il est possible de jumeler la déclaration du Select-Options avec celle du Parameters. Un

formulaire de requête ainsi créé permet de chercher sur plusieurs champs, avec d’une

part des critères et d’autre part des intervalles. Voici un exemple de programmation

d’un formulaire permettant de rechercher l’ensemble des vols d’une compagnie (Cie)

durant une certaine période de temps (durée).

Page 26: Chap7 Elements Program Mat Ion

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

26

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

suivante :

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

suivant :

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

Section : Initialization

L’événement d’initialisation est déclenché avant l’affichage du premier écran. Il est

recommandé d’utiliser cet événement pour saisir des valeurs par défaut complexes.

Dans le cadre des formations SAP à HEC Montréal, ce type de fonction ne sera pas

utilisé.

Section : Start-of-Selection

Habituellement, la majeure partie du code se situe dans le Start-of-Selection puisque

c’est dans cette partie que l’on retrouve les instructions à exécuter. Les prochaines

sections de ce chapitre sont consacrées à l’explication des fonctions de programmation

utilisées dans le Start-of-Selection.

Page 27: Chap7 Elements Program Mat Ion

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

27

COMMANDE WRITE, MISE EN FORME, OPÉRANDES ET ÉLÉMENTS DE TEXTE

Cette section est consacrée à différentes fonctions reliées à la présentation et à la mise

en forme des formulaires. Nous abordons successivement la commande d’écriture

(WRITE), les fonctions de mise en forme et la déclaration des éléments de texte.

Commande WRITE

La commande Write permet d’afficher à l’écran les résultats de l’exécution d’un

programme. Dans sa forme la plus simple, la commande Write se rédige de la manière

suivante :

WRITE : 'Bonjour'.

La commande est suivi du symbole « : » et le texte à afficher doit être précédé et suivi

du guillemet simple « ' ». Par ailleurs, pour ne pas entrer en confusion avec la fin réelle

de la chaîne de caractères, il importe de savoir que les chaînes de caractères

comportant une apostrophe doivent saisir cette dernière deux fois. Par exemple :

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

Certaines options peuvent être ajoutées à la fonction Write afin d’identifier le

positionnement, dans l’écran, du texte à afficher. Voici comment se rédigent ces options

de positionnement :

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

Page 28: Chap7 Elements Program Mat Ion

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

28

Tableau 5- Options de positionnement de la commande Write

Option Description

/ Saute à la prochaine ligne

Colonne Identifie l’emplacement de l’affichage

Longueur Nombre de caractères à écrire

Les deux programmes suivant présentent différentes utilisations des options de

positionnement de la commande Write. Le premier programme (YX140) utilise

uniquement l’option de saut de ligne et l’option d’emplacement (colonne).

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

*affichage des phrases

WRITE : /10 'SAP',

/15 'ABAP',

/20 'Technologie de l’’ information',

/15 'Aspects technologiques'.

À l’écran, le programme précédent s’affiche tel qu’illustré ci-dessous. Il est à remarquer

que la fonction saut de ligne permet d’afficher ces expressions sur des lignes distinctes

et que l’option d’emplacement correspond au nombre de caractères qui sépare

l’expression de la gauche de l’écran.

Page 29: Chap7 Elements Program Mat Ion

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

29

Le second programme (YX141) utilise les trois options d’affichage.

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

*affichage des résultats

WRITE : /5(3) 'SAP',

/5(2) 'ABAP',

/15 'Technologie de l’’ information', 'et', 'Aspects Technologiques'.

L’affichage de ce programme est illustré ci-après. Il est important de noter que l’option

longueur limite le nombre de caractères affichés. Ainsi, au lieu d’écrire ABAP en entier,

le programme affiche, tel que spécifié par le (2), seulement les 2 premiers caractères de

l’expression.

Mise en forme

L’ABAP Editor comporte différentes fonctions permettant une certaine mise en forme de

l’affichage à l’écran. Pour ce faire, le programmeur doit insérer les commandes de mise

en forme dans son code afin de modifier la présentation à l’écran. Cette section

présente un résumé des commandes les plus utilisées.

Tableau 6 - Principales fonctions de mise en forme de l'affichage

Fonction Description

ULINE Trace une ligne horizontale

SY-VLINE Ligne verticale utilisée pour la création d’un tableau

SKIP n Saute n lignes

SKIP TO LINE n Saute à la ligne n

WRITE: /colonne n Écrire à partir de la colonne n

Page 30: Chap7 Elements Program Mat Ion

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

30

Le programme suivant (YX150) utilise ces différentes fonctions de mise en forme. Nous

avons commenté le programme afin d’expliquer l’effet de chacune de ces fonctions sur

l’affichage à l’écran.

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

*trace une ligne horizontale débutant à la colonne #1 et

*se terminant à la colonne #100

uline at /1(100).

*saute 5 lignes

SKIP 5.

*se rend à la ligne 6

SKIP TO LINE 6.

*trace une ligne verticale à la position 1, 5 et 10 en

*sautant une ligne à chaque fois

WRITE:/1 SY-VLINE,

/5 SY-VLINE,

/10 SY-VLINE.

*débute l'écriture de la phrase à la colonne numéro 25

WRITE: /25 'Cette phrase commence à la position 25'.

Page 31: Chap7 Elements Program Mat Ion

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

31

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

Notons enfin que pour réaliser l’affichage d’un tableau, l’utilisation d’une boucle est

souvent nécessaire afin de répéter le nombre de lignes horizontales (ULINE) et

verticales (SY-VLINE) requis. Cette fonctionnalité est présentée un peu plus tard dans

ce chapitre avec les autres structures de contrôle.

Page 32: Chap7 Elements Program Mat Ion

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

32

Opérandes

Plusieurs programmes nécessitent l’utilisation d’opérandes afin d’exécuter des calculs

de différentes natures. Voici donc un tableau indiquant les opérateurs arithmétiques les

plus utilisés.

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

Nom Commandes

Addition +

Soustraction -

Division /

Multiplication *

Exposant **

Modulo MOD

Division entière DIV

Fonctions arithmétiques

Racine carrée SQRT( )

Logarithme LOG( )

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

parenthèses doivent être précédées et suivies d’un espace comme ceci :

sqrt ( 10 ) .

Page 33: Chap7 Elements Program Mat Ion

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

33

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

section Data.

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

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

DATA: R1 TYPE i, R2 TYPE i, R3 TYPE i, R4 TYPE i,

D1 TYPE i VALUE '5',

D2 TYPE i VALUE '20'.

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

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

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

R1 = D1 + D2.

R2 = D1 * D2.

R3 = D2 / D1.

R4 = D1 mod D2.

*La commande WRITE permet d’afficher les résultats

*à l’écran et la barre

*oblique produit un saut de ligne.

WRITE : / R1,

/ R2,

/ R3,R4.

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

Page 34: Chap7 Elements Program Mat Ion

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

34

Chaînes de caractères – Text-elements

SAP R/3 offre la possibilité de modifier la langue utilisée par l’application (fonctionnalité

multilingue). Pour ce faire, chaque terme (élément de texte) utilisé dans SAP doit être

répertorié et numéroté afin d’y associer la traduction appropriée. La majorité des

interfaces et rapports disponibles dans R/3 ont été préalablement traduits et sont

accessibles dans les principales langues disponibles dans SAP R/3. Évidemment, R/3

ne traduit pas lui-même les éléments de texte. Chaque traduction doit être saisie une à

une et c’est donc pourquoi il peut arriver, à l’occasion, de tomber dans R/3 sur des

expressions en allemand au sein de certains rapports ou interfaces rarement utilisées !

Lors du développement d’un rapport ou d’une interface en ABAP, il importe de déclarer

toutes les chaînes de caractères utilisées dans le programme afin de faciliter sa

traduction subséquente. Concrètement, il suffit d’inscrire un numéro, entre parenthèse,

à la suite de chaque élément de texte du programme et de suivre la procédure ci-

dessous pour les répertorier.

Prenons l’exemple d’une entreprise possédant une filiale francophone et une filiale

anglophone. L’entreprise souhaite développer un rapport de vente journalier

personnalisé pouvant s’afficher dans les deux langues. En anglais, le rapport doit

afficher les informations suivantes : No_order , No_customer, Order_value et

No_salesrep. En français, ces termes se traduisent de la manière suivante : le No_com,

le No_client, la Valeur_com et le No_vendeur. Le programme YX160 est rédigé en

anglais et l’en-tête du rapport est composé des éléments de texte suivants : WRITE: /02

'No_Order'(201),

20 'No_Customer'(202),

36 'Order_Value'(203),

57 'No_Salesrep'(204).

Page 35: Chap7 Elements Program Mat Ion

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

35

Procédure pour répertorier les éléments de texte

La numérotation de ces éléments de texte et le fait de les répertorier dans un index

permettront de traduire automatiquement l’en-tête du rapport (en assumant que la

traduction des termes a été saisie préalablement). Les cinq étapes suivantes expliquent

comment répertorier les éléments de texte de l’exemple précédent.

a) Double-cliquez sur le premier élément de texte, soit ‘No_order’, ou sur le numéro

suivant ce dernier (201). Une fenêtre comme celle-ci apparaîtra :

Cliquez sur Yes.

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

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

programme.

Page 36: Chap7 Elements Program Mat Ion

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

36

c) Pour activer l’élément sélectionné, cliquez sur le bouton Activate . Sélectionner le

nom du programme puis cliquez sur le bouton Continue .

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

suivant apparaîtra :

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

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

Procédure pour visualiser et modifier les éléments de texte

Par ailleurs, la transaction /nSE32 permet de visualiser et de modifier tous les éléments

de texte activés et enregistrés pour un programme spécifique sans passer par l’ABAP

Editor. Il est aussi possible d’y accéder par le chemin d’accès suivant : Tools > ABAP

Workbench > Development > Programming environ > Text elements . Voici la procédure

à suivre pour visualiser et modifier un élément de texte :

a) Saisir le nom du programme sous Program.

Page 37: Chap7 Elements Program Mat Ion

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

37

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

Procédure permettant la traduction d’un élément de texte

Il est possible de traduire les éléments de texte à partir de la transaction /nSE32 ou de

l’ABAP Editor. Dans les deux cas, la saisie du nom du programme est nécessaire.

/nSE32 :

ABAP Editor :

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

La fenêtre suivante apparaîtra :

Page 38: Chap7 Elements Program Mat Ion

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

38

La langue originale (Original language) est celle de la session de l’utilisation. Dans

notre cas, l’anglais est la langue originale. La langue de traduction, soit Target

language, est la langue dans laquelle les éléments de texte seront traduits. Dans la

présente situation, le français sera cette langue. Donc remplacer la Target language par

FR, soit le diminutif de français, puis cliquez sur exécuter .

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

écran comme ceci :

Page 39: Chap7 Elements Program Mat Ion

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

39

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

texte leur traduction.

Page 40: Chap7 Elements Program Mat Ion

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

40

Ne pas oublier de sauvegarder les modifications avec le bouton . L’écran suivant

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

YX160.

STRUCTURES DE CONTRÔLE

La programmation en ABAP offre différentes instructions de contrôle semblables au

langage Visual Basic . En effet, il est ainsi possible d’utiliser tant des instructions de

conditions que des boucles. Cette section présente ces deux approches.

Les instructions de conditions

Instructions de conditions IF

Une instruction de condition IF exécute une procédure lorsque la condition exprimée est

satisfaite. Voici de quelle manière se rédige la condition IF :

Page 41: Chap7 Elements Program Mat Ion

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

41

If [not] condition 1.

Instruction1.

[Elseif condition2.

Instruction2.]

Else.

Instruction Else.

Endif.

Par exemple, le programme YX180 permet à un agent de voyage d’être informé

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

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

La fonction paramètre du programme précédent appelle, dans un premier temps,

l’interface où l’agent de voyage doit indiquer le nombre de personnes. Voici l’interface

en question :

Page 42: Chap7 Elements Program Mat Ion

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

42

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

n’est disponible.

Instructions de conditions IF et variable SY-SUBRC

Il est également possible d’utiliser l’instruction IF en conjonction avec le champ SY-

SUBRC. Ce champ, contenu dans la table SYSTEM (voir tableau 1), concerne la valeur

du dernier test logique effectué par le système. Si le résultat du test est positif, la valeur

de SY-SUBRC est de zéro (0). Lorsque la valeur de SY-SUBRC est différente de zéro

(<> 0), le résultat du test est négatif (i.e. échec du test logique).

L’exemple du programme YX181 effectue une requête dans la table SCARR (liste de

compagnies aériennes). Plus part iculièrement, la requête vise à afficher la compagnie

possédant le numéro d’identification AD.

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

Page 43: Chap7 Elements Program Mat Ion

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

43

La figure suivante illustre en partie la table SCARR pour démontrer qu’il n’y a aucune

compagnie aérienne attitrée au sigle AD.

Puisque la valeur de SY-SUBRC n’est pas égale à zéro, le IF et la commande SY-

SUBRC affichent donc un message d’échec.

Opérateurs logiques de l’instruction de condition IF

L’instruction de condition IF peut utiliser divers opérateurs logiques afin d’exécuter la

routine désirée. L’utilisation du NOT permet d’introduire la négation dans la condition

tandis que le AND et le OR permettent de grouper ensembles différentes instructions de

condition. Le tableau suivant rassemble les principaux opérateurs utilisés en

conjonction avec l’instruction IF.

Page 44: Chap7 Elements Program Mat Ion

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

44

Tableau 8 - Opérateurs en conjonction avec l’instruction IF

Signes Caractères Signification

= EQ Égale à

<> , >< NE N’est pas égale à

> GT Plus grand que

< LT Plus petit que

>=, => GE Égale ou plus grand que

<=, =< LE Égale ou plus petit que

BETWEEN var1 AND var2

Exclusivement entre 2 valeurs

NOT Ne … pas

AND ET

OR OU

Instructions de conditions CASE

La commande CASE permet de catégoriser un certains nombres de conditions et de les

comparer avec un champ déterminé. Lorsqu’une condition exprimée est satisfaite, la

commande CASE prend fin. Voici de quelle manière se rédige la commande CASE :

case champs .

When valeur 1.

Instruction 1.

When valeur 2.

Instruction 2.

When others,

Intruction others

endcase.

Page 45: Chap7 Elements Program Mat Ion

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

45

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

l’interface.

***** Tables ********** ***** Data ************ ***** Parameters & Select Options ***** Parameters: chiffre type i. ***** Initialization ********* ***** Start of Selection ***** case chiffre. when '1'. write:/ 'couleur #1 rouge'(001). when '2'. write:/ 'couleur #2 noire'(002). when others. write:/ 'pas de couleur déterminée'(003). endcase.

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

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

Page 46: Chap7 Elements Program Mat Ion

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

46

Les boucles

L’instruction Do est une commande permettant d’exécuter un certain nombre de fois la

même procédure. Plus spécifiquement, le programme exécute dans un premier temps

la procédure et, dans un deuxième temps, la suite. La boucle s’arrête sur demande

(conditions IF avec un EXIT) ou lorsque le nombre de boucle désirée est atteint. Si

aucune de ces deux options de complétion n’est effectuée, la boucle sera infinie. Voici

le format pour écrire une boucle.

CD [ n times].

…procédure…

ENDDO.

Page 47: Chap7 Elements Program Mat Ion

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

47

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

variable SY-INDEX indique le nombre de fois qu’une boucle a été exécutée.

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

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

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

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

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

*écrire un titre

write:/25 'Écriture d’un tableau'(001).

uline at /25(22).

*écrire l’en-tête

Uline at /2(74).

Write : /2 sy-vline,

3 'nom'(002),

19 sy-vline,

20 'prénom'(003),

37 sy-vline,

38 'programme'(004),

54 sy-vline,

55 'spécialisation'(005),

75 sy-vline,

77 'no boucle (sy-index)'(006).

Uline at /2(74).

Do 3 times.

Write : /2 sy-vline,

19 sy-vline,

37 sy-vline,

54 SY-yline,

75 SY-yline.

Uline at /2(74).

*afficher le # de la boucle

write sy-index

Enddo.

Page 48: Chap7 Elements Program Mat Ion

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

48

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

TABLES INTERNES

Une table interne constitue un espace temporaire de traitement et de stockage de

données. Les tables internes ne font donc pas partie des bases de données de SAP

R/3. Elles sont plutôt emmagasinées dans une zone tampon de la mémoire. Cette

section présente de quelle manière une table interne doit être déclarée et manipulée

dans le cadre d’un programme ABAP.

Caractéristiques d’une table interne

Une table interne se distingue par les caractéristiques suivantes :

• La table interne possède une durée de vie limitée à l’exécution du programme;

• Elle ne possède pas de clé primaire;

• Les noms des tables internes doivent commencer par i afin de les différencier des

tables des bases de données de SAP R/3;

• Une table interne possède un enregistrement d’en-tête (header record) et des

enregistrements individuels numérotés 1, 2, 3, …;

• On ne peut accéder et manipuler qu’un seul enregistrement à la fois, soit celui qui se

trouve dans l’enregistrement d’en-tête;

• Quand un enregistrement individuel est appelé par le programme, il est copié dans

l’enregistrement d’en-tête.

Page 49: Chap7 Elements Program Mat Ion

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

49

Structure d’une table interne

Tel qu’illustré ci-dessous, une table interne est constituée de champs (ex : Nom,

Pénom, No_tel) qui forment sa structure. Lors du déroulement du programme, la table

interne se remplit de valeurs créant ainsi différents enregistrements (lignes). La

structure de chaque table interne possède un index qui numérote chacun de ces

enregistrements. Il est possible d’appeler un enregistrement précis en utilisant l’index

de la table interne. La table interne copie alors l’enregistrement demandé et l’affiche

dans l’en-tête de la table.

Nom Prénom No_tel

En-tête à 3 Tremblay Marc 450-555-4567

1 Chevalier Mathieu 514-234-5678

2 Perreault Julie 514-345-6666

3 Tremblay Marc 450-555-4567 Enregistrements à

4 Venne Justine 450-987-6543

Déclaration d’une table interne

La déclaration d’une table interne doit se faire dans la section Data. Il existe deux

façons de déclarer une table interne. La première option est de déclarer immédiatement

la table interne au moment où sa structure est définie. La deuxième option est de définir

d’abord la structure et de déclarer une table interne similaire à cette structure. Le

tableau 9 explique, pour sa part, les commandes utilisées dans la déclaration d’une

table interne.

Page 50: Chap7 Elements Program Mat Ion

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

50

Option 1

DATA : BEGIN OF itable OCCURS n_enregistrement,

Champs 1,

Champs 2,

Champs n,

DATA : END OF itable.

Option 2

DATA : BEGIN OF nom_enregistrement,

Champs 1,

Champs 2,

Champs n,

Itable LIKE nom_enregistrement OCCURS O With Header Line.

Tableau 9 - Options d’une table interne

Options Signification

Itable Représente le nom de la Table interne

n_enregistrement

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

With header line Insère un enregistrement d’en-tête afin d’avoir accès aux données de la table interne.

Nom_enregistrement Nom donné à la structure de la table interne

Page 51: Chap7 Elements Program Mat Ion

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

51

L’extrait du programme YX210 présente la déclaration de la table interne ICIE dont la

structure est copiée sur COMPAGNIE.

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

Ajout d’enregistrements dans une table interne : Move, Append et Clear

L’ajout d’enregistrements dans une table interne requiert une gymnastique particulière

dans laquelle un nouvel enregistrement doit d’abord être copié dans l’entête de la table

interne (commande Move), puis ajouter aux enregistrement de la table interne

(commande Append). Enfin, l’en-tête de la table interne doit être effacée pour faire

place à une nouvelle manipulation (commande Clear). Soulignons par ailleurs que la

commande Append ajoute un nouvel enregistrement à la toute fin de la table interne

sans considérer l’ordre de celle-ci. Voici de quelle manière cette procédure doit être

rédigée :

Move : valeur to itable-champs.

Append itable.

Clear itable.

Page 52: Chap7 Elements Program Mat Ion

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

52

L’exemple suivant poursuit l’exemple initié précédemment (YX210) en ajoutant des

enregistrements à la table interne ICIE.

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

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

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

*insertion manuelle de données dans la table interne

MOVE: '01' to icie-no_cie,

'Plomberie ABC' to icie-nom_cie.

*enregistrement de la ligne dans l'en-tête de la table

*interne

APPEND icie.

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

CLEAR icie.

*insertion manuelle de données dans la table interne

MOVE: '02' to icie-no_cie,

'Électriciens ABC' to icie-nom_cie.

APPEND icie.

Page 53: Chap7 Elements Program Mat Ion

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

53

Table interne et extraction de la base de données de SAP R/3

Une table interne peut également être définie en fonction d’une table contenue dans les

bases de données de SAP R/3. Il est même possible d’extraire des données de cette

même table afin de peupler une table interne. Notons que nous abordons ici

succinctement le sujet des requêtes dans les tables de R/3; nous y reviendrons en

détails à la prochaine section.

Voici de quelle manière la structure d’une table existante dans R/3 peut être utilisée

pour définir une table interne. La fonction Include structure sélectionne la structure

d’une table de SAP R/3 et l’utilise comme modèle pour la nouvelle table interne.

DATA : BEGIN OF itable OCCURS 0.

INCLUDE STRUCTURE table

DATA : END OF itable.

Les résultats de la requête à la base de données de R/3 sont ensuite copiés dans la

table interne à l’aide de la fonction suivante :

into corresponding fields of table itable.

Notons que la fonction Corresponding field permet de s’assurer que la table interne

possède la même structure, ou des champs correspondants, avec la table d’où les

valeurs sont extraites.

Page 54: Chap7 Elements Program Mat Ion

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

54

À titre d’exemple, prenons un programme (YX240) permettant à un employé d’une

compagnie aérienne de faire afficher le nom du pays, de la ville et de l’aéroport d’où il y

a des départs.

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

Afficher le contenu d’une table interne

L’affichage du contenu d’une table interne s’effectue à l’aide d’une boucle ayant pour

fonction d’écrire un après l’autre les enregistrements de la table. Il est possible de

préciser les champs dont l’affichage est souhaité. Cette boucle doit être rédigée de la

manière suivante :

loop at itable.

write: [/1] itable-champs1,

itable-champs2

itable-champs… # 3, 4, …, N.

Endloop.

Page 55: Chap7 Elements Program Mat Ion

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

55

Le programme suivant (YX210) poursuit l’exemple débuté précédemment. Dans cet

extrait, nous procédons à l’affichage des enregistrements de la table interne.

*écriture d'un titre

write:/1 'Affichage de la table interne icie'.

skip 1.

*boucle permettant d'afficher les données contenues dans

*la table interne.

Loop at icie.

write:/ icie-no_cie,

icie-nom_cie.

Endloop.

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

Prenons un second exemple. Le programme YX240 termine l’exemple initié

précédemment et affiche la liste des aéroports d’où il y a des départs.

*affichage des valeurs de la table interne

loop at itable.

write:/1 itable-countryfr,

itable-cityfrom,

itable-airpfrom.

endloop.

Page 56: Chap7 Elements Program Mat Ion

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

56

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

Lecture d’un enregistrement à la fois (Commande Read)

La commande Read permet de chercher un enregistrement particulier dans une table

interne. Pour atteindre un enregistrement (une ligne) spécifique d’une table interne à

l’aide de la commande Read, il importe de suivre la procédure suivante :

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

b) Saisir le nom de la table interne et le nom du champ recherché puis inscrire la valeur

de ce champ. Le nom du champ doit être écrit de la même manière qu’il apparaît

dans la base de données de SAP R/3 (case sensitive). Il est aussi possible d’utiliser

le numéro de l’index.

La lecture d’un enregistrement se rédige donc de la manière suivante. D’abord, la

suppression de l’entête s’effectue selon l’une des deux méthodes suivantes :

Page 57: Chap7 Elements Program Mat Ion

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

57

Option 1

MOVE SPACE TO itable

Option 2 :

Clear itable.

Ensuite, il existe deux options pour rechercher un enregistrement. La première option

consiste à effectuer la recherche sur la valeur précise d’un champ de la table. Il est à

noter que la commande Read arrête sa lecture au premier enregistrement qui

correspond aux spécifications demandées. L’autre option est de rechercher un

enregistrement avec le numéro de l’index.

Option 1 :

Itable-champ = ‘valeur_recherchée’.

READ TABLE itable

Option 2:

READ TABLE itable INDEX i.

L’exemple suivant est un programme (YX241) permettant à un employé de rechercher

dans une table interne le transporteur ayant fait un vol le 14 janvier 2005. On peut

constater à la figure 3 (extrait de la table SFLIGHT) que plusieurs vols ont été effectués

lors de cette journée (faire SE16 pour visualiser cette table).

Page 58: Chap7 Elements Program Mat Ion

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

58

Figure 3 Extrait de la table SFLIGHT

***** Tables ********** Tables: sflight. DATA: BEGIN OF itable OCCURS 0. INCLUDE STRUCTURE sflight. DATA: END OF itable. ***** Data ************ ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** select * from sflight into corresponding fields of table itable. WRITE:/1 'Date de départ'(001), 22 'ID du transporteur'(002). Uline at /1(50). *effacer l’en-tête MOVE SPACE TO itable. *valeur recherchée Itable-FLDATE = '20050114'. *lire la table interne READ TABLE itable. *si on trouve des données; les afficher IF SY-SUBRC = 0. write:/1 itable-FLDATE, 22 itable-CARRID. *sinon: écrire un message d'erreur Else. write:/1 'aucune donnée trouvée.'(003). Endif.

Page 59: Chap7 Elements Program Mat Ion

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

59

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

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

Modification d’une table interne (Commande Modify)

Pour modifier un enregistrement d’une table interne, celui-ci doit être copié dans l’en-

tête avant d’être modifié et ensuite mis à jour dans la table interne. Comme les

enregistrements dans une table interne ne possèdent pas de clé primaire, il existe deux

approches pour réaliser cette procédure :

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

interne;

b) En effectuant une boucle pour rechercher un enregistrement en fonction de la valeur

de l’un de ses champs.

Option 1 :

Attardons nous d’abord à la première option : la modification d’une table interne à l’aide

de son index. Cette approche requiert que le programmeur connaisse le numéro de

l’enregistrement à modifier. Par conséquent, il importe, avant tout, d’afficher la table

interne et de faire apparaître les numéros de l’index. Pour ce faire, il suffit d’ajouter la

variable SY-TABIX dans la boucle qui permet d’afficher la table. Le TABIX est un

champ de la table System (SY) contenant les numéros d’enregistrements de l’index.

L’exemple ci-dessous poursuit le programme des sections précédentes, mais d’autres

enregistrements ont été rajoutés au programme initial. Le programme YX211 affiche

tous les enregistrements de la table interne de même que l’index de la table.

Page 60: Chap7 Elements Program Mat Ion

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

60

*boucle permettant d'afficher les données contenues dans la table

*interne.

Loop at icie.

write:/ sy-tabix,

icie-no_cie,

icie-nom_cie.

Endloop

.

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

gauche de la liste.

Il est à noter que lorsque l’on insère des enregistrements dans une table interne, ceux-

ci s’affichent les uns à la suite des autres sans ordre de champ précis. C’est pourquoi la

compagnie Gazon Plus se retrouve à l’index #3, malgré un numéro de clients supérieur

à Menuiserie Pros.

En utilisant le numéro de l’index, il est possible d’appeler l’enregistrement souhaité dans

l’en-tête, de modifier l’en-tête et de retourner l’enregistrement dans la table interne. Le

programme suivant recherche et lit le 2e enregistrement (Index 2) de la table interne. S’il

le trouve, il modifie le champ nom_cie avant de retourner l’enregistrem ent dans la table

interne.

Page 61: Chap7 Elements Program Mat Ion

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

61

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

read table itable index N.

if sy-subrc = 0.

itable-champ1 = ‘nouvelle valeur’

modify itable index sy-tabix.

endif.

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

read table icie index 2.

if sy-subrc = 0.

icie-nom_cie = ‘Électriciens ABC et fils’.

modify icie index sy-tabix.

endif.

Option 2

La seconde option pour modifier un enregistrement dans une table interne est d’utiliser

une boucle. Cette boucle recherche dans la table interne une valeur spécifique dans un

champ donné. Après que l’enregistrement ait été trouvé et amené dans l’entête, celui-ci

est modifié et retourné dans la table interne. Voici donc une manière alternative de

rédiger l’extrait du programme présenté précédemment dans l’option 1.

*mise à jour du d’un champ X à l’aide d’une *boucle

loop at itable where champ1 = X.

itable-champ2 = ‘ nouvelle valeur’.

modify itable.

endloop.

Page 62: Chap7 Elements Program Mat Ion

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

62

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

*avec une boucle

loop at icie where no_cie = '02'.

icie-nom_cie(30) = 'Électriciens ABC et Fils'.

modify icie.

endloop.

Effacer un enregistrement (Commande DELETE)

Pour effacer un enregistrement de la table interne, il faut également passer par l’en-tête

de la table. Il suffit de copier l’enregistrement à effacer dans l’en-tête et ensuite utiliser

la commande Delete pour le supprimer. Ainsi, contrairement à la commande Clear, la

commande Delete efface, en plus de l’enregistrement d’en-tête, l’enregistrement

correspondant dans la table interne.

Il existe deux approches pour utiliser la commande Delete :

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

interne;

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

de la valeur de l’un de ses champs.

Option 1 :

La première option consiste à rechercher l’enregistrement à supprimer à l’aide de son

numéro d’index. Un fois trouvé, l’enregistrement est copié dans l’en-tête puis supprimé.

L’enregistrement est définitivement supprimé de l’en-tête et de la table interne

simultanément.

Page 63: Chap7 Elements Program Mat Ion

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

63

*suppression de l'enregistrement possédant le

*numéro de compagnie X, mais le numéro d’index

Y *(SY-TABIX)

read table itable index Y.

if sy-subrc = 0.

delete itable index sy-tabix.

endif.

*suppression de l'enregistrement possédant le

*numéro de compagnie 004, mais le numéro d’index

*3 (SY-TABIX)

read table icie index 3.

if sy-subrc = 0.

delete icie index sy-tabix.

endif.

À noter : lors de la suppression complète d’un enregistrement avec Delete, l’index (SY-

TABIX) se modifiera pour tenir compte de cette suppression.

Avant la suppression :

Après la suppression :

Page 64: Chap7 Elements Program Mat Ion

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

64

Option 2 :

L’option 2 consiste à rechercher un enregis trement en fonction de la valeur d’un champ

de cet enregistrement. Lorsque cet enregistrement est identifié et copié dans l’en-tête,

la commande Delete permet de la supprimer aux deux endroits.

L’exemple suivant (YX212) identifie et supprime la compagnie possédant le numéro de

compagnie 4 soit Gazon Plus.

*suppression de l'enregistrement possédant le numéro de *compagnie X

Loop at itable where no_cie = 'X'.

Delete itable index sy-tabix.

Endloop.

*suppression de l'enregistrement possédant le numéro de *compagnie 04

Loop at icie where no_cie = '04'.

Delete icie index sy-tabix.

Endloop.

Dénombrement des enregistrements de la table interne (Commande DESCRIBE)

Il est possible de compter le nombre d’enregistrements d’une table interne. Pour se

faire, il faut utiliser la commande Describe. Voici de quelle manière se rédige cette

commande :

DESCRIBE table itable [LINES n] :

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

Page 65: Chap7 Elements Program Mat Ion

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

65

REQUÊTES SUR LA BASE DE DONNÉES

La section suivante est consacrée à l’utilisation du langage de requête SQL dans le

cadre de programme rédigé en ABAP. En effet, ABAP utilise le langage SQL pour

extraire et manipuler des données contenus dans la BD de R/3. Bien que les

commandes Update, Insert et Delete puissent être utilisées dans le cadre d’un

programme ABAP, cette section s’attarde principalement à la commande Select.

La commande Select

La commande Select permet d’effectuer une requête sur les tables de la base de

données de R/3 en spécifiant différents critères de sélection et de regroupement. La

commande Select se rédige de la manière suivante :

Select [single] [distinct] champs

From table

Where champs [Not] [Like valeur] [In Select - Option]

[between val1 And val2]

Group by champs

Having conditions

Order by champs.

Endselect.

Tableau 10 - Option de la commande SELECT

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

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

WHERE La commande Where permet de circonscrire le résultat de la requête.

Page 66: Chap7 Elements Program Mat Ion

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

66

Il importe de souligner que le point doit seulement apparaître après la dernière

instruction, soit le Where, le Group by , le Having ou le Order by. De surcroît, il est

recommandé de conclure la requête par un Endselect (qui lui -même doit être suivi d’un

point). La combinaison du Select-endSelect crée automatiquement une boucle, facilitant

ainsi l’affichage des résultats pour des programmes courts ou lorsque les données ne

sont lues qu’une seule fois.

En ce qui concerne la commande Where, ABAP reconnaît deux frimes. D’une part, le

signe pourcentage (%) permet de remplacer un groupe de caractères au début ou à la

fin d’une valeur : par exemple, tous les noms commençant par b = ‘b%’. D’autre part, le

signe de soulignement ( _ ) permet de remplacer une série de caractères au centre

d’une valeur : par exemple, tous les noms ressemblant à Amy = ‘A_ y’. Dans les deux

cas, il importe d’utiliser la commande Like. Par exemple, une requête pour trouver les

compagnies aériennes dont le ID commence par A devrait se rédiger de la manière

suivante :

where carrid like ‘a%’.

Par ailleurs, il est possible de faire afficher automatiquement le nombre

d’enregistrements contenus dans le résultat d’une requête. Pour se faire, il suffit

d’afficher le champ DBCNT de la table System (SY). Voici comment rédiger cette

commande :

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

Illustrons par un exemple la commande Select. La requête de cet exemple porte sur la

table SPFLI. La requête sélectionne l’ensemble du contenu (select *) de la table SPLI

(from spfli) et demande d’ordonnancer le résultats selon la ville d’origine (order by

Page 67: Chap7 Elements Program Mat Ion

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

67

cityfrom) : Ensuite le programme affiche les champs CARRID, CONTRYFR,

CITYFROM, AIRPFROM, COUNTRYTO et CITYTO. Le programme utilisé est le

YX222.

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

tables: spfli.

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

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

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

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

select *

from spfli

where period = '0'

order by cityfrom.

write:/ spfli-carrid,

spfli-countryfr,

spfli-cityfrom,

spfli-airpfrom,

spfli-countryto,

spfli-cityto.

endselect.

skip 2.

*affiche le nombre d'enregistrements trouvés

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

Il est également possible de conserver les résultats de la requête dans une table

interne. L’exemple suivant (YX224) sauvegarde temporairement les données de SPFLI

dans la table interne itable. L’affichage des données est effectué à l’aide d’une boucle.

Page 68: Chap7 Elements Program Mat Ion

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

68

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

tables: spfli.

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

*declaration d’une table interne correspondant à la

*structure de la table spfli

data itable like spfli occurs 0 with header line.

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

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

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

*requête sur la table Spfli

select *

from spfli into table itable

where period = '0'

order by cityfrom.

*affichage des données continues dans les champs

spécifiés

loop at itable.

write:/ itable-carrid,

itable-countryfr,

itable-cityfrom,

itable-airpfrom,

itable-countryto,

itable-cityto.

endloop.

skip 2.

write:/ 'nombre d'’enregistrements trouvés:', sy-

dbcnt.

Page 69: Chap7 Elements Program Mat Ion

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

69

L’exécution de ce programme mène à l’affichage de la liste d’enregistrements ci-

dessous. Notons que le nombre d’observations retournées est affiché grâce au champ

SY-DBCNT.

Fonctions d’agrégation

Les fonctions d’agrégation peuvent être insérées dans une requête afin d’effectuer

divers calculs sur les champs de la sélection. Voici une liste des fonctions d’agrégations

les plus fréquemment utilisées.

Tableau 11 - Liste de fonctions d'agrégation

Commande Description

AVG Moyenne

SUM Somme

MAX Maximum

MIN Minimum

COUNT Fréquence

Page 70: Chap7 Elements Program Mat Ion

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

70

Concaténer une requête

Pour concaténer une requête en langage ABAP, il faut imbriquer deux Select-

EndSelect. Une telle requête concaténée se rédige de la manière ci-dessous.

Attention : ne pas oublier de mettre les deux Select-EndSelect.

Select * from table 1.

Select * from table2

Where champ1 = table1-champ1.

Endselect.

Endselect.

Illustrons par un exemple la concaténation d’une requête. Supposons que nous

souhaitons obtenir de l’information sur des connexions de vols. Une partie des

informations désirées se trouve dans la table SFLIGHT (les champs PLANETYPE et

FLDATE ) et une autre dans la table SPFLI (le champ CONNID). Les deux tables ont

une clé commune : CARRID (le numéro du transporteur aérien). La requête vise à isoler

les vols dont le ID de connexion (CONNID) est 17. Voici comment devrait se rédiger

cette requête (YX230):

Page 71: Chap7 Elements Program Mat Ion

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

71

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

Page 72: Chap7 Elements Program Mat Ion

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

72

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

RAPPORTS INTERACTIFS

Cette section présente les différentes fonctions, événements et commandes pour

programmer des rapports interactifs dans SAP R/3 à l’aide du langage ABAP. Dans le

cadre du cours, les rapports interactifs seront surtout sous forme de listes détaillées.

La commande At-line selection

La commande At-line selection permet à l’utilisateur de sélectionner une ligne, dans un

rapport, afin d’accéder à des informations supplémentaires contenues dans une liste.

Pour exécuter la commande, il doit double-cliquez sur la ligne désirée ou sélectionner la

ligne en question et presser la touche F2. La commande At-line selection se rédige de

la manière suivante :

at line-selection.

Page 73: Chap7 Elements Program Mat Ion

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

73

Champs de la table SY

Certains champs, provenant de la table SY, affichent de l’information concernant

l’utilisation de rapports interactifs. Le tableau ci-dessous en décrit un certain nombre.

Tableau 12 – Champs de la table SY

SY-LSIND : Niveau de la liste (liste de base = 0)

SY-CUROW : Ligne sélectionnée

SY-CUCOL : Colonne sélectionnée

SY-LISEL : Contenu de la ligne sélectionnée

Le programme YX270 est un exemple d’utilisation des notions mentionnées ci-haut.

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

Page 74: Chap7 Elements Program Mat Ion

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

74

Lors de l’exécution du programme, le mot line et le nombre de fois que la boucle a été

exécutée (grâce à SY-INDEX) s’affiche à l’écran.

L’utilisateur sélectionne une ligne en double-cliquant sur cette dernière (At-line

selection). Le programme affiche le niveau de la liste (sy-lsind), le numéro de la ligne

(sy-curow) et le contenu de la ligne (sy-lisel). Dans l’exemple suivant, l’utilisateur a

double-cliqué sur line 5.

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

et la condition de contrôle If, contrôle le nombre de niveaux de la liste.

La commande Hide

La commande Hide permet d’entreposer temporairement en mémoire de l’information

spécifique à chacune des lignes de la liste. Lors de l’exécution de la commande At line-

selection, le contenu est restauré. L’un des objectifs de la commande Hide est de

référencier le contenu de chacune des lignes d’une liste entre le niveau de base (SY-

LSIND = 0) et un niveau supérieur .

Page 75: Chap7 Elements Program Mat Ion

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

75

Le programme YX271 est un exemple d’utilisation de la commande Hide. Il entrepose

en mémoire le numéro identif iant chacune des compagnies d’aviation (carrid) à l’aide de

la commande Hide. Lorsque l’utilisateur sélectionne le nom de l’une des compagnies,

les numéros identifiant chacune des compagnies d’aviation (carrid) est restauré et

permet ainsi d’apparier chacune des compagnies d’aviation avec leur adresse URL

respective.

La programmation d’un tel programme ressemble à ceci :

***** Tables ********** *tables utilisées tables: scarr, scarplan. ***** Data ************ *déclaration de la table interne data: begin of iplane occurs 0. include structure scarr. data: end of iplane. ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** ****** Selection ******* *titre write:/1 'Nom de la compagnie d''aviation'(001). uline. skip 1. select * from scarr into corresponding fields of table iplane. loop at iplane. write:/1 iplane-carrname. *conserver en mémoire les numéros identifiant chacune des cie d'aviation hide iplane-carrid. endloop. *commade pour permettre le forage at line-selection. read table iplane with key carrid = iplane-carrid. *if sy-lsind < 2. write:/1 iplane-url. *endif.

Page 76: Chap7 Elements Program Mat Ion

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

76

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

Après avoir double-cliqué sur l’une des compagnies d’aviation, dans ce cas Qantas

Airways, l’information du niveau 1 s’affiche à son tour dans une nouvelle page.

Le forage sur plusieurs niveaux

Le forage sur plusieurs niveaux se fait à l’aide de la commande SY-LSIND de la table

SY conjointement avec l’instruction de conditions CASE. La commande SY-LSIND gère

les différents niveaux. Il est possible de lui assigner une valeur. Utilisé seule, elle affiche

le niveau de forage où l’utilisateur se trouve.

Le programme YX272 est un programme présentant les informations de la table clients

sur différents niveaux. Le niveau de base affiche le nom du client, le premier niveau le

nom et le numéro du client, le deuxième niveau la ville et le pays du client et le

troisième niveau son adresse complète.

Page 77: Chap7 Elements Program Mat Ion

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

77

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

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

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

respectivement à ceci :

Niveau 2 :

Niveau 3 :

Page 78: Chap7 Elements Program Mat Ion

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

78

La programmation ABAP du programme YX272 est la suivante :

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

Page 79: Chap7 Elements Program Mat Ion

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

79

La commande Window starting at […] ending at […]

La commande Window starting at […] ending at […] offre la possibilité au développeur

d’afficher du texte ou le résultat d’une opération, par exemple, dans une nouvelle

fenêtre tout en ayant le contrôle sur les dimensions de celle-ci. Cette commande se

rédige comme ceci :

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

L’attribution d’une valeur aux lettres v et w permet de contrôler le lieu d’affichage de la

nouvelle fenêtre à l’écran. Le v représente la distance à partir de l’extrémité gauche de

l’écran et le w la hauteur en fonction du haut de l’écran. Le x et le y représente

respectivement la largeur et la longueur de la nouvelle fenêtre.

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

write: / 'Cliquez sur cette phrase'.

At line-selection.

Window starting at 5 5

Ending at 70 5.

write: 'Voici une nouvelle fenêtre ayant des dimensions de 5-5-70-5'.

Page 80: Chap7 Elements Program Mat Ion

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

80

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

CRÉATION DE GRAPHIQUES

Cette section présente brièvement les techniques de création de graphiques dans SAP

R/3. Différentes fonctions sont disponibles dans SAP R/3 pour faciliter la

programmation de graphiques en langage ABAP. Dans la plupart des cas, il ne suffit

que des les appeler.

Fonctions et commandes pour la création de graphiques

Dans SAP R/3, l’appel d’une fonction se fait de la manière suivante :

CALL FUNCTION ‘nom de la fonction’

EXPORTING

TITL = ‘titre du graphique’

VALT = ‘Nom de l’’axe des Y’

TABLES

DATA = italbe.

La commande CALL FUNCTION appelle la fonction graphique désirée. La commande

TITL permet de saisir le titre du graphique et la commande VALT le nom de l’axe des Y.

La commande EXPORTING quant à elle, fait apparaître les valeurs de TITL et VALT

dans le graphique. La section TABLES indique les tables que le graphique devra

utiliser.

Page 81: Chap7 Elements Program Mat Ion

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

81

Graphique à deux dimensions

Pour créer un graphique en deux dimensions, il faut en premier lieu déclarer une table

interne et saisir les valeurs, manuellement ou à l’aide d’une requête, de chacune des

colonnes du graphique. Par la suite, il ne reste qu’à appeler la fonction du graphique à

deux dimensions.

Le programme YX280 appelle une fonction graphique fournie par SAP R/3 soit le

graphique à deux dimensions.

Une fois la fenêtre du graphique fermée, le programme YX280 affiche un tableau

résumant les valeurs contenues dans le graphique à deux dimensions.

Page 82: Chap7 Elements Program Mat Ion

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

82

La programmation en ABAP du programme YX280 est la suivante :

***** Tables ********** ***** Data ************ *déclaration d'une table interne DATA: BEGIN OF itable OCCURS 0, TEXT(25), VALUE TYPE P, END OF itable. *déclaration d'une variable : titre du graphique data: TITLE(25) VALUE 'Sales'. *déclaration d'une variable : titre de l'axe des Y du graphique data: TCOL1(5) VALUE '#1991'. *SET PF-STATUS 'GRAF'. ***** Parameters & Select Options ***** ***** Initialization ********* ***** Start of Selection ***** ***insertion manuelle des données dans la table interne *données de la première colonne move: 'Product_1' to itable-text, '153470' to itable-VALUE. APPEND itable. *données de la deuxième colonne itable-TEXT = 'Product_2'. itable-VALUE = 253150. APPEND itable. *données de la troisième colonne itable-TEXT = 'Product_3'. itable-VALUE = 53470. APPEND itable. *données de la quatrième colonne itable-TEXT = 'Product_4'. itable-VALUE = 182000. APPEND itable. *données de la cinquième colonne itable-TEXT = 'Product_5'. itable-VALUE = 92410. APPEND itable. ***affichage des données dans un tableau WRITE: / 'Products',22 TCOL1. SKIP 2. LOOP AT itable. WRITE: / itable-TEXT, 12 itable-VALUE. ENDLOOP. ***appele de la fonction graphique en 2 dimensions CALL FUNCTION 'GRAPH_2D' EXPORTING TITL = TITLE

Page 83: Chap7 Elements Program Mat Ion

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

83

VALT = TCOL1 TABLES DATA = itable.

Page 84: Chap7 Elements Program Mat Ion

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

84

Annexe 1

Liste des programmes utilisés

Nom du programme dans

ABAP Editor Description

YX00ex_gabarit Gabarit de la structure d'un programme

YX00ex_programme Exemple d’un programme

YX101 Exemple d’un programme complet en ABAP (structure)

YX102 Exemple de la commande Report

YX00ex_gabarit Démo en-tête

YX110 Exemple parameters

YX120 Exemple select options

YX130 Exemple parameters et select options

YX140 Exemple #1 avec la commande Write

YX141 Exemple #2 avec la commande Write

YX150 Exemple de mise en forme

YX171 Exemple avec opérandes

YX160 Exemple text-elements

YX180 Exemple avec IF

YX181 Exemple avec IF et SY-SUBRC

YX190 Exemple avec case

YX200 Exemple avec une boucle

YX210 Exemple déclaration table interne

YX210 Exemple commandes Move, Append et Clear

YX240 Exemple déclaration table interne (tables disponibles dans SAP)

YX210 et YX240 Exemple afficher le contenu d’une table interne

YX241 Exemple table interne commande Read

YX211 Exemple table interne Modify

YX212 Exemple table interne avec Delete

YX222 Exemple Select

YX224 Exemple Select avec table interne

YX230 Exemple requête concaténée

YX270 Exemple rapport interactif et table SY

YX271 Exemple rapport interactif et commande Hide

YX272 Exemple rapport interactif et forage sur plusieurs niveaux

YX273 Exemple rapport interactif et commande Window

YX280 Exemple graphique à 2 dimensions