37
Programmation ABAP 4

Tuto Programmation ABAP IV : reportssap.technique.free.fr/doc/Tuto Programmation ABAP IV.doc · Web viewAfin de rendre ABAP IV indépendant du système de base de données relationnelle

  • Upload
    others

  • View
    22

  • Download
    1

Embed Size (px)

Citation preview

Programmation ABAP

4

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…)