Introduction
Le ReportWriter
Introduction (1)
*Concept de rapport
-Un rapport est le résultat d’un traitement
-Il est composé à la fois de pages et de blocs logiques.
*Description du contenu de la page
-Entête, numéro de page, …
*Description de chaque bloc logique
-Titre, détails, …
-Pour chacun de ces composants, il existe une entête et une finalisation.
Introduction (2)
*Exemple: un bon de commande (blocs logiques)
-Blocs logiques
-En-tête
*Identification du client (numéro, nom, adresse, …)
*Identification de la commande (numéro, date, …)
-Corps de la commande
*Ligne de détail (numéro produit, quantité, PU, PT)
-Finalisation
*Total à facturer, date d’échéance, …
*Structure en page
-En-tête
*Nom de la société, adresse, …
-Finalisation
Introduction (3)
PH
page heading
PF
page footing
CH USINE
Control. head.
CH ATELIER
CF ATELIER
Control foot.
CF USINE
Introduction (4)
*Que permet COBOL ?
-Le ReportWriter permet de:
*décrire le rapport imprimé sous la forme de blocs logiques
*décrire la page physique
-En outre:
*Il réalise certaines totalisations (courante dans les rapports comme le total à payer, …)
*Gère automatiquement la mise en page (rupture sur certaines données, …)
-Se rapproche du paradigme déclaratif(comme SQL)
Introduction (5)
*Mise en page
-3 emplacements possibles pour un groupe:
*haut de la page
-Contient les titres de rapport et de page
*corps de la page
-Contient les blocs logiques
*bas de page
-Contient les fin de page et de rapport
-Réalisation
*Le garnissage: préparation des lignes dans un buffer Le choix d’une page et génération de la mise en page
Introduction (6)
*Positionnement du groupe de lignes (toutes les lignes d’un groupe apparaissant sur une même page)
*Positionnement de chaque ligne (de manière absolue ou relative)
-Structure logique
*Utilisation d’un indicatif de structure dont chaque élément correspond à une décomposition logique.
-ex: numéro d’usine, numéro d’atelier
*Une rupture sur un élément de cet indicatif entraîne automatiquement la clôture du niveau logique correspondant.
-Ex: changement du numéro d’usine
Introduction (7)
-Remarques:
*Il est possible d’exécuter une procédure avant la génération d’un groupe.
*il est possible de ne pas générer (ne pas imprimer) une partie de rapport via SUPPRESS PRINTING
*Il existe deux modes de rapport:
-détaillé qui produit l’ensemble des lignes de détail et les goru de début et fin
-récapitulatif qui produit les titres et finalisations (le rapport contient principalement des totaux)
*Une donnée d’un groupe détail peut être mentionnée comme impression en mode indicatif: elle n’apparaitra que lors de la 1ère occurrence
Introduction (8)
*Déclaration
-A l’instar de la SCREEN SECTION, la déclaration d’un rapport imprimé a lieu également en DATA DIVISION dans la REPORT SECTION.
-Le rapport prend la forme d’une structure COBOL améliorée d’options spécifiques à la génération de rapport.
-Chaque rapport est décrit suivant 2 clauses: CONTROLS
qui mentionne l’indicatif de structure et PAGES qui définit le format de la page
-Chaque groupe contient une clause TYPE qui définit le type du groupe. Les procédures à exécuter avant l’édition d’un groupe sont déclarées dans les DECLARATIVES
Introduction (9)
*A chaque ligne est mentionnée sa position sur la page via LINE.
*Plusieurs clauses peuvent être associée à chaque donnée imprimée :
-COLUMN pour mentionner la position
-VALUE si la donnée est constante et cela permet d’en mentionner la valeur
-SOURCE si la valeur de la donnée provient d’une variable déclarée autre-part dans le programme.
« SUM si la valeur de la donnée est une totalisation réalisée par le module COBOL de génération de rapport.
ReportWriter (1)
*Détails en FILE SECTION:
*Un fichier est imprimé est un fichier comme les autres:
-On trouve en ENVIRONMENT DIVISION une clause
SELECT qui décrit son emplacement sur disque.
*La rubrique FDne contient aucune description d’enregistrement mais une clause spécifique REPORT.
Aucune clause SAME AREA autorisée.
*Le programmeur doit effectuer les opérations OPEN/
CLOSE mais ne doit rédiger aucune instruction WRITE.
*Ecriture réalisée par le ReportWriter.
ReportWriter (2)
*Format:
FD nom-fichier
[GLOBAL] [EXTERNAL]
[clause RECORD CONTAINS]
[clause BLOCK CONTAINS]
[clause CODE-SET]
clause REPORT.
-La clause report est obligatoire:
REPORT {nom-rapport}
*Les rapports indiqués doivent faire l’objet d’une rubrique RD en REPORT SECTION.
-Un rapport ne peut être mentionné qu’une seule fois dans une seule clause REPORT.
*Les clauses sont celles des fichiers habituels en COBOL.
ReportWriter (3)
*Registres spéciaux
-Le module ReportWriter définit des registres spéciaux qu’il maintient. Le programmeur à toutefois la possibilité de les utiliser dans son programme.
-LINE-COUNTER – format: PIC 9(6). Indique le dernier numéro de la ligne imprimée (dans la page).
L’instruction INITIATE initialise cette valeur à 0.
– Une clause SOURCE ou une instruction dans la PROCEDURE
DIVISION peut désigner ce registre.
-Si plusieurs rapports sont définis:
LINE-COUNTER [ OF nom-rapport ]