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) |
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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 |
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). |
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) |
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) |
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. |
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 |
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.) |
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) |
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 |
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. |
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 ## ## ## ##################################################################### |
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 ## ## ## ##################################################################### |
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 ## ## ## ##################################################################### |
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) |
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 |
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 |
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 |
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; |
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. |