Upload
others
View
22
Download
1
Embed Size (px)
Citation preview
Tuto[1] : Programmation ABAP IV : reports
Reporting ABAP IV : Objectifs
Etre 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
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
Généralités ABAP IV
Syntaxe
Le langage de programmation ABAP IV est constitué des éléments de syntaxe suivants
1. Phrases2. Mot-clés 3. Commentaires
Syntaxe : Phrases
- Chaque phrase commence par un mot-clé et se termine par une ponctuation. - Les différents mots de la phrase doivent être séparés par un espace.
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 ...Opérationnels : MOVE, WRITE …De controle : IF, WHILE, CASE ...événementiels : GET, AT USER-COMMAND ...
Syntaxe : Commentaires
- Ligne entière: astérisque en début de ligne- Partie restante d’une ligne: guillemet devant le commentaire
REPORT ZZZFOR01.
* Commentaire généralWRITE 'Premier programme '. " Commentaire de ligne
Gestion événementielle
L’exécution d’un programme ABAP IV peut être contrôlée par des événements temporels. 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.La gestion de ces événements se fait grâce aux mots-clés événementiels, auxquels on peut associer un bloc de traitement.Attention: un programme ABAP IV ne s’exécute pas nécessairement dans l’ordre où il est écrit
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 ’ABA
Le nom d’un ABAP spécifique commence toujours par Z ou par Y et codé sur 40 caractèresMot-Clé : REPORT <nom programme>Options : LINE-SIZE, LINE-COUNT NO STANDARD PAGE HEADING…: définir la mise en page de l’édition (taille colonnes, nombre de lignes)ex: REPORT ZFREFIC00 LINE-SIZE 255.
Editeur ABAP
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éeLa base de données logique Le groupe d’autorisation
Commandes de l’éditeur ABAP
3 présentations du mode éditeur (‘ Options : Editeur ’)
– 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
Commandes
fonctions d’édition sauvegarder contrôler générer exécuter
Chapitre 2
Déclarations de données
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
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
DATA ZONE1 (10) TYPE C VALUE ‘TEST’.Type Lg déf. Val.init. CadrageC:caractère 1 Space gaucheD:date (YYYYMMDD) 8 ‘00000000’ gaucheI: nombre entier 4 0 droitN:texte numérique 1 ‘0..00’ droitP: nombre packé 8 0 droitF: nombre virgule flottante 8 0 droitT: heure (HHMMSS) 6 0 gaucheX: hexadécimal 1 X’00’ gauche
Déclaration de données : Données internes
DATA CLIENT LIKE KNA1-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ées KNA1. 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
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
Les données externes existent indépendamment du programme.Elles doivent être définies sous forme de table ou structure dans le dictionnaire de données SAP.Pour se référencer à ces données dans un programme: mot-clé TABLES.
TABLES: KNA1, MARA.
Déclaration de données : Eléments de texte
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.
SPACE: constante de type C, longueur 1, initialisée à blanc.Les données système: préfixées par SY.SY-SUBRC code retour (zéro, si un ordre a été réalisé avec succès)
SY-UNAME nom de l’utilisateurSY-DATUM date couranteSY-UZEIT heure courante
Déclaration des données :
Points à retenir
TABLES : déclaration des tables et structures du dictionnaire de données SAPDATA : déclaration des données propres au programme : variables de travail, structures de travail .La structure SYST : ensemble des données système SAPLes textes numérotés d’un ABAP
Chapitre 3
Instructions de base ABAP IV
Edition de donnéesAffectation de zonesOpérations sur des chaînes de caractèresOpérations arithmétiquesTraitements conditionnelsTraitements de boucles
Edition de données
WRITE <nom_zone>.
Affiche le contenu du champ <nom_zone> à l’écran. Le format d’édition dépend du type du champ.
type lg édition JustificationC lg champ gaucheD 8 gaucheI 11 droitN lg champ gaucheP 2 * lg champ(+1) droit
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écifications de position et de longueur ne sont pas des variables, on peut omettre le mot-clé AT.WRITE AT /10(15) CLIENT-NOM. OuWRITE /10(15) CLIENT-NOM
La zone CLIENT-NOM sera éditée sur 15 caractères à partir de la 10ème colonne.
Options de mise en forme : WRITE <nom_zone> <options>.
LEFT-JUSTIFIED Cadrage à gauche.CENTERED Centrage.RIGHT-JUSTIFIED Cadrage à droite.UNDER <g> Alignement sur le champ <g> d'une ligne précédente.NO-GAP Suppression des colonnes de séparations.NO-ZERO Suppression des zéros initiaux (type N,P).DECIMALS <d> <d> décimales après la virgule.USING EDIT MASK <m> utilisation d’un masque d’édition spécifique
Options de couleur : WRITE <nom_zone> COLOR <n>.
1 ou COL_HEADING bleu gris2 ou COL_NORMAL gris clair3 ou COL_TOTAL jaune4 ou COL_KEY bleu vert5 ou COL_POSITIVE vert6 ou COL_NEGATIVE rouge7 ou COL_GROUP violet
Affectation de zones
Réinitialisation d’une zone : CLEAR <f1>.La zone est réinitialisée selon son type.
Affectation de zones: MOVE <f1> TO <f2>.Si <f1> et <f2> sont de types différents, le contenu de <f1> est converti selon le type de <f2>.Autre forme: <f2> = <f1>.MOVE: Exemples de conversion;
DATA: ZONE1 (4) TYPE C VALUE ‘1234’, ZONE2(2) TYPE C, ZONE3(6) TYPE N, ZONE4(5) TYPE P VALUE ‘123456789’.
MOVE ZONE1 TO ZONE2. ZONE2 = 12MOVE ZONE1 TO ZONE3. ZONE3 = 001234MOVE ZONE4 TO ZONE3. ZONEB = 456789WRITE <f1> TO <f2>.
La zone réceptrice <F2> 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. W_CHAINE va contenir la valeur ‘ 26.07.1999 ’ MOVE W_DATE to W_CHAINE. W_CHAINE va contenir la valeur ‘ 19990726 ’
MOVE-CORRESPONDING <st1> TO <st2>.
Pour chaque champ ayant le même nom dans chacune des deux structures <st1> et <st2>, le système effectue l’opération:
MOVE st1-<champ> TO st2-<champ>.
DATA: BEGIN OF STRUC1,ZONEA,ZONEB(3) TYPE N,ZONEC(8) TYPE C,END OF STRUC1.
MOVE <f1>+<os1>(<lg1>) TO <f2>+<os2>(<lg2>)
Affectation de zones avec spécification d’offset et de longueur sous forme de variable ou de constantes.
DATA: ZONE1(4) TYPE C VALUE ‘1234’,ZONE2(4) TYPE C VALUE ‘ABCD’.
MOVE ZONE1+2(2) TO ZONE2(2) ZONE2 = ‘ 34CD ’
A n’utiliser qu’avec des zones de type C .
Opération sur des chaînes de caractères
CONCATENATE <f1> <f2>… into <z> : concaténation de chaînes de caractèresSPLIT <z> AT <c> INTO <f1> <f2> : «éclatement » d’une chaîne de caractères
DATA: W_CHAINE(30) TYPE C VALUE ‘ 01,02,03 ’.SPLIT W_CHAINE AT ‘ , ’ INTO ZONE1 ZONE 2 ZONE3.
TRANSLATE <f1> 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_CH1(4) TYPE C VALUE ‘ 12154 ’, W_CH2(4) TYPE C VALUE ‘ 1A2B3Z5P ’.TRANSLATE W_CH1 USING W_CH2. Tous les caractères de W_CH1 vont être remplacés en fonction du contenu de W_CH2. QUE VA CONTENIR W_CH1 ?
Opérations Arithmétiques :
Addition :
ADD <f1> to <f2>. Équivalent à <f2> = <f2> + <f1>.<f3> = <f2> + <f1>.
ADD-CORRESPONDING struc1 to struc2.
Toutes les zones ayant le même nom des structures struc1 et struc2 seront additionnées entre elles.
Soustraction :
SUBTRACT <f1> FROM <f2>. Équivalent à <f2> = <f2> - <f1>.Autre forme : <f3> = <f2> - <f1>.
SUBTRACT-CORRESPONDING struc1 FROM struc2.
Toutes les zones ayant le même nom des structures struc1 et struc2 seront soustraites entre elles.
Multiplication : MULTIPLY <f1> BY <f2>. Équivalent à <f1> = <f1> * <f2>.
MULTIPLY-CORRESPONDING struc1 BY struc2.
Toutes les zones ayant le même nom des structures struc1 et struc2 seront multipliés entre elles et le résultat sera stocké dans la structure struc1.
Division :
DIVIDE <f1> BY <f2>. Équivalent à <f1> = <f1> / <f2>.
DIVIDE-CORRESPONDING struc1 BY struc2.
Toutes les zones ayant le même nom des structures struc1 et struc2 seront divisées entre elles et le résultat sera stocké dans la structure struc1.
Traitement Conditionnel :
Branchement selon une condition logique :IF condition1.
traitement.ELSEIF condition2.
traitement.ELSE.
traitement.ENDIF.
Branchement conditionnel selon une valeur de zone :
CASE <f>. WHEN <f1>. <statement block> WHEN <f2>. <statement block> WHEN OTHERS. <statement block>
ENDCASE.
Traitement de boucle Boucle inconditionnelle:
DO <n> TIMES.CHECK condition.IF condition.
EXIT.ENDIF.Traitement.
ENDDO.
EXIT : sortie de la boucleCONTINUE : passage à l’occurrence suivante
Points à retenirWRITE : édition de donnéesMOVE : affectation de donnéesCONCATENATE, SPLIT, TRANSLATE… : opérations sur chaîne de caractèreADD, SUBTRACT, MULTIPLY, DIVIDE : calculsIF..ENDIF, CASE…ENDCASE : instructions conditionnellesDO..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
Traitement des tables SAP Open SQL: l ’instruction SELECT
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.
Une interface Base de données traduit les ordres Open SQL en ordre SQL spécifiques au système de Base de données utilisé (Native SQL).Il est aussi possible de coder directement des ordres Native SQL dans un programme ABAP IV.
Sélection des données lecture séquentielle : Sélectionner toutes les données de plusieurs lignes d’une table :
SELECT * FROM dbtab WHERE champ1 = valeur1AND champ2 = valeur2 .
WRITE: dbtab-champ1, dbtab-champ2.ENDSELECT.
SY-SUBRC = 0 au moins une ligne sélectionnée 4 aucune ligne sélectionnées
Lecture directe :
Sélectionner toutes les données d’une seule ligne de table
SELECT SINGLE * FROM dbtabWHERE CLE1 = valeur1AND CLE2 = valeur2.
Tous les champs clés primaires de la table doivent être spécifiésSY-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
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
Exemple :
SELECT COUNT(*) MAX(LIFNR) INTO (NB_FOU , W_MAX) FROM LFA1. WRITE : NB_FOU, W_MAX .
Que contiennent les zones NB_FOU et W_MAX ?
SELECT : jointures de table
SELECT aliasdbtab1~zone1 aliasdbtab2~zone2 INTO (dbtab1-zone1 , dbtab2- zone2) FROM dbtab1 AS aliasdbtab1 INNER JOIN dbtab2 AS aliasdbtab2 ON aliasdbtab1~clé1 = aliasdbtab2~clé1 WHERE ... WRITE : / dbtab1-zone1, dbtab2-zone2.ENDSELECT.
SAP va sélectionner tous les enregistrements de dbtab1 et dbtab2 qui ont les mêmes valeurs de clé pour clé1
Exemple : SELECT F1~KUNNR F1~NAME1 F2~VBELN INTO (KNA1-KUNNR,KNA1-NAME1,VBAK-VBELN) FROM KNA1 AS F1 JOIN VBAK AS F2 ON F1~KUNNR = F2~KUNNR. WRITE : / KNA1-KUNNR, 13 KNA1-NAME1, 50 VBAK-VBELN. ENDSELECT.
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.
Syntaxe :
SELECT aliasdbtab1~zone1 aliasdbtab2~zone2 INTO (dbtab1-zone1, dbtab2- zone2) FROM dbtab1 AS aliasdbtab1 LEFT OUTER JOIN dbtab2 AS aliasdbtab2 ON aliasdbtab1~clé1 = aliasdbtab2~clé1 WHERE ... WRITE : / dbtab1-zone1, dbtab2-zone2.ENDSELECT
Exemple : SELECT F1~KUNNR F1~NAME1 F2~VBELN INTO (KNA1-KUNNR,KNA1-NAME1,VBAK-VBELN) FROM KNA1 AS F1 LEFT OUTER JOIN VBAK AS F2 ON F1~KUNNR = F2~KUNNR. WRITE : / KNA1-KUNNR, 13 KNA1-NAME1, 50 VBAK-VBELN.
ENDSELECT.
SELECT : option HAVING
On peut ajouter des conditions supplémentaires de sélection dans un SELECT qui optimise considérablement les traitements.
Syntaxe :
SELECT zone1 FROM dbtab WHERE …. HAVING <condition>. ENDSELECT.
Exemple :
SELECT LAND1 MAX( NAME1 ) INTO (LFA1-LAND1 , LFA1-NAME1) FROM LFA1 GROUP BY LAND1 HAVING MAX( NAME1 ) GE 'S'. WRITE :/ LFA1-LAND1, LFA1-NAME1. ENDSELECT.
Qu’édite cette instruction ?
SQL : gestion des tables SAP
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
EN AUCUN CAS SAUF PROCEDURES EXCEPTIONNELLES 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 et critères de sélection :
SELECT-OPTIONS <seltab> FOR <dbtab-field1>.définit un critère de sélection pour le champ dbtab-field1SELECT * FROM dbtab
WHERE <field1> IN <seltab>.
En déclarant un Select-options : un écran de sélection sera automatiquement généré par SAP.Les SELECT-OPTIONS permettent de gérer une ou plusieurs fourchettes de valeurs
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ées.
PARAMETERS P_DATE TYPE D DEFAULT SY-DATUM. Ou PARAMETERS P_DATE LIKE SY-DATUM
SAP - SQL : Points à retenir
SELECT : lecture des tables SAP (standard ou spécifiques). MAX, MIN, AVG, SUM… : fonctions d’agrégatJOIN : fonctions de jointure de tableINSERT, UPDATE, DELETE : instructions à utiliser seulement sur les tables spécifiquesSELECT-OPTIONS, PARAMETERS : critères de sélection qui génèrent un écran de sélectionChapitre 5
Modularité
Eviter les blocs de traitement redondantsAccroître la lisibilité d’un programme et donc faciliter sa maintenance et son évolutionSAP propose les techniques de modularisation suivantes:
– Les programmes includes– Les sous-routines– Les modules fonctions
Programme Include
Contient un bloc de code pouvant être utilisé dans plusieurs programmes (Ex: déclaration de données)Permet de regrouper des traitements par blocs fonctionnels ou techniquesCréation: type de programme I dans les attributs.Utilisation dans un autre programme : INCLUDE <include>.
Les sous-routines
Une sous-routine est un bloc de traitement que l’on peut appeler plusieurs fois dans un programme.Usage sans paramètres:
PERFORM <sousroutine>. Appel de la routineFORM <sousroutine>. Définition de la routine
Bloc de traitement.ENDFORM.
Passage de paramètres par référence :
PERFORM <sousroutine> TABLES <tab1> <tab2> USING <p1> <p2> <p3>
CHANGING <p4> <p5>.
FORM <sousroutine> TABLES <ftab1> <ftab2> USING <fp1> <fp2> <fp3>
CHANGING <fp4> <fp5>.Bloc de traitement.
ENDFORM.
Passage de paramètres par valeur:
FORM <sousroutine> USING VALUE(<fp1>)CHANGING VALUE (<fp2>).
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.
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 sous-routines).
Module de Fonction
Les modules de fonction sont des sous-routines spéciales stockées dans une bibliothèque centrale.SAP fournit de nombreux modules de fonction standard , mais l’on peut en créer de nouveaux. La définition des paramètres d’import/export ainsi que le gestion des erreurs
est standardisée. Il est possible de tester indépendamment un module de fonction. (bouton Test Ind)
Création
La gestion des modules de fonction se fait par la transaction SE37.Les étapes de la création sont les suivantes:
– 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
Utilisation
L’appel d’un module fonction dans un programme ABAP se fait de la façon suivante:CALL FUNCTION <fonction> EXPORTING f1 = a1 .... fn = an
IMPORTING f1 = a1 .... fn = anCHANGING f1 = a1 .... fn = anTABLES f1 = a1 .... fn = anEXCEPTIONS e1 = r1 .... 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.
PARAMETRES :
– 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 envoi à 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 SY-SUBRC est différent de 0, SY-SUBRC contient la valeur de l’exception : l’exception étant le motif d’erreur.
Exemple:
CALL FUNCTION 'STRING_CONCATENATE' EXPORTING
STRING1 = MOT1STRING2 = MOT2
IMPORTINGSTRING = MOT
EXCEPTIONSTOO_SMALL = 1OTHERS = 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. Chapitre 6
Tables Internes : Définition
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’en-tête.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é.
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.
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.
Différents types (2/2) :
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.
Déclaration
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.
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.
Ajout dans une table interne :
APPEND <tabname>.
Ajoute un poste en fin de table à partir des valeurs renseignées dans la work area:
Move ‘Dupont’ TO ITAB-NOM.Move ‘75000’ TO ITAB-CP.Move ‘Paris’ TO ITAB-VILLE.APPEND ITAB.
INSERT <tabname> [ INDEX <idx>].Insère un poste à la ligne <idx>. L'index des postes suivants est incrémenté de 1.
Mise à jour d’une table interne :
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.
Cumul d'un poste en fonction de la clé standard(boule) :
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.
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.
Suppression
DELETE <tabname> [ INDEX <idx> ].Supprime la ligne <idx>
CLEAR <tabname>.Initialise la work area (i.e. l ’enregistrement courant)
REFRESH <tabname>.Supprime tous les postes de la table. Attention, la work area n ’est pas initialisée.
Lecture séquentielle d’une table interne :
Lecture de tous les postes:
LOOP AT itab.WRITE: / itab-nom, itab-rue, itab-ville.
ENDLOOP.
Lecture sélective de postes:
LOOP AT itab WHERE nom = 'Dupont'.WRITE: / itab-rue, itab-ville.
ENDLOOP.
Lecture directe d’une table interne :
En utilisant l'index:
READ TABLE <itab> INDEX <idx>.
En utilisant la clé standard:
READ TABLE <itab>.
Tables internes Tris / Doublons :
On trie une table interne avec l ’instruction SORT.SORT itab [BY f1 f2 …] [ASCENDING] [DESCENDING].
On peut effectuer des tris complexes du type :
SORT itab DESCENDING BY f3 ASCENDING.Dans ce cas la table interne itab sera triée globalement de façon ascendante, sauf pour le champ f3 qui le sera de façon descendante.
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.
Ruptures
LOOP AT itab.AT FIRST. …ENDAT.AT NEW <f>. …ENDAT.AT END OF <f>. …ENDAT.AT LAST. …ENDAT.
ENDLOOP.
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
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
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>.
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>)
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>… ENDATENDLOOP
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>.
Chapitre 7
Gestion des Fichiers
Fichiers extracts :
Un fichier EXTRACT est constitué d'une séquence d'enregistrements.Ces enregistrements peuvent avoir une structure variable.On ne peut définir qu'un seul fichier EXTRACT par programme.On ne peut lire un fichier EXTRACT que de façon séquentielle.
Définition des enregistrements
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
Affectation des zones à un groupe de zone :INSERT <f1> <f2> <f3> 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 INTO HEADER,STOCK_DIV INTO DIVISION,STOCK_MAG INTO MAGASIN.
Création des enregistrements
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.
Lecture
SORT: Tri selon l'ordre des champs du HEADERBalayage:
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.
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
Les fichiers extracts sont performants pour des tableaux de gros volumes.Ils permettent aussi de générer des tableaux de structure variable.Chemin : Outils -> Abap Workbench -> Test -> Analyse durée exécution
Ouverture
OPEN DATASET <dsn> <option1> <option2>.Si le système ne peut pas ouvrir le fichier : SY-SUBRC = 8.option1
FOR INPUT en mode lectureFOR OUTPUT en mode écritureFOR APPENDING en mode écriture en fin de fichier
option2IN TEXT MODE en mode textIN 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 defichier, SY-SUBRC est différent de zéro.
Exemple:
DO.READ DATASET <dsn> INTO <structure>.IF SY-SUBRC NE 0.
EXIT.ENDIF.Traitement.
ENDDO.
Fichiers du serveur d’application :Ecriture – Fermeture
TRANSFER <structure> TO <dsn>.Transfère le contenu de la variable <structure> dans le fichier <dsn>.
CLOSE DATASET <dsn>.Ferme le fichier <dsn>.
Fichiers du serveur de présentation :Fonction UPLOAD
Cette fonction permet de charger dans une table interne un fichier du serveur de présentation:
- Paramètres d’export :
FILENAMENom 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.WK1: fichiers Excel et Lotus files sauvegardés comme feuilles WK1.
- Paramètre table: table interne ABAP IV
Fichiers du serveur de présentation :Fonction DOWNLOAD
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.
Chapitre 8
Concepts de programmation avancée :Report interactif
Présentation
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.On peut, par exemple, appeler des transactions, d ’autres reports, lancer des impressions, imbriquer des listes …
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 (SE41).
MENU PAINTER (Transaction SE41)
L’interface de gestion de surface se décompose en 3 éléments pour chaque statut géré :
Barre de menus
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.
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.
Barre d ’outils
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
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’événement AT LINE-SELECTION génère habituellement des listes détaillées qui recouvre la liste en cours. 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. Plusieurs fonctions sont exécutées directement par le système et donc ne peuvent pas être traitées par le programme :
• 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éclencher l’événement est stocké dans le champ SY-UCOMM.
Débogueur SAP
Le débogueur est un outil d’exécution de programme en mode pas à pas. Le contenu des champs est visualisable.
Trace SQL
Il existe un outil de visualisation des accès SQL. Il permet entre autres
- de rechercher 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(Transaction ST05)
Écran de baseUne trace SQL se déclenche à un instant T et pour un utilisateur X. Toutes les actions de X sont alors enregistrées dans un fichier LOG. Après avoir arrêté la trace, ce fichier est visualisable par la fonction « List Trace ».
Sélection des données :Base de Donnée Logique(Voir Tuto Complémentaire en ligne)
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.Elle peut être associée à un programme ABAP IV de type Report dans les caractéristiques.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. Transaction SE36 : Gestion des bases de données logiques
L ’événement GET
Syntaxe : GET <dbtab>.L’événement GET est déclenché dans le programme quand SAP a mis à disposition les données de la table <dbtab>.
Exemple :
REPORT ZZEXEMPLE.TABLES : MARAV.GET MARAV.
WRITE MARAV-MATNR, MARAV-MAKTX.
Attention : les données de niveaux inférieurs de l’arborescence ne sont pas disponibles.
Comment faire pour accéder aux données d’un niveau inférieur ? par exemple la table MARD.Il suffit de positionner l’événement GET sur la table de niveau inférieur.
Exemple :
REPORT ZZEXEMPLE.TABLES : MARAV, MARD.GET MARD.WRITE : MARD-LGORT, MARD-MATNR, MARV-MAKTX.
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
A chaque BDL est associé au moins un écran de sélection.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’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.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. visualiser les durées d’exécution selon trois catégories
- instruction ABAP (EXPORT, IMPORT…),- accès à la base de données (SELECT SQL...)- système R/3 (chargement du programme…)