MCH1210
Zone réceptrice trop petite pour contenir le résultat
Gravité 40 · Fin anormale du programme ou de la fonction
Comment s'en sortir
Le résultat d'un calcul ou d'une affectation ne tient pas dans la zone qui doit le recevoir : on met 123 456 dans une zone de 5 chiffres. Le système refuse plutôt que de tronquer en silence.
Les causes les plus fréquentes
- Une zone numérique trop petite pour les valeurs réelles : un compteur, un total, un montant qui a grandi avec le temps (le cumul annuel qui passe 99 999,99).
- Une multiplication ou une addition dont le résultat dépasse la zone réceptrice, même si chaque terme y tient.
- Une date ou une conversion : une valeur à 8 chiffres (AAAAMMJJ) placée dans une zone de 6.
- En CL, un
CHGVARvers une variable*DECtrop courte.
Diagnostiquer
En RPG ILE, MCH1210 est suivi de RNQ0103 (la cible d'une opération numérique est trop petite), avec le numéro d'instruction. Regardez la zone réceptrice de cette ligne et la valeur qu'elle recevait : le débogueur (STRDBG) vous montre les deux.
Corriger
La bonne correction est d'agrandir la zone, dans le programme et, si elle vient d'un fichier, dans le fichier. Si le dépassement est un cas prévu, traitez-le explicitement :
monitor;
total = total + montant;
on-error 103; // zone réceptrice trop petite
// signaler l'anomalie, plafonner, ou arrêter proprement
endmon;
L'ancien RPG III tronquait parfois sans rien dire, et l'option de compilation TRUNCNBR(*YES) reproduit ce comportement pour certaines opérations. Vous obtenez alors un total faux au lieu d'un plantage : c'est pire. Agrandissez la zone plutôt que de faire taire l'erreur.
Ce que dit IBM
IBM ne fournit pas d'aide détaillée pour ce message.
Sur votre IBM i
Afficher la description complète du message :
DSPMSGD RANGE(MCH1210) MSGF(QSYS/QCPFMSG)
L'intercepter dans un programme CL, quand il est envoyé comme message d'échappement :
MONMSG MSGID(MCH1210) EXEC(DO)
/* traitement de l'erreur */
ENDDO