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
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.
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.
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.
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.
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.
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.
Ceci est très important car on l'utilise très souvant. Ce sont
les touches de fonctions (F1, F2, ... F24).
Retour au programme.
Les grilles étant des fichiers, il faut bien un endroit pour les
déclarer.
Retour au programme.
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.
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.
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.
Voici la déclaration des touches de fonctions.
Retour au programme.
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.
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.
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.
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 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.
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.
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.
Pour le progamme, SOMME est le SOMME de la grille DECOM tandis
que SOMME OF MONTANT est le SOMME du programme.
Retour au programme.
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.