Sous-fichiers en RPG-IV

BoTTom |    Changer de couleur
                            SOUS-FICHIERS. 
 
 Il s'agit d'un fichier en mémoire associé à un fichier écran :
 
   le pgm charge (remplit complètement) le fichier temporaire.
 
   le système affiche un extrait des lignes du sous-fichier (une page)
     et gère les défilements avant/arrière.
 
      _____________
     <_____________>                 -----------------
     | 1  clou    |                  ! les articles  !
     | 2  vis     |                  !               !
     | 3  marteau |                  !  1   clou     !
     | 4  pinces  |                  !  2   vis      !
     | 5  pelle   |                  !      A suivre !
  !->| 6  pioche  |                  !---------------!
  !  | 7  truelle |                 /               /
  !  |____________|                /---------------/
  !
                                      format de contrôle (affichage)
  format d'enregistrement (mémoire)


|    Changer de couleur
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DEFINITION DU SOUS-FICHIER. 
 
      *  définition SDD du DSPF
 
     A          R FE                        SFL
     A            ZON1      R        O  5  4
     A            ZON2      R        O  5 12
     A            ZON3      R        O  5 25
     A            ZON4      R        O  5 50
      *
      *
     A          R FC                        SFLCTL(FE)
     A                                      SFLSIZ(0016)
     A                                      SFLPAG(0015)
     A  30                                  SFLDSP
     A  30                                  SFLDSPCTL
     A N30                                  SFLCLR
     A  30                                  SFLEND
     A                                  4  5'ENTETE DU SOUS-FICHIER'
     A                                      DSPATR(UL)


|    Changer de couleur
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DEFINITION DU SOUS-FICHIER. 
 
                   !--------------------------- ########################### 
                   v                            # Format d'enregistrement # 
     A          R FE                        SFL # Défini une ligne du     # 
     A            ZON1      R        O  5  4    # sous-fichier(elles sont # 
     A            ZON2      R        O  5 12    # toutes identiques),les  # 
     A            ZON3      R        O  5 25    # n° de colonnes et le N° # 
     A            ZON4      R        O  5 50    # de la première ligne.   # 
      *                                         #                         # 
      *                                         ########################### 
     A          R FC                        SFLCTL(FE)
     A                                      SFLSIZ(0016)
     A                                      SFLPAG(0015)
     A  30                                  SFLDSP
     A  30                                  SFLDSPCTL
     A N30                                  SFLCLR
     A  30                                  SFLEND
     A                                  4  5'ENTETE DU SOUS-FICHIER'
     A                                      DSPATR(UL)


|    Changer de couleur
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DEFINITION DU SOUS-FICHIER. 
 
 
          ########################################################### 
     A    #               Format de contrôle                        # 
     A    #                                                         # 
     A    # Défini les caractéristiques du sous-fichier. (1)        # 
     A    #  peut contenir des zones sans recouvrir le sous fic.(2) # 
     A    #                                                         # 
      *   ########################################################### 
      *
     A          R FC                        SFLCTL(FE) <----(1)
     A                                      SFLSIZ(0016)
     A                                      SFLPAG(0015)
     A  30                                  SFLDSP
     A  30                                  SFLDSPCTL
     A N30                                  SFLCLR
     A  30                                  SFLEND
     A                                  4  5'entête du sous fichier' <---(2)
     A                                        DSPATR(UL)


|    Changer de couleur
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DEFINITION DU SOUS-FICHIER. 
 
 
          ########################################################### 
     A    #               Format de contrôle                        # 
     A    #                                                         # 
     A    # SFLSIZ nb initial d'enregistrements (au début du pgm)   # 
     A    # SFLPAG nb d'enregistrements par page (à l'affichage)    # 
     A    #                                                         # 
      *   ########################################################### 
      *
     A          R FC                        SFLCTL(FE)
     A                                      SFLSIZ(0016) <---- 
     A                                      SFLPAG(0015) <---- 
     A  30                                  SFLDSP
     A  30                                  SFLDSPCTL
     A N30                                  SFLCLR
     A  30                                  SFLEND
     A                                  4  5'entête du sous fichier'
     A                                        DSPATR(UL)


|    Changer de couleur
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DEFINITION DU SOUS-FICHIER. 
 
 
          ########################################################### 
     A    #               Format de contrôle                        # 
     A    #                                                         # 
     A    # SI SFLSIZ est plus grand que SFLPAG il sera incrémenté  # 
     A    #  automatiquement en cas de besoin.                      # 
     A    #                                                         # 
      *   ########################################################### 
      *
     A          R FC                        SFLCTL(FE)
     A                                      SFLSIZ(0016) <---- 
     A                                      SFLPAG(0015) <---- 
     A  30                                  SFLDSP
     A  30                                  SFLDSPCTL
     A N30                                  SFLCLR
     A  30                                  SFLEND
     A                                  4  5'entête du sous fichier'
     A                                        DSPATR(UL)


|    Changer de couleur
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DEFINITION DU SOUS-FICHIER. 
 
 
          ########################################################### 
     A    #               Format de contrôle                        # 
     A    #                                                         # 
     A    # SFLCLR provoque la mise à blanc du sous-fichier si      # 
     A    #  la condition associée est VRAIE lors d'un WRITE.       # 
     A    #                                                         # 
      *   ########################################################### 
      *
     A          R FC                        SFLCTL(FE)
     A                                      SFLSIZ(0016)
     A                                      SFLPAG(0015)
     A  30                                  SFLDSP
     A  30                                  SFLDSPCTL
     A N30                                  SFLCLR       <---- 
     A  30                                  SFLEND
     A                                  4  5'entête du sous fichier'
     A                                        DSPATR(UL)


|    Changer de couleur
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DEFINITION DU SOUS-FICHIER. 
 
 
          ########################################################### 
     A    #               Format de contrôle                        # 
     A    #                                                         # 
     A    # SFLDSP conditionne l'affichage du sous-fichier          # 
     A    #        (remarquez la condition contraire à SFLCLR)      # 
     A    #                                                         # 
      *   ########################################################### 
      *
     A          R FC                        SFLCTL(FE)
     A                                      SFLSIZ(0016)
     A                                      SFLPAG(0015)
     A  30                                  SFLDSP       <---- 
     A  30                                  SFLDSPCTL
     A N30                                  SFLCLR
     A  30                                  SFLEND
     A                                  4  5'entête du sous fichier'
     A                                        DSPATR(UL)


|    Changer de couleur
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DEFINITION DU SOUS-FICHIER. 
 
 
          ########################################################### 
     A    #               Format de contrôle                        # 
     A    #                                                         # 
     A    # SFLDSPCTL conditionne l'affichage des zones du format   # 
     A    #  de contrôle. (entête en ligne 4)                       # 
     A    #                                                         # 
      *   ########################################################### 
      *
     A          R FC                        SFLCTL(FE)
     A                                      SFLSIZ(0016)
     A                                      SFLPAG(0015)
     A  30                                  SFLDSP
     A  30                                  SFLDSPCTL    <---- 
     A N30                                  SFLCLR
     A  30                                  SFLEND
     A                                  4  5'entête du sous fichier'
     A                                        DSPATR(UL)


|    Changer de couleur
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DEFINITION DU SOUS-FICHIER. 
 
 
          ########################################################### 
     A    #               Format de contrôle                        # 
     A    #                                                         # 
     A    # SFLEND provoque l'apparition du + ou de A suivre ...    # 
     A    #  sur toutes les pages, sauf la dernière , si la         # 
     A    #  condition est vraie.                                   # 
      *   ########################################################### 
      *
     A          R FC                        SFLCTL(FE)
     A                                      SFLSIZ(0016)
     A                                      SFLPAG(0015)
     A  30                                  SFLDSP
     A  30                                  SFLDSPCTL
     A N30                                  SFLCLR
     A  30                                  SFLEND(*MORE)  <----  
     A                                  4  5'entête du sous fichier'
     A                                        DSPATR(UL)


|    Changer de couleur
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DEFINITION SOUS SDA. 
 
   Ajoutez un nouveau format (option 1) de type SFL :
 
                           Ajout d'un nouveau format
 
 Fichier . . . . . :   QDDSSRC                Membre . . . . . . :   ECRAN1
   Bibliothèque  . :     FORMATION0           Type de source . . :   DSPF
 
 Indiquez vos choix et appuyez sur ENTREE.
 
   Nouveau format  . . . . . . . . . . . . .   FE           Nom
 
   Type  . . . . . . . . . . . . . . . . . .   SFL          RECORD, USRDFN
                                                            SFL,    SFLMSG
                                                            WINDOW, WDWSFL
                                                            PULDWN, PDNSFL
                                                            MNUBAR
   Format de contrôle de sous-fichier  . . .   FC           Nom
 


|    Changer de couleur
 
 ne renseignez pas les mots clés pour FE, par contre pour FC, indiquez :
 
 
                Sélection des mots clés de contrôle de sous-fichier
 
  Format de contrôle de sous-fichier . . . . : FC
 
  Indiquez vos choix et appuyez sur ENTREE.
 
                                      O=Oui
    Mots clés généraux  . . . . . . .    O     <- SLFDSP, SFLCLR, SFLEND
    Mise en page de sous-fichier . . .   O     <- SFLPAG, SFLSIZ
    Messages de sous-fichier . . . . .    
 
    Sélection mots clés pour le format   O     <- CAxx, OVERLAY, etc...
 
 -------------------------------------------------------------------------
 
 En validant vous retrouverez la liste des formats, concevez ensuite
  les images normalement, par l'option 12 (chaque zone de FE est dupliquée
  autant de fois que la valeur de SFLPAG).


|    Changer de couleur
 
  Avec le concepteur RDP/RDI :
 
 
    glissez un "enregistrement de Sous-fichier" depuis la palette
 
     cela va créer : SFL1 (format d'enregistrement)
 
                     CTL1 (format de controle)
 
 
     Dans la fenêtre propriétés de ce dernier vous avez accès aux mot-clés
 
 
      Contrôle de sous fichier : SFLSIZ, SFLPAG, SFLDSP/SFLDSPCTL
 
      Mots clé de commande : SFLCRL, SFLEND
 
 
     n'oubliez pas d'apporter des conditions (indicateurs)
 
 


|    Changer de couleur
 
                UTILISATION DES SOUS-FICHIERS DANS UN PROGAMME GAP. 
 
  DECLARATION DU SOUS-FICHIER. 
 
  Le sous-fichier fait partie du fichier écran il sera donc 
  défini avec le fichier écran. 
 
  Pour ajouter 1 enregistrement à un sous-fichier on se doit 
  d'indiquer le numéro de l'enregistrement, le rang à écrire.
 
  Pour cela on associera grâce à un mot-clé en spécif F
  une zone qui contiendra le numéro de l'enregistrement 
  du sous-fichier.(Ici cette zone est appelée RANG).
 
     FECRAN     CF   E             WORKSTN SFILE(FE : RANG)
                                                 /       !
                                               /         V 
                                   nom du format    zone qui contiendra le
                                 d'enregistrement   rang de l'enregistrement
 
   Ou   DCL-F ECRAN WORKSTN SFILE(FE :RANG)


|    Changer de couleur
 
  GESTION DES SOUS-FICHIERS. 
 
   4 GRANDES ETAPES MARQUENT LA GESTION DES SOUS-FICHIERS 
 
 
  1 LA REMISE A BLANC : elle permet de supprimer tous les enregistrements 
                        d'un sous-fichier. 
 
 
  2 LE REMPLISSAGE    : il permet à partir des renseignements de la base 
                        de données d'alimenter le sous-fichier. 
 
 
  3 L'AFFICHAGE       : il permet la visualisation des données placer 
                        dans le sous-fichier. 
 
 
  4 LA LECTURE        : elle permet la lecture des données saisies par 
                        l'utilisateur dans le sous-fichier. 
 
 


|    Changer de couleur
 
  REGARDONS POUR CHACUNE DES 3 PREMIERES ETAPES LE MODULE CORRESPONDANT. 
 
  1 LA REMISE A BLANC : elle permet de supprimer tous les enregistrements 
                        d'un sous-fichier. 
 
  Ce module consiste a mettre en fontion l'indicateur 
  associe à la fonction SFLCLR, à ecrire le format 
  DE contrôle, à mettre hors fonction l'indicateur 
  associe à la fonction SFLCLR, et à remettre à zéro 
  la zone qui contient le numéro de rang. 
 
      /free
 
        // sflclr
          *in30 = *off ;
          write     FC ;
          *in30 = *on  ;
        // remise à 0 du rang
          rang = 0     ;
      /end-free
 


|    Changer de couleur
 
  REGARDONS POUR CHACUNE DES 3 PREMIERES ETAPES LE MODULE CORRESPONDANT. 
 
  2 LE REMPLISSAGE    : il permet à partir des renseignements de la base 
                        de données d'alimenter le sous-fichier. 
 
  Ce module consiste à additionner 1 à la zone 
  qui contient le rang et à écrire le format D'ENREGISTREMENT 
 
 
 
     /free
 
      // penser à incrémenter rang
           rang = rang + 1
           write     FE
 
     /end-free
  
      ces lignes sont probablement placées dans une boucle (lecture B.de D.)
 
 


|    Changer de couleur
 
  REGARDONS POUR CHACUNE DES 3 PREMIERES ETAPES LE MODULE CORRESPONDANT. 
 
  3 L'AFFICHAGE       : il permet la visualisation des données placées
                        dans le sous-fichier. 
 
  Ce module consiste à mettre en fontion le ou les indicateurs 
  associé(s) à la fonction SFLDSP et SFLDSPCTL (si ce n'est déja fait)
  et à écrire le format DE contrôle.
 
 
 
     /free
 
           // attention, afficher un sous fichier vide provoque une erreur !
           exfmt     FC
 
     /end-free
 
          (c'est le module le plus simple)
 
 


|    Changer de couleur
 Soit, en résumé
 ---------------
     /free
        Chain ma-clé fichier;
        if not %found;
           // message d'erreur, ne pas chercher à afficher la liste
        else;
           // mise à blanc 
           *in30 = *OFF;
           write FC;
           *IN30 = *ON;
           rang = 0;
           // chargement du sous fichier 
           dou %EOF;
              rang = rang + 1;
              write FE;
              readE ma-clé fichier;
           enddo;
           // affichage (WRITE préalable d'un pied d'écran, si besoin)
           exfmt FC
        endif;
     /end-free


|    Changer de couleur
 
 
           LECTURE DES ENREGISTREMENTS D'UN SOUS-FICHIER 
 
  Il est possible ensuite de lire les enregistrements 
   du sous-fichier grâce aux 2 instructions ci-dessous 
 
 
  READC 
 
  Permet de lire seulement les enregistrements modifiés 
  d'un sous-fichier. (READ Change) 
 
 
 
  CHAIN 
 
  permet de lire un enregistrement d'un sous-fichier 
  en fournissant le numéro de rang en FACTEUR 1.
 
 
 


|    Changer de couleur
 
   READC 
 
  EMPLOI DU READC 
 
  Prenons un exemple 
  Supposons le sous-fichier suivant. 
 
     ##################################################################### 
     ##                                                                 ## 
     ##                   INTERROGATION FICHIER ARTICLE                 ## 
     ##                                                                 ## 
     ##      Opt NOART     LIBELLE  QUANTITE    PRIX UNITAIRE           ## 
     ##       _  010        CLOU      100           1,00                ## 
     ##       _  020        VIS       150           2,00                ## 
     ##       _  030        ECROU     050           1,50                ## 
     ##       _  040        TIGE      175           1,25                ## 
     ##                                                                 ## 
     ##  ROLLUP   PAGE SUIVANTE                                         ## 
     ##  ROLLDOWN PAGE PRECEDENTE                                       ## 
     ##                                                                 ## 
     ##################################################################### 


|    Changer de couleur
 
   READC 
 
    ###################################################################### 
    ## On a donné la possibilite à l'opérateur                          ## 
    ## de rentrer un caractère devant chaque enregistrement.            ## 
    ##                                                                  ## 
    ###################################################################### 
     ##################################################################### 
     ##                                                                 ## 
     ##                   INTERROGATION FICHIER ARTICLE                 ## 
     ##                                                                 ## 
     ##      Opt NOART     LIBELLE  QUANTITE    PRIX UNITAIRE           ## 
     ##          010        CLOU      100           1,00                ## 
     ##       5  020        VIS       150           2,00                ## 
     ##          030        ECROU     050           1,50                ## 
     ##       5  040        TIGE      175           1,25                ## 
     ##                                                                 ## 
     ##  ROLLUP   PAGE SUIVANTE                                         ## 
     ##  ROLLDOWN PAGE PRECEDENTE                                       ## 
     ##                                                                 ## 
     ##################################################################### 


|    Changer de couleur
 
   READC 
 
    ###################################################################### 
    ## Le programme devra, si un caractère est saisi, lire              ## 
    ## l'enregistrement modifié et afficher les informations            ## 
    ## complétes de l'enregistrement.                                   ## 
    ###################################################################### 
     ##################################################################### 
     ##                                                                 ## 
     ##                   INTERROGATION FICHIER ARTICLE                 ## 
     ##                                                                 ## 
     ##      Opt NOART     LIBELLE  QUANTITE    PRIX UNITAIRE           ## 
     ##       _  010        CLOU      100           1,00                ## 
     ##       5  020        VIS       150           2,00                ## 
     ##       _  030        ECROU     050           1,50                ## 
     ##       5  040        TIGE      175           1,25                ## 
     ##                                                                 ## 
     ##  ROLLUP   PAGE SUIVANTE                                         ## 
     ##  ROLLDOWN PAGE PRECEDENTE                                       ## 
     ##                                                                 ## 
     ##################################################################### 


|    Changer de couleur
 
   READC 
 
  SYNTAXE 
     c                   readc     FE                                ==
                                  /                                  /
                                 /                                  V 
                         nom du format           sera ON lorsqu'il n'y aura
                         d'enregistrement        plus d'enregistrements
                                                 modifiés à lire.
 
                                                 (%EOF depuis la V4.20)
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
   READC  
 
  SYNTAXE 
 
     c                   readc     FE                                60
 
  Si l'utilisateur peut sélectionner plusieurs enregistrements 
  il faut placer la lecture dans une boucle qui s'arrète lorsqu'il n'y a
   plus d'enregistrement modifié (60 ou %EOF).
 
  s'il s'agit d'une variable de type option, il faut aussi tester sa valeur
   (si l'utilisateur à choisi cet enregsitrement, puis effacé, l'option
    est à blanc) et la réinitialiser après traitement dans le cas contraire.
      /free
              readc     FE
              dow       not %EOF
          //..... (traitement)
                option = ' '
                update    FE
                readc     FE
              enddo
      /end-free                                                              


|    Changer de couleur
 
 Si vous souhaitez répartir la charge de traitement de la constitution
  de la liste, le procédé est le suivant :
 
  - chargement d'une page (valeur de SFLPAG)
 
  - affichage
 
  - si rollup (il faut intercepter la touche de fonction)
 
 
       - chargement d'une page
 
 
       - affichage de cette page
         (il faut donc avoir le choix de la page à afficher)
 
 
 - dernier point, la gestion du SFLEND (à Suivre ... ou Fin.)
 
    doit être gérée en partie par le programme
 


|    Changer de couleur
  Extrait du DSPF :
     A          R FE                        SFL
     A            ZON1      R        O  5  4
     A            ZON2      R        O  5 12
     A            ZON3      R        O  5 25
     A            ZON4      R        O  5 50
      *
      *
     A          R FC                        SFLCTL(FE)
     A                                      SFLSIZ(0016)
     A                                      SFLPAG(0015)
     A  30                                  SFLDSP
     A  30                                  SFLDSPCTL
     A N30                                  SFLCRL
      *
      *    32 = fin de sous fichier (je n'ai plus rien à montrer)
     A  32                                  SFLEND
     A N32                                  ROLLUP(80) 
     A                                      CA12(12)
     A                                  4  5'ENTETE DU SOUS-FICHIER'
      * LIGNE = afficher la page qui contient cette ligne
     A            LIGNE          4S 0H      SFLRCDNBR 


|    Changer de couleur
      chain ma-clé   FICH1F1;
      exsr      miseAblancSF; // sflclr et 0 dans rang
      write     PIED;
      dou       *in12;
       // rollup ou première fois
        if *in80 or (rang = 0);
            exsr  unepage;
        endif;
        exfmt FC;
      enddo
      //
     BEGSR unepage;
        for i = 1 to 15;
            exsr EcritureSF; // write et +1 dans rang
            reade ma-clé FICH1F1;
            IF %EOF;
               *in32 = *ON;
               leave;
            endif;
        endfor;
        ligne = rang;
     ENDSR;


|    Changer de couleur
 
 Remarques :
 
  il ne s'agit que de l'extrait de pgm gérant le sous fichier
 
     le chargement d'une page doit être réalisé au premier passage
     (RANG = 0) et à chaque demande (ROLLUP, soit *IN80)
 
 
  MiseAblancSF correspond au s/pgm de mise à blanc du sous fichier (SFLCLR)
 
  EcritureSF au sous programme d'écriture (+1 dans RANG et WRITE)
 
  vous remarquerez le "FOR i=1 to 15", directement lié à la valeur de SFLPAG
 
                   l'indicateur 32 lié à %EOF.
 
  ainsi que le fait que l'on réalise une lecture de plus que d'écriture
   (READE en fin de boucle après le WRITE FE), afin d'anticiper sur la
   prochaine page.
 
   ==> l'indication "à Suivre..." est alors significative.





©AF400