** Les fichiers logiques joints ** Un fichier logique joint est un fichier logique pointant sur plusieurs fichiers physiques. Contrairement à un multi-format le système va reformater un enregistrement. Exemple : Soit les fichiers physiques suivants : STGP1 (fichier stagiaires) ! NOTP1 (fichier des notes) R STGF1 ! R NOTF1 NUMSTG 6S 0 TEXT('N° stag') ! NUMSTG 6S 0 TEXT('N° stag') NOMSTG 20 TEXT('Nom') ! LANG 3 TEXT('langage') VILSTG 20 TEXT('Ville') ! * RPG,CBL,CLP.. DEPSTG 2P 0 TEXT('départ') ! NOTE 4P 2 ! |
** Les fichiers logiques joints ** Nous voulons faire une jonction (ou jointure) sur ces deux fichiers c'est à dire avoir les stagiaires avec leurs notes. L'enregistrement logiquement formaté devra être le suivant: NUMSTG 6S 0 Variable venant du fichier STGP1 NOMSTG 20 Variable venant du fichier STGP1 LANG 3 Variable venant du fichier NOTP1 NOTE 4P 2 Variable venant du fichier NOTP1 A chaque stagiaire le système ira chercher la(les) note(s) correspondante(s) Nous allons voir comment écrire le source SDD qui fera cela. |
Premiere chose il nous faut définir un nouveau format: A R JOINTF |
Ensuite il nous faut préciser les fichiers physiques joints. A R JOINTF JFILE(STGP1 NOTP1) |
Puis définir le(les) critére(s) de jonction entre deux fichiers A R JOINTF JFILE(STGP1 NOTP1) A ----> J ----------->JOIN(1 2) A ! ! JFLD(NUMSTG NUMSTG)<-- ! ! ! ! ! ! ! ! ! #################### ! ! # Définition d'une # ! ! # jonction # ! ####################### #################### ! # La zone de jonction # ! # est NUMSTG dans les # ####################### # 2 fichiers (La jonc # # Jonction entre 1er # # tion se fait par =) # # fichier du JFILE # ####################### # et 2eme # ####################### |
Ecrit comme cela le système va classer les différentes notes d'un même stagiaire dans un ordre aléatoire. A R JOINTF JFILE(STGP1 NOTP1) A J JOIN(1 2) A JFLD(NUMSTG NUMSTG) |
SI l'on veut classer toutes ces notes sur un critère il faut employer JDUPSEQ avec entre parentheses le nom de la zone de tri. A R JOINTF JFILE(STGP1 NOTP1) A J JOIN(1 2) A JFLD(NUMSTG NUMSTG) JDUPSEQ(LANG) LA DEFINITION DE LA JONCTION EST TERMINEE, IL FAUT MAINTENANT DEFINIR LE FORMAT (Liste des variables) |
A R JOINTF JFILE(STGP1 NOTP1) A J JOIN(1 2) A JFLD(NUMSTG NUMSTG) A JDUPSEQ(LANG) A NUMSTG JREF(1)<------ A NOMSTG ! A LANG ! A NOTE ! ! ################################### # Le système ayant le choix # # entre deux variables NUMSTG # # il faut donner le n° du fichier # # auquel elle appartient. # ################################### |
Par défaut le système ne reconnait que les enregistrements du fichier primaire (N° 1) pour lesquels la jonction est réalisée (les stagiaires ayant au moins une note) A R JOINTF JFILE(STGP1 NOTP1) A J JOIN(1 2) A JFLD(NUMSTG NUMSTG) A JDUPSEQ(LANG) A NUMSTG JREF(1) A NOMSTG A LANG A NOTE |
Si je veux tous les enregistrements du fichier primaire je doit employer le mot clé JDFTVAL, le système attribuant une valeur par défaut aux variables LANG et NOTE pour les stagiaires n'ayant pas de notes dans le fichier NOTP1. A JDFTVAL A R JOINTF JFILE(STGP1 NOTP1) A J JOIN(1 2) A JFLD(NUMSTG NUMSTG) A JDUPSEQ(LANG) A NUMSTG JREF(1) A NOMSTG A LANG A NOTE |
Il est possible de préciser des zones clés si elles appartiennent au fichier primaire. A JDFTVAL A R JOINTF JFILE(STGP1 NOTP1) A J JOIN(1 2) A JFLD(NUMSTG NUMSTG) A JDUPSEQ(LANG) A NUMSTG JREF(1) A NOMSTG A LANG A NOTE A K NUMSTG |
Il est possible de demander des sélections. - sur des variables du fichier N°1 sans contraintes - sur des variables des autres fichiers avec DYNSLT A JDFTVAL DYNSLT A R JOINTF JFILE(STGP1 NOTP1) A J JOIN(1 2) A JFLD(NUMSTG NUMSTG) A JDUPSEQ(LANG) A NUMSTG JREF(1) A NOMSTG A LANG A NOTE A K NUMSTG S NOTE COMP(GT 12) |
DEFINITION DE FICHIER LOGIQUES JOINT, 2 EME EXEMPLE Soit les fichiers physiques suivants: REPRESP1 (fichier des représentants) CLIENTP1 ('fichier des clients') R REPRESF1 R CLIENTF1 NOREP 5S 0 TEXT('N° représ.') NOCLI 6S 0 TEXT('N° client') NOMREP 15 TEXT('Nom') RAICLI 25 TEXT('Raison soc.') SECT 3 0 TEXT('Secteur') ADR1 30 TEXT('Adresse') ADR2 30 TEXT('Adresse') ARTICP1 (fichier articles) CPTCLI 5P 0 TEXT('Code postal') R ARTICF1 VILCLI 20 TEXT('Ville') CODART 8 TEXT('Code article') NUMREP 5P 0 TEXT('N° représ.') LIBART 25 TEXT('Libellé art.') PUART 7P 2 TEXT(Prix unitaire') CDEENTP1 (entetes de commandes) CDEDETP1 (lignes de commandes) R CDEENTF1 R CDEDETF1 NOCDE 5P 0 TEXT('N° de cde.') NOCDE 5P 0 TEXT('N° de cde') NOCLI 6S 0 TEXT('N° client') NOLIG 3P 0 TEXT('N° ligne') DATCDE 6S 0 TEXT('Date cde') NOART 8 TEXT('N° article') DATLIV 6S 0 TEXT('Date liv.') QTECDE 9P 3 TEXT('Qté cdée') |
Nous voulons la liste des articles en commande par représentant Il nous faut déclarer les 5 fichiers physiques et définir 4 jonctions: 1/ REPRESP1 --> CLIENTP1 sur le n° représentant avec tous les clients par représentant 2/ CLIENTP1 --> CDEENTP1 sur le n° de client avec toutes les commandes d'un client 3/ CDEENTP1 --> CDEDETP1 sur le n° de commande avec toutes les lignes d'une commande 4/ CDEDETP1 --> ARTICP1 sur le n° d'article Nous accepteront les jonctions non completes (avec JDFTVAL) Il faudra redéfinir Le N° de représentant la variable étant Etendue dans le fichier REPRESP1 Packée dans le fichier CLIENTP1 VOICI le source SDD: |
*********************************************************** * Fichier joint des articles en commande par représentant * *********************************************************** A JDFTVAL A R JOINTF JFILE(REPRESP1 CLIENTP1 + A CDEENTP1 CDEDETP1 ARTICP1) * jonction représentant/client A J JOIN(REPRESP1 CLIENTP1) A JFLD(NOREP NUMREP) A JDUPSEQ(NOCLI) * jonction client/entete de commande A J JOIN(CLIENTP1 3) A JFLD(NOCLI NOCLI) A JDUPSEQ(NOCDE) * jonction commande entete/ligne A J JOIN(3 4) A JFLD(NOCDE NOCDE) A JDUPSEQ(NOLIG) * jonction commande ligne/article A J JOIN(4 5) A JFLD(NOART CODART) A Suivre |
*********************************************************** * Fichier joint des articles en commande par représentant * *********************************************************** * Utilisation N (Neither) car la variable n'appartient pas au format * Elle n'est déclarée que pour être redéfinie. A NUMREP 5S 0N * A NOMREP A NOCLI JREF(2) A RAICLI A DATLIV A NOART A LIBART A PUART A K NOMREP IL SUFFIT DE COMPILER CE FICHIER LOGIQUE (ATTENTION LES LOGIQUES JOINTS NE SONT UTILISABLES QU'EN LECTURE) |