Cours ABAP
Short Description
Download Cours ABAP...
Description
SOMMAIRE
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
I
SOMMAIRE
Instruction select 1. ....................................................................................................................................... 27 Instruction select 2. ....................................................................................................................................... 27 SELECT * FROM INTO TABLE FOR ALL ENTRIES IN . .............................. 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
II
SOMMAIRE
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
III
Introduction à SAP
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.
Cours ABAP.doc
Page 1 sur 181
Introduction à SAP
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.
Cours ABAP.doc
Page 2 sur 181
Introduction à SAP
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.
Cours ABAP.doc
Page 3 sur 181
Introduction à SAP
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.
Cours ABAP.doc
Page 4 sur 181
Introduction à SAP
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.
Cours ABAP.doc
Page 5 sur 181
Introduction à SAP
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.
Cours ABAP.doc
Page 6 sur 181
L'édition des données
L’EDITION DE DONNEES Instruction WRITE.
WRITE .
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 WRITE AS SYMBOL. INCLUDE WRITE 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‟ , WRITE : 5 „HEURE‟ ,
20 sy-datum. 20 sy-uzeit.
SKIP 2. ULINE . ULINE génère un souligné.
Cours ABAP.doc
Page 7 sur 181
L'édition des données
Symbole de texte. WRITE :
TEXT-001, / TEXT-002,
10 sy-datum. 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.
Cours ABAP.doc
Page 8 sur 181
L'édition des données
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 INTENSIFIED INPUT
COLOR
INVERSE
Cours ABAP.doc
Désignations Surbrillance
Option de COLOR
OFF 1 Modifiable en 2 saisie 3 4 Couleur d‟arrière 5 plan 6 7 Permute les couleurs de 1er et d‟arrière plan
col_background col_heading col_normal col_total col_key col_positive col_negative col_group
Désignation Arrière plan Titre Corps de liste Total Colonne clé Valeur positive Valeur négative Niveau hiérarchique
Page 9 sur 181
Zones système
ZONES SYTEME Liste des Zones système. SY-ABCDE SY-APPLI SY-BATCH SY-BATZD SY-BATZM SY-BATZO SY-BATZS SY-BATZW SY-BINPT SY-BREP4 SY-BSPLD SY-CALLD SY-CALLR SY-CCURS SY-CCURT SY-CDATE SY-CFWAE SY-CHWAE SY-COLNO SY-CPAGE SY-CPROG SY-CTABL SY-CTYPE SY-CUCOL SY-CUROW SY-DATAR SY-DATLO SY-DATUM SY-DATUT SY-DAYST SY-DBCNT SY-DBNAM SY-DBSYS SY-DCSYS SY-DEBUG SY-DSNAM SY-DINGR SY-DYNNR SY-ENTRY SY-FDAYW SY-FDPOS SY-FFILE SY-FLENG SY-FMKEY SY-FODEC SY-FOLEN SY-FTYPE
Cours ABAP.doc
Constante : alphabet (A,B,C,...) Applications SAP Mode batch actif. BATCH-SUBMIT : tous les jours BATCH-SUBMIT : mensuel BATCH-SUBMIT : une seule fois BATCH-SUBMIT : batch-submit immédiat BATCH-SUBMIT : hebdomadaire Batch input actif (X) BATCH_SUBMIT : nom racine du programme d'exécution BATCH-SUBMIT : édition de liste dans le spool Appel mode actif (X) IMPRIMER : Id. pour fonction dialogue d'impression Indication du cours/zone de résultat CURRENCY CONVERT Cours de table de l'application CURRENCY CONVERSION Date du cours de CURRENCY CONVERSION Utilisation interne Utilisation interne Colonne actuelle lors création de liste Numéro de page actuel RUNTIME : programme principal Table des cours de CURRENCY CONVERSION Type de cours "M", "B", "G" de CURRENCY CONVERSION Position curseur (colonne) Position curseur (ligne) Témoin : donnée reçue Date locale par rapport à l'utilisateur SYSTEME : date du jour Date globale par rapport à UTC (GMT) Heure d'été active ? ("Daylight Saving Time") Nombre éléments en quantités traitées pour les opérations BD Base de données logiques pour programme ABAP/4 SYSTEM système base de données SYSTEM : système dialogue Utilisation interne RUNTIME : nom du dataset pour l'édition spool Groupe de dynpros du dynpro actif Numéro de l'écran actif Utilisation interne Jour de la semaine du calendrier d'entreprise Chaîne caractères trouvée dans INTERNE : flatfile (USING/GENERATING DATASET) Utilisation interne (longueur de zone) Menu code fonction actuel Utilisation interne (zone de décimales) Utilisation interne (longueur d'édition de la zone) Utilisation interne (type de zone)
Page 10 sur 181
Zones système
SY-GROUP SY-HOST SY-INDEX SY-INPUT SY-LANGU SY-LDBPG SY-LILLI SY-LINCT SY-LINNO SY-LINSZ SY-LISEL SY-LISTI SY-LOCDB SY-LOCOP SY-LOOPC SY-LPASS SY-LSIND SY-LSTAT SY-MACDB SY-MACOL SY-MANDT SY-MARKY SY-MAROW SY-MODNO SY-MSGID SY-MSGLI SY-MSGNO SY-MSGTY SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 SY-NEWPA SY-NRPAG SY-ONCOM SY-OPSYS SY-PAART SY-PAGCT SY-PAGNO SY-PAUTH SY-PDEST SY-PEXPI SY-PFKEY SY-PLAYO SY-PLAYP SY-PLIST SY-PNWPA SY-PRABT SY-PRBIG SY-PRCOP SY-PRDSN SY-PREFX SY-PRI40 SY-PRIMM SY-PRINI SY-PRLOG SY-PRNEW SY-PRREC
Cours ABAP.doc
INTERNE : regroupement Nom machine Nombre de passages de la boucle Utilisation interne Code langue de l'ouverture de la session SAP PROGRAM : Programme de base de données ABAP/4 de SY-DBNAM Numéro de ligne de liste actuelle Nombre de lignes Ligne actuelle lors création liste Longueur de liste INTERACT : ligne sélectionnée Numéro de ligne de liste actuelle Base de données locale existe Opération base de données locale Nombre de lignes "loop" (boucle) pour steploop de dynpro Utilisation interne Numéro de la liste secondaire INTERACT : Information statut par niveau de liste PROGRAMME : Nom du fichier permettant accès aux matchcodes Nombre de colonnes de l'instruction SET MARGIN Numéro mandant de la connexion SAP Lettre de marquage de ligne actuelle p. MARK Nombre de lignes de l'instruction SET MARGIN Nombre de modes alternatifs Id. message INTERACT : Ligne message (ligne23) Numéro message Type de message (E, I, W,...) Variable message Variable message Variable message Variable message Utilisation interne Utilisation interne INTERNE : on commit fLag SYSTEM : système d'exploitation IMPRIMER : mise en forme Nombre de pages de la liste de l'instruction REPORT page actuelle lors création de liste Utilisation interne IMPRIMER : imprimante IMPRIMER : durée de résidence dans le spool RUNTIME : statut actuel des touches fonctions Utilisation interne Utilisation interne IMPRIMER : nom de l'ordre spool (nom de liste) Utilisation interne IMPRIMER : service indiqué sur page de garde IMPRIMER : page de garde de sélection IMPRESSION : nombre d'exemplaires IMPRIMER : nom du dataset du spool Préfixe ABAP/4 pour jobs batch Utilisation interne IMPRIMER : impression immédiate Utilisation interne Utilisation interne IMPRIMER : nouvel ordre spool (liste) IMPRIMER : destinataire
Page 11 sur 181
Zones système
SY-PRREL SY-PRTXT SY-REPI2 SY-REPID SY-RSTRT SY-RTITL SY-SAPRL SY-SCOLS SY-SFNAM SY-SFOFF SY-SLSET SY-SPONO SY-SPONR SY-SROWS SY-STACO SY-STARO SY-STEPL SY-SUBCS SY-SUBRC SY-SUBTY SY-SYSID SY-TABID SY-TABIX SY-TCODE SY-TFDSN SY-TFILL SY-TIMLO SY-TIMUT SY-TITLE SY-TLENG SY-TLOPC SY-TMAXL SY-TNAME SY-TOCCU SY-TPAGI SY-TSTIS SY-TSTLO SY-TSTUT SY-TTABC SY-TTABI SY-TVAR0 SY-TVAR1 SY-TVAR2 SY-TVAR3 SY-TVAR4 SY-TVAR5 SY-TVAR6 SY-TVAR7 SY-TVAR8 SY-TVAR9 SY-TZONE SY-UCOMM SY-ULINE SY-UNAME SY-UZEIT SY-VLINE SY-WAERS SY-WILLI
Cours ABAP.doc
IMPRIMER : supprimer après édition IMPRIMER : texte de la page de garde Utilisation interne PROGRAMME : Nom du programme. ABAP/4 Utilisation interne IMPRIMER : intitulé du programme d'impression SYSTEME : version SAP Colonnes sur écran non utilisé Utilisation interne Nom du SELECTION-SET RUNTIME : numéro spool lors de l'édition d'une liste RUNTIME : numéro spool de l'instruction TRANSFER Lignes sur écran INTERACT.: Liste affichée à partir colonne INTERACT. : page affichée à partir ligne Numéro de la ligne "loop" (boucle) p. step dynpro INTERNE : statut CALL du programme Valeur confirmation après certaines instructions ABAP/4 ABAP/IV : type d'appel pour SUBMIT SYSTEM : Identification du système SAP Utilisation interne Durée d'exécution : ligne actuelle d'une table interne SESSION : code transaction actuel RUNTIME : nom du data set pour extraits de données Nombre actuel d'entrées dans table interne Heure locale par rapport à l'utilisateur Heure globale par rapport à UTC(GMT) PROGRAMME : Titre du programme ABAP/4 Ligne d'une table interne Utilisation interne Nombre max. d'entrées dans la table interne Nom de la table interne après accès Paramètre occurs pour tables internes Code indiquant si table interne dans bloc de pagination Utilisation interne Horodatage (date et heure) se référant à l'utilisateur Horodatage (date et heure) se référant à UTC (GMT) N° de la dernière ligne lue d'une table interne Décalage de la table interne dans le roll area RUNTIME : variable texte pour éléments de texte ABAP/4 RUNTIME : variable texte pour éléments de texte ABAP/4 RUNTIME : variable texte pour éléments de texte ABAP/4 RUNTIME : variable texte pour éléments de texte ABAP/4 RUNTIME : variable texte pour éléments de texte ABAP/4 RUNTIME : variable texte pour éléments de texte ABAP/4 RUNTIME : variable texte pour éléments de texte ABAP/4 RUNTIME : variable texte pour éléments de texte ABAP/4 RUNTIME : variable texte pour éléments de texte ABAP/4 RUNTIME : variable texte pour éléments de texte ABAP/4 Décalage horaire par rapport au temps GMT (en secondes) INTERACT.: Saisie fonction dans code OK CONSTANT : soulignement ( ...) SESSION : Nom de l'utilisateur de la session SAP SYSTEME: Heure CONSTANT : barre verticale T001 : devise société après lecture du segment B Numéro de ligne de la fenêtre active
Page 12 sur 181
Zones système
SY-WINCO SY-WINDI SY-WINRO SY-WINSL SY-WINX1 SY-WINX2 SY-WINY1 SY-WINY2 SY-WTITL SY-XCODE SY-XFORM SY-XPROG SY-ZONLO
Cours ABAP.doc
Position curseur dans fenêtre(colonne) Index de la ligne de la fenêtre active Position curseur dans la fenêtre(ligne) INTERACT.: ligne de la fenêtre sélectionnée Coordonnées de la fenêtre (colonne de gauche) Coordonnées de la fenêtre (colonne de droite) Coordonnées de la fenêtre (ligne de gauche) Coordonnées de la fenêtre (ligne de droite) Indicateur pour intitulé pages standard Code OK étendu Utilisation interne (form SY-STEM-EXIT) Utilisation interne (programme SY-STEM-EXIT) Fuseau horaire de l'utilisateur
Page 13 sur 181
Types de données
TYPES DE DONNEES Types de données ABAP/4, attributs et édition.
Type de Données P I F N C D T X
Type de Données P I F N C D T X
Signification Nombre packé Entier Virgule flottante Texte numérique Texte Date (AAAAMMJJ) Heure (HHMMSS) hexadécimal
Valeur initiale 0 0 0.000… 00…0 blanc 00000000 000000 X‟00‟
Longueur d’édition Standard
Edition
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
Cours ABAP.doc
Longueur Standard 8 * * 1 1 8 6 1
Longueur autorisée 1-16 1-max 1-max 8 6 1-max
Exemple 579, -713, „2.17‟ 917, -882 ‟25.873‟, „1.213E15', „17E-6‟ „778‟, „87931‟ „AXZ‟, „B123‟, „ABCD‟ „19960221‟ „105743‟ „0FFF‟
Page 14 sur 181
Déclaration
DECLARATION Déclaration des données. DATA :
COUNTER NAME1(25) START_DATE FIRST_LINE SUM1(5)
TYPE I, VALUE „SAP‟, TYPE D, TYPE I VALUE 1, 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.
Cours ABAP.doc
Page 15 sur 181
Déclaration
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.
Cours ABAP.doc
Page 16 sur 181
Opérations sur les variables
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 AMOUNT SUM RESULT NUMBER(2) ROOT
COMPUTE :
COUNTER RESULT
SUM RESULT ROOT
= = =
TYPE I, TYPE P TYPE P, TYPE P, TYPE C TYPE F.
VALUE „1000‟, VALUE „99‟,
= COUNTER + 2 , = AMOUNT * COUNTER.
RESULT + NUMBER – COUNTER. COUNTER * ( AMOUNT + NUMBER ). 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.
Cours ABAP.doc
Page 17 sur 181
Opérations sur les variables 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), „**‟, START(4).
Prend les 2 chiffres après les 8 premiers et écrit les chiffres.
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‟. WRITE: /
Copie 9999 après les 6 premiers.
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.
Cours ABAP.doc
Page 18 sur 181
Opérations sur les variables
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. EQ NE GT GE LT LE
Opérateur = > >= < < => =<
BETWEEN f1 AND f2 IS INITIAL
Cours ABAP.doc
Signification
Egal Différent Supérieur Supérieur ou égal Inférieur Inférieur ou égal
Plage Valeur initiale
Page 19 sur 181
Opérateurs conditionnels
OPERATEURS CONDITIONNELS Instruction IF. IF .
IF . INSTRUCTIONS
INSTRUCTIONS ENDIF. Si l‟expression logique est vraie le traitement de IF s‟effectue sinon le traitement du programme continu après ENDIF
IF . INSTRUCTIONS
ELSE. INSTRUCTIONS
ELSEIF . INSTRUCTIONS
ENDIF.
ELSEIF . INSTRUCTIONS
Si l‟expression logique est fausse les instructions contenues dans ELSE sont exécutées
ELSE. INSTRUCTIONS ENDIF. ELSEIF permet de mettre autant de condition que l‟on veut
Instruction CASE. CASE . WHEN . INSTRUCTIONS WHEN . INSTRUCTIONS WHEN OTHERS. INSTRUCTIONS ENDCASE.
Cours ABAP.doc
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.
Page 20 sur 181
Opérateurs conditionnels
Boucle DO. DO TIMES. Instructions ENDDO.
Vous pouvez indiquez le nombre de passages de boucles dans une constante ou une zone. Le paramètre 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.
Boucle WHILE : WHILE . Instructions
Tant que l‟expression logique est vrai les instructions sont exécutées.
ENDWHILE.
Instruction CHECK. CHECK . 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 . 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.
Cours ABAP.doc
Page 21 sur 181
Les tables
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 faire une sauvegarde suite à chaque ligne entrée.
pour afficher les données stockées dans la table. Il faut
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.
Transfère les valeurs de SFLIGHT dans TABINT. Le transfert n‟est possible que si les noms de zones sont identiques.
Il est possible aussi de faire : SELECT * FROM SFLIGHT … MOVE SFLIGHT TO TABINT. ENDSELECT.
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.
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.
Cours ABAP.doc
Page 22 sur 181
Les tables
APPEND. SELECT * FROM SFLIGHT … MOVE SFLIGHT TO TABINT. APPEND TABINT. ENDSELECT.
APPEND ajoute le contenu de la ligne d‟en-tête à la fin de la table interne.
SELECT * FROM SFLIGHT … MOVE SFLIGHT TO TABINT. APPEND TABINT SORTED BY CARRID. ENDSELECT.
APPEND SORTED BY permet de générer des listes rangées en ordre décroissant.
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.
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.
SELECT * FROM INTO TABLE 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.
Tri la table suivant la zone PRICE suivant l‟ordre croissant et la zone FLDATE suivant l‟ordre décroissant.
Le paramètre ASCENDING est facultatif. On peut effectuer un tri sur toute une table en écrivant : SORT tabint.
Cours ABAP.doc
Page 23 sur 181
Les tables
Traitement des tables internes. LOOP AT … ENDLOOP. LOOP AT .
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 ENDLOOP.
LOOP AT WHERE … ENDLOOP. LOOP AT WHERE . 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.
Instructions ENDLOOP.
LOOP AT 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 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 INDEX . 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.
Cours ABAP.doc
Page 24 sur 181
Les tables
Modification des tables. INSERT INDEX . 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 IDEX . 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 INDEX .
L‟instruction supprime l‟entrée de la table i.
DELETE WHERE …
Dans ce cas l‟instruction DELETE ne s‟applique exclusivement aux entrée de la table qui satisfont la condition.
DELETE FROM TO .
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 FROM . UPDATE . UPDATE SET … WHERE . UPDATE FROM TABLE . 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 écrase la ligne de la base de données qui a la même clé primaire que . Variante 2 : Aucune chaîne de zones n‟est indiquée. L‟UPDATE est effectué sur le contenu courant de la zone de la table de travail . Variante 3 : Dans la liste … 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 écrasent les lignes de la base de données avec la même clé primaire.
Cours ABAP.doc
Page 25 sur 181
Les tables
Suppression des tables. CLEAR . L‟instruction CLEAR initialise toutes les zones de la ligne d‟en-tête selon leur type.
REFRESH . L‟instruction REFRESH 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 . L‟instruction FREE 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)
Cours ABAP.doc
Page 26 sur 181
Instructions SELECT
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. ENDSELECT.
Affiche les champs de la table.
Le paramètre WHERE permet de limiter en lecture le nombre d‟entrées de la table.
Fin de la boucle SELECT.
Instruction select 2. TABLES : SBOOK. SELECT * FROM SBOOK WHERE CARRID = „LH‟ . . ENSELECT. IF SY-SUBRC NE 0.
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.
. ENDIF.
Fin de la boucle IF.
SELECT * FROM INTO TABLE FOR ALL ENTRIES IN . 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 ).
Cours ABAP.doc
Page 27 sur 181
Les bases de données logiques
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. Traitement SPFLI GET SFLIGHT. 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 .
GET SBOOK FIELDS BOOKID CUSTOMID.
Cours ABAP.doc
Page 28 sur 181
Les bases de données logiques
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. *--------------------------------------------------------------------*
Cours ABAP.doc
Page 29 sur 181
Les bases de données logiques
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' *
Cours ABAP.doc
Page 30 sur 181
Les bases de données logiques
*------------------------------------------------------------------------------------------------------------- * * 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.
Cours ABAP.doc
Page 31 sur 181
Les bases de données logiques
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 DATA
L_WHERE TYPE RSDS_WHERE. 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.
Cours ABAP.doc
Page 32 sur 181
Les bases de données logiques
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 *
Cours ABAP.doc
Page 33 sur 181
Les bases de données logiques
*-------------------------------------------------------------------------------------------------------------* * 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.
Cours ABAP.doc
Page 34 sur 181
Les bases de données logiques
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.
Cours ABAP.doc
*
Page 35 sur 181
Les bases de données logiques
Les textes de sélection concernant F1S:
Les matchcodes concernant la BDL F1S sont:
Cours ABAP.doc
Page 36 sur 181
Les bases de données logiques
Un exemple de programme ZHENBDL1 rappelant la BDL F1S: Attributs:
Zones à renseigner une fois le programme sauvegardé.
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.
Cours ABAP.doc
Page 37 sur 181
Les bases de données logiques
Le résultat à l'écran:
Cours ABAP.doc
Page 38 sur 181
Les bases de données logiques
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.
Cours ABAP.doc
Page 39 sur 181
Les bases de données logiques
Jeu d'essai:
Traitement sbook
Cours ABAP.doc
Page 40 sur 181
Ecran de sélection
ECRAN DE SELECTION SELECT-OPTION SELECT OPTION FOR DEFAULT DEFAULT TO MEMORY 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 .
Permet de déclarer une zone de saisie. L‟utilisation de DEFAULT, LOWER, CASE, OBLIGATORY est possible.
PARAMETERS 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 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".
Cours ABAP.doc
Page 41 sur 181
Ecran de sélection
SELECTION-SCREEN. SELECTION-SCREEN BEGIN OF BLOCK SELECTION-SCREEN BEGIN OF BLOCK WITH FRAME TITLE SELECTION-SCREEN END OF BLOCK
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 POSITION 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 . CALL SCREEN … ON VALUE-REQUEST FOR. 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).
Cours ABAP.doc
Page 42 sur 181
Ecran de sélection
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 . ON RADIOBUTTON GROUP . ON BLOCK .
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
Cours ABAP.doc
Page 43 sur 181
Création d'écrans de sélections
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'.
Cours ABAP.doc
Page 44 sur 181
Création d'écrans de sélections
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.
Cours ABAP.doc
Page 45 sur 181
Création d'écrans de sélections
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.
Cours ABAP.doc
Page 46 sur 181
Création d'écrans de sélections
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.
Cours ABAP.doc
*
Page 47 sur 181
Création d'écrans de sélections
Jeux d'essais: Pour F1:
Pour F4:
Cours ABAP.doc
Page 48 sur 181
Création d'écrans de sélections
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 sousprogrammes 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.
Cours ABAP.doc
Page 49 sur 181
Les évènements AT sous ABAP/4
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.
Cours ABAP.doc
Page 50 sur 181
Les évènements AT sous ABAP/4
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.
Cours ABAP.doc
Page 51 sur 181
Les évènements AT sous ABAP/4
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.
Cours ABAP.doc
Page 52 sur 181
Les évènements AT sous ABAP/4
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 SELECTIONSCREEN 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éessorties 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.
Cours ABAP.doc
Page 53 sur 181
Les évènements AT sous ABAP/4
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 SELECTIONSCREEN 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".
Cours ABAP.doc
Page 54 sur 181
Les évènements AT sous ABAP/4
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éessorties 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.
Cours ABAP.doc
Page 55 sur 181
Les évènements AT sous ABAP/4
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.
Cours ABAP.doc
Page 56 sur 181
Les évènements AT sous ABAP/4
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.
Cours ABAP.doc
Page 57 sur 181
Les évènements AT sous ABAP/4
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 Addition:
AT fg.
... 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.
Cours ABAP.doc
Page 58 sur 181
Les évènements AT sous ABAP/4
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.
Cours ABAP.doc
Page 59 sur 181
Les évènements AT sous ABAP/4
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.
Cours ABAP.doc
Page 60 sur 181
Listes
LISTES Lecture des listes READ LINE READ LINE OF CURRENT PAGE. OF PAGE
READCURRENT LINE READ CURRENT LINE FIELD VALUE INTO INTO … …
INDEX FIELD VALUE INTO INTO … …
Modification des listes Modify line MODIFY LINE OF CURRENT PAGE OF PAGE INDEX FIELD VALUE F1 FROM G1 F2 FROM G2 … FIELD FORMAT F1 F2 … LINE FORMAT …
Cours ABAP.doc
Modify current line MODIFY CURRENT LINE FIELD VALUE F1 FROM G1 F2 FROM G2 … FIELD FORMAT F1 F2 … LINE FORMAT …
Page 61 sur 181
Fenêtres
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.
Cours ABAP.doc
Page 62 sur 181
L'Object Browser
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.
Créer un nouvel objet
Cours ABAP.doc
Figure 2: la barre d'outils
Générer les objets du pool
Page 63 sur 181
L'Object Browser
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:
Cours ABAP.doc
Page 64 sur 181
L'Object Browser
(a)
(b)
(c)
(d)
(e) Figure 4: arborescence du pool
Cours ABAP.doc
Page 65 sur 181
L'Object Browser
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.
Cours ABAP.doc
Page 66 sur 181
L'Object Browser
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).
Cours ABAP.doc
Page 67 sur 181
L'Object Browser
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".
Codes fonction declarés pour la "navigation" (retour en arrière, quitter) dans le programme
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),
Cours ABAP.doc
Page 68 sur 181
L'Object Browser
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
Cours ABAP.doc
Figure 11: les attributs du STATUT GUI
Page 69 sur 181
L'Object Browser
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).
Cours ABAP.doc
Page 70 sur 181
L'Object Browser
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 EXITCOMMAND 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 16: la réservation
Cours ABAP.doc
Figure 15: la liste des correspondances
Figure 17: un utilisateur enregistré
Page 71 sur 181
L'Object Browser
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.
Cours ABAP.doc
Page 72 sur 181
L'Object Browser
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. * INCLUDE ZHFINI01. * INCLUDE ZHFINF01.
" PBO-Modules " PAI-Modules " FORM-Routines
* * *
INCLUDE ZHFINO01.
Cours ABAP.doc
Page 73 sur 181
L'Object Browser
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.
Cours ABAP.doc
Page 74 sur 181
L'Object Browser
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.
Cours ABAP.doc
Page 75 sur 181
L'Object Browser
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 * *&-----------------------------------------------------------------------------------------------------------------*
Cours ABAP.doc
Page 76 sur 181
L'Object Browser
* 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 * *&-----------------------------------------------------------------------------------------------------------------*
Cours ABAP.doc
Page 77 sur 181
L'Object Browser
AT LINE-SELECTION. PERFORM SOURIS. *&----------------------------------------------------------------------------------------------------------------- * *& Form SOURIS * *&----------------------------------------------------------------------------------------------------------------- * * text * *------------------------------------------------------------------------------------------------------------------- * * --> p1 text * * p1 text * * 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 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
DEVELOPPEMENT SE32 SE35 SE36 SE39 SE91 SE92
Eléments de texte Modules dialogue BD logiques Editeur écran part Messages Messages syslog
Cours ABAP.doc
AUTRES OUTILS Objets autorisation SU20 SU21 SCDO SE43 SE54 SE93
Zones Objets Docts modification Menus de domaines Gén. Dial. Gest Tab Transactions
Extensions / user exits. CMOD SMOD
ABAP/4 Query SQ01 SQ02 SQ03
Types objets gestion 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
Gestion projet Définition
Queries Domaines application Groupes utilisateurs Documentation
SE61
Documentation Test Workbench
SE30 SLIN SM21 ST22
Analyse durée exéc Contrôle étendu Journal système Analyse vidage mém.
Page 152 sur 181
Quelques transactions utiles à connaître
ADMINISTRATION
Moniteur
Jobs
Monitorage système
SM36 SM37
Définition de job Synthèse des jobs
SM04 SM50 SM51 SMGW
Synth. Utilisateurs Synthèse processus Serveur Monit passerelles
Groupes d'activités Utilisateur Profils Autorisation Utilisateur Internet Système information
Cours ABAP.doc
SARA SM01 SM02 SMLT USMM
Archivage Codes transactions Messages système Transport de langues Analyse système
Computing center jobs
Gestion utilisateurs PFCG SU01 SU02 SU03 SU05 SUIM
Administration
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
Page 153 sur 181
ANNEXE: les codes à barres
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.
Cours ABAP.doc
Page 154 sur 181
ANNEXE: les codes à barres
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 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 . 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.
Cours ABAP.doc
Page 155 sur 181
ANNEXE: les codes à barres
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 / SF . 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. 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.
Cours ABAP.doc
Page 156 sur 181
ANNEXE: les codes à barres
EXEMPLE
L‟exemple suivant montre le format de la sortie. Texte entré sous SAPscript : text … 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. 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. 2. 3.
Définissez l‟imprimante dans le système spool de SAP avec le type d‟appareil SAPWIN. Spécifiez ACCESS METHOD 8 dans la définition de l‟imprimante dans le système spool. 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
Cours ABAP.doc
Page 157 sur 181
ANNEXE: les codes à barres 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.
Cours ABAP.doc
Page 158 sur 181
ANNEXE: les codes à barres
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
Cours ABAP.doc
Page 159 sur 181
ANNEXE: les codes à barres 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, où 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, où 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.
Cours ABAP.doc
Page 160 sur 181
ANNEXE: BC410
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 >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.
Cours ABAP.doc
Page 161 sur 181
ANNEXE: BC410
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.
Cours ABAP.doc
Page 162 sur 181
ANNEXE: BC410
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. CHAIN. FIELD : screen field1, Screen field2, ‘’ ‘’ MODULE modul. ENDCHAIN. -
MODULE modul INPUT. ‘’ ‘’ MESSAGE E … . ENDMODULE.
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.
Cours ABAP.doc
Page 163 sur 181
ANNEXE: BC410
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 : MODULE OK-CODE INPUT. ‘’ ‘’ CALL SCREEN 101. STARTING AT 30 10 ENDING AT 60 20. ENDMODULE.
Dans MENU 101 : MODULE OK-CODE INPUT. ‘’ ‘’ SET SCREEN 0 . LEAVE SCREEN . ‘’ 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
Cours ABAP.doc
Page 164 sur 181
ANNEXE: BC410
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 . 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 : , , „‟ . 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 . 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 : , , „‟ . 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.
Cours ABAP.doc
Page 165 sur 181
ANNEXE: BC410
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.
Cours ABAP.doc
Page 166 sur 181
ANNEXE: BC410
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 asynchrone
Plusieurs ULT
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
Cours ABAP.doc
Page 167 sur 181
ANNEXE: BC410
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.
Cours ABAP.doc
Page 168 sur 181
ANNEXE: BC410
-
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 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.
Cours ABAP.doc
Page 169 sur 181
ANNEXE: BC410
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).
Cours ABAP.doc
Page 170 sur 181
ANNEXE: BC410
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_ et DEQUEUE_.
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.
Cours ABAP.doc
Page 171 sur 181
ANNEXE: BC410
Caractéristiques spéciales de ENQUEUE. -
le paramètre MODE_ 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_.
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, SCREENINPUT = 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).
Cours ABAP.doc
Page 172 sur 181
ANNEXE: BC410
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.
Cours ABAP.doc
Page 173 sur 181
ANNEXE: BC410
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 de structure CXTAB_CONTROL de l‟ABAP/4
Ecran de référence pour initialiser le Table Control
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 LINES TYPE i TOP_LINE TYPE i CURRENT_LINE TYPE i LEFT_COL TYPE i LINE_SEL_MODE TYPE i COL_SEL_MODE TYPE i LINE_SELECTOR V_SCROLL H_GRIP
Cours ABAP.doc
Nombre de colonnes fixes Nombre de lignes pour le défilement vertical 1e ligne dans le PBO suivant Ligne actuelle (dans LOOP … ENDLOOP) 1e colonne mobile affichée Sélection ligne (aucune : 0, unique : 1, multiple : 2) Sélection colonne (aucune : 0, unique : 1, multiple : 2) Code : Afficher sélection ligne Code : Défilement vertical Code : Ligne de grille horizontale
Page 174 sur 181
ANNEXE: BC410
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.
FIELD spfli_itab-mark MODULE modify_spfli_itab ON REQUEST. ENDLOOP.
MODULE modify_spfli_itab INPUT. LOOP AT spfli_itab MODIFY spfli_itab INDEX CONNEXIONS-CURRENT_LINE. ENDMODULE.
-
Dans la logique d‟exécution, on peut lire une table interne à l‟aide de l‟instruction LOOP. On peut entrer WITH CONTROL 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 CURRENT_LINE. Le système détermine à son tour CURRENT_LINE à partir de 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 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 -
Cours ABAP.doc
Page 175 sur 181
ANNEXE: BC410 Option 2 : Lecture de la table interne dans le pool de modules et des zones du Dictionary à l‟écran
Screen Painter
PROCESS BEFORE OUTPUT.
MODULE sflight_itab_read OUTPUT. READ TABLE sflight_itab. INDEX FLIGHTS-CURRENT_LINE. IF SY-SUBRC = 0. MOVE-CORRESPONDING sflight-itab to flight. ELSE. EXIT FROM STEP-LOOP. ENDIF. ENDMODULE LOOP WITH CONTROL FLIGHTS.
MODULE sflight_itab_read. ENDLOOP. PROCESS AFTER INPUT. FIELD sflight-price ON REQUEST. ENDLOOP.
MODULE modify_spfli_itab INPUT. LOOP WITH CONTROL FLIGHTS. MODIFY spfli_itab INDEX CONNEXIONS-CURRENT_LINE. MODULE modify_sflight_itab ENDMODULE.
-
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 SELECTED et SCREEN-NAME permettent d‟effectuer très facilement le tri de l‟affichage par colonne sélectionnée.
Cours ABAP.doc
Page 176 sur 181
ANNEXE: BC410
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 USERCOMMAND. 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 .
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 LISTPROCESSING 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.
Cours ABAP.doc
Page 177 sur 181
ANNEXE: BC410
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 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 HELPREQUEST et PROCESS ON VALUE-REQUEST.
Cours ABAP.doc
Page 178 sur 181
ANNEXE: BC410
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.
Cours ABAP.doc
Page 179 sur 181
Liste des SAPistes
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.
Cours ABAP.doc
Page 180 sur 181
Mise à jour
Cours ABAP.doc
Page 181 sur 181
Mise à jour
Dictionnaire des expressions informatiques ABCDEFGHIJKLMNOPQRSTUVWXYZ
A ALE
:
Alter Table AM
: :
ASCII
:
Advanced Business Application Programming / 4th generation 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. 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 Catalogue de la base de données. (Fixed Assets Management) Module de gestion des immobilisations (American Standard Code for Information Interchange)
: : : :
Transfert d'information d'un ancien système vers SAP Base de données (Batch Data Communication) Batch input Base de données logique
CAO CATT
: :
CBN Chaîne de zones CMOD CO CPI
: : : : :
Conception assistée par ordinateur Outil de test assisté par ordinateur, permet d'assembler et d'automatiser les processus de gestion dans les procédures de test. Calcul des besoins nets Table interne conçue par le client par le biais de programmes Permet la gestion des modifications des extensions (Controlling) Module de contrôle de gestion Caractères par pouce, espacement des caractères
ABAP/4 : Activation de masse:
B Batch Input BD BDC BDL
C
Mise à jour
CPI-C
:
CRS
:
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 Responsable du Service Clientèle.
D Data Modeler DD DDIC Déboguer
: : : :
Dictionnaire
:
DLL Dynpro
: :
Pour créer des éléments de données (cf. 15-6 BC400)
Tester un programme (par exemple à l'aide du Débogueur ABAP/4, transaction /h) Il regroupe toutes les tables SAP ou celles créées de toutes pièces (mais pas les tables internes) Dynamic Link Library Utilisé dans l'Object Browser, un écran avec une gestion par modules PAI et PBO avant et après l'affichage
E EDI
:
Eléments de texte : EPC : Etape de Dialogue :
Echange de données informatisées, mécanisme d'échange de données commerciales entre différents systèmes (SAPscript) C'est dans ce menu que l'on programme ce que l'on affichera dans une fenêtre Chaîne de processus commandée par événement 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
F Fenêtre
:
Fenêtres de page
:
FI
:
(SAPscript) Contient toutes les fenêtres nécessaire à l'impression d'un état (SAPscript) C'est dans ce menu que l'on place les différentes fenêtres dans une page (Financial Accounting) Module de comptabilité financière
Mise à jour
Fichier séquentiel :
FLCS FM Formulaire
: : :
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 Ligne directe de téléassistance Module fonction Contient toutes les données relatives à l'impression d'un état
:
(Graphical user interface) Interface utilisateur graphique
:
(Human Resources) Module de gestion du personnel
G GUI
H HR
I IC ID IS ITF
J K
: : : :
Identification (Industry Solutions) Module solutions métiers (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
Mise à jour
L LIS LPI LUW
: : :
Système d'information logistique Ligne par pouce, interlignage Unités logiques de travail
: :
Mise à jour 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) (Materials Management) Module des achats et stocks Permet de revenir sur un écran et d'afficher certaine données différemment (en grisées par exemple) voir PDP Calcul des besoins, composante du module PP
M MAJ Menu Painter
MM : Modification d'écran: MPS MRP
: :
N O Object browser
:
Objet agrégé : Objet d'exécution : OCS OCR
: :
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, …) C'est un objet formé à partir de plusieurs tables système Ensemble d'informations sur une table, mises en mémoire tampon pour faciliter l'accès rapide par un programme Online Correction Services (Optical Character Recognition) Reconnaissance optique des caractères
Mise à jour
O.F. OLE
: :
Open Interfaces
:
OSS OTF
: :
Ordre de fabrication Object Link Embedding, liaison et incorporation d'objets permettant d'intégrer des applications PC au système R/3 Interfaces ouvertes, interfaces entre des applications spécifiques telles que le CAO, l'archivage optique et les lecteurs de codes à barres Online Service System Output Text Format
P 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
Q QM
:
(Quality Management) Module de management de qualité
Mise à jour
R Report : Reporting Interactif: Repositoring RFC
: :
Roll Area RTF
: :
Programme créé sous l'éditeur ABAP/4 Utilisation de listes de base et secondaires, appel de fenêtres et/ou d'écrans suivants Affichage lien arborescence tables 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 Zone mémoire (appel programme ou transaction) (Rich Text Format)
S SAP SAPscript Screen Painter
: : :
SD : Serveur de présentation: SFC : SGBD : SIA : SIGM : SIMQ
:
SLCS SMOD
: :
SPA/GPA SPAU SPDD SQL SSCR
: : : : :
System Application Product in data processing Permet l'édition d'états 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) (Sales & Distribution) Module de l'administration des ventes Frontal, terminal, le PC en somme Pilotage de l'atelier, composante du module PP Système de Gestion de Base de Données Système d'information des achats, composante du module MM Système d'information de gestion de la maintenance, composante du module PM Système d'information de management de la qualité, composante du module QM Support client niveau 2 Permet de programmer des extensions SAP avec des Exits de programme, des Exits de menu et des Exits d'écran Zone mémoire Traitement après mise à niveau Structured query language (SAP Software Changement Record) enregistrement d'un changement logiciel SAP
Mise à jour
T Tables transparentes: TCP/IP : Text Module :
Transaction
:
Tables du système de base de données (TRANSP) Protocole de communication réseau Groupement d'informations (essentiellement des lignes de texte) qui peut être utilisé dans plusieurs formulaire mais aussi dans d'autres Text Module Raccourcis d'appel d'un programme écrit dans la zone d'édition OKCODE
U UPDATE
:
Mise à jour
WBO WF WM
: : :
Workbench
:
workbench Organiser Module Workflow Sous module du module MM permet de gérer l'emplacement du produit dans le magasin. Banc de travail ABAP/4 qui donne accès aux différentes options (éditeur, biblio de fonction, object browser, …)
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
Dynpro 2 Liste ___________________ ___________________ ___________________ ___________________ ___________________ ___________________ ___________________
LIST E
Statut 2 : Type liste
PAI : Module USER_COMMAND. CASE SY-UCOMM. WHEN 'LIST'. LEAVE TO SCREEN 2
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.
Mise à jour
CHAIN. FIELD : zone1, zone2. Module VERIF. ENDCHAIN.
Mise à jour
Batch Input: OPEN DATASET Ouvre le fichier. TRANSFER TO Copie le contenu de la table interne dans le fichier. READ DATASET TO
Lit le contenu du fichier et le copie dans la table interne, cela se fait ligne par ligne. CLOSE DATASET Ferme le fichier. Deux autres fonctions que l'on peut utiliser : WS_DOWNLOAD WS_UPLOAD EXPORTING : FILENAME : 'C:\.TXT' TABLES : DATA_TAB : TAB.
FICHIER TXT __________________ __________________ __________________ __________________ __________________ __________________ __________________ __
Table WS_UPLOAD
Interne
ARTICLE: TAB-ZONE1(10) type C PRIX : TAB-ZONE2(10)
SAP TAB
DEVISE : TAB-ZONE3(10)
BLOC NOTE ANCIEN SYSTEME Fiche articl e
Fiche articl e
SAP FICHIER SEQUENTIE LS
BATCH INPUT
Fiche articl e
Fiche articl e
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: FENETRE EN-TETE FENETRE ADRESSE
TOP
FENETRE MAIN BODY
FENETRE PIED DE PAGE
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 BOTTOM
WINDOW = 'MAIN' END_FORM Ferme CLOSE_FORM Ferme
Valable seulement pour la fenêtre MAIN
Mise à jour
Commandes utiles: /: P1 P2 B1 /:
PROTECT &CITYFROM& &CITYTO& &DEPTIME& &ARRTIME& &DATE& ENDPROTECT
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
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
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 simultané Lancement Clôture technique Clôture
Etats , système d'informations. Standard, loi Créer état report WRITE
Mise à jour
F key
German
English Spanish Italian BARRE DE MENU
French
Bearbeiten (B) Springen (S) Zusätze (Z) Umfeld (U)
Edit (E) Goto (G) Extras* Environment (N)
Tratar (T) Pasar a (P) Detalles (D) Entorno (E)
Elaborare (E) Passaggio (P) Opzioni (O) Ambiente (M)
Traiter (T) Saut (S) Détail (D) Environnement (E)
Einstellungen (E) Hilfsmittel (M) Pflegen (P) Werkzeuge (W) Sicht (I) System (Y) Hilfe (H)
Settings (S) Utilities (U) Maintain (M) Tools (T) View (V) System (Y) Help (H)
Opciones (O) Utilidades (U) Actualizar (C) Herramientas (H) Vista (V) Sistema (S) Ayuda (A)
Impostazioni (I) Utilities (U) Aggiornare (A) Tools (T) View (V) Sistema (S) Help (H)
Options (P) Utilitaires (U) Gérer (G) Outils (O) Vue (V) Système (Y) Aide (A)
Holen (H) (Syn. Öffnen) Anderes Objekt (A) Anlegen (L) Ändern (Ä) Anzeigen Vorlage kopieren
Open (O)
Fetch (F)
Accéder (A) Autre (U)
Create (E) Change (C) Display (D) Copy from (F)
Crear (C) Modificar (M) Visualizar (V) Copiar de (P)
Sichern (I) Buchen (U) Merken (M) Generieren (G) Drucken (D) Löschen (Ö) Beenden (B)
Save (S) Post (T) Hold (L) Generate (G) Print (P) Delete (D) Exit (X)
Grabar (G) Contabilizar (Z) Retener (R) Generar (G) Imprimir (I) Borrar (B) Finalizar (L)
Altro (A) Creare (C) Modificare (M) Visualizzare (V) Copiare modello (O) Salvare (S) Registrare (R) Memorizzare (E) Generare (G) Stampare (P) Cancellare (N) Terminare (T)
ändern
Change (H)
Modificar (F)
Modificare (F)
Modifier (D)
MENU OBJET
F11 F11 F16
F14 F15
Traer (T) (sin. Abrir) Other (R) Otro (O)
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)
MENU TRAITEMENT Alle markieren (M) Block markieren (B) Alle Mark. löschen (K) Neue Einträge (G)
Select all (S)
Marcar todo (M)
Select block (B)
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)
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 bloque (Q) Marcare blocco (L) Desmarcar todo Cancellare (R) marcature (U) Nuevas entradas Nuovi inserimenti (N) (V) Anexar (A) Aggiungere (A) Seleccionar (S) Selezionare (Z) Cortar (C) Cut (C) Pegar (G) Includere (D) Insertar (I) Inserire (I) Copiar (P) Copiare (O) Desplazar (Z) Spostare (P) Intercambiar (T) Scambiare (B) Reclasificar (L) Riclassificare (F) Buscar (U) Cercare (E) Borrar línea (B) Cancellare riga (G)
Deselect all (D) New lines (N)
Marcare tutto(M)
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)
(Ecran de) synthèse (Y) En-tête (E) Poste suivant (S)
MENU PASSER Übersicht(sbild) (Ü) Kopf(bild) (K) Nächste Position (N) Vorige Position (V)
Overview (O)
Resumen (R)
Riepilogo (R)
Header (H) Next item (N) siguiente Previous item (P)
Cabecera (C) Posición (S)
Testata (T) Posizione successiva (S) Posizione precedente (P)
Andere Position (A) Zurück (Z)
Other item (I)
Otra posición (O)
Back (B)
Back (B)
Posición (A) anterior
Altra posizione (A) Indietro (I)
Poste précédent (P) Autre poste (A) Retour (R)
MENU FENETRE DE DIALOGUE OK, Enter OK, Enter F12
Weiter (W)
Continue (C)
Continuar (C)
Continuare (C)
Suite (S)
Ausführen (F) OK (O)
Execute (X) OK (O)
Ejecutar (E) OK (O)
Eseguire (E) OK (O)
Exécuter (E) OK (O)
Abbrechen (A)
Cancel (A)
Cancelar (N)
Interrompere (I)
Interrompre (I)
Schließen (S)
Close (L)
Cerrar (R)
Chiudere (U)
Fermer (F)
View more...
Comments