29
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

Exercice d’Entraînement TP-9 - resoo.org · Les codes produits ne constituent pas une séquence absolue et le fichier n'est pas systématiquement trié. ... Dans ce cas éditer

  • 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.