Aller au contenu

Code opération RPG III / RPG/400 · IBM i (AS/400) · Calculs

XFOOT

Totaliser un tableau

Additionne tous les postes d'un tableau numérique et range la somme dans la zone résultat.

Syntaxe

     C                     XFOOTtableau   result  92
     C                     XFOOTtableau   result  92H
Facteur 1 (18-27)
Toujours vide.
Facteur 2 (33-42)
Le nom du tableau numérique, sans indice, déclaré en spécification E.
Zone résultat (43-48)
Reçoit la somme de tous les postes.
Longueur (49-51)
Longueur totale de la zone résultat, décimales comprises. Renseignée quand la zone apparaît pour la première fois dans le programme : c'est ce qui la définit. Sans longueur, une zone encore inconnue provoque QRG7030, « La zone ou l'indicateur n'est pas défini ».
Décimales (52)
Nombre de décimales de la zone résultat ; 0 pour un entier.
Colonne 53
H demande l'arrondi (demi supérieur) : si le résultat a plus de décimales que la zone résultat, le résultat est arrondi à la valeur la plus proche (1,09945 devient 1,10 pour deux décimales). Sans H, les décimales en trop sont simplement coupées, sans arrondi.
Indicateurs de conditionnement (9-17)
Facultatif : l'opération n'est exécutée que si les indicateurs indiqués ont l'état demandé.
Effet
La zone résultat contient la somme de tous les postes du tableau, ramenée à sa longueur et à ses décimales : décimales en trop coupées (arrondies avec H), chiffres de gauche perdus sans erreur.

À quoi ça sert

XFOOT (pour « cross foot ») évite la boucle d'addition sur un tableau : total des ventes mensuelles, des lignes d'une commande, des quantités par magasin. Le tableau est déclaré en spécification E avec son nombre de postes, sa longueur et ses décimales.

Exemple 1 : Total de quatre ventes

     H*  XFOOT : total d'un tableau
     E                    VTE         4  7 2
     C                     Z-ADD1200.50   VTE,1
     C                     Z-ADD800       VTE,2
     C                     Z-ADD350.25    VTE,3
     C                     Z-ADD99.99     VTE,4
     C                     XFOOTVTE       TOTAL   92
     C           'Total'   DSPLY
     C           TOTAL     DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

Total
   245074

La spécification E déclare VTE : 4 postes de 7 chiffres dont 2 décimales. Après le chargement des postes par Z-ADD (VTE,1…), XFOOT VTE TOTAL donne 1200,50 + 800 + 350,25 + 99,99 = 2450,74, affiché 245074.

Exemple 2 : Arrondi H et troncature

     H*  XFOOT : arrondi H et troncature
     E                    PRX         3  5 2
     C                     Z-ADD60.60     PRX,1
     C                     Z-ADD50.70     PRX,2
     C                     Z-ADD30.50     PRX,3
     C                     XFOOTPRX       SANSH   30
     C                     XFOOTPRX       AVECH   30H
     C                     XFOOTPRX       PETIT   20
     C           'Sans H'  DSPLY
     C           SANSH     DSPLY
     C           'Avec H'  DSPLY
     C           AVECH     DSPLY
     C           'Zone 2'  DSPLY
     C           PETIT     DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

Sans H
141
Avec H
142
Zone 2
41

Trois prix totalisent 141,80. Une zone entière sans H garde 141, avec H 142 ; une zone de 2 chiffres ne garde que 41 (le « 1 » de gauche est perdu, sans erreur).

Le piège

La zone résultat doit être assez grande pour la somme de tous les postes. Dans le second exemple, la zone de 2 chiffres reçoit 141 et affiche 41, sans erreur ni indicateur.

Le tableau doit être déclaré en spécification E avant les spécifications de calcul, avec son nombre de postes (colonnes 36-39), sa longueur (40-42) et ses décimales (44).

En RPG ILE full free

En RPG ILE full free, la fonction intégrée %XFOOT renvoie la somme des postes d'un tableau.

dcl-s vte packed(7: 2) dim(4);
total = %xfoot(vte);