Vous êtes sur la page 1sur 20

ESAT-DMSI page 12-1

Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur


d’états ]-
11/10/2009 -
11/10/2009

Sommaire

A Principes de base

A1 généralités ....................................................... 2

A2 concepts et terminologie ............................................... 3

A21 description générale des états imprimés .................... .. 3

A22 notion de groupe ............................ 3

A23 les registres spéciaux ............................ 4

A24 la notion de contrôle ...................................... 4

A25 la REPORT SECTION ...................................... 12

A26 les INSTRUCTIONS ...................................... 24

A27 exemple simple ...................................... 28

B Exemples

B1 cas complet : exercice « CROSS » ............................ 37

Cours de COBOL-85 Le Report Writer Chapître 12 - page 1


ESAT-DMSI page 12-2
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

A) Principes de base

A1 Généralités

A11 fonctions du report


writer

Le Report Writer est un sous-système du cobol-85 qui permet de produire des états imprimés en décrivant
leur structure :

taille de la page
haut de page
bas de page
nombre de lignes
...etc....

Il nécéssite de faire une description spécifique des pages ( en report section) ce qui simplifie ensuite
la partie Procédure Division.

L’édition des informations est réalisée en procédure division à l’aide de verbes spéciaux (ex GENERATE qui
permet entre autres , d’écrire les lignes « détail » et qui remplace le verbe WRITE.. AFTER ..).

A12 remarques - inconvénients

Le Report Writer est surtout utilisé pour éditer des fichiers simples , finis
(qui ne nécéssitent plus aucun traitement ) triés et constitués de blocs
répétitifs imbriqués.
(il est donc inadapté aux fichiers relationnels des bases de données où ces blocs
répétitifs sont devenus des objets qui se traduisent par une multitude de
fichiers tables).

Il est relativement « lourd » à utiliser pour des éditions sophistiquées (cf


l’exemple « cross » au paragraphe B).

Toutes les fonctionnalités de description de pages sont redondantes par rapport à


la clause linage que l ‘ on peut placer au niveau de la phrase FD du fichier
imprimante considéré.

C’est un logociel qui correspond à la programmation des années 70 : adapté à des


grosses éditions statistiques [avec lignes bilans , total , sous-total ...] dont
la présentation n’était pas l’objectif prioritaire.

Aujourd’hui , ce type de résultat à obtenir a pratiquement disparu (travail


en conversationnel , consultation d’informations sur masque d’écran ,
édition uniquemement des renseignements utiles ..).

Néanmoins il subsiste des applications « incontournables » ( édition des


feuilles de paye , édition de factures , de bons de commande ..) mais
souvent les résultats bruts obtenus en cobol sont traités (pour la partie
présentation) par la bureautique sur PC.

Cours de COBOL-85 Le Report Writer Chapître 12 - page 2


ESAT-DMSI page 12-3
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

A2 Concepts et terminologie

A21 description générale des états imprimés

A chaque fichier d’impression , on peut affecter une ou n descriptions d’états en citant leur nom dans la
phrase FD : Les états ainsi définis sont décrits dans la REPORT SECTION.

FD nom-du-fichier (imprimante)
.....

.....

{ REPORT IS

REPORTS ARE
} nom d’état n° 1 [ ]
nom d’état n° 2 .

A22 composition générale d’un état : notion de groupes

Un état « vu » par le report writer est un ensemble de groupes (« d’édition ») caractérisés par le lieu
(dans la page) et la cause de leur impression qui doivent être décrits dans un ordre bien précis en report
section.

nom des groupes spécificités


1 « début-état » ou imprimé au début de chaque état une seule fois à la demande de
REPORT HEADING ou RH l’utilisateur. (facultatif)

2 « haut-de-page » ou informations apparaissant automatiquement au début de chaque


PAGE HEADING ou PH nouvelle page.

3 « début-de-contrôle » ou informations apparaissant automatiquement avant une rupture de


contrôle.
CONTROL HEADING ou CH [Un contrôle correspond à une zone du fichier à éditer que
l’on veut observer.
Tous les contrôles utiles sont définis dans la report section
en phrase RD.
On dit qu’il y a une rupture de contrôle quand la zone
considérée change de contenu). -CF A24-

4 « détail » ou informations apparaissant à la demande de l’utilisateur (grâce


au verbe GENERATE) qui constituent le coprs principal du
DETAIL ou DE document à obtenir.
[« détail » => écrite dans la boucle la plus répétitive]

5 « fin-de-contrôle » ou informations apparaissant automatiquement après une rupture de


contrôle.
CONTROL FOOTING ou CF Dès qu’une zone objet d’un contrôle change de valeur , il
y a « rupture de contrôle » : le groupe de « fin-de-
contrôle » est exécuté lors du prochain verbe d’écriture
d’une ligne ( PAR GENERATE).

6 « bas-de-page » ou informations apparaissant automatiquement à la fin de chaque


page.
PAGE FOOTING ou PF Les données du bas de page sont inscrites dans plusieurs cas:
- si le nombre de lignes prévu pour le corps de la page
est atteint.
- On peut forcer certains groupes à s’éditer sur la page
suivante : cette opératiion génère préalablement une
écriture automatique du bas de page.

7 « fin-d’état » ou imprimé en fin d’état une seule fois à la demande de


REPORT FOOTING ou RF l’utilisateur. (facultatif)

Cours de COBOL-85 Le Report Writer Chapître 12 - page 3


ESAT-DMSI page 12-4
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

A23 les registres spéciaux

LINE-COUNTER
C’est un compteur de lignes créé par le générateur pour gèrer les espacements entre les lignes , les
groupes d’édition et pour fixer l’instant d’impression de ces groupes.

Il est accessible dans le programme mais non modifiable.

Il est gèré automatiquement par le générateur ( mise à zéro en début de nouvelle page ) : il représente
le numéro de la dernière ligne du groupe d’édition précédent ou le numéro de la dernière ligne sautée
en cas de mise à jour explicite (par GENERATE ou WRITE ).

Si on a plusieurs LINE-COUNTER (cas de plusieurs états simultanément) il faut les distinguer par le nom
d’état (ex line-counter of état-soeur)

A l’exécution d’un verbe INITIATE , le line-counter est initialisé à zéro.

Line-counter peut apparaître derrière le mot SOURCE (cf la description des lignes et colonnes) ce qui
permet d’imprimer sa valeur.

PAGE-COUNTER
C’est un compteur de pages créé et gèré par le générateur qui contient le numéro de page en cours
d’édition.

Il est accessible dans le programme et modifiable.(avec certains compilateurs [cas du cbl74] il n’est
pas modifiable : il peut seulement être initialisé à l’aide d’une déclarative.)

Il est initialisé à 1 (en début d’état lorsqu’on exécute l’instruction INITIATE ) et incréménté à
chaque saut de page.

Si on a plusieurs PAGE-COUNTER (cas plusieurs états simultanément) il faut les distinguer par le nom
d’état (ex page-counter of état-de-ferrailles).

A24 étude de la notion de contrôle (à partir d’un


exemple)

A241 description de l’exercice « Halhamantte »


Pour expliquer les notions importantes , nous allons étudier un exemple simple :

à partir du fichier du personnel de la société Halhamantte qui possède plusieurs usines comprenant
chacune un certain nombre de services (CF jeu d’essai page 6 ) , on veut éditer un document contenant
la liste de tous les employés du groupe éditée par usine et par service.

Chaque nouvelle usine doit démarrer sur un nouvelle page.

En fin de chaque service, on veut une ligne : « total des notes de tous les employés du service ».

En fin de chaque usine on veut une ligne-bilan :« total des notes de tous les employés de l’usine».

En fin d’état on veut une ligne-bilan : « total des notes de tous les employés de la société».

La première page du document ne doit contenir que les 4 lignes suivantes : Dossier
Liste du Personnel
de la société
HALHAMANTTE

Le fichier fourni est déjà trié de façon à obtenir le résultat souhaité :

Cours de COBOL-85 Le Report Writer Chapître 12 - page 4


ESAT-DMSI page 12-5
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

en ordre croissant sur n° usine


en ordre croissant sur le code service
en ordre croissant sur les zones nom et prénom de l’employé (ce qui permettra de les imprimer par
ordre alphabétique).

Cours de COBOL-85 Le Report Writer Chapître 12 - page 5


ESAT-DMSI page 12-6
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

exemple d’état à obtenir

Cours de COBOL-85 Le Report Writer Chapître 12 - page 6


ESAT-DMSI page 12-7
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

édition
delalisteduPersonnel
delasociété (premièrepage)

HALHAMANTTE

usinen° :
(deuxièmepage)
service

NOM PRENOM note

. . .
TOTAL DU SERVICE

service

NOM PRENOM note

. . .
TOTAL DU SERVICE

service

NOM PRENOM note

. . .
TOTAL DU SERVICE

. . .
TOTAL DE L'USINE

(dernièrepage)

. . .
TOTAL DU SERVICE

. . .
TOTAL DE L'USINE
. . .
TOTAL DE LA SOCIETE

Cours de COBOL-85 Le Report Writer Chapître 12 - page 7


ESAT-DMSI page 12-8
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

FICHIER DES EMPLOYéS

"C:\GESTION\EMPLOYE.TXT" trié en ordre croissant sur :


- n° usine
organisation séquentielle - code service
- nomet pténom

N° code N° date de code Note


usine service employé Nom Prénom divers naissance catégorie / 20 divers
99 x(3) x(7) x(20) x(20) x(10) aammjj x(3) 99v99 x(5)

extrait du jeu
d’essai
n° 1 01 ATE KKKK035 AVIRY LUC 0000000000 700208 OS1 1658 %%%%%
n° 2 01 ATE KKKK159 BLANCHOT JACQUES 0000000000 740208 OS1 1825 %%%%%
n° 3 01 ATE KKKK093 BURNICHOU JACQUES 0000000000 540208 IPE 1660 %%%%%
n° 4 01 ATE KKKK101 CABANOU DIANE 0000000000 630208 IPE 0900 %%%%%
n° 5 01 ATE KKKK161 CESARINNI RICHARD 0000000000 710208 OS1 1269 %%%%%
n° 6 01 ATE KKKK043 CRAPIGNARD CLAIRE 0000000000 460208 TEF 1500 %%%%%
n° 7 01 ATE KKKK109 DE LA PENA BLANDINE 0000000000 560208 IPE 1147 %%%%%
n° 8 01 ATE KKKK163 DORRY JULIE 0000000000 750208 IPE 1800 %%%%%
n° 9 01 ATE KKKK095 ETILIC CHRISTOPHE 0000000000 520208 IPE 1200 %%%%%
n° 10 01 ATE KKKK099 GOLOGOLO FALILOU 0000000000 630208 IPE 1500 %%%%%
n° 11 01 ATE KKKK111 GONZALEZ JUAN 0000000000 530208 OS1 1222 %%%%%
n° 12 01 ATE KKKK155 HERNESTO NADEGE 0000000000 580208 OS1 1700 %%%%%
n° 13 01 ATE KKKK157 JAMBON-DUPAYS PAULE 0000000000 750208 OS1 1812 %%%%%
n° 14 01 ATE KKKK047 LAGALLE SABINE 0000000000 490208 TEF 1745 %%%%%
n° 15 01 ATE KKKK097 LE PODEC ERIC 0000000000 530208 IPE 1600 %%%%%
n° 16 01 ATE KKKK089 MAQUERIN DENISE 0000000000 440208 IPE 1400 %%%%%
n° 17 01 ATE KKKK105 N'ZEZE JEAN-CHARLES 0000000000 640208 IPE 1100 %%%%%
n° 18 01 ATE KKKK103 NICOCHIOU BERTILLE 0000000000 600208 IPE 0900 %%%%%
n° 19 01 ATE KKKK087 PAGEOT SOLANGE 0000000000 440208 IPE 1278 %%%%%
n° 20 01 ATE KKKK023 PERETTI JUSTINE 0000000000 550208 TEF 1850 %%%%%
n° 21 01 ATE KKKK021 PIROUX ALEX 0000000000 630208 OS1 1650 %%%%%
n° 22 01 ATE KKKK041 POPINARD ELODIE 0000000000 440208 OS1 1900 %%%%%
n° 23 01 ATE KKKK025 RACCHI CLEMENCE 0000000000 530208 TEF 1550 %%%%%
n° 24 01 ATE KKKK045 RALATOUF ALBERT 0000000000 490208 TEF 1200 %%%%%
n° 25 01 ATE KKKK037 RICARD HUGUES 0000000000 740208 OS1 1546 %%%%%
n° 26 01 ATE KKKK165 RIPOUNET MARCEL 0000000000 790208 IPE 1801 %%%%%
n° 27 01 ATE KKKK107 STOKOVIC ROLAND 0000000000 560208 IPE 1125 %%%%%
n° 28 01 ATE KKKK039 VISQUI DANIEL 0000000000 420208 OS1 1825 %%%%%
n° 29 01 ATE KKKK091 VOUBI-LAPLAC VICTOR 0000000000 750208 IPE 1600 %%%%%
n° 30 01 ATE KKKK167 XEFINI XAVIER 0000000000 740208 IPE 1700 %%%%%
n° 31 01 DIR KKKK113 AVECCHEZ POLO 0000000000 530208 OS1 1400 %%%%%
n° 32 01 DIR KKKK117 BARGEOT-PINAC PIERRE 0000000000 550208 OS1 1289 %%%%%
n° 33 01 DIR KKKK014 BROTIGNAC URBAIN 0000000000 680914 TEF 1536 %%%%%
n° 34 01 DIR KKKK151 CATIFLON JACQUES 0000000000 690208 OS1 1700 %%%%%
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .

Pour expliquer la notion de contrôles et de groupes , nous allons étudier cet exercice à l’aide d’une
méthode relativement ancienne sur laquelle est fondé le principe de fonctionnement du Report Writer
intitulée L C P (logique de construction de programmes).

Cours de COBOL-85 Le Report Writer Chapître 12 - page 8


ESAT-DMSI page 12-9
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

Puis nous transposerons le résultat obtenu en P S (programmation structurée) plus largement usitée
aujourd’hui.

L’ analyse d’un problème débouchant sur un programme écrit en Français (pseudo-code) est totalement
indépendante du langage utilisé ➪ nous n’évoquerons le report writer qu’au moment de la traduction en
cobol.
Regardons les données fournies en entrée , repérons les groupes répétitifs et classons les suivant leur
hierarchie (qui correspond aux critères de tri des informations ) : on constate que l’on a

plusieurs usines (plusieurs est noté u fois ce qui signifie qu’on a de 1 à u usines)

chaque usine comprenant


plusieurs services

chaque service étant composé de plusieurs


employés

programme
{ une usine
u fois
{ un service
s fois
{ un employé
e fois

ordre hiérarchique = ordre correspondant au tri des informations

{ { {
début programme début usine début service on rajoute ensuite
des débuts
programme une usine un service un employé et fins pour chacun
u fois s fois e fois des ensembles trouvés

fin programme fin usine fin service

on numérote ensuite les différents « pavés » (ensemble d’instructions)


de 10 en 10 en tournant dans le sens des aiguilles d’une montre. 10 début programme
lecture du fichier
10 20 30

{ { {
début programme début usine début service 20
programme une usine un service un employé 40 début usine
u fois s fois e fois

fin programme fin usine fin service


30
70 60 50 début service

40 traitement
d’un employé

Il ne reste plus qu’à dessiner


l’organigramme correspondant , 50
fin service

60
fin usine

Cours de COBOL-85 Le Report Writer Chapître 12 - page 9


ESAT-DMSI page 12-10
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

puis à faire la liste des instructions importantes (lectures ,


écritures , mise à l’état initial , calculs ...)
70 fin programme
puis enfin à écrire le programme en français (nommé en LCP : LOIL => Liste Ordonée des Instructions
Logiques ou LOCO => Liste ordonnée des Commandes d’Opérations ou Pseudo-code )

Etant donné la simplicité du problème , nous écrirons directement les instructions importantes sur
l’organigramme sans faire les listes exhaustives que préconise la méthode.
10
ouvrirdébut programme
les fichiers
les contrôles au total-société ← 0
niveau du écriture sur l’imprimante des 4 lignes titre du document
report writer lecture du fichier des employés
(cf page suivante)

20 début usine

β mise en zone de sortie du n° usine lu


écriture de la ligne-usine après saut de page
mise en zone mémoire du n° usine lu
total-usine ← 0
groupe contrôle début usine

début service
30
mise en zone de sortie du code service lu
γ écriture de la ligne-service
mise en zone mémoire du code service lu
total-service ← 0
groupe contrôle début service

traitement d’1 employé


40
mise en zone de sortie des informations-employé (nom,prénom,..)
écriture de la ligne-détail
groupe « détail » θ calcul total-service = total-service + note lue
lecture du fichier des employés

tant qu’il reste des employés à traiter pour ce service et cette


usine
(⇔même service ET même usine ETnon fin-de-fichier)

50 fin service
γ‘ mise en zone de sortie du total service
écriture de la ligne-bilan « total service »
groupe contrôle fin service calculer total-usine = total-usine +total-service

tant qu’il reste des services à traiter pour cette usine


(⇔ même usine ET non fin-de-fichier)

60 fin usine

β‘ mise en zone de sortie du total usine


écriture de la ligne-bilan : « total-usine »
calculer total-société = total-société + total-usine
groupe contrôle fin usine

tant qu’il reste des usines à traiter ( ⇔ non fin-de-fichier)

α

Cours de COBOL-85 Le Report Writer Chapître 12 - page 10
ESAT-DMSI page 12-11
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

70 fin programme
groupe contrôle final mise en zone de sortie du total-société
écriture de la ligne-bilan « total-société
fermer les fichiers
arrêt du programme
Avant de continuer par l’écriture du pseudo-code du programme , nous allons étudier la notion de « contrôle » et
de rupture de contrôle que nous utiliserons avec le report writer au moment de la traduction en cobol.

En effet , cette notion découle directement des organigrammes réalisés par la méthode LCP.

A242 définition des contrôles du report writer »


Un contrôle est une action à réaliser sur une zone quand celle-ci change de contenu.

dans notre exemple , à chaque fois qu’on change de service il y a une action à faire

au début il faut écrire une ligne γ


avec le code du nouveau service

à la fin , il faut faire la somme des notes de tous les employés γ‘


du service précédent

⇒ la zone service va être définie comme zone de contrôle

dans notre exemple , à chaque fois qu’on change d’usine il y a une action à faire

au début il faut écrire une ligne avec β


le n° de la nouvelle usine

à la fin , il faut faire la somme des notes β‘


de tous les services de l’usine précédente

⇒ la zone usine va être définie comme zone de contrôle

A la fin du programme quand on a traité toutes les usines , il reste une action à réaliser :
faire la somme totale pour tous les employés de la société.

cette action va faire l’objet d’un contrôle dit « final ». α‘

remarques importantes

 Pour un état déterminé , ces contrôles doivent être cités dans la phrase RD en REPORT SECTION dans
l’ordre hiérachique inverse [CF la report section au paragraphe B1 ]
ex rd mon-état
controls are final usine service
. . .
. . .

Cours de COBOL-85 Le Report Writer Chapître 12 - page 11


ESAT-DMSI page 12-12
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

La description d’un état avec le report writer étant un ensemble de « groupes » , tous ces contrôles
vont faire l’objet de groupes écrits à la suite de la phrase RD , obligatoirement dans l’ordre
logique de leur exécution (correspondant à l’organigramme).

 La ligne d’information écrite dans la boucle la plus répétitive (appelée la ligne-détail) donnera un
groupe nommé DETAIL.

pour notre exemple , on aura donc une report section qui aura la structure suivante :
.
.
DATA DIVISION.
FILE SECTION.
fd fentree.
1 enreg.
3 enum-usine pic 99.
3 ecode-service pic xxx.
3 pic x(7). description du fichier fourni en entrée
3 enom pic x(20). ( CF page 6 )
3 eprenom pic x(20).
3 pic x(19).
3 enote pic 99v99.
3 pic x(5).

fd fimpri report is mon-etat.


1 sligne pic x(80).
WORKING-STORAGE SECTION.
.
. nom des zones de contrôle que l’on trouve
. dans la description du fichier en entrée.
REPORT SECTION.
rd mon-etat
controls are final enum-usine ecode-service
.
. . . .
nom du groupe « début de nom de la zone sur laquelle
contrôle » porte le contrôle
sur le n° usine (nom facultatif)

1 debut-usine type control heading enum-usine.


3 line 11.
5 column 1 pic ..
3 line 12. indique qu’on a à faire à un
. groupe du type « début de contrôle »
(pour la description CF paragraphe « la report section )

1 debut-service type control heading ecode-service.


3 line plus 1.
5 column 75 pic xxx value "<==". l’ordre dans
(pour la description CF paragraphe « la report section ) lequel on
décrit les
1 ma-ligne-detail type detail. groupes est
3 line plus 1. exactement
celui déterminé
(pour la description CF paragraphe « la report section ) à l’aide de notre
organigramme :
1 fin-sercice type control footing ecode-service next group next page.
3 line plus 2. ⇓
5 column 22 pic x(22) value "...
(pour la description CF paragraphe « la report section ) début usine
début service
traitement détail
fin service
Cours de COBOL-85 Le Report Writer fin -usine
Chapître 12 page 12
fin programme
ESAT-DMSI page 12-13
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

1 fin-usine type control footing enum-usine.


3 line plus 1.
5 column 13 pic x(24) value "...
(pour la description CF paragraphe « la report section )

1 fin-programme type control footing final.


3 LINE plus 2.
5 column 20 pic x(31) value "total société = ..

Terminons notre analyse de la page 8 par l’écriture du pseudo-code.

remarques :

Dans cette étude , nous avons volontairement ignoré les problèmes de présentation (saut de pages ,
saut de lignes , présence d’un haut de page , présence d’un bas de page ...etc...) car ceux-ci
seront traités par les différentes options du report writer.

[si on avait voulu prendre en compte cette partie , il aurait fallu gèrer nous-même un compteur de
lignes et le tester à chaque écriture].

Pour information , nous donnons en page 12 le programme correspondant à l’organigramme page 8 car
en réalité ,on choisit généralement à partir de l’analyse ( de la page 7 - reprise ci-dessous )
d’écrire le programme directement sous forme structurée

passage à la programmation structurée [ à partir de l’analyse « LCP » du problème]

  
des employés

pour ce service ET
cette usine ET non FF
programme une usine
début

programme

u fois
fin
un service

programme
s fois
tant qu’il reste des usines à traiter tant qu’il reste des services

⇔ non fin-de-fichier

fin-faire
un employé
pour cette usine ETnon FF

e fois
fin-faire
tant qu’il reste

fin-faire
à traiter
pour

on tourne dans le sens des aiguilles d’une montre et on obtient la structure suivante :

début programme
lecture du fichier en entrée
(instructions à exécuter une fois par programme)
.
.
faire tant que non fin-de-fichier
(instructions à exécuter une fois par usine en début)
.
.
faire tant qu’il reste des services à traiter pour cette usine ET non fin-de-fichier
(instructions à exécuter une fois par service en début)
.
.
faire tant qu’il reste des employés pour ce service de cette usine ET non fin-de-fichier
(instructions pour traiter un employé)

Cours de COBOL-85 Le Report Writer Chapître 12 - page 13


ESAT-DMSI page 12-14
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

.
.
re-lecture du fichier en entrée
fin-faire
(instructions à exécuter une fois par service en fin)
.
.
fin-faire
(instructions à exécuter une fois par usine en fin)
.
.
fin-faire
(instructions à exécuter une fois par programme en fin)
.
.
fin programme

Le pseudo-code de l’exercice « Halhamante » version « LCP » et version structurée

EN L C P EN STRUCTURE

10.
ouvrir les fichiers début programme
écriture des lignes titre ouvrir les fichiers
total-société ← 0 écriture des lignes titre
lecture du fichier en entrée total-société ← 0
si fin-de-fichier (FF) aller à 70. lecture du fichier en entrée
20. faire tant que non fin-de-fichier
mise en Zone Mémoire (ZM) du n° usine lu mise en Zone Mémoire (ZM) du n° usine lu
mise en Zone Sortie (ZS) du n° usine lu mise en Zone Sortie (ZS) du n° usine lu
écriture de la ligne - usine écriture de la ligne - usine
total-usine ← 0. total-usine ← 0.
30. faire tant que même usine et non FF
mise en ZM du code-service lu mise en ZM du code-service lu
mise en ZS du code-service lu mise en ZS du code-service lu
écriture de la ligne - service écriture de la ligne - service
total-service ← 0. total-service ← 0.
40. faire tant que même usine ,même serv.ET non FF
mise en ZS des informations ‘’employé’’ lues mise en ZS des informations ‘’employé’’
(nom,prénom,note) lues
écriture de la ligne détail écriture de la ligne détail
calcul total-service = total-service total-service = total-service + note lue
+ note lue lecture du fichier en entrée
lecture du fichier en entrée fin-faire
si n°ser lu = n° ser(ZM) et n°usine lu = mise en ZS de total-service
n°usine ZM et non FF aller à 40. écriture de la ligne total service
50. total-usine = total-usine + total-service
mise en ZS de total-service fin-faire
écriture de la ligne total service mise en ZS de total-usine
calcul total-usine = total-usine + écriture de la ligne total usine
total-service calul total-société = total-société + total-usine
si n°usine lu = n°(ZM) et non FF fin-faire
aller à 30. mise en ZS de total-société
60. écriture de la ligne total société
mise en ZS de total-usine fermer les fichiers
écriture de la ligne total usine arrêt du programme.
calcul total-société = total-société + fin programme
total-usine
si non FF aller à 20.
70.
mise en ZS de total-société
écriture de la ligne total société
fermer les fichiers
arrêt du programme.

Cours de COBOL-85 Le Report Writer Chapître 12 - page 14


ESAT-DMSI page 12-15
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

(La traduction en cobol du programme, avec utilisation du report writer , fait l’objet du paragraphe A27
qui est logiquement précédé de la description détaillé de la report section.)

A25 La REPORT SECTION (détaillée) - règles et


syntaxe

A251 la phrase RD

A2511 : composition précise d’une page


Une page en cobol est définie à l’aide de 5 entiers (aussi bien avec une clause linage
qu’avec le report writer) qui permettent de définir précisément : le corps de la page ,
le haut de page, le bas de page, la position de la dernière ligne détail et la zone dite
de footing.

chacun de ces éléments décrits sur le schéma de la page suivante étant facultatifs (ex :
on peut éditer un imprimé sans bas de page).

Cours de COBOL-85 Le Report Writer Chapître 12 - page 15


ESAT-DMSI page 12-16
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

Ces entiers qui définissent les éléménts de la page expriment tous un nombre de lignes.

entier-2 n° de la première ligne du haut de page

HAUT DE PAGE ou PAGE HEADING

entier-3 n° de la première ligne-détail

entier-1 =
nombre de
lignes
total
de la page
[CF les règles sur les
entiers 1 à 5
page suivante ]

entier-4 dernière ligne détail

entier-5 FOOTING (dernière ligne avant le bas de page)


entier-5 + 1

BAS DE PAGE ou PAGE FOOTING

A2512 format de la phrase RD

REPORT SECTION.
RD nom-d’état

{ }
CONTROL IS FINAL
CONTROLS ARE
{ FINAL nom-donnée-1 . . . . . nom-donnée-n
nomdonnée-1 . . . . . nom-donnée-n }

[ PAGE
{ } LIMIT

LIMITS ARE
IS
entier-1
{ }LINE

LINES

[ HEADING entier-2
]
[ FIRST DETAIL entier3 ]

[
[
LAST DETAIL

FOOTING
entier4 ]

entier5 ]
] ●

Cours de COBOL-85 Le Report Writer Chapître 12 - page 16


ESAT-DMSI page 12-17
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

La REPORT SECTION doit toujours être la dernière section de la data division.


 RD doit être inscrit en colonne 8.

L’absence de la clause PAGE LIMIT entraîne l’inexistence des registres LINE-COUNTER et PAGE-
 COUNTER => elle est donc obligatoire si :

- on a à utiliser des groupes d’édition qui font référence à la mise en page (ex ceux de type

haut-de-page , bas-de-page ) ou si on veut imprimer le n° de ligne ou le n° de page.

- si on désire un contrôle automatique de la présentation des pages.

 Entier-1
indique la hauteur de la page (longueur logique en nbre de lignes qui peut être
différente de la longueur du feuillet).

 Entier-2
donne le n° de la première ligne à partir de laquelle pourront figurer les informations
de type « HAUT-DE-PAGE ».
L’option par défaut étant HEADING 1.

 Entier-3
donne le n° de la première ligne à partir de laquelle pourront figurer des informations
de type « DETAIL ».
l’option par défaut étant entier-2 et à défaut , 1.

 Entier-4
donne le n° de la dernière ligne au-delà de laquelle ne pourront plus figurer des
informations de type « DETAIL ». ou de type « DEBUT DE CONTROLE.
L’option par défaut est entier-5 ou à défaut entier-1.

 Entier-5
donne le n° de la ligne au-delà de laquelle ne pourront plus figurer les informations de
type « FIN DE CONTROLE » et à partir de laquelle pourront figurer les informations de
type « BAS DE PAGE ».

 Tous ces entiers doivent être strictement positifs et respecter l’inégalité suivante :
entier-1 >= entier-5 >= entier-4 > entier-3 >= entier-2 >= 1.

A252 Description des groupes d’édition

A252-a généralités
La description de chaque groupe apparaît immédiatement après la phrase RD de l’état
concerné.
L’ordre dans lequel on inscrit les groupes est imposé (CF le paragraphe A24 ).

Chaque groupe comporte une description à 3 niveaux :

le premier (nbre niveau 1 ) sert à indiquer le type de groupe (ex « TYPE CONTROL
HEADING » ou type « DETAIL » ...) et éventuellemnt la position du groupe suivant
par rapport à lui (ex « NEXT GROUP NEXT PAGE ).

Cours de COBOL-85 Le Report Writer Chapître 12 - page 17


ESAT-DMSI page 12-18
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

le second (nbre niveau 3 [ou +] ) permet de donner sa position dans la page par
rapport au compteur de lignes (LINE-COUNTER).

Cours de COBOL-85 Le Report Writer Chapître 12 - page 18


ESAT-DMSI page 12-19
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

Ce niveau est répété autant de fois qu’il y a de lignes d’impression dans ce


groupe.
Les différentes lignes doivent être inscrites dans l’ordre correspondant à leur
position ( ex : description de la ligne 3 avant celle de la ligne 4 ).

le troisième (nbre niveau 5 [ou +]) sert à décrire toutes les données appartenant
à ce groupe (en précisant à partir de quelle colonne elles doivent être éditées).

A252-b FORMAT POUR LA DESCRIPTION DES GROUPES


NB : nous voyons d’abord le format général de la description des groupes ; les
formats des différentes clauses (TYPE, NEXT GROUP , LINE , COLUMN , GROUP
INDICATE , BLANK , JUSTIFIED , PICTURE , SOURCE , SUM , VALUE ) étant détaillés
dans les pages suivantes.

1 nom-donnée-1
clause TYPE ❶

[ clause NEXT GROUP❶ ] .

3 clause LINE ❶ .
5 [ nom-donnée-2 ].
clause COLUMN ❶

[ clause GROUP INDICATE ❶ ]


[ clause BLANK ❶ ]
[ clause JUSTIFIED ❶ ]
[ clause PICTURE ❶ ]

{ }
clause SOURCE ❶

clause SUM ❶ .
clause VALUE ❶

❶⇒ ( voir le format pages suivantes)


Règles

Un goupe d’édition comprend toutes les données comprises entre son niveau 1 et le niveau 1
 suivant.

 Nom-donnée-1 identifie le groupe : il n’est obligatoire que si on fait référence à ce groupe à


l’aide d’une instruction spéciale. (CF parag A31)

Cours de COBOL-85 Le Report Writer Chapître 12 - page 19


ESAT-DMSI page 12-20
Cours CBL-85 CHAPÎTRE 12 : Le REPORT WRITER [ l’éditeur
d’états ]-
11/10/2009 -
11/10/2009

Nom-donnée-2 identifie un élément du groupe : il est obligatoire s’il fait d’une autre référence
dans une autre description (par l’emploi de la clause SUM par exemple).

Cours de COBOL-85 Le Report Writer Chapître 12 - page 20