Upload
lethu
View
218
Download
1
Embed Size (px)
Citation preview
Exercice d’Entraînement TP-14
l) Enoncé
Une société de commercialisation de produits industriels dispose d’un système informatique centralisé qui lui permet de traiter les commandes de ses clients. Une des composantes de l’application de gestion des commandes est spécialisée dans l’émission et le suivi de la facturation.
Vous vous attacherez à développer l’aspect facturation en respectant les règles de gestion décrites ci-dessous.
DESCRIPTION DU SYSTEME DE FACTURATION
Le Système de facturation à mettre en place se compose de deux parties:
Première partie (UT1):
Par un traitement en « Temps différé » quotidien, cette étape effectue la facturation de toutes les commandes des divers clients, COMMANDES NON ENCORE TRAITÉES.
Seconde partie (UT2):
Par un traitement de périodicité annuelle, elle restitue d’une part le cumul de toutes les commandes des clients, et effectue, d’autre part le calcul du coefficient de réduction qui permet d’avantager les meilleurs clients de la société.
DESCRIPTION DETAILLEE Unité de Traitement 1 (UT1)
Cette unité de traitement consiste à établir la facturation des nouvelles commandes des clients.
Les codes des clients pour lesquels il existe des commandes qui doivent être facturées sont contenus dans le fichier « F_DEMANDES ».
Toutes les commandes des différents clients, sont stockées dans le fichier « F_COMMANDES ». Le traitement consiste à retrouver dans ce fichier, tous les produits commandés par les clients, produits pour lesquels il n’y a pas eu encore de facturation. Chaque produit répondant à ce critère fera l’objet d’une ligne détail dans un état « F_FACTURES ».
On veillera particulièrement à éviter les doubles facturations.
On distingue quatre catégories de clients (Catégories 1 à 4). La catégorie de chaque client est déterminée selon le montant total de ses commandes passées au cours de l’année précédente.
L’appartenance à une catégorie de client donne droit à l’application d’un coefficient de réduction sur le prix de chaque produit. Ces coefficients de réduction sont variables d’un produit à l’autre. Les diverses informations sur les prix et les coefficients de réduction pour les divers produits sont communiquées par l’intermédiaire du fichier « F_BAREME ».
Pour tous les produits
La catégorie de client 1 se verra affecter le coefficient de réduction de rang 1 dans F_BAREME
La catégorie de client 2 se verra affecter le coefficient de réduction de rang 2 dans F_BAREME
La catégorie de client 3 se verra affecter le coefficient de réduction de rang 3 dans F_BAREME
La catégorie de client 4 se verra affecter le coefficient de réduction de rang 4 dans F_BAREME. La somme due par un client pour un produit commandé est égale au prix du produit multiplié par la quantité multipliée par le coefficient de réduction auquel le client a droit.
Un produit déjà facturé est repéré par la présence du caractère « X » dans l’indicateur de traitement de produit.
L’édition de la facturation doit être réalisée. Le montant Total hors taxes servira à la mise à jour du cumul des diverses commandes du client.
DESCRIPTION DES FICHIERS de l’UT1
FICHIER F_BAREME
Ce fichier est sur disque magnétique en organisation séquentielle.
Longueur de l’enregistrement 24 caractères.
Fichier non trié.
Ce fichier contient au plus 100 produits
Contenu de la Zone LONGUEUR NATURE OBSERVATIONS Code du Produit 5 Alpha Numérique Prix du Produit 7 Numérique
(2 Décimales)
Coefficient de Réduction 3 Numérique (2 Décimales)
zone répétée 4 fois
Chaque coefficient de réduction est une zone numérique inférieure ou égale à 1
Fichier F_CLIENTS
Ce fichier est sur disque magnétique en organisation séquentielle indexée.
Longueur de l’enregistrement 144 caractères.
Clé d’accès code client.
Contenu de la Zone LONGUEUR NATURE OBSERVATIONS Code Client 5 Alpha Numérique Clé Nom Client 30 Alpha Numérique Prénom_Client 20 Alpha Numérique Adresse Client 55 Alpha Numérique Ville Client 20 Alpha Numérique Code Postal Client 5 Alpha Numérique Catégorie Client 1 Numérique Cumul Commandes Client 8 Numérique (2
Décimales)
Fichier F_DEMANDES
Ce fichier est sur disque magnétique en organisation séquentielle.
Longueur de l’enregistrement 5 caractères
Fichier non trié.
Contenu de la Zone LONGUEUR NATURE OBSERVATIONS Code Client 5 Alpha Numérique
Fichier F_COMMANDES
Ce fichier est sur disque magnétique en organisation séquentielle indexée.
Longueur de l’enregistrement 17 caractères.
Clés d’accès le Code Client et le Code Produit.
NOM DE LA ZONE LONGUEUR NATURE OBSERVATIONS Code Client 5 Alpha Numérique Code Produit 5 Alpha Numérique
La concaténation de ces 2 zones forme la clé d’accès au fichier
Quantité commandée 6 Numérique Indicateur de traitement du produit
1 Alpha Numérique
à blanc ou à « X »
Fichier F_PRODUITS
Ce fichier est sur disque magnétique en organisation séquentielle indexée.
Longueur de l’enregistrement 28 caractères.
Clé d’accès le Code Produit.
NOM DE LA ZONE LONGUEUR NATURE OBSERVATIONS Code Produit 5 Alpha Numérique Clé Libellé du Produit 23 Alpha Numérique
Fichier F_FACTURES
Ce fichier est sur imprimante
La facture d’un client tient sur une seule page.
Les intitulés sont en gras
PAGE : xxx 4 lignes FACTURE 3 lignes NOM : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX PRENOM : XXXXXXXXXXXXXXXX ADRESSE : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX VILLE : XXXXXXXXXXXXXXXXXXXXX CODE POSTAL :XXXXXXXXXXXXXX 2 lignes PRODUIT DESIGNATION QUANTITE PRIX 2 lignes XXXXX XXXXXXXXXXXXXXX XXXXX XXX XXX,XX XXXXX XXXXXXXXXXXXXXX XXXXX XXX XXX,XX XXXXX XXXXXXXXXXXXXXX XXXXX XXX XXX,XX XXXXX XXXXXXXXXXXXXXX XXXXX XXX XXX,XX Saut de 5 lignes TOTAL HORS TAXES : XXX XXX XXX,XX TVA 18,6% : XX XXX,XX TOTAL TTC : X XXX XXX XXX,XX
DESCRIPTION DETAILLEE Unité de Traitement 2 (UT2)
Cette unité de traitement de périodicité annuelle remplit deux fonctions distinctes :
1) Production d’un état statistique à partir du fichier « F_CLIENTS »
L’état annuel des clients, fichier « F_ETATSTAT » est une liste par ordre décroissant du cumul hors taxes des commandes, il reflète l’importance des clients vis à vis de la société
Sur la dernière page de cet état, on fera figurer le Montant Total Hors Taxes des ventes de la Société pour l’année écoulée.
On considère que le fichier des clients ne peut dépasser plus de 1000 enregistrements.
2) Mise à jour de la catégorie de chaque client Un enregistrement paramètre fichier « F_PARAMETRE », sera fourni au programme, indiquant par trois valeurs les limites des plages de cumul hors taxes des commandes pour chaque catégorie de client.
Catégorie 1 : Montant des cumuls HT <= valeur 1
Catégorie 2 : Montant des cumuls HT <= valeur 2
Catégorie 3 : Montant des cumuls HT <= valeur 3
Catégorie 4 : Montant des cumuls HT > valeur 3.
La remise à zéro du cumul hors taxes des commandes de chaque client devra également être gérée par cette fonction
DESCRIPTION DES FICHIERS de l’UT2
Fichier F_CLIENTS
Voir description dans l’unité de traitement 1.
Enregistrement PARAMETRE
Organisation séquentielle sur disque magnétique
UN SEUL ENREGISTREMENT de longueur 39 caractères.
NOM DE LA ZONE LONGUEUR NATURE OBSERVATIONS Plages de Cumul 13 Numérique (2 Décimales) zone répétée 3 fois
Fichier F_ETATSTAT
Ce fichier est sur imprimante
On édite 50 lignes détails, le titre sur chaque page.
Les intitulés sont en gras
Le chiffre d’affaire annuel uniquement sur la dernière page.
ETAT DES CLIENTS 3 lignes CODE CLIENT NOM CUMUL ANNUEL HT 2 lignes XXXXX XXXXXXXXXXXXXXX X XXX XXX ,XX XXXXX XXXXXXXXXXXXXXX X XXX XXX ,XX XXXXX XXXXXXXXXXXXXXX X XXX XXX ,XX XXXXX XXXXXXXXXXXXXXX X XXX XXX ,XX Ligne 60 CHIFFRE D’AFFAIRE HT ANNUEL: XXX XXX XXX XXX,XX
Il) Travail Demandé
1- Unité de traitement ou Diagramme
2- Description des données
3- Arbre programmatique général UT1. Arbres programmatiques détaillés de l’UT1 Chargement et Recherche Barème
4- Arbre programmatique général UT2. Arbres programmatiques détaillés de l’UT2 Tri de la table des clients, Mise à jour du fichier des clients et édition de l’état statistique.
5- Cobol déclaration des différents fichiers (UT1), traitement du calcul du prix unitaire (UT1).
Corrigé de l’Exercice d’Entraînement TP-14_UT1
I) Diagramme de Traitement UT1
Le diagramme de traitement nous indique les fichiers à traiter en entrée et en sortie.
F_BAREMEOrganisationSéquentielle
PROG_TP14UT1
Non Trié
F_DEMANDESOrganisationSéquentielle
F_FACTURES
F_CLIENTSOrganisation
Séq.Index.
Non Trié
F_PRODUITSOrganisationSéq. Index.
Clé Code Produitt
Clé Code Client
F_COMMANDESOrganisation
Seq. IndexClé Code Client +
Code Produit
Dans cette première unité de traitement, nous avons donc défini les fichiers en entrée et les fichiers en sortie avec pour chacun le type d’organisation qui a été spécifié au niveau de l’analyse. Nous rappelons que le type d’organisation impose le ou les types d’accès permettant de lire les enregistrements de ces fichiers.
- Organisation Séquentielle ==> Accès Séquentiel
- Organisation Séquentielle Indexée ==> Accès Séquentiel, Accès Direct, Accès Dynamique.
Nous détaillerons au cours de la correction, les caractéristiques de chacun de ces accès.
II) Analyse du problème
Ce traitement consiste à produire une facture pour les clients ayant effectué une commande, ce type de clients est répertorié dans le fichier « F_DEMANDES ».
Le fichier « F_BAREMES », en organisation séquentielle contient toutes les informations nécessaires à l’établissement du coût des produits commandés. Ce fichier comporte au maximum 100 enregistrements, ce fichier F_BAREMES sera chargé en mémoire centrale dans une structure de type table dès le début du traitement.
Il apparaît que le fichier de base du traitement est le fichier « F_DEMANDES », ce fichier devra être lu SÉQUENTIELLEMENT en entier afin de traiter toutes les demandes, la fin de ce fichier conditionne la fin du traitement.
Pour chaque client appartenant à ce fichier « F_DEMANDES », il faudra :
- Préparer l’en-tête de la facture, la date la numérotation des pages, toutes les informations concernant le client seront éditées à partir du fichier « F_CLIENTS » par UNE LECTURE DIRECTE avec la clé renseignée par le code client du fichier « F_DEMANDES ».
- A partir de ce même code client, SE POSITIONNER DIRECTEMENT sur le premier enregistrement de ce client dans le fichier « F_COMMANDES », puis lire séquentiellement tous les enregistrements (tous les produits commandés) concernant ce client.
- Pour chaque produit non facturé, calculer le prix en fonction du prix unitaire, de la quantité et du coefficient de réduction attribué au client. Une ligne détail de la facture sera établie et éditée pour chacun des produits, la désignation du produit sera renseignée par UNE LECTURE DIRECTE du fichier « F_PRODUITS » à partir du code produit. Préparer le cumul des achats du client. Mettre à jour l’enregistrement traité dans le fichier « F_COMMANDES » après avoir positionné l’indicateur de traitement du produit à « X ».
- En fin de client, éditer la ligne total Hors Taxes, éditer la ligne TVA ainsi que la ligne TTC de la facture, mettre à jour le cumul des commandes du client dans le fichier « F_CLIENTS ».
Nous allons donc résumer dans un tableau les différents types d’accès et les ordres associés sur les fichiers pour l’unité de traitement 1
Nom de Fichier Type d’Organisation
Type d’Accès Ordres E/ S Ordres E/S en cobol
F_DEMANDES
en Entrée
Séquentielle Séquentiel Lecture Séquentielle READ F_DEMANDES AT END xxxxxxxx
F_BAREME
en Entrée
Séquentielle Séquentiel Lecture Séquentielle READ F_BAREME AT END xxxxxxxx
F_CLIENTS
En Entrée- Sortie
Séquentielle Indexée
Direct Lecture Directe
Réécriture Directe
READ F_CLIENTS INVALID KEY xxxxxxx
REWRITE ES_Client INVALID KEY xxxxxxxx
F_COMMANDES
En Entrée -Sortie
Séquentielle Indexée
Dynamique Lecture Directe
Réécriture Directe
Positionnement
Lecture Séquentielle
READ F_COMMANDES INVALID KEY xxxxxxx
REWRITE ES_Commande INVALID KEY xxxxxxxx
START F_COMMANDES INVALID KEY xxxxxxx
READ F_COMMANDES NEXT AT END xxxxxx
F_PRODUITS
En entrée
Séquentielle Indexée
Direct Lecture Directe READ F_PRODUITS INVALID KEY xxxxxxx
F_FACTURES
En Sortie
Séquentielle Séquentiel Écriture Séquentielle
WRITE S_Facture
La structure du fichier F_DEMANDES, fichier directeur du traitement est très simple un enregistrement par client.
Dans le fichier F_COMMANDES pour un client il existe N Commandes.
FICHIERF_DEMANDES
CLIENTS
1
N
1
TANT QUE
TANT QUE
EnregistrementF_DEMANDES
1
LectureF_DEMANDES
PRODUITS
1
P
11
EnregistrementF_COMMANDES
LectureF_COMMANDES
III) Description des données UT1
En Pseudo-Code
FICHIER F_DEMANDES
E_Dem_Cod_Client Texte (5)
FICHIER F_BAREME
E_Bareme : Fiche ( Bar_Cod_Produit Texte (5) Bar_Prix Numérique (5,2)
Bar_ZoneCoef [1 : 4] : Bar_Coef Numérique (1,2) )
E_Bareme Texte (24) (par défaut)
FICHIER F_CLIENTS
ES_Client : Fiche ( Cli_Cod_Client Texte (5) Clé Cli_Nom Texte (30) Cli_Prenom Texte (20) Cli_Adresse Texte (55) Cli_Ville Texte (20) Cli_CP Texte (5) Cli_Cat Numérique (1) Cli_Cumul Numérique (6,2) )
ES_Client Texte (144) (par défaut)
FICHIER F_COMMANDES
ES_Commande : Fiche ( Cmd_Clé Fiche (
Cmd_Cod_Client Texte (5) Clé1 Cmd_Cod_Produit Texte (5) Clé2
) Cmd_Quantite Numérique (6) Cmd_Indic_Traite Texte (1)
)
ES_Commande Texte (17) (par défaut)
FICHIER F_PRODUITS
E_Produit : Fiche ( Prod_Cod_Produit Texte (5) Clé
Prod_Libelle Texte (23) )
E_Produit Texte (28) (par défaut)
FICHIER F_FACTURES
S_Facture Texte (132)
Le fichier F_FACTURES ayant plusieurs types d’enregistrements différents, nous avons déclaré ci-dessus les zones de communication associées. Les différents enregistrements seront décrits sous forme de zones de travail.
ZONES de TRAVAIL
T_Fin_F_Demandes Logique
T_Fin_F_Bareme Logique
T_Fin_F_Commandes Logique
Variable identifiant la fin du fichier Fichier Terminé ==> « Vrai » Fichier Non Terminé ==> « Faux »
T_LgnPage_Fact Fiche ( 120 caractères à blanc T_Int1_Page Texte (7) T_Num_Page Numérique Editée (3) 2 caractères à blanc )
T_LgnPage_Fact Texte (132) (par défaut)
Ligne Numéro de page du fichier F_FACTURES
T_LgnTitre_Fact Fiche ( 62 caractères à blanc T_Int1_Titre Texte (7) 63 caractères à blanc )
T_LgnTitre_Fact Texte (132) (par défaut)
Ligne Titre du fichier F_FACTURES
T_LgnNom_Fact Fiche ( T_Int1_Nom Texte (15) T_Nom Texte (30) 87 caractères à blanc )
T_LgnNom_Fact Texte (132) (par défaut)
Ligne Nom du client du fichier F_FACTURES
T_LgnPrenom_Fact Fiche ( T_Int1_Prenom Texte (15) T_Prenom Texte (20) 97 caractères à blanc )
T_LgnPrenom_Fact Texte (132) (par défaut)
Ligne Prenom du client du fichier F_FACTURES
T_LgnAdr_Fact Fiche ( T_Int1_Adr Texte (15) T_Adresse Texte (55) 62 caractères à blanc )
T_LgnAdr_Fact Texte (132) (par défaut)
Ligne Adresse du client du fichier F_FACTURES
T_LgnVilleCP_Fact Fiche ( T_Int1_VilleCP Texte (15) T_Ville Texte (20) 40 caractères à blanc T_Int2_VilleCP Texte (10) T_CP Texte (5) 42 caractère à blanc )
T_LgnVilleCP_Fact Texte (132) (par défaut)
Ligne Adresse du client du fichier F_FACTURES
T_LgnInt_Fact Fiche ( 20 caractère à blanc T_Int1_Int Texte (7) 20 caractère à blanc T_Int2_Int Texte (11) 20 caractère à blanc T_Int3_Int Texte (8) 20 caractère à blanc T_Int4_Int Texte (4) 22 caractère à blanc )
T_LgnInt_Fact Texte (132) (par défaut)
Ligne Intitulé de l’état F_FACTURES
T_Lgn_Fact Fiche ( 21 caractère à blanc T_Code_Produit Texte (5) 14 caractère à blanc T_Libelle_Produit Texte (23) 15 caractère à blanc T_Qte_Produit Numérique Editée (6) 18 caractère à blanc T_Prix_Produit Numérique Editée (10) 20 caractère à blanc )
T_Lgn_Fact Texte (132) (par défaut)
Ligne courante de l’état F_FACTURES
T_LgnHT_Fact Fiche ( 87 caractères à blanc T_Int1_HT Texte (25) T_HT Numérique éditée (14) 6 caractères à blanc )
T_LgnHT_Fact Texte (132) (par défaut)
Ligne Total Hors Taxes du fichier F_FACTURES
T_LgnTVA_Fact Fiche ( 87 caractères à blanc T_Int1_TVA Texte (30) T_TVA Numérique éditée (9) 6 caractères à blanc )
T_LgnTVA_Fact Texte (132) (par défaut)
Ligne Total TVA du fichier F_FACTURES
T_LgnTTC_Fact Fiche ( 87 caractères à blanc T_Int1_HT Texte (23) T_HT Numérique éditée (16) 6 caractères à blanc )
T_LgnTTC_Fact Texte (132) (par défaut)
Ligne Total Toutes Taxes du fichier F_FACTURES
T_Sov_Client Texte (6)
Sauvegarde du Code Client
T_NumPage_Fact Numérique (3)
Compteurs de page
T_CalculPrix_Produit Numérique (6,2)
Prix produit (Qte et coeff)
T_Cum_Client Numérique (6,2)
Cumul client
T_MtHT_Client Numérique (9,2)
Montant Hors Taxes du client
T_TVA_Client Numérique (5,2)
Montant TVA du client
T_MtTTC_Client Numérique (10,2)
Montant TTC du client
*****************************************************************************************
Nous avons indiqué qu’il était nécessaire de stocker le fichier F_BAREME sous forme de table.
Quelles sont les fonctions ==> Le prix unitaire
Le coefficient de réduction.
Le prix unitaire dépend d’un argument qui est ==> Le code produit qui n’est pas une séquence absolue
Le coefficient de réduction dépend de 2 arguments ==> Le code produit qui n’est pas une séquence absolue
La catégorie 1 à 4 qui est une séquence absolue
Chargement Séquentiel et Recherche Séquentielle pour le sur l’argument code produit
Chargement Directe et Recherche Directe sur l’argument catégorie
100 postes
T_Bareme : TABLEAU ( [1 :100] : Fiche (
T_CodeProduit_Bareme Texte (5)
T_PUProduit_Bareme Numérique (5,2)
T_Coef_Bareme [1 :4] Numérique (1,2))
)
T_Ind_Bareme Numérique (3)
PROG_TP14_UT1
TANT QUE
T_Fin_F_Demandes =
"Faux"
Debut_Prog_TP14_UT1 Fin_Prog_TP14_UT1
Ouvertures LectureF_DEMANDES
UN_CLIENT
Debut_ClientFin_Client
IV - ARBRE GENERALPROG TP14-UT1
Init_TP14 Fermetures
TANT QUE
T_Fin_F_Commandes="Faux"
ETE_Dem_Cod_Client=
Cmd_Cod_Client
UN_PRODUIT Edition_Fin_Facture
Init_Client
Charg_Bareme
MAJ_Client LectureF_DEMANDES
SI ALORS
Trait_Produit
Lecture SEQF_COMMANDES
Cmd_Indic_Traite^= "X"
Edition_DebutFacture
Positionnement F_COMMANDES
Lecture SEQF_COMMANDES
IV - ARBRE DETAILLE PROG TP14_UT1
Trait_Produit
Lecture_DirecteF_PRODUITS
On renseigne la clé du fichier SIF_PRODUITS par le code produit de lacommande, afin d'effectuer une lecture
directe pour récupérer le libellé duproduit
Calcul_Prix_Produit Cumul_FactureProd_Cod_Produit
<==Cmd_Cod_Produit
Edit_Lgn_Facture MAJ_Commandes
T_Libelle_Produit<==
Prod_Libelle
T_Qte_Produit<==
Cmd_Quantite
T_Prix_Produit<==
T_CalculPrix_Produit
T_Code_Produit<==
Cmd_Cod_Produit
Ecrire S_Facture<==
T_Lgn_Fact
T_CalculPrix_Produit a été calculédans le bloc
Calcul_Prix_Produit
Le libellé du produit (Prod_Libelle) estobtenu à l'aide de la lecture directe de
F_PRODUITS
IV - ARBRE DETAILLEPROG TP14_UT1
Init_TP14_UT1
T_Fin_F_Demandes<== "Faux"
Ouvertures
Ouvrir en entrée F_DEMANDES,F_PRODUITS
Fermetures
FermerF_DEMANDES,F_PRODUITS,F_CLIENTS,
F_COMMANDES,F_FACTURE
T_Int1_Page <== "PAGE : "T_Int1_Titre <== "FACTURE"
T_Int1_Nom <== "NOM :"T_Int1_Prenom <== "PRENOM :"
T_Int1_Adresse <== "ADRESSE :"T_Int1_VilleCP <== "VILLE :"T_Int2_VilleCP <== "CP :""
T_Int1_Int<== "PRODUIT"T_Int2_Int<==
"DESIGNATION"T_Int3_Int <=="QUANTITE"
T_Int4_Int <== "PRIX"
Ouvrir en sortieF_FACTURE
Ouvrir en entrée-sortieF_CLIENTS,
F_COMMANDES
T_NumPage_Fact<== 0
Initialisation tableT_Bareme
T_Int1_HT<== "TOTAL HORS TAXES : "T_Int1_TVA<== "TVA 18,6%"
T_Int1_TTC <=="TOTAL T.T.C."
IV - ARBRE DETAILLE PROG TP14_UT1
Charg_Bareme
TANT QUE
Charg_Un_Produit
Fin_Charg_Bareme
T_Fin_F_Bareme=
"Faux
On commence le chargement sur le premierposte de la table
OuvertureF_BAREME
en entréeFermer F_BAREME
Chargement de la tableT_Bareme à partir du fichier
F_BAREME
Debut_Charg_Bareme
T_Fin_F_Bareme<==
"Faux"
T_Ind_Bareme<== 1
LectureF_BAREME
T_Bareme (T_Ind_Bareme)<==
E_Bareme
T_Ind_Bareme<==
T_Ind_Bareme+ 1
LectureF_BAREME
On passe au poste suivant, chargementséquentiel
Optimisation du chargement: le dessin de l'enregistrement de
F_BAREME étant identique à la descriptiond'un poste de la table, on charge tout le
poste sans s'occuper de la catégorie
IV - ARBRE DETAILLEPROG TP14_UT1
Init_Client
T_MtHT_Client,T_Cumul_Client
<== 0
Edition_Debut_Facture
Cli_Cod_Client<==
E_Dem_Cod_Client
Lecture_DirecteF_CLIENTS
Ecrire S_Facture<==
T_LgnTitre_Fact aprèssaut de 4 lignes
Edit_Lgn_Page
Edit_Lgn_Titre
Edit_Lgn_Nom
Edit_Lgn_Prenom
Edit_Lgn_Adresse
Edit_Lgn_Ville_CP
Edit_Lgn_Intitules
Ecrire S_Facture<==
T_LgnAdr_Fact
T_Adresse<==
Cli_Adresse
Edit_Lgn_Page
T_NumPage_Fact<==
T_NumPage_Fact+ 1
T_Num_Page_Fact<==
T_NumPage_Fact
Ecrire S_Facture<==
T_LgnPage_Factaprès saut de page
Edit_Lgn_Nom
T_Nom<==
Cli_Nom
Ecrire S_Facture<==
T_LgnNom_Fact
IV - ARBRE DETAILLEPROG TP14_UT1
T_Prenom<==
Cli_Prenom
Ecrire S_Facture<==
T_LgnPrenom_Fact
Edit_Lgn_Prenom
T_Ville<==
Cli_Ville
T_Cp<==
Cli_CP
Ecrire S_Facture<==
T_LgnPrenom_Fact
Edit_Lgn_Ville_CP
S_Facture<==
à blanc
Edit_Lgn_Intitules
Ecrire S_Facture<==
T_LgnInt_Factaprès saut de 2 lignes
Ecrire S_Factureaprès saut d'une ligne
Cumul_Facture
T_MtHT_Client<==
T_MtHT_Client +
T_CalculPrix_Produit
MAJ_Commande
Cmd_Indic_Traite<=="X"
Réécrire directeES_Commande
On positionne l'indicateur de facturationdu produit à "X" pour éviter double
facturation
On réécrit l'enregistrement mis à jour sur le fichierF_COMMANDES.
La clé est renseignée par les précédents ordre d'entréesortie ( LECTURE SEQ de F_COMMANDES)
IV - ARBRE DETAILLEPROG TP14_UT1
Edition_Fin_Facture
Ecrire S_Facture<==
T_LgnHT_Factaprès saut de 5 lignes
Edition_Lgn_TVA Edition_Lgn_TTC
T_HT<==
T_MtHT_Client
T_TVA_Client<==
(T_MtHT_Client * 18,6)/ 100
T_TVA<==
T_TVA_Client
Ecrire S_Facture<==
T_LgnTVA_Fact
Edition_Lgn_TTC
T_TTC_Client<==
T_MtHT_Client+ T_TVA_Client
T_TTC<==
T_TTC_Client
Ecrire S_Facture<==
T_LgnTTC_Fact
Edition_Lgn_HT
IV - ARBRE DETAILLEPROG TP14_UT1
T_Ind_Bareme<==
1
Calcul_Prix_produit
Poste_Suivant
Cli_Cumul<==
Cli_Cumul +T_MtTTC
TANT QUE
On se positionne sur le premierposte, puis on effectue une
recherche séquentielle afin detrouver le poste où est stocké le
produit commandé
MAJ_Client
Le Poste ayant été trouvé,le prix unitaire du produit est dans la zone ==>
T_PUProduit_Bareme (T_Ind_Bareme)
Le coefficient de réduction dépend du poste du produitcommandé et de la catégorie du client
==> T_Coef_Bareme (T_Ind_Bareme, Cli_Cat)
T_CodeProduit_Bareme(T_Ind_Bareme)
^=Cmd_Cod_Produit
T_Ind_Bareme<==
T_Ind_Bareme + 1
T_CalculPrix_Produit<==
T_PUProduit_Bareme(T_Ind_Bareme) *Cmd_Quantite *T_Coef_Bareme
(T_Ind_Bareme,Cli_Cat)
Réécrire Direct ES_Client
On met à jour le total cumulé des commandesdu client en zone de communication,
puis on réécrit l'enregistrement sur le fichier F_CLIENTS.La clé d'accès a été renseigné lors de la lecture de l'enregistrement
client pour gérer le début de la facture
IV - ARBRE DETAILLEPROG TP14_UT1
Cmd_Code_Client<==
E_Dmd_Code_Client
SI ALORS
Clé invalide
Ano_Pos_Commandes
Positionnement_F_COMMANDES
Positionnement surF_COMMANDES
enreg cle > Cmd_Clé
Cmd_Code_Produit<==
Valeur Minimale
On désire se positionner sur le premier enregistrement d'un client identifié parE_Dmd_Code_Client
1) On renseigne la sous-clé Cmd_Code_Client du fichier COMMANDESà la valeur E_Dmd_Code_Client.
On ignore la valeur du premier produit de ce service.
2) On affecte donc la valeur minimale à la sous clé Cmd_Code_Produit.
On demande un positionnement sur l'enregistrement du fichier COMMANDESdont la clé est immédiatement supérieure à Cmd_Clé, il s'agit obligatoirement dupremier enregistrement du client.
Attention, un positionnement n'est pas une Lecture, il faudra lire séquentiellemntle fichier par la suite pour récupérer en mémoire centrale ce premierenregistrement du service.
Lecture SEQF_COMMANDES
Lire séquentiellementF_COMMANDES
SI ALORS
Fin de Fichier
T_Fin_F_Commandes<==
"Vrai"
Après un positionnement, on effectue deslectures séquentielles pour traiter toutes
les commandes du client
LectureF_DEMANDES
LireF_DEMANDES
SI ALORS
Fin de Fichier
T_Fin_F_Demandes<==
"Vrai"
IV - ARBRE DETAILLEPROG TP14_UT1
SI ALORS
Clé invalide
Ano_Réécr_Commandes
Réécrire DirectES_Commande
RéécrireES_Commande
Lecture F_BAREME
LireF_BAREME
SI ALORS
Fin de Fichier
T_Fin_F_Baremes<==
"Vrai"
Lecture DirecteF_PRODUITS
LireF_PRODUITS
SI ALORS
Clé Invalide
Réécrire DirectES_Client
SI ALORS
Clé invalide
Ano_Réécr_Client
Réécrire ES_Client
Ano_Lect_Produit
COBOL de la déclaration des différents fichiers (UT1)
7 8 12 73
ENVIRONMENT DIVISION. .............. INPUT-OUPUT SECTION.
FILE-CONTROL.
SELECT F_DEMANDES ASSIGN TO DEMANDES.
SELECT F_CLIENTS ASSIGN TO CLIENTS
ORGANIZATION INDEXED
RECORD KEY IS Cli_Cod_Client
ACCESS MODE IS RANDOM.
SELECT F_COMMANDES ASSIGN TO COMMANDES
ORGANIZATION INDEXED
RECORD KEY IS Cmd_Clé
ACCESS MODE IS DYNAMIC.
SELECT F_PRODUITS ASSIGN TO PRODUITS
ORGANIZATION INDEXED
RECORD KEY IS Prod_Cod_Produit
ACCESS MODE IS RANDOM.
SELECT F_BAREME ASSIGN TO BAREME.
SELECT F_FACTURES ASSIGN TO FACTURE.
* Les fichiers F_DEMANDES, F_BAREME et F_FACTURES ont par défaut
* ORGANIZATION SEQUENTIAL
COBOL de la procédure de calcul du prix unitaire
7 8 12 73
Calcul_Prix_Produit.
PERFORM VARYING T_Ind_Bareme FROM 1 BY 1 UNTIL T_CodeProduit_Bareme (T_Ind_Bareme) = Cmd_Cod_Produit End-PERFORM.
COMPUTE T_CalculPrix_Produit = T_PUProduit_Bareme(T_Ind_Bareme)
* Cmd_Quantite * T_Coef_Bareme (T_Ind_Bareme,Cli_Cat).
********************************************************
Corrigé de l’Exercice d’Entraînement TP-14_UT2
I) Diagramme de Traitement UT2
Le diagramme de traitement nous indique les fichiers à traiter en entrée et en sortie.
PROG_TP14UT2
F_ETATSTAT
F_CLIENTSOrganisation
Séq.Index.
Clé Code Client
II) Analyse du problème
Ce traitement annuel consiste à produire une état statistique trié sur le montant total des commandes des clients et de mettre à jour la catégorie du client en fonction de ce montant et des valeurs indiquées dans l’enregistrement paramètre.
L’enregistrement paramètre sera lu en début de traitement et stocké en mémoire centrale.
Le fichier de base du traitement est bien entendu le fichier « F_CLIENTS », ce fichier devra être lu SÉQUENTIELLEMENT en entier afin de stocker dans une table T_Tab_Clients de 1000 postes les informations concernant le client en vue de produire l’état statistique.
Pour chaque client appartenant au fichier « F_CLIENTS », il faudra :
- Stocker dans la table T_Tab_Clients, le code client, son nom, son montant cumulé des achats.
- Évaluer la nouvelle catégorie pour le client à l’aide des valeurs paramètres.
- Mettre à jour cette information dans le fichier F_CLIENTS en réécrivant l’enregistrement modifié par la nouvelle catégorie.
- En fin de traitement, lorsque tous les clients auront été stockés dans la table, il faut la trier en ordre décroissant sur le montant cumulé des achats, puis éditer cette table en respectant les règles d’édition.
Le fichier F_CLIENTS sera ouvert en Entrée_Sortie, on effectuera un accès de type dynamique afin de pouvoir lire séquentiellement ce fichier à partir du premier enregistrement et de pouvoir effectuer une réécriture des divers enregistrements clients mis à jour.
III) Description des données UT2
En Pseudo-Code
FICHIER F_CLIENTS
ES_Client : Fiche ( Cli_Cod_Client Texte (5) Clé Cli_Nom Texte (30) Cli_Prenom Texte (20) Cli_Adresse Texte (55) Cli_Ville Texte (20) Cli_CP Texte (5) Cli_Cat Numérique (1) Cli_Cumul Numérique (6,2) )
ES_Client Texte (144) (par défaut)
FICHIER F_ETATSTAT
S_Etatstat Texte (132)
Le fichier F_ETATSTAT ayant plusieurs types d’enregistrements différents, nous avons déclaré ci-dessus les zones de communication associées. Les différents enregistrements seront décrits sous forme de zones de travail.
ZONES de TRAVAIL
T_Fin_F_Clients Logique
Fichier Terminé ==> « Vrai » Fichier Non Terminé ==> « Faux »
T_Trouve_Cat Logique
Borne Catégorie trouvé ==> « Vrai » Borne Catégorie non trouvé ==> « Faux »
T_Param : Fiche(
T_ValCat [1 :4] Numérique (10,2)
)
Stockage de l’enregistrement paramètre
T_Indcat Numérique (1)
Indice pour la zone indicée paramètre
T_IndBal Numérique (4)
T_IndDeb Numérique (4)
T_IndMax Numérique (4)
Zones servant à repérer les postes lors du tri de la table
T_LgnTitre_Stat Fiche ( 58 caractères à blanc T_Int1_TitreStat Texte (16) 58 caractères à blanc )
T_LgnTitre_Stat Texte (132) (par défaut)
Ligne Titre du fichier F_ETATSTAT
T_LgnInt_Stat Fiche ( 25 caractère à blanc T_Int1_IntStat Texte (11) 25 caractère à blanc T_Int2_IntStat Texte (3) 25 caractère à blanc T_Int3_IntStat Texte (16) 27 caractère à blanc )
T_LgnInt_Stat Texte (132) (par défaut)
Ligne Intitulé de l’état F_ETATSTAT
T_Lgn_Stat Fiche ( 28 caractère à blanc T_Code_Client_Statt Texte (5) 12 caractère à blanc T_Nom_Client_Stat Texte (30) 12 caractère à blanc T_MTHT_Stat Numérique Editée (16) 29 caractère à blanc )
T_Lgn_Stat Texte (132) (par défaut)
Ligne courante de l’état F_ETATSTAT
T_LgnTot_Stat Fiche ( 50 caractère à blanc T_Int1_TotStat Texte (30) 25 caractère à blanc T_MtTotal_TotStat Numérique éditée (18) 9 caractère à blanc )
T_LgnInt_Stat Texte (132) (par défaut)
Ligne Intitulé de l’état F_ETATSTAT
T_Max Numérique (10,2)
Stockage Maximum lors d’un balayage au cours du tri
T_CA_Annuel Numérique (12,2)
Chiffra annuel de l’entreprise
***************************************************************************************** Nous avons indiqué qu’il était nécessaire de stocker le fichier les clients dans une table T_Tab_Clients afin de pouvoir produire une liste triée.
Quelles sont les fonctions ==> Le code clien,t son nom, son montant des commandes hors taxes
Chargement Séquentiel et Recherche Séquentielle
T_Tab_Clients : TABLEAU ( [1 :1000] : Fiche (
T_CodeClient_Tab Texte (5)
T_NomClient_Tab Texte (30)
T_CumClient_Tab Numérique (10,2))
)
T_Indtab Numérique (4)
T_Stock Texte (47)
Zone de stockage d’un poste de la table lors de l’inversion au cours du tri
PROG_TP14_UT2
TANT QUE
T_Fin_F_Clients =
"Faux"
Debut_Prog_TP14_UT2 Fin_Prog_TP14_UT2
Ouvertures Lecture_SEQF_CLIENTS
UN_CLIENT
Lecture SEQF_CLIENTS
IV - ARBRE GENERALPROG TP14_UT2
Init_TP14_UT2
Stock_TABLE T_Indtab<==
t_Indtab + 1
LectureParam==>T_Param
T_Indtab<== 1
MAJ_CAT Réécriture directeES_Client
Tri_Table Edit_Stat Fermetures
Stockage Client dans la tableséquentiellement
Mise à jour de la catégorie duclient
Réécriture du client
On lit séquentiellement leclient suivant
IV - ARBRE DETAILLEPROG TP14_UT2
Init_TP14_UT2
T_Fin_F_Clients<== "Faux"
Ouvertures
Ouvrir en sortieF_ETATSTAT
Fermetures
FermerF_CLIENTS,
F_ETATSTAT
T_Int1_TitreStat <== "ETAT DES CLIENTS"
T_Int1_IntStat <== "CODE CLIENT"
T_Int2_IntStat <== "NOM :"
T_Int3_IntStat <== "MONTANT ANNUEL HT"
Ouvrir en entrée-sortieF_CLIENTS,
Initialisation tableT_Tab_Clients
T_Int1_TotStat <=="CHIFFRE D'AFFAIRE ANNUEL : "
T_CA_Annuel<==0
Stock_Table
T_CodeClient_Tab(T_Indtab)
<==Cli_Cod_Client
T_NomClient_Tab(T_Indtab)
<==Cli_Nom
T_CumClient_Tab(T_Indtab)
<==Cli_Cum
IV - ARBRE DETAILLEPROG TP14_UT2
MAJ_CAT
T_Trouve_Cat<== "Faux"
SI ALORS SINON
SI ALORS
Cli_Cat<==
4
T_Indcat<==
1
UNE_CATEGORIE
TANT QUE
T_Indcat <= 3ET
T_Trouve_Cat= "Faux"
Cli_Cumul<=
T_ValCat (T_Indcat)
Borne_Trouve
Cli_Cat<==
T_Indcat
T_Trouve_Cat<==
"vrai"
T_Indcat<==
T_Indcat + 1
T_Trouve_Cat=
"Faux"
On débute la recherche de la bornesupérieure d'une catégorie sur lepremier poste de la zone indicée
Le cumul du client est inférieur à la bornesupérieure de la catégorie
La catégorie du client correspons au numérode poste de la zone indicée
En sortant de la répétitive, si l'indicateur est à "Faux", cela signifie
que le cumul du client n'est pas inférieur àla borne de la catégorie 3, donc le client
est de catégorie 4
Réécriture DirecteES_Client
Réécrire directeES_Client
SI ALORS
ANO_Réécr_Client
Clé InvalideAyant lu l'enregclient, la clé estdonc renseignée
TRI _TAB
DEBUT TRI_TAB FIN TRI_TABTANT QUE
T_IndDeb<=
n - 1
UN_BALAYAGET_IndDeb
<==1
DEBUT_BALAYAGE
T_IndBal<==
T_IndDeb + 1
TANT QUE
SI ALORS
T_CumClient_Tab(T_IndBal)>T_Max
T_IndMax<==T_IndDeb,
T_Max<== T_CumClient_Tab
(T_IndDeb)
T_IndDeb<==
T_IndDeb + 1
FIN_BALAYAGET_IndBal
<=n
T_IndBal<==
T_IndBal + 1
UNE COMPARAISON
INVERSION
Le cumul du client étant plus grand que lemaximum trouvé précédemment, on mémorisecette nouvelle valeur maximale dans T_Max et
sa position dans T_Ind_Max
T_IndMax<==T_IndBal,
T_Max>== T_CumClient_Tab
(T_IndBal)
A la fin du balayage, on peut rangerl'argument "Maxi" trouvé, dans le poste
repéré par T_IndDeb
La fin du Tri seraeffective, lorsque l'avantdernier poste de la table
aura été renseignée
IV - ARBRE DETAILLEPROG TP14_UT2
INVERSION
T_Stock<==
T_Table_Clients( T_IndMax )
T_Table_Clients(T_IndMax )
<==T_Table_Clients
( T_IndDeb )
T_Table_Clients( T_IndDeb )
<==Stock
IV - ARBRE DETAILLEPROG TP14_UT2
EDIT_STAT
DEB_EDIT_STATTANT QUE FIN_EDIT_STAT
SI ALORS
UN_CLIENT_EDIT
EDIT_LGN_STAT T_NbLgn<==T_NbLgn + 1
TITRE_STAT
T_Intab <==T_Indtab +1
T_Indtab <=T_NbPostes
T_NbLgn = 20
T_NbLgn<==20
T_Indtab<== 1
Ecrire S_Stat<==
T_LgnTitre_Stataprès saut de
page
Ecrire S_Stat<==
T_LgnInt_Stataprès saut de 3
lignes
S_Stat<==
à blanc
Ecrire S_Stataprès saut d 2
lignes
T_NbLgn<==
0