Cours ABAP

206

Transcript of Cours ABAP

Page 1: Cours ABAP
Page 2: Cours ABAP

SOMMAIRE

I

SOMMAIRE

SOMMAIRE ....................................................................................................................................... I

Introduction à SAP ............................................................................................................................ 1 Client serveur .................................................................................................................................................. 1

Processus ......................................................................................................................................................... 1

Instances .......................................................................................................................................................... 1

Mandants ......................................................................................................................................................... 1

Premiers pas sous SAP R/3 ............................................................................................................................. 2

ABAP/4 (Advanced Business Application Programming) ............................................................................. 3

L’EDITION DE DONNEES ............................................................................................................. 7 Instruction WRITE. ......................................................................................................................................... 7

Symboles et icônes dans les listes. .................................................................................................................. 7

Spécifications de format. ................................................................................................................................. 7

Symbole de texte. ............................................................................................................................................ 8

En-tête de page. ............................................................................................................................................... 8

Rupture de page / nouvelle page. .................................................................................................................... 9

Attribut d‟édition. ............................................................................................................................................ 9

ZONES 7 .......................................................................................................................................... 10 Liste des Zones système. ............................................................................................................................... 10

TYPES DE DONNEES ................................................................................................................... 14 Types de données ABAP/4, attributs et édition. ........................................................................................... 14

DECLARATION ............................................................................................................................. 15 Déclaration des données. ............................................................................................................................... 15

Déclaration de type. ...................................................................................................................................... 15

Les tables ...................................................................................................................................................... 15

Déclaration des structures de zones. ............................................................................................................. 16

Déclaration de zones similaire. ..................................................................................................................... 16

OPERATIONS SUR LES VARIABLES ....................................................................................... 17 Affectation de valeurs. .................................................................................................................................. 17

Expressions arithmétiques. ............................................................................................................................ 17

Sous-zones. ................................................................................................................................................... 18

Opérations de chaîne.. ................................................................................................................................... 18

Opérateurs relationnels.................................................................................................................................. 19

OPERATEURS CONDITIONNELS ............................................................................................. 20 Instruction IF. ................................................................................................................................................ 20

Instruction CASE. ......................................................................................................................................... 20

Boucle DO. ................................................................................................................................................... 21

Boucle WHILE : ........................................................................................................................................... 21

Instruction CHECK. ...................................................................................................................................... 21

Instruction EXIT. .......................................................................................................................................... 21

Instruction STOP........................................................................................................................................... 21

LES TABLES ................................................................................................................................... 22 Remplir "une table à la main" ....................................................................................................................... 22

Consulter les données d‟une table "à la main" .............................................................................................. 22

Remplissage des tables internes. ................................................................................................................... 22

Tri des tables internes.................................................................................................................................... 23

Traitement des tables internes. ...................................................................................................................... 24

Lecture des entrées des tables internes. ......................................................................................................... 24

Modification des tables. ................................................................................................................................ 25

Suppression des tables................................................................................................................................... 26

Les stocks de données intermédiaires ........................................................................................................... 26

INSTRUCTIONS SELECT ............................................................................................................ 27

Page 3: Cours ABAP

SOMMAIRE

II

Instruction select 1. ....................................................................................................................................... 27

Instruction select 2. ....................................................................................................................................... 27

SELECT * FROM <tab> INTO TABLE <tabint> FOR ALL ENTRIES IN <tabint2>. .............................. 27

Maximum minimum ..................................................................................................................................... 27

LES BASES DE DONNEES LOGIQUES ..................................................................................... 28 Les bases de données logiques ...................................................................................................................... 28

Acquisition de données à l‟aide d‟une base de donnée logique. ................................................................... 28

La structure de la base de données logique F1S est la suivante : .................................................................. 29

Le programme associé à la BDL F1S est le suivant : .................................................................................... 29

Le programme concernant l'écran de sélection de F1S est: ........................................................................... 35

Les textes de sélection concernant F1S: ........................................................................................................ 36

Les matchcodes concernant la BDL F1S sont: .............................................................................................. 36

Un exemple de programme ZHENBDL1 rappelant la BDL F1S: ................................................................. 37

Deuxième exemple avec la BDL KDF. ......................................................................................................... 39

ECRAN DE SELECTION .............................................................................................................. 41 SELECT-OPTION ........................................................................................................................................ 41

Déclaration des zones avec PARAMETERS ................................................................................................ 41

SELECTION-SCREEN. ............................................................................................................................... 42

AT SELECTION-SCREEN .......................................................................................................................... 42

Création d'écrans de sélections. ..................................................................................................... 44 Programme permettant la saisie d'un vol aérien: ........................................................................................... 44

Création d'écran pour l'aide en ligne (touches F1 et F4) ............................................................................... 45

Les événements AT sous ABAP/4 ................................................................................................... 50 AT – Evénements dans les listes ................................................................................................................... 50

AT - Evénements dans les écrans de sélection .............................................................................................. 53

AT - Points de contrôle avec les stocks de données intermédiaires .............................................................. 56

AT – Points de contrôle avec les tables internes ........................................................................................... 58

LISTES ............................................................................................................................................. 61 Lecture des listes ........................................................................................................................................... 61

Modification des listes .................................................................................................................................. 61

FENETRES ...................................................................................................................................... 62 Instruction Window ....................................................................................................................................... 62

L'Object Browser ............................................................................................................................ 63 Création d'une interface de saisie .................................................................................................................. 64

Création d'un écran de commande STATUT GUI ........................................................................................ 68

Les écrans de liste. ........................................................................................................................................ 69

La transaction ................................................................................................................................................ 70

La programmation ......................................................................................................................................... 71

Le Batch Input ................................................................................................................................. 87 Le batch input................................................................................................................................................ 87

Exercice sur l'importation de données ........................................................................................................... 88

Les bons reflexes: .......................................................................................................................................... 90

Informations sur le batch input...................................................................................................................... 91

Mise en œuvre d'un dossier Batch Input ....................................................................................................... 92

Lancement du Batch Input ............................................................................................................................ 98

SAPscript .......................................................................................................................................... 99 Les formulaires ............................................................................................................................................. 99

Impression d'un formulaire : ....................................................................................................................... 104

Quelques commandes SAP pour le sapscript .............................................................................................. 105

Symboles dans SAPscript: .......................................................................................................................... 106

Fonction d'appels sous ABAP/4 ................................................................................................... 107 CALL FUNCTION 'OPEN_FORM' ........................................................................................................... 107

CALL FUNCTION 'START_FORM' ......................................................................................................... 107

Page 4: Cours ABAP

SOMMAIRE

III

CALL FUNCTION 'WRITE_FORM' ......................................................................................................... 107

CALL FUNCTION 'END_FORM' ............................................................................................................. 108

CALL FUNCTION 'CLOSE_FORM' ......................................................................................................... 108

Exercice ....................................................................................................................................................... 108

GESTION DES MESSAGES EXEMPLE ET EXPLICATIONS. .............................................................. 121

MODULARISATION ................................................................................................................... 123 Les instructions PERFORM et FORM ........................................................................................................ 123

Passage par valeurs entre paramètres réels et paramètres formels .............................................................. 123

L‟instruction SUBMIT ................................................................................................................................ 126

TRUCS ET ASTUCES .................................................................................................................. 127 Création de vues .......................................................................................................................................... 127

CREATION DE MATCHCODE. ............................................................................................................... 128

Gestion de curseurs en lecture de table ....................................................................................................... 132

Astuces lors de l‟affichage de listes ............................................................................................................ 133

COMMANDES SQL : ................................................................................................................................ 136

Affectation dynamique ................................................................................................................................ 138

Ecrire des messages. ................................................................................................................................... 140

Liste alphabétique des commandes SAP ..................................................................................... 141

Classification des mots clés par type ............................................................................................ 148 Mots clés déclaratifs : ................................................................................................................................. 148

Mots clés liés aux événements : .................................................................................................................. 148

Mots clés de contrôle : ................................................................................................................................ 148

Mots clés liés aux opérations : .................................................................................................................... 149

Commentaires ............................................................................................................................................. 151

Appel aux composantes d‟autres programmes : .......................................................................................... 151

Quelques transactions utiles à connaître ..................................................................................... 152

ANNEXE ............................................................................................................................... 154

Les codes à barres .......................................................................................................................... 154 Les codes à barres dans SAPscript et le Système de Spool. ........................................................................ 154

Impression des codes à barres. .................................................................................................................... 156

Impression OCR dans le système de SAP ................................................................................................... 156

Codes à barres et SAPWIN ......................................................................................................................... 157

Compatibilité entre le code à barres .DLL et SAPLPD ............................................................................... 158

Configuration requise .................................................................................................................................. 158

Test d‟impression des codes à barres .......................................................................................................... 158

Ajouter vos propres définition des codes à barres ....................................................................................... 159

BC410 .............................................................................................................................................. 161 Autres techniques dans Screen Painter et Menu Painter ............................................................................. 161

Mise à jour asynchrone ............................................................................................................................... 166

Concept de blocage SAP ............................................................................................................................. 170

Modification dynamique des écrans. ........................................................................................................... 172

Table Control .............................................................................................................................................. 173

Lien entre les composantes de programme. ................................................................................................ 177

Fonction d'aide automatique et programmé ................................................................................................ 178

Liste des SAPistes .......................................................................................................................... 180

Page 5: Cours ABAP

Introduction à SAP

Cours ABAP.doc Page 1 sur 181

Introduction à SAP

SAP (System Application Product in data processing) est composé de modules. Chacun est spécialisé dans un

domaine :

- MM gestion des articles, stocks, achats, fournisseurs, inventaires

- SD appel d‟offre, commande client, livraison, facture, gestion fiche client

- FICO comptabilité financière, trésorerie, investissement, contrôle de gestion

- HR gestion du personnel, salaire

- etc.…

Les modules ont des liens + ou – forts. Tous les modules ne sont pas forcément immédiatement indispensables

pour une entreprise donnée. Ils peuvent être implantés progressivement dans le temps.

Les données sont conservées dans des tables.

Le langage ABAP/4 permet de faire le lien entre les modules et de redéfinir des états standards (c‟est le

sapscript), de récupérer des données d‟une ancienne base (c‟est le batch-input), etc.

Client serveur

Le système SAP R/3 est distribué selon la technologie client/serveur. Ses composantes sont réparties sur

trois niveaux.

le site central: il fonctionne comme un serveur de base de données, c'est-à-dire qu'il contient les

processus constitutifs du service de base de données. Il abrite également le service de mise à jour

du système R/3, ce qui signifie qu'il exécute les mises à jour de la base,

la logique applicative: le site central peut être connecté à plusieurs serveurs d'application, sur

lesquels sont traitées la logique de l'application courante,

les frontaux: chaque serveur d'application peut être rattaché à plusieurs frontaux (postes de travail,

PC), sur lesquels travaillent les utilisateurs. Toutes les tâches de présentation sont réalisées sur ces

stations individuelles.

Processus

SAP fonctionne avec des processus de travail. Chacun gère un seul type de requêtes, tel que Dialog,

Background, Update, Enqueue ou Spool. (voir page 1-4 du BC400)

Instances

Une instance est une unité administrative qui regroupe les composantes d'un système R/3 assurant un ou

plusieurs services.

Un système central SAP R/3est constitué d'une instance unique, comprenant tous les services indispensables.

Chaque instance dispose de sa propre mémoire tampon SAP.

Mandants

La notion de mandant est très importante au sein de SAP. Dans le vocabulaire commercial ou technique, un

mandant est une unité intégrée du système R/3.

SAP fait la distinction entre quatre types de mandants, qui doivent être répartis dans au moins deux systèmes R/3

et jouent un rôle spécifique. Ces 4 types de mandant sont:

développement / test: permet de personnaliser ses activités, de réaliser et tester ses propres objets de

repository (repository étant un terme englobant toutes les notions de traitement sur les tables système,

transparentes, etc.),

assurance qualité: permet de tester le customizing du système R/3,

formation: Mandant sous lequel se passe les formations,

production: ce mandant reçoit les options de customizing testées et les objets de repository. Il ne faut

définir qu'un seul mandant de production.

Page 6: Cours ABAP

Introduction à SAP

Cours ABAP.doc Page 2 sur 181

En standard, SAP R/3 comprend deux mandants identiques contenant les mêmes options de customizing, mais

aucunes donnée d'application. Ainsi, le mandant 000 est le mandant de référence de SAP, modifié à chaque mise

à niveau. Il ne faut absolument pas y toucher. Pour travailler, il faut utilisez le mandant 001.

Premiers pas sous SAP R/3

Lancement du programme sur un serveur de éloigné

Lors de la connexion sur le serveur de éloigné, via l'outil de connexion SAPgui, on accède à un écran de

connexion dans lequel 4 champs sont à renseigner (voir la figure ci-contre). Le champ client demande le numéro

du mandant qui va utiliser cette connexion. Dans notre

cas, le mandant sera "900" (mandant de formation). Ce

champ est renseigné par défaut par l'outil SAPgui. Dans

notre cas, nous n'avons donc en fait que les trois

champs suivants à remplir. Dans le cadre de la

formation, les noms de login que l'on pourra utiliser

sont du type "student_N" (en majuscules ou en

minuscules), où N est un nombre compris entre 1 et 10

(dans l'exemple ci-contre, les nom de login est

"student10"). Il faut ensuite donner le mot de passe de

l'utilisateur "student10" pour accéder au progiciel SAP

R/3. Pour l'ensemble des utilisateurs "student1" à

"student10", ce mot de passe est "uniontec". Enfin, il ne

faut pas omettre de spécifier la langue que l'on veut

utiliser dans la zone "Language". Par défaut, le progiciel

utilise la langue anglaise. Pour utiliser le français, taper la lettre "F" ou "f" dans la case adéquate. Il est possible

par la suite d'omettre cette dernière case, si et seulement si on a spécifié au système R/3 que la langue par défaut

sera le français. Cette opération est à réaliser dans le menu Système Données utilisateur.

Fenêtre SAP R/3

Une fois la connexion établie, on accède à la fenêtre de base du système SAP R/3. Cette fenêtre permet de

naviguer dans l'ensemble des modules du système R/3:

bureautique,

logistique,

gestion comptable,

gestion du personnel,

systèmes information,

outils.

Dans le cadre de la formation qui nous est

proposée, nous allons étudiez le module "ABAP/4

development Workbench" (ABAP/4 = Advanced

Business Application Programming / 4 (4ème

génération)), langage de programmation conçu par

SAP, et qui permet de développer des applications de

façon interactive.

Toutes les applications développées avec

ABAP/4 development Workbench peuvent fonctionner directement sur toute plate-forme, système de base de

données ou interface utilisateur graphique gérés par SAP.

Page 7: Cours ABAP

Introduction à SAP

Cours ABAP.doc Page 3 sur 181

ABAP/4 (Advanced Business Application Programming)

Module ABAP/4

Pour accéder au module ABAP/4, il faut cliquer sur le menu déroulant Outils ABAP/4 Workbench. Il

faut alors cliquer sur le bouton "Editeur ABAP/4" pour arriver à l'éditeur tel que décrit ci-contre. Une autre

technique pour atteindre l'éditeur est d'utiliser les "OK

codes" dans la zone de saisie, située juste sous les

menus déroulants. Le code pour l'éditeur ABAP/4 est:

SE38.

Afin de créer un nouveau programme, il faut donner un

nom de programme valide (commençant par la lettre

"Z"), et comportant au maximum 8 caractères.

Les boutons à cocher, dans le menu "Sous-objets"

servent à accéder aux différentes éléments du

programme que l'on désire réaliser. Parmi ceux-ci,

"Texte source" permet l'accès au listing du programme,

"Attributs" autorise l'édition et les modifications des

attributs du programme (application, classe de

développement, ...), ou encore "Eléments de texte"

permettra d'utiliser, au sein d'un programme ABAP/4,

des variables textes qui contiendront des phrases types à afficher à l'écran. Cette technique permet alors de

changer rapidement ces phrases, dans une langue étrangère, par exemple, sans avoir à parcourir l'ensemble du

code source.

Création et édition d’un programme

Nous allons créer notre premier programme ABAP/4. Dans l'écran de la section précédente, il faut donner

un nom au nouveau programme, nom commençant obligatoirement par la lettre Z. Ceci permet de dissocier les

programmes personnels des programmes du système R/3. Dans l'exemple dont nous disposons ici, ce nom sera

"Zchen6. On appuiera alors sur le bouton , pour accéder à la fenêtre d'édition des attributs du

nouveau programme.

Pour gérer les attributs de notre programme, nous allons:

renseigner la zone Désignation (titre descriptif de l'application),

affecter à la zone Type la valeur 1 (on va créer un état),

affecter à la zone Application la valeur S (programme système),

remarque: pour connaître les valeurs que l'on peut attribuer à ces différentes zones, on peut cliquer sur la zone à

renseigner, puis appuyer sur la touche fonction F4. Cette action ouvrira une fenêtre d'aide comprenant les valeurs

accessibles ainsi qu'une brève description les concernant.

Il faut cependant savoir, en ce qui concerne les attributs d'un programme, que la zone Classe de développement

est obligatoire à renseigner. Elle permet de gérer la transportabilité du programme dans le système R/3. Dans

notre cas, cette zone est automatiquement affectée de la valeur $TMP, classe de développement n'autorisant pas

le transport des programmes. ces derniers sont alors

considérés comme des objets locaux et privés.

On sauvegarde alors le programme, puis, en cliquant

sur le bouton , on accède à l'éditeur de lignes de code

de ABAP/4 (figure ci-jointe).

Comme on peut le constater sur la figure ci-jointe, un

programme en ABAP/4 commence toujours par le mot

clé REPORT, suivi par le nom du programme (ici

ZCHEN6), et des instruction d'inclusion (dans notre

cas NO STANDARD PAGE HEADING, signifiant

que la désignation introduite dans les attributs du

programme n'apparaîtrons pas sur la surface de l'écran.

Un programme ABAP/4 est constitué d'instructions

individuelles. Chaque mot clé, dans une instruction

individuelle, est séparée du suivant par un espace.

Chaque ligne de commande se termine par un point. On peut écrire plusieurs commandes sur une même ligne, du

moment qu'elles sont séparées par des points, mais cela nuit à la lisibilité de l'ensemble du programme.

Page 8: Cours ABAP

Introduction à SAP

Cours ABAP.doc Page 4 sur 181

Une commande peut également déborder du cadre de la ligne. Cela ne dérange pas l'interpréteur, du moment

qu'il trouve bien un point à la fin de l'instruction.

On peut également créer des instructions en chaîne, en concaténant plusieurs instructions consécutives dotées

d'une partie commune, grâce au symbole ":", placé en fin de la partie commune, les parties concaténées étant

séparées par des virgules.

deux petits exemples pour clarifier les choses:

WRITE 'XYZ'.

WRITE Name1.

WRITE Counter1.

WRITE: 'XYZ', Name1, Counter1.

ADD 1 TO Counter1.

ADD 1 TO Counter2.

ADD 1 TO Counter3.

ADD 1 TO: Counter1, Counter2, Counter3.

On peut insérer deux types de commentaires en ABAP/4. Lorsqu'on désire documenter une ligne

complète, on utilisera le symbole "*" en tout première position dans la ligne. La ligne complète deviendra alors

rouge. Si l'on désire documenter une fin de ligne, derrière une instruction, on utilisera le symbole """, le

commentaire restant de la même couleur que les instructions.

Page 9: Cours ABAP

Introduction à SAP

Cours ABAP.doc Page 5 sur 181

trucs et astuces

Les retours à la page précédente s‟effectuent par le bouton ou en appuyant sur la touche la touche F3.

Si l'on n‟a pas renseigné les champs obligatoires (signalé par un ?), il est impossible de changer de page. Il

faut alors utiliser la flèche jaune vers le haut ( ).

Pour naviguer plus facilement dans les écrans, penser à double cliquer sur les noms d‟objets ; on y accède

alors directement sans passer par tous les menus (si l'objet n‟existe pas, il est alors créer).

Utiliser la Tabulation pour passer d‟une case à remplir à l‟autre.

Le bouton à la même fonction que la touche ENTREE.

Le bouton reprendre sert à sauvegarder les modifications.

Utiliser le bouton pour sauvegarder.

Utiliser le bouton pour changer de mode (basculer entre les modes affichage et modification).

Pour imprimer, allez dans le menu utilitaire téléch/télédécharger télédécharger, donner un nom de

fichier et l‟imprimer depuis un traitement de texte local (sinon l'impression se fera sur le serveur SAP)

Dans un gros programme, éviter d‟utiliser le bouton contrôler ( ). Il vaut mieux générer le programme ( )

Il est possible de copier un morceau d‟écran pour l'insérer dans un document Word par exemple. Pour cela,

cliquer sur la surface à copier, appuyer sur les touches CTRL-Y et sélectionner la zone désirée. Appuyer

ensuite sur les touches CTRL-C pour copier cette zone dans le presse-papiers de Windows.

La fonction programme Pretty printer de l‟éditeur ABAP/4, permet de réaliser l'indentation automatique

du programme en cours de développement (alignement des commandes IF ENDIF par exemple …).

Dans un pool de modules, l‟arborescence visible ne correspond pas toujours à la réalité, les dernières

modifications pouvant ne pas apparaître. Il faut alors rafraîchir l'affichage via le menu Traiter Actualiser.

Un statut déclaré en dynpro par erreur (alors qu‟on voulait le déclarer en liste) devra faire l‟objet de toutes

les attentions. Il faut bien veiller à ce que les attributs du statut correspondent au dynpro désiré (allocation

des touches de fonction par exemple).

Pour supprimer un blocage, aller dans la transaction sm12, lister l'ensemble de blocages ( ), sélectionner

le travail que l'on désire débloquer, puis le supprimer en cliquant sur le bouton .

Pour obtenir de l'aide sur une instruction posant problème, positionner le curseur dessus et appuyer sur la

touche F1.

Hotline SAP: OSS pour laisser des messages en cas de plantage dû à un bug présumé de SAP.

Programmation

Un programme au sens large du terme peut être :

un REPORT, créé à partir de l‟éditeur abap/4 [transaction SE38],

un PROGRAM, créé à partir de l‟object browser (dans un pool de modules) [transaction SE80].

Lors de la création d‟un report, choisir un type "1", et une application "S" ou "noyau système" ou "*".

Sauvegarder, puis cliquer sur le bouton . Les noms donnés à nos programmes doivent toujours commencer

par la lettre Z ou Y, et comporter au minimum 4 lettres. Il en sera de même pour tout objet créé personnellement.

Les lignes de commandes se finissent toujours par un point.

Le programme, une fois écrit, est soit contrôlé (report) soit généré (pool de modules), sauvegardé puis exécuté en

appuyant sur la touche F8 ou en passant par le menu Programme Exécuter.

Le débogueur peut être lancé de trois manières :

dans l'éditeur ABAP/4, lancer la transaction "/h", puis exécuter le programme en cours,

sous l'éditeur abap/4, préciser le nom du programme et cliquer sur le bouton ,

sous l'object browser, alors qu'est affichée l'arborescence du programme en cours, cliquer sur le

bouton puis choisir le radio bouton Débogage.

Sous le débogueur, il est possible de visualiser les variables, de les forcer à des valeurs désirées, d'exécuter le

programme pas à pas, de définir des points d‟arrêts obligatoires (double cliquer au début de la ligne souhaitée

pour placer un point d'arrêt, le supprimer via la barre de menu)

Il est également possible de créer des variantes de programmes dans l'object browser (radio bouton variante,

Znomvariante, puis bouton Créer ( ), remplir l'écran d'attributs, puis Suite). Pour lancer la variante, il suffit, de

cocher le radio bouton Variante et d'exécuter la variante.

Page 10: Cours ABAP

Introduction à SAP

Cours ABAP.doc Page 6 sur 181

Le dictionnaire

Le dictionnaire [transaction SE11] permet de visualiser la structure et le contenu (Utilitaire Contenu de table)

des tables ou d'en créer de nouvelles.

Des bugs à connaître

Se méfier de l'AT NEW avec les tables internes,

Lorsque l'on se trompe dans la définition d'un menu ( dynpro, liste, boîte de dialogue et liste dans une boîte

de dialogue) il ne suffit pas d'aller changer les attributs du menu mais aussi dans saut dialogue

Jenesaisplus .

le bouton pour un programme assez gros,

l‟insertion d‟image dans SAPSCRIPT.

Dans le Batch Input lorsque l'on passe les valeurs (dynbegin, program, dynpro, fnam, fval) il faut mettre un

clear dans le IF et dans le ELSE (idem pour le Append), car si l'on ne mets pas ça dans la boucle

conditionnelle rien ne marche.

Après ces premières informations d'ordre général sur la programmation en ABAP/4, nous allons à présent

voir les instructions mises à notre disposition pour réaliser des programmes.

Page 11: Cours ABAP

L'édition des données

Cours ABAP.doc Page 7 sur 181

L’EDITION DE DONNEES

Instruction WRITE.

WRITE <format> <valeur> <option>.

Format : /p(I)

/ Nouvelle ligne.

p Position de colonne

I Longueur d‟édition

Valeur : Valeur éditée zone ou littéral

Option : options de mise en forme, format d‟édition.

WRITE : / „*******************‟ . WRITE permet d‟éditer le contenu d‟une zone ou d‟une constante

dans le format adapté a chaque type.

SKIP 2. L‟instruction SKIP permet de générer des lignes blanches.

WRITE : „ DATE‟, sy-datum.

WRITE : „HEURE‟, sy-uzeit. Les instructions WRITE consécutive permettent d‟éditer des données sur la

même ligne. Si l‟espace est insuffisant sur la ligne, l‟édition se poursuit sur la

ligne suivante.

SKIP 2.

WRITE : / „*******************‟.

Symboles et icônes dans les listes.

INCLUDE <SYMBOL>

WRITE <zone> AS SYMBOL.

INCLUDE <LIST>

WRITE <zone> AS ICON.

Les icônes ne peuvent pas être imprimées.

Spécifications de format.

WRITE : 5 „*******************‟. L‟insertion d‟un chiffre dans l‟instruction WRITE permet de

positionner les données à la colonne souhaitée.

SKIP 2.

WRITE : 5 „ DATE‟ , 20 sy-datum.

WRITE : 5 „HEURE‟ , 20 sy-uzeit.

SKIP 2.

ULINE . ULINE génère un souligné.

Page 12: Cours ABAP

L'édition des données

Cours ABAP.doc Page 8 sur 181

Symbole de texte.

WRITE : TEXT-001, 10 sy-datum.

/ TEXT-002, 10 sy-uzeit. Rappelle dans le programme du texte 001 .

Pour gérer les symboles de texte double-cliquez sur TEXT-XXX ou alors sélectionner ELEMENTS DE TEXTE

SYMBOLE DE TEXTE.

Pour traduire dans d‟autres langues, utiliser la fonction TRADUIRE.

Pour adresser des symboles texte dans un programme : TEXT-XXX où XXX est une chaîne de trois caractères.

L‟un des avantages des symboles de texte réside dans le fait que la chaîne n‟est plus codée en dur dans le

programme ; vous pouvez donc mettre à jour le texte sans passer par le code source.

Une procédure de ce genre convient particulièrement aux logiciel multilingues.

En-tête de page.

Pour les listes, vous pouvez gérer un en-tête de liste et quatre en-têtes de colonne au plus. Pour ce faire,

sélectionner ELEMENTS DE TEXTE suivi de TITRE ET INTITULES.

Une autre manière de gérer les en-têtes d‟une liste affichée consiste à sélectionner SYSTEME LISTE

INTITULE DE LISTE. Cette méthode présente l‟avantage de faciliter le positionnement des en-têtes de colonnes

car la liste est affichée à l‟écran.

Les lignes d‟en-tête apparaîtront automatiquement dans la liste lors du lancement suivant le programme.

Si vous n‟indiquez pas d‟en-tête de liste, c‟est le titre du programme qui s‟affiche.

Vous pouvez traduire les textes dans d‟autres langues. Pour ce faire, sélectionner ELEMENT DU TEXTE

MODIFIER SAUT TRADUCTION.

Page 13: Cours ABAP

L'édition des données

Cours ABAP.doc Page 9 sur 181

Rupture de page / nouvelle page.

NEW-PAGE.

Le compteur de page est automatiquement remis à jour et les titres spécifiques au programme sont affichés à la

page suivante.

L‟instruction ne génère pas de page blanche.

Paramètres de l’instruction NEW-PAGE.

NEW-PAGE

NO-TITLE.

WITH-TITLE.

NO-HEADING.

WITH-HEADING

Attribut d’édition.

L‟instruction format gère les attributs d‟édition. Ils sont actifs dés l‟instruction write suivante.

Options Désignations Option de COLOR Désignation

INTENSIFIED

INPUT

COLOR <n>

INVERSE

Surbrillance

Modifiable en

saisie

Couleur d‟arrière

plan

Permute les

couleurs de 1er

et

d‟arrière plan

OFF

1

2

3

4

5

6

7

col_background

col_heading

col_normal

col_total

col_key

col_positive

col_negative

col_group

Arrière plan

Titre

Corps de liste

Total

Colonne clé

Valeur positive

Valeur négative

Niveau hiérarchique

Page 14: Cours ABAP

Zones système

Cours ABAP.doc Page 10 sur 181

ZONES SYTEME

Liste des Zones système.

SY-ABCDE Constante : alphabet (A,B,C,...)

SY-APPLI Applications SAP

SY-BATCH Mode batch actif.

SY-BATZD BATCH-SUBMIT : tous les jours

SY-BATZM BATCH-SUBMIT : mensuel

SY-BATZO BATCH-SUBMIT : une seule fois

SY-BATZS BATCH-SUBMIT : batch-submit immédiat

SY-BATZW BATCH-SUBMIT : hebdomadaire

SY-BINPT Batch input actif (X)

SY-BREP4 BATCH_SUBMIT : nom racine du programme d'exécution

SY-BSPLD BATCH-SUBMIT : édition de liste dans le spool

SY-CALLD Appel mode actif (X)

SY-CALLR IMPRIMER : Id. pour fonction dialogue d'impression

SY-CCURS Indication du cours/zone de résultat CURRENCY CONVERT

SY-CCURT Cours de table de l'application CURRENCY CONVERSION

SY-CDATE Date du cours de CURRENCY CONVERSION

SY-CFWAE Utilisation interne

SY-CHWAE Utilisation interne

SY-COLNO Colonne actuelle lors création de liste

SY-CPAGE Numéro de page actuel

SY-CPROG RUNTIME : programme principal

SY-CTABL Table des cours de CURRENCY CONVERSION

SY-CTYPE Type de cours "M", "B", "G" de CURRENCY CONVERSION

SY-CUCOL Position curseur (colonne)

SY-CUROW Position curseur (ligne)

SY-DATAR Témoin : donnée reçue

SY-DATLO Date locale par rapport à l'utilisateur

SY-DATUM SYSTEME : date du jour

SY-DATUT Date globale par rapport à UTC (GMT)

SY-DAYST Heure d'été active ? ("Daylight Saving Time")

SY-DBCNT Nombre éléments en quantités traitées pour les opérations BD

SY-DBNAM Base de données logiques pour programme ABAP/4

SY-DBSYS SYSTEM système base de données

SY-DCSYS SYSTEM : système dialogue

SY-DEBUG Utilisation interne

SY-DSNAM RUNTIME : nom du dataset pour l'édition spool

SY-DINGR Groupe de dynpros du dynpro actif

SY-DYNNR Numéro de l'écran actif

SY-ENTRY Utilisation interne

SY-FDAYW Jour de la semaine du calendrier d'entreprise

SY-FDPOS Chaîne caractères trouvée dans

SY-FFILE INTERNE : flatfile (USING/GENERATING DATASET)

SY-FLENG Utilisation interne (longueur de zone)

SY-FMKEY Menu code fonction actuel

SY-FODEC Utilisation interne (zone de décimales)

SY-FOLEN Utilisation interne (longueur d'édition de la zone)

SY-FTYPE Utilisation interne (type de zone)

Page 15: Cours ABAP

Zones système

Cours ABAP.doc Page 11 sur 181

SY-GROUP INTERNE : regroupement

SY-HOST Nom machine

SY-INDEX Nombre de passages de la boucle

SY-INPUT Utilisation interne

SY-LANGU Code langue de l'ouverture de la session SAP

SY-LDBPG PROGRAM : Programme de base de données ABAP/4 de SY-DBNAM

SY-LILLI Numéro de ligne de liste actuelle

SY-LINCT Nombre de lignes

SY-LINNO Ligne actuelle lors création liste

SY-LINSZ Longueur de liste

SY-LISEL INTERACT : ligne sélectionnée

SY-LISTI Numéro de ligne de liste actuelle

SY-LOCDB Base de données locale existe

SY-LOCOP Opération base de données locale

SY-LOOPC Nombre de lignes "loop" (boucle) pour steploop de dynpro

SY-LPASS Utilisation interne

SY-LSIND Numéro de la liste secondaire

SY-LSTAT INTERACT : Information statut par niveau de liste

SY-MACDB PROGRAMME : Nom du fichier permettant accès aux matchcodes

SY-MACOL Nombre de colonnes de l'instruction SET MARGIN

SY-MANDT Numéro mandant de la connexion SAP

SY-MARKY Lettre de marquage de ligne actuelle p. MARK

SY-MAROW Nombre de lignes de l'instruction SET MARGIN

SY-MODNO Nombre de modes alternatifs

SY-MSGID Id. message

SY-MSGLI INTERACT : Ligne message (ligne23)

SY-MSGNO Numéro message

SY-MSGTY Type de message (E, I, W,...)

SY-MSGV1 Variable message

SY-MSGV2 Variable message

SY-MSGV3 Variable message

SY-MSGV4 Variable message

SY-NEWPA Utilisation interne

SY-NRPAG Utilisation interne

SY-ONCOM INTERNE : on commit fLag

SY-OPSYS SYSTEM : système d'exploitation

SY-PAART IMPRIMER : mise en forme

SY-PAGCT Nombre de pages de la liste de l'instruction REPORT

SY-PAGNO page actuelle lors création de liste

SY-PAUTH Utilisation interne

SY-PDEST IMPRIMER : imprimante

SY-PEXPI IMPRIMER : durée de résidence dans le spool

SY-PFKEY RUNTIME : statut actuel des touches fonctions

SY-PLAYO Utilisation interne

SY-PLAYP Utilisation interne

SY-PLIST IMPRIMER : nom de l'ordre spool (nom de liste)

SY-PNWPA Utilisation interne

SY-PRABT IMPRIMER : service indiqué sur page de garde

SY-PRBIG IMPRIMER : page de garde de sélection

SY-PRCOP IMPRESSION : nombre d'exemplaires

SY-PRDSN IMPRIMER : nom du dataset du spool

SY-PREFX Préfixe ABAP/4 pour jobs batch

SY-PRI40 Utilisation interne

SY-PRIMM IMPRIMER : impression immédiate

SY-PRINI Utilisation interne

SY-PRLOG Utilisation interne

SY-PRNEW IMPRIMER : nouvel ordre spool (liste)

SY-PRREC IMPRIMER : destinataire

Page 16: Cours ABAP

Zones système

Cours ABAP.doc Page 12 sur 181

SY-PRREL IMPRIMER : supprimer après édition

SY-PRTXT IMPRIMER : texte de la page de garde

SY-REPI2 Utilisation interne

SY-REPID PROGRAMME : Nom du programme. ABAP/4

SY-RSTRT Utilisation interne

SY-RTITL IMPRIMER : intitulé du programme d'impression

SY-SAPRL SYSTEME : version SAP

SY-SCOLS Colonnes sur écran

SY-SFNAM non utilisé

SY-SFOFF Utilisation interne

SY-SLSET Nom du SELECTION-SET

SY-SPONO RUNTIME : numéro spool lors de l'édition d'une liste

SY-SPONR RUNTIME : numéro spool de l'instruction TRANSFER

SY-SROWS Lignes sur écran

SY-STACO INTERACT.: Liste affichée à partir colonne

SY-STARO INTERACT. : page affichée à partir ligne

SY-STEPL Numéro de la ligne "loop" (boucle) p. step dynpro

SY-SUBCS INTERNE : statut CALL du programme

SY-SUBRC Valeur confirmation après certaines instructions ABAP/4

SY-SUBTY ABAP/IV : type d'appel pour SUBMIT

SY-SYSID SYSTEM : Identification du système SAP

SY-TABID Utilisation interne

SY-TABIX Durée d'exécution : ligne actuelle d'une table interne

SY-TCODE SESSION : code transaction actuel

SY-TFDSN RUNTIME : nom du data set pour extraits de données

SY-TFILL Nombre actuel d'entrées dans table interne

SY-TIMLO Heure locale par rapport à l'utilisateur

SY-TIMUT Heure globale par rapport à UTC(GMT)

SY-TITLE PROGRAMME : Titre du programme ABAP/4

SY-TLENG Ligne d'une table interne

SY-TLOPC Utilisation interne

SY-TMAXL Nombre max. d'entrées dans la table interne

SY-TNAME Nom de la table interne après accès

SY-TOCCU Paramètre occurs pour tables internes

SY-TPAGI Code indiquant si table interne dans bloc de pagination

SY-TSTIS Utilisation interne

SY-TSTLO Horodatage (date et heure) se référant à l'utilisateur

SY-TSTUT Horodatage (date et heure) se référant à UTC (GMT)

SY-TTABC N° de la dernière ligne lue d'une table interne

SY-TTABI Décalage de la table interne dans le roll area

SY-TVAR0 RUNTIME : variable texte pour éléments de texte ABAP/4

SY-TVAR1 RUNTIME : variable texte pour éléments de texte ABAP/4

SY-TVAR2 RUNTIME : variable texte pour éléments de texte ABAP/4

SY-TVAR3 RUNTIME : variable texte pour éléments de texte ABAP/4

SY-TVAR4 RUNTIME : variable texte pour éléments de texte ABAP/4

SY-TVAR5 RUNTIME : variable texte pour éléments de texte ABAP/4

SY-TVAR6 RUNTIME : variable texte pour éléments de texte ABAP/4

SY-TVAR7 RUNTIME : variable texte pour éléments de texte ABAP/4

SY-TVAR8 RUNTIME : variable texte pour éléments de texte ABAP/4

SY-TVAR9 RUNTIME : variable texte pour éléments de texte ABAP/4

SY-TZONE Décalage horaire par rapport au temps GMT (en secondes)

SY-UCOMM INTERACT.: Saisie fonction dans code OK

SY-ULINE CONSTANT : soulignement ( ...)

SY-UNAME SESSION : Nom de l'utilisateur de la session SAP

SY-UZEIT SYSTEME: Heure

SY-VLINE CONSTANT : barre verticale

SY-WAERS T001 : devise société après lecture du segment B

SY-WILLI Numéro de ligne de la fenêtre active

Page 17: Cours ABAP

Zones système

Cours ABAP.doc Page 13 sur 181

SY-WINCO Position curseur dans fenêtre(colonne)

SY-WINDI Index de la ligne de la fenêtre active

SY-WINRO Position curseur dans la fenêtre(ligne)

SY-WINSL INTERACT.: ligne de la fenêtre sélectionnée

SY-WINX1 Coordonnées de la fenêtre (colonne de gauche)

SY-WINX2 Coordonnées de la fenêtre (colonne de droite)

SY-WINY1 Coordonnées de la fenêtre (ligne de gauche)

SY-WINY2 Coordonnées de la fenêtre (ligne de droite)

SY-WTITL Indicateur pour intitulé pages standard

SY-XCODE Code OK étendu

SY-XFORM Utilisation interne (form SY-STEM-EXIT)

SY-XPROG Utilisation interne (programme SY-STEM-EXIT)

SY-ZONLO Fuseau horaire de l'utilisateur

Page 18: Cours ABAP

Types de données

Cours ABAP.doc Page 14 sur 181

TYPES DE DONNEES

Types de données ABAP/4, attributs et édition.

Type de

Données Signification

Valeur

initiale

Longueur

Standard

Longueur

autorisée Exemple

P

I

F

N

C

D

T

X

Nombre packé

Entier

Virgule flottante

Texte numérique

Texte

Date (AAAAMMJJ)

Heure (HHMMSS)

hexadécimal

0

0

0.000…

00…0

blanc

00000000

000000

X‟00‟

8

*

*

1

1

8

6

1

1-16

-

-

1-max

1-max

8

6

1-max

579, -713, „2.17‟

917, -882

‟25.873‟, „1.213E15', „17E-6‟

„778‟, „87931‟

„AXZ‟, „B123‟, „ABCD‟

„19960221‟

„105743‟

„0FFF‟

Type de

Données

Longueur

d’édition

Standard

Edition

P

I

F

N

C

D

T

X

2*LZ

(*)

22

LZ

LZ

8

6

2*LZ

Justifié à droite

Justifié à droite

Justifié à droite

Justifié à gauche

Justifié à gauche

Justifié à gauche

Justifié à gauche

Justifié à gauche

Page 19: Cours ABAP

Déclaration

Cours ABAP.doc Page 15 sur 181

DECLARATION

Déclaration des données.

DATA : COUNTER TYPE I,

NAME1(25) VALUE „SAP‟,

START_DATE TYPE D,

FIRST_LINE TYPE I VALUE 1,

SUM1(5) TYPE P DECIMALS 2.

RECOMMANDATION :

- Toujours utiliser une lettre comme premier caractère, les autres caractères pouvant être des lettres et/ou des

chiffres.

- Le seul caractère spécial autorisé est le souligné (_), lorsque les noms comprennent plusieurs mots.

Si aucun type n‟est spécifié, la zone est par défaut de type C.

Si aucune longueur n‟est indiquée, la longueur standard du type s‟applique.

Le paramètre VALUE permet de déterminer la valeur de départ d‟une zone. Par défaut, chaque zone est

paramétrée sur une valeur initiale adaptée au type. Les constantes ne sont pas autorisées.

L‟option DECIMALS permet d‟indiquer le nombre de décimales (option réservée au type P ou 14 décimales

sont autorisées).

Déclaration de type.

TYPES : MYTYPE TYPE I,

NAME1(25),

DATE1 LIKE sy-datum, LIKE permet d‟avoir des données de même structure qu‟une

donnée connue.

SUM_FIELD TYPE P DECIMALS 2.

Les conventions d‟attribution de nom sont identiques à celles des Déclarations de données.

Pour l‟utilisation de type voir Déclaration de zones similaire.

Les tables

- Déclaration dans le programme : TABLES: Znommatab1, nomtabsyst1, nomtabsyst2.,

- il existe des tables systèmes (TSTC, ICON, TCURX, SYST, TO06, etc.) et des tables internes (qui

n'existent que durant l'exécution du programme),

- en double cliquant sur le nom d‟une table système, on accède à sa structure dans le dico,

- on peut créer un type de table :

TYPE: BEGIN OF TYPTAB1,

…,

END OF TYPTAB1.

DATA: NOMTAB1 TYPE TYPTAB1 OCCURS N. où OCCURS permet d'allouer en

mémoire n lignes pour cette table. Si N vaut 0, le système alloue dynamiquement l'espace

mémoire, au fur et à mesure du remplissage de la table,

- une déclaration sans l'instruction OCCURS permet de déclarer une structure de table. Il n'y aura

pas d‟allocation mémoire.

Page 20: Cours ABAP

Déclaration

Cours ABAP.doc Page 16 sur 181

Déclaration des structures de zones.

DATA : BEGIN OF TABINT OCCURS 0, Début de la structure.

FLAG TYPE C,

CARRID LIKE SFLIGHT-CARRID,

CONNID LIKE SFLIGHT-CONNID,

FLDATE LIKE SFLIGHT-FLDATE,

PRICE LIKE SFLIGHT-PRICE,

END OF TABINT. Fin de la structure.

Le paramètre OCCURS indique au système l‟espace mémoire qu‟il doit allouer à la table interne.

0 est le paramètre qui indique au système que l‟on ne sait pas combien il y a de lignes à prévoir pour la table

interne dans ce cas le système alloue des blocs de 8 et 16 Ko de mémoire et s‟adapte aux lignes de la table.

DATA : BEGIN OF TABINT OCCURS 0, Début de la structure.

INCLUDE STRUCTURE SFLIGHT. Création d‟une table interne étant la copie des noms des

champs de sflight.

DATA : END OF TABINT. Fin de la structure.

Déclaration de zones similaire.

TYPE : NAMETYPE1 LIKE SCUSTOM-NAME,

NAMETYPE2(25).

DATA : NAME1 TYPE NAMETYPE1,

NAME2 TYPE NAMETYPE2,

NAME3 LIKE NAME1.

Le paramètre LIKE permet de déclarer des zones dotées des mêmes attributs qu‟une zone précédemment

définie.

La zone de référence peut-être une zone interne ou une zone de base de données.

Le paramètre LIKE aide à créer des programmes facilement modifiables car il vous suffit de corriger les

attributs à un seul endroit.

Ce paramètre peut-être également utilisé lorsque vous définissez des types avec l‟instruction TYPES.

Page 21: Cours ABAP

Opérations sur les variables

Cours ABAP.doc Page 17 sur 181

OPERATIONS SUR LES VARIABLES

Affectation de valeurs.

DATA : NAME1(25),

SORT_NAME(10),

FIRST_LINE(4) TYPE N,

NEXT_LINE TYPE I.

.

.

.

MOVE „SAP‟ TO NAME1.

MOVE 5 TO FIRST_LINE.

COMPUTE NEXT_LINE = FIRST_LINE + 1.

SORT_NAME = NAME1.

ADD 1 TO NEXT_LINE.

Pour attribuer des valeurs à des zones il existe des instructions ABAP/4, dont les plus importantes sont MOVE

et COMPUTE (cette dernière est facultative).

En cas d‟incohérence de longueur ou de type entre la zone et la valeur attribuée, le système effectue une

comparaison automatique.

Pour effectuer des opérations arithmétiques simples , vous pouvez également utiliser les instructions ADD,

SUBTRACT, MULTIPLY et DIVIDE.

Expressions arithmétiques.

DATA : COUNTER TYPE I,

AMOUNT TYPE P VALUE „1000‟,

SUM TYPE P,

RESULT TYPE P,

NUMBER(2) TYPE C VALUE „99‟,

ROOT TYPE F.

COMPUTE : COUNTER = COUNTER + 2 ,

RESULT = AMOUNT * COUNTER.

SUM = RESULT + NUMBER – COUNTER.

RESULT = COUNTER * ( AMOUNT + NUMBER ).

ROOT = SQRT ( NUMBER + COUNTER ).

Le mot clé COMPUTE est facultatif.

Vous pouvez imbriquer autant d‟expressions entre parenthèses que vous le souhaitez.

Chaque opérateur et parenthèse sont interprétés comme un mot, aussi devez-vous les séparer par des blancs, sauf

les parenthèses ouvrantes des fonctions qui doivent apparaître juste à côté du nom.

Par exemple : SQRT( … )

Incorrect : a = (B+EXP(C))*E/SIN(3-G).

Correct : a = ( B + EXP( C ) ) * E / SIN( 3 – G ).

Les valeurs non numériques sont automatiquement converties en valeurs numériques avant l‟exécution de toute

opération arithmétique.

Les opérateurs DIV et MOD renvoient un résultat entier.

La fonction STRLEN retourne la longueur d‟une chaîne de caractères.

Page 22: Cours ABAP

Opérations sur les variables

Cours ABAP.doc Page 18 sur 181

Seules les expressions arithmétiques peuvent être utilisées conjointement avec l‟instruction COMPUTE.

Liste des fonctions :

SQRT, EXP, LOG, SIN, COS, STRLEN, TAN…

Opérateurs :

ADD 1 TO var. SUBTRACT 1 FROM var. MULTIPLY 1 BY var DIVIDE 1 BY var.

Sous-zones.

Elles permettent de ne traiter qu‟une partie d'une chaîne de caractères donnée.

DATA : ACCOUNT(10) TYPE C,

START LIKE SY-DATUM.

ACCOUNT = „1234567890‟.

START = „19950715‟.

WRITE : ACCOUNT+8(2), „**‟, Prend les 2 chiffres après les 8 premiers et écrit les chiffres.

START(4). Prend tous les chiffres après les 4 premiers.

START+6(2) = „01‟. Copie 01 sur les 2 chiffres suivant les 6 premiers.

ACCOUNT+6 = „9999‟. Copie 9999 après les 6 premiers.

WRITE: / ACCOUNT, „****‟, START.

Opérations de chaîne..

F1 F2 F3 G

CONCATENATE F1 F2 F3 INTO G

Valeur de code retournée pour CONCATENATE :

Sy-subrc = 0 : Le résultat tient dans la zone cible.

Sy-subrc = 4 : Le résultat est trop long pour la cible, seule la longueur définie est transférée.

Page 23: Cours ABAP

Opérations sur les variables

Cours ABAP.doc Page 19 sur 181

F1 F2 F3 G

SPLIT G AT SPACE INTO F1 F2 F3

Valeur de code retournée pour SPLIT :

Sy-subrc = 0 : Toutes les zones cibles sont suffisamment longues.

Sy-subrc = 4 : L‟une des zones cible est trop courte.

Parmi les autres commandes de traitement de chaînes, citons SEARCH, SHIFT, REPLACE, TRANSLATE et

CONDENSE.

Opérateurs relationnels.

Opérateur Signification

EQ =

NE <> ><

GT >

GE >= =>

LT <

LE <= =<

Egal

Différent

Supérieur

Supérieur ou égal

Inférieur

Inférieur ou égal

BETWEEN f1 AND f2

IS INITIAL

Plage

Valeur initiale

Page 24: Cours ABAP

Opérateurs conditionnels

Cours ABAP.doc Page 20 sur 181

OPERATEURS CONDITIONNELS

Instruction IF.

Instruction CASE.

IF <expression logique>.

ELSEIF <expression logique>.

ELSEIF <expression logique>.

ELSE.

ENDIF.

Si l‟expression logique

est vraie le traitement de

IF s‟effectue sinon le

traitement du

programme continu

après ENDIF

Si l‟expression logique est

fausse les instructions

contenues dans ELSE sont

exécutées

ELSEIF permet de mettre autant

de condition que l‟on veut

INSTRUCTIONS

INSTRUCTIONS

INSTRUCTIONS

INSTRUCTIONS

IF <expression logique>.

ENDIF.

INSTRUCTIONS

IF <expression logique>.

ELSE.

ENDIF.

INSTRUCTIONS

INSTRUCTIONS

CASE <zone>.

WHEN <valeur>.

WHEN <valeur2>.

WHEN OTHERS.

ENDCASE.

Une seule séquence

d‟instructions est traitée.

L‟instruction WHEN

OTHERS est facultative.

Une seule valeur peut suivre

WHEN. Cette valeur peut

être une constante ou le

nom de la zone contenant la

valeur.

INSTRUCTIONS

INSTRUCTIONS

INSTRUCTIONS

Page 25: Cours ABAP

Opérateurs conditionnels

Cours ABAP.doc Page 21 sur 181

Boucle DO.

DO <n> TIMES.

ENDDO.

Boucle WHILE :

WHILE <Expression logique>.

ENDWHILE.

Instruction CHECK.

CHECK <expression logique>.

Si une instruction CHECK se trouve à l‟intérieur d‟une structure de boucle et que l‟expression logique est

fausse, alors on sort de la boucle.

Si l‟instruction se trouve en dehors d‟une structure de boucle et que l‟expression logique est fausse, alors le

traitement du programme prend fin.

Instruction EXIT.

IF <expression logique>.

EXIT.

ENDIF.

Si une instruction EXIT se trouve à l‟intérieur d‟une structure de boucle et que l‟expression logique est vraie,

alors on sort de la boucle.

Si l‟instruction se trouve en dehors d‟une structure de boucle et que l‟expression logique est vraie, alors le

traitement du programme prend fin.

Instruction STOP.

Après une instruction STOP, le système termine le traitement du programme. Contrairement à l‟instruction

EXIT, le traitement END-OF-SELECTION est effectué s‟il existe.

Instructions

Vous pouvez indiquez le nombre de passages de boucles dans une constante

ou une zone.

Le paramètre <n> TIMES est facultatif.

Si vous ne le formulez pas n‟oubliez pas de mettre une instruction de fin

de boucle.

Il est possible d‟imbriquer des instructions de boucles.

Le nombre de passages n‟est pas modifiable dans la zone système

sy-index.

Instructions Tant que l‟expression logique est vrai les

instructions sont exécutées.

Page 26: Cours ABAP

Les tables

Cours ABAP.doc Page 22 sur 181

LES TABLES

Remplir « une table à la main »

Si la case à cocher "sm30 sm31" à été cochée, faire Utilitaire – Saisie entrée - Remplir les zones et faire F11

pour enregistrer la ligne de données.

Consulter les données d’une table « à la main »

Faire Utilitaire Contenu de table, puis cliquer sur pour afficher les données stockées dans la table. Il faut

faire une sauvegarde suite à chaque ligne entrée.

Remplissage des tables internes.

MOVE zone par zone.

DATA : BEGIN OF TABINT,

FLAG TYPE C,

CARRID LIKE SFLIGHT-CARRID,

CONNID LIKE SFLIGHT-CONNID,

FLDATE LIKE SFLIGHT-FLDATE,

PRICE LIKE SFLIGHT-PRICE,

END OF TABINT.

SELECT * FROM SFLIGHT …

MOVE-CORRESPONDING SFLIGHT TO TABINT.

ENDSELECT.

Il est possible aussi de faire :

SELECT * FROM SFLIGHT …

MOVE SFLIGHT TO TABINT.

ENDSELECT.

Si l‟on ne souhaite faire la copie de quelques zones :

SELECT * FROM SFLIGHT …

MOVE SFLIGHT-CARRID TO TABINT-CARRID.

MOVE SFLIGHT-CONNID TO TABINT-CONNID.

ENDSELECT.

Transfère les valeurs de

SFLIGHT dans TABINT.

Le transfert n‟est possible

que si les noms de zones

sont identiques.

Si et seulement si toutes les zones

ont même structure et même nom.

Cette instruction est plus rapide que

celle vue précédemment.

Page 27: Cours ABAP

Les tables

Cours ABAP.doc Page 23 sur 181

APPEND.

SELECT * FROM SFLIGHT …

MOVE SFLIGHT TO TABINT.

APPEND TABINT.

ENDSELECT.

SELECT * FROM SFLIGHT …

MOVE SFLIGHT TO TABINT.

APPEND TABINT SORTED BY CARRID.

ENDSELECT.

C‟est le paramètre OCCURS qui détermine le nombre maximal d‟entrées dans la table.

Si la table est saturée, les entrées qui se trouvent en fin de table sont éjectées.

COLLECT.

SELECT * FROM SFLIGHT …

MOVE SFLIGHT TO TABINT.

COLLECT TABINT.

ENDSELECT.

SELECT * FROM <tab> INTO TABLE <tabint>

Avec INTO TABLE, on fait la sélection que l‟on met directement dans la table interne.

Le WHERE se fait après, si besoin est.

Tri des tables internes.

SORT TABINT BY PRICE ASCENDING

FLDATE DESCENDING.

Le paramètre ASCENDING est facultatif.

On peut effectuer un tri sur toute une table en écrivant :

SORT tabint.

APPEND ajoute le contenu de la ligne d‟en-tête à la fin de

la table interne.

APPEND <tabint> SORTED

BY <zone> permet de générer

des listes rangées en ordre

décroissant.

COLLECT ajoute le contenu de la ligne d‟en-tête

d‟une table interne, créant ainsi une nouvelle entrée,

ou l‟ajoute à une entrée existante de même type.

Tri la table suivant la zone PRICE suivant

l‟ordre croissant et la zone FLDATE suivant

l‟ordre décroissant.

Page 28: Cours ABAP

Les tables

Cours ABAP.doc Page 24 sur 181

Traitement des tables internes.

LOOP AT <tabint> … ENDLOOP.

LOOP AT <tabint>.

ENDLOOP.

LOOP AT <tabint> WHERE <condition> … ENDLOOP.

LOOP AT <tabint> WHERE <expression logique>.

ENDLOOP.

LOOP AT <tabint> AT … ENDAT. ENDLOOP.

AT FIRST … ENDAT.

Le bloc de traitement entre AT FIRST et ENDAT est exécuté avant le début du traitement des lignes détails.

AT NEW … ENDAT.

L‟instruction AT NEW est utilisée pour sélectionner les en-têtes dans une zone.

AT NEW est exécuté dés le premier tour dans la boucle.

AT END OF … ENDAT.

L‟instruction AT END OF est utilisée pour sélectionner les bas de page dans une zone.

AT LAST … ENDAT.

Le bloc de traitement entre AT LAST et ENDAT est exécuté à la fin du traitement des lignes détails.

Lecture des entrées des tables internes.

READ TABLE <tabint> WITH KEY…

READ TABLE tabint WITH KEY „LH 0400‟.

Permet de lire la première entrée de la table interne dont les clés sont égales à „LH 0400‟.

Si l‟accès s‟est bien passé alors SY-SUBRC vaut 0, sinon une autre valeur est retournée.

READ TABLE <tabint> INDEX <i>.

Permet de lire la ligne i de la table interne.

Si l‟accès s‟est bien passé alors SY-SUBRC vaut 0, sinon une autre valeur est retournée.

Instructions

A chaque itération de la boucle les

instructions sont effectuées et le système

place l‟entrée suivante dans la ligne d‟en-tête.

Instructions La condition WHERE permet de testé

l‟entrée de la table interne.

Si aucune entrée ne satisfait l‟expression

logique alors SY-SUBRC est positionné à 0.

Page 29: Cours ABAP

Les tables

Cours ABAP.doc Page 25 sur 181

Modification des tables.

INSERT <tab> INDEX <i>.

L‟instruction génère une nouvelle entrée de la table précédant l‟entrée i à partir de la ligne d‟en-tête.

MODIFY <tab> IDEX <i>.

L‟instruction remplace l‟entrée de la table i par le contenu de la ligne d‟en-tête. L‟entrée i doit déjà exister.

DELETE.

DELETE <tab> INDEX <i>.

L‟instruction supprime l‟entrée de la table i.

DELETE <tab> WHERE …

Dans ce cas l‟instruction DELETE ne s‟applique exclusivement aux entrée de la table qui satisfont la condition.

DELETE <tab> FROM <n1> TO <n2>.

Dans ce cas toutes les entrées allant de n1 à n2 sont supprimées, y compris les limites de l‟intervalle.

Si vous ne spécifié FROM ou TO dans une instruction DELETE, soit toutes les entrées de n1 à la fin seront

supprimées, soit toutes les entrées depuis le début jusqu‟à n2 le seront.

UPDATE

UPDATE <dbtab> FROM <wa>.

UPDATE <dbtab>.

UPDATE <dbtab> SET <S1>…<Sn> WHERE <condition>.

UPDATE <dbtab> FROM TABLE <itab>.

Pour modifier une ou plusieurs lignes dans une table de base de données, utilisez l‟une des variantes suivantes de

la commande UPDATE :

Variante 1 : Le contenu de la chaîne de zones <wa> écrase la ligne de la base de données <dbtab> qui a la

même clé primaire que <wa>.

Variante 2 : Aucune chaîne de zones <wa> n‟est indiquée. L‟UPDATE est effectué sur le contenu courant de la

zone de la table de travail <dbtab>.

Variante 3 : Dans la liste <S1>…<Sn> de la clause SET, les colonnes des lignes à mettre à jour sont indiquées

et les valeurs attribuées. La clause WHERE indique la condition qui s‟applique aux lignes à mettre à jour (en

l‟absence de clause WHERE, toutes les lignes sont mises à jour).

Variante 4 : Toutes les lignes de la table interne <itab> écrasent les lignes de la base de données avec la même

clé primaire.

Page 30: Cours ABAP

Les tables

Cours ABAP.doc Page 26 sur 181

Suppression des tables.

CLEAR <tab>.

L‟instruction CLEAR <tab> initialise toutes les zones de la ligne d‟en-tête selon leur type.

REFRESH <tab>.

L‟instruction REFRESH <tab> supprime toutes les entrées de la table mais l‟espace mémoire utilisé par la table

n‟est pas libéré. La ligne d‟en-tête reste inchangée.

FREE <tab>.

L‟instruction FREE <tab> libère l‟espace mémoire utilisé par la table. La ligne d‟en-tête reste inchangée.

Les stocks de données intermédiaires

Encore appelés FIELD-GROUPs, ils évitent la redondance des données dans le cas d‟utilisation de plusieurs

tables. (page 3-15 du BC405)

Page 31: Cours ABAP

Instructions SELECT

Cours ABAP.doc Page 27 sur 181

INSTRUCTIONS SELECT

Instruction select 1.

TABLES : SBOOK. L‟instruction : tables permet d‟appeler les tables système.

SELECT * FROM SBOOK. Permet de lire toutes les entrées de la table.

WRITE :/ SBOOK-CARRID, SBOOK-CONNID. Affiche les champs de la table.

ENDSELECT. Fin de la boucle SELECT.

Instruction select 2.

TABLES : SBOOK.

SELECT * FROM SBOOK WHERE CARRID = „LH‟ . Le paramètre WHERE permet de limiter

en lecture le nombre d‟entrées de la table.

<instructions>.

ENSELECT.

IF SY-SUBRC NE 0.

<instructions>.

ENDIF. Fin de la boucle IF.

SELECT * FROM <tab> INTO TABLE <tabint> FOR ALL

ENTRIES IN <tabint2>.

EXEMPLE :

SELECT * FROM SFLIGHT

INTO TABLE TABINT

WHERE CARRID …

SELECT * FROM SBOOK

INTO TABLE TABINT2

FOR ALL ENTRIES IN TABINT

WHERE CARRID …

Maximum minimum

SELECT MAX( DISTANCE )

MIN( DISTANCE )

COUNT( * )

FROM SPFLI INTO

( MAXFIELD, MINFIELD, COUNTER ).

Si aucune entrées de la table ne satisfait la condition WHERE,

la valeur code retourné de la zone système SY-SUBRC est

positionnée sur une valeur différente de 0.

Page 32: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 28 sur 181

LES BASES DE DONNEES LOGIQUES

Les bases de données logiques

On y accède dans ABAP/4 Workbench outils développement environnement BD logique ou grâce à la

transaction SE36.

Usage: les bases de données logiques (BDL) représentent des regroupements de tables comportant une logique

d'exécution réalisant l'extraction des données désirées. Cela permet de réduire considérablement un programme,

ce dernier n'ayant qu'à faire un simple appel à cette BDL pour en obtenir les données.

Structure: une BDL se présente comme une arborescence de tables ayant des champs de clé en commun. La

première table de la BDL est appelée le nœud de la table. A chaque nouvelle table de la BDL, un ou plusieurs

champs se rajoutent à la clé (cf. l'exemple ci-dessous). Une BDL contient les 5 objets suivants :

Structure son arborescence,

Sélection déclaration de l'écran de sélection,

Programme de la BD déclaration de la logique d'exécution de la BDL,

Texte de sélection déclaration des textes de sélection des paramètres,

Sélection matchcode déclaration des objets de matchcodes.

Utilisation: on ne peut utiliser une base de donnée logique que dans les reports de type 1, application *.

L'utilisation de la BDL (nom de trois lettres) est renseignée dans les attributs du programme. Il faut alors

déclarer dans l'instruction tables le nom des tables de la BDL que l'on va utiliser. Puis, dans le programme

ABAP/4, on fait un unique appel à chaque table au moyen de l'instruction get.

get Table1 fields Champ1 Champ 2 … Champn.

Remarque: un programme ne peut faire appel qu'à une seule BDL. En revanche, une BDL peut être utilisée par

plusieurs programmes.

Acquisition de données à l’aide d’une base de donnée logique.

TABLES : SPFLI, SFLIGHT, SBOOK.

GET SPFLI.

GET SFLIGHT.

GET SBOOK FIELDS BOOKID CUSTOMID.

Traitement SPFLI

Traitement SFLIGHT

L‟événement GET assure la liaison entre le traitement du

programme et la base de données logique.

Si la base de données logique prévoit pour la table une

sélection par zones, vous pouvez spécifier pour les

événements GET uniquement les zones nécessaires au

traitement en rajoutant FIELDS <zone1><zone2>.

Page 33: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 29 sur 181

La structure de la base de données logique F1S est la suivante :

Le programme associé à la BDL F1S est le suivant :

*-------------------------------------------------------------------------------*

* DATABASE PROGRAM OF LOGICAL DATABASE F1S *

*-------------------------------------------------------------------------------*

* *

* The automatically generated subroutines (FORMs) are called by

* system routines. Therefore their names must not be changed!!!

*

* If the source code is automatically generated,

* please perform the following steps:

* 1. Replace ? by suitable ABAP statements.

* 2. Activate ABAP statements (delete stars).

* 3. Save source code.

* 4. Check syntax of database program.

* SELECT-OPTIONS and PARAMETERS will be checked automatically.

*--------------------------------------------------------------------*

*--------------------------------------------------------------------*

* Performance notes

*--------------------------------------------------------------------*

* General information about the use of logical databases is contained

* in the extended help information of transaction SE36.

* Please consider in particular the following aspects:

* 1. Use of internal tables:

* SELECT * FROM table INTO TABLE i_table WHERE ... .

* LOOP AT i_table.

* MOVE-CORRESPONDING table TO i_table.

* PUT table.

* ENDLOOP.

* 2. Use of OPEN/FETCH CURSOR for nested structures.

* 3. Use of dynamic selections to enable further selection criteria

* (cf. documentation of SELECTION-SCREEN DYNAMIC SELECTIONS).

* 4. Authority checks already at PAI of selection screen.

*--------------------------------------------------------------------*

Page 34: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 30 sur 181

PROGRAM SAPDBF1S DEFINING DATABASE F1S MESSAGE-ID AT.

TABLES: SPFLI,

SFLIGHT,

SBOOK,

SCARR.

RANGES S_FLID FOR SPFLI-CONNID.

RANGES R_CARRID FOR SPFLI-CARRID.

DATA: LINNO TYPE I. " Counter for internal table lines

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

* !!! PLEASE DO NOT CHANGE MANUALLY (BEGIN OF BLOCK) !!!!!!!!!!!! *

*--------------------------------------------------------------------------------------------------------- ----*

* Data structures for matchcode selection *

*------------------------------------------------------------------------------------------------------------- *

* F1S_MC: Matchcode values. *

* After START-OF-SELECTION table F1S_MC is filled *

* with all keys of entries of the matchcode table *

* which correspond to the search string on the selection screen. *

* There must be defined a parameter for matchcode selection *

* (e.g. PARAMETER p_mc AS MATCHCODE STRUCTURE FOR TABLE LFA1), *

* and the user must have filled all fields on the selection-screen *

* (i.e. p_mc-NAME and p_mc-STRING), *

* Table F1S_MC will be used in subroutine PUT_F1S_MATCHCODE. *

*------------------------------------------------------------------------------------------------------------- *

* DATA: BEGIN OF F1S_MC OCCURS 1000, *

* SPFLI_MANDT LIKE SPFLI-MANDT, *

* SPFLI_CARRID LIKE SPFLI-CARRID, *

* SPFLI_CONNID LIKE SPFLI-CONNID, *

* END OF F1S_MC. *

*------------------------------------------------------------------------------------------------------------- *

* MC_FIELDS: Matchcode fields. *

* After matchcode selection the table MC_FIELDS is modified: *

* MC_FIELDS-SUPPLIED NE SPACE if and only if the field *

* MC_FIELDS-FIELDNAME of F1S_MC, e.g. F1S_MC-LFA1_LIFNR, *

* is supplied by the matchcode interface. *

*------------------------------------------------------------------------------------------------------------- *

* DATA: BEGIN OF MC_FIELDS OCCURS 10. *

* INCLUDE STRUCTURE RSMCFIELDS. *

* DATA: END OF MC_FIELDS. *

*------------------------------------------------------------------------------------------------------------- *

* MC_TABLES: Matchcode tables. *

* After matchcode selection the table MC_TABLES is modified: *

* MC_TABLES-SUPPLIED NE SPACE if and only if the keys of table *

* MC_TABLES-TABNAME are supplied by the matchcode interface. *

*------------------------------------------------------------------------------------------------------------- *

* DATA: BEGIN OF MC_TABLES OCCURS 10. *

* INCLUDE STRUCTURE RSMCTABS. *

* DATA: END OF MC_TABLES. *

*------------------------------------------------------------------------------------------------------------- *

* !!! PLEASE DO NOT CHANGE MANUALLY (END OF BLOCK) !!!!!!!!!!!!!!!!! *

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

*------------------------------------------------------------------------------------------------------------- *

* BEFORE_EVENT will be called before event EVENT *

* Possible values for EVENT: 'START-OF-SELECTION' *

Page 35: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 31 sur 181

*------------------------------------------------------------------------------------------------------------- *

* FORM BEFORE_EVENT USING EVENT. *

* CASE EVENT. *

* WHEN 'START-OF-SELECTION' *

* *

* ENDCASE. *

* ENDFORM. "BEFORE_EVENT *

*------------------------------------------------------------------------------------------------------------- *

* AFTER_EVENT will be called after event EVENT *

* Possible values for EVENT: 'END-OF-SELECTION' *

*------------------------------------------------------------------------------------------------------------- *

* FORM AFTER_EVENT USING EVENT. *

* CASE EVENT. *

* WHEN 'END-OF-SELECTION' *

* *

* ENDCASE. *

* ENDFORM. "AFTER_EVENT *

*------------------------------------------------------------------------------------------------------------- *

* Initialize selection screen (processed before PBO) *

*------------------------------------------------------------------------------------------------------------- *

FORM INIT.

ENDFORM "INIT.

*-------------------------------------------------------------------------------------------------------------*

* PBO of selection screen (processed always after ENTER) *

*------------------------------------------------------------------------------------------------------------- *

FORM PBO.

CLEAR: S_FLID, LINNO.

REFRESH S_FLID.

ENDFORM. "PBO.

*------------------------------------------------------------------------------------------------------------- *

* PAI of selection screen (processed always after ENTER) *

*-------------------------------------------------------------------------------------------------------------*

FORM PAI USING FNAME MARK.

CASE FNAME.

WHEN 'CARRID'.

SELECT* FROM SCARR

WHERE CARRID IN CARRID.

AUTHORITY-CHECK OBJECT 'S_CARRID'

ID 'CARRID' FIELD SCARR-CARRID

ID 'ACTVT' DUMMY.

IF SY-SUBRC EQ 0.

R_CARRID-SIGN = 'I'.

R_CARRID-OPTION = 'EQ'.

R_CARRID-LOW = SCARR-CARRID.

APPEND R_CARRID.

ELSE.

MESSAGE E045 WITH SCARR-CARRID.

* Keine Berechtigung für Fluggesellschaft & *

ENDIF.

ENDSELECT.

WHEN '*'.

IF CITY_FR NE SPACE AND CITY_TO EQ SPACE.

SELECT * FROM SPFLI WHERE CITYFROM EQ CITY_FR.

PERFORM FILL_S_FLID.

Page 36: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 32 sur 181

ENDSELECT.

PERFORM VALID_ID.

ELSEIF CITY_FR EQ SPACE AND CITY_TO NE SPACE.

SELECT * FROM SPFLI WHERE CITYTO EQ CITY_TO.

PERFORM FILL_S_FLID.

ENDSELECT.

PERFORM VALID_ID.

ELSEIF CITY_FR NE SPACE AND CITY_TO NE SPACE.

PERFORM BBB. "Better by bus

SELECT * FROM SPFLI WHERE CITYTO EQ CITY_TO

AND CITYFROM EQ CITY_FR.

PERFORM FILL_S_FLID.

ENDSELECT.

PERFORM VALID_ID.

ENDIF.

ENDCASE.

ENDFORM. "PAI

*-------------------------------------------------------------------------------------------------------------*

* Call event GET SPFLI *

*------------------------------------------------------------------------------------------------------------- *

FORM PUT_SPFLI.

DATA L_WHERE TYPE RSDS_WHERE.

DATA L_TAB_FIELDS TYPE RSFS_TAB_FIELDS.

*Ansprechen der Tabelle *

MOVE 'SPFLI' TO L_WHERE-TABLENAME.

*Ausgewählte Felder der Tabelle + Werte *

READ TABLE DYN_SEL-CLAUSES WITH KEY L_WHERE-TABLENAME INTO L_WHERE.

* Feldselektion *

MOVE 'SPFLI' TO L_TAB_FIELDS-TABLENAME.

READ TABLE SELECT_FIELDS WITH KEY L_TAB_FIELDS-TABLENAME

INTO L_TAB_FIELDS.

SELECT (L_TAB_FIELDS-FIELDS)

INTO CORRESPONDING FIELDS OF SPFLI FROM SPFLI

WHERE CARRID IN CARRID

AND CONNID IN S_FLID

AND (L_WHERE-WHERE_TAB) ORDER BY PRIMARY KEY.

* Hauswährung *

SELECT SINGLE * FROM SCARR WHERE CARRID EQ SPFLI-CARRID.

PUT SPFLI.

ENDSELECT.

IF SY-SUBRC NE 0.

MESSAGE S038.

* Zu dieser Selektion existieren keine Daten, bitte Neueingabe. *

ENDIF.

ENDFORM. "PUT_SPFLI

*------------------------------------------------------------------------------------------------------------- *

* Call event GET SFLIGHT *

*-------------------------------------------------------------------------------------------------------------*

FORM PUT_SFLIGHT.

Page 37: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 33 sur 181

DATA L_TAB_FIELDS TYPE RSFS_TAB_FIELDS.

MOVE 'SFLIGHT' TO L_TAB_FIELDS-TABLENAME.

READ TABLE SELECT_FIELDS WITH KEY L_TAB_FIELDS-TABLENAME

INTO L_TAB_FIELDS.

SELECT (L_TAB_FIELDS-FIELDS)

INTO CORRESPONDING FIELDS OF SFLIGHT FROM SFLIGHT

WHERE CARRID = SPFLI-CARRID

AND CONNID = SPFLI-CONNID

AND FLDATE IN FLDATE ORDER BY PRIMARY KEY.

PUT SFLIGHT.

ENDSELECT.

ENDFORM. "PUT_SFLIGHT

*-------------------------------------------------------------------------------------------------------------*

* Call event GET SBOOK *

*------------------------------------------------------------------------------------------------------------- *

FORM PUT_SBOOK.

DATA L_TAB_FIELDS TYPE RSFS_TAB_FIELDS.

MOVE 'SBOOK' TO L_TAB_FIELDS-TABLENAME.

READ TABLE SELECT_FIELDS WITH KEY L_TAB_FIELDS-TABLENAME

INTO L_TAB_FIELDS.

SELECT (L_TAB_FIELDS-FIELDS)

INTO CORRESPONDING FIELDS OF SBOOK FROM SBOOK

WHERE CARRID = SFLIGHT-CARRID

AND CONNID = SFLIGHT-CONNID

AND FLDATE = SFLIGHT-FLDATE

AND BOOKID IN BOOKID ORDER BY PRIMARY KEY.

PUT SBOOK.

ENDSELECT.

ENDFORM. "PUT_SBOOK

*------------------------------------------------------------------------------------------------------------- *

* Authority Check for table SPFLI *

*------------------------------------------------------------------------------------------------------------- *

* FORM AUTHORITYCHECK_SPFLI. *

* *

* AUTHORITY-CHECK OBJECT 'S_CARRID' *

* ID 'CARRID' FIELD SPFLI-CARRID *

* ID 'ACTVT' DUMMY. *

* *

* ENDFORM. "AUTHORITYCHECK_SPFLI *

*---------------------------------------------------------------------------------------------------- ---------*

* Authority Check for table SAIRPORT *

*------------------------------------------------------------------------------------------------------------- *

* FORM AUTHORITYCHECK_SAIRPORT. *

* AUTHORITY-CHECK ... *

* ENDFORM. "AUTHORITYCHECK_SAIRPORT *

*------------------------------------------------------------------------------------------------------------- *

* Authority Check for table SFLIGHT *

*-------------------------------------------------------------------------------------------------------------*

* FORM AUTHORITYCHECK_SFLIGHT. *

* AUTHORITY-CHECK ... *

* ENDFORM. "AUTHORITYCHECK_SFLIGHT *

Page 38: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 34 sur 181

*-------------------------------------------------------------------------------------------------------------*

* Authority Check for table SBOOK *

*------------------------------------------------------------------------------------------------------------- *

* FORM AUTHORITYCHECK_SBOOK. *

* AUTHORITY-CHECK ... *

* ENDFORM. "AUTHORITYCHECK_SBOOK *

*------------------------------------------------------------------------------------------------------------- *

* PUT_F1S_MATCHCODE. *

* Processed when matchcode selection is used, *

* i.e. user input into PARAMETERS p_mc AS MATCHCODE STRUCTURE. *

*------------------------------------------------------------------------------------------------------------- *

FORM PUT_F1S_MATCHCODE.

DATA L_WHERE TYPE RSDS_WHERE OCCURS 100.

READ TABLE MC_TABLES WITH KEY 'SPFLI'.

IF MC_TABLES-SUPPLIED NE 'X'.

EXIT.

ENDIF.

SELECT * FROM SPFLI

FOR ALL ENTRIES IN F1S_MC

WHERE CARRID = F1S_MC-SPFLI_CARRID

AND CONNID = F1S_MC-SPFLI_CONNID.

* AND (L_WHERE). *

PUT SPFLI.

ENDSELECT.

ENDFORM. " PUT_F1S_MATCHCODE

INCLUDE DBF1SF01.

Page 39: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 35 sur 181

Le programme concernant l'écran de sélection de F1S est:

*------------------------------------------------------------------------------------------------------------- *

* INCLUDE DBF1SSEL *

* It will be automatically included into the database program. *

*------------------------------------------------------------------------------------------------------------- *

* *

* If the source code is automatically generated, *

* please perform the following steps: *

* 1. Replace ? by suitable names (at most 8 characters). *

* 2. Activate SELECT-OPTIONS and PARAMTERS (delete stars). *

* 3. Save source code. *

* 4. Edit database program *

* *

* Hint: Syntax-Check is not possible within this Include! *

* It will be checked during syntax-check of database program. *

* *

*------------------------------------------------------------------------------------------------------------- *

SELECTION-SCREEN BEGIN OF BLOCK ID WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS:

CARRID FOR SPFLI-CARRID.

* ? FOR SPFLI-CONNID. *

SELECTION-SCREEN END OF BLOCK ID.

* Parameter for matchcode selection (DD-structure MCPARAMS): *

PARAMETERS P_MC AS MATCHCODE STRUCTURE FOR TABLE SPFLI.

SELECTION-SCREEN BEGIN OF BLOCK FROM_TO WITH FRAME TITLE TEXT-002.

PARAMETERS: CITY_FR LIKE SPFLI-CITYFROM FOR TABLE SPFLI.

PARAMETERS: CITY_TO LIKE SPFLI-CITYTO FOR TABLE SPFLI.

SELECTION-SCREEN END OF BLOCK FROM_TO.

* SELECT-OPTIONS: ? FOR SAIRPORT-ID. *

SELECTION-SCREEN BEGIN OF BLOCK FLDATE WITH FRAME TITLE TEXT-003.

SELECT-OPTIONS:

* ? FOR SFLIGHT-CARRID, *

* ? FOR SFLIGHT-CONNID, *

FLDATE FOR SFLIGHT-FLDATE.

SELECTION-SCREEN END OF BLOCK FLDATE.

SELECTION-SCREEN BEGIN OF BLOCK BOOKID WITH FRAME TITLE TEXT-004.

SELECT-OPTIONS:

* ? FOR SBOOK-CARRID, *

* ? FOR SBOOK-CONNID, *

* ? FOR SBOOK-FLDATE, *

BOOKID FOR SBOOK-BOOKID.

SELECTION-SCREEN END OF BLOCK BOOKID.

SELECTION-SCREEN FIELD SELECTION FOR TABLE:

SPFLI,

SFLIGHT,

SBOOK.

SELECTION-SCREEN DYNAMIC SELECTIONS FOR TABLE SPFLI.

*selection-screen dynamic selections for table sairport. *

Page 40: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 36 sur 181

Les textes de sélection concernant F1S:

Les matchcodes concernant la BDL F1S sont:

Page 41: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 37 sur 181

Un exemple de programme ZHENBDL1 rappelant la BDL F1S:

Attributs:

Le programme:

REPORT ZHENBDL1 NO STANDARD PAGE HEADING MESSAGE-ID ZG.

TABLES: SPFLI, SFLIGHT, SBOOK.

GET SPFLI FIELDS CARRID CONNID CITYFROM CITYTO DEPTIME ARRTIME FLTIME.

WRITE: / SPFLI-CARRID, SPFLI-CONNID, SPFLI-CITYFROM, SPFLI-CITYTO,

SPFLI-DEPTIME, SPFLI-ARRTIME, SPFLI-FLTIME.

GET SFLIGHT FIELDS FLDATE PRICE CURRENCY.

WRITE: /10 SFLIGHT-FLDATE, SFLIGHT-PRICE CURRENCY SFLIGHT-CURRENCY,

SFLIGHT-CURRENCY.

GET SPFLI LATE.

ULINE.

GET SBOOK FIELDS BOOKID CUSTOMID CUSTTYPE.

WRITE: /20 SBOOK-BOOKID, SBOOK-CUSTOMID, SBOOK-CUSTTYPE.

Zones à

renseigner

une fois le

programme

sauvegardé.

Page 42: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 38 sur 181

Le résultat à l'écran:

Page 43: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 39 sur 181

Deuxième exemple avec la BDL KDF. Programme:

REPORT ZHENBDL2 NO STANDARD PAGE HEADING.

TABLES: LFA1, LFB1, BSIK.

DATA: TOTAL LIKE BSIK-DMBTR,

FLAG TYPE C VALUE 'X'.

START-OF-SELECTION.

WRITE: / 'AFFICHAGE DES INFOS '.

CLEAR FLAG.

TOP-OF-PAGE.

CHECK FLAG IS INITIAL.

WRITE: / LFA1-LIFNR.

GET LFA1 FIELDS LIFNR NAME1 STRAS PSTLZ ORT01.

NEW-PAGE.

WRITE: / LFA1-NAME1.

WRITE: / LFA1-STRAS UNDER LFA1-NAME1, LFA1-PSTLZ, LFA1-ORT01.

GET LFB1 FIELDS BUKRS.

WRITE: / LFB1-BUKRS.

CLEAR TOTAL.

GET BSIK FIELDS AUGDT DMBTR.

WRITE: /10 BSIK-AUGDT, 30 BSIK-DMBTR.

ADD BSIK-DMBTR TO TOTAL.

GET LFB1 LATE.

WRITE: /45 'TOTAL:', TOTAL.

ULINE.

Page 44: Cours ABAP

Les bases de données logiques

Cours ABAP.doc Page 40 sur 181

Jeu d'essai:

Traitement sbook

Page 45: Cours ABAP

Ecran de sélection

Cours ABAP.doc Page 41 sur 181

ECRAN DE SELECTION

SELECT-OPTION

SELECT OPTION <nom> FOR <zone>

DEFAULT <valeur1>

DEFAULT <valeur2> TO<valeur3>

MEMORY ID <id>

LOWER CASE

OBLIGATORY

NO EXTENSION

NO INTERVALS.

DEFAULT

Permet de paramétrer les valeurs par défaut sur l‟écran de sélection pour chaque critère de sélection (valeur

isolée ou intervalle).

MEMORY ID

Affecte des paramètres SPA/GPA. La valeur stockée dans la mémoire SPA/GPA sous l‟identification id apparaît

comme la valeur inférieure de l‟intervalle lorsque l‟écran de sélection est appelé.

LOWER CASE

Occulte la conversion des valeurs de saisie en majuscules.

NO-EXTENSION

L‟utilisateur ne peut entrer qu‟une seule valeur ou qu‟un seul intervalle pour une sélection donnée.

NO-INTERVALS

Le système n‟affiche pas de zone vers.

Déclaration des zones avec PARAMETERS

PARAMETERS <zone>.

Permet de déclarer une zone de saisie.

L‟utilisation de DEFAULT, LOWER, CASE, OBLIGATORY est possible.

PARAMETERS <zone> AS CHECBOX .

Permet de faire des cases à cocher. Les paramètres créés sont de type C et de longueur 1.

Les valeurs valables pour la zone peuvent être " " ou "X".

PARAMETERS <zone> RADIOBUTTON GROUP.

Permet de mettre des boutons d‟options. Les paramètres créés sont de type C et de longueur 1. Les valeurs

valables pour la zone peuvent être " " ou "X".

Page 46: Cours ABAP

Ecran de sélection

Cours ABAP.doc Page 42 sur 181

SELECTION-SCREEN.

SELECTION-SCREEN BEGIN OF BLOCK <bloc>

SELECTION-SCREEN BEGIN OF BLOCK <bloc>

WITH FRAME

TITLE <titre>

SELECTION-SCREEN END OF BLOCK <bloc>

WITH FRAME

Permet de mettre un cadre autour du bloc.

TITLE

Mets un titre au bloc.

SELECTION-SCREEN BEGIN OF LINE

SELECTION-SCREEN BEGIN OF LINE

COMMENT <format> <nom>

POSITION <n>

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINE

Permet d‟éditer sur une même ligne plusieurs données.

COMMENT

Permet l‟insertion de commentaires.

POSITION

Permet de mettre les données où l‟on veut sur la ligne d‟édition.

AT SELECTION-SCREEN

AT SELECTION SCREEN

ON HELP-REQUEST FOR <psel_low_high>.

CALL SCREEN …

ON VALUE-REQUEST FOR<psel_low_high>.

CALL SCREEN …

ON HELP-REQUEST FOR

L‟événement est déclenché lorsque l‟utilisateur se positionne sur le critère de sélection et demande de l‟aide

(F1).

Page 47: Cours ABAP

Ecran de sélection

Cours ABAP.doc Page 43 sur 181

ON VALUE-REQUEST FOR

L‟événement est déclenché lorsque l‟utilisateur demande les entrées possibles pour cette zone.

AT SELECTION SCREEN

ON <zone>.

ON RADIOBUTTON GROUP <grp>.

ON BLOCK <bloc>.

ON

Si une erreur se produit seule cette zone devient alors accessible.

ON BLOCK

Si une erreur se produit seules les zones de ce bloc deviennent alors accessibles

Page 48: Cours ABAP

Création d'écrans de sélections

Cours ABAP.doc Page 44 sur 181

Création d'écrans de sélections.

Programme permettant la saisie d'un vol aérien:

REPORT ZHENSCRE no standard page heading.

TABLES: SPFLI, SFLIGHT.

* Début de la zone de déclaration de l'écran de saisie. *

SELECTION-SCREEN BEGIN OF BLOCK SPFLI WITH FRAME TITLE TEXT-001.

SELECTION-SCREEN: BEGIN OF LINE,

COMMENT 1(7) TEXT-004, POSITION 10.

PARAMETERS: VILLEDEP LIKE SPFLI-CITYFROM OBLIGATORY.

SELECTION-SCREEN: COMMENT 40(9) TEXT-005, POSITION 52.

PARAMETERS: VILLEARR LIKE SPFLI-CITYTO OBLIGATORY.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK SPFLI.

SELECTION-SCREEN SKIP.

PARAMETERS: DATEVOL LIKE SFLIGHT-FLDATE.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN BEGIN OF BLOCK HORAIRES WITH FRAME TITLE TEXT-002.

SELECT-OPTIONS HDEP FOR SPFLI-DEPTIME DEFAULT SY-UZEIT TO SY-UZEIT.

SELECT-OPTIONS HARR FOR SPFLI-ARRTIME DEFAULT SY-UZEIT.

SELECTION-SCREEN END OF BLOCK HORAIRES.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN BEGIN OF BLOCK TYPE WITH FRAME TITLE TEXT-003.

PARAMETERS: PRIVAT RADIOBUTTON GROUP CLIT,

BUSINESS RADIOBUTTON GROUP CLIT DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK TYPE.

SELECTION-SCREEN SKIP 3.

SELECTION-SCREEN ULINE 25(30).

SELECTION-SCREEN SKIP.

SELECTION-SCREEN ULINE 30(20).

SELECTION-SCREEN SKIP.

SELECTION-SCREEN ULINE 35(10).

* Début du programme.

WRITE: / 'C''est parti mon Kiki'.

Page 49: Cours ABAP

Création d'écrans de sélections

Cours ABAP.doc Page 45 sur 181

Jeu d'essai correspondant:

Création d'écran pour l'aide en ligne (touches F1 et F4)

Les écrans pour l'aide en ligne se créent dans l'Object Browser, comme pour les pools de menu. Le cheminement

est:

Ouvrir le programme dans l'object Browser.

Créer un DYNPRO (Aide en ligne) pour afficher le message d'aide, en n'omettant pas de spécifier la

variable FCODE dans la "liste de zones".

Créer un STATUT GUI (MENU1100) en donnant un code de quatre lettres servant pour la variable

FCODE like SY-UCOMM.

Lier les deux dans le PBO (SET_PF_STATUS_1100).

Créer un module USER_COMMAND_1100, dans lequel on compare le FCODE.

Dans le programme principal, on fait l'appel à l'écran d'aide en utilisant l'ensemble d'instruction

suivante:

Pour F1

AT SELECTION-SCREEN ON HELP-REQUEST FOR VILLEARR.

CALL SCREEN 1100 STARTING AT 30 03 ENDING AT 70 10.

Pour F4

AT SELECTION-SCREEN ON VALUE-REQUEST FOR VILLEARR.

CALL SCREEN 1100 STARTING AT 30 03 ENDING AT 70 10.

Où VILLEARR représente le champ sur lequel porte l'aide.

Exemples d'utilisation:

REPORT ZHENSCRE no standard page heading message-id ZG.

TABLES: SPFLI, SFLIGHT.

DATA FCODE LIKE SY-UCOMM.

* Déclaration de l'écran de saisie. *

SELECTION-SCREEN BEGIN OF BLOCK SPFLI WITH FRAME TITLE TEXT-001.

SELECTION-SCREEN: BEGIN OF LINE,

COMMENT 1(7) TEXT-004, POSITION 10.

PARAMETERS: VILLEDEP LIKE SPFLI-CITYFROM OBLIGATORY.

SELECTION-SCREEN: COMMENT 40(9) TEXT-005, POSITION 52.

Page 50: Cours ABAP

Création d'écrans de sélections

Cours ABAP.doc Page 46 sur 181

PARAMETERS: VILLEARR LIKE SPFLI-CITYTO OBLIGATORY.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK SPFLI.

SELECTION-SCREEN SKIP.

PARAMETERS: DATEVOL LIKE SFLIGHT-FLDATE.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN BEGIN OF BLOCK HORAIRES WITH FRAME TITLE TEXT-002.

SELECT-OPTIONS HDEP FOR SPFLI-DEPTIME DEFAULT SY-UZEIT TO SY-UZEIT.

SELECT-OPTIONS HARR FOR SPFLI-ARRTIME DEFAULT ' ' TO SY-UZEIT.

SELECTION-SCREEN END OF BLOCK HORAIRES.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN BEGIN OF BLOCK TYPE WITH FRAME TITLE TEXT-003.

PARAMETERS: PRIVAT RADIOBUTTON GROUP CLIT,

BUSINESS RADIOBUTTON GROUP CLIT DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK TYPE.

SELECTION-SCREEN SKIP 3.

SELECTION-SCREEN ULINE 25(30).

SELECTION-SCREEN SKIP.

SELECTION-SCREEN ULINE 30(20).

SELECTION-SCREEN SKIP.

SELECTION-SCREEN ULINE 35(10).

* DEBUT DU PROGRAMME.

AT SELECTION-SCREEN ON HELP-REQUEST FOR VILLEARR.

CALL SCREEN 1100 STARTING AT 30 03 ENDING AT 70 10.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR VILLEARR.

CALL SCREEN 1200 STARTING AT 30 03 ENDING AT 70 10.

AT SELECTION-SCREEN ON DATEVOL.

IF DATEVOL LT SY-DATUM.

MESSAGE I016.

ENDIF.

END-OF-SELECTION.

WRITE: / 'C''est parti mon Kiki'.

* Fin du programme. *

INCLUDE ZHENSO01.

INCLUDE ZHENSI01.

Avec les includes suivants:

*----------------------------------------------------------------------------------------------------------- *

*INCLUDE ZHENSI01 . *

*& Module USER_COMMAND_1100 INPUT *

*&---------------------------------------------------------------------------------------------------------*

* text *

*----------------------------------------------------------------------------------------------------------- *

MODULE USER_COMMAND_1100 INPUT.

CASE FCODE.

WHEN 'OKAY'.

LEAVE TO SCREEN 0.

Page 51: Cours ABAP

Création d'écrans de sélections

Cours ABAP.doc Page 47 sur 181

WHEN 'ECIT'.

LEAVE TO SCREEN 0.

ENDCASE.

ENDMODULE. " USER_COMMAND_1100 INPUT

Et:

*----------------------------------------------------------------------------------------------------------- *

*INCLUDE ZHENSO01 . *

*-----------------------------------------------------------------------------------------------------------*

*&---------------------------------------------------------------------------------------------------------*

*& Module SET_PF_STATUS_1100 OUTPUT *

*&---------------------------------------------------------------------------------------------------------*

* text *

*----------------------------------------------------------------------------------------------------------- *

MODULE SET_PF_STATUS_1100 OUTPUT.

SET PF-STATUS 'MENU1100'.

ENDMODULE. " SET_PF_STATUS_1100 OUTPUT

DYNPRO 1100 et DYNPRO 1200 (identiques dans le contenu):

PROCESS BEFORE OUTPUT.

* MODULE STATUS_1100. *

MODULE SET_PF_STATUS_1100.

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_1100. *

MODULE USER_COMMAND_1100.

Page 52: Cours ABAP

Création d'écrans de sélections

Cours ABAP.doc Page 48 sur 181

Jeux d'essais:

Pour F1:

Pour F4:

Page 53: Cours ABAP

Création d'écrans de sélections

Cours ABAP.doc Page 49 sur 181

Pour les messages d'erreur

Remarques:

Imbrication d'écran La création d'un écran de sélection est unique pour un programme. Il faut donc y faire apparaître toutes les

données nécessaires au bon fonctionnement du programme.

Il est cependant possible de faire appel à un voir plusieurs autres écrans de sélections lors de l'appel à des sous-

programmes externes possédant leur propre écran de sélection. L'appel au sous-programme en forçant le passage

par son écran de sélection se fait grâce à l'instruction:

SUBMIT Sous-Programme VIA SELECTION-SCREEN AND RETURN.

Valeurs par défaut Il est possible, comme le montre le programme, d'affecter une variable par défaut à chaque type intervenant dans

les écrans de sélection (PARAMETERS, SELECT-OPTIONS, RADIOBUTTON, CHECKBOX). Il faut

cependant faire attention à l'intervalle de valeurs données aux SELECT-OPTIONS, l'ordre croissant étant de

stricte rigueur.

Comments Lors de l'écriture de plusieurs paramètres sur une même ligne, il faut bien faire attention à ne pas faire déborder

les éléments de la ligne, les paramètres disparaissant alors de l'écran, ce qui peut être très gênant.

Page 54: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 50 sur 181

Les événements AT sous ABAP/4

AT – Evénements dans les listes

Variantes: 1. AT LINE-SELECTION.

2. AT USER-COMMAND. 3. AT PFn.

Variante 1 AT LINE-SELECTION.

Cet événement est traité lorsque l'utilisateur choisit une ligne valide dans la liste (c'est à dire une ligne générée

par une instruction comme WRITE, ULINE ou SKIP) avec la souris et appuie sur la touche fonction définie

avec le code fonction PICK dans la définition de l'interface. Cela correspondant généralement à la touche

fonction F2, car elle a le même effet que le double click de la souris, ou le click simple dans le cas d'une touche

fonction.

Le traitement lié à l'événement AT LINE-SELECTION génère habituellement l'affichage d'une liste

complémentaire (liste détaillée) qui recouvre entièrement l'affichage de la liste courante. Si vous voulez que cette

liste reste visible (pour faciliter la navigation de l'utilisateur), vous pouvez le faire grâce au mot clé WINDOW.

Dans la plupart des cas, l'information issue de la ligne sélectionnée est utilisée pour faire ressortir des

informations beaucoup plus détaillées par lecture directe. Lors de l'affichage de la liste originelle, vous

sauvegardez les mots clés nécessaires à la navigation dans la zone HIDE de la ligne de sortie.

Note: on peut choisir une ligne et recommencer un nouveau traitement dans la liste détaillée. Les zones système

suivantes sont très utiles pour la navigation, car leurs valeurs évoluent lors de chaque exécution d'un événement

interactif.

SY-LSIND Index de la liste créée par l'événement courant (liste initiale = 0, 1ère liste détaillée = 1, ...),

SY-PFKEY Statut de la liste affichée (SET PF-STATUS),

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

SY-LILLI Numéro absolu de la ligne sélectionnée dans la liste affichée,

SY-LISTI Index de cette liste - habituellement SY-LSIND - 1 (READ LINE),

SY-CUROW Position du curseur: numéro de la ligne dans la fenêtre,

SY-CUCOL Position du curseur: numéro de la colonne dans la fenêtre (GET CURSOR),

SY-CPAGE 1ère

page écran de la liste affichée,

SY-STARO 1ère

ligne affichée de la page écran courante de la liste affichée,

SY-STACO 1ère

colonne affichée de la liste affichée (SCROLL LIST).

La zone système SY-LSIND définit le niveau de sélection de ligne (liste initiale: SY-LSIND = 0).

Exemple:

DATA TEXT(20).

START-OF-SELECTION.

PERFORM WRITE_AND_HIDE USING SPACE SPACE.

AT LINE-SELECTION.

CASE TEXT.

WHEN 'List index'.

PERFORM WRITE_AND_HIDE USING 'X' SPACE.

WHEN 'User command'.

PERFORM WRITE_AND_HIDE USING SPACE 'X'.

WHEN OTHERS.

SUBTRACT 2 FROM SY-LSIND.

PERFORM WRITE_AND_HIDE USING SPACE SPACE.

ENDCASE.

CLEAR TEXT.

Page 55: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 51 sur 181

FORM WRITE_AND_HIDE USING P_FLAG_LSIND P_FLAG_UCOMM.

WRITE / 'SY-LSIND:'.

PERFORM WRITE_WITH_COLOR USING SY-LSIND P_FLAG_LSIND.

TEXT = 'List index'.

HIDE TEXT.

WRITE / 'SY-UCOMM:'.

PERFORM WRITE_WITH_COLOR USING SY-UCOMM P_FLAG_UCOMM.

TEXT = 'User command'.

HIDE TEXT.

IF SY-LSIND > 0.

WRITE / 'PICK pour remonter d'un niveau dans la liste'.

ENDIF.

ENDFORM.

FORM WRITE_WITH_COLOR USING P_VALUE P_FLAG_POSITIVE.

IF P_FLAG_POSITIVE = SPACE.

WRITE P_VALUE COLOR COL_NORMAL.

ELSE.

WRITE P_VALUE COLOR COL_POSITIVE.

ENDIF.

ENDFORM.

Selon que l'on sélectionne la ligne avec SY-LSIND ou SY-UCOMM, la liste détaillée suivante contient la valeur

correspondante avec son attribut de couleur "positif". Si la ligne est sélectionnée sans information HIDE, le

niveau de liste est réduit.

Variante 2 AT USER-COMMAND.

Effet: événement dans un report interactif.

Cet événement est exécuté à n'importe quel moment lorsque l'utilisateur appuie sur une touche de fonction dans

la liste ou réalise une entrée dans le champ de commande.

Certaines fonctions sont exécutées directement par le système et ne peuvent donc être traitées par

programmation. Cela inclut:

PICK Voir la variante AT LINE-SELECTION

PFn Voir la variante AT PFn

/... Commande système

%... Commande système

PRI Print

BACK Back

RW Cancel

P... Fonction de scrolling (e. g.: P+, P-, PP+3, PS etc.)

A la place de cette fonction, vous pouvez utiliser l'instruction SCROLL dans les programmes.

Puisque beaucoup de ces codes fonctions système commencent avec la lettre "P", vous devriez éviter d'utiliser

cette lettre pour commencer vos propres codes fonction.

D'autre part, l'effet est identique à AT LINE-SELECTION, c'est à dire que le code fonction courant est

sauvegardé dans la zone système SY-UCOMM.

Page 56: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 52 sur 181

Exemple:

DATA: NUMBER1 TYPE I VALUE 20,

NUMBER2 TYPE I VALUE 5,

RESULT TYPE I.

START-OF-SELECTION.

WRITE: / NUMBER1, '?', NUMBER2.

AT USER-COMMAND.

CASE SY-UCOMM.

WHEN 'ADD'.

RESULT = NUMBER1 + NUMBER2.

WHEN 'SUBT'.

RESULT = NUMBER1 - NUMBER2.

WHEN 'MULT'.

RESULT = NUMBER1 * NUMBER2.

WHEN 'DIVI'.

RESULT = NUMBER1 / NUMBER2.

WHEN OTHERS.

WRITE 'Code fonction inconnu'.

EXIT.

ENDCASE.

WRITE: / 'Résultat:', RESULT.

Suite à la saisie d'un code fonction, le traitement approprié est réalisé sous l'événement AT USER-COMMAND

et le résultat est affiché dans la liste détaillée.

Variante 3 AT PFn.

Effet: événement dans un report interactif.

La variable correspond à une valeur numérique comprise entre 0 et 99.

Cette événement est exécuté lorsque l'utilisateur appuie sur une touche fonction qui contient le code fonction

PFn dans la définition de l'interface. Le statut par défaut pour les listes contient certaines de ces fonctions.

D'autre part, l'effet est identique à AT LINE-SELECTION. Le curseur peut être sur n'importe quelle ligne.

Notes: 1. pour s'assurer que la fonction choisie ne s'exécute que pour les lignes valides, on peut tester

l'information courante de l'instruction HIDE,

2. cette variante ne devrait être utilisée que pour des besoins de test ou de prototypage, puisque le statut

par défaut n'est pas utilisé normalement. A la place, on devrait définir un statut spécifique pour chaque

programme ou écran, avec l'instruction SET PF-STATUS. Il ne doit alors contenir aucun code fonction

commençant par les lettres "PF".

Exemple:

DATA NUMBER LIKE SY-INDEX.

START-OF-SELECTION.

DO 9 TIMES.

WRITE: / 'Colonne', (2) SY-INDEX.

NUMBER = SY-INDEX.

HIDE NUMBER.

ENDDO.

AT PF8.

CHECK NOT NUMBER IS INITIAL.

WRITE: / 'Le curseur est en colonne', (2) NUMBER.

CLEAR NUMBER.

Page 57: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 53 sur 181

AT - Evénements dans les écrans de sélection

Instruction de base: AT SELECTION-SCREEN.

Additions: 1. ... ON psel

2. ... ON END OF sel

3. ... ON VALUE-REQUEST FOR psel_low_high

4. ... ON HELP-REQUEST FOR psel_low_high

5. ... ON RADIOBUTTON GROUP radi

6. ... ON BLOCK block

7. ... OUTPUT

Effet: cet événement n'a de sens que dans les reports, c'est à dire dans les programmes d'attribut de type 1. Ces

programmes de type 1 possèdent toujours un écran de sélection dans lequel l'utilisateur peut spécifier des

sélections de données. L'événement est traité lorsque l'écran de sélection a été renseigné. Si un message d'erreur

(MESSAGE Emnr) est envoyé pendant l'événement, tous les champs de l'écran de sélection redeviennent prêts

pour la saisie. Une fois cette opération réalisée, AT SELECTION-SCREEN est exécuté à nouveau.

Note: on ne devrait réaliser que des tests relativement importants avec AT SELECTION-SCREEN si le

programme est ensuite lancé (et non pas à chaque fois que l'utilisateur appuie sur ENTER). A ce stade, on peut

lire la zone système SSCRFIELDS-UCOMM (si et seulement si un état TABLES SSCRFIELDS existe). Si le

champ a une de ces deux valeurs 'ONLI' (= exécute) or 'PRIN' (= exécute et imprime), le report est alors lancé,

c'est à dire l'écran de sélection est fermé et le traitement continue avec l'événement START-OF-SELECTION.

Il faut se rappeler que l'écran de sélection (et ainsi AT SELECTION-SCREEN également) est aussi traité dans

différentes "maintenance" (?) et aussi avec l'instruction SUBMIT VIA JOB. On peut déterminer lequel de ces

processus est utilisé en appelant le module de fonction RS_SUBMIT_INFO.

Addition 1 ... ON psel

Effet: cet événement est assigné aux champs de l'écran de sélection correspondant au paramètre de report ou au

critère de sélection psel.

Si le report lance une erreur à ce stade, ce sont précisément ces champs qui deviennent prêt pour la saisie.

Addition 2 ... ON END OF sel

Effet: pour chaque critère de sélection sel dans l'écran de sélection, on peut appeler un écran suivant en appuyant

sur un bouton de commande. Sur ce nouvel écran, on peut entrer n'importe quel nombre de type valeur ou

intervalle pour le critère de sélection sel.

Lorsque cet écran a été traité, (c'est à dire à la fin du PAI de cet écran), l'événement AT SELECTION-

SCREEN ON END OF sel est exécuté.

A ce stade, toutes les valeurs saisies sont disponibles dans la table interne sel.

Addition 3 ... ON VALUE-REQUEST FOR psel_low_high

Effet: avec cette option, le champ psel_low_high représente soit le nom d'un paramètre de report, soit le nom de

l'objet sel-LOW ou sel-HIGH, où sel est le nom du critère de sélection. Son effet est double:

1. le bouton pour les entrées possibles de la touche F4 apparaît sous le champ approprié,

2. lorsque l'utilisateur active ce bouton ou appuie sur la touche F4 pour le champ, l'événement est exécuté.

On peut alors implémenter une routine personnelle affichant les entrées possibles pour les champs d'entrées-

sorties de l'écran de sélection. Si le programme contient un tel événement et que l'utilisateur appuie sur la touche

F4, le système le traite plutôt que d'afficher la table de test ou les valeurs prédéfinies du champ du Dictionnaire –

même si le paramètre de report ou l'option de sélection avec LIKE ou FOR pointe vers un champ du

Dictionnaire. On peut , par exemple, utiliser l'instruction CALL SCREEN pour afficher une liste de sélection

des valeurs possibles. Le contenu des champ psel_low_high à la fin de ce block de traitement est copié vers les

champs d'entrée-sortie appropriés.

Page 58: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 54 sur 181

Cet option n'est autorisée qu'avec des paramètres de report spécifiques (PARAMETERS) ou des options de

sélection (SELECT-OPTIONS). Pour des paramètres de base de données spécifiques ou des options de

sélection, on peut réaliser le même effet en utilisant l'option VALUE-REQUEST FOR ... avec le mot clé

PARAMETERS ou SELECT-OPTIONS dans l'include DBxyzSEL (où xyz = nom de la base de données

logique). Dans ce cas, on doit programmer les entrées possibles dans le programme de base de données

SAPDBxyz.

Addition 4 ... ON HELP-REQUEST FOR psel_low_high

Effet: comme avec l'option ON VALUE-REQUEST, le champ psel_low_high représente soit le nom d'un

paramètre de report, soit le nom de l'objet sel-LOW ou sel-HIGH, où sel est le nom du critère de sélection.

Lorsque l'utilisateur appuie sur la touche F1 dans le champ adéquat, le block de traitement associé est exécuté.

On peut ainsi implémenter une aide en ligne personnelle concernant les champs d'entrées-sorties de l'écran de

sélection. Si le programme contient un tel événement et que l'utilisateur appuie sur la touche F1, le système traite

cela plutôt que d'afficher la documentation relative au champ du Dictionnaire – même si le paramètre de report

ou l'option de sélection avec LIKE ou FOR pointe vers un champ du Dictionnaire.

Cet option n'est autorisée qu'avec des paramètres de report spécifiques (PARAMETERS) ou des options de

sélection (SELECT-OPTIONS). Pour des paramètres de base de données spécifiques ou des options de

sélection, on peut réaliser le même effet en utilisant l'option HELP-REQUEST FOR ... avec le mot clé

PARAMETERS ou SELECT-OPTIONS dans l'include DBxyzSEL (où xyz = nom de la base de données

logique). Dans ce cas, on doit programmer l'aide dans le programme de base de données SAPDBxyz.

Note: si psel_low_high est un PARAMETER, l'événement AT SELECTION-SCREEN ON psel_low_high est

aussi exécutée si l'utilisateur appuie sur F1 dans le champ de texte de psel_low_high ou sur un commentaire

appartenant à psel_low_high (SELECTION-SCREEN COMMENT ... FOR FIELD psel_low_high).

Addition 5 ... ON RADIOBUTTON GROUP radi

Effet: cet événement est assigné à un groupe de radio boutons de l'écran de sélection défini par l'instruction

suivante PARAMETERS par RADIOBUTTON GROUP radi.

Si le report lance un dialogue d'erreur à ce stade, ce sont précisément ces champs du groupe de radio boutons

radi qui redeviennent prêts pour une nouvelle saisie.

Addition 6 ... ON BLOCK block

Effet: cet événement est assigné à un blocks dans un écran de sélection défini par l'instruction suivante

SELECTION-SCREEN BEGIN/END OF BLOCK block.

Si le report lance un dialogue d'erreur à ce stade, ce sont précisément ces champs du block block qui

redeviennent prêts pour une nouvelle saisie.

Note: dans quelle séquence les événements AT SELECTION-SCREEN ON psel ..., AT SELECTION-

SCREEN ON RADIOBUTTON GROUP ..., AT SELECTION-SCREEN ON BLOCK ..., AT

SELECTION-SCREEN sont-ils traités? L'événement AT SELECTION-SCREEN ON psel ... assigné aux

paramètres ou aux options de sélection sont exécutées dans la séquence dans laquelle ils sont déclarés dans le

programme, c'est à dire dans la séquence où ils apparaissent dans l'écran de sélection. Les événements assignés

aux groupes de radio boutons sont exécutés en relation avec le premier paramètre du groupe de radio boutons.

Les événements assignés à des blocks sont exécutés "de l'intérieur vers l'extérieur".

Page 59: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 55 sur 181

Exemple:

SELECT-OPTIONS SEL0 FOR SY-TVAR0.

SELECTION-SCREEN BEGIN OF BLOCK BL0.

SELECT-OPTIONS SEL1 FOR SY-TVAR1.

SELECTION-SCREEN BEGIN OF BLOCK BL1.

PARAMETERS P0 RADIOBUTTON GROUP RADI.

PARAMETERS P1 RADIOBUTTON GROUP RADI.

SELECTION-SCREEN BEGIN OF BLOCK BL2.

PARAMETERS P3.

SELECTION-SCREEN END OF BLOCK BL2.

SELECT-OPTIONS SEL2 FOR SY-TVAR2.

SELECTION-SCREEN END OF BLOCK BL1.

SELECTION-SCREEN END OF BLOCK BL0.

Séquence:

AT SELECTION-SCREEN ON...

SEL0

SEL1

RADIOBUTTON GROUP RADI

P3

BLOCK BL2

SEL2

BLOCK BL1

BLOCK BL0.

AT SELECTION-SCREEN est exécuté tout à la fin.

Addition 7 ... OUTPUT

Effet: cet événement est exécuté dans le PBO d'un écran de sélection à chaque fois que l'utilisateur appuie sur la

touche ENTER – contrairement à INITIALIZATION. De ce fait, cet événement n'est pas utilisable pour définir

les valeurs par défaut de l'écran de sélection. De plus, puisque AT SELECTION-SCREEN OUTPUT est

exécuté en premier après l'importation de la variante (si une variante est utilisée) et après avoir adopté toutes les

valeurs spécifiées sous SUBMIT, dans la clause WITH, changer les paramètres du report ou les options de

sélection dans AT SELECTION-SCREEN OUTPUT détruira les valeurs spécifiées.

Cependant, on peut utiliser LOOP AT SCREEN ou MODIFY SCREEN pour changer les attributs d'entrées-

sorties des champs de l'écran de sélection.

Exemple: affiche tous les champs de SELECT-OPTION NAME en sur brillance

SELECT-OPTIONS NAME FOR SY-REPID MODIF ID XYZ.

...

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.

CHECK SCREEN-GROUP1 = 'XYZ'.

SCREEN-INTENSIFIED = '1'.

MODIFY SCREEN.

ENDLOOP.

L'option MODIF ID XYZ ajoutée à SELECT-OPTIONS assigne tous les champs de l'option de sélection

NAME à un groupe que l'on peut atteindre par le champ SCREEN-GROUP1. Dans le PBO de l'écran de

sélection, tous ces champs sont alors mis en sur brillance.

Note: dans le contexte de traitement par événement dans les écrans de sélection, l'instruction SET PF-STATUS

ne fonctionne pas. Il faut alors définir un statut en utilisant l'un des deux modules de fonction suivants:

RS_SET_SELSCREEN_STATUS ou RS_EXTERNAL_SELSCREEN_STATUS.

Page 60: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 56 sur 181

AT - Points de contrôle avec les stocks de données intermédiaires

Variantes: 1. AT NEW f.

2. AT END OF f.

3. AT FIRST.

4. AT LAST.

5. AT fg.

Effet: dans une boucle traitant un stock de données intermédiaires créé avec EXTRACT, on peut utiliser des

structures de contrôle spéciales pour le traitement des points de contrôle. Toutes ces structures commence par

AT et finissent par ENDAT. La séquence d'instructions comprise entre ces deux lignes est exécutée à chaque

fois qu'un point de contrôle est rencontré.

On peut utiliser ces mots clé pour le traitement de contrôles d'un ensemble de données extrait uniquement si la

boucle LOOP active est en train de traiter un stock de données intermédiaires.

La structure de niveau de contrôle pour les stocks de données intermédiaires est dynamique. Cela correspond

exactement à l'instruction SORT du stock de données intermédiaires, c'est à dire à l'ordre des champs dans le

HEADER du stock de données intermédiaires selon lequel il a été trié.

A la fin d'un groupe de contrôle (AT END OF, AT LAST), il y a deux types d'information sur les niveaux de

contrôle entre AT et ENDAT:

- si la clé de tri du stock de données intermédiaires contient un champ h non-numérique (particulièrement dans le

HEADER du stock de données intermédiaires), le champ CNT(h) contient le numéro des points de contrôle dans

le (subordonné) niveau de contrôle h,

- pour les champs numériques extraits g (voir aussi "Les types numériques sous ABAP/4), le champ

SUM(g) contient comme contrôle le total relatif au champ g.

Notes: 1. les champs CNT(h) et SUM(g) ne peuvent être adressés qu'après avoir été triés. Sinon une erreur

d'exécution peut survenir.

2. les champs CNT(h) et SUM(g) sont remplis avec les valeurs correspondantes aux niveaux de

contrôle à la fin de chaque groupe à contrôler (AT END OF, AT LAST), et non pas au début (AT

FIRST, AT NEW).

3. lorsqu'il calcule des totaux avec SUM(g), le système choisit automatiquement la taille maximale

des champs afin d'éviter un débordement, sauf si les limites absolues des zones de valeur sont

dépassées.

4. on peut aussi utiliser des structures de contrôle des points de contrôle avec des boucles sur les tables

internes.

Page 61: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 57 sur 181

Variante 1 AT NEW f. Variante 2 AT END OF f.

Effet: f est un champ du HEADER du stock de données intermédiaires. La séquence d'instruction est exécutée

si:

- le champ f apparaît dans la clé de tri du stock de données intermédiaire (et donc dans son HEADER) et,

- le champ f ou un critère de sélection plus élevé prend une valeur différente, dans boucle LOOP, que

dans l'enregistrement précédent (AT NEW) ou suivant (AT END OF) du stock de données

intermédiaires.

Exemple:

DATA: NAME(30),

SALES TYPE I.

FIELD-GROUPS: HEADER, INFOS.

INSERT: NAME INTO HEADER,

SALES INTO INFOS.

...

LOOP.

AT NEW NAME.

NEW-PAGE.

ENDAT.

...

AT END OF NAME.

WRITE: / NAME, SUM(SALES).

ENDAT.

ENDLOOP.

Notes: 1. si le stock de données intermédiaires n'est pas trié avant le traitement avec une boucle

LOOP, aucune structure de niveau de contrôle n'est définie et l'instruction suivant AT NEW

ou AT END OF ne sont pas exécutées.

2. Les champs valant 0 en hexadécimal (champs vides) sont ignorés par le test de point

contrôle avec AT NEW ou AT END OF. Cela correspond au comportement de l'instruction

SORT, qui place toujours les champs vides (c'est à dire les champs valant 0 en hexadécimal)

avant les champs remplis lors du tri des stocks de données intermédiaires, suivant que le tri soit

croissant ou décroissant.

Page 62: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 58 sur 181

Variante 3 AT FIRST. Variante 4 AT LAST.

Effet: exécute la série d'instruction correspondante une seule fois – soit au premier passage dans la boucle (avec

AT FIRST) soit lors du dernier passage dans la boucle (avec AT LAST).

Variante 5 AT fg.

Addition: ... WITH fg1

Effet: cette instruction réalise un seul traitement dépendant du type d'enregistrement extrait.

La séquence d'instruction après AT fg est exécutée à chaque fois qu'un enregistrement est crée dans la boucle

avec EXTRACT fg (en d'autre termes, lorsque l'enregistrement en cours est de type fg).

Addition ... WITH fg1

Effet: exécute la séquence d'instructions appartenant à AT fg WITH fg1 seulement si l'enregistrement de fg dans

le stock de données intermédiaire est immédiatement suivi par un enregistrement de fg1.

AT – Points de contrôle avec les tables internes

Variantes: 1. AT NEW f.

2. AT END OF f.

3. AT FIRST.

4. AT LAST.

Effet: dans une boucle de traitement de tables internes, on peut utiliser ces structures de contrôle spéciales pour

le traitement de points de contrôles. Toutes ces structures commencent avec AT et finissent avec ENDAT. La

séquence d'instruction comprise entre ces deux lignes est alors exécutée si un point de contrôle apparaît.

On ne peut utiliser ces structures de contrôle avec les tables internes que si une boucle en train de traiter une

table interne.

La structure de contrôle de niveau est statique pour les tables internes. Cela correspond exactement à la séquence

des colonnes de la table interne (de la gauche vers la droite).Dans ce contexte, le critère de tri de la table interne

n'a pas d'importance.

Au début d'un nouveau contrôle (i.e. tout de suite après AT), les zones de sortie de l'instruction LOOP en cours

sont traités comme suit:

- tous les champs clé par défaut (vers la droite) sont rempli avec "*" après la clé de contrôle en cours,

- tous les autres champs (vers la droite) sont réinitialisées à leur valeur originelle après la clé de contrôle

en cours.

Entre AT et ENDAT, on peut utiliser l'instruction SUM pour réaliser un contrôle sur les totaux de l'ensemble

des champs numériques (voir également les types numérique sous ABAP/4) dans les zones de sortie du LOOP

(vers la droite) après la clé de contrôle en cours. L'addition est possible aussi bien au début (AT FIRST, AT

NEW f) qu'à la fin (AT END OF f, AT LAST) d'un niveau de contrôle.

A la fin du traitement du contrôle (i.e. après ENDAT), les anciennes données des zones de sortie du LOOP sont

restituées.

Page 63: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 59 sur 181

Notes: 1. lorsque l'on calcule des totaux, il faut être sûr que le total sera inséré dans le même champ de la

zone de sortie du LOOP que celui ou apparaît le valeur à additionner. S'il y a dépassement de

capacité, une erreur d'exécution est générée.

2. si une table interne est traitée de manière restrictive (en utilisant les options FROM, TO et/ou

WHERE avec l'instruction LOOP), on ne doit pas utiliser de structures de contrôle pour le

traitement de niveaux de contrôles parce que l'interaction d'une boucle restreinte avec l'instruction

AT n'est pas correctement définie.

3. concernant les boucles avec les stocks de données intermédiaires, on peut également utiliser des

structures de contrôles spéciales.

Note: erreurs d'exécution:

- SUM_OVERFLOW: dépassement lors du calcul des totaux avec l'instruction SUM.

Variante 1 AT NEW f. Variante 2 AT END OF f.

Effet: f est un champ de la table interne traitée avec LOOP. La séquence d'instruction correspondante est traitée

si le champ f ou un champ défini avant f (à gauche) dans la ligne en cours de traitement a valeur différente de

celle qu'il avait dans la ligne précédente (AT NEW) ou suivante (AT END OF) de la table.

Exemple:

DATA: BEGIN OF COMPANIES OCCURS 20,

NAME(30),

PRODUCT(20),

SALES TYPE I,

END OF COMPANIES.

...

LOOP AT COMPANIES.

AT NEW NAME.

NEW-PAGE.

WRITE / COMPANIES-NAME.

ENDAT.

WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.

AT END OF NAME.

SUM.

WRITE: / COMPANIES-NAME, COMPANIES-SALES.

ENDAT.

ENDLOOP.

L' instruction AT se réfère au champ COMPANIES-NAME.

Notes: 1. si un critère de point de contrôle n'est pas connu avant l'exécution, on peut utiliser AT NEW (nom)

ou AT END OF (nom) pour le spécifier dynamiquement comme étant le contenu du champ nom. Si

nom est vierge à l'exécution, le critère de contrôle est ignoré et la séquence d'instructions n'est pas

exécutée. Si nom contient un nom de composante invalide, une erreur d'exécution apparaît.

2. en définissant un gabarit et/ou une longueur, on peut encore restreindre un peu plus le critère de

contrôle, - selon qu'il sont déclarés statiquement ou dynamiquement.

3. un symbole de champ pointant vers la zone de sortie du LOOP peut aussi être utilisé comme un

critère de contrôle dynamique. Si le symbole de champ ne pointent pas vers la zone de sortie du LOOP,

une erreur d'exécution apparaît.

Note: erreurs d'exécution:

- AT_BAD_PARTIAL_FIELD_ACCESS: accès invalide à un champ lorsque l'on définit

dynamiquement le critère de contrôle,

- AT_ITAB_FIELD_INVALID: lorsqu'on spécifie dynamiquement le critère de contrôle via un symbole

de champ, ce dernier ne pointe pas vers une zone de sortie du LOOP,

- ITAB_ILLEGAL_COMPONENT: lorsqu'on spécifie dynamiquement le critère de contrôle via (nom),

le champ (nom) ne contient pas un nom de champ valide.

Page 64: Cours ABAP

Les évènements AT sous ABAP/4

Cours ABAP.doc Page 60 sur 181

Variante 3 AT FIRST Variante 4 AT LAST

Effet: exécute une seule fois la séquence d'instructions appropriée lors du premier (AT FIRST) ou dernier (AT

LAST) passage dans la boucle.

Exemple:

DATA: BEGIN OF COMPANIES OCCURS 20,

NAME(30),

PRODUCT(20),

SALES TYPE I,

END OF COMPANIES.

...

LOOP AT COMPANIES.

AT FIRST.

SUM.

WRITE: 'Somme de toutes les ventes:', 55 COMPANIES-SALES.

ENDAT.

WRITE: / COMPANIES-NAME, COMPANIES-PRODUCT, 55 COMPANIES-SALES.

ENDLOOP.

Page 65: Cours ABAP

Listes

Cours ABAP.doc Page 61 sur 181

LISTES

Lecture des listes

READ LINE

READ LINE <n>

OF CURRENT PAGE.

OF PAGE <p>

INDEX <i>

FIELD VALUE <f1> INTO <g1>

<f2> INTO <g2>

… …

READCURRENT LINE

READ CURRENT LINE

FIELD VALUE <f1> INTO <g1>

<f2> INTO <g2>

… …

Modification des listes

Modify line

MODIFY LINE <n>

OF CURRENT PAGE

OF PAGE <m>

INDEX <i>

FIELD VALUE F1 FROM G1

F2 FROM G2

FIELD FORMAT F1 <format>

F2 <format>

LINE FORMAT <format>…

Modify current line

MODIFY CURRENT LINE

FIELD VALUE F1 FROM G1

F2 FROM G2

FIELD FORMAT F1 <format>

F2 <format>

LINE FORMAT <format>…

Page 66: Cours ABAP

Fenêtres

Cours ABAP.doc Page 62 sur 181

FENETRES

Instruction Window

AT … .

.

.

WINDOW STARTING AT 10 15

ENDING AT 77 22

WRITE : / …

.

.

.

Vous devez spécifier les coordonnées de la fenêtre (coin supérieur droit et inférieur gauche) en indiquant d‟abord

la colonne puis la ligne.

L‟édition WRITE qui suit l‟instruction WINDOW apparaît dans la fenêtre.

L‟option WITH FRAME TITLE … vous permet de générer un titre à une fenêtre.

Page 67: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 63 sur 181

L'Object Browser

L'object Browser est un outil permettant de créer et gérer les projets de programmation relativement lourds, par

une mise en œuvre modulaire.

Il sert aussi à la création d'interface de saisie de données, pour lesquels il faut créer des écrans de saisie facilitant

ces opérations, les données ainsi renseignées étant ensuite sauvegardées dans des tables (programme ZHENFIN

dans l'exemple ci-dessous).

L'Object Browser sert aussi lors de la création de groupes de fonction, comme nous le verrons plus tard (groupe

de fonction ZHEN dans l'exemple).

Pour accéder à l'Object Browser, cliquer, dans le menu déroulant "Outils", sur l'option "Abap/4 Workbench",

puis sur le bouton "Object Browser", ou utiliser la transaction (Ok Code) "SE80". On se retrouve alors face à

l'écran suivant:

Figure 1: l'Object browser

Dépendant de l'action que l'on désire réaliser, il faut sélectionner une option dans la liste d'objets, puis cliquer sur

"Afficher".

Dans le cas de l'écran de la figure 3 ci-dessous, on a créé un nouveau pool de modules, appelé

"ZHENTEMP". Trois objets sont intégrés dans ce pool de module, l'object "Structure DD", dans lequel sont

déclarées toutes les tables utilisées dans le programme, l'object "Données glob.", dans lequel seront référencées

toutes les variables globales du programme, et l'objet "Include", dans lequel seront placés toutes les structures de

type "INCLUDE", lesquelles renferment les modules, routines et sous-programmes que l'on crée.

La barre d'outils de l'Object browser est représentée sur la figure 2. Les deux icônes essentielles de

l'Object browser sont référencées sur la figure.

Figure 2: la barre d'outils Créer un nouvel objet Générer les objets du pool

Page 68: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 64 sur 181

Figure 3: le pool de module ZHENTEMP vierge

Création d'une interface de saisie

Dans l'exemple que nous allons voir, nous allons crées une interface de saisie pour la réservation de

places sur les vols aériens et l'édition de la facture sur formulaire. Cette interface sera basée sur les tables

ZCHSPFLI, ZCHSFLIG, ZCHSBOOK et ZCHSCUST (copies personnelles des tables systèmes SPFLI,

SFLIGHT, SBOOK et SCUSTOM, avec cependant l'avantage de pouvoir être modifiées par nous).

La création d'une telle interface de saisie repose sur ce que l'on appelle un "pool de module". Celui-ci

correspond en fait à un programme principal, représentant le nœud de l'arborescence visible sur l'écran de travail,

et dont le code ne contient exclusivement que des instructions "INCLUDE" des modules créés lors des phases de

conception.

Le pool de module fini

Les écrans suivants montrent l'arborescence finale du programme de réservation ZHENFIN, servant à

saisir les réservations.

Outre les trois objets vus précédemment, le programme comprend un certain nombre de modules nouveaux,

comme le montrent les écrans. Ces éléments sont:

Evénements (renseignement sur les double-clics, boutons, etc.)

Modules PBO (éléments Process Before Output des dynpros),

Modules PAI (éléments Process After Input des dynpros),

Sous-prog. (comme son nom l'indique),

Dynpros (chaque dynpro représente un écran de sélection (pouvant être de diverses

natures),

Statut GUI (chaque statut est référencé à un dynpro, pour permettre la gestion des

icônes de navigation ou de boutons de commandes spécifiques (GUI = Graphical User

Interface)),

Transactions (4 caractères; pour le lancement du programme sous R/3).

L'arborescence du pool de modules est donc décrite sur les 3 figures ci-dessous:

Page 69: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 65 sur 181

(a) (b)

(c) (d)

(e)

Figure 4: arborescence du pool

Page 70: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 66 sur 181

Logique de création

Quel que soit l'objet à créer, la manipulation est identique. Il faut placer le curseur sur le nœud du

pool, c'est-à-dire son nom générique, puis cliquer sur le bouton suivant:

Le cheminement de la logique de création est décrit ci-après.

Création d'un écran de sélection DYNPRO

Les DYNPROS représentent les écrans de sélections dans la programmation interactive de SAP R/3.

Créer un dynpro revient à créer des masques de saisie dans lesquels l‟opérateur(trice) entrera ces valeurs. La

procédure à suivre pour créer un DYNPRO est la suivante :

sous l‟Object browser, créer un nouvel objet DYNPRO, auquel il faut donner un numéro

sur 4 chiffres.

définir les caractéristiques de base de l‟écran (attributs de DYNPRO),

définir les zones de l‟écran (Plein écran),

définir les attributs des zones (Liste de zone),

créer la logique d‟exécution.

Pour chaque écran, la logique d‟exécution se subdivise en deux événements :

l‟événement Process Before Output (PBO) qui est exécuté avant l‟affichage de l‟écran,

l‟événement Process After Input (PAI) qui est lancé une fois que les données ont été

saisies à l‟écran et qu‟un ordre (appui sur la touche ENTREE par exemple) à été donné.

Les modules d‟un événement sont exécutés séquentiellement. Il faut alors veiller à déclarer ceux-ci

dans un ordre logique d‟exécution (sauvegarde des données avant le traitement du module USER-COMMANDE

par exemple).

Pour le programme ZHENREIS, servant à réserver des places sur un vol aérien choisi par le client,

nous avons créé deux DYNPRO, numérotés 1000 et 1100 (par convention, le premier écran portera le numéro

1000, les suivants 1100, 1200, etc. ...). Le détail en est donné ci-après, conformément à la procédure vue

précédemment.

Premier écran : DYNPRO 1000

Figure 5: les attributs Figure 6: les masques

Les masques utilisables dans le plein écran proviennent de deux types de variables. Soit, elles

correspondent à des variables globales déclarées dans l'INCLUDE ZHFINTOP, soient elles proviennent

directement des tables qui ont également été déclarées dans ZHFINTOP, auquel cas le masque de saisie est

identique à celui de la variable dans la table. Il est également important de noter, dans ce deuxième cas, qu'il est

tout à fait possible d'utiliser les matchcodes associés à ces variables de tables. Pour placer ces masques sur la

surface du DYNPRO, aller dans le menu déroulant Saut, puis Zones de dict/prog. Ou appuyer sur la touche

"F6", sélectionner les variables désirées (du dictionnaire ou du programme), puis cocher les variables à placer sur

la surface, et cliquer sur le bouton "Reprendre". Il faut ensuite marquer (icône ou touche "F2") la position où

l'on veut les voir apparaître. On a ensuite la possibilité de les déplacer à loisir sur toute la surface du DYNPRO.

Il est aussi possible, dans le plein écran, de réaliser des cases à cocher, des boutons d'options (pouvant être

équivalents aux RADIOBUTTONS d'ABAP/4) ou encore des boutons de commandes, comme dans l'exemple

présent, où un bouton "Détails des vols" a été créé, pour réaliser le passage à l'écran suivant, après avoir fait un

test de validité des données saisies au clavier. Ces outils sont disponibles dans le menu Traiter puis Créer zones.

Page 71: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 67 sur 181

Dans le cadre particulier des boutons d'options de type RADIOBUTTON, il faut créer le nombre de boutons

désirés, puis, une fois les avoirs placés les uns en dessous des autres, les regrouper dans un élément graphique

(cliquer sur le premier élément, cliquer sur le bouton Elément graphique, cliquer sur le dernier élément à

intégrer, puis appuyer sur le bouton Définir grpe graph., et la manipulation est terminée).

Figure 7: la liste de zones Figure 8: la logique d'exécution

La liste de zone référence toutes les zones qui apparaissent dans le plein écran du DYNPRO, ainsi

que leurs attributs.

Dans la zone de liste ci-dessus, apparaît une variable FCODE, de type OK. Cette variable est

déclarée dans l‟include TOP avec un type SY-UCOMM. Elle sera utilisée par l‟écran de commande STATUT

GUI pour passer les codes fonctions des menus et boutons (cf la partie concernant les écrans de commande

STATUT GUI). La variable FCODE est à déclarer dans tous les DYNPROS.

C‟est dans cette logique d‟exécution quapparaissent les deux événements PBO et PAI. Ici, nous

définissons donc les travaux à réaliser avant (PBO) et après (PAI) l‟affichage du DYNPRO 1000. Les modules

déclarés ici sont réalisés dans des objets INCLUDE, selon certaines conventions. Ainsi, les modules de la section

PBO seront sauvegardés dans un INCLUDE de nom ZHFINO01, le O01 faisant référence au PBO de l‟écran

numéro 1, alors que les modules de la section PAI iront dans un INCLUDE nommé ZHFINI01, I01 faisant

référence au PAI de l‟écran numéro 1.

Deux modules sont indispensables dans cette logique d'exécution. Dans le PBO, se trouve un

module SET_PF_STATUS_1000, lequel fait le lien avec l'écran de commande correspondant. La syntaxe exacte

comprise dans ce module est :

SET PF-STATUS 'MENU1000'. (voir le chapitre sur le STATU GUI)

Le PAI contient, quant à lui, un module USER_COMMAND_1000 qui assure le traitement des

codes fonctions grâce à la variable FCODE. Ces codes fonctions peuvent faire référence aux boutons et menus

du STATUT GUI, mais ils servent également pour le traitement des boutons que l'on peut réaliser à l'intérieur

d'un écran DYNPRO, comme c'est le cas dans ce premier écran (bouton "Rechercher"). Sa syntaxe sera:

CASE FCODE.

WHEN 'RETO'.

LEAVE TO SCREEN 0. (retour à l'écran précédent)

WHEN 'DETA'.

PERFORM PASSAGE. (routine de test et passage à l'écran suivant)

ENDCASE.

Le bouton "Détail des vols" a été réalisé sur la surface du DYNPRO 1000, et on lui a affecté le code

fonction 'DETA' (4 caractères au maximum).

Page 72: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 68 sur 181

Dans le cas où l'on désirera réaliser des masques avec saisie obligatoire (symbole "?" dans la fenètre

du masque), on pourra spécifier un deuxième module USER_COMMAND_1000_E AT EXIT-COMMAND,

comprenant la syntaxe suivante:

CASE FCODE.

WHEN 'SORT'.

LEAVE PROGRAM.

ENDCASE.

En cas de problème lors d'une exécution, cette seconde structure permet de quitter le programme sans avoir à

remplir les zones obligatoires. Il faut néanmoins avoir affecté au code fonction correspondant un attribut de type

E (exit), lors de sa déclaration dans le STATUT GUI correspondant (voir le chapitre concernant ces derniers

pour plus de détails concernant les attributs et leur utilisation).

Le passage d'un écran à l'autre peut aussi se faire depuis les attributs du DYNPRO. Dans ces derniers, on peut en

effet spécifier le numéro de DYNPRO vers lequel on veut aller. La syntaxe à utiliser est alors: LEAVE

SCREEN.

Les commandes ABAP/4 des différents modules du DYNPRO 1000 seront vu plus tard, avec

l‟ensemble du programme ZHENFIN. En utilisation normale en pool de modules, l'affichage de données à

l'égale des reports n'est pas possible dans les DYNPROS standards. Il est cependant possible de réaliser un

affichage de type liste de reporting (autorisant alors le double-clic et tout l'arsenal possible ABAP/4). Il faut

déclarer le STATUT GUI en tant que "LISTE".

Création d'un écran de commande STATUT GUI

Les différents écrans ayant été conçus, il faut leur associer un menu de commande (STATUT GUI) approprié. Ce

menu est référencé dans le pool de module par un nom de 8 caractères. En général, on utilise la convention

suivante : MENU + NUMERO_DYNPRO (par exemple, le premier écran de commande de ZHENFIN aura pour

nom "MENU1000").

S‟il est minimaliste, ce menu doit permettre de gérer l‟utilisation des commandes de base de la barre d‟outils,

comme c‟est le cas avec le STATUT GUI "MENU1000".

Le STATUT GUI permet en outre de réaliser des menus personnalisés. On peut, dans ce cas,

spécifie des boutons, des menus déroulant et/ou des touches de fonctions (F1 à F12), il faut établir des codes

fonctions qui serviront aux différentes taches à réaliser.

La marche à suivre est la suivante:

définir des codes fonctions valides (4 caractères),

allouer une touche de fonction à chaque code fonction,

allouer les codes fonctions aux menus déroulant (non obligatoire),

Codes fonction

declarés pour la

"navigation"

(retour en arrière,

quitter) dans le

programme

Page 73: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 69 sur 181

allouer les codes fonctions à des boutons (non obligatoire).

(a) le menu déroulant (b) les boutons et touches de fonctions

Figure 9: le STATUT GUI MENU1000

Dans l'exemple du menu de commande MENU1000, on crée un bouton qui va servir à donner les détails de la

correspondance désirée, exactement comme le bouton Détails des vols du DYNPRO 1000. Ce bouton est

référencé dans le programme par le code fonction "DETA", en tant que touche de fonction "F5", menu déroulant

Saut puis Détails des vols et comme bouton de commande "Détails des vols".

Le code fonction est rappelé dans le module USER_COMMAND_1100, dans l'instruction CASE.

Les écrans de liste.

L'écran qui a été réalisé précédemment est un écran de saisie, dans lequel on ne peut que renseigner des données

dans un masque donné, en respectant scrupuleusement le type des données demandées (si le programme est bien

fait, bien sûr).

Si l'on veut alors éditer une liste de données liées aux renseignements donnés sur le premier écran, il faut

déclarer cet écran suivant comme étant un écran de vue. La sélection ne se fait pas sur le DYNPRO lui-même,

mais sur le STATUT GUI correspondant. L'écran 1100 du programme ZHENFIN, qui doit afficher l'ensemble

des correspondances existantes pour une ville de départ et une destination donnée, a été déclaré comme LISTE.

Les figures 10 et 11 donnent les attributs du DYNPRO et son STATUT GUI associé. Les figures 12 montre la

logique d'exécution du DYNPRO 1100, et la figure 13 offre une vue des codes fonctions données en standard

pour un menu de listes.

Figure 10: les attributs du DYNPRO Figure 11: les attributs du STATUT GUI

Page 74: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 70 sur 181

Figure 12: la logique d'exécution Figure 13: les codes fonctions

La programmation de la logique d'exécution du DYNPRO 1100 est un peu particulière, pour qu'effectivement ce

dernier soit considéré comme un écran de listes. Il faut en effet déclarer le module d'affichage des données dans

la zone PAI du DYNPRO 1100, et non plus dans sa zone PBO, comme ce fut le cas précédemment lors de la

création du premier écran. De plus, outre l'indispensable module SET_PF_STATUS_1100 (qui n'est plus

secondé ici par un module USER_COMMANDE_1100 car on utilise alors les codes fonctions standards des

menus de listes, bien qu'il eut été dans le domaine du possible de les redéfinir et les retraiter dans le module

adéquat), il faut créer un module d'initialisation INIT_1100, contenant les instructions suivantes:

MODULE INIT_1100 OUTPUT.

SUPPRESS DIALOG.

LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 1000.

ENDMODULE.

Le module d'affichage AFFICHAGE_DONNEES peut contenir toutes les instructions possibles d'ABAP/4.

Remarque: comme l'on peut le voir sur le module ci-dessus, les éléments déclarés dans la zone PBO ont un

attribut OUTPUT pour extension, alors que les modules de la zone PAI auront l'attribut INPUT comme

extension.

La transaction

Pour autoriser le lancement du programme depuis SAP R/3, il faut créer une transaction. Pour cela, lors de la

création, on spécifie le programme à laquelle elle fera référence, le numéro du premier DYNPRO à lancer, ainsi

qu'un attribut ("DIALOGUE" dans le cas de cet exemple).

Page 75: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 71 sur 181

La programmation

Pour programmer un pool de modules, il faut utiliser les "INCLUDES". A chaque DYNPRO correspondra au

minimum deux "INCLUDES", ZHFINO01 et ZHFINI01, ZHFINO02 et ZHFINI02, ainsi que des "INCLUDES"

spécifiques pour déclarer les sous-programmes (FORM....ENDFORM). Dans le cas de l'exemple qui nous

intéresse ici, cependant, les sous-programmes correspondants aux INCLUDES Oxx et Ixx sont déclarés

directement dans les "INCLUDES". Pour donner un exemple, les sous programmes des modules

SET_PF_STATUS_1000, INIT_1000 et READ_DATA_1000 sont réalisées dans le module ZHFINO01,

directement sous la déclaration des modules. De façon identique, les sous-programmes des modules

SAVE_DATA_MENU1000, USER_COMMAND_1000 et USER_COMMAND_1000_E AT EXIT-

COMMAND sont écrits dans l'INCLUDE ZHENRI01 (voir listing complet).

Une autre méthode consiste à ne créer qu'un seul INCLUDE ZHFINF01 qui contiendra toutes les routines du

programme. Cela permet de savoir tout de suite dans quel module chercher, mais, si le programme à réaliser est

quelque peut long, il se peut que l'INCLUDE en question soit rapidement très très long.

La technique employée dépendra énormément du programmeur, ce dernier devant avoir à l'esprit que ce ne sera

peut-être pas lui qui assurera les montées en versions!

Les jeux d'essais:

Suite au lancement du programme au moyen de la transaction "ZHFI", on obtient l'écran suivant, dans lequel on

renseigne les zones "Départ", "Arrivée": et "Date".

Figure 14: l'écran initial Figure 15: la liste des correspondances

Figure 16: la réservation Figure 17: un utilisateur enregistré

Page 76: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 72 sur 181

Figure 18: l'écran de réservation Figure 19: un nouveau client

(a) (b)

Figure 20: la facture du nouveau client

Le formulaire

Pour la réalisation du formulaire, se reporter à la documentation adéquate.

Page 77: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 73 sur 181

Listing du programme ZHENFIN

ZHENFIN :

*&-----------------------------------------------------------------------------------------------------------------*

*& Pool mod. ZHENFIN *

*& *

*&-----------------------------------------------------------------------------------------------------------------*

*& *

*& *

*&----------------------------------------------------------------------------------------------------------------- *

INCLUDE ZHFINTOP. " global Data

ZHFINTOP :

*&----------------------------------------------------------------------------------------------------------------- *

*& Include ZHFINTOP Pool mod. ZHENFIN *

*& *

*&--------------------------------------------------------------------------------- --------------------------------*

PROGRAM ZHENFIN NO STANDARD PAGE HEADING MESSAGE-ID ZH.

Tables: ZCHSPFLI, ZCHSFLIG, ZCHSBOOK, ZCHSCUST.

DATA: FCODE LIKE SY-UCOMM,

SIEGES_LIBRES LIKE ZCHSFLIG-SEATSOCC,

NB_SIEGES LIKE ZCHSFLIG-SEATSOCC,

VILLEDEP LIKE ZCHSPFLI-CITYFROM,

VILLEARR LIKE ZCHSPFLI-CITYTO,

PCARRID LIKE ZCHSPFLI-CARRID,

PCONNID LIKE ZCHSPFLI-CONNID,

DATE_VOL LIKE ZCHSFLIG-FLDATE,

NUMCLIENT LIKE ZCHSBOOK-CUSTOMID,

MAXNUMCLIENT LIKE ZCHSBOOK-CUSTOMID,

MAXIMUM LIKE ZCHSBOOK-BOOKID.

DATA: AFFAIRES TYPE C,

PRIVE TYPE C,

FUMEUR TYPE C,

CAFF TYPE C,

CECO TYPE C,

CPREM TYPE C.

DATA: TOTALAPAYER LIKE ZCHSFLIG-PAYMENTSUM,

QUALITEVOYAGE(20) TYPE C,

CLASSEVOYAGE(20) TYPE C,

YESORNO(3) TYPE C.

ZHENFIN :

* INCLUDE ZHFINO01. " PBO-Modules *

* INCLUDE ZHFINI01. " PAI-Modules *

* INCLUDE ZHFINF01. " FORM-Routines *

INCLUDE ZHFINO01.

Page 78: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 74 sur 181

ZHFINO01:

*------------------------------------------------------------------------------------------------------------------- *

*INCLUDE ZHFINO01 . *

*------------------------------------------------------------------------------------------------------------------- *

*&----------------------------------------------------------------------------------------------------------------- *

*& Module SET_PF_STATUS_1000 OUTPUT *

*&----------------------------------------------------------------------------------------------------------------- *

MODULE SET_PF_STATUS_1000 OUTPUT.

SET PF-STATUS 'MENU1000'.

ENDMODULE. " SET_PF_STATUS_1000 OUTPUT

*&-----------------------------------------------------------------------------------------------------------------*

*& Module INIT_1000 OUTPUT *

*&------------------------------------------------------------------------------------------------------------- ----*

MODULE INIT_1000 OUTPUT.

PERFORM init_menu1000.

ENDMODULE. " INIT_1000 OUTPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Form init_menu1000 *

*&-----------------------------------------------------------------------------------------------------------------*

FORM init_menu1000.

CLEAR ZCHSPFLI.

CLEAR ZCHSFLIG.

CLEAR ZCHSBOOK.

CLEAR ZCHSCUST.

ENDFORM. " init_menu1000

*&-----------------------------------------------------------------------------------------------------------------*

*& Module READ_DATA_1000 OUTPUT *

*&----------------------------------------------------------------------------------------------------------------- *

MODULE READ_DATA_1000 OUTPUT.

PERFORM read_data_menu1000.

ENDMODULE. " READ_DATA_1000 OUTPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Form read_data_menu1000 *

*&-----------------------------------------------------------------------------------------------------------------*

FORM read_data_menu1000

SELECT SINGLE * FROM ZCHSPFLI WHERE CARRID = 'LH'

AND CONNID = '400'.

DATE_VOL = SY-DATUM.

ENDFORM. " read_data_menu1000

ZHENFIN :

INCLUDE ZHFINI01.

Page 79: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 75 sur 181

ZHFINI01:

*------------------------------------------------------------------------------------------------------------------- *

*INCLUDE ZHFINI01 . *

*-------------------------------------------------------------------------------------------------------------------*

*&----------------------------------------------------------------------------------------------------------------- *

*& Module USER_COMMAND_1000 INPUT *

*&-----------------------------------------------------------------------------------------------------------------*

MODULE USER_COMMAND_1000 INPUT.

PERFORM USER_COMMAND_MENU1000.

ENDMODULE. " USER_COMMAND_1000 INPUT

*&-----------------------------------------------------------------------------------------------------------------*

*& Module USER_COMMAND_1000_E INPUT *

*&----------------------------------------------------------------------------------------------------------------- *

MODULE USER_COMMAND_1000_E INPUT.

PERFORM USER_COMMAND_MENU1000_E.

ENDMODULE. " USER_COMMAND_1000_E INPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Form USER_COMMAND_MENU1000 *

*&-----------------------------------------------------------------------------------------------------------------*

FORM USER_COMMAND_MENU1000.

CASE FCODE.

WHEN 'DETA'.

PERFORM passage.

ENDCASE.

ENDFORM. " USER_COMMAND_MENU1000

*&-----------------------------------------------------------------------------------------------------------------*

*& Form USER_COMMAND_MENU1000_E *

*&----------------------------------------------------------------------------------------------------------------- *

FORM USER_COMMAND_MENU1000_E.

CASE FCODE.

WHEN 'SORT'.

LEAVE PROGRAM.

ENDCASE.

ENDFORM. " USER_COMMAND_MENU1000_E

*&----------------------------------------------------------------------------------------------------------------- *

*& Module SAVE_DATA_1000 INPUT *

*&-----------------------------------------------------------------------------------------------------------------*

MODULE SAVE_DATA_1000 INPUT.

PERFORM SAVE_DATA_MENU1000.

ENDMODULE. " SAVE_DATA_1000 INPUT

*&-----------------------------------------------------------------------------------------------------------------*

*& Form SAVE_DATA_MENU1000 *

*&----------------------------------------------------------------------------------------------------------------- *

FORM SAVE_DATA_MENU1000.

MOVE ZCHSPFLI-CITYFROM TO VILLEDEP.

MOVE ZCHSPFLI-CITYTO TO VILLEARR.

SELECT * FROM ZCHSPFLI WHERE CITYFROM = VILLEDEP

AND CITYTO = VILLEARR.

Page 80: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 76 sur 181

MOVE ZCHSPFLI-CARRID TO PCARRID.

MOVE ZCHSPFLI-CONNID TO PCONNID.

SELECT * FROM ZCHSFLIG WHERE CARRID = PCARRID

AND CONNID = PCONNID.

IF SY-SUBRC = 0.

MOVE DATE_VOL TO ZCHSFLIG-FLDATE.

INSERT ZCHSFLIG.

ENDIF.

ENDSELECT.

ENDSELECT.

ENDFORM. " SAVE_DATA_MENU1000

*&----------------------------------------------------------------------------------------------------------------- *

*& Form passage *

*&----------------------------------------------------------------------------------------------------------------- *

FORM passage.

SELECT SINGLE * FROM ZCHSPFLI WHERE CITYFROM = VILLEDEP

AND CITYTO = VILLEARR.

IF SY-SUBRC NE 0.

MESSAGE i020.

ELSE.

IF DATE_VOL LT SY-DATUM.

MESSAGE i023.

ELSE.

CALL SCREEN 1100.

ENDIF.

ENDIF.

ENDFORM. " passage

*&----------------------------------------------------------------------------------------------------------------- *

*& Module SAVE_DATA_MENU1000 INPUT *

*&----------------------------------------------------------------------------------------------------------------- *

MODULE SAVE_DATA_MENU1000 INPUT.

PERFORM SAVE_DATA_MENU1000.

ENDMODULE. " SAVE_DATA_MENU1000 INPUT

ZHENFIN:

INCLUDE ZHFINO02.

ZHFINO02 :

*------------------------------------------------------------------------------------------------------------------- *

*INCLUDE ZHFINO02 . *

*---------------------------------------------------------------------------------------- ---------------------------*

*&----------------------------------------------------------------------------------------------------------------- *

*& Module SET_PF_STATUS_1100 OUTPUT *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE SET_PF_STATUS_1100 OUTPUT.

SET PF-STATUS 'MENU1100'.

ENDMODULE. " SET_PF_STATUS_1100 OUTPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Module INIT_1100 OUTPUT *

*&-----------------------------------------------------------------------------------------------------------------*

Page 81: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 77 sur 181

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE INIT_1100 OUTPUT.

SUPPRESS DIALOG.

LEAVE TO LIST-PROCESSING and return to screen 1000.

ENDMODULE. " INIT_1100 OUTPUT

ZHENFIN :

INCLUDE ZHFINI02.

ZHFINI02 :

*------------------------------------------------------------------------------------------------------------------- *

***INCLUDE ZHFINI02 . *

*------------------------------------------------------------------------------------------------------------------- *

*&----------------------------------------------------------------------------------------------------------------- *

*& Module AFFICHAGE_DONNEES INPUT *

*&----------------------------------------------------------------------------------------------------------------- *

* text *

*-------------------------------------------------------------------------------------------------------------------*

MODULE AFFICHAGE_DONNEES INPUT.

WRITE: / VILLEDEP, VILLEARR, DATE_VOL.

SKIP 2.

WRITE: / 'Cie',5 'Vol',15'Départ',30 'Arrivée',50 'Places',60 'Prix'.

SKIP.

ULINE.

FORMAT INTENSIFIED OFF.

SELECT * FROM ZCHSPFLI WHERE CITYFROM = VILLEDEP

AND CITYTO = VILLEARR.

SELECT SINGLE * FROM ZCHSFLIG WHERE CARRID = ZCHSPFLI-CARRID

AND CONNID = ZCHSPFLI-CONNID

AND FLDATE = DATE_VOL.

SIEGES_LIBRES = ZCHSFLIG-SEATSMAX - ZCHSFLIG-SEATSOCC.

WRITE: / ZCHSPFLI-CARRID,5 ZCHSPFLI-CONNID,15 ZCHSPFLI-DEPTIME,

30 ZCHSPFLI-ARRTIME,

50 SIEGES_LIBRES LEFT-JUSTIFIED,

60 ZCHSFLIG-PRICE LEFT-JUSTIFIED.

HIDE: ZCHSPFLI-CARRID, ZCHSPFLI-CONNID, SIEGES_LIBRES.

CLEAR ZCHSFLIG.

ENDSELECT.

FORMAT INTENSIFIED ON.

ENDMODULE. " AFFICHAGE_DONNEES INPUT

ZHENFIN :

INCLUDE ZHFINAT1.

ZHFINAT1:

*------------------------------------------------------------------------------------------------------------------- *

*INCLUDE ZHFINAT1 . *

*-------------------------------------------------------------------------------------------------------------------*

*&----------------------------------------------------------------------------------------------------------------- *

*& Event AT LINE_SELECTION *

*&-----------------------------------------------------------------------------------------------------------------*

Page 82: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 78 sur 181

AT LINE-SELECTION.

PERFORM SOURIS.

*&----------------------------------------------------------------------------------------------------------------- *

*& Form SOURIS *

*&----------------------------------------------------------------------------------------------------------------- *

* text *

*------------------------------------------------------------------------------------------------------------------- *

* --> p1 text *

* <-- p2 text *

*------------------------------------------------------------------------------------------------------------------- *

FORM SOURIS.

CASE SY-LSIND.

WHEN '1'.

PERFORM DETAILS.

ENDCASE.

ENDFORM. " SOURIS

*&----------------------------------------------------------------------------------------------------------------- *

*& Form DETAILS *

*&--------------------------------------------------------------------------------------------- --------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

* --> p1 text *

* <-- p2 text *

*-------------------------------------------------------------------------------------------------------------------*

FORM DETAILS.

IF SY-CUROW GT 6.

PCARRID = ZCHSPFLI-CARRID.

PCONNID = ZCHSPFLI-CONNID.

CALL SCREEN 1200.

ENDIF.

ENDFORM. " DETAILS

ZHENFIN :

INCLUDE ZHFINO03.

ZHFINO03 :

*------------------------------------------------------------------------------------------------------------------- *

*INCLUDE ZHFINO03 . *

*-------------------------------------------------------------------------------------------------- -----------------*

*&----------------------------------------------------------------------------------------------------------------- *

*& Module SET_PF_STATUS_1200 OUTPUT *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE SET_PF_STATUS_1200 OUTPUT.

SET PF-STATUS 'MENU1200'.

ENDMODULE. " SET_PF_STATUS_1200 OUTPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Module READ_DATA_1200 OUTPUT *

*&-----------------------------------------------------------------------------------------------------------------*

Page 83: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 79 sur 181

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE READ_DATA_1200 OUTPUT.

ZCHSBOOK-CUSTOMID = NUMCLIENT.

ENDMODULE. " READ_DATA_1200 OUTPUT

ZHENFIN:

INCLUDE ZHFINI03.

ZHFINI03 :

*------------------------------------------------------------------------------------------------------------------- *

***INCLUDE ZHFINI03 . *

*-------------------------------------------------------------------------------------------------------------------*

*&----------------------------------------------------------------------------------------------------------------- *

*& Module USER_COMMAND_1200 INPUT *

*&----------------------------------------------------------------------------------------------------------------- *

* text *

*------------------------------------------------------------------------------------------------------------ -------*

MODULE USER_COMMAND_1200 INPUT.

CASE FCODE.

WHEN 'RETO'.

LEAVE TO SCREEN 0.

WHEN 'SORT'.

LEAVE PROGRAM.

WHEN 'RESE'.

SELECT MAX( ID ) FROM ZCHSCUST INTO MAXNUMCLIENT.

IF NB_SIEGES < SIEGES_LIBRES.

PERFORM TRAITEMENT_MENU1200.

IF NUMCLIENT IS INITIAL.

CALL SCREEN 1300.

ELSE.

IF NUMCLIENT GT MAXNUMCLIENT.

MESSAGE i021.

ELSE.

CALL SCREEN 1350.

ENDIF.

ENDIF.

ELSE.

MESSAGE i019.

ENDIF.

ENDCASE.

ENDMODULE. " USER_COMMAND_1200 INPUT

*&-----------------------------------------------------------------------------------------------------------------*

*& Form TRAITEMENT_MENU1200 *

*&----------------------------------------------------------------------------------------------------------------- *

* text *

*-------------------------------------------------------------------------------------------------------------------*

* --> p1 text *

* <-- p2 text *

*------------------------------------------------------------------------------------------------- ------------------*

*------------------------------------------------------------------------------------------------------------------- *

* Sauvegarde des éléments concernant le vol désiré *

* dans la table ZCHSFLIG *

*-------------------------------------------------------------------------------------------------------------------*

FORM TRAITEMENT_MENU1200.

Page 84: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 80 sur 181

SELECT SINGLE * FROM ZCHSFLIG WHERE CARRID = PCARRID

AND CONNID = PCONNID

AND FLDATE = DATE_VOL.

ADD NB_SIEGES TO ZCHSFLIG-SEATSOCC.

ZCHSFLIG-PAYMENTSUM = ZCHSFLIG-PAYMENTSUM

+ ( NB_SIEGES * ZCHSFLIG-PRICE ).

MODIFY ZCHSFLIG.

*------------------------------------------------------------------------------------------------------------------- *

* Sauvegarde des éléments concernant le client dans *

* la table ZCHSBOOK. *

*------------------------------------------------------------------------------------------------------------------- *

SELECT MAX( BOOKID ) FROM ZCHSBOOK INTO MAXIMUM

WHERE CARRID = PCARRID

AND CONNID = PCONNID.

MOVE PCARRID TO ZCHSBOOK-CARRID.

MOVE PCONNID TO ZCHSBOOK-CONNID.

MOVE DATE_VOL TO ZCHSBOOK-FLDATE.

ADD 1 TO MAXIMUM.

MOVE MAXIMUM TO ZCHSBOOK-BOOKID.

IF AFFAIRES = 'X'.

ZCHSBOOK-CUSTTYPE = 'B'.

ELSE.

ZCHSBOOK-CUSTTYPE = 'P'.

ENDIF.

IF Fumeur = 'X'.

ZCHSBOOK-SMOKER = 'X'.

ENDIF.

IF CAFF = 'X'.

ZCHSBOOK-CLASS = 'C'.

ELSE.

IF CECO = 'X'.

ZCHSBOOK-CLASS = 'Y'.

ELSE.

ZCHSBOOK-CLASS = 'F'.

ENDIF.

ENDIF.

MOVE NUMCLIENT TO ZCHSBOOK-CUSTOMID.

INSERT ZCHSBOOK.

ENDFORM. " TRAITEMENT_MENU1200

ZHENFIN :

INCLUDE ZHFINO04.

ZHFINO04 :

*-------------------------------------------------------------------------------------------------------------------*

*INCLUDE ZHFINO04 . *

*-------------------------------------------------------------------------------------------------------------------*

*&-----------------------------------------------------------------------------------------------------------------*

*& MODULE SET_PF_STATUS_1300 OUTPUT *

*&-----------------------------------------------------------------------------------------------------------------*

* TEXT *

*-------------------------------------------------------------------------------------------------------------------*

MODULE SET_PF_STATUS_1300 OUTPUT.

SET PF-STATUS 'MENU1300'.

ENDMODULE. " SET_PF_STATUS_1300 OUTPUT

Page 85: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 81 sur 181

*&----------------------------------------------------------------------------------------------------------------- *

*& Module INIT_1300 OUTPUT *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE INIT_1300 OUTPUT.

PERFORM INIT_MENU1300.

ENDMODULE. " INIT_1300 OUTPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Form INIT_MENU1300 *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

* --> p1 text *

* <-- p2 text *

*------------------------------------------------------------------------------------------------------------------- *

FORM INIT_MENU1300.

SELECT MAX( ID ) FROM ZCHSCUST INTO NUMCLIENT.

NUMCLIENT = NUMCLIENT + 1.

MOVE NUMCLIENT TO ZCHSCUST-ID.

ENDFORM. " INIT_MENU1300

*&----------------------------------------------------------------------------------------------------------------- *

*& Module SET_PF_STATUS_1350 OUTPUT *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE SET_PF_STATUS_1350 OUTPUT.

SET PF-STATUS 'MENU1300'.

ENDMODULE. " SET_PF_STATUS_1350 OUTPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Module INIT_1350 OUTPUT *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE INIT_1350 OUTPUT.

PERFORM INIT_MENU1350.

ENDMODULE. " INIT_1350 OUTPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Form INIT_MENU1350 *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

* --> p1 text *

* <-- p2 text *

*------------------------------------------------------------------------------------------------------------------- *

FORM INIT_MENU1350.

SELECT SINGLE * FROM ZCHSCUST WHERE ID = NUMCLIENT.

ENDFORM. " INIT_MENU1350

ZHENFIN :

INCLUDE ZHFINI04.

Page 86: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 82 sur 181

ZHFINI04 :

*------------------------------------------------------------------------------------------------------------------- *

*INCLUDE ZHFINI04 . *

*---------------------------------------------------------------------------------------------------------- ---------*

*&----------------------------------------------------------------------------------------------------------------- *

*& Module USER_COMMAND_1300 INPUT *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE USER_COMMAND_1300 INPUT.

PERFORM USER_COMMAND_MENU1300.

ENDMODULE. " USER_COMMAND_1300 INPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Form USER_COMMAND_MENU1300 *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

* --> p1 text *

* <-- p2 text *

*------------------------------------------------------------------------------------------------------------------- *

FORM USER_COMMAND_MENU1300.

CASE FCODE.

WHEN 'RETO'.

LEAVE TO SCREEN 0.

WHEN 'SORT'.

LEAVE PROGRAM.

WHEN 'CSAV'.

PERFORM SAUVEGARDE_DU_CLIENT.

CALL SCREEN 1400.

ENDCASE.

ENDFORM. " USER_COMMAND_MENU1300

*&----------------------------------------------------------------------------------------------------------------- *

*& Form SAUVEGARDE_DU_CLIENT *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

* --> p1 text *

* <-- p2 text *

*------------------------------------------------------------------------------------------------------------------- *

FORM SAUVEGARDE_DU_CLIENT.

TRANSLATE ZCHSCUST-NAME TO UPPER CASE.

TRANSLATE ZCHSCUST-STREET TO UPPER CASE.

TRANSLATE ZCHSCUST-CITY TO UPPER CASE.

TRANSLATE ZCHSCUST-COUNTRY TO UPPER CASE.

SELECT SINGLE * FROM ZCHSCUST WHERE NAME = ZCHSCUST-NAME

AND STREET = ZCHSCUST-STREET

AND CITY = ZCHSCUST-CITY

AND COUNTRY = ZCHSCUST-COUNTRY.

IF SY-SUBRC = 0.

MESSAGE i022.

CALL SCREEN 1350.

ELSE.

MOVE ZCHSCUST-ID TO NUMCLIENT.

INSERT ZCHSCUST.

ENDIF.

Page 87: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 83 sur 181

ENDFORM. " SAUVEGARDE_DU_CLIENT

*&----------------------------------------------------------------------------------------------------------------- *

*& Module USER_COMMAND_1350 INPUT *

*&----------------------------------------------------------------------------------------------------------------- *

* text *

*-------------------------------------------------------------------------------------- -----------------------------*

MODULE USER_COMMAND_1350 INPUT.

CASE FCODE.

WHEN 'RETO'.

LEAVE TO SCREEN 0.

WHEN 'SORT'.

LEAVE PROGRAM. WHEN 'DACC'.

MOVE ZCHSCUST-ID TO NUMCLIENT.

CALL SCREEN 1400.

ENDCASE.

ENDMODULE. " USER_COMMAND_1350 INPUT

ZHENFIN :

INCLUDE ZHFINO05.

ZHFINO05 :

*------------------------------------------------------------------------------------------------------------------- *

*INCLUDE ZHFINO05 . *

*-------------------------------------------------------------------------------------------------------------------*

*&----------------------------------------------------------------------------------------------------------------- *

*& Module SET_PF_STATUS_1400 OUTPUT *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE SET_PF_STATUS_1400 OUTPUT.

SET PF-STATUS 'MENU1400'.

ENDMODULE. " SET_PF_STATUS_1400 OUTPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Module INIT_1400 OUTPUT *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE INIT_1400 OUTPUT.

SUPPRESS DIALOG.

LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 1000.

ENDMODULE. " INIT_1400 OUTPUT

ZHENFIN :

INCLUDE ZHFINI05..

ZHFINI05 :

*------------------------------------------------------------------------------------------------------------------- *

*INCLUDE ZHFINI05 . *

*------------------------------------------------------------------------------------------------------------------- *

*&---------------------------------------------------------------------------------------------------------------- -*

*& Module AFFICHAGE INPUT *

*&----------------------------------------------------------------------------------------------------------------- *

Page 88: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 84 sur 181

* text *

*-------------------------------------------------------------------------------------------------------------------*

MODULE AFFICHAGE INPUT.

PERFORM FACTURATIONS.

ENDMODULE. " AFFICHAGE INPUT

*&----------------------------------------------------------------------------------------------------------------- *

*& Form FACTURATIONS *

*&----------------------------------------------------------------------------------------------------------------- *

* text *

*-------------------------------------------------------------------------------------------- -----------------------*

* --> p1 text *

* <-- p2 text *

*------------------------------------------------------------------------------------------------------------------- *

FORM FACTURATIONS.

CALL FUNCTION 'OPEN_FORM'

* EXPORTING

* APPLICATION = 'TX'

* ARCHIVE_INDEX = ' '

* ARCHIVE_PARAMS = ' '

* DEVICE = 'PRINTER'

* DIALOG = 'X'

* FORM = ' '

* LANGUAGE = SY-LANGU

* OPTIONS = ' '

* IMPORTING

* LANGUAGE =

* NEW_ARCHIVE_PARAMS =

* RESULT =

EXCEPTIONS

CANCELED = 1

DEVICE = 2

FORM = 3

OPTIONS = 4

UNCLOSED = 5

OTHERS = 6.

CALL FUNCTION 'START_FORM'

EXPORTING

* ARCHIVE_INDEX = ' '

FORM = 'ZHENFINFACT'

LANGUAGE = SY-LANGU

* STARTPAGE = ' '

* PROGRAM = ' '

* IMPORTING

* LANGUAGE =

EXCEPTIONS

FORM = 1

FORMAT = 2

UNENDED = 3

UNOPENED = 4

UNUSED = 5

OTHERS = 6.

SELECT * FROM ZCHSCUST WHERE ID = NUMCLIENT.

CALL FUNCTION 'WRITE_FORM'

Page 89: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 85 sur 181

EXPORTING

ELEMENT = 'CLIENT'

* FUNCTION = 'SET'

* TYPE = 'BODY'

WINDOW = 'ADRESSE'

* IMPORTING

* PENDING_LINES =

EXCEPTIONS

ELEMENT = 1

FUNCTION = 2

TYPE = 3

UNOPENED = 4

UNSTARTED = 5

WINDOW = 6

OTHERS = 7.

ENDSELECT.

SELECT * FROM ZCHSPFLI WHERE CARRID = PCARRID

AND CONNID = PCONNID.

SELECT SINGLE * FROM ZCHSFLIG WHERE CARRID = PCARRID

AND CONNID = PCONNID

AND FLDATE = DATE_VOL.

SELECT SINGLE * FROM ZCHSBOOK WHERE CARRID = PCARRID

AND CONNID = PCONNID

AND FLDATE = DATE_VOL

AND BOOKID = NUMCLIENT.

IF ZCHSBOOK-SMOKER = 'X'.

YESORNO = 'OUI'.

ELSE.

YESORNO = 'NON'.

ENDIF.

CASE ZCHSBOOK-CLASS.

WHEN 'C'.

CLASSEVOYAGE = 'Classe affaire'.

TOTALAPAYER = ( NB_SIEGES * ZCHSFLIG-PRICE

* ( 1 - ZCHSCUST-DISCOUNT ) ) * '0.95'.

WHEN 'Y'.

CLASSEVOYAGE = 'Classe économique'.

TOTALAPAYER = ( NB_SIEGES * ZCHSFLIG-PRICE

* ( 1 - ZCHSCUST-DISCOUNT ) ) * '0.88'.

WHEN 'F'.

CLASSEVOYAGE = 'Première classe'.

TOTALAPAYER = ( NB_SIEGES * ZCHSFLIG-PRICE

* ( 1 - ZCHSCUST-DISCOUNT ) ).

ENDCASE.

CASE ZCHSBOOK-CUSTTYPE.

WHEN 'B'.

QUALITEVOYAGE = 'Voyage d''affaire'.

WHEN 'P'.

QUALITEVOYAGE = 'Voyage privé'.

ENDCASE.

CALL FUNCTION 'WRITE_FORM'

EXPORTING

ELEMENT = 'FACTURAT'

* FUNCTION = 'SET'

TYPE = 'BODY'

WINDOW = 'MAIN'

Page 90: Cours ABAP

L'Object Browser

Cours ABAP.doc Page 86 sur 181

* IMPORTING

* PENDING_LINES =

EXCEPTIONS

ELEMENT = 1

FUNCTION = 2

TYPE = 3

UNOPENED = 4

UNSTARTED = 5

WINDOW = 6

OTHERS = 7.

ENDSELECT.

CALL FUNCTION 'END_FORM'

* IMPORTING

* RESULT =

EXCEPTIONS

UNOPENED = 1

OTHERS = 2.

CALL FUNCTION 'CLOSE_FORM'

* IMPORTING

* RESULT =

* TABLES

* OTFDATA =

EXCEPTIONS

UNOPENED = 1

OTHERS = 2.

ENDFORM. " FACTURATIONS

*&----------------------------------------------------------------------------------------------------------------- *

*& Module USER_COMMAND_1400 INPUT *

*&-----------------------------------------------------------------------------------------------------------------*

* text *

*------------------------------------------------------------------------------------------------------------------- *

MODULE USER_COMMAND_1400 INPUT.

* CASE FCODE.

* WHEN 'BACK'.

* LEAVE TO SCREEN 0.

* WHEN 'SORT'.

* LEAVE PROGRAM.

* ENDCASE.

ENDMODULE. " USER_COMMAND_1400 INPUT

Page 91: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 87 sur 181

Le Batch Input

Le batch input

Il s‟agit du transfert d‟information d‟un ancien système vers SAP. En théorie, à l‟arrivée du développeur ABAP,

il doit disposer d‟un fichier texte, (appelé fichier séquentiel) contenant les informations de l‟ancien système à

transcrire (première conversion déjà effectuée).

Interfaçage entre SAP et un autre système

L'interfaçage entre le logiciel externe et SAP peut se faire dans les deux sens. Les instructions à utiliser sont

données ci-dessous.

Ancien système vers SAP

1) OPEN DATASET Nomfichier1. (par ex : Nomfichier1 = C:\SAPpc\fichseq1.txt)

READ DATASET Nomfichier1 TO NomTabInt1.

CLOSE DATASET NomFichier1.

ou 2) CALL FUNCTION Ws_Upload (c'est une fonction, et c‟est + rapide)

EXPORTING FILENAME = „C:\SAPpc\fichseq1.txt‟

TABLES

DATA_TAB = NomTabInt1 (à déclarer avant)

EXCEPTIONS …

SAP vers ancien système

1) OPEN DATASET Nomfichier1. (par ex: Nomfichier1 = C:\SAPpc\fichseq1.txt)

TRANSFERT DATASET NomTabInt1 TO Nomfichier1.

CLOSE DATASET NomFichier1.

ou 2) CALL FUNCTION Ws_Download (+ rapide)

EXPORTING filename = „C:\SAPpc\fichseq1.txt‟

TABLES

data_tab = NomTabInt1 (à déclarer avant)

EXCEPTIONS …

Remarques: 1) les fichiers sont séquentiels, de type texte (utiliser un éditeur (bloc-notes, Word, works,

etc.)),

2) utiliser le bouton pour appeler la fonction avec l'ensemble de ces paramètres

(référencés en commentaires ne pas oublier d‟enlever l‟* devant exporting par exemple),

3) pour utiliser Word choisir le format ".txt" avec saut de ligne (cela fonctionne, déjà testé).

Mise en œuvre du Batch Input

Sur l'ancien système, réaliser :

le transfert des informations vers un fichier séquentiel de type texte,

la récupération des données du fichier par la fonction Ws_Upload dans une table interne créée tout

spécialement,

remarques: 1) NomTabInt1par exemple, contient autant de champs qu'il y a d‟informations sur

une ligne du fichier séquentiel, ses types seront des caractères et chaînes

decaractères,

2) dans l‟écran de saisie manuelle, placer le curseur dans le champ concerné,

appuyer sur F1 puis cliquer sur info. technique afin de visualiser le nom du champ et

toutes les autres informations nécessaires (nom de la table système où sera stocké la

donnée par exemple, n° du dynpro, etc.)

Page 92: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 88 sur 181

l' appel de la fonction Bdc_Open_Group

EXPORTING

CLIENT = sy-mandt

GROUP = NomGroup1 nom du dossier de Batch Input (8 lettres maxi)

USER = sy-uname

une boucle sur NomTabInt1par :

LOOP AT NomTabInt1.

PERFORM Bdc_Dynpro USING: déclaré à la fin, permet de remplir les champs

„X‟ „Saplmgmm‟ „0060‟ ,

„ „ „Rmmg1-Matnr‟ „NomTabInt1-Article‟,

„ „ „Rmmg1-Mbrsh‟ „NomTabInt1-Branche‟,

„ „ Bdc_Okcode‟ „AUSW‟,

„X‟ „Saplmgmm‟ „0070‟,

„ „ „Msichtausw(01)‟ 'X‟,

… remarque: /0 équivaut à entrée (dans le Okcode)

la récupération par la fonction Bdc_Insert dans la table interne (aussi nommée DynproTab)

Bdc_Tab, table interne déclarée comme ayant la structure de la table système BdcData.

CALL FUNCTION 'Bdc_Insert'

EXPORTING TCODE = „CodeTransaction1‟

TABLES

DYNPROTAB = Bdc_Tab

EXCEPTIONS

l'appel de la fonction Bdc_Close_Group

la déclaration, en fin de programme, de la routine Bdc_Dynpro

FORM Bdc_Dynpro USING DynBegin Field Value.

IF DynBegin = „X‟ .

CLEAR Bdc_Tab.

Bdc_Tab-Program = Field.

Bdc_Tab-Dynpro = Value.

Bdc_Tab-DynBegin = „X‟.

APPEND Bdc_Tab.

ELSE.

CLEAR Bdc_Tab.

Bdc_Tab-Fnam = Field.

Bdc_Tab-Fval = value.

Bdc_Tab-DynBegin = „ „.

APPEND Bdc_Tab.

ENDIF.

ENDFORM.

lancement du Batch Input

Lancer le programme ABAP/4 (F8).

Ensuite, aller dans le menu Système Service Batch Input Traiter, rechercher le nom donné au dossier de

Batch Input NomGroup1 (dans la fonction Bdc_Open_Group)

Exercice sur l'importation de données

Créer un fichier texte et l'importer sous SAP.

Fichier de départ, sous le bloc-notes WINDOWS :

Vélo 1275 F

Moto 68936 F

mobylette 12847 F

Page 93: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 89 sur 181

Chaque champ de ce fichier a une longueur de 10 (longueur rappelée dans la table interne).

Programme ABAP/4 pour importer les données :

REPORT ZHENBATC NO STANDARD PAGE HEADING.

DATA: BEGIN OF ITAB_CYCLO OCCURS 0,

ARTICLE(10) TYPE C,

PRIX(10) TYPE C,

DEVISE(10) TYPE C,

END OF ITAB_CYCLO.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

* CODEPAGE = ' '

FILENAME = 'C :\SAPPC\BATCHINPUT.TXT'

* FILETYPE = ' '

* HEADLEN = ' '

* LINE_EXIT = ' '

* TRUNCLEN = ' '

* USER_FORM = ' '

* USER_PROG = ' '

* IMPORTING

* FILELENGTH =

TABLES

DATA_TAB = ITAB_CYCLO

EXCEPTIONS

CONVERSION_ERROR = 1

FILE_OPEN_ERROR = 2

FILE_READ_ERROR = 3

INVALID_TABLE_WIDTH = 4

INVALID_TYPE = 5

NO_BATCH = 6

UNKNOWN_ERROR = 7

OTHERS = 8.

LOOP AT ITAB_CYCLO.

WRITE: /10 ITAB_CYCLO-ARTICLE, 25 ITAB_CYCLO-PRIX, 40 ITAB_CYCLO-DEVISE.

ENDLOOP.

Page 94: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 90 sur 181

Jeu d'essai :

Les bons reflexes:

Toujours penser, lorsque l'on fait appel à une fonction ou à tout autre outil sous l'éditeur ABAP/4 (sous-

programmes, etc. ), de passer par un modèle (bouton "Modèle"), ce qui permet de récupérer correctement la

syntaxe, ainsi que les options (voir, dans le listing, l'appel à la fonction WS_UPLOAD).

Page 95: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 91 sur 181

Informations sur le batch input

Où rechercher les informations nécessaires pour réaliser le Batch-Input. Un exemple avec la gestion des articles.

Cliquer sur Logistique gestion des articles fiche article, puis Articles création générale

immédiatement. On aboutit à l'écran suivant :

Positionner le curseur sur une des zones (par exemple, sur la zone "Article"), puis appuyer sur la touche "F1", et

sélectionner l'option "Info technique", pour accéder à l'écran suivant :

On trouve, dans cet écran, toutes les données nécessaires pour renseigner le programme ABAP/4 qui fera le

Batch Input (zones importantes dans le schéma ci-dessus) Lorsque apparaissent des noms de programme et des

numéros d'écrans dans la catégorie "Désignation de zone pour batch input", ce sont ces données là qu'il faudra

prendre en compte dans le programme ABAP/4.

Il faut alors noter, en suivant scrupuleusement le cheminement des écrans, les diverses données

nécessaires pour renseigner le programme de Batch Input.

Zones

importantes

Page 96: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 92 sur 181

Mise en œuvre d'un dossier Batch Input

Reprenons l'exemple des articles à intégrer à SAP R/3. Ces articles sont saisis dans le fichier séquentiel

Batchinput.txt.

Ce travail constitue en fait la première tache à accomplir avant de créer un dossier de Batch Input. Il faut en effet

que les données reprises dans le fichier séquentiel soit formatées selon leurs caractéristiques futures dans SAP

R/3. Pour cela, il faut bien sûr aller rechercher dans SAP R/3 les caractéristiques des zones dans lesquelles seront

sauvegardées les nouvelles valeurs désirées.

Le fichier Batchinput.txt comprendra les champs suivants : désignation, branche, type, quantité, langue et

description

Les opérations à réaliser dans le programme ABAP/4 sont les suivantes :

définir une table interne (ITAB_ARTICLES reprenant les champs du fichier texte),

définir la table interne BDC (ITAB_BDC ayant la même structure que la table BDCDATA),

appeler la fonction WS_UPLOAD,

vérifier la véracité des données importées,

appeler de la fonction BDC_OPEN_GROUP,

remplir la table BDC (avec un sous-programme),

appeler la fonction BDC_INSERT,

appeler la fonction BDC_CLOSE_GROUP.

Fichier Batchinput.txt :

Véloh2 MCONT001FVélo pour homme

Vélof2 ADIEN002DVélo pour femme

VTTh2 MERSA004EVélo tout terrain pour homme

VTTf2 AFERT007FVélo tout terrain pour femme

Collecte des données nécessaires pour le rapatriement des données. 1

er écran (snapshot réalisé avec "Article") :

Données extraites pour Article :

Nom programme SAPLMGMM

Numéro d'écran 0060

Nom de table RMMG1

Nom de zone MATNR

Données extraites pour Branche :

Nom programme SAPLMGMM

Page 97: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 93 sur 181

Numéro d'écran 0060

Nom de table RMMG1

Nom de zone MBRSH

Données extraites pour Type :

Nom programme SAPLMGMM

Numéro d'écran 0060

Nom de table RMMG1

Nom de zone MTART

Il faut ensuite noter les données concernant l'écran de sélection des vues.

2ème

écran (Sélection des vues) :

Données extraites pour l'écran de sélection des vues :

Nom programme SAPLMGMM

Numéro d'écran 0070

Nom de table MSICHTAUSW

Nom de zone DYTXT

Page 98: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 94 sur 181

3ème

écran (Données de base, zone Unité de quantité base)

Données extraites pour Unité de quantité base :

Nom de table MARA

Nom de zone MEINS

Nom programme SAPLMGMM

Numéro d'écran 3004

Données extraites pour Unité de quantité base :

Nom de table SKTEXT

Nom de zone SPRAS

Nom programme SAPLMGMM

Numéro d'écran 3004

Données extraites pour Unité de quantité base :

Nom de table SKTEXT

Nom de zone MAKTX

Nom programme SAPLMGMM

Numéro d'écran 3004

Page 99: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 95 sur 181

Le programme ABAP/4

REPORT ZHENBATC NO STANDARD PAGE HEADING.

DATA: BEGIN OF ITAB_ARTICLES OCCURS 0,

ARTICLE(18) TYPE C,

BRANCHE(1) TYPE C,

ATYPE(4) TYPE C,

QUANTITE(3) TYPE C,

LANGUE(1) TYPE C,

DESCRIPTION(40) TYPE C,

END OF ITAB_ARTICLES.

DATA: BEGIN OF ITAB_BDC OCCURS 0.

INCLUDE STRUCTURE BDCDATA.

DATA: END OF ITAB_BDC.

*-----------------------------------------------------------------------------------------------------------*

* Chargement des données stockées dans le fichier *

* séquentiel dans la table interne ITAB_ARTICLES. *

*-----------------------------------------------------------------------------------------------------------*

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

* CODEPAGE = ' '

FILENAME = 'C:\SAPPC\batchinput.txt'

* FILETYPE = ' '

* HEADLEN = ' '

* LINE_EXIT = ' '

* TRUNCLEN = ' '

* USER_FORM = ' '

* USER_PROG = ' '

* IMPORTING

* FILELENGTH =

TABLES

DATA_TAB = ITAB_ARTICLES

EXCEPTIONS

CONVERSION_ERROR = 1

FILE_OPEN_ERROR = 2

FILE_READ_ERROR = 3

INVALID_TABLE_WIDTH = 4

INVALID_TYPE = 5

NO_BATCH = 6

UNKNOWN_ERROR = 7

OTHERS = 8.

*--------------------------------------------------------------------------------------- --------------------*

* Test des valeurs pour en vérifier l'exactitude. *

*----------------------------------------------------------------------------------------------------------- *

LOOP AT ITAB_ARTICLES.

WRITE: / ITAB_ARTICLES-ARTICLE,

20 ITAB_ARTICLES-BRANCHE,

25 ITAB_ARTICLES-ATYPE,

30 ITAB_ARTICLES-QUANTITE,

35 ITAB_ARTICLES-LANGUE,

38 ITAB_ARTICLES-DESCRIPTION.

ENDLOOP.

*-------------------------------------------------------------------------------------------------- ---------*

Page 100: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 96 sur 181

* Appel à la fonction BDC_OPEN_GROUP pour l'ouverture *

* du dossier BATCH INPUT. *

*-----------------------------------------------------------------------------------------------------------*

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

* DEST = FILLER8

GROUP = 'CHENBATC' " Nom du dossier Batch Input

* HOLDDATE = FILLER8

* KEEP = 'X'

USER = SY-UNAME

* RECORD = FILLER1

* IMPORTING

* QID =

EXCEPTIONS

CLIENT_INVALID = 1

DESTINATION_INVALID = 2

GROUP_INVALID = 3

GROUP_IS_LOCKED = 4

HOLDDATE_INVALID = 5

INTERNAL_ERROR = 6

QUEUE_ERROR = 7

RUNNING = 8

SYSTEM_LOCK_ERROR = 9

USER_INVALID = 10

OTHERS = 11.

*--------------------------------------------------------------------------------------------------------- --*

* Remplissage de la table BDC_ITAB au moyen du sous-programme *

* BDC_DYNPRO, puis remplissage de la table DYNPROTAB au moyen *

* de la fonction BDC_INSERT pour le remplissage du dossier *

* BATCH INPUT. *

*----------------------------------------------------------------------------------------------------------- *

LOOP AT ITAB_ARTICLES.

PERFORM BDC_DYNPRO USING :

'X' 'SAPLMGMM' '0060',

' ' 'RMMG1-MATNR' ITAB_ARTICLES-ARTICLE,

' ' 'RMMG1-MBRSH' ITAB_ARTICLES-BRANCHE,

' ' 'RMMG1-MTART' ITAB_ARTICLES-ATYPE,

' ' 'BDC_OKCODE' 'AUSW',

'X' 'SAPLMGMM' '0070',

' ' 'MSICHTAUSW-KZSEL(01)' 'X',

' ' 'BDC_OKCODE' '/0',

'X' 'SAPLMGMM' '3004',

' ' 'MARA-MEINS' ITAB_ARTICLES-QUANTITE,

' ' 'SKTEXT-SPRAS(01)' ITAB_ARTICLES-LANGUE,

' ' 'SKTEXT-MAKTX(01)' ITAB_ARTICLES-DESCRIPTION,

' ' 'BDC_OKCODE' '/0',

' ' 'BDC_OKCODE' '/0'.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = 'MM01'

* POST_LOCAL = NOVBLOCAL

* PRINTING = NOPRINT

TABLES

DYNPROTAB = ITAB_BDC

EXCEPTIONS

Page 101: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 97 sur 181

INTERNAL_ERROR = 1

NOT_OPEN = 2

QUEUE_ERROR = 3

TCODE_INVALID = 4

PRINTING_INVALID = 5

POSTING_INVALID = 6

OTHERS = 7.

CLEAR ITAB_BDC.

REFRESH ITAB_BDC.

ENDLOOP.

*----------------------------------------------------------------------------------------------------------- *

* Appel à la fonction BDC_CLOSE_GROUP, pour fermer le *

* dossier BATCH INPUT. *

*----------------------------------------------------------------------------------------------------------- *

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

NOT_OPEN = 1

QUEUE_ERROR = 2

OTHERS = 3.

*----------------------------------------------------------------------------------------------------------- *

* Form BDC_DYNPRO *

*----------------------------------------------------------------------------------------------------------- *

* Sous-programme pour le remplissage de la table ITAB_BDC *

*-----------------------------------------------------------------------------------------------------------*

FORM BDC_DYNPRO USING DYNBEGIN CHAMP1 VALEUR.

IF DYNBEGIN ='X'.

CLEAR ITAB_BDC.

ITAB_BDC-PROGRAM = CHAMP1.

ITAB_BDC-DYNPRO = VALEUR.

ITAB_BDC-DYNBEGIN = 'X'.

APPEND ITAB_BDC.

ELSE.

CLEAR ITAB_BDC.

ITAB_BDC-FNAM = CHAMP1.

ITAB_BDC-FVAL = VALEUR.

ITAB_BDC-DYNBEGIN = ' '.

APPEND ITAB_BDC.

ENDIF.

ENDFORM. " BDC_DYNPRO

Page 102: Cours ABAP

Le Batch Input

Cours ABAP.doc Page 98 sur 181

Lancement du Batch Input

Dans Système Service Batch input Traiter, on aboutit à l'écran ci-dessous, dans lequel on donne le nom

du programme de Batch Input.

Page 103: Cours ABAP

SAPscript

Cours ABAP.doc Page 99 sur 181

SAPscript

Les formulaires

Création d’un formulaire

Créer un formulaire Z_NomFormule1.

Renseigner ses attributs.

Créer ses pages (First, Next).

Créer ses fenêtres (toujours une fenêtre principale Main, type Const pour les fenêtres invariantes

(du style "Veuillez agréer …"), Var pour les fenêtres variables (zone pour l'adresse d'un client,

numéro de page, etc.)).

Remarques: 1) il faut au moins une fenêtre par page, la fenêtre Main étant indispensable,

2) on peut réutiliser la même fenêtre dans plusieurs pages.

Créer des paragraphes: il est possible de choisir des polices et des tabulations prédéfinies (il faut

renseigner, dans les attributs du formulaire, le paragraphe principal qui sera utilisé).

Crée ses fenêtres de page: On décrit ici physiquement les fenêtres, ainsi que leur emplacement dans

la page (dans la partie "Fenêtres de page", dans le menu Traiter Créer élément, choisir une

fenêtre, puis en préciser les caractéristiques (distance du bord gauche, distance du bord supérieur,

largeur de la fenêtre et enfin hauteur de la fenêtre)).

Remarques: la référence de la page est le coin supérieur gauche. Les unités que l'on peut utiliser

aisément sont "le caractère" ou le centimètre.

Créer les éléments de texte pour chaque fenêtre : double cliquer sur une fenêtre dans la partie

"Fenêtres de page" de SAPscript et cliquer sur le bouton .

Renseigner la colonne de gauche qui précise le type de la phrase qui suit (/* commentaire, *

paragraphe par défaut, /E élément de texte, /: ligne de commande, tabulateurs et paragraphes

définis).

Créer des chaînes de caractères (optionnel) : donne un format à un mot ou un groupe de mots sur

une ligne. On définit une police (Helvetic 200 par exemple) qu‟on nomme C. Dans tabulation on

écrit P1 Coucou c‟est <C> MOA </>

Créer des feuilles de style (optionnel) : elles sont conçues pour récupérer paragraphes et chaînes de

caractères dans d‟autres formulaires. On y accède par le menu Outils Traitement Feuille de

style. (voir chapitre 2, BC Style and Layout Set Maintenance)

Page 104: Cours ABAP

SAPscript

Cours ABAP.doc Page 100 sur 181

Un clic sur le bouton afficher, la case en-tête étant cochée :

Page 105: Cours ABAP

SAPscript

Cours ABAP.doc Page 101 sur 181

Un clic sur le bouton Pages:

Un clic sur le bouton Fenêtres:

Page 106: Cours ABAP

SAPscript

Cours ABAP.doc Page 102 sur 181

Un clic sur le bouton Paragraphes:

Un clic sur le bouton Fenêtres de page :

Un clic sur le bouton Eléments de texte :

Cette fenêtre est constituée de deux colonnes : la première comprend des éléments de codage (matchcodes) et la

deuxième comprend le texte tapé.

Page 107: Cours ABAP

SAPscript

Cours ABAP.doc Page 103 sur 181

Avec le matchcode "Barre de style" :

Un aperçu avant impression (sous le bouton Pages, menu Utilitaires Présentation de page, puis Aperçu avant

impression, l'unité de sortie valant NPFR) :

Page 108: Cours ABAP

SAPscript

Cours ABAP.doc Page 104 sur 181

Impression d'un formulaire :

Créer un programme qui appelle les fonctions suivantes :

CALL FUNCTION 'Open_Form' indique qu‟on va imprimer des Formulaires

CALL FUNCTION 'Start_Form' indique un des formulaires

EXPORTING

FORM = „Z_NomFormule1‟

LANGUAGE = sy-langu

EXCEPTIONS

CALL FUNCTION 'Write_Form' autant que d‟élément à imprimer

ELEMENT = „NomElement1‟ si déclaré dans les éléments de texte (type /E)

TYPE = „Top‟ ou ‟Body‟ ou „Bottom‟ à n'utiliser qu'avec la fenêtre MAIN

WINDOW = „NomFenetre1‟

CALL FUNCTION 'End_Form' ferme un formulaire ouvert

CALL FUNCTION 'Close_Form' termine l‟impression

Remarques: 1) tout ce qu‟on met entre cottes dans un formulaire doit être écrit en majuscules,

2) tout ce qu'on définit dans les parties Top et Bottom de la fenêtre Main sont automatiquement

réimprimé sur toutes les pages où cette fenêtre Main est utilisée.

3) dans l‟éditeur des éléments de texte, les variables sont encadrées par &,

(ex : &TabInt-CityFrom& &TabInt-CityTo&)

4) pour utiliser les tabulations, séparer les & & par deux virgules (,,),

(ex : &TabInt-CityFrom&,, &TabInt-CityTo&)

5) pour imprimer un tableau:

/: BOX XPOS 1 cm YPOS „1.5‟ cm

= WIDTH 15 cm HEIGHT 18 cm FRAME 10 TW INTENSITY 15

(pour fixer une origine sur le coin supérieur gauche de la page ou de la fenêtre avec WINDOW, ou par

XORIGIN 5 cm YORIGIN 4 cm):

= POSITION PAGE

= SIZE WINDOW (trace un cadre autour de la fenêtre ou de la page si PAGE)

Remarque: 1) BOX … WIDTH 0 cm pour tracer un trait vertical

2) BOX … HEIGHT 0 cm pour tracer un trait horizontal

Page 109: Cours ABAP

SAPscript

Cours ABAP.doc Page 105 sur 181

Attention: 1) il faut activer ou générer au maximum, toutefois la syntaxe est très peu contrôlée dans les

éléments de texte (vérifier les espaces notamment),

2) lorsqu‟une valeur est nulle, le préciser avec son unité,

3) ne pas confondre le nom de l‟élément et celui de la fenêtre.

Quelques commandes SAP pour le sapscript

/: Permet de mettre une ligne de commande.

* Paragraphe par défaut.

P1 Paragraphe 1 permet d'écrire des lignes de texte.

/E Elément de texte.

/ Avance ligne

/* Ligne de commentaire.

/: PROTECT

= …

/: ENDPROTECT

ne coupera pas l'affichage de données groupées, si la place manque, en bas de page, mais

passera directement à la page suivante.

/ : SET DATE MASK „Metz, MM/DD/YYYY‟

= ...

/ : &date& (à l‟appel)

permet de créer un masque pour l'affichage de la date (ici, METZ, le 22/09/1998).

/ : STYLE NomStyle1

= …

/ : STYLE *

tout ce qui est écrit entre ces deux instructions sera écrit dans le style défini dans la

feuille de style NomStyle1.

/ : ADDRESS PARAGRAPH P1 Attention à l'écriture de ADDRESS (2 'D' et 2 'S').

= …

/ : ENDADDRESS

écrit les données sous le format ADRESSE, en utilisant le style du paragraphe P1.

/ : TOP

= …

/ : ENDTOP

définit des données dans l'en-tête de la fenêtre Main, données qui seront affichées dans

toutes les pages où cette fenêtre Main a été déclarée.

/ : BOTTOM

= …

/ : ENDBOTTOM

définit des données dans le pied de la fenêtre Main, données qui seront affichées dans

toutes les pages où cette fenêtre Main a été déclarée.

/ : IF Cond1

= …

/ : ELSE

= …

/ : ENDIF

permet de réaliser des tests pour affichage sélectif.

Page 110: Cours ABAP

SAPscript

Cours ABAP.doc Page 106 sur 181

/ : CASE Var1

/ : WHEN 'Val1'

= …

/: ENDCASE

permet de faire des études de cas pour un affichage sélectif.

/ : PERFORM NomForm1 IN PROGRAM NomProgramme1

= USING &…&

= CHANGING &…&

/ : ENDPERFORM

permet de faire appel à des routines (NomForm1) de programmes externes

(NomProgramme1).

Remarque: il est possible de travailler avec des codes à barres dans Sapscript. Pour cela, aller dans

Fenêtre Chaîne de caractères en bas à gauche, case pour le type de driver imprimante en cas

d‟utilisation de codes barres.

Symboles dans SAPscript:

DATE Date

DAY Jour

DEVICE Elément de sortie

HOURS Heure

MINUTES Minute

MONTH Mois

NAME_OF_DAY Nom du jour

NAME_OF_MONTH Nom du mois

NEXTPAGE Numéro de la page suivante

PAGE Numéro de la page

SECONDS Seconde

SPACE Espace

TIME Heure

ULINE Souligné

VLINE Ligne verticale

YEAR Année

Page 111: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 107 sur 181

Fonction d'appels sous ABAP/4

REPORT ZHENFORM no standard page heading.

CALL FUNCTION 'OPEN_FORM' * EXPORTING

* APPLICATION = 'TX'

* ARCHIVE_INDEX = ' '

* ARCHIVE_PARAMS = ' '

* DEVICE = 'PRINTER'

* DIALOG = 'X'

* FORM = ' '

* LANGUAGE = SY-LANGU

* OPTIONS = ' '

* IMPORTING

* LANGUAGE =

* NEW_ARCHIVE_PARAMS =

* RESULT =

EXCEPTIONS

CANCELED = 1

DEVICE = 2

FORM = 3

OPTIONS = 4

UNCLOSED = 5

OTHERS = 6.

CALL FUNCTION 'START_FORM' EXPORTING

* ARCHIVE_INDEX = ' '

FORM = 'ZHENFORM'

LANGUAGE = SY-LANGU

* STARTPAGE = ' '

* PROGRAM = ' '

* IMPORTING

* LANGUAGE =

EXCEPTIONS

FORM = 1

FORMAT = 2

UNENDED = 3

UNOPENED = 4

UNUSED = 5

OTHERS = 6.

CALL FUNCTION 'WRITE_FORM' EXPORTING

ELEMENT = 'TATA'

* FUNCTION = 'SET'

TYPE = 'BODY'

WINDOW = 'MAIN'

* IMPORTING

* PENDING_LINES =

EXCEPTIONS

ELEMENT = 1

FUNCTION = 2

TYPE = 3

UNOPENED = 4

UNSTARTED = 5

On lui dit que l'on va

ouvrir un formulaire

On spécifie le formulaire

que l'on va ouvrir

(à préciser pour chaque

formulaire à ouvrir)

On ouvre le formulaire

en écriture pour l'élément

"TATA", élément déclaré

dans une fenêtre du formulaire

via le codage "/E"

Page 112: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 108 sur 181

WINDOW = 6

OTHERS = 7.

CALL FUNCTION 'END_FORM' * IMPORTING

* RESULT =

EXCEPTIONS

UNOPENED = 1

OTHERS = 2.

CALL FUNCTION 'CLOSE_FORM' * IMPORTING

* RESULT =

* TABLES

* OTFDATA =

EXCEPTIONS

UNOPENED = 1

OTHERS = 2.

Exercice

Ecrire un formulaire réalisant l'édition des données "COUNTRY", "NAME1" et "CITY" de la table TABNA dans

un formulaire. Les données doivent y apparaître dans un tableau de 3 colonnes, triées par pays, société et ville,

avec en outre un pays par page.

Edition du formulaire ZHENTABNA

L'en-tête :

On ferme le formulaire

ouvert avec l'instruction

"OPEN_FORM"

(il doit y avoir autant de

"END_FORM" qu'il y a de

"OPEN_FORM")

On ferme la session

formulaire

Page 113: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 109 sur 181

Les pages :

Les fenêtres

Page 114: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 110 sur 181

Le paragraphe standard:

Page 115: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 111 sur 181

Le paragraphe avec Police:

Le paragraphe avec Tabulation:

Page 116: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 112 sur 181

Les fenêtres de pages :

La page FIRST

Elément de texte pour ENTETE :

Page 117: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 113 sur 181

Elément de texte pour ADRESSE :

Elément de texte pour README:

Page 118: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 114 sur 181

Elément de texte pour MAIN:

Elément de texte pour PIED:

Déclaration

de la partie

"TOP"

Fermeture

de la partie

"TOP"

Cadre externe

Lignes:

2 verticales

1 horizontale

Page 119: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 115 sur 181

Page NEXT:

Elément de texte pour MAIN:

Page 120: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 116 sur 181

Elément de texte pour PIED:

Le programme :

REPORT ZHENFORM NO STANDARD PAGE HEADING.

TABLES: TABNA.

DATA: BEGIN OF ITAB_TABNA OCCURS 0,

COUNTRY LIKE TABNA-COUNTRY,

NAME1 LIKE TABNA-NAME1,

CITY LIKE TABNA-CITY,

END OF ITAB_TABNA.

SELECT * FROM TABNA.

MOVE-CORRESPONDING TABNA TO ITAB_TABNA.

APPEND ITAB_TABNA.

ENDSELECT.

SORT ITAB_TABNA BY COUNTRY NAME1 CITY.

CALL FUNCTION 'OPEN_FORM'

* EXPORTING

* APPLICATION = 'TX'

* ARCHIVE_INDEX = ' '

* ARCHIVE_PARAMS = ' '

* DEVICE = 'PRINTER'

* DIALOG = 'X'

* FORM = ' '

* LANGUAGE = SY-LANGU

* OPTIONS = ' '

* IMPORTING

* LANGUAGE =

* NEW_ARCHIVE_PARAMS =

* RESULT =

EXCEPTIONS

CANCELED = 1

Page 121: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 117 sur 181

DEVICE = 2

FORM = 3

OPTIONS = 4

UNCLOSED = 5

OTHERS = 6.

CALL FUNCTION 'START_FORM'

EXPORTING

* ARCHIVE_INDEX = ' '

FORM = 'ZHENTABNA'

LANGUAGE = SY-LANGU

* STARTPAGE = ' '

* PROGRAM = ' '

* IMPORTING

* LANGUAGE =

EXCEPTIONS

FORM = 1

FORMAT = 2

UNENDED = 3

UNOPENED = 4

UNUSED = 5

OTHERS = 6.

CALL FUNCTION 'WRITE_FORM'

EXPORTING

ELEMENT = 'DATE'

* FUNCTION = 'SET'

* TYPE = 'BODY'

WINDOW = 'ENTETE'

* IMPORTING

* PENDING_LINES =

EXCEPTIONS

ELEMENT = 1

FUNCTION = 2

TYPE = 3

UNOPENED = 4

UNSTARTED = 5

WINDOW = 6

OTHERS = 7.

LOOP AT ITAB_TABNA.

CALL FUNCTION 'WRITE_FORM'

EXPORTING

ELEMENT = 'WELCHES'

* FUNCTION = 'SET'

TYPE = 'BODY'

WINDOW = 'MAIN'

* IMPORTING

* PENDING_LINES =

EXCEPTIONS

ELEMENT = 1

FUNCTION = 2

TYPE = 3

UNOPENED = 4

UNSTARTED = 5

WINDOW = 6

OTHERS = 7.

AT END OF COUNTRY.

Page 122: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 118 sur 181

CALL FUNCTION 'WRITE_FORM'

EXPORTING

ELEMENT = 'SAUTONS'

* FUNCTION = 'SET'

TYPE = 'BODY'

WINDOW = 'MAIN'

* IMPORTING

* PENDING_LINES =

EXCEPTIONS

ELEMENT = 1

FUNCTION = 2

TYPE = 3

UNOPENED = 4

UNSTARTED = 5

WINDOW = 6

OTHERS = 7.

ENDAT.

ENDLOOP.

CALL FUNCTION 'END_FORM'

* IMPORTING

* RESULT =

EXCEPTIONS

UNOPENED = 1

OTHERS = 2.

CALL FUNCTION 'CLOSE_FORM'

* IMPORTING

* RESULT =

* TABLES

* OTFDATA =

EXCEPTIONS

UNOPENED = 1

OTHERS = 2.

Lancement du programme :

Suite au lancement du programme ABAP/4, on passe par la fenêtre d'impression, dans laquelle on clique sur le

bouton "Aperçu avant impression".

Page 123: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 119 sur 181

Les jeux d'essais :

1

ère page, haut

1

ère page, bas

Page 124: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 120 sur 181

2

ème page, haut

A l'édition, il y a dix pages de données.

Page 125: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 121 sur 181

GESTION DES MESSAGES EXEMPLE ET EXPLICATIONS.

Création d'une liste de messages:

Développement Envir. Développement Messages

Utilisation des messages.

Sous-programme.

*"------------------------------------------------------------------------------------------------------------------ *

*" IMPORTING *

*" VALUE(CHOIX) OPTIONAL *

*" VALUE(SOMME) OPTIONAL *

*" EXPORTING *

*" REFERENCE(RESULTAT) *

*" EXEPTIONS *

*" MAUVAISE_ENTREE *

*"------------------------------------------------------------------------------------------------------------------ *

IF SOMME BETWEEN '0' AND '100'.

CASE CHOIX.

WHEN '1'.

RESULTAT = SOMME * 2 / 13.

WHEN '2'.

RESULTAT = SOMME * 13 / 2.

ENDCASE.

ELSE.

RAISE MAUVAISE_ENTREE.

ENDIF.

ENDFUNCTION.

Programme principal.

REPORT ZDAVEURO NO STANDARD PAGE HEADING MESSAGE-ID ZG.

PARAMETERS : ISOMME TYPE P,

EURO RADIOBUTTON GROUP DEVI,

FRANC RADIOBUTTON GROUP DEVI.

DATA : DSELECT TYPE N,

CONVERT TYPE P.

IF EURO = 'X'.

DSELECT = '1'.

ELSE.

DSELECT = '2'.

ENDIF.

CALL FUNCTION 'Z_DAVY_CONVERT_EURO'

EXPORTING

CHOIX = DESELECT

SOMME = ISOMME

IMPORTING

RESULTAT = CONVERT

EXEPTIONS

MAUVAISE_ENTRE = '2'.

IF SY-SUBRC = 2.

MESSAGE I001.

* la somme n'est pas comprise entre 0 et 100*

ELSE.

IF EURO ='X'.

WRITE :/ ISOMME, 'francs font', CONVERT,

'euros'.

ELSE.

WRITE :/ ISOMME, ' euros font', CONVERT, '

francs '.

ENDIF.

ENDIF.

Page 126: Cours ABAP

Fonction d'appels sous ABAP/4

Cours ABAP.doc Page 122 sur 181

Création d’un groupe de fonctions

Dans l‟object browser, cocher la case Groupe de fonctions, donner un nom de groupe (Z***), cliquer sur , et

.

Création d’une fonction dans un groupe de fonctions

Dans la bibliothèque de fonctions,

- indiquer le nom de la fonction commençant par un Z dans le module fonction (et oui c‟est trompeur),

- créer ( ),

- une fenêtre s‟affichera dans laquelle on indiquera le nom du groupe de fonctions déjà existant,

- renseigner la case "application" avec tous sauf *,

- donner une désignation,

- sauvegarder,

- générer,

Remarque: pour changer ces attributs, aller dans Saut Administration,

- cliquer sur pour atteindre la capsule de la fonction et y ajouter un contenu,

- activer,

- sélectionner avec les radio boutons les interfaces I/E et Tables/Exceptions pour y indiquer les

paramètres d‟entrée/sortie et les exceptions si besoin est.

Remarques: 1) les paramètres considérés en entrée dans la fonction sont déclarés en sortie dans le

programme, et vice-versa pour les paramètres en entrée,

2) ne pas préciser le type des paramètres en entrée/sortie dans la fonction,

3) pour un passage de données par adresse, on n‟a plus besoin d‟exporter la variable dans la

fonction une fois le traitement effectué.

Implémentation dans l‟éditeur abap/4 ou un éditeur de l‟object browser :

création "manuelle" de la fonction :

call function „NomFonction1‟

exporting Var1 = 'Val1'

Var2 = 'Val2'

importing Var3 = 'Val3'

exceptions Mauvaise_Entrée = 1

Others = 2.

dans l'éditeur ABAP/4, cliquer sur le bouton et préciser en face du radio bouton

"Function", le nom de la fonction à créer.

Remarques: 1) Val1, Val2, Val3, Mauvaise_Entrée sont saisis dans les interfaces de la fonction

(voirZS14g5),

2) l‟exception s‟il y en a sera transférée dans sy-subrc,

3) on peut appeler une fonction dans une autre fonction.

Page 127: Cours ABAP

Modularisation

Cours ABAP.doc Page 123 sur 181

MODULARISATION

Les instructions PERFORM et FORM

Remarque : il vaut mieux regrouper les sous-programmes à la fin du programme

Remarque : dans ce qui suit, les variables gi sont des variables du Sous-Programme.

Données locales et globales :

Lorsqu'on définit des DATA dans le Programme, les données sont alors globales.

Lorsqu'on définit des DATA dans un Sous-Programme, les données sont locales.

Les structures définies par l‟instruction TABLES sont toujours globales. Si on veut qu‟elles soient locales, il

faut les définir avec l‟instruction LOCAL.

Passage par valeurs entre paramètres réels et paramètres formels

Les différentes syntaxes dépendent du type de passage des paramètres. Il doit y avoir autant de paramètres réels

que de paramètres formels.

Appel par valeur

Appel dans le programme: PERFORM Nom_routine1 USING f1.

Déclaration de la routine: FORM Nom_Routine1 USING g1.

Lorsqu‟un sous-programme est appelé, des paramètres formels sont créés

comme copie des paramètres réels, dans leur propre espace mémoire, et la valeur du paramètre réel f1 est passée

au paramètre formel g1.

Appel par référence (adresse):

Appel dans le programme: PERFORM Nom_routine1 USING f2.

Déclaration de la routine: FORM Nom_routine1 USING VALUE g2.

Lorsqu‟un sous-programme est appelé, seule l‟adresse du paramètre réel f2

est transmise au paramètre formel g2. Au moment de l‟appel du sous-

programme, l'adresse de f2 est passée à g2, qui dispose de sa propre place

mémoire. Si on modifie la valeur du paramètre formel g2, le contenu de la zone f2 du programme principal

change également.

Appel par valeur et résultat :

Appel dans le programme: PERFORM Nom_routine1 CHANGING VALUE f3.

Déclaration de la routine: FORM Nom_routine1 CHANGING VALUE g3.

Les paramètres formels ont leur propre espace mémoire. A la fin du sous-

programme, la valeur du paramètre formel g3 est copiée dans l‟espace

mémoire du paramètre réel f3 assigné. A l‟appel du sous-programme, on

copie la valeur de f3 dans g3, puis en sortant du sous-programme, et

uniquement en sortant du programme, f3 est alors modifié. Si on sort du sous-programme avant qu‟il soit

complètement exécuté, par le biais d'une instruction EXIT ou CHECK, f3 ne sera alors pas modifié.

f1

g1

Val1 Val1

f2

g2

Val1

AdresseX

AdresseX

f3

g3

Val1 Val1

Page 128: Cours ABAP

Modularisation

Cours ABAP.doc Page 124 sur 181

Appel d‟un Sous-Programme à partir d‟un programme de façon classique

PERFORM nom_routine.

FORM nom_routine.

Instructions.

ENDFORM.

Si on est dans le Programme où on appelle le Sous-Programme, on n'a pas besoin d‟utiliser USING … pour

avoir passage de toutes les valeurs globales

Appel d‟un Sous-Programme à partir d‟un autre programme

Dans le Report 1, on a : FORM nom_routine USING …

CHANGING …

Instructions.

ENDFORM.

Dans le Report 2, on a : PERFORM nom_routine (Report1).

Remarque : On est obligé d‟écrire USING … pour définir les données globales.

Transfert de Structure

Au lieu de transférer une table, on peut travailler avec une structure interne (que l‟on appellera pour l‟exemple

rec).

FORM nom_routine USING rec LIKE sflight.

Ou FORM nom_routine USING rec TYPE sflight.

Déclaration de type table

Si on n‟affecte pas de TYPE au paramètre formel, on ne peut pas adresser les zones de la structure.

Ou FORM nom_routine USING rec TYPE sflight OCCURS 10.

Déclaration de type table avec structure de 10 lignes

Ici on a une structure d‟en-tête qui ressemble à une table système sflight

(Rappel : rec est une table interne).

Remarque : Si on déclare une table en TYPE et non en DATA :

TYPE : BEGIN OF tab.

Champ1 LIKE table1-champ1.

….

END OF tab.

Tab est alors un type de table et non une table elle-même. Ensuite, on l‟utilise dans la routine avec :

FORM nom_routine USING rec TYPE tab.

Page 129: Cours ABAP

Modularisation

Cours ABAP.doc Page 125 sur 181

Ou FORM nom_routine USING rec TYPE tab OCCURS n.

Quand on écrit la 2e version, la structure devient une table formelle.

Remarque : Si on veut une table interne avec la même structure qu‟une table du dictionnaire :

On peut transférer des tables internes avec USING ou TABLES (voir p.10-11 du fascicule BC400).

PERFORM nom_routine TABLES tab.

FORM nom_routine TABLES itab STRUCTURE tab.

Dans l‟instruction PERFORM, on signale qu‟on reprend la table interne tab, puis dans le Sous-Programme, on

définit un autre nom pour la table interne, à savoir itab, que l‟on déclare identique à tab.

Ceci permet de pouvoir travailler sur itab pendant tout le déroulement du Sous-programme sans modifier la table

tab, car on est sur une autre adresse.

Ainsi, lorsqu‟on sortira du Sous-Programme, itab n‟existera plus et tab aura gardée sa valeur initiale.

PERFORM nom_routine USING tab[ ].

….

FORM nom_routine USING tabbody LIKE tab[ ].

DATA : tab2 LIKE sflight.

Dans l‟instruction PERFORM, on signale qu‟on reprend la table interne tab, puis dans le Sous-Programme, on

définit un autre nom pour la table interne, à savoir tabbody, que l‟on déclare identique à tab (tabbody contient

toutes les valeurs de tab).

Ceci permet de pouvoir travailler sur tabbody pendant tout le déroulement du Sous-Programme sans modifier la

table tab, car on est sur une autre adresse.

Ainsi, lorsqu‟on sortira du Sous-Programme, tabbody n‟existera plus et tab aura gardée sa valeur initiale.

De plus, on déclare une table interne au sein du Sous-Programme, tab2, qui n‟existera qu‟au niveau du Sous-

Programme et qui permettra des traitements particuliers.

Avec TABLES, on ne transfère pas la ligne d‟en-tête.

Avec USING, on transfère la ligne d‟en-tête.

Remarque : Les tables internes sont toujours transférées par adresse (on ne peut pas les transférer par valeur)

Page 130: Cours ABAP

Modularisation

Cours ABAP.doc Page 126 sur 181

L’instruction SUBMIT

SUBMIT reportA VIA SELECTION-SCREEN.

Passage par écran de sélection

SUBMIT reportA WITH para = X.

Si para seul prendra la valeur donnée X

Si para = rien prendra la valeur par défaut (ici toto)

Il reconnaît para car on l‟a déjà déclaré dans le programme Report A

a

B

Dans ces 2 cas, on ne peut pas retourner au programme.

Pour y retourner, on doit utiliser l‟instruction END RETURN

Report 0 Report1

1

Report 0 Report A :

Ecran de

Selection

Liste

PARAMETERS para(10) DEFAULT „toto‟

Page 131: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 127 sur 181

TRUCS ET ASTUCES

Création de vues

INTERÊT :

Prenons les tables spfli et sflight ; on remarque que ces deux tables sont en relation grâce aux champs carrid et

connid (qui sont la clé de SPFLI => unicité : il n‟y a qu‟un vol 0400 pour la compagnie LH dans SPFLI).

Si l‟on veut la date d‟un vol reliant San Francisco à New York, il faut chercher ces villes dans SPFLI (CityFrom

et CityTo), en retirer CARRID et CONNID puis sélectionner dans sflight la date (FLDATE) correspondante.

Un moyen plus simple pour arriver à ce résultat est de créer une vue ou plutôt un joint, qui va relier les tables

SPFLI et SFLIG en fonction de CARRID et CONNID.

Exemple : On veut trouver les numéros d’enregistrement BOOKID pour un vol en ne connaissant que

les villes de départ et d’arrivée.

PROCEDURE :

1. OUTILS -> ABAP/4 WORKBENCH -> -> Sélectionnez VUES (n‟oubliez pas de

nommer l‟objet à créer).

2. Dans la boîte Tables, entrez le nom des tables à „relier‟.

Dans la boîte Conditions Joint, entrez le nom des tables ainsi que les champs à mettre en relation.

Dans notre exemple :

Tables Conditions „joint‟

N.B : SPFLI -> Z10PFLI, SFLIGHT -> Z10FLIG, …

3. Dans la boîte Zones de vues, entrez les vues ainsi que les tables et les champs sur lesquels vous désirez

travailler.

Dans notre exemple :

Zones de vues

Dictionnaire

Table

Z10PFLI

Z10FLIG

Z10BOOK

Table Nom zone = Table Nom zone

Z10FLIG CARRID Z10PFLI CARRID

Z10FLIG CONNID Z10PFLI CONNID

Z10BOOK CARRID Z10FLIG CARRID

Z10BOOK CONNID Z10FLIG CONNID

Z10BOOK FLDATE Z10FLIG FLDATE

Zone vue Table Nom Zone Clé Elt don. Mod Type Long.

CityFrom Z10PFLI CITYFROM

CityTo Z10PFLI CITYTO Géré automatiquement BookId Z10BOOK BOOKID

SPFLI

Carrid

Connid

CityFrom

CityTo

:

SFLIGHT

Carrid

Connid

Fldate

:

SBOOK

Carrid

Connid

Fldate

Bookid

:

La notion de clé est très

importante lors de la

réalisation de vues. (les

champs soulignés dans le

schéma ci-contre forment

la clé de la table)

Analyse :

Page 132: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 128 sur 181

4. Il ne reste plus qu‟à activer la vue.

(Pour la tester : Utilitaires -> Afficher données).

N.B : Une vue est considérée comme une table virtuelle ; ses champs et sa clé sont ceux que vous aurez

déclarés. Dans un programme, les vues se déclarent comme une table de base.

CREATION DE MATCHCODE.

1°) Créez une table telle que la mienne appelée ZROMU. Définissez les champs en remplissant la

colonne „Elt donn.‟ Sinon les matchcodes ne seront pas définis.

2°) Dans le menu, allez dans saut puis index…

A remplir !!!

Page 133: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 129 sur 181

3°) Il demande si on veut créer un nouvel index : Oui. Donnez un nom de trois lettres à l‟index

commençant par Z.

4°) Donnez une désignation à votre index.

5°) Placez le curseur dans „nom zone‟. Cliquez sur „sélectionner zones‟, une fenêtre apparaît avec la

liste des champs de la table. Choisissez le mandant ainsi que le champ pour lequel on veut un

matchcode. Une fois les champs sélectionnés, activez.

6°) Retournez dans le dictionnaire et donnez un nom en quatre lettres commençant par z. Mettez le

radiobutton sur objet de matchcode. Créer.

7°) Donnez une désignation et dans table primaire, mettez le nom de votre table, enregistrez, cliquez

sur „Zones‟.

Nom donné à

l'index

Page 134: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 130 sur 181

8°)Mettez le curseur dans „Table‟ et cliquez sur ‟Sélectionner zones‟. Vous pouvez sélectionner toutes

les zones mais il ne faut pas oublier ensuite de cocher la case Z. cible en face du champ sur

lequel on veut faire le matchcode, enregistrez. Revenez avec la flèche verte dans l‟écran

précédent. Générez. ( Il n‟y a rien à mettre dans „Table‟.).

9°) Une fois la génération effectuée, cliquez sur id MC. Il demande alors la création de l‟id MC, il faut

lui donner un nom d‟une seule lettre ou un chiffre. (Ici 1).

10°) Cliquez sur „Zones‟. Dans zones, cliquez dans „sélectionner zones‟ et prenez le champ nécessaire

au matchcode. Enregistrez.

Mettez le nom de votre table Mettez le nom de l'index crée

Page 135: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 131 sur 181

Flèche verte pour revenir puis générer. Dans le programme le matchcode faisant appel au matchcode

créé sera appelé comme suit :

PARAMETERS : NAME LIKE ZROMU-NOM MATCHCODE OBJECT ZXYZ.

Pour créer un autre matchcode sur un autre champ, il faut à nouveau créer un index dans la table (étape

n° 2 ) puis un nouvel objet de matchcode.

Page 136: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 132 sur 181

Gestion de curseurs en lecture de table

OPEN CURSOR…

Syntaxe : OPEN CURSOR [WITH HOLD] <c> FOR SELECT … [WHERE <conditions>].

REPORT RSAAA08R.

TABLES : SBOOK.

:

DATA : C1 TYPE CURSOR, C2 TYPE CURSOR.

:

OPEN CURSOR C1 FOR SELECT * FROM SBOOK WHERE CARRID = ‘LH‟.

OPEN CURSOR C2 FOR SELECT * FROM SBOOK WHERE CARRID = ‘AA‟.

:

Outre les procédures décrites précédemment, vous pouvez lire les tables de base de données à l‟aide de curseurs.

Pour ce faire, vous devez maîtriser les étapes d‟ouverture et de fermeture du curseur, de lecture de données avec

le curseur.

Pour ouvrir le curseur, utilisez l‟instruction OPEN CURSOR…FOR SELECT…

Le curseur <c> doit être de type CURSOR.

Vous pouvez ouvrir un curseur avec toutes les instructions SELECT dont le résultat est une table et non un

enregistrement individuel.

OPEN CURSOR permet d‟ouvrir simultanément plusieurs curseurs dans une table. Contrairement à SELECT,

vous avez ainsi plusieurs chemins d‟accès indépendants.

Si vous utilisez l‟option WITH HOLD, le curseur est maintenu, même après une validation de la base en SQL

natif.

Les instructions CLOSE CURSOR, COMMIT WORK et ROLLBACK WORK ferment tous les curseurs.

Ceci s‟applique également lors d‟une validation de la base en SQL natif (sauf si le curseur a été ouvert avec

l‟option WITH HOLD et que la validation résulte en une modification de l‟écran).

Tenter d‟ouvrir un curseur déjà ouvert provoque une erreur d „exécution.

FETCH CURSOR…

Syntaxe : FETCH NEXT CURSOR <c> INTO <wa>.

REPORT RSAAA08R.

TABLES : SBOOK.

DATA : BEGIN OF WA1 OCCURS 0.

INCLUDE STRUCTURE OF SBOOK.

DATA : END OF WA1.

DATA : BEGIN OF WA2 OCCURS 0.

INCLUDE STRUCTUR OF SBOOK.

DATA : END OF WA2.

:

DO.

FETCH NEXT CURSOR C1 INTO WA1.

WRITE : / WA1-CARRID, WA1-CONNID, WA1-CUSTOMID.

:

FETCH NEXT CURSOR C2 INTO WA2.

WRITE : /WA2-CARRID, WA2-CONNID, WA2-CUSTOMID.

:

ENDDO.

Une fois que le curseur a été ouvert avec succès, utilisez l‟instruction FETCH pour atteindre chaque

enregistrement de la table résultat décrite avec SELECT dans une boucle, jusqu‟à ce que le curseur soit fermé.

Chaque entrée est placée dans la zone cible indiquée après INTO.

Valeurs de code retournées : SY-SUBRC=0 : Lecture fructueuse.

SY-SUBRC=4 : Lecture infructueuse.

Page 137: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 133 sur 181

Chaque fois que l‟instruction FETCH est exécutée, la zone système SY-DBCNT comprend le nombre des

entrées lues précédemment.

Dans l‟exemple ci-dessus, deux curseurs sont ouverts dans une table. Les deux instructions FETCH remplissent

alors différentes zones de travail qui peuvent être traitées indépendamment les unes des autres (pour des raisons

d‟édition).

CLOSE CURSOR …

Syntaxe : CLOSE CURSOR <c>.

REPORT RSAAA08R.

TABLES : SBOOK.

:

DO.

:

FETCH NEXT CURSOR C1 INTO WA1.

IF SY-SUBRC NE 0.

CLOSE CURSOR C1.

ENDIF.

FETCH NEXT CURSOR C2 INTO WA2.

IF SY-SUBRC NE 0.

CLOSE CURSOR C2.

ENDIF.

ENDDO.

Astuces lors de l’affichage de listes

Instruction SCROLL…

Correspond au code de

Syntaxe : SCROLL fonction.

LIST

TO FIRST PAGE pp- -

TO LAST PAGE pp++

TO PAGE <p> pp<p>

FORWARD <n> PAGES p+ pp+n

BACKWARD <n> PAGES p- pp-n

TO COLUMN <n> ps<c>

LEFT [BY <m> PLACES] ps- <m>

RIGHT [BY <m> PLACES] ps+<m>

INDEX <i>

Vous pouvez utiliser l‟instruction SCROLL pour faire défiler le contenu d‟une liste. Si vous spécifiez les

paramètres correspondants, vous pouvez effectuer un défilement :

• vers l‟avant,

• vers l‟arrière,

• vers la gauche,

• vers la droite.

L‟instruction SCROLL LIST se réfère à la liste actuellement affichée. Vous pouvez utiliser l‟option INDEX

<i> pour indiquer d‟autres niveaux de liste de liste. <i> correspond au contenu de SY-LSIND lorsque la liste

correspondante est générée.

L‟option PAGE permet un défilement par page logique, sinon par fenêtre.

Page 138: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 134 sur 181

Vous pouvez utiliser l‟instruction SET LEFT SCROLL-BOUNDARY pour fixer la position d‟écriture actuelle

(SY-COLNO) comme limite gauche de la zone de défilement. Pour fixer explicitement la limite de défilement à

une colonne déterminée, utilisez l‟attribut COLUMN <n>. Le défilement horizontal à l‟aide de la barre de

défilement et/ou de l‟instruction SCROLL dans le programme prend effet à partir de la colonne de la liste que

vous avez indiqué.

Ainsi, par exemple, les colonnes clé sont toujours visibles lorsque vous effectuez un défilement horizontal.

Défilement horizontal : REPORT RSBBB10A LINE-SIZE 132.

:

GET SPFLI

WRITE : … ,95 SPFLI-DISTANCE.

AT … .

IF SY-STACO EQ 1.

SCROLL LIST RIGHT.

ELSE.

SCROLL LIST LEFT.

ENDIF.

Dans ce qui suit, le CURSEUR n‟a rien à voir avec un curseur permettant de lire les tables

GET CURSOR …

Sélection de zone

Syntaxe : GET CURSOR

… FIELD <zone1>

… VALUE <zone2>

… LINE <lin>.

REPORT RSBBB10B.

DATA : FNAME(30), FVALUE(50), … .

GET SPFLI.

WRITE : SPFLI-CARRID, SPFLI-CONNID, SPFLI-CITYFROM, SPFLI-CITYTO.

:

AT LINE-SELECTION.

PERFORM CURSEUR.

FORM CURSEUR.

GET CURSOR FIELD FNAME VALUE FVALUE.

CASE FNAME.

WHEN ‘SPFLI-CARRID‟. …

WHEN ‘SPFLI-CONNID‟. …

WHEN ‘SPFLI-CITYFROM‟. …

:

ENDCASE.

ENDFORM.

A l‟aide de l‟instruction GET CURSOR, vous pouvez collecter interactivement des informations

complémentaires relatives à une zone que l‟utilisateur a délimitée avec le curseur.

Le nom de la zone d'édition est fourni dans la zone spécifiée dans le paramètre FIELD. La valeur éditée est

disponible via la zone spécifiée dans le paramètre VALUE.

Le code retourné SY-SUBRC est activé. La valeur 0 signifie que le curseur était placé sur une zone ; la valeur 4

qu‟il était en dehors d‟une zone.

Page 139: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 135 sur 181

GET CURSOR comporte plusieurs options. Pour plus d‟informations, reportez-vous à la documentation relative

au mot clé approprié.

GET CURSOR LINE <lin> ne nécessite aucune définition de paramètre FIELD. Cette variante vous permet de

rechercher le curseur de manière dynamique dans les écrans STEPLOOP (dans la ligne de boucle <lin> et dans

le traitement de la liste (dans la ligne absolue <lin> SY-LILLI).

SET CURSOR :

Positionnement du curseur

Syntaxe : SET CURSOR

… FIELD <zone1>

… <colonne> <zone2>

… LINE <lin>.

REPORT RSBBB10C.

DATA : FIRST_LINE TYPE I VALUE 5,

FNAME(30).

:

END-OF-SELECTION.

SET CURSOR 2 FIRST_LINE.

AT USER-COMMAND.

WHEN … .

SET CURSOR 2 FIRST_LINE.

:

GET CURSOR FIELD FNAME.

SET CURSOR LINE 3 OFFSET 5.

Vous utilisez l‟instruction SET CURSOR pour positionner le curseur sur l‟écran. Cette fonction est

particulièrement utile en cas d‟événement interactif. Le système positionne automatiquement le curseur dans la

zone de commande et/ou la première zone accessible dans la liste récemment créée. SET CURSOR vous permet

de positionner le curseur à partir du programme, par exemple, au moyen de GET CURSOR.

Vous entrez les coordonnées dans l‟ordre <colonne> <ligne>.

L‟instruction SET CURSOR FIELD <zone1> vous permet de placer le curseur dans la zone d‟écran dont le

nom figure dans la zone <zone1>. Il existe deux options : OFFSET et LINE, la dernière étant obligatoire dans

les listes.

SET CURSOR LINE <lin> ne nécessite aucune définition de paramètre FIELD. Cette variante vous permet de

rechercher dynamiquement le curseur dans les écrans STEPLOOP (dans la ligne de boucle <lin>) et dans le

traitement des listes (dans la ligne absolue <Lin> SY-LILLI).

Page 140: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 136 sur 181

COMMANDES SQL :

SQL natif I

EXEC SQL.

:

ENDEXEC.

REPORT RSAAA08S.

DATA : F1(3) VALUE „LH‟, F2(4) TYPE N VALUE „0400', F3(20), F4(20).

EXEC SQL.

SELECT CARRID, CONNID, CITYFROM, CITYTO

INTO :F1, :F2, :F3, :F4

FROM SPFLI WHERE CARRID = :F1

AND CONNID = :F2

ENDEXEC.

WRITE : / F1, F2, F3, F4.

Pour utiliser l‟éventail complet des instructions du langage de base de données (SQL natif) dans un programme

ABAP/4, utilisez le bloc EXEC SQL…ENDEXEC. Sachez toutefois que, comme vous utilisez un SQL natif

spécifique à la base de données, la portabilité de vos programmes vers d‟autres SGBD peut être compromise.

Les tables de bases de données traitées en SQL natif n‟ont pas besoin d‟être connues de l‟ABAP/4 Dictionary, et

le programme n‟a pas besoin d‟instruction TABLES pour les définir.

Selon la base de données que vous utilisez, la graphie des noms de bases et de zones peut avoir de l‟importance.

Contrairement à SQL Open, il n‟y a aucune gestion automatique du client.

Les mémoires tampon SAP ne sont pas évalués parce que les données sont lues à partir de la base de données.

La syntaxe des instructions SQL natif n‟est pas identique à celle d‟ABAP/4.

Une seule instruction SQL natif peut être indiquée à celle d‟ABAP/4.

En SQL natif, le transfert de données entre la base et ABAP/4 se fait par des variables hôtes dont le nom doit être

précédé du signe deux points ( :).

SQL natif II

EXEC SQL PERFORMING <nom>.

:

ENDEXEC.

REPORT RSAAA08T.

DATA : WA LIKE SBOOK, F1(3) VALUE ‘LH‟, F2(4) TYPE N VALUE ‘0400‟.

EXEC SQL PERFORMING AUSGABE.

SELECT * INTO :WA FROM SBOOK WHERE CARRID = :F1

AND CONNID = :F2

ENDEXEC.

FORM AUSGABE.

WRITE : /WA-CARRID, WA-CONNID, WA-FLDATE, WA-CUSTTYPE.

ENDFORM.

Si le résultat de l‟instruction SELECT comprend plusieurs entrées, la lecture est effectuée ligne par ligne dans

une boucle de traitement.

L‟option…PERFORMING <nom> signifie que le sous-programme spécifie est appelé à chaque fois qu‟une

entrée est lue. Vous pouvez mettre fin à la boucle de traitement avec l‟instruction SQL EXIT FROM dans le

sous-programme. Si le résultat de la sélection est un enregistrement individuel, le sous-programme n‟est appelé

qu‟une fois.

Page 141: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 137 sur 181

Dans l‟exemple suivant, la chaîne de zones <wa> et les zones simples F1 et F2 sont utilisées comme variables

hôte dans l‟instruction SQL natif SELECT.

Après chaque accès en lecture réussi, une entrée est ajoutée à la zone cible <wa>. La clause WHERE contrôle

les variables hôtes : F1 et : F2.

SQL natif III

EXEC SQL.

:

ENDEXEC.

Définition des données Gestion des transactions de données

(instructions DDL) : COMMIT…

CREATE… ROLLBACK…

DROP…

ALTER…

GRANT…

REVOKE…

Manipulation des données

(instructions DML) :

SELECT… DECLARE CURSOR…

INSERT… OPEN…

UPDATE… FETCH…

DELETE… CLOSE…

Outre l‟instruction SELECT en SQL natif, vous pouvez en utiliser d‟autres entre EXEC SQL et ENDEXEC

pour définir, manipuler des données et gérer des transactions dans le système de base de données adéquat.

L‟instruction CLOSE CURSOR <c> permet de fermer tous les curseurs qui ne sont plus nécessaires.

Les autres opérations qui ferment les curseurs ont déjà été évoquées dans l‟instruction OPEN CURSOR.

Page 142: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 138 sur 181

Affectation dynamique

Affectation dynamique de chaînes

En principe, les valeurs relatives de variable et les spécifications de longueur ne sont pas autorisées, sauf dans le

cas de l‟instruction ASSIGN.

REPORT RSAAA04G.

DATA : TEXT_LINE(30) VALUE „ABCDEFGH…‟,

START TYPE I,

STRING_LENGTH TYPE I.

FIELD-SYMBOLS : <FSTRING>.

START = 2.

STRING_LENGHT = 5.

ASSIGN TEXT_LINE+START(STRING_LENGHT) TO <FSTRING>.

WRITE : / ‘*’ <FSTRING>, ‘*’.

<FSTRING> = „1234567890‟. :

:

Elles sont également autorisées avec l‟instruction WRITE … TO et avec les paramètres réels (PERFORM).

Affectation dynamique de zone

ABAP/4 n‟a aucune instruction de saut (GOTO). Outre les instructions de contrôle citées ci-dessous, il en existe

d‟autres telles que LOOP…ENDLOOP, qui permet de lire une table interne, et la distinction de cas

AT…ENDAT, qui permet de traiter les niveaux de contrôle dans l‟instruction LOOP.

REPORT RSAAA04H.

PARAMETERS : SY_FIELD(8) DEFAULT „SY-DATUM‟

FIELD-SYMBOLS : <ZONE>.

ASSIGN (SY_FIELD) TO <ZONE>.

*ASSIGN TABLE FIELD(SY_FIELD) TO <ZONE>.

IF SY-SUBRC EQ 0.

WRITE:/ TEXT-001, SY_FIELD, 50 <ZONE>.

ENDIF.

*D : TEXT-001 : Contenu courant de la zone système.

A B C D E F G H I ...

<FSTRING>

S Y - D A T U M

INDEX … datum

… 19980907

<FIELD>

SY_FIELD

Table SY

Page 143: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 139 sur 181

Les autorisations

(sous réserve)

Elles limitent les accès aux utilisateurs finaux (lecture, affichage, modification).

Gestion des autorisations des utilisateurs (attention, il faut déjà en avoir une et la bonne, ah! ah!)

Outils – Administration – Gestion Utilisateur – Autorisation

Astuce Lorsque vous n‟avez pas l‟autorisation pour une action tentée (indication dans la fenêtre bleue), faire Système

Utilitaire Afficher contrôle autorisations.

Il vous affiche ce qu‟il vous faudrait et ce que vous avez (si ce n‟est pas trop éloigné des besoins).

Créer une autorisation a) Créer une classe d‟autorisations.

Une classe d‟autorisations contient des objets d‟autorisation.

Un objet d‟autorisation contient une ou plusieurs autorisations.

Dans l‟objet sont sélectionnées des zones (ex : saisie de transactions)

De plus il est précisé la valeur d‟activité (01, 02, 03).

b) Affecter une autorisation à un profil d‟utilisateur.

Un profil contient des autorisations, et éventuellement d‟autres profils.

c) Affecter le profil à un utilisateur.

(voir page 9-9 du BC400)

Page 144: Cours ABAP

Trucs et astuces

Cours ABAP.doc Page 140 sur 181

Ecrire des messages.

Présentation :

Dans le report :

REPORT Z…… MESSAGE -ID II.

.

.

.

MESSAGE TNNN.

Mais on peut aussi déclarer directement dans le programme un message sans mettre dans l‟en-tête MESSAGE -

ID II :

MESSAGE ID „II‟ TYPE „TT‟ NUMBER „NNN‟

II : Nom de la classe du message par exemple ZG

NNN : Numéro du message : 012

TT : Type du message.

LES DIFFERENT TYPE DE MESSAGE :

I - Info : Le traitement s'interrompt; il reprend dès que l'utilisateur appui sur ENTREE

W - Warning : Le traitement s'interrompt; l'utilisateur peut entrer une nouvelle valeur

E - Error : Le traitement s'interrompt; l'utilisateur doit entrer une nouvelle valeur

A - Abend : Le traitement s'arrête et l'utilisateur doit relancer l'application

X - Exit : Equivaut au message de type A mais avec vidage minimal

MESSAGE_TYPE_X

S - Success : L'information s'affiche sur l'écran suivant

Voir aussi MODULE.

Astuce :

On peut insérer des variables dans les messages en mettant dans le texte du message & & et en ajoutant WITH

„text‟

Exemple :

Le message :

ZG, 042 : Salut & &, comment vas-tu ?

dans le report :

MESSAGE ID „ZG‟ TYPE „I‟ NUMBER „042‟ WITH sy-uname.

On peut aussi utiliser la fonction CALL FUNCTION 'POPUP_TO_CONFIRM_STEP', ouvre une boite de

dialogue et permet le choix entre OK NO CANCEL.

Page 145: Cours ABAP

Liste alphabétique des commandes SAP

Cours ABAP.doc Page 141 sur 181

Liste alphabétique des commandes SAP

Mot clé

Description rapide ** Arithmetic operator: Exponentiation (COMPUTE)

+, -, *, / Arithmetic operators (COMPUTE)

ABS Mathematical function: absolute amount (COMPUTE)

ACOS Mathematical function: Cosine arc (COMPUTE)

ADD Add

ADD-CORRESPONDING Field string addition

ADJACENT DUPLICATES Delete duplicates from internal table (DELETE)

APPEND Append line to internal table

ASIN Mathematical function: Sine arc (COMPUTE)

ASSIGN Assign field symbol

AT Event, control break, field group determination

ATAN Mathematical function: Tangent arc

AUTHORITY-CHECK Check authorization

AVG Aggregate expression: Average (SELECT)

BACK Positioning in list

BETWEEN Relational operator: Between

BINARY SEARCH Binary read of internal table (READ TABLE)

BLANK LINES Switch on blank lines in list

BREAK-POINT Stop processing in debug mode

CA Relational operator for string comparison: Contains Any characters

CALL Call external component

CASE Begin case distinction

CEIL Mathematical function: Smallest whole value (COMPUTE)

CENTERED Output format: Centered (WRITE)

CHECK Check condition

CHECKBOX Display as checkbox

PARAMETERS ... AS CHECKBOX on the selection screen

WRITE ... AS CHECKBOX in a list

CLEAR Initialize data object

CLIENT Client handling when

DELETE ... CLIENT SPECIFIED deleting from a database

EXPORT ... TO DATABASE ... CLIENT storing a data cluster

IMPORT .. FROM DATABASE ..

CLIENT

reading a data cluster

INSERT ... CLIENT SPECIFIED inserting into a database

MODIFY ... CLIENT SPECIFIED inserting into/modifying a database

SELECT ... CLIENT SPECIFIED reading from a database

UPDATE ... CLIENT SPECIFIED updating a database

CLOSE Close file/cursor

CN Relational operator for string comparison: Contains Not only

CNT Field groups: Number of different values

CO Relational operator for string comparison: Contains Only

CODE PAGE Character set

TRANSLATE ... FROM/TO CODE

PAGE

Convert character codes

COLLECT Internal table: Add entries

COLOR Output format: Color (FORMAT)

COMMIT Close processing unit

Page 146: Cours ABAP

Liste alphabétique des commandes SAP

Cours ABAP.doc Page 142 sur 181

COMMUNICATION Data exchange

COMPUTE Perform calculations

CONCATENATE Concatenate strings

CONDENSE Condense string

CONSTANTS Defining constants

CONTINUE Exit current loop pass

CONTROLS Define controls for visualization

CONVERT Convert fields

COS Mathematical function: Cosine (COMPUTE)

COSH Mathematical function: Hyperbola cosine (COMPUTE)

COUNT Aggregate expression: Count (SELECT)

COUNTRY Set country ID (SET)

CP Relational operator for string comparison: Contains Pattern

CREATE Generate an external object

CS Relational operator for string comparison: Contains String

CURRENCY Output format: Correct format for currency (WRITE)

CURSOR Cursor

CLOSE Close database cursor

FETCH NEXT CURSOR Read lines with a database cursor

GET CURSOR FIELD Get field name

OPEN CURSOR Open database cursor

SET CURSOR Position cursor

CUSTOMER-FUNCTION Call customer enhancement

DATA Define data

DATABASE Data cluster

DELETE FROM DATABASE delete from a database table

EXPORT ... TO DATABASE Store in a database table

IMPORT ... FROM DATABASE Read from a database table

DATASET Sequential file

CLOSE DATASET Close file

DELETE DATASET delete file

EXPORT ... TO DATASET Store data cluster in file

IMPORT ... FROM DATASET Read data cluster from file

OPEN DATASET Open file

READ DATASET Read from a file

TRANSFER Output to a file

DECIMALS Output format: Places after the decimal point (WRITE)

DEFINE Define macro

DELETE delete from tables or from objects

DESCRIBE Determine attributes of data objects

DIALOG Call a dialog module (CALL)

DISTINCT Remove duplicates from selection set (SELECT)

DIV Arithmetic operator: Whole number division (COMPUTE)

DIVIDE Divide

DIVIDE-CORRESPONDING Field string division

DO Loop

DYNPRO Screen

DELETE DYNPRO delete

EXPORT DYNPRO Export

GENERATE DYNPRO Generate

IMPORT DYNPRO Import

SYNTAX-CHECK FOR DYNPRO Check

EDITOR-CALL Call editor

ELSE Query

ELSEIF Query

END-OF-DEFINITION End of a macro definition

END-OF-PAGE Event: End of page handling in lists

END-OF-SELECTION Event: After processing of all records in a LDB

Page 147: Cours ABAP

Liste alphabétique des commandes SAP

Cours ABAP.doc Page 143 sur 181

ENDAT End of an event introduced by AT

ENDCASE End of case distinction

ENDDO End of a DO loop

ENDFORM End of a subroutine

ENDFUNCTION End of a function module

ENDIF End of a query

ENDLOOP End of a LOOP

ENDMODULE End of a module definition

ENDON End of a conditional statement

ENDPROVIDE End of a PROVIDE loop

ENDSELECT End of a SELECT loop

ENDWHILE End of a WHILE loop

EQ Relational operator: Equals

EXEC SQL Native SQL statement

EXIT Exit loop or terminate processing

EXP Mathematical function: Exponential function (COMPUTE)

EXPONENT Output format: Exponent display (WRITE)

EXPORT Export data

EXTENDED CHECK Switch extended syntax check on/off (SET)

EXTRACT Generate extract dataset

FETCH Read line from a database table

FIELD-GROUPS Define field groups

FIELD-SYMBOLS Define field symbols

FLOOR Mathematical function: Largest whole value (COMPUTE)

FORM Define subroutine

FORMAT Output format for lists

FRAC Mathematical function: Fraction (COMPUTE)

FREE Release resources no longer needed

FUNCTION Define function module

CALL FUNCTION Call a function module

FUNCTION-POOL Define a function group

GE Relational operator: Greater than or equal

GENERATE Generate a program or screen

GET Event, read settings

GT Relational operator: Greater than

HELP-REQUEST Self-programmed help (F1)

PARAMETERS ... HELP-REQUEST for parameters

SELECT-OPTIONS ... HELP-REQUEST for selection options

HIDE Store line information

HOTSPOT Output format: Hotspot, interaction by simple mouse click (FORMAT)

ICON Icons in lists

IF Query

IMPORT Import data or a screen

IN Relational operator: Selection criterion

INCLUDE Include program components

INDEX Line index in an internal table

DELETE ... INDEX Delete line

INSERT ... INDEX Insert line

MODIFY ... INDEX Modify line

READ TABLE ... INDEX Read line

INFOTYPES Declare HR infotype

INITIAL Relational operator: Initial value

INITIALIZATION Event: Before display of the selection screen

INPUT Output format: Ready for input (FORMAT)

INSERT Insert into tables or objects

INTENSIFIED Output format: Intensified (FORMAT)

INVERSE Output format: Inverted (FORMAT)

IS Relational operator

Page 148: Cours ABAP

Liste alphabétique des commandes SAP

Cours ABAP.doc Page 144 sur 181

IS INITIAL Relational operator: Initial value

IS REQUESTED Relational operator: Existence of a formal parameter

LANGUAGE Set language for text elements (SET)

LE Relational operator: Less than or equal

LEAVE Leave processing

LEFT-JUSTIFIED Output format: Left-justified (WRITE)

LINE Line in a list

MODIFY LINE Modify line

READ LINE Read line

LINE-COUNT Number of lines per page (NEW-PAGE)

LINE-SIZE Line size (NEW-PAGE)

LIST-PROCESSING List processing (LEAVE)

LOAD Load program components in internal table

LOCAL Rescue actual parameters of a subroutine

LOCAL COPY Assign local copy to a field symbol

LOCALE Set text environment (SET)

LOG Mathematical function: Natural logarithm (COMPUTE)

LOG10 Mathematical function: Base 10 logarithm (COMPUTE)

LOOP Loop

LT Relational operator: Less than

M Relational operator: Byte contains zeros and ones

MARGIN List output: Distance from edge (SET)

MATCHCODE Matchcode handling

PARAMETERS ... MATCHCODE for parameters

SELECT-OPTIONS ... MATCHCODE for selection options

MAX Aggregate expression: Maximum (SELECT)

MEMORY ABAP/4 memory

EXPORT ... TO MEMORY Roll out data to memory

IMPORT ... FROM MEMORY Restore data from memory

MESSAGE Output message

MESSAGE-ID Specify message class (REPORT)

MIN Aggregate expression: Minimum (SELECT)

MOD Arithmetic operator: Remainder after division (COMPUTE)

MODIFY Modify tables or objects

MODULE Flow logic: Module

MOVE Assignment

MOVE-CORRESPONDING Component-by-component assignment

MULTIPLY Multiply

MULTIPLY-CORRESPONDING Field string multiplication

NA Relational operator for string comparison: Contains not any characters

NE Relational operator: Not equal

NEW-LINE List processing: New line

NEW-PAGE List processing: New page

NO-GAP Output format: Leave no gaps (WRITE)

NO-HEADING Display no column headers (NEW-PAGE)

NO-SCROLLING Do not scroll line (NEW-LINE)

NO-SIGN Output format: No preceding signs (WRITE)

NO-TITLE Do not display standard page header (NEW-PAGE)

NO-ZERO Output format: No leading zeros (WRITE)

NP Relational operator for string comparison: Does not contain pattern

NS Relational operator for string comparison: Does not contain string

O Relational operator: Byte positions occupied by 1

OBJECT External object

CREATE OBJECT Generate

FREE OBJECT Release

OCCURS Define internal table (DATA)

ON CHANGE Control break

OPEN Open file/cursor

Page 149: Cours ABAP

Liste alphabétique des commandes SAP

Cours ABAP.doc Page 145 sur 181

ORDER BY Order lines (SELECT)

OVERLAY Overlay strings

PACK Conversion

PARAMETER Parameter in global SAP memory

GET Read parameter

SET Set parameter

PARAMETERS Define report parameters

PERFORM Execute subroutine

PF-STATUS Set GUI status

POSITION List processing: Define output position

PRINT Print formatting (NEW-PAGE)

PRINT-CONTROL Define print format

PROGRAM Introduce program

LEAVE PROGRAM Leave program

PROPERTY Object property

GET PROPERTY Get property

SET PROPERTY Set property

PROVIDE Internal tables: Interval-related processing

PUT Trigger event

RADIOBUTTON Radio button (PARAMETERS)

RAISE Raise exception in function module

RAISING Raise error message in function module

RANGES Define internal table for selection criterion

READ Read tables or objects

RECEIVE Receive results (RFC)

REFRESH Delete internal table

REFRESH CONTROL Initialize control

REFRESH SCREEN Refresh SAPGUI

REJECT Do not process current database line further

REPLACE Replace strings

REPORT Introduce report (program)

DELETE REPORT Delete program

EDITOR-CALL FOR REPORT Call ABAP/4 program editor

INSERT REPORT Insert program in library

READ REPORT Read program

RESERVE List processing: Conditional new page

RESET Output format: Reset all formats (FORMAT)

RIGHT-JUSTIFIED Output format: Right justified (WRITE)

ROLLBACK Roll back database changes

ROUND Output format: Scaled (WRITE)

RUN TIME ANALYZER Switch runtime analysis on/off (SET)

SCAN Analyze ABAP/4 source code

SCREEN Screen

CALL SCREEN Call screen

SET SCREEN Set next screen

LEAVE SCREEN Leave screen

LEAVE TO SCREEN Branch to a screen

LOOP AT SCREEN Loop through screen fields

MODIFY SCREEN Modify screen fields

SCROLL List processing: Scroll

SCROLL-BOUNDARY List processing: Fix lead columns (SET)

SEARCH Find string

SELECT Read database table

SELECT-OPTIONS Define selection criterion

SELECTION-SCREEN Design selection screen

AT SELECTION-SCREEN Event: After editing of selection screen

SELECTION-TABLE Selection table (SUBMIT)

SET Set different processing parameters

Page 150: Cours ABAP

Liste alphabétique des commandes SAP

Cours ABAP.doc Page 146 sur 181

SHIFT Move string

SIGN Mathematical function: Sign (COMPUTE)

SIN Mathematical function: Sine (COMPUTE)

SELECT SINGLE Select single record

SINH Mathematical function: Hyperbola sine (COMPUTE)

SKIP List processing: Output blank line

SORT Sort internal table or extract dataset

SPLIT Split string

SQRT Mathematical function: Square root (COMPUTE)

START-OF-SELECTION Event: Before first access to LDB

STATICS Define static data

STOP Stop data selection (LDB)

STRLEN String function: Current length (COMPUTE)

STRUCTURE Data structure

INCLUDE STRUCTURE Use structure

SUBMIT Program call

SUBTRACT Subtract

SUBTRACT-CORRESPONDING Field string subtraction

SUM Calculate control total

SELECT ... SUM Aggregate expression: Total

SUPPRESS DIALOG Suppress dialog

SYMBOL Output as symbol (WRITE)

SYNTAX-CHECK Syntax check for programs and screens

SYNTAX-TRACE Syntax check log

TABLES Declare database table

TABLE Set or array operations for database tables

DELETE ... FROM TABLE Delete block of lines

INSERT ... FROM TABLE Insert block of lines

MODIFY ... FROM TABLE Insert/update block of lines

UPDATE ... FROM TABLE Update block of lines

SELECT ... INTO TABLE Copy block of lines to internal table

TAN Mathematical function: Tangent (COMPUTE)

TANH Mathematical function: Hyperbola tangent (COMPUTE)

TEXT Locale-specific

CONVERT TEXT Set format

SORT itab AS TEXT Sort an internal table

SORT AS TEXT Sort an extract dataset

TEXTPOOL Text elements

DELETE TEXTPOOL Delete

INSERT TEXTPOOL Insert

READ TEXTPOOL Read

TIME Time measurement

GET RUN TIME Get runtime

GET TIME Get time

SET RUN TIME ANALYZER Switch runtime analysis on/off

TITLEBAR Set screen title (SET)

TOP-OF-PAGE Event: Top of page handling in lists

TRANSACTION SAP transaction

CALL TRANSACTION Call

LEAVE TO TRANSACTION Leave to

TRANSFER Output to file

TRANSLATE Character conversion in strings

TRANSPORTING Selective field transport

MODIFY ... TRANSPORTING Modify lines of an internal table

READ ... TRANSPORTING Read lines of an internal table

LOOP ... TRANSPORTING Loop through an internal table

TRUNC Mathematical function: Whole number part (COMPUTE)

TYPE-POOL Introduce type group

Page 151: Cours ABAP

Liste alphabétique des commandes SAP

Cours ABAP.doc Page 147 sur 181

TYPE-POOLS Integrate a type group

TYPES Define types

ULINE List processing: Underscore

UNDER Output format: One under the other (WRITE)

UNIT Output format: Unit (WRITE)

UNPACK Conversion

UPDATE Update database table

USER-COMMAND List processing: Execute command immediately (SET)

USING Use parameter or format

USING Parameter of a subroutine

USING EDIT MASK Output format: Use template (WRITE)

VALUE-REQUEST Self-programmed value help (F4)

PARAMETERS ... VALUE-REQUEST for parameters

SELECT-OPTIONS ... VALUE-

REQUEST

for selection options

WHEN Case distinction

WHERE Condition

SELECT ... WHERE with database accesses

LOOP AT ... WHERE with loops on internal tables

DELETE ... WHERE when deleting from internal tables

WHILE Loop

WINDOW List processing: Output in window

WITH-TITLE Output standard page header (NEW-PAGE)

WORK Processing unit

COMMIT WORK Close unit

ROLLBACK WORK Close unit, but undo changes

WRITE List processing: Output

WRITE TO Correct type output in a variable

Z Relational operator: Byte positions occupied by 0

Page 152: Cours ABAP

Classification des mots clés par type

Cours ABAP.doc Page 148 sur 181

Classification des mots clés par type

Mots clés déclaratifs : Ils servent à déclarer ou définir les objets de données qui les suivent.

CONSTANTS Définition des constantes

CREATE Génère un objet externe

DATA Champs internes, variables locales, variables globales, tables internes

FIELD-GROUPS Stocks de données intermédiaires pour extractions de données

INCLUDE Inclure une structure ou un type

FIELD-SYMBOLS Champs de travail variables

LOCAL Utilisation locale de variables globales dans les sous-programmes

PARAMETERS Champs internes définis par l‟utilisateur après le lancement du

programme

RANGES Critères de sélection ne pouvant être que positionnés en interne

SELECT-OPTIONS Critères de sélection définis par l‟utilisateur après le lancement du

programme pour autoriser la sélection de données

SELECTION-SCREEN layout de l‟écran de sélection

STATICS Objets de données statiques dans les sous-programmes

TABLES tables SAP

TYPE-POOL Combiner des types et des constants dans un groupe de types

TYPE-POOLS Inclus un groupe de types

TYPES Définition des types

Mots clés liés aux événements : Ils servent à déclarer un traitement lié à un événement.

AT LINE-SELECTION Suite à un double-clic sur une ligne à l‟écran

AT PFn Suite à une action sur une touche de fonction

AT SELECTION-SCREEN Après avoir renseigné les champs dans l‟écran de sélection

AT USER-COMMAND Après avoir effectuer une action dans un champ de commande

END-OF-PAGE Après l‟impression de la dernière ligne d‟une page écran

END-OF-SELECTION A la fin du programme

GET Après avoir lu un nouvel enregistrement dans une base de données

logique

INITIALIZATION Avant l‟impression dans un écran de sélection (ne fonctionne pas avec

un traitement en arrière plan)

START-OF-SELECTION Au début du programme

TOP-OF-PAGE Au début d‟une nouvelle page écran

TOP-OF-PAGE DURING LINE-

SELECTION

Au début d‟une nouvelle page écran dans une liste détaillée

Mots clés de contrôle : Ils servent à contrôler le flot de traitement.

AT FIRST ... ENDAT Exécute un traitement sur un groupe donné dans une boucle LOOP

avant de réaliser un traitement sur les lignes de la table

AT NEW ... ENDAT Contrôle la fin d‟un groupe pendant la boucle LOOP

AT END OF ... ENDAT Contrôle la fin d‟un dans la boucle LOOP

AT LAST ... ENDAT Exécute un traitement sur un groupe donné dans une boucle LOOP

après avoir réaliser un traitement sur les lignes de la table

AT fg ... ENDAT Traitement spécifique au type enregistrement dans une boucle LOOP

CALL Appel à traitement (programmes, fonctions, modules, écrans)

Page 153: Cours ABAP

Classification des mots clés par type

Cours ABAP.doc Page 149 sur 181

CASE ... WHEN ... ENDCASE Etude de cas

CHECK Condition de sélection, quitte la boucle ou le sous-programme

CONTINUE Interrompt le passage courant dans une boucle DO, WHILE, LOOP or

SELECT

DO ... ENDDO Traitement de boucle

EXEC SQL ... ENDEXEC Exécute un ensemble d‟instructions Native SQL

EXIT Quitte la boucle ou le sous-programme

FORM ... ENDFORM Définition d‟un sous-programme

IF ... ELSE ... ENDIF Traitement des conditions

=, EQ égal à

<>, ><, NE différent de

>, GT plus grand que

<, LT plus petit que

>=, =>, GE plus grand ou égal à

<=, =<, LE plus petit ou égal

O, Z, M comparaison binaire (bit)

CO, CN, CA, NA, CS, NS, CP, NP comparaison) de chaînes de caractères

BETWEEN... AND conditions sur un intervalle

IS INITIAL test si la valeur est initiale

IS REQUESTED existence du paramètre actuel

IN condition de saisie

LEAVE Quitter le traitement du programme vers une transaction, une liste ou

un menu

LOOP ... ENDLOOP Boucle sur une table ou extraire en ensemble de données

MODULE ... ENDMODULE Définition d‟un module de dialogue

ON CHANGE OF ... ENDON Traitement lié aux changements dans un champ

PERFORM ... USING Appel à un sous-programme

SELECT ... ENDSELECT Lire une table de la base de données

STOP Fin de sélection

WHILE ... ENDWHILE Traitement de boucles

Mots clés liés aux opérations : Ils servent à réaliser des opérations sur les données à certains moments (événements) et sous certaines

conditions.

ADD Addition de champs

ADD-CORRESPONDING Addition de champs identiques dans une variable

APPEND met une entrée dans une table interne

ASSIGN Assigne un champ à un symbole de champ

AUTHORITY-CHECK Test l'autorisation

BACK Retour en tête de page

BREAK-POINT Positionne un point d'arrêt

CALL Appel une transaction, un écran, un module de dialogue ou un module

de fonction

CLEAR Réinitialise les variables

COLLECT Rajoute une entrée dans une table interne

COMMIT Traite les changements dans la base de données

COMPUTE Calculer:

ABS valeur absolue

ACOS arc cosinus

ASIN arc sinus

ATAN Arc tangent

CEIL valeur entière supérieure la plus proche

COS Cosinus

COSH cosinus hyperbolique

Page 154: Cours ABAP

Classification des mots clés par type

Cours ABAP.doc Page 150 sur 181

EXP fonction Exponentiel (base e)

FLOOR valeur entière inférieure la plus proche

FRAC partie décimale

LOG logarithme (base e)

LOG10 logarithme (base 10)

SIGN signe

SIN sinus

SINH sinus hyperbolique

SQRT racine carrée

STRLEN longueur d'une chaîne de caractères

TAN tangent

TANH tangente hyperbolique

TRUNC partie entière d'un nombre

CONCATENATE Concatène les chaînes de caractères

CONDENSE Condense un champ (élimine les espaces)

DELETE Supprime la ligne

DIVIDE Division de deux champs

DIVIDE-CORRESPONDING Division de champs identiques dans une variable

EDITOR-CALL Appelle l'éditeur SAP

EXPORT Exporte un objet de données

EXTRACT Ecrit un enregistrement dans un ensemble de données interne

FILL Remplit une variable

FORMAT Etablit un format pour une sortie de liste

FREE Effectue une réservation d'espace mémoire pour une table interne

GET Lit les parameters, cursor, etc.

HIDE Note le contenue d'une ligne

IMPORT Importe un objet de données

INCLUDE Insert des composantes d'un programme externe

INSERT Insert des opérations

MESSAGE Affiche des messages

MODIFY Change une table ou une ligne dans une liste

MOVE Transfère le contenu des champs

MOVE-CORRESPONDING Transfère le contenu de champs identiques dans une variable

MULTIPLY Multiplication de champs

MULTIPLY-CORRESPONDING Multiplication de champs identiques dans une variable

NEW-LINE Place le curseur sur une nouvelle ligne

NEW-PAGE Place le curseur sur une nouvelle page

POSITION Position d'une variable dans une colonne

PRINT-CONTROL Détermine le format d'impression

PUT Réalise l'extraction des événements GET

READ Lire les tables et bases de données ; (direct) lecture de lignes de listes

REFRESH Rafraîchir les tables internes à l'écran

REPLACE Remplace des chaînes de caractères

RESERVE Réserve des lignes de sortie écran sur la page courante

SEARCH Recherche une chaîne de caractères dans une table

SET Etablir les paramètres de traitement

SHIFT Déplace le contenu d'un champ

SKIP Crée des lignes vierges

SORT Trie une table interne ou un ensemble de données

SPLIT Découpe une chaîne de caractères

SUBMIT Lance un autre programme

SUBTRACT Soustraction de champs

SUBTRACT-CORRESPONDING Soustraction de champs identiques dans une variable

SUM Addition durant une boucle

TRANSFER Affichage de données séquentiellement

TRANSLATE Convertit les majuscules en minuscules et inversement

UPDATE Mise à jour de la base de données

ULINE Souligne

Page 155: Cours ABAP

Classification des mots clés par type

Cours ABAP.doc Page 151 sur 181

UNPACK Change le type P (packed) en type C

WINDOW Définie la section d'un écran

WRITE Affichage des données

Commentaires

* En première colonne : l‟ensemble de la ligne est un commentaire

" Dans n‟importe quelle colonne, la fin de la ligne est un commentaire

Appel aux composantes d’autres programmes :

INCLUDE nom1 Insère la composante nom1 d‟un programme à l‟endroit courant

PERFORM form(prog) Appelle la sous-routine form du programme prog (PERFORM

externe)

Page 156: Cours ABAP

Quelques transactions utiles à connaître

Cours ABAP.doc Page 152 sur 181

Quelques transactions utiles à connaître

Vous trouverez, ci-dessous, un extrait des transactions standards utiles au développeur ABAP/4, ils recouvrent

une grande partie des transactions propres à l'ABAP/4 Workbench plus quelques transactions propres à

l'administration. les plus utilisées sont marquées en gras.

Il est intéressant d'en connaître les plus importants car le saut direct par le menu n'est pas toujours possible et la

navigation via divers écran est fastidieuse.

La totalité des transactions standards disponibles peut être trouvée sur le bouton de commande << MENU

DYNAMIQUE >> ou transaction SMEN.

A partir d'un écran de menu, les codes de transaction sont à taper dans la petite fenêtre Ok,

Exemple :

SE38 puis , pour accéder à l'éditeur ABAP/4.

Lorsque vous êtes dans un écran de transaction vous devrez taper :

/nSE38 et , pour interrompre la transaction en cours et aller à l'éditeur.

L'utilisation du bouton de commande "BACK" , vous permet de retourner à la

transactionprécédente.

Vous pouvez toujours connaître la transaction en cours d'utilisation en allant dans le menu SYSTEME et

STATUT.

SYNTHESE AUTRES OUTILS Extensions / user exits.

S000

S001 SE09

SE16

SE80 SE84

SMEN

SU55

Menu initial

Menu ABAP/4 Worbench Worbench organizer

Data browser (BDD)

Object browser Système information

Menu dynamique

Menu utilisateur

Objets autorisation

CMOD

SMOD

Gestion projet

Définition

SU20

SU21 SCDO

SE43

SE54

SE93

Zones

Objets Docts modification

Menus de domaines

Gén. Dial. Gest Tab

Transactions

ABAP/4 Query

SQ01

SQ02

SQ03

Queries

Domaines application

Groupes utilisateurs

DEVELOPPEMENT Types objets gestion Documentation

SE32

SE35

SE36

SE39

SE91

SE92

Eléments de texte

Modules dialogue

BD logiques

Editeur écran part

Messages

Messages syslog

SWO1

SWO2

SD11

SE11

SE37

SE38

SE41

SE51 SE 63

SQ07

Gestion

Synthèse

Data modeler

Dictionnaire

Biblio fonctions

Editeur ABAP/4

Menu painter

Screen painter Désign./desccriptifs

ABAP/4 Query

SE61

Documentation

Test Workbench

SE30

SLIN

SM21

ST22

Analyse durée exéc

Contrôle étendu

Journal système

Analyse vidage mém.

Page 157: Cours ABAP

Quelques transactions utiles à connaître

Cours ABAP.doc Page 153 sur 181

ADMINISTRATION Moniteur Administration

Jobs Monitorage système

SARA

SM01

SM02

SMLT

USMM

Archivage

Codes transactions

Messages système

Transport de langues

Analyse système

SM36

SM37

Définition de job

Synthèse des jobs

SM04

SM50 SM51

SMGW

Synth. Utilisateurs

Synthèse processus Serveur

Monit passerelles

Gestion utilisateurs Computing center jobs

SM12

SM13

SM21

SM35

SM56

SM58

ST22

SU56

Entrées de blocage

Mise à jour

Journal système

Batch input

Buffer tranches N°

RFC transactionnel

Analyse vidage mém.

Buffer utilisateurs

SM39

SM49

SM61

SM62

SM64

SM65

Performance analysis

External commands

Background objects

Define events

Raise events

Check environment

PFCG

SU01

SU02

SU03

SU05

SUIM

Groupes d'activités

Utilisateur

Profils

Autorisation

Utilisateur Internet

Système information

Page 158: Cours ABAP

ANNEXE: les codes à barres

Cours ABAP.doc Page 154 sur 181

ANNEXE

Les codes à barres

Les codes à barres dans SAPscript et le Système de Spool. Ceci n'est que la traduction française de la documentation (en anglais) intitulée BARCODES.

Pour les illustrations et programmes exemples veuillez vous reporter à cette documentations.

Concept

Les données sur les codes à barres sont des données de texte standard qui sont converties par le lecteur de codes

à barres.

L‟imprimante peut imprimer des données de type codes à barres grâce aux contrôle d‟impression.

Le contrôle d‟impression permet de débuter et d‟arrêter l‟impression du format code à barres .

Le contrôle d‟impression est spécifique au type d‟imprimante et au type du code à barres.

En général, le code à barres que vous utiliserez ce trouve dans le formulaire de SAPscript. Dans ce cas, vous

aurez seulement besoin de fournir les données sur le code à barres. SAPscript prend garde à prévenir

l‟impression du format code à barres et de stopper ce format à la fin de l‟impression.

Vous pouvez, sinon, entrer les données d‟un code à barres directement dans un document SAPscript. Vous devez

alors explicitement entrer les contrôles d‟impression afin de sortir des données de type code à barres. Au

moment de l‟impression, les données sont de type code à barres.

La suite décrit comment les codes à barres sont imprimés depuis le formulaire et directement depuis un

document SAPscript.

Impression des codes à barres

Dans un formulaire de SAPscript, les codes à barres sont générés en tant que format caractère .

Le système de codes à barres est défini dans le menu TOOLS TEXT PROCESSING FONT AND GOTO

SYSTEM BARCODES (transaction SE73). La définition du système de codes à barres inclut les contrôles

d‟impression qui sont utilisés pour mettre le format d‟impression en mode "codes à barres" puis après impression

remettre le format d‟impression sur normal.

SAPscript insert automatiquement ces contrôles d‟impression dans le flux vers l‟imprimante lorsque vous

imprimez avec le formulaire.

Page 159: Cours ABAP

ANNEXE: les codes à barres

Cours ABAP.doc Page 155 sur 181

Impression d’un code à barres depuis un document SAPscript

Dans le programme de traitement de texte de SAPscript, la donnée du code à barres est du texte normal qui est

converti lors de l‟affichage ou de l‟impression par un lecteur de codes à barres. Cette conversion est réalisée par

les contrôles d‟impression qui précédent et suivent les données codes à barres dans le document SAPSCRIPT. Le

premier contrôle d‟impression met le mode d‟impression de l‟imprimante sur codes à barres. le texte de donnée

code à barres est alors imprimé comme un code à barres sur l‟imprimante cible. Le second contrôle d‟impression

met le mode d‟impression de l‟imprimante sur texte, les données suivantes sont ainsi imprimées au format texte.

EXEMPLE

La séquence suivante dans un document SAPscript doit imprimer le code à barres qui correspond à

„12334567‟ : SBP01 1234567 SBS01 . Le contrôle d‟impression SBP01 contient les séquences de

sorties de l‟imprimante qui met le mode d‟impression sur code à barres. Le contrôle d‟impression

SBS01 contient les séquences de sortie qui restaurent le mode d‟impression normal.

Définition d’un code à barres dans l’ Overview de SAP.

Pour imprimer un code à barres, le format doit être défini dans les trois menus suivant :

Système de code à barres de SAPscript dans OUTIL TRAITEMENT DE TEXTE POLICE DE

CARACTERES.

Utilisation : Le système de code à barres spécifie un nom pour un code à barres et sa taille. Vous

pouvez utiliser ce nom pour introduire un code à barres dans un formulaire.

Pour y arriver : SAP a défini tous les système code à barres utilisés par les formulaires standards

de SAP. Vous devez définir un système de code à barres seulement pour ajouter un nouveau format

de code à barres pour votre formulaire.

Système de code à barres de SAPscript dans OUTIL TRAITEMENT DE TEXTE POLICE DE

CARACTERES.

Utilisation : Identifie les contrôles d‟impression pour un type de procédé (modèle d‟imprimante).

ils sont utilisés pour mettre le format d‟impression soit en mode code à barres soit en mode normal.

Pour y arriver : SAP a prédéfini les contrôles d‟impression pour certains type d‟imprimantes. Voir

la liste des codes à barres prédéfinis pour plus d‟informations.

Pour les autres types d‟imprimantes, vous devez spécifier les noms des contrôles d‟impression

utilisés pour imprimer les code à barres.

Contrôle d‟impression du système de la file d‟attente.

Utilisation : les contrôles d‟impression avec un nom ayant le format SBP<nn> sont utilisés pour le

mode d‟impression code à barres. la donnée qui suit est imprimée au format code à barres.

Le mode d‟impression est remis sur normal lorsque le contrôle d‟impression dont le format du nom

est SBS<nn> . <nn> représente le code d‟identification unique que vous pouvez sélectionner .

Pour y arriver : Vous devez spécifier la séquence de sortie qui met en mode impression code à

barres ou en mode normal.

Page 160: Cours ABAP

ANNEXE: les codes à barres

Cours ABAP.doc Page 156 sur 181

Impression des codes à barres.

Avec SAPscript, vous pouvez imprimer les données au format code à barres. Les codes à barres sont souvent

imprimés comme des étiquettes qui sont utilisés dans différent domaine comme par exemple l‟inventaire d‟un

stock, le transport…

Les codes de données des codes à barres sont comme des séries de lignes dont l‟épaisseur et/ou la distance entre

chaque trait varient. Quelque fois ils incluent un nombre de vérification (check number), qui peut être utilisé

pour détecter et analyser des erreurs. Quelques fois la donnée du code à barres est reprise sous une forme

numérique lisible.

Les chapitres suivant reprennent :

Les codes à barre prédéfinis par SAP et prêt à l‟emploi.

Les procédures pour l‟ajout de nouveaux codes à barres et rendre possible l‟impression de codes à barres sur

d‟autres types d‟imprimantes que celles prédéfinies par SAP.

Pour information sur l‟impression des codes à barres sur les imprimantes sous Windows utilisant le programme

de transfert SAPLPD, s‟il vous plait reportez vous au chapitre les codes à barres et SAPWIN.

Impression OCR dans le système de SAP

Généralement, les imprimantes utilisent différent caractères pour une impression normale ou OCR.

Habituellement, la différence est limitée par les codes hexadécimaux utilisés par les caractères spéciaux OCR.

Pour imprimer les données OCR, SAPscript doit passer dans le mode caractères OCR sur le flux d‟impression, et

alors revenir au mode normal une fois que les caractères OCR ont été imprimés.

Contrôles d’impressions

Vous devez utiliser les contrôles d‟impression de SAPscript pour basculer d'un mode à l'autre. Il y a deux types

de contrôles d‟impression :

SF<nnn> / SF<nnn> .

S4001 / S4004 / S0000.

Vous pouvez les utiliser pour passer en mode caractères OCR et revenir au mode normal.

Vous pouvez utiliser un des deux type de contrôle d‟impression ou les deux pour imprimer en mode OCR et

revenir au mode normal. Cependant, vous devriez laisser les contrôles d‟impression S4001 / S4004 / S0000

vides. Entrer les séquences de sorties de l‟imprimante pour imprimer en mode OCR et en ressortir, seulement

dans les contrôles d‟impression SF<nnn>. SAPscript envoie automatiquement les deux types de contrôles

d‟impression à l‟imprimante. Cependant, seulement les contrôles d‟impression SF peuvent être entrer dans les

attributs d‟impression de SAPscript.

Page 161: Cours ABAP

ANNEXE: les codes à barres

Cours ABAP.doc Page 157 sur 181

EXEMPLE

L‟exemple suivant montre le format de la sortie.

Texte entré sous SAPscript : text … <OA> 1234 “hook”</>text…

Sortie sur le driver de l‟imprimante : text… S4001 SF009 1234 “hook”S0000 SF001 text…

Où :

S4001 est le contrôle d‟impression standard pour le type de caractère OCR-A. Habituellement, le contrôle

d‟impression est vide. A la place, SAPscript utilise les contrôles d‟impression SF pour passer en mode OCR

et revenir au mode normal.

SF009 est le contrôle d‟impression avec lequel OCR-A est envoyé sur l‟imprimante. SF009 est défini dans

les attributs d‟impression SAPscript. Vous devez entrer les commandes d‟impression correctes pour passer

en mode OCR-A dans SF009.

Le nom est un exemple choisit arbitrairement

S0000 est le contrôle d‟impression standard pour revenir vers le mode standard. Habituellement, ce contrôle

d‟impression est vide. A la place, SAPscript utilise les contrôle d‟impression SF pour passer en mode OCR

et revenir au mode normal.

SF001 est le contrôle d‟impression qui permet de remettre l'imprimante dans son état initial qu'elle avait

avant l'appel du mode OCR-A ( par exemple, Courrier 120).

Vous devez entrer les commandes nécessaires dans chaque contrôle d‟impression SF<nnn>.

SF001 est un exemple choisit arbitrairement.

Ensemble de caractères

En interne, SAPscript utilise deux types d'ensemble de caractères OCR qui sont prédéfinis par SAP pour

représenter les données OCR. Les identifiants sont 4001 pour OCR-A et 4004 pour OCR-B dans la fonction

"ensemble de caractères" du système spool. Ces représentations de caractères sont cartographiées par SAPscript

et le système spool, en un ensemble de caractères pour l'impression. vous devez définir l‟ensemble des caractères

d‟impression dans le système spool. Vous devez aussi identifier l‟ensemble des caractères dans SAPscript.

L‟ensemble des caractères d‟impression, comme ils sont définies dans le système spool, doit être compris par les

deux OCR et le mode normal d‟impression. C‟est à dire, ils doivent contenir les codes hexadécimaux pour les

caractères spéciaux OCR. Et pour les autres, ils doivent fournir les codes hexadécimaux que l‟imprimante peut

utilisée peut importe les données OCR ou les données normales. Cette restriction existe parce que le système

spool ne peut pas passer d‟un ensemble de caractère d‟impression à un autre pendant l‟impression.

Codes à barres et SAPWIN

Vous pouvez imprimer les codes à barres sur n‟importe quelle imprimante Windows, si vous faites comme suit :

1. Définissez l‟imprimante dans le système spool de SAP avec le type d‟appareil SAPWIN.

2. Spécifiez ACCESS METHOD 8 dans la définition de l‟imprimante dans le système spool.

3. Achetez une DLL ( Dynamic Linked Library ) de vos codes à barres, pour votre PC Windows.

SAP ne fournit pas de DLL de code à barres. Vous devez les obtenir chez un autre vendeur.

Littéralement, chaque DLL convertit les codes à barres en graphique. Toutes imprimante capable

d‟imprimer des graphiques peut, il va s‟en dire, imprimer des codes à barres, et aucune fonte de police n‟est

nécessaire.

Le code à barres .DLL doit rencontrer les conditions suivantes :

Il doit être compatible avec vos imprimantes Windows et avec le programme de transfert SAPLPD qui

tourne sur PC Windows.

Pour être compatible avec SAPLPD le code à barre .DLL doit offrir une interface de programmation qui

rencontre les conditions de SAPLPD. Ces conditions d‟interfaces et les produits compatibles connus sont

Page 162: Cours ABAP

ANNEXE: les codes à barres

Cours ABAP.doc Page 158 sur 181

regroupés dans la note 25344 dans le système d‟information SAP on Line. Vous pouvez voir les conditions

d‟interface à partir du moment où cela est écrit dans la compatibilité du code à barres .DLL avec SAPLPD.

Le .DLL doit être nommé BARCODE.DLL.

Le .DLL doit être installé dans l‟un de ces dossier :

- Dans le dossier Windows et Windows\System.

- Le dossier dans lequel se trouve SAPLPD.EXE.

SAPLPD n'utilise pas la variable PATH pour trouver BARCODE.DLL.

Compatibilité entre le code à barres .DLL et SAPLPD

Pour assurer la comptabilité avec le programme SAP SAPLPD, le vendeur de code à barres .DLL doit vérifier

que :

la fonctionnalité du code à barre est déclarée en tant que .DLL,

le code à barre peut être configuré par le biais de spécifications dans les données enregistrées (voir

les conditions d‟interface ci-dessous),

le code à barres .DLL calcule lui-même les chiffres de vérification et les légendes,

l‟épaisseur et la taille du code à barres peut être calculée.

Tout code à barres .DLL qui exporte les deux fonctions ci-dessous peut être compatible avec SAPLPD (s‟il vous

plait allez voir la note 25344 dans le système de service OnLine de SAP pour les descriptions des paramètres

dans l‟appel des fonctions) :

Configuration requise

Généralement, les imprimantes ont besoin d‟un supplément hardware ou software pour imprimer des codes à

barres. Plusieurs imprimantes ne peuvent imprimer les codes à barres du tout. Soyez sûr de vérifier que cette

caractéristique est disponible avant d‟acquérir une imprimante.

Certaines imprimantes sont capable de générer d'elles-mêmes les nombres de vérification relatifs aux codes à

barres. Pour d‟autres modèles, vous devrez fournir le nombre de vérification dans les données envoyées à

l‟imprimante. Si votre imprimante ne peut pas générer des nombres de vérification, allez voir dans la

documentation de vos applications SAP pour déterminer comment sont envoyés les nombres de vérification

comme partie intégrante des codes à barres.

NOTE :

Pour informations sur les codes à barres .DLL pour les utiliser sur les PC Microsoft Windows, voir Les codes à

barres et SAPWIN.

Test d’impression des codes à barres

Pour tester l‟impression des codes à barres faites ce qui suit :

Sélectionnez TOOLSWORD PROCESSING STANDARD TEXT

Imprimez le document prédéfini SAPscript-BARCODETEST, en spécifiant ST comme Document

ID et D ou E pour la langue.

Le document imprime tout les code à barre qui sont prédéfinis par SAP (voir code à barres

prédéfinis pour plus d‟informations). le document est habituellement utilisable seulement dans le

client 000.

Page 163: Cours ABAP

ANNEXE: les codes à barres

Cours ABAP.doc Page 159 sur 181

Ajouter vos propres définition des codes à barres

Si vous désirez :

ajouter un nouveau code à barres ; ou ,

utiliser un code à barre prédéfini sur votre imprimante au lieu de celle de la liste dans code à barres

prédéfini.

Vous devez alors définir le code à barres dans le système spool de SAP et dans SAPscript. Plus spécifiquement,

vous devez définir :

le code à barre dans SAPscript, si ce n‟est pas un standard, prédéfini par SAP. C‟est la définition du code à

barres système,

le nom des contrôles d‟impression pour passer en mode d‟impression code à barres et revenir ensuite au

mode d‟impression normal. C‟est la définition de l‟impression du code à barres,

les séquences de sortie de l‟impression avec lesquels le mode d‟impression passe en code à barres et revient

en mode normal.

Pour définir un code à barres et activer l‟impression de ceux-ci, faites ce qui suit :

1. Définir le code à barre dans SAPscript si ce n‟est pas déjà fait.

Sélectionnez TOOLSWORD PROCESSING FONT et cliquez sur SYSTEM BARCODES. Sur cet

écran, vous pouvez entrer votre définition de format de votre nouveau code à barres.

NOTE :

Le nom de votre code à barres doit commencer par un Z pour éviter tout conflit de nom avec les codes à

barres de SAP.

2. Copiez la définition du type d‟imprimante avec laquelle vous allez travailler. Vous pouvez sauter cette étape

si vous ajoutez un nouveau type d‟imprimante au système SAP.

Pour copier la définition, sélectionnez TOOLSADMINISTRATION SPOOLSPOOL

ADMINISTRATIONUTILITIESCOPY DEVICE TYPE.

Dans le premier champ, entrez le nom du type d‟imprimante que vous voulez copier. Dans le second champ,

choisissez un nom commençant par Z pour votre nouveau type d'imprimante. La convention de nom protége

votre définition du type d‟imprimante de tout conflit de nom avec les codes à barres de SAP.

Utilisez le nouveau type d‟imprimante dans toute les définitions de l‟imprimante que vous installez pour

imprimer les codes à barres.

EXEMPLE :

Vous souhaitez imprimer des codes à barres sur une imprimante HP LASERJET 4. Cette

imprimante est prédéfinie par SAP sous le type de procédé HPLJ4. Pourtant, la définition de

l‟imprimante standard n‟inclut pas les supports pour l‟impression des codes à barres.

Pour éviter les conflits avec la définition standard de SAP HPLJ4, vous devez créer une copie

du type d‟imprimante. Le nom doit commencer par un Z comme dans ZHPLJ4.

Vous aurez besoin d‟ajouter le contrôle d‟impression pour revenir au mode d‟impression

normal sur l‟imprimante ZHPLJ4, et pas la définition standard de HPLJ4. Vous aurez aussi

besoin d‟utiliser ZHPLJ4 comme le type d‟imprimante pour toutes les imprimantes HP

LASERJET 4 que vous avez définies dans le système SAP pour l‟impression des codes à

barres.

3. Définir le printer barcodes pour le système de code à barres que vous avez l‟intention d‟utiliser. Un printer

barcodes spécifie le nom des contrôles d‟impression que vous allez utiliser pour passer en mode

d‟impression des codes à barres et revenir en mode normal. Vous devez définir des contrôles d‟impression

Page 164: Cours ABAP

ANNEXE: les codes à barres

Cours ABAP.doc Page 160 sur 181

des codes à barres pour chaque type d‟imprimante que vous souhaitez utiliser pour l‟impression des codes à

barres.

Marquez chaque système de code à barres à tour de rôle et sélectionnez printer barcodes.

Entrez les informations suivantes :

Device Type (type d‟imprimante) : le type d‟imprimante que vous souhaitez utiliser pour

l‟impression des codes à barres.

Entrez le type d‟imprimante que vous avez créé à l‟étape 2 ci-dessus.

Barcode (code à barres) : le nom du système code à barres que vous souhaitez imprimer. Utilisez

F4 pour afficher le système code à barres que vous avez défini.

Prefix (préfixe) : le nom du contrôle d‟impression de la forme SBP<nn>, où <nn> est un nombre

d‟identification.

Vous pouvez sélectionner tout les nombres d‟identification que vous souhaitez. Le nom du contrôle

d‟impression doit être unique parmi les contrôles d‟impression que vous avez définis pour le type

d‟imprimante.

Exemple : SBP25.

Suffix (suffixe) : le nom du contrôle d‟impression de la forme SBS<nn>, où <nn> est un nombre

d‟identification.

Vous pouvez sélectionner tout les nombres d‟identification que vous souhaitez. Le nom du contrôle

d‟impression doit être unique parmi les contrôles d‟impression que vous avez définis pour le type

d‟imprimante. Il est judicieux d‟utiliser le même identifiant pour chaque préfixe et suffixe.

Exemple : SBS25.

4. Entrez les séquences de sorties (commandes d‟impression) pour l‟impression des codes à barres dans les

contrôles d‟impression que vous avez définis.

Sélectionnez TOOLSADMINISTRATION SPOOLSPOOL ADMINISTRATION et PRINT

CONTROL FOR DEVICE TYPE.

En utilisant le manuel fournit avec l‟équipement des codes à barres, entrez les commandes d‟impression

nécessaire pour commencer et arrêter l‟impression des codes à barres.

EXEMPLE :

Pour SBP25 (de l‟étape 2), vous devez entrer la séquence de sortie qui met l‟imprimante en mode code à

barres. Pour SBS25, vous devez entrer la séquence qui met fin au mode code à barres.

NOTE :

S‟il vous plait veuillez vous reporter aux contrôles d‟impression des codes à barres adaptés au driver

d‟impression SAPscript avant de définir vos contrôles d‟impression des codes à barres. Le driver d‟impression

SAP manipule différemment le marquage des données des codes à barres, et cela affecte les séquences de sortie

que vous devez entrer dans vos contrôles d‟impression.

Page 165: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 161 sur 181

BC410 Ceci n'est qu'un résumé de la documentation BC410, et donc pour de plus amples informations veuillez vous

reporter à ce document.

Autres techniques dans Screen Painter et Menu Painter

Eléments graphiques :

Editeur graphique pleine page :

- On les sélectionne à partir de l‟écran de synthèse et on les positionne à l‟aide de la souris sur l‟écran.

- Pour les boutons d‟options, on doit définir des groupes graphiques pour chaque jeu de bouton.

- Lorsque l‟utilisateur sélectionne une case à cocher ou un bouton d‟option, la zone concernée doit comporter

un „X‟.

- Pour la gestion des attributs, à chaque bouton de commande, on doit affecter un code de fonction.

- Pour saisir les textes accompagnant ces éléments graphiques, il faut les répertorier dans la liste de zones

comme des zones de textes indépendants.

- Tout programme peut contenir un dynpro qui définit un domaine de l‟écran normal comme un sous-écran,

grâce à l‟instruction CALL SUBSCREEN domaine INCLUDING <programme> >numéro d’écran> dans

la logique d‟exécution, c‟est-à-dire dans PROCESS BEFORE OUTPUT et PROCESS AFTER INPUT.

Mode alphanumérique pleine page :

1e étape :

- Pour les cases à cocher et les boutons d‟option, on doit d‟abord définir une zone de saisie /édition, ainsi

qu‟un texte de zone.

- Une fois la liste de zone gérée, on positionne le curseur sur la 1e zone du groupe de boutons d‟option, ou de

cases à cocher, ou sur un bouton de commande et on choisit Elément graphique pour passer en mode

Sélection.

- Pour définir une boîte, il faut lui affecter un titre, puis positionner le curseur sur ce titre avant de choisir

Elément graphique pour passer en mode Sélection.

- Pour définir un Sous-écran, on sélectionne le coin supérieur gauche à l‟aide du curseur puis on choisit le

menu Sous-Ecran On accède à une boîte de dialogue dans lequel on indique le nom du sous-écran,

puis on passe en mode Sélection.

2e étape :

- En mode Sélection, on définit d‟abord la fin de bloc de chaque groupe d‟éléments graphiques identiques,

avant de sélectionner un élément graphique.

- Si on sélectionne des Boutons d‟option, on a alors accès aux fonctions Définir groupe graphique et

Supprimer groupe graphique.

- On doit définir la fin de domaine des Sous-écrans et des Boîtes.

Page 166: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 162 sur 181

Icônes sur l’écran :

- Si on travaille en pleine page alphanumérique, on définit un icône pour un bouton de commande en gérant

l‟attribut Nom d’icône.

- Si vous avez gérez un texte de zone, pour un bouton de commande, l‟icône sera afficher avant le texte.

- La définition d‟une zone de statut n‟est possible que dans l‟éditeur pleine page.

Les zones de statut permettent d‟éditer un icône qui n‟apparaîtra qu‟au moment de l‟exécution.

DEFINITION : Une zone de statut est une zone d‟édition représentée par un icône.

- Pour affecter des valeurs à une zone d‟édition de manière dynamique (avec l‟attribut „‟avec icône‟‟) , on

utilise le module fonction ICON_CREATE.

Contrôle automatique des saisies :

- Une fois que l‟utilisateur a fini de travailler sur un écran, et avant que n‟intervienne le traitement des

modules PAI, plusieurs contrôles automatiques sont alors effectuées dans le processeur interactif.

- 1e contrôle : détermine les zones obligatoires

- 2e contrôle : contrôle des clés externes, effectuées que si une zone d‟écran fait référence à une zone du

Dictionary pour laquelle une table de contrôle a été définie, et si l‟attribut a été sélectionné.

- 3e contrôle : contrôle du format de zone (fonctionnalité F4), qui permet d‟afficher les entrées possibles d‟une

zone, c‟est-à-dire les valeurs-clés de la table de contrôle.

Les valeurs fixes :

- Dans ABAP/4 Dictionary, on peut définir des valeurs fixes pour des domaines déterminés.

- Si on définit une zone d‟écran en faisant référence à un domaine pour lequel des valeurs fixes ont été

spécifiées,

Ces valeurs fixes sont affichées lorsqu‟on appuie sur F4 pour visualiser les entrées

possibles pour la zone de saisie

Le processeur interactif compare la valeur saisie à l‟ensemble des valeurs fixes

Dans pool de modules, avec message d‟erreur :

- Pour contrôler les valeurs de saisie, on doit utiliser l‟instruction FIELD avec l‟option MODULE.

Le module approprié ne sera alors exécuté que pour la zone indiquée dans FIELD.

- Si le module génère un message d‟erreur (E) ou d‟avertissement (W), l‟écran est de nouveau affiché sans

que le module PBO ne soit traité. Le texte du message est alors affiché et seule la zone

contrôlée par ce module devient de nouveau accessible

REMARQUE : L‟instruction FIELD peut rendre les zones de nouveau accessibles. Si on formule un message

dans un module sans appeler celui-ci dans une instruction FIELD, le message sera affiché mais la zone n‟est pas

accessible.

Page 167: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 163 sur 181

Contrôle des Groupes de zones :

- Si on désire que plusieurs zones deviennent de nouveau accessibles, en cas de message d‟erreur, on doit

toutes les spécifier dans l‟instruction FIELD, puis les concaténer avec l‟instruction MODULE à des fins de

contrôle au sein de l‟instruction CHAIN.

-

PROCESS AFTER INPUT. MODULE modul INPUT. CHAIN. ‘’

FIELD : screen field1, ‘’

Screen field2, MESSAGE E … .

‘’

‘’ ENDMODULE.

MODULE modul.

ENDCHAIN.

- Une zone peut être utilisée dans différentes instructions CHAIN

Message d‟erreur :

- Le texte du message est affiché sur le dynpro

- Toutes les zones affectées au module correspondant (FIELD) deviennent de nouveau accessibles.

- Le système oblige l‟utilisateur à saisir de nouveau les données.

Message d‟avertissement :

- Le texte du message est affiché sur le dynpro

- Toutes les zones affectées au module correspondant (FIELD) deviennent de nouveau accessibles.

- L‟utilisateur peut saisir de nouveau les données (et alors le système réagira comme un message d‟erreur),

ou ignorer cet avertissement en appuyant sur Entrée .

Message d‟information :

- Le texte du message est affiché sur le dynpro

- Le traitement est alors interrompu.

- L‟exécution du programme reprend au point où elle a été interrompue, une fois que l‟utilisateur a appuyé sur

Entrée.

Message de réussite :

- Le texte du message est affiché sur l‟écran suivant

Message de fin anormale :

- Le texte du message est affiché sur le dynpro

- L‟exécution en cours est interrompue une fois que l‟utilisateur a appuyé sur Entrée et revient à l’écran

initial.

Page 168: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 164 sur 181

Mémoire des paramètres SAP :

- On peut enregistrer des valeurs sous une identification (ID) de paramètre, qui sont alors mémorisées pour

chaque dossier utilisateur et qui restent disponibles pour plusieurs dossiers.

- Le paramètre SET permet de copier les définitions (à l‟exécution du PAI)dans la mémoire SAP

- Le paramètre GET permet de copier des définitions à la fin de l‟exécution du PBO, à partir de la mémoire

SAP, à condition que la zone d‟écran affiche sa valeur initiale.

- Les attributs de paramètres SET/GET pour une zone d‟écran faisant référence à un éléments de données, à

l‟aide d‟une identification (ID) de paramètre.

Définit dans la table TPARA

Ecrans Dynamiques :

- L‟instruction SET SCREEN permet d‟écraser provisoirement l‟écran suivant

- L‟instruction CALL SCREEN permet d‟insérer le traitement d‟un ou plusieurs écrans avant le dynpro.

Le traitement du dynpro se poursuivra sur la base des instructions correspondantes après cet appel d‟écran.

- L‟instruction SET SCREEN nnnn écrase provisoirement l‟écran suivant

( l‟écran doit être un écran du même pool de modules)

- L‟instruction LEAVE SCREEN interrompt le dynpro.

- L‟instruction LEAVE TO SCREEN nnn permet de quitter le dynpro et de passer directement à l‟écran

suivant en une seule et même étape.

- L‟instruction CALL SCREEN nnnn interrompt le dynpro pour exécuter l‟écran nnnn ainsi que tous les

écrans suivants.

( l‟écran doit être un écran du même pool de modules)

- L‟instruction SET SCREEN 0, LEAVE SCREEN, LEAVE TO SCREEN 0 permet de revenir au point

d‟appel où on peut poursuivre le traitement de l‟écran d‟appel

(Si on n'est pas en mode d‟appel, le programme est interrompu)

Boîtes de Dialogue :

- Dans l‟instruction CALL SCREEN, les options STARTING AT et ENDING AT permettent d‟indiquer la

position et la taille de l‟écran appelé

Dans MENU 100 : Dans MENU 101 :

MODULE OK-CODE INPUT. MODULE OK-CODE INPUT.

‘’ ‘’

‘’ ‘’

CALL SCREEN 101. SET SCREEN 0 .

STARTING AT 30 10 LEAVE SCREEN .

ENDING AT 60 20. ‘’

ENDMODULE. ENDMODULE.

REMARQUE : On peut utiliser STARTING AT sans ENDING AT le système

détermine alors la taille de la boîte de dialogue à partir de la taille Utilisée dans les attributs

d‟écran.

Le point de reprise sera alors le coin supérieur gauche

Page 169: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 165 sur 181

Exécution conditionnelle des modules :

- Si on spécifie ON INPUT après MODULE dans une instruction FIELD(c‟est obligatoire), le module ne

sera exécuté que si la zone appropriée contient une valeur autre que la valeur initiale.

PROCESS AFTER INPUT.

FIELD <screenfield>.

MODULE modul ON INPUT.

- Si on utilise l‟option ON CHAIN-INPUT dans une instruction CHAIN, le module ne sera traité que si au

moins une des zones d‟écran dans l‟instruction CHAIN comporte une valeur différente de la valeur initiale.

PROCESS AFTER INPUT.

CHAIN.

FIELD : <screen field 1>,

<screen field 2>,

„‟

<screen field n>.

MODULE modul ON CHAIN-INPUT.

ENDCHAIN.

- Si on spécifie ON REQUEST après MODULE dans une instruction FIELD(c‟est obligatoire), le module

ne sera exécuté que si la zone appropriée fait l‟objet d‟une nouvelle saisie.

PROCESS AFTER INPUT.

FIELD <screenfield>.

MODULE modul ON REQUEST.

- Si on utilise l‟option ON CHAIN-REQUEST dans une instruction CHAIN, le module ne sera traité que si

au moins une des zones d‟écran dans l‟instruction CHAIN fait l‟objet d‟une nouvelle saisie.

PROCESS AFTER INPUT.

CHAIN.

FIELD : <screen field 1>,

<screen field 2>,

„‟

<screen field n>.

MODULE modul ON CHAIN-REQUEST.

ENDCHAIN.

- Lorsqu‟un utilisateur appelle une fonction de type „E‟, un module avec l‟option AT EXIT-COMMAND est

exécuté, même avant que les contrôles automatiques ne soient effectués.

- L‟écran est ensuite traité selon la procédure normale (contrôles automatiques de saisie, puis exécution des

modules PAI).

- On peut aussi programmer une fin anormale avec cette option.

- L‟instruction MODULE avec l‟option AT EXIT-COMMAND ne peut pas avoir de référence de zone,

c‟est-à-dire elle ne peut pas être spécifiée dans une instruction FIELD.

- Chaque instruction PROCESS AFTER INPUT ne peut comporter qu‟une seule instruction MODULE

avec l‟option AT EXIT-COMMAND.

Page 170: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 166 sur 181

Menu Painter :

Il permet de définir dans un écran des fonctions dotées d‟un statut particulier et de les affecter à la barre de

menu, la barre d‟outils standard ou la barre des boutons de commande appropriée.

- Il permet aussi de définir un titre.

- Il faut lui affecter un statut dans lequel on définit les fonctions qui doivent être actives /inactives.

- A chaque ajout de statut, on doit régénérer l‟interface utilisateur.

- Les instructions SET PF-STATUS et SET TITLEBAR permettent d‟affecter à un écran un statut (au max.

8 caractères) et un titre (au max. 3 caractères) dans le moule PBO approprié.

- Voir compléments Cahier A (pages 2-30 à 2-39)

Mise à jour asynchrone

Présentation : - Une Unité logique de travail permet la transformation de l‟état cohérent d‟une base de données en un état 2

tout aussi cohérent.

- Dans le système R/3, les transactions SAP prennent en charge l‟exécution des Unités logiques de travail

appropriées.

Unité Logique de Travail :

- Le lancement d‟une ULT se fait à partir d‟un point de synchronisation activé par l‟application de base de

données

- Au cours d‟une ULT, le système procède à la mise à jour des tables, en fonction des Ordres de

- Mise à jour émis par le système R/3.

Les entrées de table ainsi modifiées font l‟objet d‟un blocage et restent inaccessibles jusqu‟à la fin de la

ULT.

- Après chaque mise à jour de base de données, le système de base de données informe, par un code de retour,

le système R/3 de la réussite ou de l‟échec de la mise à jour.

- L‟interruption d‟une ULT s‟effectue à partir d‟un autre point de Synchronisation activé par le système R/3

qui transmet un ordre de COMIT ou de ROLLBACK au système de bases de données. En

guise de réponse, celui-ci exécute un COMIT de base de données pour confirmer la mise à jour des tables,

soit un ROLLBACK qui interrompt les mises à jour effectuées par l‟ULT. l‟état 2 est identique à

l‟état 1.

- Dans les 2 cas, ceci met fin au blocage des entrées de tables initialement mis en place par la base de

données.

Page 171: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 167 sur 181

Transaction SAP :

- Elle est constituée de plusieurs étapes interactives ou de dialogue

Une étape de dialogue : commence lorsque l‟utilisateur appuie sur Entrée, active une fonction à l‟aide

d‟une touche de fonction, ou choisit une option de menu soit par sélection, soit

par un double-clic finit dès que l‟écran suivant apparaît

- Au cours d‟une étape de dialogue, les modules PAI et PBO appartenant respectivement au dynpro et à

l‟écran suivant sont exécutés.

- Chaque étape de dialogue peut contenir différents Ordres de mise à jour

UPDATE : Mise à jour

INSERT : Insertion

DELETE : Suppression

Avec l‟ULT :

- Après chaque étape de dialogue ou interactive, R/3 transmet automatiquement un COMMIT de base de

données au système de base de données, qui repartit ensuite les ordres de mise à jour des étapes de dialogue

entre plusieurs ULT.

- Un ROLLBACK dans une étape de dialogue n‟a pas d‟effet sur les mises à jour de base de données

exécutées dans les étapes précédentes

R/3

Etape de Dialogue Commit de base de données Ordre de mise à jour

Syst. Base

Données

Mise à jour Plusieurs ULT

asynchrone

Avec Mise à jour asynchrone :

- La mise à jour asynchrone permet de regrouper en une seule unité (les ULT) plusieurs ordres de mise à jour

issus des étapes de dialogue d‟une transaction SAP.

- Dans l‟ULT, soit toutes les mises à jour sont effectuées, soit aucune n‟est exécutée.

Ici , les ordres de mise à jour ne sont pas directement transmit à la base de données mais sont marqués pour

faire l‟objet d‟une mise à jour spécifiées dans la table de journalisation.

- L‟instruction COMMIT WORK de l‟ABAP/4 marque la fin de l‟ULT. R/3 lance ensuite un processus de

travail de mise à jour spécial sur la base de saisie de la table de journalisation.

- En cas d‟erreur, l‟ULT est interrompue par l‟instruction ROLLBACK WORK de l‟ABAP/4.

Les entrées de la table de journalisation sont ensuite supprimées et aucun processus de mise à jour n‟est

exécuté.

Unité Logique de Travail SAP (LUW) :

- Le début d‟une transaction SAP marque toujours le début d‟une ULT SAP.

- L‟instruction COMMIT WORK interrompt la tâche de dialogue et poursuit celle de la mise à jour.

- L‟ULT SAP ne s‟achève qu‟une fois la tâche de mise à jour terminée. La tâche de dialogue

Page 172: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 168 sur 181

Mise à jour asynchrone :

- 1e étape : le prog. Interactif enregistre l‟ordre de mise à jour sous forme de code dans la table de

journalisation

- 2e étape : la partie „dialogue‟ de l‟ULT terminée, le prog. Interactif lance alors le processus de Mise à jour.

- 3e étape : le processus de Mise à jour lit les entrées protocolaires pour l‟ULT enregistrée dans la table de

journalisation au cours du processus de Dialogue

- 4e étape : le processus de Mise à jour transmet ensuite les ordres de Mise à jour à la Base de données et

analyse les résultats.

- 5e étape : Si l‟opération est réussie, le processus de Mise à jour transmet un COMMIT à la base de données

après sa dernière Mise à jour, puis supprime les entrées protocolaires.

OU : Si erreur, le processus de Mise à jour émet un ordre de ROLLBACK, quitte les entrées protocolaires

de la table de journalisation, puis délimite l‟enregistrement protocolaire en conséquence.

Mise à jour V1 :

- Elle concerne la durée critique.

- Une fois les mises à jour effectuées avec succès, Les saisie V1 sont conservées dans la table de

journalisation, et un autre ordre de mise à jour est exécuté par le processus correspondant pour chaque saisie

V2 (étape 6).

Mise à jour V2 :

- Elle concerne la durée moins critique.

- Selon les informations fournies par le processus de mise à jour V1, les ordres de mise à jour V2 (étape 7)

sont ensuite lus par un ou plusieurs processus ; chaque processus transmet les ordres de mise à jour V2 à la

base de données et analyse les résultats.(étape 8)

- Si l‟opération est réussie, chaque processus de mise à jour transmet un COMMIT à la base de données pour

les mises à jour V2

En cas d‟erreur, il émet un ROLLBACK pour ces dernières puis délimite en conséquence les saisies V2

dans la table de journalisation.

- Si toutes les mises à jour, l‟enregistrement protocolaire est entièrement supprimé à l‟issue de la dernière

mise à jour V2

Dès qu‟une erreur se produit au cours d‟une mise à jour V2, l‟enregistrement protocolaire est délimité en

conséquence.

Module fonction de Mise à jour :

Il faut qu‟on dispose d‟un prog. Interactif ou d‟un ou plusieurs modules fonction prévus à cet effet

- Si dans le prog. Interactif, l‟instruction CALL FUNCTION est accompagnée de l‟option IN UPDATE

TASK, l‟appel n‟est pas exécuté immédiatement mais enregistré dans la table de journalisation.

- Les paramètres EXPORTING et TABLES contiennent les informations nécessaires à la mise à jour de la

base de données, qui sont également enregistrées dans la table de journalisation.

Le module fonction contient les instructions de mise à jour. Il est appelé par le processus de mise à jour en

fonction des saisies de la table de journalisation qui lui fournit les données appropriées.

- On peut affecter les modules fonction de mise à jour à différents groupes de fonctions.

- Dans l‟écran Gestion on indique qu‟on utilise le module fonction pour les mises à jour V1 (lancement

immédiat) ou V2 (lancement retardé).

- Dans le module fonction de mise à jour, seuls les paramètres d’import et de tables sont pris en compte. Le

système ne tient pas compte des paramètres d’export et des exceptions.

Page 173: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 169 sur 181

- Si on souhaite ignorer la fonction qui permet d‟effectuer la mise à jour ultérieure à l‟aide de la transaction

SM13, à la suite d‟erreurs, on sélectionne l‟option Lancement immédiat, aucune reprise.

Table de journalisation :

- Chaque fois que l‟instruction CALL FUNCTION … IN UPDATE TASK est exécutée, une saisie est

ajoutée à la table de journalisation sous le nom de module de fonction de mise à jour et des paramètres

correspondants

- Dans une ULT, tous les ordres de MAJ possèdent la même clé (= clé de MAJ) qui permet d‟identifier une

ULT de façon univoque.

- Une zone Intitulé pour les entrées protocolaires associées n‟est créée qu‟après l‟exécution d‟une instruction

COMMIT WORK.

Instruction ROLLBACK :

Dans un prog. Interactif :

- ROLLBACK WORK nécessite la suppression de tous les codes de MAJ de l‟ULT SAP courante.

- ROLLBACK annule toutes les MAJ effectuées dans l‟ULT de la base de données actuelle.

Dans un prog. De MAJ :

- Les instructions COMMIT WORK et ROLLBACK WORK ne sont pas autorisées dans les modules

fonction de MAJ autorisées que dans les prog. Interactifs

- Le module fonction de MAJ transmet les ordres de MAJ à la base de données puis analyse les codes retour

- Voir Cahier A page 3-15

Instruction PERFORM <sous-prog.> ON COMMIT :

Dans un prog. Interactif :

- Lorsqu‟un sous-prog. est appelé à l‟aide , il n‟est exécuté qu‟après l‟instruction COMMIT WORK

suivante.

- Elle permet de regrouper des ordres de MAJ issus de différentes étapes, puis de les exécuter ensemble à la

fin du processus interactif d‟une ULT SAP .

- Chaque fois qu‟on la lance, le nom du sous-prog. est ajouté à une table syst. Interne.

- Elle ne permet pas de transférer des paramètres.

- Si on lance plusieurs fois le même sous-prog. , ce prog. ne pourra être exécuté qu‟une seule fois avec

COMMIT WORK

- L‟instruction ROLLBACK WORK supprime les saisies de la table interne.

Page 174: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 170 sur 181

Concept de blocage SAP

Motifs de blocage.

- Lorsque plusieurs utilisateurs doivent accéder aux mêmes ressources. Celles-ci doivent être parfaitement

synchronisées pour garantir une cohérence des données.

- Par exemple si l'on fait une réservation sur un vol et qu‟ au même moment une autre personne réserve sur le

même vol, il peut arriver que l'on réserve des places qui n'existe plus.

- Donc un moyen pour éviter cela est le blocage. Le blocage est un moyen de bloquer l'accès aux données

critiques (par exemple le nombre de place disponible sur un vol) lorsqu'un utilisateur à besoin de l'utiliser

et/ou de les modifier.

- Pour ne pas entraver le travail des autres utilisateurs il est essentiel de maintenir le blocage que pendant le

temps nécessaire .

Blocage de base de données.

- Si un programme interactif contient des instructions de mise à jour. Le système de base de données active

les blocages appropriés.

- A la fin d'une unité logique de travail, le système de base de données désactive tous les blocages définis

durant la transaction.

- Puisque le système R/3 transmet un COMMIT implicite au système de base de données à chaque

changement d'écran, les blocages de la base de données effectués au cours d'une étape de dialogue restent

activés, au plus tard, jusqu'à la fin de cette étape.

Présentation du système de blocage

- Dans le système SAP, une transaction existe qui permet d'activer les entrées d'une table de blocage pour les

enregistrements à traiter.

- Une entrée de blocage ne peut réussir que si aucune autre entrée n'existe déjà pour les enregistrements de

table concernés.

- La transaction SAP reçoit les informations relatives à la réussite d'un ordre de blocage par l'intermédiaire

d'un 'return code' (code de retour), l'analyse de ce code de retour permet à la transaction de réagir en

conséquence:

- Si un autre utilisateur traite les données un message d'erreur apparaît.

- A la fin du traitement, les blocages doivent être désactivés par le programme interactif de façon explicite.

- Si l'utilisateur interrompt le programme interactif de manière impromptue les blocages sont désactivé

automatiquement (implicitement).

Page 175: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 171 sur 181

Objet de blocage SAP

- Pour lancer les ordres de blocage, vous devez:

- Définir un objet de blocage dans l'ABAP/4 DICTIONARY. Cet objet comprend les différentes tables

qui doivent être bloquées dans un ordre de blocage.

- Vous pouvez ajouter à votre table primaire des tables secondaires à l'aide des clé externes.

- Le nom de l'objet de blocage propre au client doit commencer par EY ou EZ.

- L'argument de blocage est élaboré à partir des zones 'clé' des tables.

- Pour chaque table, vous pouvez définir le mode de blocage exclusif (mode E) ou partagé (mode S).

- On ne peut activer de mode exclusif que si aucun autre mode existe .

- On ne peut activer de mode partagé que si d'autre mode partagé existe déjà.

- Lors d'un blocage partagé ou exclusif, aucun autre utilisateur ne peut activer un blocage exclusif.

Module fonction ENQUEUE/DEQUEUE.

- Lorsqu'un objet de blocage est activé avec succès, le système génère un module fonction ENQUEUE et un

module fonction DEQUEUE..

- Ces modules fonction ont pour nom ENQUEUE_<objet de blocage> et DEQUEUE_<objet de blocage>.

Appel de modules de blocage.

- A l'appelle d'un module de fonction ENQUEUE, le programme tente d'activer une entrée de blocage.

- Les paramètres d'export identifient l'entrée ou les entrées de table à bloquer.

- Le programme interactif (de dialogue) évalue le return code et répond en conséquence.

- A l'appel d'un module de fonction DEQUEUE, approprié à la fin du programme interactif, les entrées sont

supprimées de la table de blocage.

- Si vous désirez supprimer tous les blocages qui ont été activé (par exemple à la fin d'un programme), vous

pouvez utiliser le module de fonction DEQUEUE_ALL.

Table de blocage.

- Les arguments de blocage concernant chaque table sont saisis dans la table de blocage.

- Pour afficher la table de blocage, sélectionnez Outils Gestion Suivi Entrées de blocage (transaction

SM12)

Concept de blocage SAP avec mise à jour.

- Si la mise à jour est demandée dans un programme interactif avec l'instruction COMMIT WORK, les

blocages activés par ce programme sont maintenus pour le programme de mise à jour (voir également le

paramètre _SCOPE).

- A la fin de l'exécution du programme de mise à jour, tous les blocages contenus dans l'unité logique de

travail de SAP en cours sont automatiquement (càd implicitement) désactivés.

Page 176: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 172 sur 181

Caractéristiques spéciales de ENQUEUE.

- le paramètre MODE_<table> a priorité sur le mode de blocage (S = partagé et E = exclusif) défini par

l'objet de blocage.

- Le paramètre _SCOPE détermine l'auteur des demandes de blocage et désactive ces derniers lorsqu'ils ne

sont plus nécessaires :

- _SCOPE = 1 : le blocage est maintenu dans le programme interactif.

- _SCOPE = 2 (valeur par défaut) : le blocage est conservé pour le programme de MAJ.

- _SCOPE = 3 : le programme interactif et le programme de MAJ sont les propriétaires du

blocage : il existe deux entrées de blocage par objet.

- Le paramètre WAIT détermine si un ordre de blocage doit être répété après une erreur. Vous pouvez

spécifier la durée des tentatives de répétition avec le paramètre de profil ENQUEUE/DELAY_MAX.

- Si un argument ne contient de valeur ou correspond à SPACE, un blocage générique est alors activé. Si vous

désirer bloquer la valeur initiale, vous devez activer le code X_<argument de blocage>.

Modification dynamique des écrans.

Table SCREEN/Attributs de zones modifiables.

- Les zones d'écrans et leurs attributs de zone modifiables sont automatiquement mémorisés dans la table

(système) interne SCREEN.

- Pour déterminer la zone pour laquelle vous désirez modifier un ou plusieurs attributs, vous pouvez lire les

zones SCREEN-NAME ainsi que les zones SCREEN-GROUP1 à SCREEN-GROUP4 en effectuant un

LOOP sur la table SCREEN.

- SCREEN-ACTIVE = 0 à le même effet que les trois instructions SCREEN-INVISIBLE = 1, SCREEN-

INPUT = 0, SCREEN-OUTPUT = 0.

Attributs de zone : groupes de modifications.

- Vous pouvez affecter une zone à quatre groupes différents. Les noms de groupes ont trois caractères .

- Vous pouvez effectuer l'affectation de groupe dans le Screen Painter.

Modification dynamique des écrans : programme.

- Vous pouvez programmer la modification d'écran dans un module qui est exécuté pendant le PBO.

- Vous pouvez modifier les attributs d'une zone et/ou d'un groupe de zones en effectuant un LOOP sur la

table SCREEN (notez que LOOP AT SCREEN WHERE … et READ TABLE SCREEN ne sont pas pris

en charge).

- Vous activez ou désactivez les attributs en leur affectant la valeur 0 ou 1. Pour sauvegarder vos

modifications, utilisez l'instruction MODIFY SCREEN.

- Notez que vous ne pouvez pas utiliser l'instruction SCREEN-ACTIVE = 1 pour activer dynamiquement

une zone que vous avez statiquement comme invisible dans le SCREEN PAINTER . En revanche, vous

pouvez transformer une zone définie statiquement comme visible dans le SCREEN PAINTER en une zone

invisible (ou inactive).

Page 177: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 173 sur 181

Table Control

Fonctionnalités :

Les fonctions de Table Control permettent d‟entrer des données ligne par ligne, sous forme de tableau

Les fonctionnalités sont :

- Grille de table pouvant être redimensionnée pour l‟affichage et le traitement des données

- Largeur et position de colonne pouvant être modifiées par l‟utilisateur

- Colonne de sélection des lignes avec affichage en couleur des données choisies

- Sélection de ligne : unique, multiple, toutes, désélection

- Intitulés de colonne affichés sous forme de boutons de commande pour la sélection de colonne

- Défilement horizontal et vertical à l‟aide de la barre de défilement

- Détermination d‟un nombre indéfini de colonne „clé‟ (colonne des codes fixes)

- Attributs de cellule modifiables lors de l‟exécution

Options de table : L‟utilisateur peut mémoriser différentes variantes d‟affichage et définir comme option courante ou standard :

- soit l‟une d‟elles,

- soit l‟option de base.

Renseignement des zones de Table Control : Pour une utilisation plus efficace, on doit :

Lire les données de la Table Control,

Puis les mettre en mémoire tampon dans une table interne.

Applications de Table Control 1 - Il n‟existe qu‟un seul espace de travail pour traiter les lignes d‟une Table Control on n‟a

besoin d‟une instruction LOOP … ENDLOOP pour chaque Table Control, à la fois dans le module PBO et

PAI de la logique d‟exécution.

- Pour chaque module PBO, seule la ligne de la table interne doit être copiée sur la ligne du Table Control,

chaque fois que la boucle est traitée.

- De même, chaque module PAI doit copier les modifications d‟une ligne de Table Control sur la ligne de la

table interne correspondante.

- Lorsqu‟on utilise les fonctions, on doit faire la distinction entre celles qui s‟appliquent uniquement à la ligne

du Table Control et celles qui font référence à l‟ensemble de l‟écran.

Transfert de zones dans PBO :

- Lorsque les Tables control apparaissent sur les écrans, la séquence de transfert de zones est modifiée.

- Dans le module PBO, le transfert de zones du pool de modules à l‟écran intervient chaque fois qu‟une

boucle est traitée dans la logique d‟exécution.

Les autres zones d‟écrans sont renseignées en principe en fin de traitement du PBO.

Transfert de zones dans PAI :

- Dans le module PAI, toutes les zones d‟écran qui n‟appartiennent pas à un Table Control et qui ne sont pas

spécifiées dans une instruction FIELD, sont transférées aux zones de tavail appropriées du pool de modules.

- Le contenu d‟un Table Control est transféré ligne par ligne, à l‟espace de travail approprié du pool de

modules, lors du traitement de la boucle correspondante dans la logique d‟exécution

- De manière générale, les zones spécifiées dans les FIELD sont immédiatement transférées, avant même

l‟instruction FIELD correspondante.

Page 178: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 174 sur 181

Création des Tables Controls (en mode graphique pleine page) :

- Dans l‟éditeur graphique pleine page, on choisit Table pour créer un Table control et on le positionne grâce

au bouton gauche de la souris.

- On définit ensuite les zones du Table Control, en se servant par exemple de celles du Dictionary de

l‟ABAP/4.

- De manière générale, on gère les attributs du Table Control :

- Soit à partir de l‟éditeur pleine page

- Soit dans la liste de zones

Attributs de Table Control :

Deux types : - Attributs généraux : Redimensionnement (vertical, horizontal)

Lignes de séparation (vertical, horizontal)

Possibilités de configuration

- Attributs généraux : Lignes (aucune, unique multiple)

Colonnes(aucune, unique multiple)

Colonne de sélection de lignes

Création de tables Control (en mode alphanumérique pleine page) :

Dans l‟éditeur pleine page alphanumérique, on peut définir un Table Control :

- Dans le menu Traiter, on sélectionne Créer élément puis Table Control

- On accède à une boîte de dialogue où on entre le nom de la Table Control et on initialise les attributs.

- On passe en mode sélection et on détermine la taille du Table Control à l‟aide du curseur.

On définit ensuite les zones du Table Control.

- On peut aussi utiliser les zones de l‟ABAP/4 Dictionary, soit en créer de nouvelles dans le programme.

Définition des TC dans le pool de module :

CONTROLS ctrl TYPE TABLEVIEW USING SCREEN = scr.

Correspond au type Ecran de référence pour

de structure CXTAB_CONTROL initialiser le Table Control

de l‟ABAP/4

- L‟instruction CONTROLS définit un objet de données complexes du type TABLEVIEW, qui lui

correspond au type CXTAB_CONTROL défini dans l‟ABAP/4.

- On gère les valeurs initiales dans SCREEN PAINTER .

A l‟aide de l‟option USING SCREEN, on détermine l‟écran à partir duquel on désire obtenir les valeurs initiales

pour le Table Control concerné.

- On peut utiliser l‟instruction „REFRESH CONTROL ctrl FROM SCREEN scr„ à tout moment pour

initialiser un écran, sur la base des valeurs initiales de l‟écran spécifié.

Il n‟est pas nécessaire que „scr‟ corresponde à l „écran initial du Table Control

Contenu de TABLEVIEW :

FIXED_COLS TYPE i Nombre de colonnes fixes

LINES TYPE i Nombre de lignes pour le défilement vertical

TOP_LINE TYPE i 1e ligne dans le PBO suivant

CURRENT_LINE TYPE i Ligne actuelle (dans LOOP … ENDLOOP)

LEFT_COL TYPE i 1e colonne mobile affichée

LINE_SEL_MODE TYPE i Sélection ligne (aucune : 0, unique : 1, multiple : 2)

COL_SEL_MODE TYPE i Sélection colonne (aucune : 0, unique : 1, multiple : 2)

LINE_SELECTOR Code : Afficher sélection ligne

V_SCROLL Code : Défilement vertical

H_GRIP Code : Ligne de grille horizontale

Page 179: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 175 sur 181

V_GRIP Code : Ligne de grille verticale

COLS TYPE CXTAB_COLUMN OCCURS 10

Attributs (structure) de la Table Control :

- Tous les attributs de Table Control sont modifiables dynamiquement

- On peut aussi interpréter les attributs.

Ex : l‟attribut SELECTED indique si l‟utilisateur a sélectionné une colonne particulière.

Table Control dans la logique d’exécution :

Option 1 : Lecture de la table interne dans la logique d‟exécution et des zones de la table interne à l‟écran

PROCESS BEFORE OUTPUT.

LOOP AT spfli_itab

WITH CONTROL CONNEXIONS

CURSOR CONNEXIONS-CURRENT_LINE.

MODULE lecture.

ENDLOOP.

PROCESS AFTER INPUT. MODULE modify_spfli_itab INPUT.

LOOP AT spfli_itab

MODIFY spfli_itab

FIELD spfli_itab-mark INDEX CONNEXIONS-CURRENT_LINE.

MODULE modify_spfli_itab

ON REQUEST. ENDMODULE.

ENDLOOP.

- Dans la logique d‟exécution, on peut lire une table interne à l‟aide de l‟instruction LOOP. On peut entrer

WITH CONTROL <ctrl> pour définir la référence au Table Control correspondant.

- On détermine l‟entrée de la table qui doit être lue en spécifiant CURSOR <ctrl> CURRENT_LINE. Le

système détermine à son tour <ctrl> CURRENT_LINE à partir de <ctrl>TOP_LINE.

SY-SETPL sert de compteur de boucles spécial pour les instructions LOOP dans la logique d‟exécution.

- Le système détermine lui-même <ctrl> TOP_LINE lorsque l‟utilisateur se sert de la barre de défilement,

mais n‟en fait pas autant pour le changement de page qu‟on doit nous-même programmer.

- Une fois la lecture terminée, les définitions sont mémorisées dans la ligne Intitulé de la table interne. Si les

zones du Table Control ont le même nom que les zones de la table interne, ces dernières sont alors

renseignées.

- On doit illustrer dans la table interne correspondante, toutes les modifications apportées par l‟utilisateur aux

zones d‟un Table Control. Sinon, elles risquent de ne pas être prise en compte lorsque l‟écran

apparaîtra de nouveau après nouvelle exécution du PBO.

MAIS, ce traitement ne doit être exécuté que si les modifications ont été effectivement apportées à une ligne du

Table Control

Page 180: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 176 sur 181

Option 2 : Lecture de la table interne dans le pool de modules et des zones du Dictionary à l‟écran

MODULE sflight_itab_read OUTPUT.

READ TABLE sflight_itab.

INDEX FLIGHTS-CURRENT_LINE.

Screen Painter IF SY-SUBRC = 0.

MOVE-CORRESPONDING sflight-itab to

flight.

ELSE.

EXIT FROM STEP-LOOP.

ENDIF.

PROCESS BEFORE OUTPUT. ENDMODULE

LOOP WITH CONTROL FLIGHTS.

MODULE sflight_itab_read.

ENDLOOP.

PROCESS AFTER INPUT. MODULE modify_spfli_itab INPUT.

LOOP WITH CONTROL FLIGHTS. MODIFY spfli_itab

FIELD sflight-price INDEX CONNEXIONS-CURRENT_LINE.

MODULE modify_sflight_itab

ON REQUEST. ENDMODULE.

ENDLOOP.

- Si on utilise une l‟instruction LOOP sans la présence d‟une table interne dans la logique d‟exécution, on

doit lire les données dans un module PBO qu‟on appelle chaque fois que la boucle est traitée.

- Comme le système ne peut pas définir, dans ce cas, lui-même le nombre des entrées de table interne, on doit

utiliser l‟instruction EXIT FROM STEP-LOOP pour assurer qu‟aucune ligne vierge n‟est affichée dans le

Table Control s‟il n‟y a plus d‟entrée de table interne correspondante.

- On doit également déterminer, au moment opportun, le nombre de lignes concerné par le défilement vertical.

Modification des Tables Controls :

- On peut modifier toutes les valeurs initiales d‟un Table Control en écrasant les attributs.

- Pour modifier les attributs des cellules temporairement, on modifie la table SCREEN dans la module PBO

qui est traité entre LOOP … ENDLOOP dans la logique d‟exécution.

Tri des Tables Controls :

Les attributs de Table Control <ctrl> SELECTED et <ctrl> SCREEN-NAME permettent d‟effectuer très

facilement le tri de l‟affichage par colonne sélectionnée.

Page 181: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 177 sur 181

Lien entre les composantes de programme.

Lien entre traitement interactif et traitement de liste.

- Vous pouvez combiner le traitement interactif (écran) au traitement de liste.

A partir du traitement de liste, vous pouvez passer au traitement d'une séquence d'écrans. ces écrans peuvent

apparaître sous forme de boîte de dialogue modales ou en format pleine page.

- A partir du traitement d'écran, vous pouvez passer au traitement de liste. Les listes peuvent apparaître dans

des fenêtres ou des écrans pleine page, sous forme de liste de base ou de liste détaillée. Dans le traitement de

liste, vous pouvez utiliser toutes les techniques de reporting interactives.

Passage du traitement de liste au traitement interactif. - Dans le traitement de liste, vous pouvez utiliser plusieurs événements interactifs pour répondre aux

fonctions déclenchées par l'utilisateur, les plus importantes sont AT LINE –SELECTION et AT USER-

COMMAND. Le code de fonction appelé par l'utilisateur est mémorisé dans la zone système SY-UCOMM.

- Vous pouvez utilisez l'instruction CALL SCREEN pour appeler un écran sous forme de boîte de dialogue

ou d'écran pleine page, à partir de la liste.

- L'écran appelé est une composante du programme d'appel.

- Les instructions SET SCREEN 0 et , dans certain cas, LEAVE SCREEN ou LEAVE TO SCREN 0, vous

permet de revenir à l'endroit initial d'où l'écran a été appelé.

Passage du traitement interactif au traitement de liste.

- L'instruction LEAVE TO LIST-PROCESSING vous permet de passer du traitement interactif (écran) au

traitement de liste. Pour traiter la liste, vous pouvez utiliser toutes les instructions associées au traitement de

liste, telles que WRITE, ULINE, SKIP, etc., ainsi que tous les événements spécifiques aux listes.

- Avant que la liste ne soit affichée ,tous les modules PAI du dynpro en cours sont traités.

- L'instruction SET PF-STATUS SPACE vous permet d'activer le statut de liste standard.

- Lorsque le traitement de la liste est terminé (interactivement parce que l'utilisateur a appuyé sur F3 dans la

liste de base, ou via le programme suite à l'instruction LEAVE LIST-PROCESSING), le traitement

interactif reprend sur l'écran suivant. Vous pouvez ignorer cet écran en spécifiant AND RETURN TO

SCREEN <scr>.

Liste dans les boîte de dialogue modale.

- Si vous désirez affricher une liste dans une boîte de dialogue, vous devez appeler un écran mais vous devez

occulter son apparition à l'aide de l'instruction SUPPRESS DIALOG du module PBO.

- Pour vous assurer que vous revenez à l'écran d'appel après avoir quitter la liste spécifié LEAVE TO LIST-

PROCESSING AND RETURN TO SCREEN 0.

Encapsulation des dialogues dans les modules fonction.

- Vous pouvez encapsuler les dialogues dans les modules fonction.

- Si vous appelez un écran dans un module fonction, cet écran est associé au programme du groupe de

fonction auquel appartient le module fonction. Le nom du programme est constitué du préfixe SAPL et du

nom de groupe de fonctions.

Appel d'un programme.

- L'instruction SUBMIT vous permet d'appeler et de lancer un programme.

- Si vous spécifié VIA SELECTION-SCREEN, l'écran de sélection du programme apparaît.

- Si vous spécifié AND RETURN, vous revenez à l'endroit d'où le programme a été appelé lorsque son

exécution prendra fin.

- Lorsque vous appelé un programme, vous pouvez utiliser des bases de données logiques pour le processus

de lecture.

Page 182: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 178 sur 181

Appel d'une transaction.

- L'instruction CALL TRANSACTION vous permet d'appeler un programme interactif à partir d'un

traitement de liste ou d'un traitement interactif.

- L'instruction LEAVE PROGRAM vous permet de quitter le programme interactif et de revenir à l'endroit

d'où vous l'aviez appelé.

- L'instruction LEAVE TO TRANSACTION vous permet de lancer un autre programme interactif et dans ce

cas, vous n'avez pas la possibilité de revenir à l'endroit où le programme a été appelé. Cette instruction

correspond à l'entré de la zone de commande /ntcod.

Techniques de transfert de données.

- La mémoire SAP et la mémoire ABAP/4 permettent de transférer des données entre différents programmes :

programmes simples et programmes complexes.

- La mémoire SAP est une zone de mémoire propre à l'utilisateur servant à stocker des valeurs de zones

simples. Elle est conservée pendant toute la durée d'une session utilisateur. Les valeurs contenues dans la

mémoire SAP peuvent être utilisée comme valeurs par défaut pour les zones d'écran. puisque tous les modes

externes peuvent accéder à la mémoire SAP, elle convient peu au transfert de données des modes externes.

- Vous pouvez actualiser la mémoire ABAP/4 pour transférer entre différent mode internes toutes les

variables ABAP/4 : zones, structures, tables internes, objets complexes.

- Chaque mode externe possède sa propre mémoire ABAP/4. Lorsque l'utilisateur interrompt un mode externe

( en entrant /i dans la zone de commande) la mémoire ABAP/4 associée est libérée.

Transfert de paramètres (mémoire SAP)

- L'instruction SET PARAMETER vous permet de stocker dans la mémoire SAP les valeurs servant

d'identifications (ID) de paramètre. Celles-ci sont alors automatiquement transférées aux programmes

interactifs qui activent la fonction GET PARAMETER pour les zones appropriées.

- Vous pouvez également utiliser l'instruction GET PARAMETER pour extraire de la mémoire SAP des

valeurs d'ID de paramètre.

- L'option AND SKIP FIRST SCREEN vous permet de traiter le premier écran en arrière-plan lorsque vous

appelez un programme interactif. Toutefois, les valeurs contenues dans la mémoire SAP doivent être

affectées à toutes les zones obligatoires.

Transfert de données entre programmes (mémoire ABAP/4).

- L'instruction EXPORT TO MEMORY vous permet de copier des variables ABAP/4 avec leurs valeurs

courantes sous forme de cluster de données dans la mémoire ABAP/4. Vous identifiez les différent cluster

de données à l'aide de l'ID appropriée (maximum 32 caractères ).

- L'instruction EXPORT TO MEMORY écrase tous les clusters de données existants.

- L'instruction IMPORT FROM MEMORY vous permet d'extraire des données de la mémoire ABAP/4.

- L'instruction FREE MEMORY ID <id> vous permet de libérer un cluster de données.

Fonction d'aide automatique et programmé

Présentation des fonctionnalités standard F1 et F4.

- Aide (F1) et Entrées possibles (F4) sont des fonctions standard utilisables dans tout le système.

- Lorsque l'utilisateur appui sur F1 en étant sur une zone de saisie ou un texte de zone, la documentation

relative à cette zone est alors affichée.

- Lorsque l'utilisateur appui sur F4 en étant sur une zone de saisie ou, éventuellement, sur la touche des

entrées possibles, les valeurs possibles sont alors affichées.

- Pour mettre cette fonctionnalité à la disposition des utilisateurs lorsque vous développez des programmes

interactifs, vous pouvez l'obtenir automatiquement en faisant référence aux zones du Dictionnary, ou

programmer vous-même le traitement à l'aide des événements d'écran spéciaux PROCESS ON HELP-

REQUEST et PROCESS ON VALUE-REQUEST.

Page 183: Cours ABAP

ANNEXE: BC410

Cours ABAP.doc Page 179 sur 181

Objet matchcode : définition.

- Vous gérez les objets matchcode dans l'ABAP/4 Dictionnary. Le nom doit comporter quatre caractères.

- Commencez par affecter une table primaire. Vous pouvez ensuite inclure les tables secondaires dans la vue,

mais ceci n'est possible que pour les tables liées à la table primaire par des relations de clé externes.

- Une table pool permettant de mémoriser des données matchcode n'est nécessaire que dans des cas

exceptionnels (pour certains types d'ID de matchcode). En règle générale, vous devez utiliser les vues avec

les objets matchcode. Aucune table pool n'est ensuite nécessaire dans la base de données.

Objet matchcode : choix des zones.

- Après avoir affecté les tables approprié d'un objet matchcode, sélectionnez les zones. Ce faisant, vous

déterminez au niveau de l'objet, les zones de base qui peuvent utilisés pour la définition des identifications

(ID) de matchcode.

- Vous devez délimiter une de ces zones comme Zone de recherche elle correspond généralement à la zone

clé de la table primaire. Après une recherche par matchcode, la définition (ou contenu) de cette zone est

ensuite insérée dans la zone d'écran affectée lors de l'exécution.

- Vous activez l'objet matchcode une fois que vous avez effectué ces définitions.

Fonctionnalité F4 étendue : recherche par matchcode 1.

- Le matchcode est un critère de recherche que vous pouvez utiliser pour accéder directement aux

enregistrements sans avoir connaissance de la clé (similaire à l'index).

- Un matchcode est différent d'un index, en ce sens :

- Que vous pouvez le limiter en spécifiant certaines conditions restrictives.

- Qu'il peut être constitué à partir de plusieurs tables.

- Qu'il est affiché sous forme d'aide à la saisie dans le système R/3 lorsque l'utilisateur appuie sur F4.

- Pour un seul objet matchcode, il peut y avoir plusieurs valeurs (identifications de matchcode).

- Si une zone d'écran inclut une relation à un objet matchcode (le SCREEN PAINTER : attribut de zone), le

matchcode devient actif lorsque l'utilisateur appuie sur F4 : autrement dit, s'il existe plusieurs identifications

de matchcode, elles sont présentées à l'utilisateur pour qu'il puisse effectuer sa sélection.

Page 184: Cours ABAP

Liste des SAPistes

Cours ABAP.doc Page 180 sur 181

Liste des SAPistes

UNION TECHNOLOGIE Est : 03 87 56 14 33

Fax : 03 87 63 78 03

UNION TECHNOLOGIE Paris : 01 46 99 80 00

Fax : 01 46 99 80 02

Pour se mettre en relation d'autres SAPistes veuillez prendre contact avec Jean-Jacques GUICHARD.

BON COURAGE A TOUS.

L‟EQUIPE SAPiste.

Page 185: Cours ABAP

Mise à jour

Cours ABAP.doc Page 181 sur 181

Page 186: Cours ABAP

Mise à jour

Dictionnaire des expressions informatiques

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

ABAP/4 : Advanced Business Application Programming / 4th

generation

Activation de masse: Permet d'activer un grand nombre d'objets de façon plus

performante « qu'à la main ». Ces activations sont faites dans un

ordre cohérent (ex.: domaine puis élément de données). De plus,

une table concernée par exemple, ne sera activée qu'une seule

fois même si plusieurs domaines la concernant ont été modifiés.

ALE : Application link enabling, garantit une certaine autonomie dans

le cadre d'un traitement distribué, et assure une parfaite

intégration des applications reliées entre elles avec les système

R/3, R/2 et les autres

Alter Table : Catalogue de la base de données.

AM : (Fixed Assets Management) Module de gestion des

immobilisations

ASCII : (American Standard Code for Information Interchange)

Batch Input : Transfert d'information d'un ancien système vers SAP

BD : Base de données

BDC : (Batch Data Communication) Batch input

BDL : Base de données logique

CAO : Conception assistée par ordinateur

CATT : Outil de test assisté par ordinateur, permet d'assembler et

d'automatiser les processus de gestion dans les procédures de

test.

CBN : Calcul des besoins nets

Chaîne de zones : Table interne conçue par le client par le biais de programmes

CMOD : Permet la gestion des modifications des extensions

CO : (Controlling) Module de contrôle de gestion

CPI : Caractères par pouce, espacement des caractères

A

B

C

Page 187: Cours ABAP

Mise à jour

CPI-C : Common Program interface – communications, (couplé avec

RFC) facilitent la communications et le traitement d'applications

et de programmes entre les système R/3, R:2, et les autres

CRS : Responsable du Service Clientèle.

Data Modeler : Pour créer des éléments de données (cf. 15-6 BC400)

DD :

DDIC :

Déboguer : Tester un programme (par exemple à l'aide du Débogueur

ABAP/4, transaction /h)

Dictionnaire : Il regroupe toutes les tables SAP ou celles créées de toutes

pièces (mais pas les tables internes)

DLL : Dynamic Link Library

Dynpro : Utilisé dans l'Object Browser, un écran avec une gestion par

modules PAI et PBO avant et après l'affichage

EDI : Echange de données informatisées, mécanisme d'échange de

données commerciales entre différents systèmes

Eléments de texte : (SAPscript) C'est dans ce menu que l'on programme ce que l'on

affichera dans une fenêtre

EPC : Chaîne de processus commandée par événement

Etape de Dialogue : Commence lorsque l'utilisateur appuie sur ENTREE, active une

fonction, ou choisit une option de menu (par sélection ou

double-clic). Elle s'achève dès que l'écran suivant apparaît. Elle

contient l'exécution du PAI du dynpro et le PBO de l'écran

suivant

Fenêtre : (SAPscript) Contient toutes les fenêtres nécessaire à

l'impression d'un état

Fenêtres de page : (SAPscript) C'est dans ce menu que l'on place les différentes

fenêtres dans une page

FI : (Financial Accounting) Module de comptabilité financière

D

E

F

Page 188: Cours ABAP

Mise à jour

Fichier séquentiel : Fichier texte, pour le Batch Input, contenant les informations de

l'ancien système à transcrire. Les données sont formatées selon

leurs caractéristiques futures

FLCS : Ligne directe de téléassistance

FM : Module fonction

Formulaire : Contient toutes les données relatives à l'impression d'un état

GUI : (Graphical user interface) Interface utilisateur graphique

HR : (Human Resources) Module de gestion du personnel

IC :

ID : Identification

IS : (Industry Solutions) Module solutions métiers

ITF : (Interchange Text Format) C'est le format sous lequel sont

enregistré les données SAPscript. Il existe des programme de

conversion pour passer en format RTF ou ASCII

G

H

I

J

K

Page 189: Cours ABAP

Mise à jour

LIS : Système d'information logistique

LPI : Ligne par pouce, interlignage

LUW : Unités logiques de travail

MAJ : Mise à jour

Menu Painter : Permet d'accéder à toutes les actions possibles sur un statut (liste

des statuts, barre de menu, allocation des touches, liste des

fonctions, listes des titres)

MM : (Materials Management) Module des achats et stocks

Modification d'écran: Permet de revenir sur un écran et d'afficher certaine données

différemment (en grisées par exemple)

MPS : voir PDP

MRP : Calcul des besoins, composante du module PP

Object browser : Permet de travailler sur les pool de modules, les groupes de

fonctions ou encore les objets privés locaux pour voir tout ce

qu'on a créé (transaction, fonctions, includes, …)

Objet agrégé : C'est un objet formé à partir de plusieurs tables système

Objet d'exécution : Ensemble d'informations sur une table, mises en mémoire

tampon pour faciliter l'accès rapide par un programme

OCS : Online Correction Services

OCR : (Optical Character Recognition) Reconnaissance optique des

caractères

L

M

N

O

Page 190: Cours ABAP

Mise à jour

O.F. : Ordre de fabrication

OLE : Object Link Embedding, liaison et incorporation d'objets

permettant d'intégrer des applications PC au système R/3

Open Interfaces : Interfaces ouvertes, interfaces entre des applications spécifiques

telles que le CAO, l'archivage optique et les lecteurs de codes à

barres

OSS : Online Service System

OTF : Output Text Format

PAI : Process After Input, événement exécuté une fois que l'utilisateur

a appuyé sur ENTREE

Pages : (SAPscript) Contient les différentes pages nécessaires à

l'impression d'un état

Paragraphes : (SAPscript) Contient tout les paragraphes contenus dans l'état à

imprimer, c'est dans ce menu que l'on déclare les différents

types de police (souligné, italique, gras), de tabulations…

PBO : Process Before Output, événement exécuté avant l'apparition de

l'écran

PC : Personal Computer

PDP : (ou MPS) Programme directeur de production composante du

module PP

PIC : Planification industrielle & commerciale, composante du

module PP

PM : (Plant Maintenance) Module de maintenance

POH : PROCESS ON HELP-REQUEST, programmation de la

fonctionnalité F1

POV : PROCESS ON VALUE-REQUEST, programmation de la

fonctionnalité F4

PP : (Production Planning) Module de gestion de la production

Programmation Interactive: Pool de modules avec Transactions

PS : (Project System) Module de gestion de projet

QM : (Quality Management) Module de management de qualité

P

Q

Page 191: Cours ABAP

Mise à jour

Report : Programme créé sous l'éditeur ABAP/4

Reporting Interactif: Utilisation de listes de base et secondaires, appel de fenêtres

et/ou d'écrans suivants

Repositoring : Affichage lien arborescence tables

RFC : Remote function calls (couplé avec CPI-C) facilitent la

communications et le traitement d'applications et de

programmes entre les système R/3, R:2, et les autres

Roll Area : Zone mémoire (appel programme ou transaction)

RTF : (Rich Text Format)

SAP : System Application Product in data processing

SAPscript : Permet l'édition d'états

Screen Painter : Permet d'accéder à toutes les actions possibles sur un dynpro

(éditeur plein écran, zone dico/prog, liste des zones, attributs de

dynpro, logique d'exécution)

SD : (Sales & Distribution) Module de l'administration des ventes

Serveur de présentation: Frontal, terminal, le PC en somme

SFC : Pilotage de l'atelier, composante du module PP

SGBD : Système de Gestion de Base de Données

SIA : Système d'information des achats, composante du module MM

SIGM : Système d'information de gestion de la maintenance,

composante du module PM

SIMQ : Système d'information de management de la qualité,

composante du module QM

SLCS : Support client niveau 2

SMOD : Permet de programmer des extensions SAP avec des Exits de

programme, des Exits de menu et des Exits d'écran

SPA/GPA : Zone mémoire

SPAU : Traitement après mise à niveau

SPDD :

SQL : Structured query language

SSCR : (SAP Software Changement Record) enregistrement d'un

changement logiciel SAP

R

S

Page 192: Cours ABAP

Mise à jour

Tables transparentes: Tables du système de base de données (TRANSP)

TCP/IP : Protocole de communication réseau

Text Module : Groupement d'informations (essentiellement des lignes de texte)

qui peut être utilisé dans plusieurs formulaire mais aussi dans

d'autres Text Module

Transaction : Raccourcis d'appel d'un programme écrit dans la zone d'édition

OKCODE

UPDATE : Mise à jour

WBO : workbench Organiser

WF : Module Workflow

WM : Sous module du module MM permet de gérer l'emplacement du

produit dans le magasin.

Workbench : Banc de travail ABAP/4 qui donne accès aux différentes options

(éditeur, biblio de fonction, object browser, …)

T

U

V

W

X

Page 193: Cours ABAP

Mise à jour

Y

Z

Page 194: Cours ABAP

Mise à jour

Les petits piéges à éviter

REPORT:

Quand on utilise les CHECKBOX il ne faut pas oublier que si la case est cochée la variable

prend la valeur 'X' (et non pas 'x').

Lors de l'appel de fonction CALL FUNCTION, il faut:

- tout écrire en MAJUSCULE pour éviter tout problème.

- ne pas oublier d'ôter les devant tout ce que l'on utilise.

L'utilisation de MOVE-CORRESPONDING sous-entend que tout les champs ont le même nom.

Après l'utilisation de FIELDS GROUP ne pas oublier de mettre l'instruction SORT.

L'instruction AT NEW ne fonctionne pas.

La fonction MATERIAL_UNIT_CONVERSION doit être appelée deux fois à la suite pour

qu'elle fonctionne.

SAPscript:

Dans les éléments de texte veillez à bien utiliser exactement la désignation de l'élément de

texte (décrit dans SAPscript) dans le programme ABAP/4 faire très attention aux

espaces.

Faire la distinction entre les types et les noms des fenêtres ( MAIN et MAIN par exemple).

Ne pas oublier d'activer le formulaire en fin de création (à vérifier dans la fenêtre header

data du formulaire que son statut est Actif – sauvegardé.

SAPscript ne fait aucune vérification, les erreurs commises ne sont pas détectées et ne

seront pas affichées à l'édition.

Lorsque l'on utilise l'adresse automatique faire attention à l'orthographe de ADDRESS.

L'insertion d'un graphique n'est vraiment vraiment pas évident.

L'appel de routine avec PERFORM – FORM dans SAPscript est irréalisable.

Lorsque la langue d'origine est différente de la langue de travail, il y aura un problème car

vous ne pourrez pas modifier certaines choses. Donc faire une copie du formulaire à

modifier simplement puis ouvrir la copie en modification et aller dans le menu

FORMULAIRE et REPRENDRE là mettre le nom de la copie et la langue d'origine.

Pour voir les objets de texte : OUTILS – TRAITEMENTS DE TEXTE – TEXTES

STANDARDS. Pas de possibilité de transport (à voir).

Pour les commentaires : * commentaires : s'imprime

/* commentaires : ne s'imprime pas

Ecrire d'abord les données et ensuite tracer le cadre autour.

POOL DE MODULE:

Ne pas oublier de tout générer dès qu'un changement, aussi petit soit-il, a été fait.

Si vous utilisez la variable FCODE, n'oublier pas de la déclarer dans le TOP et de l'inscrire

dans les listes de zones du SCREEN PAINTER.

Les modules dans le PBO et le PAI sont exécutés séquentiellement.

Page 195: Cours ABAP

Mise à jour

Si une erreur de type de fenêtre a été faite (boîte modale au lieu de liste) il faut soit

changer les attributs et dans saut dialogue Jenesaisplus soit recommencer le dynpro

depuis le début.

L'instruction SET PF-STATUS SPACE ne marche pas.

Si l'on souhaite utiliser les boutons de commande de type EXIT, il ne faut pas oubliez de les

déclarer de type E et de faire un module AT_USER_COMMAND spécifique.

USERS EXIT:

BATCH INPUT:

Pour faire une interface sortante il faut utiliser RLGRAP-FILENAME au lieu de

FILENAME-FILEINTERN (utilisé pour les interfaces entrantes).

Page 196: Cours ABAP

Mise à jour

Pool de Module:

Page 197: Cours ABAP

Mise à jour

Dynpro 1

Statut 1 : Type dynpro

PAI : Module USER_COMMAND.

CASE SY-UCOMM.

WHEN 'LIST'.

LEAVE TO SCREEN 2

Dynpro 2

Statut 2 : Type liste

PBO :

Module SET_PFSTATUS.

SET PF-STATUS 'MENU2'.

Module INIT.

SUPRESS DIALOG.

LEAVE TO LIST PROCESSING

AND RETURN TO SCREEN 1.

PAI :

Module AFFICHER.

SELECT * FROM tab.

WRITE …

ENDSELECT.

INSTRUCTIONS: FIELD nomzone.

Module VERIF.

IF zone < SY-DATUM.

MESSAGE E…

ENDIF.

LIST

E

Liste

___________________

___________________

___________________

___________________

___________________

___________________

___________________

Page 198: Cours ABAP

Mise à jour

CHAIN.

FIELD : zone1, zone2.

Module VERIF.

ENDCHAIN.

Page 199: Cours ABAP

Mise à jour

Batch Input:

OPEN DATASET <(nom_fichier) C:\FICHIER.TXT>

Ouvre le fichier.

TRANSFER <nom_zone_table_interne> TO <nom_fichier>

Copie le contenu de la table interne dans le fichier.

READ DATASET <nom_fichier> TO <nom_table_interne>

Lit le contenu du fichier et le copie dans la table interne, cela se fait ligne par ligne. CLOSE DATASET <nom_fichier>

Ferme le fichier.

Deux autres fonctions que l'on peut utiliser :

WS_DOWNLOAD

WS_UPLOAD

EXPORTING :

FILENAME : 'C:\<NOM_FICHIER>.TXT'

TABLES :

DATA_TAB : TAB.

FICHIER TXT

__________________

__________________

__________________

__________________

__________________

__________________

__________________

__

Table

Interne

SAP

TAB

ARTICLE:

TAB-ZONE1(10)

type C

PRIX :

TAB-ZONE2(10)

DEVISE :

TAB-ZONE3(10)

WS_UPLOAD

BLOC NOTE

ANCIEN SYSTEME

Fiche

articl

e

Fiche

articl

e

FICHIER

SEQUENTIE

LS

SAP

Fiche

articl

e

Fiche

articl

e

BATCH

INPUT

Page 200: Cours ABAP

Mise à jour

Article est classé dans la table: RMMGL-MATNR.

N° de programme :SAPLMGMM.

N° de dynpro :0060.

Langue: zone de dynpro : SKTEXT-SPRAS

Pour la deuxième zone de dynpro ont à la même chose, donc pour les différencier il suffit de mettre:

SKTEXT-SPRAS(01) pour la 1ere

.

Et SKTEXT-SPRAS(02) pour la 2iéme

.

FICHIERS

SEQUENTIE

LS

DYNPROTAB

(table

système)

LANCER

BATCH

INPUT

Page 201: Cours ABAP

Mise à jour

SAPscript:

Impression du formulaire:

OPEN_FORM Prépare le programme à l'impression d'un formulaire.

START_FORM Indique quel formulaire doit on utiliser.

FORM = 'NOM_FORMULAIRE'

LANGUAGE = SY-LANGU

WRITE_FORM Indique où il écrit.

ELEMENT = 'TOTO'

TYPE = TOP

BODY Valable seulement pour la fenêtre MAIN

BOTTOM

WINDOW = 'MAIN'

END_FORM Ferme

CLOSE_FORM Ferme

FENETRE EN-TETE

FENETRE

ADRESSE

TOP

FENETRE MAIN

BODY

FENETRE PIED DE PAGE

Page 202: Cours ABAP

Mise à jour

Commandes utiles:

/: PROTECT

P1 &CITYFROM& &CITYTO&

P2 &DEPTIME& &ARRTIME&

B1 &DATE&

/: ENDPROTECT

SET DATE MASK : Permet d'avoir le format de date que l'on souhaite.

METZ, le 26 août 1998 /: SET DATE MASK ' METZ, le DD MMMM YYYY'

/: &DATE&

SAPSCRIPT-FORMPAGES : Contient le nombre total de pages qu'il y a en sortie.

/: Page &PAGE&/& SAPSCRIPT-FORMPAGES+3&

Page 2 / 6

Module FI

Il y a cinq grands axes:

Comptabilité générale,

Comptabilité fournisseurs,

Comptabilité clients,

AM => les immobilisations,

IM => les investissements (FI-CO).

Comptabilité générale :

Plan de compte CAFR

Société 001

Devise Affichage postes individuels

Données de bases :

N° de compte

Nature du compte

Groupe de compte

Type de pièces

1 type = 1 type d'opération

gérer les comptes à imputer

Clé de comptabilisation

sens des postes de la pièce (débit / crédit)

type de compte possible (général, client, etc.)

31 crédit du compte tiers fournisseurs

40 débit du compte général

Comptabilité fournisseur

Compte CPD fournisseurs occasionnels

Comptes généraux spéciaux (CGS)

Demande d'acompte

Permet de ne pas casser ces

3 lignes s'il n'y a pas

assez de place pour écrire

ces trois lignes alors on

change de page

Page 203: Cours ABAP

Mise à jour

Acompte

Provisions

Cautions

comptabilité clients

relances

paramètres principaux :

intervalle entre deux relances

niveau de relance

nombre de jour de retard maximum

nombre de jour de tolérance par poste

montant minimum

décompte des frais de relance

Contrôle de crédit

Lorsque le plafond est dépassé on fait un blocage au niveau SD

AM : Comptabilité des immobilisations:

Bâtiments

Véhicules

Machines

Financières

Immobilisations en cours

La fiche immobilisation

Données générales

Catégorie IMMO: programme de reprise

Catégorie d'immobilisation

Tableau 01

Tableau 02 Fiscal

Code d'amortissement

Durée d'amortissement

Tableau 060 T.P. (Taxe Professionnel)

Structure d'écran

Investissements

Programme d'investissement

Poste programme , sous-poste

Mesure d'investissement

Page 204: Cours ABAP

Mise à jour

Type d'ordre :

INVB : investissements budgétés

INVR : investissements réalisés

Créé un ordre INVB

Créé un ordre INVR

Récepteur = IEC

Montant budget

Engagé

Réalisé

Rattaché au poste du programme d'investissement

Ordre :

Ouverture

Lancement

Clôture technique

Clôture

Etats , système d'informations.

Standard, loi

Créer état report WRITE

simultané

Page 205: Cours ABAP

Mise à jour

F key German English Spanish Italian French

BARRE DE MENU Bearbeiten (B)

Springen (S)

Zusätze (Z)

Umfeld (U)

Einstellungen (E)

Hilfsmittel (M)

Pflegen (P)

Werkzeuge (W)

Sicht (I)

System (Y)

Hilfe (H)

Edit (E)

Goto (G)

Extras*

Environment (N)

Settings (S)

Utilities (U)

Maintain (M)

Tools (T)

View (V)

System (Y)

Help (H)

Tratar (T)

Pasar a (P)

Detalles (D)

Entorno (E)

Opciones (O)

Utilidades (U)

Actualizar (C)

Herramientas (H)

Vista (V)

Sistema (S)

Ayuda (A)

Elaborare (E)

Passaggio (P)

Opzioni (O)

Ambiente (M)

Impostazioni (I)

Utilities (U)

Aggiornare (A)

Tools (T)

View (V)

Sistema (S)

Help (H)

Traiter (T)

Saut (S)

Détail (D)

Environnement (E)

Options (P)

Utilitaires (U)

Gérer (G)

Outils (O)

Vue (V)

Système (Y)

Aide (A)

MENU OBJET

F11

F11

F16

F14

F15

Holen (H) (Syn.

Öffnen)

Anderes Objekt

(A)

Anlegen (L)

Ändern (Ä)

Anzeigen

Vorlage kopieren

Sichern (I)

Buchen (U)

Merken (M)

Generieren (G)

Drucken (D)

Löschen (Ö)

Beenden (B)

<Objekt> ändern

Open (O)

Other <object> (R)

Create (E)

Change (C)

Display (D)

Copy from (F)

Save (S)

Post (T)

Hold (L)

Generate (G)

Print (P)

Delete (D)

Exit (X)

Change <object>

(H)

Traer (T) (sin.

Abrir)

Otro <objeto> (O)

Crear (C)

Modificar (M)

Visualizar (V)

Copiar de (P)

Grabar (G)

Contabilizar (Z)

Retener (R)

Generar (G)

Imprimir (I)

Borrar (B)

Finalizar (L)

Modificar

<objeto> (F)

Fetch (F)

Altro <oggetto>

(A)

Creare (C)

Modificare (M)

Visualizzare (V)

Copiare modello

(O)

Salvare (S)

Registrare (R)

Memorizzare (E)

Generare (G)

Stampare (P)

Cancellare (N)

Terminare (T)

Modificare

<oggetto> (F)

Accéder (A)

Autre <objet> (U)

Créer (C)

Modifier (M)

Afficher (F)

Copie (O)

Sauvegarder (V)

Enregistrer (E)

Maintenir (I)

Générer (G)

Imprimer (P)

Supprimer (S)

Terminer (T)

Modifier <objet>

(D)

MENU TRAITEMENT

Alle markieren

(M)

Block markieren

(B)

Alle Mark. löschen

(K)

Neue Einträge (G)

Anhängen (H)

Auswählen (W)

Ausschneiden (S)

Einsetzen (N)

Einfügen (E)

Kopieren (P)

Verschieben (V)

Vertauschen (C)

Umsortieren (O)

Suchen (U)

Zeile löschen (Z)

Select all (S)

Select block (B)

Deselect all (D)

New lines (N)

Append (N)

Choose (H)

Cut (T)

Paste (P)

Insert (I)

Copy (C)

Move (M)

Swap (W)

Re-sort (R)

Find (F)

Delete line (L)

Marcar todo (M)

Marcar bloque (Q)

Desmarcar todo

(R)

Nuevas entradas

(N)

Anexar (A)

Seleccionar (S)

Cortar (C)

Pegar (G)

Insertar (I)

Copiar (P)

Desplazar (Z)

Intercambiar (T)

Reclasificar (L)

Buscar (U)

Borrar línea (B)

Marcare tutto(M)

Marcare blocco

(L)

Cancellare

marcature (U)

Nuovi inserimenti

(V)

Aggiungere (A)

Selezionare (Z)

Cut (C)

Includere (D)

Inserire (I)

Copiare (O)

Spostare (P)

Scambiare (B)

Riclassificare (F)

Cercare (E)

Cancellare riga (G)

Marquer tout (Q)

Marquer bloc (B)

Suppr.marquage

(U)

Nouv.entrées (N)

Attacher (A)

Sélectionner (L)

Couper (C)

Coller (O)

Insérer (S)

Copier (P)

Déplacer (D)

Permuter (E)

Retrier (R)

Rechercher (H)

Supprimer ligne

(M)

Page 206: Cours ABAP

Mise à jour

F12

Korrigieren (R)

Sortieren (T)

Widerrufen (D)

Abbrechen (A)

Correct (E)

Sort (S)

Undo (U)

Cancel (A)

Corregir (O)

Clasificar (F)

Deshacer (D)

Cancelar (E)

Corregere (R)

Classificare (S)

Ripristinare (T)

Interrompere (N)

Corriger (G)

Trier (T)

Défaire (F)

Interrompre (I)

MENU PASSER Übersicht(sbild)

(Ü)

Kopf(bild) (K)

Nächste Position

(N)

Vorige Position

(V)

Andere Position

(A)

Zurück (Z)

Overview (O)

Header (H)

Next item (N)

siguiente

Previous item (P)

Other item (I)

Back (B)

Resumen (R)

Cabecera (C)

Posición (S)

Posición (A)

anterior

Otra posición (O)

Back (B)

Riepilogo (R)

Testata (T)

Posizione

successiva (S)

Posizione

precedente (P)

Altra posizione

(A)

Indietro (I)

(Ecran de)

synthèse (Y)

En-tête (E)

Poste suivant (S)

Poste précédent

(P)

Autre poste (A)

Retour (R)

MENU FENETRE DE DIALOGUE OK,

Enter

OK,

Enter

F12

Weiter (W)

Ausführen (F)

OK (O)

Abbrechen (A)

Schließen (S)

Continue (C)

Execute (X)

OK (O)

Cancel (A)

Close (L)

Continuar (C)

Ejecutar (E)

OK (O)

Cancelar (N)

Cerrar (R)

Continuare (C)

Eseguire (E)

OK (O)

Interrompere (I)

Chiudere (U)

Suite (S)

Exécuter (E)

OK (O)

Interrompre (I)

Fermer (F)