> Tech > Heading ou spécifications de sortie : Comparer les deux méthodes

Heading ou spécifications de sortie : Comparer les deux méthodes

Tech - Par iTPro - Publié le 16 octobre 2012
email

En comparant le format d’enregistrement HEADING aux spécifications de sortie décrites par programme équivalentes, vous devriez remarquer plusieurs différences.

Heading ou spécifications de sortie : Comparer les deux méthodes

L’une d’elles est qu’un format d’enregistrement de fichier d’imprimante peut définir des lignes multiples d’un rapport — de la même manière qu’un format d’enregistrement de fichier d’affichage peut définir de multiples lignes d’une unité d’affichage. Dans le cas de HEADING, les 13 premières lignes de chaque page sont définies comme un bloc unique. Le saut de ligne et l’interlignage sont contrôlés avec des mots-clés au niveau enregistrement et champ DDS, définis avec le format d’enregistrement plutôt que de multiples entrées d’identification et de contrôle de format de sortie. Personnellement, je considère que l’usage d’un mot-clé tel que SPACEB est plus facile à comprendre d’un coup d’œil qu’une entrée numérique en colonne 42 d’une O-spec.

En poursuivant l’examen des deux figures, vous observerez que les fichiers d’imprimante décrits en externe, à nouveau similaires à la manière dont les fichiers d’affichage sont définis, utilisent aussi une position de départ plutôt qu’une position de fin pour définir un placement. Autrement dit, alors que l’emplacement spécifié par DDS du littéral ‘Date:’ est 60 (comme la colonne où commence la valeur littérale), la O-spec RPG utilise une valeur 64 pour indiquer l’emplacement où se termine la valeur littérale. Dans les deux cas, la valeur littérale se trouvera dans les colonnes 60–64 de la quatrième ligne de la page d’imprimante.

Bien que cette différence dans la spécification de la position d’impression horizontale ait peu d’impact sur la productivité, le changement de lieu est moins gênant quand on utilise un fichier d’imprimante décrit en externe. Supposons que vous vouliez décaler un en-tête tel que ‘Date:’ (ou une variable correspondante) de deux positions vers la gauche. Avec le fichier d’imprimante externe INVOICE, vous changeriez le ’60’ en ’58’, recréeriez le fichier d’imprimante, et testeriez. Nul besoin d’aller dans le programme PRTINVOICE lui-même. Avec l’approche décrite par programme, le changement est tout aussi facile : changer ’64’ en ’62’, recréer le programme et tester. Mais dans beaucoup d’environnements de développement, il y a une nette différence dans la phase de test de régression quand on change le source d’un programme et qu’on change le source d’une définition de fichier non-base de données. Cette possibilité de changer le rapport sans devoir modifier son programme générateur va au-delà d’un simple décalage vers la gauche ou vers la droite. Par exemple, la date imprimée actuellement est la date système avec une année à deux chiffres. Changer le rapport afin d’utiliser la date du job et/ou une année à quatre chiffres, ne nécessiterait aussi qu’un changement au fichier d’imprimante INVOICE. Le même changement par une méthode décrite par programme demande de modifier le programme RPG lui-même. Certes ce n’est pas un grand changement, mais c’en est quand même un.

Descendons au niveau de la variable numéro de client CustNbr. Vous observerez que le fichier d’imprimante externe utilise DDS REFFLD pour obtenir la définition pour CustNbr à partir du fichier CUSTMST. Cette référence de définition fait que la définition CustNbr EDTCDE(4) de CUSTMST en figure 2 est incorporée automatiquement dans l’impression du format d’enregistrement HEADING de CustNbr. Dans le cas de O-specs RPG, le développeur doit fournir explicitement le edit code approprié en colonne 44. Comme avec les fichiers d’affichage, vous pouvez, si nécessaire, utiliser le mot-clé DDS Delete Edit (DLTEDT) pour remplacer ou ignorer toute édition spécifiée par le champ référencé. Mais, par défaut, on utilise la définition référencée.

Les deux approches permettent le conditionnement de la sortie à l’aide d’indicateurs. Dans le programme exemple, l’indicateur 30 est utilisé pour imprimer seulement la deuxième ligne d’adresse (CUSTADDR2) si la valeur est non blanc et l’indicateur 31 pour imprimer seulement le pays (CUSTCNTRY) quand le pays est non blanc. Dans le cas de CUSTADDR2, cela se fait au renvoi B de la figure 6. Si vous n’avez pas l’habitude d’utiliser des indicateurs dans les expressions, l’instruction en B indique que si l’expression logique CustAddr2 <> *blanks est vraie, alors l’indicateur 30 doit être activé (on), sinon l’indicateur 30 doit être désactivé (off). Deux autres méthodes pour effectuer cette opération sont montrées dans la figure 8 aux renvois A et B.

Ayant écrit le format d’enregistrement HEADING initial de la facture, PRTINVOICE en C de la figure 6 lit tous les enregistrements de commande pour le client et la commande spécifiés, écrivant le format d’enregistrement ITEMS pour chaque article commandé dans la boucle DOW. Comme avec EDTCDE pour la variable CUSTNBR du format d’enregistrement HEADING, Product Option Price (PRODOPTPRC) du format d’enregistrement ITEMS prélève le edit word (EDTWRD) de ‘   , $0.  ‘ dans le champ référencé. En utilisant les spécifications de sortie décrites par programme, le développeur est chargé de respécifier le edit word.

Si, pendant l’écriture du format d’enregistrement ITEMS, il y a un débordement d’impression (overflow), l’indicateur 51 sera activé (on). Cela, à cause de l’utilisation du mot-clé OFLIND en A, figure 6. Quand l’indicateur 51 est activé pendant le traitement illustré en C de la figure 6, PRTINVOICE écrira le format d’enregistrement CONTINUE pour indiquer que la facture se prolonge à la page suivante, réécrira le format d’enregistrement HEADING en haut de la page suivante, mettra l’indicateur 51 sur off, puis continuera à écrire le format d’enregistrement ITEMS. Quand tous les enregistrements de commande (order) pour la commande spécifiée auront été écrits, PRTINVOICE écrira le format d’enregistrement TOTALS, fermera le fichier INVOICE et se terminera.

Du point de vue d’un programme RPG, il y a très peu de différence de traitement des données en vue de l’écriture d’une facture, qu’on utilise le fichier d’imprimante externe INVOICE ou le fichier d’imprimante décrit par programme QSYSPRT. Le principal changement est l’utilisation de l’opcode WRITE au lieu de EXCEPT quand on écrit dans le fichier d’imprimante, un ajustement plutôt facile à faire. A noter cependant que cette large affirmation générale souffre quelques exceptions. Par exemple, les fichiers d’imprimante décrits par programme peuvent être utilisés pour sortir des matrices entières. Les fichiers d’imprimante externes, étant basés sur DDS, où DDS ne supporte pas la définition des matrices ou des éléments de matrices, peuvent exiger une réflexion supplémentaire dans de telles situations.

Moins importante que la sortie des matrices, il existe une seconde différence touchant aux symboles des devises. Le support du fichier d’imprimante décrit par programme RPG adopte par défaut le signe dollar ($) comme symbole de devise, alors que le support de fichier d’imprimante externe utilise la valeur système QCURSYM. Les exemples des deux figures 5 et 7 utilisent le signe dollar en symbole de devise flottante dans les edit words associés aux variables PRODOPTPRC et TOTAL (bien que la figure 5 utilise implicitement le edit word pour PRODOPTPRC en raison du support DDS REFFLD). Si vous utilisez un symbole de devise autre que le dollar, avec un fichier d’imprimante décrit par programme vous aurez aussi votre signe devise défini par la spécification de contrôle RPG H et apporterez le changement approprié au symbole de devise flottante edit word utilisé dans les spécifications de sortie. Pour ILE RPG, le changement H-spec serait fait avec le mot-clé CURSYM ; pour RPG/400, le changement serait reflété dans la colonne 18 (symbole de devise). Pour un fichier d’imprimante décrit en externe, vous devez donner à la valeur système QCURSYM votre symbole de devise quand vous créez le fichier d’imprimante et, comme auparavant, apporter un changement approprié au symbole de devise flottante edit word utilisé par le fichier d’imprimante. Comme dans le cas précédent de décalage de ‘Date:’ de deux positions sans devoir recompiler le programme RPG, un programme RPG utilisant un fichier d’imprimante externe peut utiliser un symbole de devise flottante différent sans qu’on doive changer le source (H-spec) ni recompiler le programme d’application.

Ça vaut le coup d’essayer

A mon avis, cette possibilité d’incorporer automatiquement des attributs de définition de champ tels que edit et d’apporter des changements mineurs au formatage d’un rapport sans devoir recompiler le programme applicatif, placent nettement en tête les fichiers d’imprimante externes pour créer de nouveaux rapports. Le fait d’utiliser le même langage que par le passé pour les fichiers base de donnée et d’affichage, DDS, est un bonus. Et, nous le verrons dans les prochains articles, l’utilisation de fichiers d’imprimante externes apporte beaucoup de souplesse à la création de rapports.

Certes, je ne vous invite pas à changer les rapports existants pour passer de la description par programme à la description externe. Mais je vous engage à essayer les fichiers d’imprimante externes pour votre prochain rapport. Après un certain temps d’apprentissage. il est probable que vous serez agréablement surpris par la facilité et la souplesse d’utilisation des fichiers d’imprimante décrits en externe.

Téléchargez gratuitement cette ressource

Sécurité Office 365 : 5 erreurs à ne pas commettre

Sécurité Office 365 : 5 erreurs à ne pas commettre

A l’heure où les données des solutions Microsoft de Digital Workplace sont devenues indispensables au bon fonctionnement de l’entreprise, êtes-vous certain de pouvoir compter sur votre plan de sécurité des données et de sauvegarde des identités Microsoft 365, Exchange et Teams ? Découvrez les 5 erreurs à ne pas commettre et les bonnes pratiques recommandées par les Experts DIB France.

Tech - Par iTPro - Publié le 16 octobre 2012