J’ai un problème sur CPYF d’un fichier DDM vers un fichier dans QTEMP. Il y a une clef sur une zone numérique, mais le système attend de l’alpha, voici le code, cela sera plus clair :
/* CRTPF FILE(QTEMP/LGT) RCDLEN(200) TEXT('Buffer brut') */
CRTDUPOBJ OBJ(R.01.L) FROMLIB(QS36F) OBJTYPE(*FILE) TOLIB(QTEMP) NEWOBJ(LGT)
CPYF QTEMP/BLGTL01 QTEMP/LGT mbropt(*add) fmtopt(*nochk)
MONMSG MSGID(CPF2968 CPF2972 CPF2817)
COPYFILE:
/*?Copie des données de RMTSYS(LF) vers LCLSYS(PF) QTEMP/BLGTL01 en pivot */
LECTURE:
RCVF OPNID(LGT)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(FIN))
CPYF FROMFILE(QTEMP/AMMDDMF) TOFILE(&FD_APBOL/&FD_APBOF) MBROPT(*ADD) CRTFILE(*YES) OUTFMT(*CHAR) +
INCREL((*IF NIDLGT *EQ &LGT_NIDLGT)) FMTOPT(*NOCHK) ERRLVL(*NOMAX)
MONMSG MSGID(CPF2968 CPF2972 CPF2817)
GOTO LECTURE
Les zones NIDLGT et &LGT_NIDLGT sont numériques et pourtant, j'ai ce message:
Expression INCREL incorrecte pour la zone numérique NIDLGT.
Commande de copie interrompue à la suite d'une erreur.
Complément d'informations sur message
ID message . . . . . . : CPF2844 Gravité . . . . . . . : 30
Type de message . . . : Diagnostic
Date d'envoi . . . . . : 24/10/16 Heure d'envoi . . . . : 11:49:55
Message . . . . : Expression INCREL incorrecte pour la zone numérique
NIDLGT.
Cause . . . . . : Soit la zone NIDLGT correspondant au format
d'enregistrement TOCCF du fichier AMMDDMF, bibliothèque QTEMP, n'est pas
numérique, soit la valeur indiquée dans l'expression 1 est trop élevée.
Que faire . . . : Modifiez le nom de la zone ou remplacez la valeur de
l'expression par une valeur plus petite. Relancez ensuite la commande.
J’ai trouvé, la zone &LGT_NIDLGT doit être alphanumérique même si le champ NIDLGT de TOCCP est numérique.
La solution est de passer la zone &LGT_NIDLGT dans une zone alpha et de l’utiliser dans le CPYF :
DCL VAR(&NIDLGT) TYPE(*CHAR) LEN(7)
LECTURE:
RCVF OPNID(LGT)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(FIN))
CHGVAR VAR(&NIDLGT) VALUE(&LGT_NIDLGT)
CPYF FROMFILE(QTEMP/AMMDDMF) TOFILE(&FD_APBOL/&FD_APBOF) MBROPT(*ADD) CRTFILE(*YES) OUTFMT(*CHAR) +
INCREL((*IF NIDLGT *EQ &NIDLGT)) FMTOPT(*NOCHK) ERRLVL(*NOMAX)
MONMSG MSGID(CPF2968 CPF2972 CPF2817)
GOTO LECTURE