Annonce commerciale :

  
 English (United States) Français (France)
Register  
 
Sunday, May 20, 2012

Annonce commerciale

Articles
02

Introduction aux mathématiques sur SAP en ABAP : 

Soyons direct. ABAP sur SAP n'est pas fait pour faire du gros calcul... Si on compare de l'ABAP avec d'autres langages comme Java et C# l'écart de performance en la défaveur de ABAP sur la même plateforme est de presque x10.... 

Donc dans le domaine du forecasting, des estimations, du calcul massique, il est réellement préférable d'aller vers d'autres langages et plateformes. 

MAIS (bah oui y'a un mais), avec intelligence et pour des besoins moyens il est tout à fait possible de faire des mathématiques en ABAP.

Comme toujours, l'important c'est le métier, donc dans notre cas avoir une compréhension intelligente des mathématique.

 

Un type de donnée idéal

En ABAP nous avons un type flottant (I). Il suffit donc de déclarer ses variables comme suit : 

DATA: valeur1 type F, valeur2 type F.

 Toutefois le type Decimal est aussi utilisable est a ses avantages. 

Des fonctions pour manipuler des nombres en ABAP (décimal)

Voila un exemple simple

DATA n TYPE p DECIMALS 2.
DATA m TYPE p DECIMALS 2 VALUE '-9.52'.

n = abs( m ).   WRITE:   'ABS:  ', n.  '// Valeur absolue
n = sign( m ).  WRITE: / 'SIGN: ', n.  '// le signe -1 = négatif
n = ceil( m ).  WRITE: / 'CEIL: ', n.  '// la valeur entière supérieur
n = floor( m ). WRITE: / 'FLOOR:', n.  '// la valeur entière inférieur
n = trunc( m ). WRITE: / 'TRUNC:', n.  '// la partie entière
n = frac( m ).  WRITE: / 'FRAC: ', n.  '// la partie décimale 

Le résultat sera le suivant

 

ABS:              9.52

SIGN:             1.00-

CEIL:             9.00-

FLOOR:            10.00-

TRUNC:            9.00-

FRAC:             0.52-

 

Jouer avec ce code en changeant le nombre de décimals (décimals 3 par exemple) et la valeur (par exemple -9.536)...

Fonctions pour les nombres flottants en ABAP sur SAP

N'oubliez pas que SAP fait de l'autoboxing, c.à.d qu'il adapte les formats de données aux nécessités de la fonction. 

On distingue plusieurs catégories de fonction : 

  • Les fonctions trigonométriques : 
    • sin ( valeur ). // sinus
    • cos( valeur ). // cosinus
    • tan( valeur).   // tangeante
    • asin( valeur ). // arc sinus
    • acos( valeur ). // arc cosinus
    • atan( valeur ). // arc tangeante.
  • les fonctions hyperboliques :
    • cosh( valeur ). 
    • sinh( valeur ).
    • tanh( valeur ).
  • les exponentiels :
    • exp( valeur ).
  • Les logarythmes :
    • log( valeur ).  // logarythme naturel 
    • log10( valeur ). // logarythme de base 10
  • La racine carré :
    • sqrt( valeur ). 

 

ABAP contre C# 

Je vous propose ici un code en ABAP a comparer avec du C#

ABAP : 

REPORT  ZMATH01.
DATA: t1 TYPE i, t2 TYPE i, delta(16) TYPE p.
  GET RUN TIME FIELD t1.
DATA: moncompteur type i.
  moncompteur = 0.DATA: result type F.
DO 10000000 times.

  result =  SQRT( SY-INDEX ).

ENDDO.
GET RUN TIME FIELD t2.
delta = t2 - t1.
WRITE: / 'Time:', delta COLOR COL_TOTAL.     

C# : 

            int imax = 10000000;
            DateTime start = DateTime.Now;
            for (int i = 0; i < imax; i++)
            {
                double result = Math.Sqrt(i); 
            
            }
            DateTime end = DateTime.Now;
            TimeSpan spent = end - start;
            Console.WriteLine("{0} racine calculé en {1}", imax, spent.ToString());
            Console.WriteLine("end");



La comparaison sera toujours en faveur, sur la même plateforme, de Java ou .net.... 

 

Quelle stratégie choisir ? 

Pour du calcul tout dépend de la quantité de calcul...

Pour des calculs relativements simples pour une application SAP GUI, WebAS, WebDynPro, l'écriture de fonctions RFC suffit amplement. Dans ce cas il suffit juste de bencher sa fonction (avec SE30) et voir si elle n'impacte pas trop sa solution.

Pour des calculs plus importants comme la simulation, le forecasting, des modélisations, il est préférable de développer un Proxy Server en .net ou JAVA. Ainsi on développe en C# ou Java des fonctions mathématiques qui seront mises à disposition des développeurs ABAP pour qu'elles soient intégrées de manière transparente.

Pour des calculs hyper massiques, la meilleure solution reste le Proxy Server mais qui exposera des fonctions qui elles mêmes invoqueront du code C/C++ compilé avec toutes les options en terme de support de multiprocesseurs, parallèlisme, grid, etc... 

Dans tous les cas il faut surtout exposer des fonctions aux ABAPEURS pour qu'eux ne se posent pas la question du quoi.

 

A vous de jouer !

En vous inspirant de mon article sur les équations du second degré sur mon blog je vous invite à refaire le code en ABAP et à le tester. Amusez vous.... 

 

Jérôme Fortias

Actions: E-mail | RSS comment feed |

Comments

There are currently no comments, be the first to post one.

Post Comment

Only registered users may post comments.
  
 Print   


Les maques SAP, ABAP, BSP, Microsoft, .net, sont des marques déposées par leurs ayant-droiits.

Le site www.sap-integration.net est un site indépendant de SAP et de Microsoft et de tout autre éditeurs de logiciels ou fabricants de matériels.