Aller au contenu

CPF0001

Erreur trouvée dans la commande &1.

Gravité 30 · Erreur grave

Comment s'en sortir

Ce message ne dit presque rien : il signale seulement que la commande a été refusée. La vraie raison se trouve dans les messages envoyés juste avant lui, dans l'historique du travail.

Trouver la vraie erreur

Ouvrez l'historique du travail et remontez de quelques lignes au-dessus de CPF0001. Les messages de diagnostic (souvent CPD…) indiquent le paramètre en cause.

/* L'historique de votre session ; F10 affiche les messages détaillés */
DSPJOBLOG

En SQL, les derniers messages du travail en cours :

SELECT MESSAGE_ID, MESSAGE_TEXT
  FROM TABLE(QSYS2.JOBLOG_INFO('*'))
 ORDER BY ORDINAL_POSITION DESC
 FETCH FIRST 10 ROWS ONLY

Les causes les plus fréquentes

  • Une valeur de paramètre incorrecte : mauvais type, trop longue, valeur spéciale inconnue (*ALLL au lieu de *ALL).
  • Un paramètre obligatoire absent, ou un mot-clé mal orthographié.
  • Des apostrophes ou parenthèses mal fermées, surtout dans une commande construite par concaténation dans un programme CL ou passée à QCMDEXC.

Corriger

Tapez la commande puis F4 : l'invite affiche chaque paramètre et signale en surbrillance celui qui pose problème. Pour une commande construite dans un programme, affichez-la (SNDPGMMSG ou débogueur) avant de l'exécuter : l'erreur saute souvent aux yeux.

Dans un programme CL, MONMSG MSGID(CPF0001) intercepte l'échec mais ne le corrige pas. Si vous l'interceptez, écrivez au moins les messages précédents dans un journal ou renvoyez-les : sinon plus personne ne saura pourquoi la commande a échoué.

Ce que dit IBM

Cause

Le système a trouvé des erreurs dans la commande.

Que faire

Consultez les messages précédents dans l'historique du travail. Corrigez les erreurs, puis relancez la commande. La substitution de *N au nom de la commande signifie que ce nom n'a pas été déterminé avant que l'erreur ne soit détectée.

Variables du message

Quand le système envoie le message, chaque variable est remplacée par une valeur réelle : un nom d'objet, de bibliothèque, un code...

VariableTypeLongueur
&1 *CHAR 10

Sur votre IBM i

Afficher la description complète du message :

DSPMSGD RANGE(CPF0001) MSGF(QSYS/QCPFMSG)

L'intercepter dans un programme CL, quand il est envoyé comme message d'échappement :

MONMSG MSGID(CPF0001) EXEC(DO)
  /* traitement de l'erreur */
ENDDO