Sur AS400 depuis 1995, nous assurons un soutien indéfectible à nos anciens clients comme aux nouveaux qui souhaiterons nous faire confiance.
Nous maîtrisons la plupart des langages natifs liés à l’OS400 et à DB2 pour répondre aux besoins les plus divers :
Depuis 20 ans avec ACROBAS, certains clients du début nous font toujours confiance.
Plus d’informations sur notre site dédié : https://developpeur-as400.fr
Résolutions de soucis sur AS400 / IBMi
Souvent il m’est arrivé de bloquer sur des problèmes et j’ai été ravi de pouvoir trouver de la ressource sur internet.
J’essaie de compiler ici, au fur et à mesure (j’aurais dû m’y mettre avant ;o)) des résolutions à quelques soucis rencontrés.
CPF5029 et SQL par RRN
Si vous rencontrez ce message d’erreur en accès à un enregistrement du fichier (par READ ou CHAIN), il est fort probable qu’un enregistrement du fichier soit vérolé.
Erreur de mappage de données sur le membre FICHIER.
Erreur d’E-S CPF5029 détectée dans TBLELVA (C G S D F).
Vous pouvez alors tenter d’appliquer la solution suivante :
1/ voir où se trouve l’erreur : faire F1 sur le message « Erreur de mappage de données ». Vous obtenez :
ID message . . . . . . : CPF5035 Gravité . . . . . . . : 10
Type de message . . . : Diagnostic Date d’envoi . . . . . : xx/xx/20 Heure d’envoi . . . . : 08:01:35
Message . . . . : Erreur de mappage de données sur le membre FICHIER.
Cause . . . . . : Une erreur de mappage de données s’est produite sur la
zone XXXXX du numéro d’enreg 95373955, format REPAN, membre numéro 1, dans le membre FICHIER, fichier FICHIER de la biblio BIBFIC. Code d’erreur
: 19. La signification du code d’erreur est la suivante : …
Noter le fichier et surtout le numéro d’enregistrement qu’il faudra corriger. Ici 95373955.
2/ il faut aller corriger l’enregistrement : soit par SQL et/ou par DFU (journée sans DFU, journée fouttue).
Problème : votre fichier est à index et le DFU ne vous permet pas d’accéder par RRN (Relative Record Number). Heureusement, un SQL un peu spécial va vous donner les clés :
SELECT rrn(a), a.* FROM BIBFIC/FICHIER as a WHERE rrn(a) =
95373954
et voila !
Changer les valeurs par défaut d'une commande OS400
Et voilà, vous avez compilé tous vos écrans en RSTDSP à *NO, ou alors vos programmes sans vue de source pour le déboguage. Ben oui, mais les valeurs par défaut des commandes n’étaient pas les bonnes !!!
Bon, en accord avec le gestionnaire de l’exploitation de la machine, vous allez pouvoir utiliser une petite commande magique pour modifier les valeurs par défaut de vos commandes préférées.
Faire donc un CHGCMDDFT avec en attributs la valeur système à changer (donnée par le F11 de la commande ciblée) et, entre parenthèses, la valeur à affecter.
Exemple pour la compilation en vue source d’un RPG ILE :
CHGCMDDFT CMD(CRTBNDRPG) NEWDFT(‘DBGVIEW(*SOURCE)’)
donc, après CMD, la commande OS400 à modifier (ici CRTBNDRPG pour compiler un RPG ILE)
ensuite, dans NEWDFTP et entre côtes (pas entrecôte !) : l’attribut de la commande à changer (pour l’obtenir faire F11 sur la dite commande)
puis, entre parenthèses (sans jeu de mot), la nouvelle valeur telle que vous l’auriez saisie dans la commande modifiée.
C’est tout.
Modifier une structure de fichier sans (presque) rien faire
Que celui qui n’a jamais eu besoin de modifier une structure de fichier DDS me jette le premier écran 5250. PAr contre, connaissez-vous la commande magique qui vous permet de faire cela sans passer par un fichier intermédiaire et recompiler tous les index ?
Cette commande existe et elle est fabuleuse : c’est le CHGPF, tout simplement.
Donc, modifier votre source dans le QDDSSRC, appliquer le CHGPF en précisant le source modifié, et c’est tout ! il fera le travail de reprise des données et de reconstruction des index tout seul comme un grand. Si vous perdez des données, il va même vous avertir.
Attention, la magie s’arrête au traitement du fichier, et ne prend pas en compte les recompilations des programmes, DSPF et PRTF associés, ni des éventuelles variables de travail à re-dimensionner… Pour cela, faîtes appel à votre prestataire favori ;o))
Les paramètres de vos CL, en SBMJOB, passent n'importe quoi ...
Nous avons eu du mal à le croire mais il y a un bug sur le passage de paramètre d’un CL via un CALL en SBMJOB …. et oui, les valeurs de paramètres « bavent » les uns sur les autres, dégoûtant …
Blague à part, si vous passez plusieurs variables assez longues (> 30 caractère), vous allez avoir des bouts d’une variable sur l’autre. En cela fonctionne en interactif … Sûrement un souci de pointeurs. Bon, on a une solution : mettons que vous ayez 2 paramètres à passer dans 2 programmes :
PGM1 parm(&VAR11 &VAR12)
appelle
PGM2 parm(&VAR21 &VAR22)
DCL &VAR11 CHAR(30)
DCL &VAR12 CHAR(50)
et
DCL &VAR21 CHAR(30)
DCL &VAR22 CHAR(50)
notre solution :
DCL &VAR12 CHAR(51)
avec un « * » à droite de &VAR11 et &VAR12 (donc en 31 et en 51)
et
DCL &VAR21 CHAR(30)
DCL &VAR22 CHAR(50)
C’est peut-être pas super élégant, mais c’est facile, et ça fonctionne.
Etiquettes de colisage sur les excellentes "ZEBRA"
Que ce soit en langage EPL (2) ou CPCL, voici des exemples de format d’étiquettes avec SSCC à poser sur des colis ou palettes (ou autres) :
** ETIQUETTE COLIS (LANGAGE EPL)
N
LO0,0,850,4
A25,15,0,2,2,2,N, »
A25,60,0,2,1,2,N, »
A150,60,0,2,1,1,N, »TEL: 04 77 23 78 37
A25,15,0,2,2,2,N, »ACROBAS »
A25,60,0,2,1,1,N, »FR 42300 ROANNE »
LO0,90,850,4
B30,120,0,1,3,10,080,B, » ici code barre pour produit ou lot ou DLC
LO0,240,850,4
A25,260,0,2,1,1,N, »SSCC . »
A90,260,0,3,1,1,N, »(00) ici le n° SSCC en texte
A25,280,0,2,1,1,N, »GTIN . »
A90,280,0,3,1,1,N, »
A25,300,0,2,1,1,N, »CIP. . »
A90,300,0,3,1,1,N, »
A190,300,0,3,1,1,N, »
A25,320,0,2,1,1,N, »PCB. . »
A90,320,0,3,1,1,N, »
LO0,90,850,4
B150,105,0,1,3,10,200,B, »(00) ici le n° SSCC en code barre
LO0,350,850,4
A25,370,0,2,1,1,N, »VOTRE REF. .
A25,390,0,2,1,1,N, »NBRE COLIS .
A25,410,0,2,1,1,N, »NBRE REFS. .
A25,430,0,2,1,1,N, »NOTRE BL . .
A450,370,0,2,2,2,N, »
LO0,450,850,4
LO580,0,4,90
A580,370,0,2,4,4,N, »X »
P1
** ETIQUETTE PALETTE (EPL)
N
LO0,0,850,4
A25,15,0,2,2,2,N, »
A25,60,0,2,1,2,N, »
A150,60,0,2,1,1,N, »TEL: 04 77 23 78 37″
A600,35,0,1,1,2,N, »ACROBAS »
A600,60,0,2,1,1,N, »FR 42300 ROANNE »
LO0,90,850,4
B150,105,0,1,3,10,200,B, »(00) ici le SSCC en code barre
LO0,350,850,4
A25,370,0,2,1,1,N, »VOTRE REF. .
A25,390,0,2,1,1,N, »NBRE COLIS .
A25,410,0,2,1,1,N, »NBRE REFS. .
A25,430,0,2,1,1,N, »NOTRE BL . .
A450,370,0,2,2,2,N, »
LO0,450,850,4
LO580,0,4,90
A580,370,0,2,4,4,N, »X »
P1
** ETIQUETTE COLIS PORTATIVE (LANGAGE CPCL)
! 0 200 200 570 1
LINE 0 0 750 0 2
TEXT 5 1 25 15
TEXT 5 1 25 60
TEXT 5 1 150 60 TEL: 04 77 237 837
TEXT 5 1 25 15 ACROBAS
TEXT 5 1 25 60 FR 42300 ROANNE
LINE 0 100 750 100 2
BARCODE 128 2 2 60 60 115
LINE 0 200 750 200 2
TEXT 5 1 25 210 SSCC . . (00)
TEXT 5 1 25 250 GTIN . .
TEXT 5 1 25 290 CIP . . .
TEXT 5 1 25 330 PCB . .
TEXT 5 1 25 370 DLC . .
TEXT 5 1 400 370 LOT .
LINE 0 410 750 410 1
BARCODE 128 2 2 110 60 430
TEXT 5 2 450 20
TEXT 5 1 450 250 EMPL .
LINE 0 550 750 550 2
Faire un SQL par RRN
Il peut s’avérer bien commode de requêter un fichier par son numéro d’enregistrement relatif (relative record number, ou RRN pour les intimes).
Seulement la syntaxe est un peu spécial :
FROM fichiers . . . . . . . EDCDE00F as MONFIC
SELECT zones . . . . . . . . RRN(monfic) as rrn1, ZONE01, ZONE02
WHERE conditions . . . . RRN(monfic) > 1700
Voici donc un exemple d’une requête sur le fichier « EDCDE00F » qui contient notamment les zones ZONE01 et ZONE02.
Par ce biais, on affiche tous les enregistrements dont le RRN est supérieur à 1700.
Vous noterez que le RRN utilise l’alias du fichier.