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:
3 billets de 500
1 billet de 100
1 piece de 20
1 piece de 2
1 piece de 1.
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.
