(Rappel : L’ABAP est le langage dans lequel tout SAP R/3 est développé. On parle là d’un ERP à beaucoup de millions d’euros de license, avec une industrie entière qui gravite autour. Il montre parfois qu’il a trois décennies d’âge.)
Ce code compile (sans rien faire mais ce n’est pas le problème) :
REPORT ZCCO_TEST.
IF 1 > 2 .
ENDIF.
Ceci ne compile pas :
REPORT ZCCO_TEST.
IF ( 1 * 5 ) > 2 .
ENDIF.
“Relational operator "*" is not supported
”, qu’il dit. On ne fait donc pas de calcul dans une condition. Je suis condamné à utiliser une variable de travail (une de plus).
Ceci non plus ne passe pas :
REPORT ZCCO_TEST.
IF 1>2.
ENDIF.
Pourquoi ? Il manque des espaces autour du >
. Un scandale, effectivement.
C’est pareil pour les parenthèses (IF ( 1 > 2 ) .
), il faut les séparer de ce qu’elles contiennent par des espaces. Sauf dans le cas d’un ordre SQL comme SELECT... INTO (variable1, variable2) WHERE...
où, là, les parenthèses doivent être collées au reste.
Les limites de ce genre sont pléthore en ABAP. Je hais ce langage. On peut faire son boulot avec, mais c’est comme taper sur un clavier avec des moufles.
Il y a aussi des incohérences un peu pénibles. Par exemple, deux syntaxes totalement différentes selon que l’on recherche une donnée dans une table réelle (de la base de données) ou interne (un bête tableau en mémoire, de même structure que la table réelle).
Le premier ressemble à ça (recherche d’un poste de commande sur sa clé primaire constituée de vbeln
et posnr
) :
SELECT ... FROM vbap
WHERE vbeln = ...
AND posnr = ...
Par contre pour la table interne :
READ TABLE t_vbap ...
WITH KEY vbeln =...
posnr = ...
Vous avez remarqué : dans un cas il y a un AND
entre les deux critères de recherche. Dans l’autre, non. Pourquoi ? Mystère. Petit détail, oui. Mais à la fin de la journée on en perd, des minutes à faire plaisir au compilateur.
11 réactions
1 De Jid - 19/07/2006, 14:10
Comme quoi j'ai bien raison d'être fier de mon COBOL ;-)
2 De Le webmestre - 19/07/2006, 18:38
Ouais, le cobol peut pas être pire. Je connais pas mais d’après ce que j’en vois et entends, ça m’ennuierait assez vite... L’ABAP, lui, m’énerve.
3 De UKRAINIEN - 12/02/2007, 13:26
Bonjour,
Je suis désolé que l'ABAP présente autant d'incovénient à votre égard. Personnellement, je forme des développeurs dans ce langage, des chômeurs ou des étudiants, et je constate ceci:
il est plus facile de développer en ABAP qu'en VB,
il est facilement apparenté par mes stagiaires à du PHP, dans son mode de fonctionnement.
Ceux sont les propos de mes stagiaires.
Il a des obligations syntaxiques : mais comme tout langage. La notion des tables internes lui est propres, ainsi que certaines syntaxes SQL.
Personnellement je ne recommande pas d'apprendre à développer en premier en ABAP, mais plutôt dans les autres langages (C, VB, PHP). après mes stagiaires le trouvent extrèmement simple, facile à utiliser.
4 De Le webmestre - 12/02/2007, 21:05
@UKRAINIEN : La facilité d’un langage est un piège, il peut être conceptuellement simple (et l’ABAP n'est pas, sur le principe, très compliqué) tout en rendant fastidieux tout développement important, tout comme le BASIC de 1985 était simple mais encourageait des habitudes de programmation détestables. D’autre part, c'est en pratiquant que l’on découvre les limites d’un outil, je ne pense pas que des stagiaires soient très qualifiés.
La comparaison avec le PHP me semble osée : concepts, syntaxe et utilisation n’ont rien à voir. VB est aussi différent, mais plus « brouillon » (du moins le VB6 - et en tout cas plus polyvalent.
Je suis d’accord qu’il ne faut surtout pas commencer par l’ABAP comme premier langage, évidemment, un premier langage se doit d'avoir des concepts « propres » (j’aimais bien le Pascal...).
Pour revenir au sujet de ce billet : le problème principal tenait à la rigidité syntaxique sur des choses toutes bêtes comme IF 1>2, les espaces autour des parenthèses, ou l’impossibilité d’utiliser des fonctions en ligne. Aucun langage digne de ce nom que je connais n’a ces restrictions arbitraires.
J’ai une objection de principe contre les tables internes (miroir de ce qui se trouve en base avec d’inévitables problèmes de synchro, au lieu de tirer parti de celle-ci et de la notion de transaction), mais je pardonne à cause de l’historique chargé du produit, et c’est implémenté de manière acceptable.
5 De Mardouks - 05/07/2007, 14:59
Bonjour,
Il est vrai que ce language impose ses règles synthaxiques un peu particulières. Je travaille sur SAP depuis bientôt deux ans et j'ai débarqué avec mon php en tête.
Il ne faut pas oublié le contexte:
- Effectivement le language est aussi vieux que SAP (30ans et des poussières )
- Il est très difficile de faire évolué un language sur sa synthaxe tout en gardant une rétro-compatibilité. On change pas de version de SAP comme de version PHP. SAP tente de passer à l'objet par exemple mais très difficilement vu son large domaine d'application.
- Je trouve que l'ABAP est très orienté traitement de données en masse et sa 'simplicité' synthaxique aide beaucoup pour ce type de travail.
6 De BERNARD"' - 14/12/2007, 17:55
Ben celui qui n'aime pas l'Abap n'a qu'a continué avec les langages exotiques ou soit disant plus puissant je supposes que le C C++ j'en passe et des meilleurs vous satisfont surement plus sauf que là comme vous dites on s'adresse à un ERP qui est capable de faire plus qu'un simple calcul donc il vaut meiux chercher du boulot que de continuer à faire de l'Abap
A+
7 De Le webmestre - 15/12/2007, 10:46
@BERNARD : « il vaut mieux chercher du boulot que de continuer à faire de l’Abap » : et bien justement, l’Abap a justement une sacrée tendance à être délocalisé en Inde, il vaut mieux essayer de se trouver une autre branche...
8 De Nico - 01/07/2008, 18:17
Ah la laa... Arrivé en fin d'école d'ingénieur, j'ai tenté un stage en SAP car je ne connaissais pas du tout. Je suis arrivé plein d'espoir avec mon bagage informatique prêt à accueillir un nouveau langage, tout heureux et naîf, quittant son eclipse et son visual studio pour arriver dans les locaux d'une SSII ou on m'a dit : 'Tu vas voir, SAP, c'est enorme'. Et puis, je me suis retrouvé en face de mon écran, et là tout à coup, l'énorme décéption... J'ai jms vu un langage aussi moche, aussi pourri, aussi mal traduit, aussi syntaxiquement maladroit. J'ai eu envie de vomir la première fois que j'ai vu qu'il fallait mettre un point à la fin de toutes les instructions, que les variables ne pouvaient pas faire plus de 15 cars, qu'il n'y avait pas de casse, que les programmes standards étaient en allemands.... AAAAAH..... il me reste plus que 2 mois mais je suis trop pressé de partir... Je ne supporte pas du tout... Certes, l'ABAP remplit bien ses fonctions quand on voit le monstre qu'est SAP... Mais franchement, ils ont fait des efforts pour rendre le système hyper moche et non-convivial pour tous, développeurs comme utilisateurs... Les seuls qui y trouvent leurs comptes sont les non-informaticiens qui se plaisent à gagner un bon salaire pour paramétrer un système hyper lourd...
9 De Eogan - 30/07/2008, 15:38
Je ne peux que confirmer ce qui a été dit précédemment (je suis aussi stagiaire dans une SSII et je fais du développement ABAP).
Un exemple sur lequel je me bats depuis tout à l'heure :
IF VTTK-DTDIS IS NOT INITIAL OR VTTK-DPREG IS NOT INITIAL OR VTTK-DPLBG IS NOT INITIAL.
PERFORM MAJ_FLAG.
ENDIF.
Cette condition paraitrait logique. Seulement, non, le OR enchainé ainsi marche avec des expressions algébriques, pas avec le "IS NOT INITIAL" (qui équivaut à dire différent de null)
J'ai ensuite essayé (à l'aide du message d'erreur de compilation et en réflechissant pendant 3 bonnes minutes):
IF VTTK-DTDIS OR
VTTK-DPREG OR
VTTK-DPLBG IS NOT INITIAL.
PERFORM MAJ_FLAG.
ENDIF.
Ca ne marche toujours pas. Je me dis qu'il faut utiliser des parenthèses:
IF (VTTK-DTDIS OR
VTTK-DPREG OR
VTTK-DPLBG) IS NOT INITIAL.
PERFORM MAJ_FLAG.
ENDIF.
Mais non. Cruelle erreur, il faut des espaces.
IF ( VTTK-DTDIS OR
VTTK-DPREG OR
VTTK-DPLBG ) IS NOT INITIAL.
PERFORM MAJ_FLAG.
ENDIF.
Là en fait, ça marche toujours pas. J'ai toujours pas trouvé la solution. (Erreur de compil : Relational Operator OR is not supported (au moins, les erreurs de compil sont en anglais ... mais bon, celles d'éxecution sont en allemand))
Quand, on ajoute à ça que le programme met 45 secondes à afficher un message pour confirmer la demande de compilation puis qu'on en a après pour une bonne minute. Croyez moi, on s'arrache les cheveux.
On notera au passage le nom des variables qui sont super explicites.
Par contre, ceux qui réussisse à passer outre cet environnement anti-convivial et ergonomique et cet enfer du développeur réussisse à bien gagner leur vie, c'est sur (un indépendant a refusé une mission de 6 mois à 450€ devant moi. Sachant que je gagne 600€/mois. Ca frustre).
10 De Eogan - 30/07/2008, 15:39
450€ par jour, je précise :D
11 De Eogan - 30/07/2008, 15:43
Et voilà, j'ai refais la première solution et ça marche.
L'ABAP est plein de mystère ...