Programmation ABAP IV reports Reporting ABAP IV Objectifs
Programmation ABAP IV : reports
Reporting ABAP IV Objectifs l Vous serez capable : – – – de créer des listes simples d ’édition de données de créer des listes complexes : reports interactifs de créer des programmes d ’extractions de données
Reporting ABAP IV Sommaire l l l l Chapitre 1 : Généralités ABAP IV : syntaxe, gestion événementielle, structure de programme, éditeur ABAP Chapitre 2 : Déclarations des Données Chapitre 3 : Instructions de base ABAP Chapitre 4 : Traitement des tables SAP : l ’instruction SELECT Chapitre 5 : Programmation structurée : modularité, form, module fonction, routine Chapitre 6 : Gestion des tables internes Chapitre 7 : Gestion des fichiers Chapitre 8 : Concepts de programmation avancée
Chapitre 1 Reporting ABAP IV Généralités ABAP IV
Généralités ABAP IV Syntaxe Le langage de programmation ABAP IV est constitué des éléments de syntaxe suivants Phrases l Mot-clés l Commentaires l
Syntaxe : Phrases Chaque phrase commence par un mot-clé et se termine par une ponctuation. l Les différents mots de la phrase doivent être séparés par un espace. l REPORT ZZZFOR 01. DATA: VAR 01, VAR 02. WRITE ‘Exemple’.
Syntaxe : Mot-clés Un mot-clé détermine la signification de la phrase entière. Il existe 4 types de mot-clés : déclaratifs: DATA, TABLES. . . l opérationnels: MOVE, WRITE … l de contrôle: IF, WHILE, CASE. . . l événementiels: GET, AT USER-COMMAND. . . l
Syntaxe : Commentaires Ligne entière: astérisque en début de ligne l Partie restante d’une ligne: guillemet devant le commentaire l REPORT ZZZFOR 01. * Commentaire général WRITE 'Premier programme '. " commentaire de ligne
Généralités ABAP IV Gestion événementielle L’exécution d’un programme ABAP IV peut être contrôlée par des événements temporels. l Ces événements sont déclenchés soit par d’autres programmes, soit par l’intervention de l’utilisateur, soit par le système SAP. l La gestion de ces événements se fait grâce aux mot-clés événementiels, auxquels on peut associer un bloc de traitement. l Attention: un programme ABAP IV ne s’exécute pas nécessairement dans l’ordre où il est écrit l
Généralités ABAP IV Gestion événementielle Programme ABAP IV Mot-clé événementiel Contrôle externe Bloc de traitement Contrôle interne Mot-clé événementiel Bloc de traitement Contrôle interne Contrôle externe
Généralités ABAP IV : AIDE l Une aide sur le langage ABAP est disponible à tout moment : – dans l ’éditeur par la commande Help <mot-clé> – dans le programme : se positionner sur un motclé et faire F 1 – dans l’aide on-line – dans la documentation des mots-clés l Pas de panique !! : l’aide ABAP est très complète et donne l ’exhaustivité des options des mots-clés.
Généralités ABAP IV : Structure d’un Report ABAP IV l Un programme ABAP de type report est composé au minimum de 4 parties : – Identification de l ’ABAP – Déclaration des données – Lecture et sélection des données – Traitement des données: éditions, mises à jour….
Identification de l ’ABAP l Le nom d ’un ABAP spécifique commence toujours par Z ou par Y et codé sur 40 caractères l Mot-Clé : REPORT <nom programme> l Options : LINE-SIZE, LINE-COUNT NO STANDARD PAGE HEADING…. : définir la mise en page de l ’édition (taille colonnes, nombre de lignes) l ex : REPORT ZFREFIC 00 LINE-SIZE 255.
Editeur ABAP l Pour créer un ABAP : il faut indiquer : – – – le nom de l ’abap le libellé de l ’abap le type de programme le statut de programme la classe de développement éventuellement • • • l ’application fonctionnelle associée la base de données logique le groupe d ’autorisation
Commandes de l ’éditeur ABAP l 3 présentations du mode éditeur (‘ Options : Editeur ’) – – – l mode PC avec numérotation des lignes mode PC sans numérotation des lignes mode Editeur on-line 2 niveaux de commandes : – – sur la ligne de commande : commandes globales sur les numérotations de ligne : commandes au niveau ligne
Commandes de l ’éditeur Abap l Commandes w fonctions d ’édition w sauvegarder w contrôler w générer w exécuter
Chapitre 2 Reporting ABAP IV Déclarations de données
Déclaration de données l Données à déclarer dans le programme – DATA : déclaration des données internes au programme. C ’est l ’ensemble de toutes les variables, structures de travail … valable pour un programme Abap. – TABLES : déclaration des données externes au programme. C ’est l ’ensemble des tables, vues et structures qui sont déclarées dans le dictionnaire de données SAP.
Déclaration de données l Données disponibles à tout moment dans le programme sans besoin de déclaration : – – – Les éléments de texte du programme ABAP Données systèmes: la structure SY (ou SYST) : l ’ensemble des données système SAP disponibles au moment de l’exécution du programme. Les messages d’erreur et d ’information standard SAP
Déclaration de données : Données internes l DATA ZONE 1(10) TYPE C VALUE ‘TEST’. Type Lg déf. Val. init. Cadrage C: caractère 1 Space gauche D: date (YYYYMMDD) 8 ‘ 0000’ gauche I: nombre entier 4 0 droit N: texte numérique 1 ‘ 0. . 00’ droit P: nombre packé 8 0 droit F: nombre virgule flottante 8 0 droit T: heure (HHMMSS) 6 0 gauche X: hexadécimal 1 X’ 00’ gauche
Déclaration de données : Données internes l DATA CLIENT LIKE KNA 1 -KUNNR. permet de définir une variable ayant les mêmes caractéristiques techniques (longueur, type) que le champ KUNNR de la table base de donnée KNA 1. l DATA NUMBER TYPE P DECIMALS 2. définit le nombre de chiffres après la virgule pour un champ de type P uniquement.
Déclaration de données : Données internes l Structure: DATA: BEGIN OF CLIENT, NOM(20) TYPE C, RUE(20) TYPE C, NUMERO TYPE P, CP(5) TYPE N, VILLE(20) TYPE C, END OF CLIENT. Une structure est un groupe de champs. Chacun des champs peut être adressé par son nom préfixé du nom de la structure (CLIENT-NOM).
Déclaration de données : Données externes l Les données externes existent indépendamment du programme. l Elles doivent être définies sous forme de table ou structure dans le dictionnaire de données SAP. l Pour se référencer à ces données dans un programme: mot-clé TABLES: KNA 1, MARA.
Déclaration de données : Eléments de texte l Chaque ABAP a ses propres textes : – – – textes d ’entête de liste et colonnes textes des paramètres de sélection textes numérotés : tout libellé, chaîne de caractère doit être déclaré dans les textes numérotés de l ’abap et ensuite on peut les utiliser tels quels dans l ’abap. TEXT-<nnn>. • Ex : WRITE TEXT-100.
Déclaration de données : Données système Ces données sont utilisables dans chaque ABAP IV sans avoir besoin de les déclarer. l SPACE: constante de type C, longueur 1, initialisée à blanc. l Les données système: préfixées par SY. SY-SUBRC SY-UNAME SY-DATUM SY-UZEIT … code retour (zéro, si un ordre a été réalisé avec succès) nom de l’utilisateur date courante heure courante
Déclaration des données : Points à retenir l TABLES : déclaration des tables et structures du dictionnaire de données SAP l DATA : déclaration des données propres au programme : variables de travail, structures de travail l la structure SYST : ensemble des données système SAP l les textes numérotés d ’un ABAP
Chapître 3 Reporting ABAP IV Instructions de base
Instructions de base ABAP IV Edition de données l Affectation de zones l Opérations sur des chaînes de caractères l Opérations arithmétiques l Traitements conditionnels l Traitements de boucles l
Instructions de Base Edition de données l WRITE <nom_zone>. Affiche le contenu du champ <nom_zone> à l’écran. Le format d’édition dépend du type du champ. type C D I N P lg édition lg champ 8 11 lg champ 2 * lg champ(+1) Justification gauche droit
Instructions de Base Edition des données l WRITE AT /<pos>(<lg>) <nom_zone>. édite le champ <nom_zone> sur une nouvelle ligne (/) en position <pos> sur une longueur <lg>. Si les spécification de position et de longueur ne sont pas des variables, on peut omettre le mot-clé AT. WRITE AT /10(15) CLIENT-NOM. Ou WRITE /10(15) CLIENT-NOM La zone CLIENT-NOM sera éditée sur 15 caractères à partir de la 10ème colonne.
Instructions de Base Edition des données l Options de mise en forme : WRITE <nom_zone> <options>. LEFT-JUSTIFIED CENTERED RIGHT-JUSTIFIED UNDER <g> NO-GAP Cadrage à gauche. Centrage. Cadrage à droite. Alignement sur le champ <g> d'une ligne précédente. Suppression des colonnes de séparations. NO-ZERO Suppression des zéros initiaux (type N, P). DECIMALS <d> décimales après la virgule. USING EDIT MASK <m> utilisation d ’un masque d ’édition spécifique . . .
Instructions de Base Edition des données l Options de couleur : WRITE <nom_zone> COLOR <n>. 1 2 3 4 5 6 7 ou ou COL_HEADING COL_NORMAL COL_TOTAL COL_KEY COL_POSITIVE COL_NEGATIVE COL_GROUP bleu gris clair jaune bleu vert rouge violet
Instructions de base Affectation de zones l Réinitialisation d’une zone : CLEAR <f 1>. La zone est réinitialisée selon son type. l Affectation de zones: MOVE <f 1> TO <f 2>. Si <f 1> et <f 2> sont de types différents, le contenu de <f 1> est converti selon le type de <f 2>. Autre forme: <f 2> = <f 1>.
Instructions de base Affectation de zones l MOVE: Exemples de conversion; DATA: ZONE 1(4) ZONE 2(2) ZONE 3(6) ZONE 4(5) TYPE C, TYPE N, TYPE P MOVE ZONE 1 TO ZONE 2. MOVE ZONE 1 TO ZONE 3. MOVE ZONE 4 TO ZONE 3. VALUE ‘ 1234’, VALUE ‘ 123456789’. ZONE 2 = 12 ZONE 3 = 001234 ZONEB = 456789
Instructions de base Affectation de zones l Affectation de zones: WRITE <f 1> TO <f 2>. La zone réceptrice <F 2> doit TOUJOURS être de type caractère. Le WRITE TO permet d ’effectuer automatiquement les opérations de conversion du format interne (de stockage) des données au format externe (d ’affichage) des données Ex : DATA : W_DATE LIKE SY-DATUM VALUE ‘ 19990726 ’, W_CHAINE(10) TYPE C WRITE W_DATE TO W_CHAINE va contenir la valeur ‘ 26. 07. 1999 ’ MOVE W_DATE to W_CHAINE va contenir la valeur ‘ 19990726 ’
Instructions de base Affectation de zones l MOVE-CORRESPONDING <st 1> TO <st 2>. Pour chaque champ ayant le même nom dans chacune des deux structures <st 1> et <st 2>, le système effectue l’opération: MOVE st 1 -<champ> TO st 2 -<champ>.
Instructions de base Affectation de zones l MOVE-CORRESPONDING : exemple DATA: BEGIN OF STRUC 1, ZONEA, ZONEB(3) TYPE N, ZONEC(8) TYPE C, END OF STRUC 1. DATA: BEGIN OF STRUC 2, ZONEB(3) TYPE N, ZONEC(8) TYPE C, ZONED(5) TYPE P, END OF STRUC 2. MOVE-CORRESPONDING STRUC 1 TO STRUC 2. équivaut à: MOVE STRUC 1 -ZONEB TO STRUC 2 -ZONEB. MOVE STRUC 1 -ZONEC TO STRUC 2 -ZONEC.
Instructions de base Affectation de zones l MOVE <f 1>+<os 1>(<lg 1>) TO <f 2>+<os 2>(<lg 2>) Affectation de zones avec spécification d’offset et de longueur sous forme de variable ou de constantes. DATA: ZONE 1(4) TYPE C ZONE 2(4) TYPE C MOVE ZONE 1+2(2) TO ZONE 2(2) VALUE ‘ 1234’, VALUE ‘ABCD’. ZONE 2 = ‘ 34 CD ’ A n’utiliser qu’avec des zones de type C
Instructions de base Opération sur des chaînes de caractères l CONCATENATE <f 1> <f 2>… into <z> : concaténation de chaînes de caractères l SPLIT <z> AT <c> INTO <f 1> <f 2> : «éclatement » d ’une chaîne de caractères DATA : W_CHAINE(30) TYPE C VALUE ‘ 01, 02, 03 ’. SPLIT W_CHAINE AT ‘ , ’ INTO ZONE 1 ZONE 2 ZONE 3.
Instructions de base Opération sur des chaînes de caractères l TRANSLATE <f 1> option : transformation d ’une chaîne de caractères. DATA : W_CHAINE(30) TYPE C VALUE ‘ Dupont ’. TRANSLATE W_CHAINE TO UPPER CASE. W_CHAINE sera mis en majuscules ‘ DUPONT ’ DATA : W_CH 1(4) TYPE C VALUE ‘ 12154 ’, W_CH 2(4) TYPE C VALUE ‘ 1 A 2 B 3 Z 5 P ’. TRANSLATE W_CH 1 USING W_CH 2. Tous les caractères de W_CH 1 vont être remplacés en fonction du contenu de W_CH 2. QUE VA CONTENIR W_CH 1 ?
Instructions de base : Opérations Arithmétiques l. Addition : ADD <f 1> to <f 2>. Équivalent à <f 2> = <f 2> + <f 1>. <f 3> = <f 2> + <f 1>. ADD-CORRESPONDING struc 1 to struc 2. Toutes les zones ayant le même nom des structures struc 1 et struc 2 seront additionnées entre elles.
Instructions de base : Opérations Arithmétiques l. Soustraction : SUBTRACT <f 1> FROM <f 2>. Équivalent à <f 2> = <f 2> - <f 1>. Autre forme : <f 3> = <f 2> - <f 1>. SUBTRACT-CORRESPONDING struc 1 FROM struc 2. Toutes les zones ayant le même nom des structures struc 1 et struc 2 seront soustraites entre elles.
Instructions de base : Opérations Arithmétiques l. Multiplication : MULTIPLY <f 1> BY <f 2>. Équivalent à <f 1> = <f 1> * <f 2>. MULTIPLY-CORRESPONDING struc 1 BY struc 2. Toutes les zones ayant le même nom des structures struc 1 et struc 2 seront multipliés entre elles et le résultat sera stocké dans la structure struc 1.
Instructions de base : Opérations Arithmétiques l. Division : DIVIDE <f 1> BY <f 2>. Équivalent à <f 1> = <f 1> / <f 2>. DIVIDE-CORRESPONDING struc 1 BY struc 2. Toutes les zones ayant le même nom des structures struc 1 et struc 2 seront divisées entre elles et le résultat sera stocké dans la structure struc 1.
Instruction de base : Traitement Conditionnel l Branchement selon une condition logique : IF condition 1. traitement. ELSEIF condition 2. traitement. ELSE. traitement. ENDIF.
Instruction de base : Traitement Conditionnel Opérateurs logiques tous types de champs: l EQ NE LT LE GT GE equal to not equal to less than or equal to greater than or equal to champs de type C ou N: CO CN CA NA CS NS CP NP Contains Only Contains Not only Contains Any contains Not Any Contains String contains No String Contains Pattern contains No Pattern
Instruction de base : Traitement Conditionnel l Branchement conditionnel selon une valeur de zone : CASE <f>. WHEN <f 1>. <statement block> WHEN <f 2>. <statement block> WHEN OTHERS. <statement block> ENDCASE.
Instruction de base : Traitement de boucle l Boucle inconditionnelle: DO <n> TIMES. CHECK condition. IF condition. EXIT. ENDIF. traitement. ENDDO. l Boucle conditionnelle: WHILE condition. traitement. ENDWHILE.
Instruction des base : Traitement de boucle EXIT : sortie de la boucle l CONTINUE : passage à l ’occurrence suivante l DO 4 TIMES. … IF zone GT 100. CONTINUE. ENDIF. … ENDDO. l WHILE I > 400. … IF SY-SUBRC NE 0. EXIT. ENDIF. … ENDWHILE. Comment vont réagir les boucles dans chacun de ces 2 cas ?
Instructions de Base : Points à retenir l l l l WRITE : édition de données MOVE : affectation de données CONCATENATE, SPLIT, TRANSLATE… : opérations sur chaîne de caractère ADD, SUBTRACT, MULTIPLY, DIVIDE : calculs IF. . ENDIF, CASE…ENDCASE : instructions conditionnelles DO. . ENDDO, WHILE…ENDWHILE : instructions de boucle Dans l ’aide on-line ABAP, vous trouverez toutes les options de ces instructions et d ’autres instructions encore
Chapitre 4 Reporting ABAP IV Traitement des tables SAP : l ’instruction SELECT
Traitement des tables SAP : Open SQL l Afin de rendre ABAP IV indépendant du système de base de données relationnelle utilisé, SAP a créé un ensemble d’ordres SQL appelé OPEN SQL. l Une interface Base de Donnée traduit les ordres Open SQL en ordre SQL spécifiques au système de Base de Donnée utilisé (Native SQL). l Il est aussi possible de coder directement des ordres Native SQL dans un programme ABAP IV.
Sélection des données Lecture séquentielle l Sélectionner toutes les données de plusieurs lignes d’une table : SELECT * FROM dbtab WHERE champ 1 = valeur 1 AND champ 2 = valeur 2. WRITE: dbtab-champ 1, dbtab-champ 2. ENDSELECT. SY-SUBRC = 0 au moins une ligne sélectionnée 4 aucune ligne sélectionnées
Sélection des données Lecture directe l Sélectionner toutes les données d’une seule ligne de table SELECT SINGLE * FROM dbtab WHERE CLE 1 = valeur 1 AND CLE 2 = valeur 2. Tous les champs clés primaires de la table doivent être spécifiés SY-SUBRC = 0 la ligne spécifiée a été trouvée 4 la ligne spécifiée n’a pas été trouvée
SELECT : fonctions d ’agrégat l Des fonctions d ’agrégat sont disponibles lors du SELECT : – – – COUNT( * ) : nombre d ’entrées sélectionnées MAX (champ) : la valeur maximale lue pour un champ MIN (champ) : la valeur minimale lue pour un champ AVG (champ) : la valeur moyenne SUM (champ) : la somme des valeurs d ’un champ
SELECT : fonctions d ’agrégat l Exemple : SELECT COUNT(*) MAX(LIFNR) INTO (NB_FOU , W_MAX) FROM LFA 1. WRITE : NB_FOU, W_MAX. – l Que contiennent les zones NB_FOU et W_MAX ?
SELECT : jointures de table l SELECT aliasdbtab 1~zone 1 aliasdbtab 2~zone 2 INTO (dbtab 1 -zone 1 , dbtab 2 - zone 2) FROM dbtab 1 AS aliasdbtab 1 INNER JOIN dbtab 2 AS aliasdbtab 2 ON aliasdbtab 1~clé 1 = aliasdbtab 2~clé 1 WHERE. . . WRITE : / dbtab 1 -zone 1, dbtab 2 -zone 2. ENDSELECT. l SAP va sélectionner tous les enregistrements de dbtab 1 et dbtab 2 qui ont les mêmes valeurs de clé pour clé 1
SELECT : jointures de table Exemple : SELECT F 1~KUNNR F 1~NAME 1 F 2~VBELN INTO (KNA 1 -KUNNR, KNA 1 -NAME 1, VBAKVBELN) FROM KNA 1 AS F 1 JOIN VBAK AS F 2 ON F 1~KUNNR = F 2~KUNNR. l WRITE : / KNA 1 -KUNNR, 13 KNA 1 -NAME 1, 50 VBAK-VBELN. ENDSELECT.
SELECT : jointures de tables VBAK : commandes clients KNA 1 : clients JOIN Résultat de la jointure On remarque qu ’aucune jointure n ’a été faite pour le client n° 2300
SELECT : jointures de tables l On peut joindre 2 tables même s ’il n ’existe pas toutes les occurrences dans la 2è table : il faut utiliser alors utiliser l ’option LEFT OUTER JOIN. l Syntaxe : SELECT aliasdbtab 1~zone 1 aliasdbtab 2~zone 2 INTO (dbtab 1 -zone 1 , dbtab 2 - zone 2) FROM dbtab 1 AS aliasdbtab 1 LEFT OUTER JOIN dbtab 2 AS aliasdbtab 2 OUTER ON aliasdbtab 1~clé 1 = aliasdbtab 2~clé 1 WHERE. . . WRITE : / dbtab 1 -zone 1, dbtab 2 -zone 2. ENDSELECT
SELECT : jointures de table Exemple : SELECT F 1~KUNNR F 1~NAME 1 F 2~VBELN INTO (KNA 1 -KUNNR, KNA 1 -NAME 1, VBAKVBELN) FROM KNA 1 AS F 1 LEFT OUTER JOIN VBAK AS F 2 ON F 1~KUNNR = F 2~KUNNR. l WRITE : / KNA 1 -KUNNR, 13 KNA 1 -NAME 1, 50 VBAK-VBELN. ENDSELECT.
SELECT : jointures de tables KNA 1 : clients LEFT OUTER JOIN VBAK : commandes clients Résultat de la jointure On remarque qu ’une jointure a été faite pour le client n° 2300 , mais le n° commande n ’est renseigné
SELECT : option HAVING l On peut ajouter des conditions supplémentaires de sélection dans un SELECT qui optimise considérablement les traitements. l Syntaxe : SELECT zone 1 FROM dbtab WHERE …. HAVING <condition>. ENDSELECT.
SELECT : option HAVING l Exemple : SELECT LAND 1 MAX( NAME 1 ) INTO (LFA 1 -LAND 1 , LFA 1 -NAME 1) FROM LFA 1 GROUP BY LAND 1 HAVING MAX( NAME 1 ) GE 'S'. WRITE : / LFA 1 -LAND 1, LFA 1 -NAME 1. ENDSELECT. l Qu ’édite cette instruction ?
SQL : gestion des tables SAP l Il existe des instructions de mise à jour des tables SAP: – INSERT dbtab : création d ’un enregistrement – UPDATE dbtab : modification d ’un enregistrement – DELETE dbtab : suppression d ’un enregistrement l EN AUCUN CAS CES INSTRUCTIONS NE DOIVENT ETRE UTILISES SUR LES TABLES STANDARD SAP : seulement sur les tables spécifiques que vous devez créer pour vos programmes
Sélection des données Critères de sélection l SELECT-OPTIONS <seltab> FOR <dbtab-field 1>. définit un critère de sélection pour le champ dbtab-field 1 SELECT * FROM dbtab WHERE <field 1> IN <seltab>. l En déclarant un Select-options : un écran de sélection sera automatiquement généré par SAP. l Les SELECT-OPTIONS permettent de gérer une ou plusieurs fourchettes de valeurs
Sélection des données Paramètres l L’instruction PARAMETERS permet de définir une variable en saisie sur l’écran de sélection qui n’a aucun lien avec un champ de table base de donnée. PARAMETERS P_DATE TYPE D DEFAULT SY-DATUM. Ou PARAMETERS P_DATE LIKE SY-DATUM
SAP - SQL : Points à retenir l l l SELECT : lecture des tables SAP (standard ou spécifiques). MAX, MIN, AVG, SUM… : fonctions d ’agrégat JOIN : fonctions de jointure de table INSERT, UPDATE, DELETE : instructions à utiliser seulement sur les tables spécifiques SELECT-OPTIONS, PARAMETERS : critères de sélection qui génèrent un écran de sélection
Reporting ABAP IV Chapitre 5 Modularité
Reporting ABAP IV Modularité Eviter les blocs de traitement redondants l Accroître la lisibilité d’un programme et donc faciliter sa maintenance et son évolution l SAP propose les techniques de modularisation suivantes: – – – Les programmes includes les sous-routines les modules fonctions
Modularité Programme Include Contient un bloc de code pouvant être utilisé dans plusieurs programmes (Ex: déclaration de données) l Permet de regrouper des traitements par blocs fonctionnels ou techniques l Création: type de programme I dans les attributs. l Utilisation dans un autre programme : INCLUDE <include>. l
Modularité Les sous-routines l Une sous-routine est un bloc de traitement que l’on peut appeler plusieurs fois dans un programme. l Usage sans paramètres: PERFORM <sousroutine>. la routine Bloc de traitement. ENDFORM. Appel de la routine Définition de
Modularité Les sous-routines l passage de paramètres par référence. PERFORM <sousroutine> TABLES <tab 1> <tab 2> USING <p 1> <p 2> <p 3> CHANGING <p 4> <p 5>. FORM <sousroutine> TABLES <ftab 1> <ftab 2> USING <fp 1> <fp 2> <fp 3> CHANGING <fp 4> <fp 5>. Bloc de traitement. ENDFORM.
Modularité Les sous-routines l Passage de paramètres par valeur: FORM <sousroutine> USING VALUE(<fp 1>) CHANGING VALUE (<fp 2>). Bloc de traitement. ENDFORM. – Les paramètres formels sont créés comme copies des paramètres actuels. – USING: Une modification du paramètre formel n’a pas d’effet sur le paramètre actuel. – CHANGING: Une modification du paramètre formel entraîne la modification du paramètre actuel.
Modularité Les sous-routines l Il est possible d’appeler une sous-routine définie dans un programme extérieur: PERFORM <sousroutine>(<programme>) TABLES. . . USING. . CHANGING. . . Les sous-routines peuvent alors être définies dans un programme non exécutable de type S (Pool de sousroutines).
Modularité Module de Fonction Les modules de fonction sont des sousroutines spéciales stockées dans une bibliothèque centrale. l SAP fournit de nombreux modules de fonction standard , mais l’on peut en créer de nouveaux. l La définition des paramètres d’import/export ainsi que le gestion des erreurs est standardisée. l Il est possible de tester indépendamment un module de fonction. (bouton Test Ind) l
Module de Fonction Création La gestion des modules de fonction se fait par la transaction SE 37. l Les étapes de la création sont les suivantes: l – – – Création d’un groupe de fonction Définition des attributs du module de fonction Définition des paramètres Import/Export Définition des paramètres Tables Définition des exceptions Ecriture du code source
Module de Fonction Utilisation l L’appel d’un module fonction dans un programme ABAP se fait de la façon suivante: CALL FUNCTION <fonction> EXPORTING IMPORTING CHANGING TABLES EXCEPTIONS l f 1 = a 1. . . . fn = an e 1 = r 1. . en = rn. Utiliser le modèle d ’instructions dans l ’éditeur ABAP pour coder l ’appel à la fonction : ainsi , on ne risque pas d ’oublier des paramètres d ’appel de la fonction.
l PARAMETRES : Module de Fonction Utilisation – EXPORTING : il s ’agit des paramètres que l ’on va passer au module fonction (ils ne sont pas modifiés par la fonction) – IMPORTING … : ce sont les résultats renvoyés par la fonction – CHANGING …. : ce sont des paramètres que l ’on envoit à la fonction, mais qui sont modifiés par la fonction. – TABLES … : ce sont les tables internes que l ’on passe à la fonction ou que l ’on reçoit de la fonction – EXCEPTIONS. . : c ’est l ’ensemble des codes retour possibles pour la fonction. Ce sont des constantes numériques. Si le SYSUBRC est différent de 0, SY-SUBRC contient la valeur de l ’exception : l ’exception étant le motif d ’erreur.
Module de Fonction Exemple CALL FUNCTION 'STRING_CONCATENATE' EXPORTING STRING 1 = MOT 1 STRING 2 = MOT 2 IMPORTING STRING = MOT EXCEPTIONS TOO_SMALL = 1 OTHERS = 2. CASE SY-SUBRC. WHEN 0. WRITE : / MOT. WHEN 1. WRITE : / ‘ Erreur : chaîne de caractères trop courte ’ WHEN 2. WRITE: / ‘ Erreur : impossibilité de concaténer ’ ENDCASE.
Reporting ABAP IV Chapitre 6 Tables Internes
Tables internes Définition l Les tables internes sont des structures de données qui existent le temps de l ’exécution du programme. Elles peuvent contenir un nombre quelconque d ’enregistrements ayant la même structure, avec ou sans ligne d ’entête. l L ’en-tête est similaire à une structure et sert de work area (aire de travail) à la table interne. Le type de données d ’un enregistrement peut être élémentaire ou structuré.
Tables internes Différents types (1/2) STANDARD : La recherche dans une table standard s ’effectue de manière séquentielle. Le temps d ’accès augmente donc linéairement avec le nombre d ’entrées. Il est recommandé d ’accéder à ces tables avec des index. l SORTED : Ce type de table est toujours sauvegardé correctement triée. L ’accès utilise une clé binaire. Si cette clé n ’est pas unique le système retient l ’enregistrement avec l ’index le plus faible. Le temps d ’accès augmente de façon logarithmique avec le nombre d ’entrées. On peut également y accéder par index. Le temps pour insérer un enregistrement est plus long que pour une table standard puisque le système vérifie que le tri est correct après chaque insertion. l
Tables internes Différents types (2/2) l l l HASHED : La table est gérée par une procédure interne de hashage. Une table hashée est une collection d ’enregistrements qui peuvent être adressés grâce à une clé unique. On ne peut pas utiliser d ’index pour accéder à ce type de table. Toutes les entrées ont une clé unique. Le temps d’accès est constant quelque soit le nombre d’enregistrements. On ne peut y accéder qu’en utilisant les opérations génériques du type SORT, LOOP. Les opérations avec accès implicites ou explicites aux index ne sont pas autorisées (comme LOOP. . . FROM ou INSERT itab avec un LOOP). Notons que les types STANDARD et SORTED sont réunis sous le type générique INDEX TABLE. Tous les types de tables internes sont réunis sous l ’appellation ANY TABLE.
Tables internes Déclaration l Déclaration de table standard : DATA: BEGIN OF itab OCCURS 100, (1) nom(20) TYPE C, code_postal(5) TYPE N, ville(20) TYPE C, END OF itab. l Déclaration de table hashée (en référence à un type existant) TYPES: BEGIN OF struc, name(10), age TYPE I END OF STRUC. TYPES: HTAB TYPE HASHED TABLE OF STRUC WITH UNIQUE KEY NAME. DATA : PERSONS TYPE HTAB.
Les tables internes Structure Table read table Dupont 75000 Paris Durand 67000 Strasbourg Deschamps 34000 Montpellier modify table Dupont 75000 Paris Work Area
Tables internes Ajout l APPEND <tabname>. Ajoute un poste en fin de table à partir des valeurs renseignées dans la work area: Move ‘Dupont’ Move ‘ 75000’ Move ‘Paris’ APPEND ITAB. l TO ITAB-NOM. TO ITAB-CP. TO ITAB-VILLE. INSERT <tabname> [ INDEX <idx>]. Insère un poste à la ligne <idx>. L'index des postes suivants est incrémenté de 1.
Tables internes Mise à jour MODIFY <tabname> [ INDEX <idx> ]. Modifie la ligne <idx>. Si on ne précise pas d ’index alors l ’instruction MODIFY doit être incluse dans un LOOP. l Ajout d'un poste en fonction de la clé standard COLLECT <itab> La clé standard d'une table interne est composée de tous les champs de type non-numérique (P, I et F). Si un poste existe déjà avec la même clé standard, le système ne crée pas de nouveau poste mais cumule les valeurs des champs numériques. l
Les tables internes Mise à jour (Exemple) l COLLECT: Exemple DATA: BEGIN OF CLIENT OCCURS 100, NOM(20) TYPE C, VILLE(20) TYPE C, CA TYPE P, END OF CLIENT. MOVE: 'Dupont' TO CLIENT-NOM, 'Paris' TO CLIENT-VILLE, 10000 TO CLIENT-CA. COLLECT CLIENT. MOVE: 'Dupont' TO CLIENT-NOM, 'Lyon' TO CLIENT-VILLE, 50000 TO CLIENT-CA. COLLECT CLIENT. MOVE: 'Dupont' TO CLIENT-NOM, 'Paris' TO CLIENT-VILLE, 30000 TO CLIENT-CA. COLLECT CLIENT. Résultat: Dupont Paris Dupont Lyon 40000 50000
Tables internes Suppression l DELETE <tabname> [ INDEX <idx> ]. Supprime la ligne <idx> l CLEAR <tabname>. Initialise la work area (i. e. l ’enregistrement courant) l REFRESH <tabname>. Supprime tous les postes de la table. Attention, la work area n ’est pas initialisée.
Tables internes Lecture séquentielle l Lecture de tous les postes: LOOP AT itab. WRITE: / itab-nom, itab-rue, itab-ville. ENDLOOP. l Lecture sélective de postes: LOOP AT itab WHERE nom = 'Dupont'. WRITE: / itab-rue, itab-ville. ENDLOOP.
Tables internes Lecture directe l En utilisant l'index: READ TABLE <itab> INDEX <idx>. l En utilisant la clé standard: READ TABLE <itab>.
Tables internes Tris / Doublons l On trie une table interne avec l ’instruction SORT itab [BY f 1 f 2 …] [ASCENDING] [DESCENDING]. l On peut effectuer des tris complexes du type : SORT itab DESCENDING BY f 3 ASCENDING. Dans ce cas la table interne itab sera triée globalement de façon ascendante, sauf pour le champ f 3 qui le sera de façon descendante. l Un des intérêts de trier une table est de supprimer les doublons, pour cela on utilise l ’intruction suivante : DELETE ADJACENT DUPLICATES FROM itab.
Tables internes Ruptures l LOOP AT itab. AT FIRST. …ENDAT. AT NEW <f>. …ENDAT. AT END OF <f>. …ENDAT. AT LAST. …ENDAT. ENDLOOP. l AT FIRST… ENDAT : les instructions incluses à l ’intérieur de cet événement ne seront exécutés qu ’une seule fois en DEBUT de boucle l AT LAST… ENDAT : les instructions incluses à l ’intérieur de cet événement ne seront exécutés qu ’une seule fois en FIN de boucle
Tables internes Ruptures l AT NEW <f>…. ENDAT : les instructions incluses à l ’intérieur de cet événement seront exécutés à chaque début de rupture de la zone <f>. l AT END OF <f>…. ENDAT : les instructions incluses à l ’intérieur de cet événement seront exécutés à chaque fin de rupture de la zone <f>. (= à chaque fin de changement de valeur de <f>)
Tables internes Ruptures l Ruptures multi-critères : SORT ITAB BY <f> <g>. LOOP AT ITAB. AT NEW <f>. … ENDAT AT NEW <g>…. ENDAT. . . AT END of <g>… ENDAT. AT END of <f>… ENDAT ENDLOOP l Le contrôle de rupture effectué tient compte de toutes les colonnes à gauche de <g>. AT NEW <g> signifie que la rupture se base sur la concaténation des champs à gauche de la zone <g> : c ’est à dire zone <f> + la zone <g>.
Reporting ABAP IV Chapitre 7 Gestion des Fichiers
Fichiers extracts l Un fichier EXTRACT est constitué d'une séquence d'enregistrements. l Ces enregistrements peuvent avoir une structure variable. l On ne peut définir qu'un seul fichier EXTRACT par programme. l On ne peut lire un fichier EXTRACT que de façon séquentielle.
Fichiers extracts Définition des enregistrements l Les groupes de zones: FIELD-GROUPS <fg>. Un field-group regroupe plusieurs champ sous un même nom. Il ne réserve pas d'espace mémoire mais est relié à des champs existants grâce à un pointeur. Il existe un field-group particulier appelé HEADER. Les champs reliés au HEADER sont présent dans chaque enregistrement d'un fichier extract. FIELD-GROUPS: HEADER, DIVISION, MAGASIN
Fichiers extracts Définition des enregistrements l Affectation des zones à un groupe de zone : INSERT <f 1> <f 2> <f 3> INTO <fg>. L'affectation de zones à un field-group peut se faire jusqu'au moment où le premier enregistrement utilisant ce field-group est créé INSERT: NUM_ART DIV MAG STOCK_DIV STOCK_MAG INTO HEADER, INTO DIVISION, INTO MAGASIN.
Fichiers extracts Création des enregistrements l EXTRACT <fg>. Crée un enregistrement contenant les valeurs des zones du HEADER puis des zones du field-group <fg> au moment de l'EXTRACT. Les champs du HEADER préfixent chaque enregistrement pour former une clé de tri. EXTRACT DIVISION. EXTRACT MAGASIN. HEADER NUM_ART DIV MAG STOCK_DIV NUM_ART DIV MAG STOCK_MAG DIVISION MAGASIN
Fichiers extracts Lecture SORT: Tri selon l'ordre des champs du HEADER l Balayage: l LOOP. AT MAGASIN. Traitement des postes relatifs au field-group MAGASIN. ENDAT. Traitement tous postes. AT DIVISION. Traitement des postes relatifs au field-group DIVISION. ENDAT. ENDLOOP.
Fichiers extracts Lecture l Gestion des ruptures: LOOP. AT FIRST. Traitement premier poste de la table. ENDAT. AT NEW NUM_ART. Traitement nouvelle valeur d'une zone. ENDAT. AT END OF NUM_ART. Traitement fin de valeur d'une zone. ENDAT. AT LAST. Traitement dernier poste de la table. ENDAT. ENDLOOP.
Comparaison traitements table interne/fichiers extracts l Les fichiers extracts sont performants pour des tableaux de gros volumes. l Ils permettent aussi de générer des tableaux de structure variable. l Chemin : Outils -> Abap Workbench -> Test -> Analyse durée exécution
Fichiers du serveur d’application Ouverture l OPEN DATASET <dsn> <option 1> <option 2>. Si le système ne peut pas ouvrir le fichier : SY-SUBRC = 8 option 1 FOR INPUT en mode lecture FOR OUTPUT en mode écriture FOR APPENDING en mode écriture en fin de fichier option 2 IN TEXT MODE en mode text IN BINARY MODE en mode binaire (défaut)
Fichiers du serveur d’application Lecture READ DATASET <dsn> INTO <structure>. Lecture d’un enregistrement du fichier <dsn> dans la variable <structure>. En fin de fichier, SY-SUBRC est différent de zéro. l Exemple: l DO. READ DATASET <dsn> INTO <structure>. IF SY-SUBRC NE 0. EXIT. ENDIF. Traitement. ENDDO.
Fichiers du serveur d’application Ecriture - Fermeture l TRANSFER <structure> TO <dsn>. Transfère le contenu de la variable <structure> dans le fichier <dsn>. l CLOSE DATASET <dsn>. Ferme le fichier <dsn>.
Fichiers du serveur de présentation Fonction UPLOAD l Cette fonction permet de charger dans une table interne un fichier du serveur de présentation: - Paramètres d’export : FILENAME Nom du fichier FILETYPE type du fichier BIN: fichiers binaires. ASC: fichiers texte avec pointeurs de fin de ligne. DAT: fichiers Excel files sauvegardés comme fichiers texte avec tabulateurs. WK 1: fichiers Excel et Lotus files sauvegardés comme feuilles WK 1 - Paramètre table: table interne ABAP IV
Fichiers du serveur de présentation Fonction DOWNLOAD l Cette fonction permet de télécharger une table interne ABAP IV sur un ficher local. Les paramètres sont les mêmes que pour la fonction UPLOAD.
Reporting ABAP IV Chapitre 8 Concepts de programmation avancée
Report interactif Présentation l Dans le cas d ’un report interactif, l ’utilisateur peut déclencher des opérations et des traitements par des actions sur la liste résultante d ’une interrogation. l On peut, par exemple, appeler des transactions, d ’autres reports, lancer des impressions, imbriquer des listes … l Ce type de traitement nécessite souvent de gérer le ‘ statut de liste ’ de la surface du programme. Cela s ’effectue par le MENU PAINTER (SE 41).
Report interactif MENU PAINTER (SE 41) l L ’interface de gestion de surface se décompose en 3 éléments pour chaque Barre de menus statut géré : Barre de fonctions Barre d ’outils
MENU PAINTER Barre de menus l La barre permet de définir le chemin pour accéder aux événements. A chaque branche de l ’arborescence se trouve un code fonction ou nom de transaction.
l MENU PAINTER Barre de fonctions Dans cette partie on paramètre les fonctions de la surface. Lorsque l ’utilisateur clique sur un bouton ou icône de fonction, le code de la fonction (ici ‘ COMMANDE ’) est stocké dans SY-UCOMM.
MENU PAINTER Barre d ’outils l La barre d ’outils permet une plus grande convivialité par rapport à la barre de menus, notamment l ’insertion d ’icône. On y retrouve les options des menus les plus souvents utilisés.
Report interactif ABAP Commande : At Line-selection l Déclenche un événement à chaque fois que l ’utilisateur choisit une ligne dans une liste (une ligne générée par des instructions telles que WRITE, ULINE ou SKIP) avec le curseur et presse une touche de fonctions qui a la fonction PICK dans la définition de l ’interface (1). l L ’événement AT LINE-SELECTION génère habituellement des listes détaillées qui recouvre la liste en cours. l Lors de l ’affichage de la liste d ’origine, on sauvegarde les champs à réutiliser grâce à l ’instruction HIDE.
Report interactif Commande : At User-command Cet événement s ’exécute lorsque l ’utilisateur presse une touche fonction ou effectue une entrée dans le champ de commande. l Plusieurs fonctions sont exécutées directement par le système et donc ne peuvent pas être traitées par le programme : l • • • l PICK réservé pour AT LINE-SELECTION PFn réservé pour AT PFn /. . . Commande système PRI Imprimer BACK Retour Le code qui va déclecher l ’événement est stocké dans le champ SY-UCOMM.
Débogeur SAP l Le débogeur est un outil d ’exécution de programme en mode pas à pas. Le contenu des champs est visualisable.
Débogeur SAP Le débogeur est très utile pour - vérifier le chargement d ’une table interne, - vérifier les formats des valeurs, - vérifier les paramètres d ’une requête SQL, - détecter de mauvaises affectations de champs, - comprendre le déroulement d ’un programme. l
Trace SQL l Il existe un outil de visualisation des accès SQL. Il permet entre autres - de recher rapidement une table utilisée par une transaction standard SAP, - de vérifier l ’accès aux tables : utilisation d ’un champ d ’index, clé primaire… Chemin : Outils -> Abap Workbench -> Test > Trace SQL
Trace SQL Écran de base l Une trace SQL se déclenche à un instant T et pour un utilisateur X. Toutes les actions de X sont alors enregistrés dans un fichier LOG. l Après avoir arrêté la trace, ce fichier est visualisable par la fonction « List Trace » . l
Sélection des données Base de Donnée Logique Une base de données logique (BDL) est une méthode particulière d’accès aux données. C ’est un ensemble de tables SAP dont les liens (ou jointures) sont prédéfinies. l Elle peut être associée à un programme ABAP IV de type Report dans les caractéristiques. l Une BDL est toujours accompagnée d ’un programme spécial qui met à votre disposition un ensemble d’entrées de tables de base de données selon un ordre hiérarchique. l Transaction SE 36 : Gestion des bases de données logiques l
Sélection des données Base de Donnée Logique • Exemple: BDL Article : MSM Données générales : MARAV Unités de quantité MARM Données de vente MVKE Données par division MARCV Données par magasin MARD Cette BDL peut lire et fournir au programme auquel elle est associée toutes les entrées de ces tables dans un ordre hiérarchique et séquentiel.
Base de Donnée Logique l ’événement GET Syntaxe : GET <dbtab>. l L ’événement GET est déclenché dans le programme quand SAP a mis à disposition les données de la table <dbtab>. l – Exemple : REPORT ZZEXEMPLE. TABLES : MARAV. GET MARAV. WRITE MARAV-MATNR, MARAV-MAKTX. l Attention : les données de niveaux inférieurs de l ’arborescence ne sont pas disponibles.
Base de Donnée Logique l ’événement GET Comment faire pour accéder aux données d ’un niveau inférieur ? par exemple la table MARD. l Il suffit de positionner l ’événement GET sur la table de niveau inférieur. l – exemple : REPORT ZZEXEMPLE. TABLES : MARAV, MARD. GET MARD. WRITE : MARD-LGORT, MARD-MATNR, MARV-MAKTX. l A un niveau inférieur de l ’arborescence, on dispose de toutes les données des niveaux supérieurs.
Base de Donnée Logique Ecran de sélection l A chaque BDL est associé au moins un écran de sélection. l Il permet à l’utilisateur de saisir des valeurs de critère de sélection afin de restreindre la sélection des données (Ex: numéro d’article). l L’apparition de ces critères de sélection dépend des tables de bases de données qui sont déclarées dans le programme par l’instruction TABLES.
Messages d ’erreurs l l MESSAGE tnnn(mid). MESSAGE ID mid TYPE t NUMBER nnn. l Produit un message de type ‘ t ’, ayant pour numéro ‘ nnn ’ et appartenant à la classe de message ‘ mid ’. l Types de messages : – – – I - Info W - Warning E - Error A - Abend X - Exit S - Success : Press ENTER to continue : Correction possible : Correction required : Transaction terminated with short dump : Message on next screen
Message Classe de message l On maintient les classes de messages et les messages qu ’il contient par la transaction SE 91 ou le menu Abap workbench - Développement - Environnement de développement - Messages. l Exemple de message avec paramètre. Soit le message 456 de la classe de message 99, ayant comme contenu ‘ L ’utilisateur & ne peut accéder au mandant & ’. L ’appel à ce message, en tant que message d ’erreur ‘ E ’, s ’effectue comme suit : MESSAGE E 456(99) WITH sy-uname sy-mandt Les deux variables passées en paramètres se substitue de façon ‘ en série ’ aux &.
Comparaison traitements Outil « Analyse durée d ’exécution » L ’outil « analyse durée d ’exécution » intégré dans SAP permet d ’analyser les performances des transactions et programmes créés dans l ’Abap Workbench. l visualiser les durées d ’exécution selon trois catégories l - instruction ABAP (EXPORT, IMPORT…), - accès à la base de donnée (SELECT SQL. . . ) - système R/3 (chargement du programme…)
- Slides: 129