rapport de stage - porte feuille de...
TRANSCRIPT
Remerciement
Je tiens à remercier la Laiterie Triballat pour avoir accepter que je puisse faire mon stage dans le secteur informatique de cette entreprise, et tout particulièrement Monsieur Mayen d'avoir donné son accord pour me faire rentrer et me donner un projet spécifique dans le cadre de ma formation de première année en BTS SIO option SLAM.
J'ai eu énormément de chance d'avoir pu trouver une entreprise qui puisse me prendre en tant que stagiaire, car de nos jours, cela devient de plus en plus difficile de trouver un stage.
Pour ce qui est du projet, je remercie beaucoup Monsieur Jardat pour le temps qu'il m'a consacré dans l'élaboration et la conception de l'application et à m'avoir donné toutes les bases nécessaires pour comprendre ce langage de programmation qui me paraissait jusqu'à là totalement flou.
Enfin, je remercie aussi Madame Boisson, directrice du laboratoire d'analyse, pour m'avoir élaborer un cahier des charges clair et précis qui m'a permis de gagner de précieuses heures dans la création du projet, mais aussi de m'avoir éclaircit lorsque je rencontrais un problème au niveau de l'interface ou de certaines conditions d'utilisation. J'espère que l'application contiendra tous les éléments nécessaires au bon fonctionnement du service.
Ce stage m'a été très bénéfique car j'ai pu avoir un aperçu de ce qui pouvait m'attendre en tant qu'informaticien, et a aussi consolider mon idée de vouloir travailler dans ce domaine.
Présentation de l'entreprise
Raison Sociale...................................................................................................................
Statut Juridique...........................................................................................................…..
Secteur d'activité..............................................................................................................
Organigramme..................................................................................................................
Présentation du service d'accueil
Rôle dans l'établissement..................................................................................................
Tâches réalisées.................................................................................................................
Moyens informatiques......................................................................................................
Missions confiées
Cahier des charges............................................................................................................
Réalisation du projet
Création d'un modèle relationnel de données(MCD).......................................................
Création d'une base de données......................................................................................
- Présentation de la base de données HFSQL.......................................................
- Comment créer une base de données sur Windev 19 en HFSQL ?.....................
Mise en forme et élaboration d'une application..............................................................
SommaireSommaire
La famille Triballat exploitait une ferme familiale à Rians dans le département du Cher.
En 1952, Hubert Triballat ne perpétue pas l'activité agricole qui assurait la subsistance de sa famille. Il installe dans la ferme une petite laiterie et commence à acheter et collecter à l'aide de trois employés les laits produits par les familles voisines.
Entre 1952 et 1965, Hubert Triballat achète quinze laiteries dans le département.
L'entreprise se développe dans les années 1970, lorsqu'elle vend ses produits (faisselle et fromagesde lait de chèvre) dans les crèmeries parisiennes3.
En 1992, la production se diversifie en s'étoffant de gâteaux, desserts…
Plus tard, grâce à des usines disséminées sur le territoire français, l'entreprise s'investit dans la production de fromages aux appellations d'origines protégéescomme cabécou de rocamadour, , selles-sur-cher, valençay, époisses et langres.
En 2006, aux États-Unis, picodonl'entreprise achète la société agroindustrielle californienne Laura Chennel spécialisée dans la transformation de lait de chèvre.
Actuellement, c'est le fils du fondateur, Hugues, qui dirige l'entreprise.
Raison sociale : Il s'agit de la laiterie H.Triballat.
Statut juridique : C'est une société par action simplifiée.(SAS)
Secteur d'activité :
L'entreprise transforme les matières premières et vend des produits finis.
Elle fait parti du secteur secondaire car c'est une activité industrielle et a pour statut une grande entreprise avec plus 750 salariés.
Présentation de l'entreprisePrésentation de l'entreprise
Présentation du service
Rôle dans l'établissement
Le directeur du système d'information est Emmanuel mayen.
Il dirige les deux pôles informatique :
- Le pôle développement qui est constitué de 6 personnes
-Emmanuel JARDAT : responsable d'informatique décisionnel ( concerne les système d'informations liés aux statistiques
-Christian DESTEVE : responsable étude et développement
-Paul-Henry AUDUN Chef de projet
-Anthony ZAWADZKI Chef de projet informatique junior
-Julien DUBOIS Animateur de performance
-David LIVACHE Analyse programmeur
- Le pôle technique : réseaux, informatique industriel, exploitation bureautique
Ce pôle est constitué de 4 personnes :
- Jean Philippe BEDIN : responsable bureautique,
- Laurent BONNARD : responsable d'exploitation,
- Pascal THOMAS : réseau et télécom
- Richard MARDGALI : responsable technique informatique
Tâches réalisées :
Le projet CAP Le projet CAP PerformancePerformance
Ce nom baptise la mise en place de l'ERP (Enterprise resource planning)Ce nom baptise la mise en place de l'ERP (Enterprise resource planning)
L'ERP est tout le système informatique et est constitué de plusieurs modulesL'ERP est tout le système informatique et est constitué de plusieurs modules ::
- gestion commerciale- gestion commerciale
- la finance- la finance
- la gestion de production- la gestion de production
- les achats- les achats
Le projet est sous le progiciel JDE (Edwards) de chez oracleLe projet est sous le progiciel JDE (Edwards) de chez oracle
Il a démarré il y a 4 ans. La gestion de production est installée à 80 %. Il devrait voir le jour en Il a démarré il y a 4 ans. La gestion de production est installée à 80 %. Il devrait voir le jour en principe fin juin 2015principe fin juin 2015
Autres tâches réaliséesAutres tâches réalisées par le service:par le service:
- mettre en place de l'aide à la décision- mettre en place de l'aide à la décision : utilisation d'outil décisionnel (BO) et Oracle bizness : utilisation d'outil décisionnel (BO) et Oracle bizness intelligenceintelligence
- gérer un entrepôt de données métier, de donner des outils et former les utilisateurs pour qu'ils - gérer un entrepôt de données métier, de donner des outils et former les utilisateurs pour qu'ils puissent créer leur reporting et leur décisionnel. puissent créer leur reporting et leur décisionnel.
- développement sous Windev sur tout le domaine d'activité de l'entreprise (commercial, finance, - développement sous Windev sur tout le domaine d'activité de l'entreprise (commercial, finance, production)production)
Infrastructure du serviceInfrastructure du service ::
- 3 salles d'informatiques avec deux data center en réplication.- 3 salles d'informatiques avec deux data center en réplication.
- 600 ordinateurs (y compris les pc portables)- 600 ordinateurs (y compris les pc portables)
- 60 serveurs virtuels- 60 serveurs virtuels
- 15 serveurs physiques (hébergement messagerie)- 15 serveurs physiques (hébergement messagerie)
- capacité de stockage actuellement- capacité de stockage actuellement : plus de 30 terabytes: plus de 30 terabytes
Il y a 3 types de réseauxIl y a 3 types de réseaux ::
- réseaux de terrain (pour la fabrication)- réseaux de terrain (pour la fabrication)
-réseau industriel (pour la traçabilité)-réseau industriel (pour la traçabilité)
-réseau d'entreprise (gestion reliée entre les serveurs)-réseau d'entreprise (gestion reliée entre les serveurs)
Réalisation du projet
Création d'un modèle relationnel de données (MCD)
Création d'une base de données :
Sur Windev 19, de nombreux types de base de données sont disponibles comme vous pouvez le constater sur l'image ci dessous :
- Présentation de la base de données HFSQL
Sur Windev 19, de nombreux types de base de données sont disponibles comme vous pouvez le constater sur l'image ci dessous :
Pour ma part, on m'a fait travailler sur HFSQL Classic qui fonctionne à la fois sous Windows, Linux, sur mobile et sur les réseaux de toute taille. C'est une base de données qui est intégrée directement aux environnements Windev, Windev mobile et Webdev.
HFSQL offre une format de stockagecomptable au niveau binaire entretoutes les plates formes.
- Comment créer une base de données sur Windev 19 en HFSQL ?
Lors de la création d'unnouveau projet, il estdemandé dans l'assistance decréation d'un projet si on veutcréer une nouvelle base dedonnées :
Ensuite, il faut entrer un nompour nommer votre base dedonnées et choisir unemplacement où elle seraenregistrée.
L'assistance Windev est fait pour faciliter le plus possible le développeur.
On choisit ensuite le type de base dedonnées que l'on veut créer. Dans lecadre de mon stage, j'ai utilisé HFSQLClassic.
Création d'un fichier dans la base de données
Une fois la base de donnéescréée, il ne reste plus qu'àcréer les fichiers que l'on veutvoir dedans. Pour cela, on doitcliquer sur « Créer unenouvelle description d'unfichier de données ».
On nous demande ensuite de choisir un nom pour le fichier et le type de base de fichier choisi, ce qui reste pour notre part, HFSQL Classic.
Création de données dans un fichier
La fenêtre principale du fichier s'ouvre :On constate que le fichier est crée avec un identifiant automatique, il servira de clé unique, donc aucun besoin de rajouter un identifiant.
On peut maintenant créer toutes les données que l'on veut voir apparaître dans le fichier, comme ceci par exemple :
Dans la même fenêtre, de nombreusesoptions sont mises en place. Par exemple, sion veut que la donnée sélectionnée soit :
– 1: une clé composé– 2: le type choisi (chaîne, mémo
texte,...)– 3: une clé unique ou avec doublons– 4: une valeur particulière qui doit être
attribué à la donnée.
Mise en forme et élaboration d'une applicationMise en forme et élaboration d'une application
Mon but, durant ce stage, était de créer une application mettant en œuvre la gestion des audits duMon but, durant ce stage, était de créer une application mettant en œuvre la gestion des audits dulaboratoire d'analyses de l'entreprise H.Triballat.laboratoire d'analyses de l'entreprise H.Triballat.
Je devais donc prévoirJe devais donc prévoir ::
- la création d'un audit- la création d'un audit
- la fiche principale de l'audit avec ces différents critères- la fiche principale de l'audit avec ces différents critères
- la possibilité de pouvoir rechercher un audit- la possibilité de pouvoir rechercher un audit
- la gestion des différents ateliers constituant l'entreprise y compris les différentes filiales- la gestion des différents ateliers constituant l'entreprise y compris les différentes filiales
- la gestion des familles d'exigences et des exigences- la gestion des familles d'exigences et des exigences
- un bilan des audits du laboratoire servant à comparer des audits durant plusieurs années- un bilan des audits du laboratoire servant à comparer des audits durant plusieurs années
Explication de différentes interfaces utilisateurs de l'application suivit du programme spécifique à Explication de différentes interfaces utilisateurs de l'application suivit du programme spécifique à celles cicelles ci
Création d'un audit (code)Création d'un audit (code)
// Ajout d'un enregistrement saisi dans une fenêtreEcranVersFichier(FEN_CreationAudit,Audits)Audits.StatutAudit="E"// Dans le fichier AuditHAjoute(Audits)
// Je cherche une famille dans la liste de la grilleHLitRecherche(Famille,IDGrille,LISTE_Grille)// Tant que je trouve une famille, je recherche les critères spécifiques à cette familleTANTQUE HTrouve(Famille)
// J'ajoute la famille à l'auditHRAZ(AuditFamille)AuditFamille.IDAudit=Audits.IDAuditsAuditFamille.IDFamille = Famille.IDFamilleHAjoute(AuditFamille)
HlitRecherche(Exigence,IDFamille,Famille.IDFamille)
//Tant que je trouve une exigence, je prends les audits qui iront s'ajouter dans le fichier Audit/Critère
TANTQUE HTrouve(Exigence)
//HRAZ: Faire un nouvel enregistrementHRAZ(AuditExigence)AuditExigence.IDAudits=Audits.IDAudits
AuditExigence.IDExigence=Exigence.IDExigenceHAjoute(AuditExigence)
// je crée un enregistrement comportant IDExigence que je vais chercher dans IDExigence dans le fichier AuditExigence et IDAudits
// que je vais chercher dans IDAudits dans le fichier AuditExigence// On note que le numéro de la ligne est égal à 1//On ajoute ensuite cet enregistrement dans AuditResultatHRAZ(AuditResultat)AuditResultat.IDExigence=AuditExigence.IDExigenceAuditResultat.IDAudit=AuditExigence.IDAuditsAuditResultat.IDFamille=Famille.IDFamilleAuditResultat.NumLigne=1HAjoute(AuditResultat)
HLitSuivant(Exigence)FIN
HLitSuivant(Famille)FIN
// Je parcours le fichier InfoParametres pour alimenter le fichier AuditInfo de chacune de ces lignes.HLitPremier(InfoParametres)TANTQUE PAS HEnDehors(InfoParametres)
//J'initialise mon fichier AuditInfoHRAZ(AuditInfo)// On a besoins de mettre une valeur dans l'IDAudit, l'IDInformations du fichier AuditInfo// Pour le Texte du fichier AuditInfo, on attend pas de valeur pour l'instant puisqu'on doit le
saisir dans la fenêtre.// Donc on ne met rien concernant le Texte du fichier AuditInfoAuditInfo.IDAudits=Audits.IDAuditsAuditInfo.IDInformations=InfoParametres.IDInfoParametresAuditInfo.Texte=InfoParametres.ValeurDefaut// Enfin, on ajoute la valeur dans le fichier AuditInfo qui a été copié dans le fichier
InfoParametresHAjoute(AuditInfo)HLitSuivant(InfoParametres)
FIN
//Ouvre la fenêtre FicheAuditEntete directement et affichera automatiquement le nom, la date de l'audit et le nom de l'ateliergnIdaudit=Audits.IDAuditsOuvre(FEN_FicheAuditEntête)
Ajouter un atelierAjouter un atelier ::
HRAZ(Atelier)SI Ouvre(FEN_FicheAtelier)=Vrai ALORS
ListeAffiche(TABLE_Atelier,taInit)
FIN
Modifier un atelierModifier un atelier ::
SI Ouvre(FEN_FicheAtelier) ALORSListeAffiche(TABLE_Atelier,taCourantBandeau)FIN
Supprimer un atelierSupprimer un atelier ::
SI OuiNon("Voulez vous vraiment supprimer cet atelier ?")=Non ALORS RETOURTableSupprime(TABLE_Atelier)
Code onglet exigenceCode onglet exigence
// J'affiche la note// J'affiche la note
COMBO_Notation=RechercheNoteFamille(gnIdaudit,COMBO_Famille..Valeur)// j'affiche la tableTableSupprimeTout(TABLE_AuditExigence)HLitRecherche(Exigence,IDFamilleTri,HConstruitValClé(Exigence,IDFamilleTri,COMBO_Famille..ValeurMémorisée))TANTQUE HTrouve(Exigence)
HLitRecherche(AuditExigence,IDAuditsIDExigence,HConstruitValClé(AuditExigence,IDAuditsIDExigence,gnIdaudit,Exigence.IDExigence))
SI HTrouve(AuditExigence) ALORS
it est un entier = TableAjouteLigne(TABLE_AuditExigence)TABLE_AuditExigence.COL_Coderef[it]=Exigence.Code_référenceTABLE_AuditExigence.COL_IDExigence[it]=Exigence.IDExigenceTABLE_AuditExigence.COL_NomsExigences[it]=Exigence.NomExigenceTABLE_AuditExigence.COL_Detail[it].INT_nonaudité=AuditExigence.nonAuditer
itbis est une entier=AffichageCommentaire(Exigence.IDExigence,it)DefinirHauteurLigne(itbis,it)
Enregistrer_récapitulatif(it)
RechercheAuditPrec_Exigence(it,AuditExigence.IDExigence)
FIN
HLitSuivant(Exigence)FIN
Code tableauCode tableau
Sortie de TABLE_DETAILEXIGENCESortie de TABLE_DETAILEXIGENCE
EnregistrerCommentaire(TABLE_DetailExigence.COL_numligne,TABLE_DetailExigence.COL_C.INT_C,TABLE_DetailExigence.COL_NC.INT_NC,TABLE_DetailExigence.COL_Amel.INT_Amel,TABLE_DetailExigence.COL_Niveau..Valeur,TABLE_DetailExigence.COL_Commentaire)
Sélection d'une ligne de TABLE_DETAILEXIGENCESélection d'une ligne de TABLE_DETAILEXIGENCE
EtatColonne(TABLE_DetailExigence..Nom)
Interrupteur INT_CInterrupteur INT_C
A chaque modification de INT_CA chaque modification de INT_C
SI INT_C=1 ALORSTABLE_DetailExigence.COL_NC.INT_NC=0TABLE_DetailExigence.COL_Niveau=""TABLE_DetailExigence.COL_NiveauTri=""SINON
TABLE_DetailExigence.COL_NC.INT_NC=1TABLE_DetailExigence.COL_Amel.INT_Amel=0TABLE_DetailExigence.COL_Niveau="MIN"TABLE_DetailExigence.COL_NiveauTri="MIN"
FIN
EtatColonne("TABLE_DetailExigence")
EnregistrerCommentaire(TABLE_DetailExigence.COL_numligne,TABLE_DetailExigence.COL_C.INT_C,TABLE_DetailExigence.COL_NC.INT_NC,TABLE_DetailExigence.COL_Amel.INT_Amel,TABLE_DetailExigence.COL_Niveau..Valeur,TABLE_DetailExigence.COL_Commentaire)
Enregistrer_récapitulatif(TABLE_AuditExigence)
Interrupteur AmelInterrupteur Amel
A chaque modification de INT_AMELA chaque modification de INT_AMEL
EnregistrerCommentaire(TABLE_DetailExigence.COL_numligne,TABLE_DetailExigence.COL_C.INT_C,TABLE_DetailExigence.COL_NC.INT_NC,TABLE_DetailExigence.COL_Amel.INT_Amel,TABLE_DetailExigence.COL_Niveau..Valeur,TABLE_DetailExigence.COL_Commentaire)
Enregistrer_récapitulatif(TABLE_AuditExigence)
Interrupteur NCInterrupteur NC
A chaque modification de INT_NCA chaque modification de INT_NC
SI INT_NC=1 ALORSTABLE_DetailExigence.COL_C.INT_C=0
TABLE_DetailExigence.COL_Amel.INT_Amel=0TABLE_DetailExigence.COL_Niveau="MIN"TABLE_DetailExigence.COL_NiveauTri="MIN"
SINON TABLE_DetailExigence.COL_C.INT_C=1TABLE_DetailExigence.COL_Niveau=""TABLE_DetailExigence.COL_NiveauTri=""
FIN
EtatColonne("TABLE_DetailExigence")
EnregistrerCommentaire(TABLE_DetailExigence.COL_numligne,TABLE_DetailExigence.COL_C.INT_C,TABLE_DetailExigence.COL_NC.INT_NC,TABLE_DetailExigence.COL_Amel.INT_Amel,TABLE_DetailExigence.COL_Niveau..Valeur,TABLE_DetailExigence.COL_Commentaire)
Enregistrer_récapitulatif(TABLE_AuditExigence)
Colonne niveauColonne niveau
Sélection d'un ligne de COL_NiveauSélection d'un ligne de COL_Niveau
TABLE_DetailExigence.COL_NiveauTri=TABLE_DetailExigence.COL_Niveau
EnregistrerCommentaire(TABLE_DetailExigence.COL_numligne,TABLE_DetailExigence.COL_C.INT_C,TABLE_DetailExigence.COL_NC.INT_NC,TABLE_DetailExigence.COL_Amel.INT_Amel,TABLE_DetailExigence.COL_Niveau..Valeur,TABLE_DetailExigence.COL_Commentaire)
Enregistrer_récapitulatif(TABLE_AuditExigence)
Colonne CommentaireColonne Commentaire
Sortie du Col_CommentaireSortie du Col_Commentaire
EnregistrerCommentaire(TABLE_DetailExigence.COL_numligne,TABLE_DetailExigence.COL_C.INT_C,TABLE_DetailExigence.COL_NC.INT_NC,TABLE_DetailExigence.COL_Amel.INT_Amel,TABLE_DetailExigence.COL_Niveau..Valeur,TABLE_DetailExigence.COL_Commentaire)
Bouton +Bouton +
Clic sur BTN_AjoutCommentaireClic sur BTN_AjoutCommentaire
EnregistrerCommentaire(TABLE_DetailExigence.COL_numligne,TABLE_DetailExigence.COL_C.INT_C,TABLE_DetailExigence.COL_NC.INT_NC,TABLE_DetailExigence.COL_Amel.INT_Amel,TABLE_DetailExigence.COL_Niveau..Valeur,TABLE_DetailExigence.COL_Commentaire)
AjouterCommentaire()
Bouton -
Clic sur BTN_SupprimerCommentaire
SupprimeCommentaire()
Interrupteur Exigence non auditée
A chaque modification de INT_nonaudité
ExigenceAuditéeOuPas("TABLE_DetailExigence",INT_nonaudité)
Combo Famille
Initialisation de COMBO_Famille
SI COMBO_Famille..Occurrence<>0 ALORSListeSelectPlus(COMBO_Famille,1)
TableAffiche(TABLE_AuditExigence,taInit)FIN
Sélection d'une ligne de COMBO_Famille
TableAffiche(TABLE_AuditExigence,taInit)
Sélection d'une ligne de COMBO_Notation
EnregistrerNoteFamille(gnIdaudit,COMBO_Famille..Valeur,COMBO_Notation..Valeur)AffichageTableNoteFamille()
Création d'une procédure locale :
Durant mon stage, mon tuteur m'a montré comment faire une procédure locale, pour mieux m'y retrouver dans un code parfois excessivement long et répétitif.
Exemple avec la procédure « EnregistrerCommentaire » :
PROCEDURE EnregistrerCommentaire(inum est un entier,pc est un booléen,pnc est un booléen,pamelio est un booléen,pcodetype,pcommentaire)
HLitRecherche(AuditResultat,IDAuditIDExigenceNumLigne,HConstruitValClé(AuditResultat,IDAuditIDExigenceNumLigne,gnIdaudit,TABLE_AuditExigence.COL_IDExigence,inum))SI HTrouve(AuditResultat) ALORS
AuditResultat.IDAudit=gnIdauditAuditResultat.IDExigence=TABLE_AuditExigence.COL_IDExigenceAuditResultat.NumLigne=inumSI pc = Vrai ALORS
AuditResultat.StatutExigence="C" AuditResultat.typeNC=""
FINSI pnc = Vrai ALORS
AuditResultat.StatutExigence="NC" AuditResultat.typeNC=pcodetype
FINAuditResultat.Commentaire=pcommentaireAuditResultat.CritereAmelio=pamelioHModifie(AuditResultat)
FIN
Comme vous pouvez le constater dans le code tableau, j'ai utilisé cette procédure de nombreuses fois, ce qui m'a permis de gagner énormément de temps et de ne pas devoir réécrire tout le code de la procédure à chaque fois.
En résuméEn résumé ::
Les principales fonctions étudiés pendant mon stageLes principales fonctions étudiés pendant mon stage ::
Création d'une requête SQLCréation d'une requête SQL ::
En Windev, il y a deux façons de créer une requêteEn Windev, il y a deux façons de créer une requête ::
- Par programmation en saisissant le code SQL- Par programmation en saisissant le code SQL
- Par assistance avec une fenêtre de description, avec génération automatique du code SQL- Par assistance avec une fenêtre de description, avec génération automatique du code SQL
Pour ma part, j'ai eu l'occasion d'apprendre à créer une requête avec l'assitance et j'ai trouvé ça Pour ma part, j'ai eu l'occasion d'apprendre à créer une requête avec l'assitance et j'ai trouvé ça beaucoup plus rapide et simple que par programmation.beaucoup plus rapide et simple que par programmation.
Voilà en quoi cela consiste:Voilà en quoi cela consiste:
L'assistant nous affiche la fenêtre de création d'une requêteL'assistant nous affiche la fenêtre de création d'une requête ::
Après validation, si on a des données de plusieurs fichiers différents, on peut avoir un problème deAprès validation, si on a des données de plusieurs fichiers différents, on peut avoir un problème dejointure. Arrivé àjointure. Arrivé àcette fenêtre, il fautcette fenêtre, il fautcliquer surcliquer sur«« CatésienCatésien » pour» pourfaire la jointure.faire la jointure.
On ajoute les rubriques correctes pour fairela jointure et on valide ensuite.