Upload
hathuy
View
235
Download
3
Embed Size (px)
Citation preview
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
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
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
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.
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.
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.
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.
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.
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.
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é.
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.
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
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)
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
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
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
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
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.
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.
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.
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.
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
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
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.
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.
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.
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.
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.
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)
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.
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>.
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.
*--------------------------------------------------------------------*
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' *
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.
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.
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 *
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.
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. *
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:
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é.
Les bases de données logiques
Cours ABAP.doc Page 38 sur 181
Le résultat à l'écran:
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.
Les bases de données logiques
Cours ABAP.doc Page 40 sur 181
Jeu d'essai:
Traitement sbook
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".
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).
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
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'.
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.
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.
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.
Création d'écrans de sélections
Cours ABAP.doc Page 48 sur 181
Jeux d'essais:
Pour F1:
Pour F4:
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.
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.
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.
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.
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.
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".
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.
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.
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.
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.
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.
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.
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>…
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.
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
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:
L'Object Browser
Cours ABAP.doc Page 65 sur 181
(a) (b)
(c) (d)
(e)
Figure 4: arborescence du pool
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.
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).
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
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
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).
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é
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.
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.
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.
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.
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 *
*&-----------------------------------------------------------------------------------------------------------------*
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 *
*&-----------------------------------------------------------------------------------------------------------------*
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 *
*&-----------------------------------------------------------------------------------------------------------------*
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.
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
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.
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.
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 *
*&----------------------------------------------------------------------------------------------------------------- *
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'
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'
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
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.)
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
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.
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).
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
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
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
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
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.
*-------------------------------------------------------------------------------------------------- ---------*
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
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
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.
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)
SAPscript
Cours ABAP.doc Page 100 sur 181
Un clic sur le bouton afficher, la case en-tête étant cochée :
SAPscript
Cours ABAP.doc Page 101 sur 181
Un clic sur le bouton Pages:
Un clic sur le bouton Fenêtres:
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é.
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) :
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
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.
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
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"
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
Fonction d'appels sous ABAP/4
Cours ABAP.doc Page 109 sur 181
Les pages :
Les fenêtres
Fonction d'appels sous ABAP/4
Cours ABAP.doc Page 110 sur 181
Le paragraphe standard:
Fonction d'appels sous ABAP/4
Cours ABAP.doc Page 111 sur 181
Le paragraphe avec Police:
Le paragraphe avec Tabulation:
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 :
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:
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
Fonction d'appels sous ABAP/4
Cours ABAP.doc Page 115 sur 181
Page NEXT:
Elément de texte pour MAIN:
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
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.
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".
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
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.
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.
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.
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
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.
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)
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‟
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 :
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 !!!
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
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
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.
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.
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.
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.
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).
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.
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.
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
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)
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.
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
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
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
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
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
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
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
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)
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
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
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)
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.
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
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.
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.
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.
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
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.
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
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.
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.
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.
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.
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
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.
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.
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
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.
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.
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).
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.
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).
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.
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
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
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.
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.
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.
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.
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.
Mise à jour
Cours ABAP.doc Page 181 sur 181
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
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
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
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
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
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
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
Mise à jour
Y
Z
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.
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).
Mise à jour
Pool de Module:
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
___________________
___________________
___________________
___________________
___________________
___________________
___________________
Mise à jour
CHAIN.
FIELD : zone1, zone2.
Module VERIF.
ENDCHAIN.
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
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
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
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
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
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é
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)
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)