Aller au contenu

Code opération RPG III / RPG/400 · IBM i (AS/400) · Sous-programmes et appels

DSPLY

Afficher un message

Affiche le contenu du facteur 1 dans un message au travail ou à une file de messages ; un résultat attend une réponse de l'utilisateur.

Syntaxe

     C           zone      DSPLY
     C           zone      DSPLY'QSYSOPR'
     C           zone      DSPLY          repons
Facteur 1 (18-27)
La zone ou le littéral à afficher : 52 caractères au plus. Un littéral tient dans les 10 colonnes : 8 caractères utiles, apostrophes comprises dans les 10.
Facteur 2 (33-42)
Facultatif : la file de messages qui reçoit le message. À blanc, le message part vers la file de l'utilisateur (ou QSYSOPR pour un travail sans écran, comme dans les exemples).
Zone résultat (43-48)
Facultatif : la zone qui reçoit la réponse tapée. Le programme attend alors cette réponse, ce qui bloquerait un travail par lots. À ne pas utiliser dans les exemples ni en traitement de nuit.
Effet
Le texte du facteur 1 est envoyé en message. Une zone numérique s'affiche sans virgule ni point décimal, sur toute sa longueur, avec le signe à droite (23400- pour -234,00) ; une zone alphanumérique s'affiche telle quelle. Aucun indicateur n'est modifié.

À quoi ça sert

DSPLY est le « print » du RPG III : afficher une valeur pendant la mise au point, informer l'opérateur, poser une question simple. Dans un traitement de nuit, c'est le moyen le plus rapide de voir où en est le programme.

Exemple 1 : 52 caractères, numériques

     H*  DSPLY : 52 caracteres au plus, numeriques sans virgule
     I              'ABCDEFGHIJKLMNOPQRST'C         L1
     I              'abcdefghijklmnopqrst'C         L2
     I              '0123456789AB'        C         L3
     C           L1        CAT  L2        LONG   52
     C                     MOVE L3        LONG
     C           LONG      DSPLY
     C                     Z-ADD123.45    MONT    72
     C           MONT      DSPLY
     C                     Z-SUB234       NEG     72
     C           NEG       DSPLY
     C                     Z-ADD7         PETIT   50
     C           PETIT     DSPLY
     C                     SETON                     LR

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

ABCDEFGHIJKLMNOPQRSTabcdefghijklmnopqrst0123456789AB
  12345
  23400-
    7

La zone LONG de 52 caractères s'affiche en entier. Les montants s'affichent sans virgule : 123,45 devient 12345, -234,00 devient 23400-, et un entier de 5 chiffres affiche 7 aligné à droite.

Exemple 2 : Libellé et valeur

     H*  DSPLY : libelle et valeur dans une zone alphanumerique
     I              'Total a payer : '    C         LIB
     C                     Z-ADD1450.5    TOTAL   72
     C                     MOVE TOTAL     ZTOT    7
     C           LIB       CAT  ZTOT      MSG    30
     C           MSG       DSPLY
     C                     SETON                     LR

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

Total a payer : 0145050

Un seul facteur 1 par DSPLY : pour joindre un libellé et un montant, on les assemble dans une zone alphanumérique avec CAT. Le montant devenu texte par MOVE garde sa forme brute à 7 chiffres sans virgule : 0145050 pour 1450,50. Le libellé est une constante nommée (spécification I), car un littéral de facteur 2 est limité à 8 caractères.

Le piège

52 caractères au maximum, vérifié à la compilation. Un DSPLY sur une zone de 60 caractères n'est pas tronqué : le compilateur le refuse, QRG7016 (gravité 20), « La longueur totale des zones associées à l'opération DSPLY est supérieure à 52 positions. » Coupez la zone avant d'afficher.

Un littéral en facteur 1 de plus de 8 caractères est refusé : DSPLY sur 'Total TTC' (9 caractères) donne QRG5150 (gravité 30), « Le littéral entré en Facteur 1 est incorrect. » Passez par une zone ou une constante nommée.

Pas de virgule à l'affichage. Un montant de 1250,50 apparaît comme 125050 : le lecteur doit connaître le nombre de décimales.

En RPG ILE full free

En RPG ILE, DSPLY est une instruction à part entière (dsply message;) qui accepte une expression, donc un libellé et une valeur dans le même appel avec %char. La limite des 52 caractères reste la même pour la partie texte.

dsply ('Total a payer : ' + %char(total));