Title: Programmation ABAP IV : reports
1- Programmation ABAP IV reports
2Reporting ABAP IV Objectifs
- 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
3Reporting 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
4Chapitre 1Reporting ABAP IVGénéralités ABAP
IV
5Généralités ABAP IV Syntaxe
- Le langage de programmation ABAP IV est
constitué des éléments de syntaxe suivants - Phrases
- Mot-clés
- Commentaires
6Syntaxe 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. - REPORT ZZZFOR01.
- DATA VAR01, VAR02.
- WRITE Exemple.
7Syntaxe 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 contrôle IF, WHILE, CASE ...
- événementiels GET, AT USER-COMMAND ...
8Syntaxe Commentaires
- Ligne entière astérisque en début de ligne
- Partie restante dune ligne guillemet devant le
commentaire - REPORT ZZZFOR01.
- Commentaire général
- WRITE 'Premier programme '. " commentaire de ligne
9Généralités ABAP IV Gestion événementielle
- Lexécution dun programme ABAP IV peut être
contrôlée par des événements temporels. - Ces événements sont déclenchés soit par dautres
programmes, soit par lintervention de
lutilisateur, soit par le système SAP. - La gestion de ces événements se fait grâce aux
mot-clés événementiels, auxquels on peut associer
un bloc de traitement. - Attention un programme ABAP IV ne sexécute pas
nécessairement dans lordre où il est écrit
10Généralités ABAP IV Gestion événementielle
Programme ABAP IV
Contrôle externe
Mot-clé événementiel
Bloc de traitement Contrôle interne
Contrôle externe
Mot-clé événementiel
Bloc de traitement Contrôle interne
11Généralités ABAP IV AIDE
- Une aide sur le langage ABAP est disponible à
tout moment - dans l éditeur par la commande Help ltmot-clégt
- dans le programme se positionner sur un mot-clé
et faire F1 - dans laide on-line
- dans la documentation des mots-clés
- Pas de panique !! laide ABAP est très complète
et donne l exhaustivité des options des
mots-clés.
12Généralités ABAP IV Structure dun Report ABAP
IV
- 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.
13Identification de l ABAP
- Le nom d un ABAP spécifique commence toujours
par Z ou par Y et codé sur 40 caractères - Mot-Clé REPORT ltnom programmegt
- 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.
14Editeur 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ée
- la base de données logique
- le groupe d autorisation
15Commandes 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
16Commandes de l éditeur Abap
- Commandes
- fonctions d édition
- sauvegarder
- contrôler
- générer
- exécuter
17Chapitre 2Reporting ABAP IVDéclarations de
données
18Déclaration 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 .
19Dé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 lexécution du programme. - Les messages derreur et d information standard
SAP
20Déclaration de données Données internes
- DATA ZONE1(10) TYPE C VALUE TEST.
- Type Lg déf. Val.init. Cadrage
- Ccaractère 1 Space gauche
- Ddate (YYYYMMDD) 8 00000000 gauche
- I nombre entier 4 0 droit
- Ntexte 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 X00 gauche
21Dé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ée KNA1. -
- DATA NUMBER TYPE P DECIMALS 2.
- définit le nombre de chiffres après la virgule
pour un champ de type P uniquement.
22Dé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).
23Dé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.
24Dé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-ltnnngt. - Ex WRITE TEXT-100.
25Dé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 lutilisateur
- SY-DATUM date courante
- SY-UZEIT heure courante
-
26Déclaration des données Points à retenir
- TABLES déclaration des tables et structures du
dictionnaire de données SAP - DATA déclaration des données propres au
programme variables de travail, structures de
travail - la structure SYST ensemble des données système
SAP - les textes numérotés d un ABAP
27Chapître 3Reporting ABAP IVInstructions de
base
28Instructions de base ABAP IV
- Edition de données
- Affectation de zones
- Opérations sur des chaînes de caractères
- Opérations arithmétiques
- Traitements conditionnels
- Traitements de boucles
29Instructions de BaseEdition de données
- WRITE ltnom_zonegt.
- Affiche le contenu du champ ltnom_zonegt à
lécran. Le format dédition dépend du type du
champ. - type lg édition Justification
- C lg champ gauche
- D 8 gauche
- I 11 droit
- N lg champ gauche
- P 2 lg champ(1) droit
30Instructions de Base Edition des données
- WRITE AT /ltposgt(ltlggt) ltnom_zonegt.
- édite le champ ltnom_zonegt sur une nouvelle ligne
(/) en position ltposgt sur une longueur ltlggt. - 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.
31Instructions de Base Edition des données
- Options de mise en forme
- WRITE ltnom_zonegt ltoptionsgt.
- LEFT-JUSTIFIED Cadrage à gauche.
- CENTERED Centrage.
- RIGHT-JUSTIFIED Cadrage à droite.
- UNDER ltggt Alignement sur le champ ltggt
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 ltdgt ltdgt décimales après la
virgule. - USING EDIT MASK ltmgt utilisation d un masque
d édition spécifique - ...
32Instructions de Base Edition des données
- Options de couleur WRITE ltnom_zonegt COLOR ltngt.
-
- 1 ou COL_HEADING bleu gris
- 2 ou COL_NORMAL gris clair
- 3 ou COL_TOTAL jaune
- 4 ou COL_KEY bleu vert
- 5 ou COL_POSITIVE vert
- 6 ou COL_NEGATIVE rouge
- 7 ou COL_GROUP violet
33Instructions de baseAffectation de zones
- Réinitialisation dune zone CLEAR ltf1gt.
- La zone est réinitialisée selon son type.
- Affectation de zones MOVE ltf1gt TO ltf2gt.
- Si ltf1gt et ltf2gt sont de types différents, le
contenu de ltf1gt est converti selon le type de
ltf2gt. - Autre forme ltf2gt ltf1gt.
34Instructions de baseAffectation de zones
- 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 12
- MOVE ZONE1 TO ZONE3. ZONE3 001234
- MOVE ZONE4 TO ZONE3. ZONEB 456789
35Instructions de baseAffectation de zones
- Affectation de zones
- WRITE ltf1gt TO ltf2gt.
- La zone réceptrice ltF2gt 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
36Instructions de baseAffectation de zones
- MOVE-CORRESPONDING ltst1gt TO ltst2gt.
- Pour chaque champ ayant le même nom dans chacune
des deux structures ltst1gt et ltst2gt, le système
effectue lopération -
- MOVE st1-ltchampgt TO st2-ltchampgt.
-
37Instructions de baseAffectation de zones
- MOVE-CORRESPONDING exemple
DATA BEGIN OF STRUC2, ZONEB(3) TYPE
N, ZONEC(8) TYPE C, ZONED(5) TYPE P, END OF
STRUC2.
- DATA BEGIN OF STRUC1,
- ZONEA,
- ZONEB(3) TYPE N,
- ZONEC(8) TYPE C,
- END OF STRUC1.
MOVE-CORRESPONDING STRUC1 TO STRUC2. équivaut
à MOVE STRUC1-ZONEB TO STRUC2-ZONEB. MOVE
STRUC1-ZONEC TO STRUC2-ZONEC.
38Instructions de baseAffectation de zones
- MOVE ltf1gtltos1gt(ltlg1gt) TO ltf2gtltos2gt(ltlg2gt)
- Affectation de zones avec spécification doffset
et de longueur sous forme de variable ou de
constantes. - DATA ZONE1(4) TYPE C VALUE 1234,
- ZONE2(4) TYPE C VALUE ABCD.
-
- MOVE ZONE12(2) TO ZONE2(2) ZONE2 34CD
- A nutiliser quavec des zones de type C
39Instructions de baseOpération sur des chaînes de
caractères
- CONCATENATE ltf1gt ltf2gt into ltzgt concaténation
de chaînes de caractères - SPLIT ltzgt AT ltcgt INTO ltf1gt ltf2gt é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.
40Instructions de baseOpération sur des chaînes de
caractères
- TRANSLATE ltf1gt 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 ?
41Instructions de base Opérations Arithmétiques
- Addition
- ADD ltf1gt to ltf2gt.
- Équivalent à ltf2gt ltf2gt ltf1gt.
- ltf3gt ltf2gt ltf1gt.
- ADD-CORRESPONDING struc1 to struc2.
- Toutes les zones ayant le même nom des structures
struc1 et struc2 seront additionnées entre elles.
42Instructions de base Opérations Arithmétiques
- Soustraction
- SUBTRACT ltf1gt FROM ltf2gt.
- Équivalent à ltf2gt ltf2gt - ltf1gt.
- Autre forme ltf3gt ltf2gt - ltf1gt.
- SUBTRACT-CORRESPONDING struc1 FROM struc2.
- Toutes les zones ayant le même nom des structures
struc1 et struc2 seront soustraites entre elles.
43Instructions de base Opérations Arithmétiques
- Multiplication
- MULTIPLY ltf1gt BY ltf2gt.
- Équivalent à ltf1gt ltf1gt ltf2gt.
- 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.
44Instructions de base Opérations Arithmétiques
- Division
- DIVIDE ltf1gt BY ltf2gt.
- Équivalent à ltf1gt ltf1gt / ltf2gt.
- 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.
45Instruction de base Traitement Conditionnel
- Branchement selon une condition logique
- IF condition1.
- traitement.
- ELSEIF condition2.
- traitement.
- ELSE.
- traitement.
- ENDIF.
46Instruction de base Traitement Conditionnel
- Opérateurs logiques
- tous types de champs
- EQ equal to
- NE not equal to
- LT less than
- LE less than or equal to
- GT greater than
- GE greater than or equal to
champs de type C ou N CO Contains
Only CN Contains Not only CA Contains
Any NA contains Not Any CS Contains
String NS contains No String CP Contains
Pattern NP contains No Pattern
47Instruction de base Traitement Conditionnel
- Branchement conditionnel selon une valeur de zone
- CASE ltfgt.
- WHEN ltf1gt.
- ltstatement blockgt
- WHEN ltf2gt.
- ltstatement blockgt
- WHEN OTHERS.
- ltstatement blockgt
- ENDCASE.
48Instruction de base Traitement de boucle
- Boucle inconditionnelle
-
- DO ltngt TIMES.
- CHECK condition.
- IF condition.
- EXIT.
- ENDIF.
- traitement.
- ENDDO.
- Boucle conditionnelle
-
- WHILE condition.
- traitement.
- ENDWHILE.
49Instruction des base Traitement de boucle
- EXIT sortie de la boucle
- CONTINUE passage à l occurrence suivante
DO 4 TIMES. IF zone GT 100. CONTINUE.
ENDIF. ENDDO.
WHILE I gt 400. IF SY-SUBRC NE 0.
EXIT. ENDIF. ENDWHILE.
- Comment vont réagir les boucles dans chacun de
ces 2 cas ?
50Instructions de Base Points à retenir
- 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, CASEENDCASE instructions
conditionnelles - DO..ENDDO, WHILEENDWHILE instructions de
boucle - Dans l aide on-line ABAP, vous trouverez toutes
les options de ces instructions et d autres
instructions encore
51Chapitre 4Reporting ABAP IVTraitement des
tables SAP l instruction SELECT
52Traitement des tables SAP Open SQL
- Afin de rendre ABAP IV indépendant du système de
base de données relationnelle utilisé, SAP a créé
un ensemble dordres SQL appelé OPEN SQL. - 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). - Il est aussi possible de coder directement des
ordres Native SQL dans un programme ABAP IV.
53Sélection des données Lecture séquentielle
- Sélectionner toutes les données de plusieurs
lignes dune table - SELECT FROM dbtab
- WHERE champ1 valeur1
- AND champ2 valeur2 .
- WRITE dbtab-champ1, dbtab-champ2.
- ENDSELECT.
- SY-SUBRC 0 au moins une ligne sélectionnée
- 4 aucune ligne sélectionnées
54Sélection des données Lecture directe
- Sélectionner toutes les données dune seule ligne
de table - SELECT SINGLE FROM dbtab
- WHERE CLE1 valeur1
- AND CLE2 valeur2.
- 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 na pas été
trouvée
55SELECT 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
56SELECT fonctions d agrégat
- 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 ?
57SELECT jointures de table
- SELECT aliasdbtab1zone1 aliasdbtab2zone2
- INTO (dbtab1-zone1 , dbtab2- zone2)
- FROM dbtab1 AS aliasdbtab1
- INNER JOIN dbtab2 AS aliasdbtab2
- ON aliasdbtab1clé1 aliasdbtab2clé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
58SELECT jointures de table
- Exemple
- SELECT F1KUNNR F1NAME1 F2VBELN
- INTO (KNA1-KUNNR,KNA1-NAME1,VBAK-VBELN)
- FROM KNA1 AS F1 JOIN VBAK AS F2
- ON F1KUNNR F2KUNNR.
- WRITE / KNA1-KUNNR, 13 KNA1-NAME1, 50
VBAK-VBELN. - ENDSELECT.
59SELECT jointures de tables
VBAK commandes clients
KNA1 clients
JOIN
Résultat de la jointure
On remarque qu aucune jointure n a été faite
pour le client n 2300
60SELECT jointures de tables
- 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 aliasdbtab1zone1 aliasdbtab2zone2
- INTO (dbtab1-zone1 , dbtab2- zone2)
- FROM dbtab1 AS aliasdbtab1
- LEFT OUTER JOIN dbtab2 AS aliasdbtab2
- ON aliasdbtab1clé1 aliasdbtab2clé1
- WHERE ...
- WRITE / dbtab1-zone1, dbtab2-zone2.
- ENDSELECT
61SELECT jointures de table
- Exemple
- SELECT F1KUNNR F1NAME1 F2VBELN
- INTO (KNA1-KUNNR,KNA1-NAME1,VBAK-VBELN)
- FROM KNA1 AS F1
- LEFT OUTER JOIN VBAK AS F2
- ON F1KUNNR F2KUNNR.
- WRITE / KNA1-KUNNR, 13 KNA1-NAME1, 50
VBAK-VBELN. - ENDSELECT.
62SELECT jointures de tables
VBAK commandes clients
KNA1 clients
LEFT OUTER JOIN
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é
63SELECT 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 ltconditiongt.
- ENDSELECT.
64SELECT option HAVING
- 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 ?
65SQL 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 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
66Sélection des donnéesCritères de sélection
- SELECT-OPTIONS ltseltabgt FOR ltdbtab-field1gt.
- définit un critère de sélection pour le champ
dbtab-field1 - SELECT FROM dbtab
- WHERE ltfield1gt IN ltseltabgt.
-
- 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
67Sélection des donnéesParamètres
- Linstruction PARAMETERS permet de définir une
variable en saisie sur lécran de sélection qui
na 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
68SAP - SQL Points à retenir
- 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
69Reporting ABAP IVChapitre 5Modularité
70Reporting ABAP IVModularité
- Eviter les blocs de traitement redondants
- Accroître la lisibilité dun programme et donc
faciliter sa maintenance et son évolution - SAP propose les techniques de modularisation
suivantes - Les programmes includes
- les sous-routines
- les modules fonctions
71Modularité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 techniques - Création type de programme I dans les
attributs. - Utilisation dans un autre programme INCLUDE
ltincludegt.
72ModularitéLes sous-routines
- Une sous-routine est un bloc de traitement que
lon peut appeler plusieurs fois dans un
programme. - Usage sans paramètres
- PERFORM ltsousroutinegt. Appel de la routine
- FORM ltsousroutinegt . Définition de la routine
- Bloc de traitement.
- ENDFORM.
73ModularitéLes sous-routines
- passage de paramètres par référence.
- PERFORM ltsousroutinegt TABLES lttab1gt lttab2gt
USING ltp1gt ltp2gt ltp3gt CHANGING ltp4gt ltp5gt. - FORM ltsousroutinegt TABLES ltftab1gt ltftab2gt
USING ltfp1gt ltfp2gt ltfp3gt CHANGING ltfp4gt
ltfp5gt. - Bloc de traitement.
- ENDFORM.
74ModularitéLes sous-routines
- Passage de paramètres par valeur
- FORM ltsousroutinegt USING VALUE(ltfp1gt)
- CHANGING VALUE (ltfp2gt). Bloc de traitement.
- ENDFORM.
- Les paramètres formels sont créés comme copies
des paramètres actuels . - USING Une modification du paramètre formel na
pas deffet sur le paramètre actuel. - CHANGING Une modification du paramètre formel
entraîne la modification du paramètre actuel.
75ModularitéLes sous-routines
- Il est possible dappeler une sous-routine
définie dans un programme extérieur - PERFORM ltsousroutinegt(ltprogrammegt) TABLES
... USING .... CHANGING ... - Les sous-routines peuvent alors être définies
dans un programme non exécutable de type S (Pool
de sous-routines).
76Modularité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 lon peut en créer de nouveaux. - La définition des paramètres dimport/export
ainsi que le gestion des erreurs est
standardisée. - Il est possible de tester indépendamment un
module de fonction. (bouton Test Ind)
77Module de FonctionCréation
- La gestion des modules de fonction se fait par la
transaction SE37. - Les étapes de la création sont les suivantes
- Création dun 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
78Module de FonctionUtilisation
- Lappel dun module fonction dans un programme
ABAP se fait de la façon suivante - CALL FUNCTION ltfonctiongt
- EXPORTING f1 a1 .... fn an IMPORTING
f1 a1 .... fn an CHANGING f1 a1 ....
fn an TABLES f1 a1 .... fn
an EXCEPTIONS 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.
79Module de FonctionUtilisation
- 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
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 SY-SUBRC est
différent de 0, SY-SUBRC contient la valeur de
l exception l exception étant le motif
d erreur.
80Module de FonctionExemple
- CALL FUNCTION 'STRING_CONCATENATE'
EXPORTING STRING1 MOT1 STRING2
MOT2 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.
81Reporting ABAP IVChapitre 6 Tables Internes
82Tables 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é.
83Tables 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. - 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.
84Tables internes 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 daccès est constant quelque soit le nombre
denregistrements. On ne peut y accéder quen
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.
85Tables internes 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.
86Les tables internesStructure
Table
read table
modify table
Work Area
87Tables internesAjout
- APPEND lttabnamegt.
- 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 lttabnamegt INDEX ltidxgt.
- Insère un poste à la ligne ltidxgt. L'index des
postes suivants est incrémenté de 1.
88Tables internesMise à jour
- MODIFY lttabnamegt INDEX ltidxgt .
- Modifie la ligne ltidxgt. Si on ne précise pas
d index alors l instruction MODIFY doit être
incluse dans un LOOP. - Ajout d'un poste en fonction de la clé standard
- COLLECT ltitabgt
- 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.
89Les tables internesMise à jour (Exemple)
- 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 40000 Dupont Lyon
50000
90Tables internesSuppression
- DELETE lttabnamegt INDEX ltidxgt .
- Supprime la ligne ltidxgt
- CLEAR lttabnamegt.
- Initialise la work area (i.e. l enregistrement
courant) - REFRESH lttabnamegt.
- Supprime tous les postes de la table. Attention,
la work area n est pas initialisée.
91Tables internesLecture séquentielle
- 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.
92Tables internesLecture directe
- En utilisant l'index
- READ TABLE ltitabgt INDEX ltidxgt.
- En utilisant la clé standard
- READ TABLE ltitabgt .
-
93Tables internesTris / 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.
94Tables internesRuptures
- LOOP AT itab.
- AT FIRST. ENDAT.
- AT NEW ltfgt. ENDAT.
- AT END OF ltfgt. 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
95Tables internesRuptures
- AT NEW ltfgt. ENDAT les instructions incluses à
l intérieur de cet événement seront exécutés à
chaque début de rupture de la zone ltfgt. - AT END OF ltfgt. ENDAT les instructions incluses
à l intérieur de cet événement seront exécutés à
chaque fin de rupture de la zone ltfgt. ( à chaque
fin de changement de valeur de ltfgt)
96Tables internesRuptures
- Ruptures multi-critères
- SORT ITAB BY ltfgt ltggt.
- LOOP AT ITAB.
- AT NEW ltfgt. ENDAT
- AT NEW ltggt. ENDAT.
- ..
- AT END of ltggt ENDAT.
- AT END of ltfgt ENDAT
- ENDLOOP
- Le contrôle de rupture effectué tient compte de
toutes les colonnes à gauche de ltggt. AT NEW ltggt
signifie que la rupture se base sur la
concaténation des champs à gauche de la zone ltggt
c est à dire zone ltfgt la zone ltggt.
97Reporting ABAP IVChapitre 7 Gestion des
Fichiers
98Fichiers 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.
99Fichiers extractsDéfinition des enregistrements
- Les groupes de zones FIELD-GROUPS ltfggt.
- 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
100Fichiers extractsDéfinition des enregistrements
- Affectation des zones à un groupe de zone
- INSERT ltf1gt ltf2gt ltf3gt INTO ltfggt.
- 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.
101Fichiers extractsCréation des enregistrements
- EXTRACT ltfggt.
- Crée un enregistrement contenant les valeurs des
zones du HEADER puis des zones du field-group
ltfggt au moment de l'EXTRACT. Les champs du HEADER
préfixent chaque enregistrement pour former une
clé de tri. - EXTRACT DIVISION.
- EXTRACT MAGASIN.
HEADER
DIVISION
MAGASIN
102Fichiers extractsLecture
- SORT Tri selon l'ordre des champs du HEADER
- Balayage
- 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.
103Fichiers extractsLecture
- 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.
104Comparaison 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 -gt Abap Workbench -gt Test -gt
Analyse durée exécution
105Fichiers du serveur dapplicationOuverture
- OPEN DATASET ltdsngt ltoption1gt ltoption2gt.
- Si le système ne peut pas ouvrir le fichier
SY-SUBRC 8. - option1
- FOR INPUT en mode lecture
- FOR OUTPUT en mode écriture
- FOR APPENDING en mode écriture en fin de
fichier - option2
- IN TEXT MODE en mode text
- IN BINARY MODE en mode binaire (défaut)
106Fichiers du serveur dapplicationLecture
- READ DATASET ltdsngt INTO ltstructuregt.
- Lecture dun enregistrement du fichier ltdsngt
dans la variable ltstructuregt. En fin de fichier,
SY-SUBRC est différent de zéro. - Exemple
- DO.
- READ DATASET ltdsngt INTO ltstructuregt.
- IF SY-SUBRC NE 0.
- EXIT.
- ENDIF.
- Traitement.
- ENDDO.
107Fichiers du serveur dapplicationEcriture -
Fermeture
- TRANSFER ltstructuregt TO ltdsngt.
- Transfère le contenu de la variable ltstructuregt
dans le fichier ltdsngt. - CLOSE DATASET ltdsngt.
- Ferme le fichier ltdsngt.
108Fichiers du serveur de présentationFonction
UPLOAD
- Cette fonction permet de charger dans une table
interne un fichier du serveur de présentation - - Paramètres dexport
- 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. - WK1 fichiers Excel et Lotus files sauvegardés
comme feuilles WK1. - - Paramètre table table interne ABAP IV
109Fichiers du serveur de présentationFonction
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.
110Reporting ABAP IVChapitre 8 Concepts de
programmation avancée
111Report interactifPré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).
112Report interactifMENU PAINTER (SE41)
- L interface de gestion de surface se décompose
en 3 éléments pour chaque statut géré
Barre de menus
Barre de fonctions
Barre d outils
113MENU PAINTERBarre 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.
114MENU PAINTERBarre 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.
115MENU PAINTERBarre 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.
116Report interactif ABAPCommande 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.
117Report interactifCommande 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éclecher l événement est stocké
dans le champ SY-UCOMM.
118Débogeur SAP
- Le débogeur est un outil d exécution de
programme en mode pas à pas. Le contenu des
champs est visualisable.
119Dé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.
120Trace 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 -gt Abap Workbench -gt Test -gt
Trace SQL
121Trace SQL
- Écran de base
- 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. - Après avoir arrêté la trace, ce fichier est
visualisable par la fonction List Trace .
122Sélection des données Base de Donnée Logique
- Une base de données logique (BDL) est une méthode
particulière daccè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
dentrées de tables de base de données selon un
ordre hiérarchique. - Transaction SE36 Gestion des bases de données
logiques
123Sélection des données Base de Donnée Logique
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 .
124Base de Donnée Logique l événement GET
- Syntaxe GET ltdbtabgt.
- L événement GET est déclenché dans le programme
quand SAP a mis à disposition les données de la
table ltdbtabgt. - 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.
125Base 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. - 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.
126Base de Donnée Logique Ecran de sélection
- A chaque BDL est associé au moins un écran de
sélection. - Il permet à lutilisateur de saisir des valeurs
de critère de sélection afin de restreindre la
sélection des données (Ex numéro darticle). - Lapparition 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 linstruction TABLES.
127Messages d erreurs
- MESSAGE tnnn(mid).
- MESSAGE ID mid TYPE t NUMBER nnn.
- Produit un message de type t , ayant pour
numéro nnn et appartenant à la classe de
message mid . - Types de messages
- I - Info Press ENTER to continue
- W - Warning Correction possible
- E - Error Correction required
- A - Abend Transaction terminated
- X - Exit Transaction terminated with
short dump - S - Success Message on next screen
128Message Classe de message
- On maintient les classes de messages et les
messages qu il contient par la transaction SE91
ou le menu Abap workbench - Développement -
Environnement de développement - Messages. - 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 E456(99) WITH sy-uname sy-mandt
- Les deux variables passées en paramètres se
substitue de façon en série aux .
129Comparaison 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. - visualiser les durées d exécution selon trois
catégories - - instruction ABAP (EXPORT, IMPORT),
- - accès à la base de donnée (SELECT SQL...)
- - système R/3 (chargement du programme)