Coder en RPG III, du premier programme au débogage
Trois programmes RPG/400 complets, écrits colonne par colonne : un Hello world, une sortie de stock sur un fichier à clé, puis un écran qui lit un fichier physique et un fichier logique. Pour chacun, la compilation, le débogage dans STRISDB et le test, tels qu'ils ont tourné sur un IBM i 7.5.
En une phrase
Coder en RPG III (RPG/400), c'est écrire un membre source
dans un fichier QRPGSRC, chaque information à une colonne précise,
créer d'abord les fichiers qu'il utilise, le compiler par CRTRPGPGM, puis le
suivre ligne à ligne dans STRISDB.
Préparer l'atelier
Le RPG III est né sur le System/38 ; sur l'AS/400, IBM a renommé son compilateur RPG/400. C'est
lui qui compile encore aujourd'hui les programmes en colonnes : sur notre IBM i 7.5, l'en-tête du
listing indique 5770WDS V7R5M0 et IBM RPG/400. Pour l'histoire, voir
AS/400 et IBM i et le cycle GAP.
Il faut une bibliothèque et trois fichiers source : un pour le RPG, un pour les DDS (fichiers et écrans), un pour le CL. Avec une longueur de 92, chaque ligne garde 80 caractères de source, toute la largeur d'une ligne RPG.
CRTLIB LIB(JOBIR3) TEXT('job-i.fr : coder en RPG III')
CRTSRCPF FILE(JOBIR3/QRPGSRC) RCDLEN(92)
CRTSRCPF FILE(JOBIR3/QDDSSRC) RCDLEN(92)
CRTSRCPF FILE(JOBIR3/QCLSRC) RCDLEN(92)
ADDLIBLE JOBIR3
Le source se tape dans SEU, l'éditeur 5250, que l'on ouvre par l'option 2 de PDM ou directement :
WRKMBRPDM FILE(JOBIR3/QRPGSRC)
STRSEU SRCFILE(JOBIR3/QRPGSRC) SRCMBR(SORTIE)

RPG dit à PDM et à SEU qu'il s'agit de RPG III ; l'option 14 compile.
FMT du haut rappelle les colonnes de la spécification en cours.Le meilleur ami du débutant est la touche F4 : sur une ligne, elle ouvre une invite où chaque zone a son libellé. Plus besoin de compter les colonnes.

CHAIN : PCODE en facteur 1, ARTICLE en facteur 2, et l'indicateur 91 sous >>, la première paire d'indicateurs résultants.La spécification C, colonne par colonne
Un programme RPG III est une suite de spécifications, toujours dans cet ordre : H (contrôle),
F (fichiers), E (tableaux), L, I (entrées), C (calculs), O (sorties). La lettre est en colonne 6.
Le travail se fait dans les lignes C, dont SEU donne la règle :
CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEqComments.
| Colonnes | Zone | Ce qu'on y met |
|---|---|---|
| 6 | Type de spécification | C pour un calcul. Un * en colonne 7 fait de la ligne un commentaire. |
| 7-8 | Niveau | Niveau de rupture (L1 à L9, LR) ou SR pour une sous-routine. Vide la plupart du temps. |
| 9-17 | Indicateurs de condition | Jusqu'à trois indicateurs (N pour la négation) : la ligne ne s'exécute que s'ils sont vrais. |
| 18-27 | Facteur 1 | Premier opérande : la clé d'un CHAIN, la zone comparée par un IFxx. |
| 28-32 | Code opération | Cinq caractères au plus : CHAIN, MOVEL, UPDAT (et non UPDATE). |
| 33-42 | Facteur 2 | Second opérande : le fichier lu, la valeur ajoutée, le littéral déplacé. |
| 43-48 | Résultat | La zone qui reçoit le résultat. Six caractères au plus pour un nom. |
| 49-51 | Longueur | Déclare la zone résultat à sa première apparition, cadrée à droite. |
| 52 | Décimales | Nombre de décimales : une zone avec une décimale, même 0, est numérique. |
| 53 | Extension | H arrondi, N lecture sans verrouillage, P complément à blanc. |
| 54-59 | Indicateurs résultants | Trois paires : supérieur ou non trouvé (54-55), inférieur ou erreur (56-57), égal ou fin de fichier (58-59). |
| 60-74 | Commentaire | Texte libre en fin de ligne. |
Conséquence directe : un littéral en facteur 1 ou 2 tient en dix positions, apostrophes comprises, soit 8 caractères utiles. C'est pour cela que le premier programme construit son message en deux fois.
Programme 1 Hello world
Hello world : quatre lignes de calcul
C* HELLO : le premier programme RPG III
C* Construit le message dans la zone MSG, puis l'affiche.
C MOVEL'Hello' MSG 13
C MOVE 'world !' MSG
C MSG DSPLY
C SETON LR
MOVEL'Hello' MSG 13- Déclare la zone MSG de 13 caractères (longueur en 49-51) et y place « Hello » à gauche (MOVEL, move left). Le reste est à blanc.
MOVE 'world !' MSG- MOVE cadre à droite : « world ! » occupe les 7 dernières positions. MSG vaut maintenant « Hello world ! ».
MSG DSPLY- Affiche le contenu du facteur 1.
SETON LR- Allume LR (last record) : le programme se termine et ferme ce qu'il a ouvert. Sans lui, le cycle du RPG relancerait les calculs sans fin.
Ce programme n'a ni spécification F ni fichier : il se compile tout de suite.
CRTRPGPGM PGM(JOBIR3/HELLO) SRCFILE(JOBIR3/QRPGSRC) OPTION(*SRCDBG)
CALL HELLO

CALL QCMD) avec F10, qui inclut les messages détaillés.À retenir
- Une zone se déclare dans le calcul où elle apparaît pour la première fois, avec sa longueur.
- MOVEL cadre à gauche, MOVE cadre à droite.
- Tout programme se termine par
SETON LR.
Programme 2 Sans écran, avec un PF à clé
Sortir du stock un article lu par sa clé
Le fichier d'abord. Un fichier physique ARTICLE, un enregistrement par code article, avec une clé unique :
A* ARTICLE : les articles en stock, un par code
A UNIQUE
A R ARTICLR TEXT('Article')
A ARTCOD 5A COLHDG('Code')
A ARTLIB 30A COLHDG('Libelle')
A ARTSTK 7P 0 COLHDG('Stock')
A K ARTCOD
CRTPF FILE(JOBIR3/ARTICLE) SRCFILE(JOBIR3/QDDSSRC)
INSERT INTO JOBIR3.ARTICLE VALUES
('A0001', 'Vis inox 4 x 40', 500), ('A0002', 'Écrou M6', 1200),
('A0003', 'Rondelle M6', 800), ('A0004', 'Clou 50 mm', 0),
('A0005', 'Boulon M8 x 60', 150)
Le programme SORTIE reçoit un code article et une quantité, retire la quantité du stock et rend un
code retour : OK, INC (article inconnu) ou INS (stock
insuffisant). Aucun écran : c'est le genre de programme qu'appellent un traitement par lots ou un
autre programme.
FARTICLE UF E K DISK
C* SORTIE : sortie de stock d'un article, sans ecran.
C* Parametres : code article, quantite (5 chiffres),
C* code retour : OK, INC (inconnu), INS (stock insuffisant)
C *ENTRY PLIST
C PARM PCODE 5
C PARM PQTEA 5
C PARM PRET 3
C*
C MOVE PQTEA QTE 50
C PCODE CHAINARTICLE 91
C *IN91 IFEQ '1'
C MOVE 'INC' PRET
C ELSE
C QTE IFGT ARTSTK
C MOVE 'INS' PRET
C ELSE
C SUB QTE ARTSTK
C UPDATARTICLR
C MOVE 'OK ' PRET
C ENDIF
C ENDIF
C SETON LR
FARTICLE UF E K DISK- Le fichier ARTICLE, ouvert en mise à jour (
Uen 15), en procédure complète (Fen 16 : c'est le programme qui lit, pas le cycle), décrit en externe (Een 19) : ses zones viennent des DDS.Ken 31 : accès par la clé.DISKen 40. *ENTRY PLISTet les troisPARM- Les paramètres reçus, dans l'ordre de l'appel : PCODE (5), PQTEA (5) et PRET (3), où le programme écrit son code retour.
MOVE PQTEA QTE 50- La quantité arrive en caractères (
'00005') ; MOVE la range dans QTE, numérique de 5 chiffres sans décimale (5 en 51, 0 en 52). PCODE CHAINARTICLE 91- Lit l'article dont la clé vaut PCODE. S'il n'existe pas, l'indicateur 91 (colonnes 54-55) s'allume. Le CHAIN d'un fichier en mise à jour verrouille l'enregistrement.
SUB QTE ARTSTKpuisUPDATARTICLR- Retire la quantité de la zone ARTSTK lue, puis réécrit l'enregistrement. UPDAT porte le nom du
format (ARTICLR), pas celui du fichier, et exige une lecture préalable sans
Nen colonne 53.
CRTRPGPGM PGM(JOBIR3/SORTIE) SRCFILE(JOBIR3/QRPGSRC) OPTION(*SRCDBG)
Le programme se teste plus loin, avec un CL de test, parce que son code retour ne se voit pas depuis une ligne de commande.
Programme 3 Un écran, un PF et un LF
Consulter un article par son code ou par son libellé
Le programme ARTCON affiche un article. On tape son code, et le programme le lit dans le PF par la clé. Ou bien on tape le début d'un libellé, et il se place dans un fichier logique trié par libellé, puis lit le premier article à partir de ce texte.
Le LF : les mêmes articles, dans l'ordre du libellé
A* ARTICL1 : les memes articles, dans l'ordre du libelle
A R ARTICL1R PFILE(ARTICLE)
A ARTCOD
A ARTLIB
A ARTSTK
A K ARTLIB
L'écran (DSPF)
A* ARTECR : ecran de consultation des articles
A DSPSIZ(24 80 *DS3)
A CA03(03 'Fin')
A R ECRAN
A 1 2'ARTCON'
A 1 28'Consultation des articles'
A DSPATR(HI)
A 3 2'Code article . . . . . :'
A ECODE 5A B 3 28
A 4 2'ou début du libellé . :'
A ERECH 30A B 4 28CHECK(LC)
A 7 2'Code . . . . :'
A ARTCOD 5A O 7 17
A 8 2'Libellé . . :'
A ARTLIB 30A O 8 17
A 9 2'Stock . . . :'
A ARTSTK 7Y 0O 9 17EDTCDE(3)
A 41 20 2'Article inconnu.'
A COLOR(RED)
A 42 20 2'Aucun libellé trouvé.'
A COLOR(RED)
A 23 2'F3=Fin'
A COLOR(BLU)
CA03(03 'Fin')- F3 allume l'indicateur 03, que le programme lit dans
*IN03. ECODEetERECHenB- Les deux zones de saisie, en entrée et sortie.
CHECK(LC)accepte les minuscules dans la recherche par libellé. ARTCOD,ARTLIB,ARTSTKenO- Les zones affichées portent les mêmes noms que celles du fichier : en RPG, une zone lue par CHAIN est donc aussitôt prête à l'écran, sans un seul MOVE.
41et42en colonnes 9-10- Les messages d'erreur ne s'affichent que si le programme allume ces indicateurs.
Le programme
FARTECR CF E WORKSTN
FARTICLE IF E K DISK
FARTICL1 IF E K DISK
C* ARTCON : consultation d'un article par son code (PF)
C* ou par le debut de son libelle (LF). F3 pour sortir.
C *IN03 DOWEQ'0'
C EXFMTECRAN
C *IN03 IFEQ '0'
C SETOF 4142
C ECODE IFNE *BLANKS
C* Un code : acces direct par la cle du PF
C ECODE CHAINARTICLE 41
C ELSE
C* Sinon : positionnement dans le LF, puis lecture
C ERECH SETLLARTICL1
C READ ARTICL1 42
C ENDIF
C* Rien trouve : on vide la fiche
C *IN41 IFEQ '1'
C *IN42 OREQ '1'
C MOVE *BLANKS ARTCOD
C MOVE *BLANKS ARTLIB
C Z-ADD0 ARTSTK
C ENDIF
C ENDIF
C ENDDO
C SETON LR
FARTECR CF E WORKSTN- L'écran, en fichier combiné (
C: affichage et saisie). *IN03 DOWEQ'0'…ENDDO- La boucle du dialogue : tant que F3 n'est pas pressée.
EXFMTECRAN- Affiche le format ECRAN et attend la réponse de l'utilisateur.
ECODE CHAINARTICLE 41- Un code est saisi : lecture directe dans le PF par sa clé ; 41 s'allume s'il est inconnu.
ERECH SETLLARTICL1puisREAD ARTICL1- Sinon, SETLL se place dans le LF devant le premier libellé supérieur ou égal au texte saisi, et READ le lit ; 42 (colonnes 58-59) s'allume s'il n'y a plus rien après.
L'ordre de création compte : le compilateur RPG lit les formats des fichiers décrits en externe. Le PF d'abord, puis le LF qui s'appuie sur lui, l'écran, et enfin le programme.
CRTLF FILE(JOBIR3/ARTICL1) SRCFILE(JOBIR3/QDDSSRC)
CRTDSPF FILE(JOBIR3/ARTECR) SRCFILE(JOBIR3/QDDSSRC)
CRTRPGPGM PGM(JOBIR3/ARTCON) SRCFILE(JOBIR3/QRPGSRC) OPTION(*SRCDBG)
CALL ARTCON




La dernière capture surprend : avec une recherche vide, le premier article du LF est « Écrou », avant « Boulon ». La clé est triée dans l'ordre du code EBCDIC, où « É » passe avant les lettres sans accent, comme sur la page des LF.
La première compilation a échoué
Dans sa première version, le LF s'appelait ARTLIB, comme la zone du libellé. Le compilateur RPG/400 a refusé le programme :
SEQUENCE *...1....+....2....+....3....+....4....+....5....+....6....+....7...* INDIC DO MODIF LIGNE PROGRAMME
300 FARTLIB IF E K DISK
B000002 6 35 ARTLIB Libelle
* 4143 4143-******
2200 C MOVE *BLANKS ARTLIB 003
* 5194 5194-******
D000006 ARTLIB 72 CHAR 30
* 6048 6048-******
* QRG4143 Gravité : 30 Nombre : 2
Message . . . . : Nom déjà défini comme nom de fichier,
d'enregistrement ou de constante. Spécification ignorée.
* QRG5194 Gravité : 30 Nombre : 1
Message . . . . : Le nom entré est déjà défini comme nom de
fichier ou de format d'enregistrement.
* QRG6048 Gravité : 30 Nombre : 1
Message . . . . : Le nom précisé est déjà défini comme nom de
fichier ou d'enregistrement. La spécification n'est pas prise en
compte.
Nombre de messages (par ordre de gravité) :
TOTAL 00 10 20 30 40 50
4 0 0 0 4 0 0
Compilation arrêtée. Erreurs de gravité 30 trouvées dans le fichier.
En RPG III, un nom de fichier, un nom de format et un nom de zone doivent être distincts : la zone
ARTLIB n'était plus utilisable. Le LF a été renommé ARTICL1. Lire un listing se fait toujours de la
même façon : le résumé en fin de listing donne les messages, et la marque
* 4143 dans le source montre la ligne fautive.
Compiler : ce qu'il faut savoir
- CRTRPGPGM, pas CRTBNDRPG. CRTRPGPGM crée un programme RPG/400 (OPM) ; CRTBNDRPG est le compilateur du RPG IV.
- L'option 14 de PDM lance la même commande sur le membre choisi : avec F4, on voit l'invite de CRTRPGPGM déjà remplie.
- OPTION(*SRCDBG) enregistre de quoi déboguer au niveau du source avec le
débogueur système (STRDBG). STRISDB, lui, relit le membre source : notre HELLO recompilé en
*NOSRCDBGs'y déboguait aussi, pas à pas et variables comprises. Ce qui compte pour ISDB, c'est que le membre source soit bien celui qui a été compilé. - GENLVL vaut 9 par défaut : un seul message de gravité 10 ou plus suffit à ne pas créer le programme (QRG9001).
- Le listing est un spoule au nom du programme, dans la file d'attente de
sortie du travail :
WRKSPLF, option 5.

Déboguer avec STRISDB
Pour le RPG III, le débogueur est STRISDB (ISDB, Interactive Source Debugger), qu'IBM présente comme l'environnement de débogage interactif des programmes CL, COBOL et RPG. Il affiche le source, et la ligne en cours en rouge. Déboguons SORTIE sur l'article A0002, pour une sortie de 5 :
STRISDB PGM(JOBIR3/SORTIE) UPDPROD(*YES) PARM('A0002' '00005' ' ')
ISDB appelle lui-même le programme avec ces paramètres et s'arrête avant la première instruction. Il numérote les instructions par leur numéro de séquence : la ligne 001500 est l'instruction 1500.
Le piège de UPDPROD(*NO)
Notre premier essai, avec la valeur par défaut UPDPROD(*NO), s'est arrêté net à
l'ouverture du fichier :

SORTIE ouvre ARTICLE en mise à jour, et JOBIR3 est une bibliothèque de production :
CRTLIB crée par défaut des bibliothèques TYPE(*PROD). Par prudence, le
débogage interdit d'y modifier les fichiers. Le message propose lui-même le remède :
UPDPROD(*YES). Sur une vraie machine, on débogue de préférence sur une copie des
données.
Point d'arrêt, exécution, variables
| Touche | Rôle | Ce qu'elle fait |
|---|---|---|
| F6 | Point d'arrêt | Pose ou enlève un point d'arrêt sur la ligne où se trouve le curseur (sur le texte de la ligne, pas dans la marge). |
| F17 | Exécuter | Lance le programme jusqu'au prochain point d'arrêt, ou jusqu'à la fin. |
| F5 | Pas à pas | Exécute une instruction et s'arrête sur la suivante. |
| F11 | Variable | Affiche la zone sous le curseur : type, longueur et valeur. |
| F23 | Modifier variable | Change la valeur d'une zone pendant l'arrêt, pour forcer un cas. |
| F3 ou F12 | Sortie | Ouvre la fenêtre « Fin de session ISDB ». |
Curseur sur le test du stock (1500), F6, puis F17 : le programme lit l'article et s'arrête.

Curseur sur ARTSTK, F11 : l'article A0002 a 1 200 pièces en stock.

P des DDS.F5 avance d'une instruction : 1800 (la soustraction), puis 1900 (UPDAT), puis 2000. Le stock est passé à 1 195, et la table le confirme après la fin du programme.

Forcer un cas avec F23
Comment voir la branche « stock insuffisant » sans fabriquer de données ? On relance le programme (la fenêtre de fin propose « 2=Redémarrer programme » et garde le point d'arrêt), et à l'arrêt en 1500, F23 change ARTSTK en 3 :


Le programme ne réécrit rien dans cette branche : après coup, A0002 a toujours 1 195 pièces. Le débogueur a servi à tester un cas rare sans toucher au fichier.

STRDBG est le débogueur des programmes ILE : voir le même débogage en RPG IV. Pour le RPG III, STRISDB reste l'outil qui suit le source RPG/400 tel qu'il est écrit.
Tester : des cas écrits à l'avance
Le débogueur montre ce que fait le programme ; un test vérifie qu'il fait ce qui est attendu, et se rejoue après chaque modification. Pour SORTIE, trois cas suffisent à couvrir ses trois codes retour. Le programme de test est un CL qui appelle SORTIE, compare le code retour à l'attendu et compte les échecs :
/* TSTSORTIE : teste SORTIE sur trois cas, résultat attendu connu */
PGM
DCL VAR(&RET) TYPE(*CHAR) LEN(3)
DCL VAR(&ECHECS) TYPE(*DEC) LEN(3 0) VALUE(0)
DCL VAR(&ECHECA) TYPE(*CHAR) LEN(3)
/* Cas 1 : article connu, stock suffisant : OK attendu */
CALL PGM(SORTIE) PARM('A0001' '00010' &RET)
IF COND(&RET *NE 'OK ') THEN(CHGVAR +
VAR(&ECHECS) VALUE(&ECHECS + 1))
SNDPGMMSG MSG('Cas 1 A0001 x 10 : attendu OK, obtenu ' +
*CAT &RET)
/* Cas 2 : article inconnu : INC attendu */
CALL PGM(SORTIE) PARM('Z9999' '00001' &RET)
IF COND(&RET *NE 'INC') THEN(CHGVAR +
VAR(&ECHECS) VALUE(&ECHECS + 1))
SNDPGMMSG MSG('Cas 2 Z9999 x 1 : attendu INC, obtenu ' +
*CAT &RET)
/* Cas 3 : stock insuffisant (A0004 est à zéro) : INS attendu */
CALL PGM(SORTIE) PARM('A0004' '00001' &RET)
IF COND(&RET *NE 'INS') THEN(CHGVAR +
VAR(&ECHECS) VALUE(&ECHECS + 1))
SNDPGMMSG MSG('Cas 3 A0004 x 1 : attendu INS, obtenu ' +
*CAT &RET)
CHGVAR VAR(&ECHECA) VALUE(&ECHECS)
SNDPGMMSG MSG('TSTSORTIE terminé, cas en échec : ' *CAT +
&ECHECA)
ENDPGM
CRTCLPGM PGM(JOBIR3/TSTSORTIE) SRCFILE(JOBIR3/QCLSRC)
CALL TSTSORTIE

Le code retour ne suffit pas : il faut aussi regarder les données. Avant et après le test, puis après la session de débogage :
| Article | Au départ | Après TSTSORTIE | Après STRISDB | Pourquoi |
|---|---|---|---|---|
| A0001 | 500 | 490 | 490 | Cas 1 : sortie de 10. |
| A0002 | 1200 | 1200 | 1195 | Sortie de 5 dans le débogueur ; le 2e passage (forcé en INS) ne réécrit rien. |
| A0004 | 0 | 0 | 0 | Cas 3 : refusé, stock inchangé. |
SELECT * FROM JOBIR3.ARTICLE ORDER BY ARTCOD
- Remettre les données dans leur état de départ avant de rejouer le test : le cas 1 consomme du stock à chaque passage.
- Un écran se teste en le déroulant : pour ARTCON, un code connu, un code inconnu, un début de libellé et une recherche vide, comme sur les quatre captures plus haut.
- Rejouer les tests après chaque modification, avant de livrer : c'est ce qui évite la régression.
Sources
Les exemples ont été créés et relevés sur un IBM i 7.5 (voir la méthode). Les définitions et les règles viennent de ces sources, consultées le 16 octobre 2026 :
- Create RPG/400 Program (CRTRPGPGM), IBM, IBM i 7.5 CL commands. Les options de liste *SRCDBG et *LSTDBG (l'une ou l'autre), le niveau de gravité GENLVL (9 par défaut), le fichier source QRPGSRC par défaut.
- Start ISDB (STRISDB), IBM, IBM i 7.5 CL commands. ISDB, débogueur source interactif des programmes CL, COBOL et RPG ; les paramètres UPDPROD, INVPGM et PARM.
- Start Source Entry Utility (STRSEU), IBM, IBM i 7.5 CL commands. L'éditeur de source en 5250.
- Work with Members Using PDM (WRKMBRPDM), IBM, IBM i 7.5 CL commands. La liste des membres d'un fichier source et ses options (2, 5, 14…).
- Create Display File (CRTDSPF), IBM, IBM i 7.5 CL commands. La création du fichier écran à partir de ses DDS.
- Create Library (CRTLIB), IBM, IBM i 7.5 CL commands. TYPE(*PROD) par défaut : une bibliothèque neuve est une bibliothèque de production.
- Create CL Program (CRTCLPGM), IBM, IBM i 7.5 CL commands. La compilation du programme de test en CL (OPM).
- IBM RPG, Wikipédia (en anglais). RPG III sur le System/38, RPG/400 sur l'AS/400, RPG IV en 1994.
- L'aide en ligne des commandes citées, livrée avec IBM i 7.5 et reprise en français dans les fiches des commandes CL de ce site. Paramètres de CRTRPGPGM, CRTBNDRPG, CRTCLPGM, CRTBNDCL, CALLPRC, STRISDB, STRDBG, STRSEU, WRKMBRPDM, CRTPF, CRTLF et CRTDSPF.
Questions fréquentes
Comment compiler un programme RPG III sur IBM i ?
Avec la commande CRTRPGPGM (Créer un programme RPG/400), par exemple CRTRPGPGM PGM(MABIB/HELLO) SRCFILE(MABIB/QRPGSRC), ou avec l'option 14 de PDM sur le membre source. Les fichiers décrits en externe (PF, LF, écrans) doivent être créés avant le programme. CRTBNDRPG est le compilateur du RPG IV (ILE), pas du RPG III.
Quel débogueur utiliser pour un programme RPG III ?
STRISDB, le débogueur source interactif (ISDB), qui affiche le source RPG/400 et permet de poser des points d'arrêt (F6), d'avancer pas à pas (F5), d'afficher (F11) et de modifier (F23) une variable. ISDB relit le membre source : il doit être celui qui a été compilé.
Pourquoi STRISDB affiche-t-il CPF4203 à l'ouverture d'un fichier ?
Parce que le fichier est ouvert en mise à jour alors que le débogage interdit de modifier les fichiers des bibliothèques de production, ce qui est le cas par défaut avec UPDPROD(*NO). Une bibliothèque créée par CRTLIB est de type *PROD par défaut. Relancez avec UPDPROD(*YES).
Pourquoi un littéral RPG III est-il limité à 8 caractères ?
Parce que le facteur 1 occupe les colonnes 18 à 27 et le facteur 2 les colonnes 33 à 42 : dix positions, apostrophes comprises. Un texte plus long se construit dans une zone par MOVEL et MOVE, ou se place dans une constante nommée ou un tableau.
Peut-on donner le même nom à un fichier et à une zone en RPG III ?
Non. Un nom de fichier, de format et de zone doivent être distincts : un LF nommé ARTLIB avec une zone ARTLIB fait échouer la compilation (QRG4143, QRG5194 et QRG6048, gravité 30).