ch3 ch5

Chapitre IV: Utilisation des grilles d'écran






Dans ce chapitre, nous allons vous expliquez comment créer et se servir d'une grille d'écran sur un AS/400 et dans un programme COBOL. Le programme exemple sera de compter le nombre de billets composant une somme saisie par l'utilisateur. Par exemple pour 1623 francs, le programme donnera:


1) Création d'une grille d'écran

2) Utilisation dans un programme exemple



Programme exemple sur les grilles d'écran


IDENTIFICATION DIVISION.
PROGRAMM-ID.DECOMPTE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GDECOMPTE
        ORGANIZATION TRANSACTION
        CONTROL-AREA FTOUCHES.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE.
        COPY DDS-ALL-FORMATS OF GDECOMPTE.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
01 BILLETPIECE.
        02 BP OCCURS 9 PIC S9(4).
01 RESULTAT.
        02 RESULT OCCURS 9.
                03 RESUL PIC ZZZ9.
01 MONTANT.
        02 SOMME PIC S9(4).
01 I PIC 99.
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE.
        MOVE 500 TO BP(1).
        MOVE 200 TO BP(2).
        MOVE 100 TO BP(3).
        MOVE 50 TO BP(4).
        MOVE 20 TO BP(5).
        MOVE 10 TO BP(6).
        MOVE 5 TO BP(7).
        MOVE 2 TO BP(8).
        MOVE 1 TO BP(9).
DEB.
        MOVE 1 TO I.
        INITIALIZE DECOM COMPTE.
        WRITE EGRILLE FORMAT "DECOM".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE CORR DECOM TO MONTANT.
TQ.
        IF I < 10
                DIVIDE SOMME OF MONTANT BY BP(I) GIVING RESUL(I)
                REMAINDER SOMME OF MONTANT
                ADD 1 TO I
                GO TO TQ
        END-IF.
        MOVE RESULTAT TO BILLET.
        WRITE EGRILLE FORMAT "COMPTE".
        READ FGRILLE.
        IF F3 GO TO FIN.
        GO TO DEB.
FIN.
        CLOSE FGRILLE.
        STOP RUN.


1) Création d'une grille d'écran


La commande STRSDA permet d'accéder à un menu dans lequelle il faut indiquer le nom du membre que l'on veut créer. Ce membre contiendra les différents formats de grilles, c'est à dire les différentes grilles. Aprés avoir créé un format, on se retrouve avec un écran dans lequelle on peut positionner son curseur afin de définir les différentes zones de texte, de saisie ou d'affichage.

Pour les zones textes, on utilise +I pour les entrées, +O pour les sorties et +B pour les entrées/sorties. Pour les zones numériques, on utilise +3 pour les entrées, +6 pour les sorties et +9 pour les entrées/sorties.

Si on écrit +B(20), on définit une zone de 20 caractères en INPUT-OUTPUT. De même, si on écrit +9(20), on définit une zone de 20 chiffres en INPUT-OUTPUT. Pour définir les décimaux, on écrit +9(8,2). Cela définit une zone en I-O de 8 chiffres: 6 avant la virgule et 2 après.
On écrit donc entre parenthèse le nombre total de chiffres suivit du nombre de décimale.

Ici, dans notre exemple, la grille DECOM contient une zone en +6(4) qui s'appelle SOMME et la grille COMPTE contient une zone en +6(36) qui s'appelle BILLET. Elle sert à recevoir le vecteur resultat qui a au total 36 caractères.

Retour au programme.


2) Utilisation dans un programme exemple


INPUT-OUTPUT SECTION.


Ceci permet de préparer des zones d'entrées-sorties entre tous les composants de l'AS/400. Sans cela, il est impossible d'accéder aux grilles d'écran, aux fichiers etc...

Retour au programme.


FILE-CONTROL.


Ceci definit le controle des fichiers. Pour l'AS/400, une grille d'écran est un fichier au même titre qu'un fichier physique sur le disque dur. En effet, on peut imaginer que la grille se trouvant sur le disque dur doit bien être ouverte puis refermée comme un autre fichier.

Retour au programme.


SELECT FGRILLE ASSIGN TO WORKSTATION-GDECOMPTE


Pour le programme, on doit définir un nom pour le ou les grilles du membre GDECOMPTE. On retrouve d'ailleurs ce phénomène en C++ avec notamment FSTREAM FICHE où le fichier est utilisé sous le nom de FICHE dans le programme.
La différence avec le C++, c'est qu'en COBOL, on doit utiliser deux noms. Dans ce programme ceux sont FGRILLE et EGRILLE.
Le nom WORKSTATION signifie que les grilles d'écran contenues dans GDECOMPTE sont rattachées à la station de travail. On constatera que les fichiers physiques sont déclarés autrement. cf chapitre V:Utilisation des fichiers séquentiels.

Retour au programme.


ORGANIZATION TRANSACTION


Cela permet de dire au compilateur que des échanges vont s'effectuer au sein des grilles et du programme (sinon cela ne servirait à rien).

Retour au programme.


CONTROL-AREA FTOUCHES.


Ceci est très important car on l'utilise très souvant. Ce sont les touches de fonctions (F1, F2, ... F24).

Retour au programme.


FILE SECTION.


Les grilles étant des fichiers, il faut bien un endroit pour les déclarer.

Retour au programme.


FD FGRILLE LABEL RECORD OMITTED.


Ceci est la déclaration d'un fichier. Le nom FGRILLE permet d'identifier que ce sont des grilles et rien d'autre.

Retour au programme.


01 EGRILLE.


Ceci est le deuxième nom que l'on utilise dans le programme pour les grilles. En schématisant, on peut dire que FGRILLE recueille les informations de la grille vers le programme, tandis que EGRILLE fait l'inverse. En fait, FGRILLE correspond à l'entrée et EGRILLE à la sortie.

Retour au programme.


COPY DDS-ALL-FORMATS OF GDECOMPTE.


Grâce à cela on précise que l'on copie tous les formats du membre GDECOMPTE. Bien entendu, si dans un membre vous avez 500 grilles, vous ne copierez que les formats dont vous avez besoin.

Retour au programme.


01 FTOUCHES PIC XX.


Voici la déclaration des touches de fonctions.

Retour au programme.


88 F3 VALUE "03".


F3 est le nom de la variable et 03 sa valeur. Ne définissez pas F4 avec la valeur 03. Ce serait idiot et on y comprendrait plus rien. Donc pour F1 c'est 01, pour F4 c'est 04 etc...

Retour au programme.


BILLETPIECE


Voici un exemple de vecteur. La structure s'appelle BILLETPIECE avec un vecteur BP de 9 composantes ayant chacune une taille de 4 caractères numériques signés.

Retour au programme.


OPEN I-O FGRILLE.



Comme tout les "fichiers", il faut les ouvrir dans le mode que l'on a choisi. Ici on décide de l'ouvrir en entrée et sortie (I-O), on aurait pu l'ouvrir en entrée (INPUT) ou sortie (OUTPUT) mais compte tenu du fait que l'on saisi des infos dans une grille et qu'on en affiche dans l'autre...

Retour au programme.


INITIALIZE DECOM COMPTE.


Devinez!! Ca initialise les grilles DECOM et COMPTE afin qu'en les affichant, nous n'obtenoins pas n'importe quoi à l'écran en plus de ce que l'on a écrit. Vous avez bien sûr compris que DECOM et COMPTE sont les deux grilles que contiennent le membre GDECOMPTE.

Retour au programme.


WRITE


Write EGRILLE format "DECOM" envoi la grille vers l'écran de l'AS/400, mais pour la voir s'afficher, il faut obligatoirement un READ après le WRITE.

Retour au programme.


READ


Cette commande permet d'attendre une réponse du clavier, cela fonctionne un peut comme ACCEPT. Pour afficher une grille, même si elle ne doit par récupérer d'information, il faut que le WRITE soit suivit du READ.

Retour au programme.


MOVE CORR


Voilà une belle particularitée de l'AS/400. En théorie, on ne doit pas donner le même nom pour une variable dans un programme et dans une grille. Ce serait comme une double déclaration. Cependant si cette variable propre au programme est définit dans une structure, on peut faire un MOVE CORR, c'est à dire un MOVE CORRESPONDING. De cette manière vous ne jonglez pas avec deux noms différents pour une même variable qu'elle soit propre à la grille (pour la saisie ou l'affichage) ou propre au programme (pour les calculs ou l'utilisation).

Retour au programme.


SOMME OF MONTANT


Pour le progamme, SOMME est le SOMME de la grille DECOM tandis que SOMME OF MONTANT est le SOMME du programme.

Retour au programme.


MOVE RESULTAT TO BILLET.


Ici on a l'exemple même de ce qui est illustré au dessus. RESULTAT est une structure du programme tandis que BILLET est un champs de la grille COMPTE. Pourtant on utilise BILLET comme si il avait était définit naturellement dans le programme. Celui-ci ne possédant qu'un seul BILLET il n'y a aucune confusion contrairement à SOMME. Voilà pourquoi SOMME est défini dans une strcture et que son nom est SOMME OF MONTANT.

Retour au programme.



Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE