Aller au contenu

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 CHGVAR vers une variable *DEC trop 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