Upload
vungoc
View
214
Download
0
Embed Size (px)
Citation preview
Exercice d’Entraînement TP-9
l) Enoncé
Une société de vente par correspondance désire éditer chaque soir les factures des clients ayant passé commande dans la journée, établir un état récapitulatif des ventes par département, et tenir à jour l'état du stock.
Les produits sont livrés à partir du lendemain accompagnés des factures.
Pour cela, la société dispose sur disque magnétique d'un fichier séquentiel COMMANDES et d'un fichier séquentiel PRODUITS
Structure du fichier COMMANDES.
Organisation: séquentielle. Numéro client 8 caractères Nom prénom 30 caractères Rue 15 caractères Code postal 5 caractères Ville 10 caractères Produit commandé (répété 5 fois) Code produit 5 caractères Quantité 2 caractères Montant payé 5 caractères
Ce fichier COMMANDES est trié en majeur sur le code postal et en mineur sur le numéro de client. Le bulletin de commande en possession du client est prévu pour 5 produits différents au maximum. Il est donc créé un enregistrement par bulletin sur le fichier COMMANDES. Si le client désire commander plus de 5 produits, il devra établir plusieurs bulletins qui constitueront autant d'enregistrements avec le même numéro de client.
Si un enregistrement comporte moins de 5 produits, seuls les premiers éléments de la zone répétée sont servis, les autres restant à espace. Les deux premiers caractères du code postal constituent le code département qui servira en partie à l'édition de l'état récapitulatif (ventes par département). Structure du fichier produit:
Organisation: séquentielle.
Code produit 5 caractères Désignation produit 20 caractères Prix unitaire 4 caractères dont 2 décimales Quantité en stock 6 caractères
Les codes produits ne constituent pas une séquence absolue et le fichier n'est pas systématiquement trié. Le nombre de produits géré par cette société ne peut dépasser 1000. A chaque fin de semaine, un programme spécifique sera lancé à partir du fichier produit modifié afin de constituer le réapprovisionnement des produits dont le nombre en stock aura atteint un seuil mini. (ce travail n'est pas demandé).
TRAITEMENT:
Pour chaque produit commandé , si la quantité commandée est inférieure ou égale à la quantité en stock, la commande pourra être satisfaite. Dans ce cas éditer une ligne détail de la facture en faisant apparaître la désignation du produit, le prix unitaire, la quantité commandée et le prix total (prix unitaire * quantité), mettre à jour la quantité en stock.
Dans le cas contraire, éditer le libellé du produit et la mention INDISPONIBLE
Calculer le montant total hors taxes.
Calculer la T.V.A (20,6 % du montant total hors taxes) et le montant total T.T.C. de la facture.
Une seule facture est à éditer par client même si plusieurs enregistrements existent pour celui-ci.
Si le client a joint à sa commande un chèque, (zone montant payé différent de zéro), vérifier que le montant du chèque correspond au montant total T.T.C. et ajouter en dernière ligne la mention "DEJA PAYE". Dans le cas contraire le chèque sera renvoyé au client en même temps que la livraison.
Dans le cas où le montant du chèque ne correspond pas au montant T.T.C. ou si aucun chèque n'a été joint à la commande (zone montant payé à zéro), ajouter en dernière ligne la mention "A PAYER A LA LIVRAISON".
Sur l'état récapitulatif, éditer une ligne par département en faisant apparaître le montant total T.T.C. des commandes pour ce département, puis une dernière ligne montant T.T.C. des commandes du jour (montant cumulé de tous les départements concernés).
La date à imprimer sera celle du jour (date système).
Supprimer les zéros non significatifs.
Il) Travail Demandé
1- Unité de traitement ou Diagramme
2- Description des données
3- Arbre programmatique général
4- Arbres programmatiques détaillés
5- Cobol des déclarations des enregistrements des fichiers d’entrée et des tables ainsi que tous les traitements associés aux tables.
Les fichiers sont corrects. Aucune anomalie n'est à prévoir.
Annexe 1 FACTURE Le 8/02/2004
M. PONS Pierre 22 rue Gabriel PERI 91600 SAVIGNY SUR ORGE
DESIGNATION P.U QTE TOTAL xxxxxxxxxxxxxxxx ..,.. .. ...,.. xxxxxxxxxxxxxx ..,.. .. ..,.. xxxxxxxxxxxxxxxxxx ..,.. .. ...,.. xxxxxxxxx INDISPONIBLE xxxxxxxxxxxxxx ..,.. .. ...,.. xxxxxxxxxxxxxxxx ..,.. .. ...,..
Montant Hors taxes .....,.. T.V.A 19,6 % ....,..
Montant TTC ......,..
A PAYER A LA LIVRAISON
Date Col.5 Nom Adr. Col.25 Désignation Col.5 PU Col.30 QTE Col.40 Total Col.47 Montant Hors taxes, TVA et Montant TTC Col 20 Les informations concernant un client tiennent sur une page.
ANNEXE 2
VENTES DU 8/02/2004
Département xx .......,.. Département xx .......,.. Département xx .......,.. Département xx .......,.. Département xx .......,.. Département xx .......,.. Total des commandes ........,.. Cadrage colonnes 5 et 30. Aucun saut de page n'est à prévoir.
Corrigé de l’Exercice d’Entraînement TP-9
I) Diagramme de Traitement
Le diagramme de traitement nous indique les fichiers à traiter en entrée et en sortie.
F_COMMANDES
OrganisationSéquentielle
F_FACTURES
PROG_QUITTANCE
Trié Code Postal,Numéro de Client
F_PRODUITS
OrganisationSéquentielle
F_RECAP
F_PRODUITS_MOD
- Le fichier en entrée F_COMMANDES étant en organisation séquentielle, le seul accès possible est
séquentiel (les enregistrements sont lus les uns après les autres à partir du premier enregistrement)
- Le fichier en entrée F_PRODUITS est en accès séquentiel, il comporte au maximum 1000 articles. Nous devons disposer de ces informations (Libellé, Prix unitaire, Quantité en stock) en mémoire centrale afin de répondre aux diverses règles de gestion. La seule solution viable est de charger ces données sous forme d’une table.
- Le fichier en sortie F_PRODUITS_MOD est également en accès séquentiel, les enregistrements seront écrits les uns après les autres.
- Nous ne reviendrons pas sur la problématique de gestion des fichiers de type liste.
II) Analyse du problème
Le fichier F_PRODUITS sera chargé sous forme de table. Le fichier F_COMMANDES sera le fichier de base de notre traitement Le traitement consiste
- à créer une facture par client appartenant au fichier d’entrée F_COMMANDES.
- à constituer pour cette facture un en tête avec la date et les coordonnées du client, un bloc fin de facture contenant le montant hors taxe, la TVA le montant TTC.
- à écrire pour chaque produit commandé, une ligne facture indiquant en fonction de l’état du stock une indisponibilité du produit ou les éléments comptables du produit, si le produit est disponible une mise à jour du stock devra être réalisée.
- à créer un état récapitulatif au niveau département du montant TTC des commandes réalisées cet état devra également indiquer le montant TTC de toutes les commandes.
- à créer en sortie un fichier F_PRODUITS_MOD qui aura la même description que le fichier F_PRODUITS en entrée, le stock étant mis à jour afin d’effectuer le traitement de réapprovisionnement.
- la fin de traitement est conditionnée par la fin du fichier F_COMMANDES.
Analysons la structure du fichier F_COMMANDES.
Le Fichier COMMANDES est trié sur le numéro de département puis sur le numéro de client Abonnés. On y trouve
Plusieurs DEPARTEMENTS
Pour chaque département des CLIENTS.
Pour chaque client, il existe de 1 à N enregistrements.
Pour chaque enregistrement, on trouve de 1 à N produits commandés.
Nous allons donc appliquer le principe relatif à la rupture de groupe pour mettre en place la structure du traitement associé.
FICHIERCOMMANDES
DEPARTEMENT
1
N
1
M
TANT QUE
TANT QUE
CLIENT
ENREGISTREMENT
1
C
TANT QUE
Lecture
PRODUIT COMMANDE
1
PTANT QUE
III) Description des données
En Pseudo-Code
FICHIER F_COMMANDES
E_Commande : Fiche ( E_Num_Client Texte (8) E_Nom_Client Texte (30) E_Rue Texte (15) E_Code_Postal E_Dep Texte (2) Texte (3) E_Ville Texte (10) E_Produit_Cmde [1 : 5] Fiche (
E_Code_Produit_Cmde Texte (5) E_Qte_Produit_Cmde Numérique (2) )
E_Montant Numérique (5) ) E_Code_Postal Texte (5) (par défaut) E_Commande Texte (108) (par défaut)
La zone E_Produit_Cmde a été déclarée sous forme d’une zone indicée de 5 postes, chaque poste relatif à un produit étant composé d’un code produit et de la quantité commandée. FICHIER F_PRODUITS
E_Produit : Fiche ( E_Code_Produit Texte (5) E_Libel_Produit Texte (20) E_PU_Produit Numérique (2,2) E_Stock_Produit Numérique (6) E_Produit Texte (35) (par défaut)
FICHIER F_PRODUITS_MOD
S_Produit_Mod : Fiche ( S_Code_Produit Texte (5) S_Libel_Produit Texte (20) S_PU_Produit Numérique (2,2) S_Stock_Produit Numérique (6) S_Produit_Mod Texte (35) (par défaut) FICHIER F_FACTURES
S_Facture Texte (132) FICHIER F_RECAP S_Recap Texte (132) Les fichiers F_FACTURES et F_RECAP ayant plusieurs types d’enregistrements différents, nous avons déclaré ci-dessus les zones de communication associées aux fichiers F_FACTURES et F_RECAP. Les différents enregistrements seront décrits sous forme de zones de travail.
ZONES de TRAVAIL
T_Fin_F_Commandes Logique Variable identifiant la fin du fichier Fichier Terminé ==> « Vrai » Fichier Non Terminé ==> « Faux » T_Fin_F_Produits Logique Variable identifiant la fin du fichier Fichier Terminé ==> « Vrai » Fichier Non Terminé ==> « Faux » T_Sov_Dep Texte (2) Variable de stockage du numéro de département en cours de traitement T_Sov_Client Texte (8) Variable de stockage du numéro de client en cours de traitement T_Date Fiche ( T_AAAA Numérique (4) T_MM Numérique (2) T_JJ Numérique (2) ) Date Système
***************************************************************************************** Nous avons indiqué que le fichier produits serait chargé en mémoire centrale sous forme de table, comment définir cette table Combien de postes ==> 1000 produits au maximum Quel est l’argument ==> Le code produit est l’argument, il ne s’agit pas d’une séquence absolue donc l’argument sera présent dans les divers postes de la table
Chargement Séquentiel Recherche Séquentielle
Les fonctions associées ==> Libellé du produit, Prix Unitaire et Quantité en stock T_Produit : TABLEAU [1 : 1000] Fiche (
T_Code_Produit Texte (5) T_Libel_Produit Texte (20) T_PU_Produit Numérique (2,2) T_Stock_Produit Numérique (6)
) T_Ind_Prod Numérique (3)
Zone permettant de se positionner sur un poste de la table des produits. T_Ind_Prod_Cmd Numérique (1)
Zone permettant de se positionner sur un poste de la zone indicée des produits commandés.
T_Date_Edit T_JJ_Date Texte (2) T_Libel2_Date Texte (1) T_MM_Date Texte (2) T_Libel3_Date Texte (1) T_AAAA_Date Texte (4)
Zone de constitution de la date sous forme éditable T_Lgn_Date_Fact Fiche ( 4 caractères à blanc
T_Libel1_Date Texte (3) T_Date_Fact Texte (10) 115 caractères à blanc
) Ligne Date de la facture
T_Lgn_Client_Fact Fiche ( 24 caractères à blanc
T_Zone_Client T_ZoneCP_Client Texte (5) T_ZoneVille_Client Texte (25)
78 caractères à blanc ) Ligne Identité client
La zone T_Lgn_Client_Fact permet de renseigner et d’écrire successivement les caractéristiques du client (Nom, Rue, CP et Ville)
T_Lgn_EnTete_Fact Fiche ( 4 caractères à blanc
T_Lib1_EnTete Texte (25) T_Lib2_EnTete Texte (10) T_Lib3_EnTete Texte (93) ) Ligne En Tête Facture, on utilise les règles de cadrage T_Lgn_Prod_Fact Fiche (
4 caractères à blanc T_Libel_Prod_Fact Texte (25)
T_Info_Produit T_PU_Prod_Fact Numérique éditée (2,2)
5 caractères à blanc T_Qte_Prod_Fact Numérique éditée (2) 6 caractères à blanc
T_Tot_Prod_Fact Numérique éditée (5,2) T_Libel_Indispo Texte (26) redéfinit T_Info_Produit
77 caractères à blanc ) Ligne Produit de la Facture La zone T_Libel_Indispo redéfinit le même espace mémoire que la donnée T_Info_Produit (Clause REDEFINES en COBOL) T_Montant_Fact Fiche (
19 caractères à blanc T_Lib1_Mont Texte (20)
T_Montant Numérique Editée (7,2) 83caractères à blanc
) Lignes « Total Facture » T_Livraison_Fact Fiche (
59 caractères à blanc T_Lib1_Livraison Texte (73) ) Ligne A payer a la livraison de la facture T_Titre_Recap Fiche (
20 caractères à blanc
T_LibTitre_Recap Texte (10) T_Date_Recap Texte (10)
92 caractères à blanc ) Ligne Titre Recap T_Dep_Recap Fiche ( 4 caractères à blanc
T_LibDep Texte (12) T_NumDep_Recap Texte (2)
11 caractères à blanc T_TotDep_Recap Numérique éditée (8,2) 92 caractères à blanc
) Ligne Département Recap T_Tot_Recap Fiche ( 4 caractères à blanc
T_LibTot_Recap Texte (25) T_Total_Recap Numérique éditée (10,2) 90 caractères à blanc
) Ligne Total Recap
T_Nb_Prod Numérique (4)
Nombre de produits chargés dans la table
T_MT_HT Numérique (7,2)
Calcul Montant Hors Taxe
T_TOT_MT_HT Numérique (7,2)
Calcul Total Montant Hors Taxe Client T_TVA Numérique (7,2) Calcul TVA T_MT_TTC Numérique (7,2) Calcul Montant TTC T_MT_TTC_DEP Numérique (10,2) Calcul Montant TTC Département T_TOT_DEP Numérique (10,2) Calcul Montant Total de tous les départements Remarques sur l’organisation du traitement
Le traitement général va s’organiser autour des structures DEPARTEMENT et CLIENT.
Le chargement de la table des produits et l’édition du titre de l’état RECAP s’effectueront en début de traitement.
En début de département, sauvegarde de l’identifiant département de référence et initialisation des cumuls des montants pour le département.
En début de chaque client, sauvegarde de l’identifiant client de référence et initialisation des cumuls des montants pour le client. Nous pouvons également préparer le début de la facture (date et caractéristiques du client)
En fin de client, nous disposons de tous les éléments de calcul et d’édition des montants généraux de la facture.
En fin de département, nous disposons de tous les éléments de calcul et d’édition du montant du département qui vient de s’achever.
En fin de traitement, nous éditerons le montant total des commandes de la journée dans la liste RECAP et nous constituerons le fichier F_PRODUITS_MOD à partir des éléments de la table des produits gérée en mémoire centrale.
PROG_TP9
TANT QUET_Fin_F_Commandes
="Faux"
Debut_Prog_TP9 Fin_Prog_TP9
Ouvertures LectureF_COMMANDES
UN_DEPARTEMENT
Debut_Departement Fin_Departement
IV - ARBRE GENERALPROG TP9
Trait_Deb_Prog Fermetures
TANT QUE
T_Fin_F_Commandes ="Faux"
ETT_Sov_Dep=E_Dep
UN_CLIENT
Fin_ClientDébut_Client
T_Sov_Dep<==
E_Dep
En_Tete_Fact
Init_Dep
T_Sov_Client<==
E_Num_Client
Init_Client
TANT QUE
T_Fin_F_Commandes ="Faux"
ETT_Sov_Dep=E_Dep
ETT_Sov_Client=E_Num_Client
UN_ENREG_CLIENT
Trait_Enreg_ClientLecture
F_COMMANDES
Trait_Fin_Prog
Trait_Fin_Facture
Trait_Dep_Recap
IV - ARBRE DETAILLEPROG TP9
Debut_Enreg
Trait_Enr_Client
TANT QUEFin_Enreg
T_Ind_Prod_Cmd<== 1
T_Ind_Prod_Cmd <=5
ETE_Produit_Cmde
(T_Ind_Prod_Cmde)^= blanc
Un_Produit
T_Ind_Prod_Cmd<==
T_Ind_Prod_Cmd + 1
Trait_Produit
On parcourt la zone indicée de l'enregistrement d'entrée, TANT que les 5 occurences n'ontpas été dépassées ET que le poste considéré est différent de blanc.
Dès qu'une des 2 conditions n'est plus réalisée, le traitement quitte la répétitive
IV - ARBRE DETAILLEPROG TP9
Recherche_Produit
Trait_Produit
SI ALORS SINONT_Stock_Produit
(T_Ind_Prod)< =
E_Qte_Produit_Cmde(T_Ind_Prod_Cmde)_
Produit_Disponible Produit_Indisponible
Calcul_MT_HT_Prod Cumul_MT_HT_Prod Edit_Lgn_Prod_FactMAJ_Stock
T_Ind_Prod indique à l'issue de la recherchele poste de la table où est stocké le produit commandé
E_Qte_Produit_Cmde est la quantité commandée parle client et cette zone est indicée
IV - ARBRE DETAILLEPROG TP9
T_Ind_Prod<==
1
Recherche_Produit
TANT QUE
T_Libel_Prod_Fact<==T_Libel_Produit
(T_Ind_Prod)
T_Libel_Indispo<==
"INDISPONIBLE"
Produit_Indisponible
T_Ind_Prod<==
T_Ind_Prod + 1
Ecrire S_Facture<==
T_Lgn_Prod_Fact
T_Code_Produit(T_Ind_Prod)
^ =E_Code_Produit_Cmde
(T_Ind_Prod_Cmde)
T_Lgn_Prod_Fact<==
à blanc
On effectue une recherche séquentielle à partir du premierposte, les fichiers étant valides, nous sommes certains de
trouver l'argument dans la table
Le libellé du produit est récupéré à partirde la table des produits
IV - ARBRE DETAILLEPROG TP9
T_MT_HT<==
T_Pu (T_Ind_Prod) *T_Qte_Produit_Cmde(T_Ind_Prod_Cmde)
Calcul_MT_HT_Prod
Edit_Lgn_Prod_Fact
MAJ_StockCumul_MT_HT_Prod
T_TOT_MT_HT<==
T_TOT_MT_HT+
T_MT_HT
T_Stock_Produit(T_Ind_Prod)
<==T_Stock_Produit
(T_Ind_Prod)-
T_Qte_Produit_Cmde(T_Ind_Prod_Cmde)
T_Libel_Prod_Fact<==
T_Libel_Produit(T_Ind_Prod)
T_PU_Prod_Fact<==
T_PU (T_Ind_Prod)
T_Qte_Prod_Fact<==
T_Qte_Produit_Cmde(T_Ind_Prod_Cmde)
T_Tot_Prod_Fact<==
T_MT_HT
Ecrire S_Facture<==
T_Lgn_Prod_Fact
IV - ARBRE DETAILLEPROG TP9
Initialisation
Trait_Deb_Prog
Charg_TabProd En_Tete_Recap T_TotDep_Recap<==
T_TOT_DEP
Trait_Fin_Recap
Trait_Fin_Prog
Trait_Fin_Recap Decharg_TabProd T_Date_Recap<==
T_Date_Edit
Ecrire S_Recap<==
T_Titre_Recapaprès saut de 2
lignes
En_Tete_Recap
Ecrire S_Recap<==
T_Tot_Recapaprès saut de 2
lignes
IV - ARBRE DETAILLEPROG TP9
OuvrirF_COMMANDES
en Entrée
Ouvertures Fermetures
FermerF_COMMANDES,
F_RECAP,F_RECAP
LectureF_COMMANDES
Lire F_COMMANDES
T_Fin_F_Commande<==
"Vrai"
SI ALORS
Fin de Fichier
Initialisation
T_Libel_Date<=="Le"
T_Lib1_EnTete<==
"DESIGNATION"T_Libel2_EnTete
<=="PU"
T_Libel3_EnTete<==
"QTE TOTAL"
T_Lib_Titre_Recap<==
"VENTES DU "
T_LibDep<==
"Département "T_LibTot_Recap
<=="Total des
Commandes"
T_TOT_DEP<==
0
T_Lgn_Date_FactT_Lgn_Client_Fact,
T_Lgn_EnTete_Fact,T_Lgn_Prod_Fact, T_Montant_Fact,
T_Livraison_Fact, T_Titre_Recap,T_Dep_Recap, T_Tot_Recap
<==à blanc
T_Fin_F_Commande<==
"Faux"
OuvrirF_FACTURE,
F_RECAPen Sortie
Trait_Date
IV - ARBRE DETAILLEPROG TP9
T_MT_TTC_DEP,T_TOT_DEP
<==0
Init_Dep Trait_Dep_Recap
T_TOT_MT_HT<==
0
Init_Client
T_Numdep_Recap<==
T_Sov_Dep
T_TotDep_Recap<==
T_MT_TTC_DEP
Ecrire S_Recap<==
T_Dep_Recap
Trait_Fin_Facture
Trait_MT_HT
T_Lib1_Livraison<==
"DEJA PAYE"
Trait_TVA Trait_MT_TTC SI ALORS SINON
T_Lib1_Livraison<==
"A PAYER A LALIVRAISON"
Ecrire S_Facture<==
T_Livraison_FactE_Montant <=
T_MT_TTC
T_TOT_DEP<==
T_MT_TTC_DEP
IV - ARBRE DETAILLEPROG TP9
Trait_MT_HT
T_Lib1_Mont<==
"Montant HorsTaxes"
T_Montant<==
T_MT_HT
Ecrire S_Facture<==
T_Montant_Fact
T_TVA<==
( T_MT_HT*19,6) / 100
T_Lib1_Mont<==
"T.V.A 19,6%"
T_Montant<==
T_TVA
Ecrire s_Facture<==
T_Montant_Fact
Trait_TVA
Trait_MT_TTC
T_MT_TTC<==
T_MT_HT +T_TVA
T_Lib1_Mont<==
"Montant TTC"
T_Montant<==
T_MT_TTC
Ecrire S_Facture<==
T_Montant_Fact
T_MT_TTC_DEP<==
T_MT_TTC_DEP+ T_MT_TTC
IV - ARBRE DETAILLEPROG TP9 Charg_TabProd
Ouvrir en EntréeF_PRODUITS
T_Fin_F_Produits<==
"Faux"
T_Ind_Prod<==
0
Lect_F_PRODUITS TANT QUE
Charg_Un_Produit
T_Ind_Prod<==
T_Ind_Prod + 1
T_Produit (T_Ind_Prod)<==
E_Produit
Lect_F_PRODUITS
FermerF_PRODUITS
T_Fin_F_Produits= "Faux"
T_Nb_Prod<==
T_Ind_Prod
IV - ARBRE DETAILLEPROG TP9 Decharg_TabProd
Ouvrir en SortieF_PRODUITS_MOD
T_Ind_Prod<==
1
TANT QUE
Decharg_Un_Produit
Ecrire S_Produit_Mod<==
T_Produit (T_Ind_Prod)
T_Ind_Prod<==
T_Ind_Prod + 1
T_Ind_Prod<=
T_Nb_Prod
FermerF_PRODUITS_MOD
A partir du premier poste de la table, on transfèresuccessivement chaque poste dans la zone decommunication du fichier F_PRODUITS_MOD
(Même dessin)
T_Nb_Prod est lenombre de produits
chargés dans la table
IV - ARBRE DETAILLEPROG TP9 Lect_F_PRODUITS
LireF_PRODUITS
SI ALORS
T_Fin_F_Produits<==
"Vrai"
Fin de Fichier
Trait_Date
Lire date Système==>
T_Date
T_Lib2_Date,T_Lib3_Date
<==" / "
T_AAAA_Date<==
T_AAAA
T_MM_Date<==
T_MMT_JJ_Date
<==T_JJ
En_Tete_Fact
Edit_Date_Fact Edit_Nom_Fact Edit_Rue_Fact Edit_Ville_Fact
IV - ARBRE DETAILLEPROG TP9 Edit_Date_Fact
T_Date_Fact<==
T_Date_Edit
Ecrire S_Facture<==
T_Lgn_Date_Factaprès saut de page
Edit_Nom_Fact
T_Zone_Client<==
E_Nom_Client
Ecrire S_Facture<==
T_Lgn_Client_Factaprès saut de 3 lignes
Edit_Ville_Fact
T_ZoneCP_Client<==
E_Code_Postal
T_ZoneVille_Client<==
E_Ville
Ecrire S_Facture<==
T_Lgn_Client_Fact
Edit_Rue_Fact
T_Zone_Client<==
E_Rue
Ecrire S_Facture<==
T_Lgn_Client_Fact
COBOL
7 8 12 73
DATA DIVISION.
FILE SECTION.
FD F_COMMANDES.
1 E_Commande.
2 E_Num_Client PIC X(8). 2 E_Nom_Client PIC X (30). 2 E_Rue PIC X (15). 2 E_Code_Postal.
3 E_Dep PIC X (2). 3 PIC X (3).
2 E_Ville PIC X (10). 2 E_Produit OCCURS 5. 3 E_Code_Produit_Cmde PIC X (5). 3 E_Qte_Produit_Cmde PIX 99. 2 E_Montant PIC 9(5).
FD F_PRODUITS. 1 E_Produit.
2 E_Code_Produit PIC X(5). 2 E_Libel_Produit PIC X (20). 2 E_PU_Produit PIC 99V99. 2 E_Stock_Produit PIC 9 (6).
FD F_PRODUITS_MOD. 1 S_Produit_Mod PIC X (35).
WORKING-STORAGE SECTION.
1 T_Table_Produit.
2 T_Produit OCCURS 1000.
3 T_Code_Produit PIC X(5). 3 T_Libel_Produit PIC X (20). 3 T_PU_Produit PIC 99V99. 3 T_Stock_Produit PIC 9 (6).
29
29
7 8 12 73
PROCEDURE DIVISION.
Recherche_Produit.
PERFORM Cherche VARYING T_Ind_Prod FROM 1 BY 1 UNTIL T_Code_Produit (T_Ind_Prod) = E_Code_Produit_Cmde (T_Ind_Prod_Cmde).
Cherche.
EXIT.
Charg_TabPprod.
OPEN INPUT F_PRODUITS. MOVE “Faux” TO T_Fin_F_Produits. PERFORM Lect_F_PRODUITS. PERFORM Charg_Un_Produit VARYING T_Ind_Prod FROM 1 BY 1 UNTIL T_Fin_F_Produits = “Vrai”. ClOSE F_PRODUITS. COMPUTE T_Nb_Prod = T_Ind_Prod - 1.
Charg_Un_Produit.
MOVE E_Produit TO T_Produit (T_Ind_Prod). PERFORM Lect_F_PRODUITS.
Decharg_Tab_Prod.
OPEN OUTPUT F_PRODUITS_MOD. PERFORM Decharg_Un_Produit VARYING T_Ind_Prod FROM 1 BY 1 UNTIL T_Indprod > T_NbProd. CLOSE F_PRODUITS_MOD.
Decharg_Un_Produit.
WRITE S_Produit_Mod FROM T_Produit
Remarque
Utilisation du PERFORM ... VARYING qui permet de gérer la gestion des indices (initialisation, incrémentation). Modification par rapport à l’arbre programmatique.