Fichiers logiques joints (principe et définition)

BoTTom |    Changer de couleur
 
                 ** 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
                                     ! 
 
 


|    Changer de couleur
 
                 ** 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.
 


|    Changer de couleur
 
 
    Premiere chose il nous faut définir un nouveau format:
 
 
 
     A          R JOINTF 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
 
 
    Ensuite il nous faut préciser les fichiers physiques joints.
 
 
 
     A          R JOINTF                    JFILE(STGP1 NOTP1)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
 
 
    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            # 
                       ####################### 


|    Changer de couleur
 
 
    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)
 
 
 
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
 
 
    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)
 
 
 
 


|    Changer de couleur
 
 
 
 
 
 
     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.         # 
                                       ################################### 
 


|    Changer de couleur
 
  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
 
 
 
 
 
 
 
 


|    Changer de couleur
 
  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
 
 
 
 
 
 
 
 


|    Changer de couleur
 
  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 
 
 
 
 
 
 
 


|    Changer de couleur
 
  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) 
 
 
 
 
 
 


|    Changer de couleur
 
  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')


|    Changer de couleur
 
 
 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:
 


|    Changer de couleur
      ***********************************************************
      * 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 


|    Changer de couleur
      ***********************************************************
      * 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)
 





©AF400