Rapport de projet de fin d`étude Développement d - Libre
Transcription
Rapport de projet de fin d`étude Développement d - Libre
Université François Rabelais Tours École Polythechnique Universitaire - Département Informatique 64, avenue Jean Portalis 37200 Tours Rapport de projet de fin d’étude Développement d’un MRP à capacité finie pour l’ERP libre OfbizNéogia Encadrants : SOUKHAL Ameur HEINTZ Olivier Étudiant : GORON Peter EPU-DI 3e année Année 2004-2005 Table des matières I 3 Environnement technique du projet 1 Présentation d’Ofbiz 1.1 Une architecture . . . . . 1.2 Un framework . . . . . . . 1.2.1 L’Entity Engine . 1.2.2 Le Service Engine 1.2.3 Le Control Servlet 1.3 Des applications . . . . . . . . . . . 4 5 6 6 7 7 8 2 Présentation de Néogia 2.1 Les enjeux de la génération de code . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Les applications Néogia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 11 II 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . État de l’art 3 Planification de la production 3.1 Présentation des systèmes MRP . 3.1.1 Historique . . . . . . . . . 3.1.2 Pré-requis pour la mise en 3.1.3 La logique du MRP . . . 3.2 Défauts des systèmes MRP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 14 14 14 15 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 18 18 18 19 19 20 20 22 22 23 charge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 24 25 25 . . . . . . . . . . . . . . oeuvre d’un . . . . . . . . . . . . . . . . . . . . . . MRP . . . . . . . . 4 Planification des capacités de production 4.1 Planification des besoins en moyens de production 4.1.1 Principe . . . . . . . . . . . . . . . . . . . . 4.1.2 Mise en oeuvre . . . . . . . . . . . . . . . . 4.2 Validation du plan directeur de production . . . . 4.2.1 Approche par facteurs globaux . . . . . . . 4.2.2 Approche par feuille de capacité . . . . . . 4.2.3 Approche par profil de ressource . . . . . . 4.3 Planification des besoins en capacité de production 4.3.1 Calcul de la charge . . . . . . . . . . . . . . 4.3.2 Résultats du CRP . . . . . . . . . . . . . . 5 Techniques de lissage de 5.1 Lissage en parallèle . . 5.2 Lissage en série . . . . 5.3 Limitations . . . . . . . . . . . . . . . . 6 Conclusion de l’état de l’art 26 III 27 Analyse de l’existant 7 Étude du MRP existant 7.1 Données manipulées par le MRP . . . . . . . . . . . . . . . . . . . . . . . . . . . ii 28 28 7.2 7.3 Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Particularités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Module de gestion de production 8.1 Gestion des données techniques . . . . . 8.1.1 Les ressources . . . . . . . . . . . 8.1.2 Le calendrier industriel . . . . . 8.1.3 Les gammes opératoires . . . . . 8.1.4 Les opérations . . . . . . . . . . 8.1.5 Les nomenclatures . . . . . . . . 8.2 Gestion d’atelier . . . . . . . . . . . . . 8.2.1 Les ordres de fabrication . . . . . 8.2.2 Programmation de la production IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Développements réalisés 29 29 30 30 30 30 31 32 32 33 33 34 35 9 Solution mise en oeuvre 9.1 Présentation de la solution . . . . . . . 9.1.1 Principe . . . . . . . . . . . . . 9.1.2 Place du décideur . . . . . . . 9.2 Algorithme de lissage en série simplifié 9.3 Analyse des besoins fonctionnels . . . 9.3.1 MRP . . . . . . . . . . . . . . 9.3.2 CRP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 36 36 37 38 39 39 40 10 Développement du MRP 10.1 Modélisation du MRP . . . . . . . . . . . . . . . . . . . 10.1.1 Les entrées . . . . . . . . . . . . . . . . . . . . . 10.1.2 Les sorties . . . . . . . . . . . . . . . . . . . . . . 10.1.3 Structures de contrôle du MRP . . . . . . . . . . 10.2 Algorithmes mis en oeuvre . . . . . . . . . . . . . . . . . 10.2.1 Algorithme du MRP mono-article mono-niveau . 10.2.2 Algorithme du MRP mono-article multi-niveaux 10.2.3 Algorithme du MRP multi-articles . . . . . . . . 10.3 Intégration dans OfbizNéogia . . . . . . . . . . . . . . . 10.3.1 Services du MRP . . . . . . . . . . . . . . . . . . 10.3.2 Interfaces graphiques du MRP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 41 41 43 44 46 46 47 48 49 49 50 . . . . . . . . . . 52 53 53 55 56 57 57 58 60 61 62 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Développement du CRP 11.1 Structures de données du CRP . . . . . . . . . . . . . . . . . . . 11.1.1 Gestion de plannings . . . . . . . . . . . . . . . . . . . . . 11.1.2 Modélisation des capacités d’une ressource . . . . . . . . . 11.1.3 Modélisation des charges d’une resources . . . . . . . . . 11.2 Algorithmes de planification . . . . . . . . . . . . . . . . . . . . . 11.2.1 Algorithme de planification d’un OF . . . . . . . . . . . . 11.2.2 Algorithme de planification d’une opération . . . . . . . . 11.2.3 Algorithme de planification de l’utilisation d’une ressource 11.3 Conséquences de la planification à capacité finie . . . . . . . . . . 11.4 Intégration avec le module de gestion d’atelier . . . . . . . . . . . iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V Bilan 12 Bilan du projet 12.1 État d’avancement . . . . . . . . 12.2 Problèmes rencontrés . . . . . . . 12.2.1 Problèmes fonctionnels . . 12.2.2 Problèmes techniques . . 12.2.3 Temps de développement 12.3 Améliorations possibles . . . . . 63 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 64 64 64 65 65 66 13 Conclusion 67 VI 68 Annexes A Modélisation des données techniques dans OfbizNeogia 69 B Modélisation des ordre de fabrication dans OfbizNeogia 70 C Modélisation du MRP réalisé 71 D Modélisation des charges/capacités des ressources 72 Glossaire 74 Bibliographie 75 iv v Remerciements Mes remerciements s’adressent en premier lieu à Ameur SOUKHAL et Olivier Heintz pour leur disponibilité et pour m’avoir laissé une trés grande autonomie pour mener ce projet. Je souhaiterais aussi remercier toute l’équipe Néréide pour leur collaboration sur ce projet. 1 Introduction Ce projet, en collaboration avec la société Néréide, porte sur la réalisation d’un MRP (Material Requirements Planning) à capacité finie pour l’ERP (Enterprise Resource Planning) libre OfbizNéogia. Il s’inscrit dans la continuité d’un projet de fin d’étude réalisé en 2004 par Thierry Grauss, qui portait sur la réalisation d’un MRP à capacité infinie. Néréide est une jeune société de services en logiciels libres, spécialisée dans l’intégration de progiciels de gestion. L’objectif de ce projet est donc d’ajouter au MRP de son progiciel, OfbizNéogia, la prise en compte des capacités de production lors de la planification des besoins en composants. Cette prise en compte des capacités est particulièrement importante pour assurer que les délais de livraison seront respectés par la planification proposée par le MRP. Ce rapport se divise en cinq parties. La première présente l’environnement technique dans lequel s’est effectué ce projet. La seconde est un état de l’art sur les MRP et les problèmes de gestion de capacité de production, elle permet ainsi de situer la problématique du projet et les différentes solutions envisageables. La troisième partie est une étude de l’existant, c’est-à-dire une étude des bases à partir desquelles les développements doivent prendre lieu. Puis la suivante présentera la solution mise en oeuvre et les développements réalisés pour mener ce projet à son terme. Enfin la dernière partie porte sur le bilan du projet, aussi bien sur l’adéquation des résultats par rapport aux objectifs que sur les acquis. 2 Première partie Environnement technique du projet 3 Chapitre 1 Présentation d’Ofbiz Open For Business, ou Ofbiz, est un projet de progiciel de gestion intégré (PGI) libre initié par deux développeurs américains, Andy Zeneski et David E. Jones, en mai 2001. L’objectif de ce projet est de fournir un ensemble de composants homogènes permettant de développer aisément et rapidement des logiciels libres de gestion. À terme, il est prévu d’obtenir tous les composants nécesssaires à un PGI intégrant les modules de gestion suivants : – un ERP (Enterprise Resource Planning) ; – un SCM (Supply Chain Management) ; – un CRM (Customer Relationship Management) ; – un MRP (Manufacturing Resource Planning) ; – un CMS (Content Management System) ; – un CMMS (Computerized Maintenance Management System) ; – et une plateforme d’eBusiness / eCommerce ; Pour atteindre ces objectifs, Ofbiz se base sur de nombreux logiciels libres tels que Subversion, ant, Tomcat, JPublish, FreeMarker, etc. Ces logiciels sont reconnus pour leur qualité et ils assurent l’indépendance du projet. De même, Ofbiz respecte de nombreux standards pour garantir un maximum de compatibilité avec les systèmes existants et futurs, notamment J2EE et XML. Ce dernier est largement utilisé dans tout le projet pour décrire les données et les traitements. Par ailleurs, le code source du projet est publié sous la licence MIT qui est libre et permissive, c’est-à-dire qu’elle ne fixe aucune obligation et/ou interdiction quant à l’utilisation, la modification, l’extension et la commercialisation du logiciel. Grâce à l’ouverture du code, une véritable communauté d’utilisateurs et de développeurs s’est formée. Cette dernière assure ainsi la réactivité et la qualité du projet. Cependant, de par sa taille et sa complexité, ce type de logiciel nécessite de gros investissements humains, matériels et financiers pour son développement mais aussi pour être reconnu. Les auteurs initiaux ont donc créé une société, Undersun Consulting, qui offre des services autour d’Ofbiz tout en les rémunérant pour leur travail de développement. Plusieurs sociétés du même type se sont créées un peu partout dans le monde dont Néréide pour la France. Elles participent 4 1.1. UNE ARCHITECTURE ainsi au projet en tant que sponsors. Généralement, ces sociétés proposent quatre types de services : – l’installation et l’adaptation si nécessaire d’Ofbiz ; – le développement d’extensions spécifiques à l’entreprise ; – la maintenance du système ; – la formation des utilisateurs. 1.1 Une architecture Ofbiz est une application java client-serveur compatible avec la spécification J2EE qui définit une architecture logicielle standard. On retrouve ainsi les trois éléments caractéristiques d’une architecture 3-tiers : – les clients : ici des clients légers, typiquement des machines peu puissantes disposant d’un navigateur internet ; – un serveur exécutant les différentes applications Ofbiz ; – et une ou plusieurs bases de données stockant le système d’information de l’entreprise. Fig. 1.1 – Architecture n-tiers d’Ofbiz Néanmoins, l’architecture d’Ofbiz peut aussi être considéré comme une architecture n-tiers car elle peut faire appel à des applications externes via des services. Ces derniers ne sont pas forcément exécutés sur la même machine, on les appelle alors WebServices. Ce type d’architecture présente de nombreux avantages. Elle permet de distribuer plus librement la logique applicative, ce qui facilite la répartition de la charge entre tous les niveaux. Elle facilite l’intégration de l’application avec celles déjà existantes. Enfin, elle permet d’accéder à un très grand nombre de fonctionnalités. Fig. 1.2 – Architecture J2EE d’Ofbiz Une des caractéristiques principales d’Ofbiz est la modularité de son architecture. En effet, tout est composant. Cette approche favorise une meilleure réutilisation des composants logiciels, 5 1.2. UN FRAMEWORK un développement modulaire donc plus rapide et enfin une meilleure qualité. Ce type d’architecture permet aussi de remplacer un composant par un autre très facilement dans le cas où il existe plusieurs implémentations différentes. Ofbiz se décompose en deux parties : le serveur et les composants. Le serveur, ou base, propose un environnement d’exécution homogène et performant pour les applications qu’il fait tourner. Il fournit tout un ensemble de mécanismes de gestion de cache et de pools de connexions qui permettent une meilleure montée en charge et une meilleure réactivité du système. Les composants, quant à eux, représentent les plus petites briques logicielles gérées par le serveur. Ils peuvent fournir un ensemble de ressources permettant de construire tout ou partie d’une application Ofbiz. Ces ressources peuvent correspondre à : un jeu de données, un modèle de données, des services, une ou plusieurs applications web, du code java. Généralement, un composant est spécialisé pour une fonctionnalité donnée. L’architecture d’Ofbiz se décompose en une multitude de composants qui, regroupés ensemble, forment un PGI complet. Toutefois, tous n’ont pas le même rôle au sein du PGI, c’est pourquoi on les classe selon trois niveaux d’abstraction : – le framework qui permet de développer des applications métier rapidement ; – les applications de base que l’on retrouve dans tout type d’organisation ; – les applications de haut-niveau et/ou applications métier. 1.2 Un framework Ofbiz est en premier lieu un «framework d’application d’entreprise» dans lequel chaque composant représente une brique logicielle pouvant être réutilisée pour construire des applications diverses. Ce framework repose sur trois composants essentiels sans lesquels une application standard ne pourrait pas fonctionner : l’Entity Engine, le Service Engine et le ControlServlet. 1.2.1 L’Entity Engine L’Entity Engine est un composant Ofbiz qui se charge de la gestion des données de tous les autres composants Ofbiz. Les données sont représentées selon un modèle Entité-Relation largement utilisé dans les applications d’entreprise et compatible avec la plupart des bases de données relationnelles. Le principal objectif de ce composant est d’éliminer tout code spécifique à la persistance des données dans un système transactionnel. Ses principales caractéristiques sont : – accès aux données via une interface unique, le «GenericDelegator» ; – supporte l’accès transparent à plusieurs base de données ; – les entités sont définies dans de simples fichiers XML ; – tous les types java de base ont un équivalent en base de données ; – supporte les transactions distribuées ; – suppporte un mécanisme de trigger appelé «EECA1 » même si le SGBD sous-jacent n’implémente pas cette fonctionnalité. 1 Entity Event-Condition-Action 6 1.2. UN FRAMEWORK 1.2.2 Le Service Engine Le Service Engine est l’équivalent de l’Entity Engine pour tous les traitements des composants Ofbiz. Les traitements sont appelés Services et peuvent être exécutés localement ou à distance. Le principal intérêt de ce composant est qu’il permet de lancer des services sans avoir besoin de connaı̂tre leur localisation et leur implémentation. C’est le ServiceDispatcher qui se charge alors de trouver l’implémentation du service et de son exécution. Un autre intérêt est la possibilité de rendre disponible tout service Ofbiz vers l’extérieur. Les services sont définis dans des fichiers XML dans lesquels il faut indiquer pour chaque service : – son nom ; – son implémentation (java, beanshell, minilang, etc) ; – sa localisation ; – la méthode à invoquer lors de son appel ; – la nécessité ou non d’être authentifié pour pouvoir l’appeler ; – ses paramètres d’entrée ; – ses paramètres de sortie. Un service est un traitement qui prend des paramètres en entrée et des paramètres en sortie. Ces paramètres sont vérifiés avant et après l’appel d’un service. Le traitement peut être asynchrone ou synchrone. L’accès aux entités à partir d’un service se fait automatiquement par l’intermédiaire d’une transaction ainsi en cas d’échec du service, la cohérence des bases de données est conservée. 1.2.3 Le Control Servlet Le ControlServlet est l’élément clé de la communication entre les utilisateurs et les applications web d’Ofbiz. Implémenté selon le modèle MVC (Modèle-Vue-Controleur), il gère la boucle d’évènements de l’interface graphique et les différents moteurs de rendu de l’application. Les réponses aux intéractions de l’utilisateur s’effectuent par l’intermédiaire d’évènements qui peuvent être implémentés sous la forme de services, de méthodes java, de scripts Beanshell ou Minilang. Voici l’ensemble des opérations effectuées suite à une intéraction avec l’utilisateur pour lui afficher une page à l’aide de JPusblish et FreeMarker (cf. Figure 1.3) : 1 L’utilisateur clique sur un lien hypertexte ou valide un formulaire. Le navigateur envoie alors une requête HTTP au serveur Ofbiz qui est interceptée par Tomcat et transmise au ControlServlet de l’application web correspondante. 2 Le ControlServlet vérifie si l’URI demandée est définie par l’application. Le cas échéant, il appelle le ou les événements associés à cette URI. Dans le cas contraire, il renvoie une erreur au navigateur web de l’utilisateur (Erreur HTTP 404 : page non trouvée). 3 Si l’évènement généré doit appeler un service, il vérifie que les paramètres de la requête correspondent aux attributs du service. 4 Si l’évènement généré doit appeler un service, il convertit les paramètres de la requête sous forme textuelle en objets Java correspondant. 5 L’évènement appelle un service ou un gestionnaire d’évènements (méthode java statique). 6 Le service ou le gestionnaire d’évènements peuvent effectuer des actions sur le modèle de données. 7 1.3. DES APPLICATIONS Fig. 1.3 – Boucle d’évènement d’une application Ofbiz 7 L’EntityEngine convertit ces actions en requêtes SQL pour le serveur de base de données. 8 Le service ou le gestionnaire d’évènement renvoie le résultat de leur action. 9 L’évènement transmet ce résultat au ControlServlet. 10 À partir du résultat de l’évènement, le ControlServlet sélectionne la vue à afficher et appelle le moteur de rendu adéquat. 11 À partir de la définition d’une vue, le moteur de rendu construit les différents sous-éléments de cette dernière. 12 Pour chaque sous-élément, il peut appeler des scripts BeanShell qui récupèrent et mettent en forme les données à afficher. 13 Pour chaque sous-élément, il appelle le moteur de template qui se charge de générer le code HTML correspondant. 14 Le moteur de rendu assemble les différents sous-éléments pour former une page web complète. 15 Le ControlServlet transmet la page générée au navigateur web de l’utilisateur. 1.3 Des applications Un des avantages d’Ofbiz par rapport à d’autres frameworks, est qu’il fournit un certain nombre d’applications par défaut, qui couvrent quasiment tous les domaines de l’entreprise. Elles sont livrées prêtes à l’emploi ; il ne reste plus qu’à saisir les données spécifiques à l’entreprise. On distingue deux types d’application au sein d’ofbiz : les applications de base que l’on retrouve dans toute organisation et les applications haut-niveau et/ou métiers, spécifique à un secteur d’activité. 8 Chapitre 2 Présentation de Néogia Bien qu’Ofbiz soit un logiciel écrit en Java, ses auteurs ont privilégié une approche EntitéRelation plutôt qu’une approche orientée objet pour la modélisation du système d’information de l’entreprise. Ce choix est motivé par un souci de simplicité et de généricité au niveau de la couche de persistence de données d’Ofbiz (Entity Engine). Cependant, ce type de modélisation présente le problème de s’attacher plus aux données qu’à la dynamique du système. En conséquence, on est souvent amené à manipuler directement les tuples de la base de données ce qui peut poser des problèmes de cohérence et de duplication de code. De plus, cette approche ne permet pas d’utiliser le haut niveau d’abstraction qu’offre le langage de programmation. Pour pallier cet inconvénient, Néréide a entrepris en mai 2004 le développement d’un nouveau projet appelé Néogia, publié sous la licence GPL. L’objectif de ce projet est de fournir à la communauté un ensemble d’outils et d’extensions permettant de développer des applications Ofbiz à l’aide d’une modélisation objet. Ces extensions se présentent sous la forme de composants Ofbiz générés à partir de diagrammes UML. Le temps gagné par la technique de génération de code employée dans Néogia permet aux développeurs de se consacrer principalement à la modélisation de leur application et donc d’augmenter la qualité du produit final. Les outils de génération de code utilisés par le projet Néogia se basent sur une technologie mise au point par Code-Lutin, une société de services en logiciels libres nantaise, membre du réseau Libre-Entreprise et spécialisée dans le développement applicatif en Java. Cette technologie, appelée LutinGenerators, permet à partir d’une modélisation UML stockée dans un fichier XMI1 de générer n’importe quel type de fichier dès l’instant qu’un générateur correspondant existe. L’utilisation de cette technologie est le fruit d’une collaboration entre Néréide et CodeLutin dans le cadre d’un transfert de compétences au sein du réseau Libre-Entreprise. 1 Format XML permettant l’échange de modèles UML entre outils de développement logiciel. 9 2.1. LES ENJEUX DE LA GÉNÉRATION DE CODE 2.1 Les enjeux de la génération de code Les applications d’un progiciel de gestion sont en général très complexes du fait du grand nombre de fonctionnalités développées et du volume de données très important à manipuler de façon sécurisée. Ceci implique un temps de développement très long. Or, les problématiques actuelles de conception de logiciels libres sont en totale oppposition. En effet, du fait du nombre réduit de développeurs, la conception d’un logiciel libre nécessite de : – limiter le temps de développement ; – assurer la souplesse de la plateforme notamment lors d’un changement de technologie ; – limiter les efforts liés à la maintenance du code. Dans ce contexte, la génération de code qui consiste à automatiser la création du code dit d’architecture, est un enjeu important pour les sociétés de services dans le logiciel libre. En effet, cela permet à la société de concentrer ses efforts non sur le codage d’architecture qui ne sera pas source de valeur ajoutée mais sur la demande spécifique des clients qui quant à elle, sera génératrice de valeur ajoutée. Dans le cas de Néogia, les développements sont réalisées via une approche MDA (Model Driven Architecture) dans laquelle tout développement passe par la définition d’un modèle UML qui sera ensuite utilisé pour générer le code de l’application. Fig. 2.1 – Schéma MDA utilisé par Néogia. Les générateurs de code de Néogia se chargent de créer toute la couche de persistance de données entre les objets issus de la modélisation et les entités gérées par l’Entity Engine d’Ofbiz, et de créer l’interface graphique et les services associés. L’intérêt des composants généré par Néogia par rapport aux composants Ofbiz est qu’ils sont issus de diagrammes UML et que leur code est généré à 70 %. L’un des reproches qui est souvent fait aux outils de génération de code est de ne pas pouvoir distinguer les éléments générés des éléments développés lors de générations successives. Les générateurs de Neogia ont été conçus pour éviter ce genre de cas en séparant les parties développées des parties générées. 10 2.2. LES APPLICATIONS NÉOGIA Voici quelques générateurs fournis par Néogia : – générateur de services ; – générateur d’entités ; – générateur de la couche d’abstraction Objet-Entité ; – générateur d’interfaces graphiques par défaut pour les objets modélisés ; – générateur des formulaires de recherche ; – générateur des fichiers d’internationalisation ; – etc. 2.2 Les applications Néogia Afin de démontrer l’efficacité de l’approche MDA pour le développement d’applications métiers pour Ofbiz, Néréide a recréé entièrement le module de gestion de production d’Ofbiz via cette approche. Les résultats étant au rendez-vous, les applications de gestion des stocks et de comptabilité ont elles aussi été refaites. Par la suite, d’autres composants d’Ofbiz ont été partiellement porté sur cette nouvelle architecture pour faciliter l’intégration des deux projets. La modélisation UML de ces applications à été realisée à partir de l’expérience acquise lors de la mise en oeuvre d’autres ERP et également à partir des retours d’expérience de l’utilisation d’Ofbiz. Pour éviter des confusions entre les applications Ofbiz et les applications Néogia, l’ERP a été renommer OfbizNéogia. 11 Deuxième partie État de l’art 12 Chapitre 3 Planification de la production «La planification de la production vise, pour un horizon de planfication en général de quelques mois, à optimiser l’utilisation des facteurs productifs disponibles pour la production d’un ou plusieurs produits répondant à des caractéristiques précises. Il s’agit d’un processus de traitement d’informations aboutissant à une programmation prévisionnelle s’appuyant sur une démarche d’optimisation.» Vincent Giard, [VG88]. En d’autres termes, la planification de la production permet d’une part d’anticiper pour satisfaire la demande, de prévoir les approvisionnements, et de planifier l’utilisation des moyens de production. D’autre part, elle peut aussi être utilisée comme un moyen d’optimiser la production en cherchant, par exemple, à minimiser les coûts tout en respectant les délais. Il existe différénts systèmes de planification de production : – Planification hiérarchisée : méthode utilisée pour élaborer le plan directeur de production, les produits finis sont regroupés par type et par famille. Elle est adaptée aux productions de masse. (Hax et Meal, 1975) – MRP : méthode utilisée pour déduire les besoins en composants à partir de la demande finale. C’est un système à flux poussé. (J. Orlicky, 1975) – OPT : méthode de planification traitant différemment les ressources goulots des ressources non-goulots. Elle ordonnance les ordres de fabrication sur les ressources limitées en priorité. (E. Goldratt, 1969) – Kanban : cas particuliers par rapport aux autres méthodes car il n’y a pas véritablement de planification. Le système de gestion de production s’auto-régule en fonction de la demande. C’est un système à flux tiré. (T. Ohno, 1959) Dans la suite de cet état de l’art sur la planification de la production, nous nous intéresserons uniquement aux méthodes MRP afin de rester dans le cadre du sujet du projet. 13 3.1. PRÉSENTATION DES SYSTÈMES MRP 3.1 3.1.1 Présentation des systèmes MRP Historique Les premiers systèmes MRP datent des années 60. Au départ très simples, ils ont continué à évoluer jusqu’à atteindre un haut niveau de fonctionnalités et d’intégration dans le système d’information de l’entreprise. Aujourd’hui, on classe les MRP en trois catégories selon leur niveau de fonctionnalités ([LD98]) : – MRP0 (1960) : Système qui, à partir des demandes fermes et estimées de produits finis et des niveaux de stock courants, calcule les besoins en composants (quoi, combien et quand) permettant de répondre à la demande. Les capacités de production ne sont pas prises en compte. – MRP1 (1970) : MRP0 auquel on a rajouté le calcul des charges engendrées sur l’outil de production par le résultat du MRP. La planification s’effectue toujours à capacité infinie. – MRP2 (1979) : Évolution du MRP1 qui intègre le calcul des coûts de production et un algorithme d’ajustement charge-capacité. Ce dernier permet d’ajuster la charge souhaitée à la charge disponible pour chaque centre de production. La signification de l’acronyme MRP a aussi changé au cours du temps. Initialement désignant Material Requirement Planning, il est dévenu Manufacturing Resource Planning pour souligner le fait que les dernières générations de MRP ne s’appliquent plus uniquement à la planification des besoins en composant mais aussi à la planification des besoins en ressources. 3.1.2 Pré-requis pour la mise en oeuvre d’un MRP Une des caractéristiques principales d’un MRP par rapport à une autre méthode de planification de la production, est la masse de données requises pour établir les besoins en composants. C’est pourquoi, le MRP est presque toujours intégré à une GPAO (Gestion de production assistée par Ordinateur) ou à un ERP. Conditions requises pour la mise en oeuvre d’un MRP 0 : – Existance d’un plan directeur de production : il détermine, pour un horizon de planification donné, la demande prévisionnelle de chaque produit fini. – Existance d’une nomenclature complète des composants utilisés : elle permet d’obtenir pour chaque produit, ses composants ainsi que les quantités nécessaires à son assemblage. – Existance d’un système d’information fiable sur l’état des stocks : le MRP nécessite une connaissance correcte de l’état du stock d’un composant (stock disponible, livraisons attendues, ...) au début ou à la fin de chaque période de l’horizon de planification. – Existance d’un fichier des délais d’obtention : il est essentiel pour être capable de calculer les dates de lancement d’un OF ou de passation d’une commande. Conditions requises pour la mise en oeuvre d’un MRP 1 : – Existance d’un fichier des gammes : les gammes déterminent les ressources utilisées par les opérations permettant ainsi de calculer les charges. – Existance d’un fichier des ressources : ce fichier permet d’établir les capacités de production. 14 3.1. PRÉSENTATION DES SYSTÈMES MRP Conditions requises pour la mise en oeuvre d’un MRP 2 : – Existance d’un fichier des coûts de production et de stockage – Existance de fichiers nécessaires à la détermination des priorités : il permet de choisir les OFs à déplacer en priorité en cas de surcharge d’une ressource. 3.1.3 La logique du MRP Le MRP est un processus itératif qui calcule pour chaque période de l’horizon de planification et pour chaque produit, ses besoins en composants. Les produits sont traités par niveau de nomenclature croissant pour que le calcul des besoins s’effectue en cascade. Ainsi, les besoins en composants générés pour un produit seront traités par la prochaine itération du MRP. Les besoins générés apparaissent toujours avec une certaine avance correspondant au délai de fabrication ou de livraison du composant. Fig. 3.1 – Exemple de nomenclature à 4 niveaux de profondeur Produit Lustre Corps Système d’éclairage Support Ampoule Commuateur Plastique Délai 2 1 2 1 2 2 1 1 Besoin Lancement Besoin Lancement Besoin Lancement Besoin Lancement Besoin Lancement Besoin Lancement Besoin Lancement 2 3 4 9 36 144 176 36 44 7.2 8.8 7.2 36 36 44 144 192 36 48 8.8 14.1 44 44 48 176 224 44 52 14.1 15.9 5 6 9 9 11 36 48 48 52 192 11 11 12 44 52 52 224 48 52 15.9 6.0 6.0 6.5 7 9 12 12 13 48 8 11 13 13 9 12 52 6.5 Exemple 3.1.1 – Exemple de calcul des besoins en composants d’un lustre Dans cet exemple, pour livrer 13 lustres en périodes 10, il faut les lancer en production 2 semaines plutôt ce qui génère des besoins en systèmes d’éclairage et en corps de lustre pour la période 8. 15 10 13 3.2. DÉFAUTS DES SYSTÈMES MRP Généralement, le calcul de la quantité à mettre en production est toujours supérieure à la demande car il doit prendre en compte la taille des lots, les taux de rebus, le réapprovisionnement du stock de sécurité, etc. Ce calcul s’effectue en deux temps : – calcul des besoins bruts à partir de la demande – calcul des besoins nets à partir des besoins brutes et des paramètres précédents 3.2 Défauts des systèmes MRP Le principal défaut de cette méthode de planification qu’est le MRP, est la non prise en compte des capacités de production pour établir les ordres de fabrication. Ainsi, rien n’assure que, pour une période donnée, tous les OF planifiés pourront être traités par l’atelier de production. Le MRP suppose implicitement que le plan directeur de production a été dimensionné correctement par rapport aux capacités de production. Cependant, un PDP peut avoir été exagéré, ou à l’inverse, les besoins en ressources n’ont pas été anticipés. Dans ce cas, les conséquences sont multiples : – Retards de livraison – Pénalités financières – Augmentation des files d’attentes à cause des ressources goulets surchargées – Augmentation des niveaux de stock 16 Chapitre 4 Planification des capacités de production Dans le chapitre précédent, nous avons vu que le principal défaut de l’algorithme de base du MRP est la non considération des capacités de production lors de la planification des ordres de fabrication. Néanmoins, la gestion des capacités doit absolument être prise en compte pour éviter d’obtenir des plans de production irréalisables. C’est donc le rôle de la planification des capacités de production, qui interviendra à différents moments durant la phase d’élaboration du plan directeur de production afin d’éviter ces problèmes. Un problème souvent rencontré au sein des systèmes MRP est l’existance d’un PDP exagéré. Dans ce cas, le plan de production prévoit plus d’ordres de fabrication que l’atelier ne peut supporter. De plus, ce type de plan occasionne une augmentation des stocks de matières premières et de composants intermédiaires, une augmentation des files d’attente au niveau des postes de travail, et du retard dans les livraisons. Ce chapitre présente donc les différentes techniques qui ont été développées pour s’assurer que les plans de production sont réalisables. Fig. 4.1 – Aperçu des différents techniques de gestion de capacité 17 4.1. PLANIFICATION DES BESOINS EN MOYENS DE PRODUCTION 4.1 4.1.1 Planification des besoins en moyens de production Principe La première phase de la gestion des capacités de production consiste à planifier les besoins en moyens de production à long terme (Resource Requirement Planning). Ce processus est similaire à celui du MRP, excepté qu’au lieu de planifier les besoins en composants, on planifie les besoins en ressources humaines, matérielles et financières nécessaires à la réalisation du plan de production (PDP). En revanche, à la différence du MRP, cette planification porte sur l’ensemble des périodes du PDP et utilise des familles d’articles sans notion de niveaux de nomenclature (Planification hiérarchisée). 4.1.2 Mise en oeuvre Dans un premier temps, il faut établir, pour chaque famille d’articles, son profil de ressource qui définit les besoins en ressources nécessaires à la production d’une unité de produit de la famille. Le temps de production d’un article comprend les temps de production de tous ces composants. De plus afin de réduire le nombre de données à traiter, les ressources sont elles aussi regroupées par centre de charge. Famille A B C Usinage 216,77 68,40 40,96 Assemblage 197,28 53,28 38,56 Peinture 180,00 44,40 38,56 Emballage 80.64 23,52 17,28 Tab. 4.1 – Exemple de profils de ressources pour 3 familles d’articles Dans cet exemple, l’usinage d’une unité de A demande 261,77 heures. Une fois que le profil de ressource a été établi pour chaque famille d’articles, il ne reste plus qu’à multiplier, pour chaque période du PDP, les temps obtenus grâce au profil par les quantités de production prévisionnelles. On obtient ainsi les capacités de production requises par le PDP à long terme. Généralement, on compare ces résultats avec les capacités disponibles afin de détecter les ajustements à réaliser. Ces ajustements peuvent nécessiter des investissements lourds dans de nouvelles unités de production qu’il faut prendre en compte le plus tôt possible. 18 4.2. VALIDATION DU PLAN DIRECTEUR DE PRODUCTION 4.2 Validation du plan directeur de production Alors que la méthode précédente permet d’établir les besoins en ressources nécessaires à la réalisation d’un plan de production, celle-ci va permettre de valider l’adéquation entre capacité disponible et charge du PDP, avant de lancer l’exécution du MRP. La principale différence entre ces deux méthodes se situe au niveau de détails pris en compte. En effet, cette méthode n’utilisant pas de planification hiérarchisée, elle calcule la charge engendrée par tous les produits. Actuellement, il existe trois techniques de validation de PDP que l’on regroupe sous le terme RCCP (Rough Cut Capacity Planning). Ces techniques diffèrent en fonction des données requises et de leur compléxité. 4.2.1 Approche par facteurs globaux Cette technique, également appelée CPOF (Capacity Planning Using Overall Factors), est la plus ancienne. Elle s’appuie sur les informations suivantes pour établir un planning prévisionnel des charges : – un plan directeur de production – le temps total nécessaire à la production de chaque partie d’un produit – la proportion de temps utilisé par chaque centre de charge de l’atelier Pour présenter cette approche, nous allons nous baser sur un exemple. Imaginons un plan de production qui prévoit la production de 15000 lustres (cf. Figure 3.1) par mois et dont la durée de production moyenne d’un lustre est de 0,22 heure. La première étape consiste à calculer le nombre d’heures d’atelier requises par mois en multipliant les quantités du PDP par le temps moyen de production d’un produit. On obtient ainsi la dernière ligne du tableau ci-dessous. Ensuite, il suffit de diviser ce temps par la proportion historique de temps utilisé par chaque centre de charge pour obtenir sa charge prévisionnelle. La validation du PDP consiste alors à vérifier pour chaque période et chaque centre de charge que les capacités disponibles sont suffisantes. Centre de charge Moulage Usinage Assemblage Peinture Capacité requise Proportion historique 0,3 0,4 0,1 0,2 Jan 990 1320 330 660 3300 Fev 990 1320 330 660 3300 ... ... ... ... ... ... Déc 990 1320 330 660 3300 Tab. 4.2 – Planification des capacités par l’approche des facteurs globaux Cette méthode est particulièrement bien adaptée aux ateliers fabriquant des produits d’une même famille car dans ce cas il est facile d’obtenir les proportions de temps de chaque centre de charge par rapport à l’atelier. 19 4.2. VALIDATION DU PLAN DIRECTEUR DE PRODUCTION 4.2.2 Approche par feuille de capacité Cette approche correspond à l’approche par profil de ressource présentée dans la partie précédente. La seule différence est, qu’à ce niveau, on ne traite plus les produits par famille et par type mais par référence. Par ailleurs, son rôle est axé sur la validation du PDP et non pas sur les investissements à réaliser. 4.2.3 Approche par profil de ressource Bien que le nom de cette approche ressemble à celle de la partie précédente, la méthode utilisée dans celle-ci est beaucoup plus précise et détaillée. Elle se base sur un plan de production et sur des profils de ressource établis pour chaque produit. Ces profils prennent en compte les durées opératoires de passage sur chaque ressource. Un profil se présente sous la forme d’un tableau à 2 dimensions où les colonnes représentent les périodes de production à partir de la date de mise à disposition de l’article, et les lignes les ressources nécessaires (cf. Tableau 4.3 et Tableau 4.4). L’intersection d’une ligne et d’une colonne indique le temps de la ressource nécessaire à la fabrication d’une unité de produits si elle doit être disponible à la date t. R1 R2 t-2 a112 a122 t-1 a111 a121 t a110 a120 Tab. 4.3 – Profil de ressource du produit P1 sur les ressources R1 et R2 R1 R2 t-2 a212 a222 t-1 a211 a221 t a210 a220 Tab. 4.4 – Profil de ressource du produit P2 sur les ressources R1 et R2 Produit / Période P1 P2 1 b11 b21 2 b12 b22 3 b13 b23 Tab. 4.5 – Plan de production des produits P1 et P2 sur 3 mois Dans cet exemple, les produits P1 et P2 ont des durées de fabrication moyennes qui s’étalent sur trois périodes. 20 4.2. VALIDATION DU PLAN DIRECTEUR DE PRODUCTION À partir du plan de production et des deux profils de ressource précédents, il est alors possible d’établir la charge prévisionnelle de chaque ressource. Resource / Période R1 R2 1 c11 c21 2 c12 c22 3 c13 c23 Tab. 4.6 – Charge prévisionnelle des ressources R1 et R2 sur 3 mois c11 = a110 b11 + a111 b12 + a112 b13 + a210 b21 + a211 b22 + a212 b23 c21 = a120 b11 + a121 b12 + a122 b13 + a220 b21 + a221 b22 + a222 b23 c12 = a110 b12 + a111 b13 + a210 b22 + a211 b23 c22 = a120 b12 + a121 b13 + a220 b22 + a221 b23 c13 = a110 b13 + a210 b23 c23 = a120 b13 + a220 b23 Le principal intérêt de cette méthode est la prise en compte des durées de production. La méthode est ainsi plus précise, au prix d’un temps de calcul plus important. 21 4.3. PLANIFICATION DES BESOINS EN CAPACITÉ DE PRODUCTION 4.3 Planification des besoins en capacité de production La planification des besoins en capacité de production, aussi apppelée CRP (Capacity Requirement Planning) est apparue dans les années 70 avec les systèmes MRP1 . Son rôle est de déterminer les capacités nécessaires pour exécuter une opération de production. En effet, à partir des ordres de fabrication fermes et planifiés, le CRP est capable de calculer la charge occasionnée par ces ordres sur les ressources d’un atelier en simulant leur exécution. On obtient ainsi pour chaque période de temps de l’horizon de planification, la charge et la capacité de chaque ressource. Généralement, le CRP est utilisé conjointement avec le MRP car il permet de vérifier que tous les ordres de fabrication prévus pourront réellement être traités par la production sans occasionner de dépassement de capacité. Ainsi, il est souvent le dernier test avant de valider un plan de production. Fig. 4.2 – Boucle de contrôle PDP-MRP-CRP Par rapport aux méthodes décrites précédemment, les résultats du CRP sont beaucoup plus détaillés puisque cette méthode n’effectue aucun regroupement de ressources. 4.3.1 Calcul de la charge Le CRP utilise les ordres de fabrication générés par le MRP et les décompose en fonction des centres de charge qu’ils doivent traverser. Pour chacun des sous-ordres obtenus, il calcule la charge engendrée sur le poste de travail et l’ajoute à la charge accumulée depuis le début de la période. Il fait de même avec les OF fermes et/ou planifiés manuellement afin d’obtenir des informations de charge les plus justes possibles. La décomposition d’un ordre de fabrication sur les postes de travail s’obtient à partir de la gamme du produit à fabriquer. C’est pourquoi, l’existance d’un fichier des gammes est devenue obligatoire à partir des systèmes MRP1. 22 4.3. PLANIFICATION DES BESOINS EN CAPACITÉ DE PRODUCTION 4.3.2 Résultats du CRP Le CRP produit des diagrammes de charge par poste de travail. Ces diagrammes présentent pour chaque période la capacité disponible en nombre d’heures et la charge engendrée par la planificiation. Ces diagrammes permettent d’identifier les surcharges lorsque la charge engendrée dépasse la capacité disponible et les sous-utilisations dans le cas inverse. Fig. 4.3 – Exemple de diagramme de charge généré par le CRP Dans les CRP récents, il est même possible de distinguer la charge ferme et la charge planifiée. 23 Chapitre 5 Techniques de lissage de charge Jusqu’à présent, les techniques de planification des capacités de production étudiées ne servaient qu’à vérifier l’adéquation entre les charges prévisionnelles et les capacités disponibles des ressources. En cas de surcharge, il fallait reprendre le plan directeur de production et l’adapter jusqu’à ce que les problèmes disparaissent. Cependant, une surchage n’est pas toujours synonyme de remise à plat du PDP, il existe des méthodes permettant de faire disparaı̂tre des surcharges temporaires. Généralement, on ne retrouve ces méthodes que dans les systèmes MRP-II sous l’appelation ajustement charge-capacité. Les techniques de lissage de charge se classent en deux catégories en fonction l’objet sur lequel elles agissent. Ainsi, le lissage en parallèle s’applique sur les ressources alors que le lissage en série porte sur les opérations qui utilisent les ressources surchargées. 5.1 Lissage en parallèle Le lissage en parallèle est la solution la plus rapide à mettre en oeuvre face à un dépassement de capacité temporaire car elle consiste à augmenter la capacité des ressources surchargées au prix d’un coût de production plus élevé. – Lissage par ajustement des capacités : Le lissage par ajustement de capacité consiste à augmenter directement la capacité des ressources surchargées en augmentant leur disponibilité dans la mesure du possible. Dans ce cas, le responsable de la production peut soit augmenter le temps de travail en mettant en place des heures supplémentaires soit augmenter les cadences avec les risques que ça entraı̂nent. – Lissage par transfert de capacité : Aussi appelé lissage en parallèle, il consiste à faire appel à de la sous-traitance pour faire diminuer les charges de production ou à transférer la ou les opérations qui surchargent un poste sur des postes équivalents. 24 5.2. LISSAGE EN SÉRIE 5.2 Lissage en série Si tous les postes d’une même famille de postes interchangeables sont surchargés sur une période donnée, cela signifie que seul le lissage «en série» (décalage dans le temps de l’opération) pourra annuler la surcharge. Il existe alors deux possibilités : le décalage à droite et le décalage à gauche. Le décalage à droite ne peut être envisagé que de manière exceptionnelle, en jouant sur le stock de sécurité ([LD98]). La complexité du problème tient au fait que toute modification sur un composant nécessite le recalcul sur les composants enfants. Il faut donc rappeler le MRP sur le produit concerné et tous ses composants après tout décalage à gauche. De plus, le report de production implique la constitution de stock qui a un coût. Lorsqu’une ressource est surchargée par plusieurs opérations planifiées et que seul le lissage en série peut être appliqué, il faut choisir l’opération à décaler. Dans ce cas, [VG88] préconise l’existance d’un fichier définissant des règles de priorité pour déterminer l’opération à décaler. Ces règles sont généralement calculées sur la base de critères empiriques tels que celui de la minimisation de la valeur des en-cours constitués lors de décalage. Généralement, on choisit l’opération dont le coût de déplacement est le plus faible. 5.3 Limitations Dans le cas du lissage en série, le lissage s’effectue toujours de la période de temps la plus éloignée vers la plus proche. Cette démarche se justifie par le lissage de la charge par un transfert des dépassements sur les périodes antérieures. Si après lissage, la solution du MRP n’est toujours pas réalisable, le plan directeur de production doit être révisé. Cette remise en cause se traduit par un retard de livraison de certains articles par rapport à ce qui était initialement prévu. Il faut alors mettre en place des procédures de traçage (pegging) pour déterminer les commandes à l’origine des surcharges. 25 Chapitre 6 Conclusion de l’état de l’art Cet état de l’art nous a permis de comprendre le fonctionnement d’un MRP et de soulever son principal défaut, à savoir la non prise en compte des capacités de production lors de l’élaboration de la planification. Néanmoins, il existe un certain nombre de méthodes permettant de planifier les besoins en capacités de production à différents moments dans le système de gestion de production. Toutefois, peu de solutions existent au niveau du MRP car la masse de données est généralement trop importante pour être traitée à ce niveau. C’est pourquoi, la plupart des méthodes agissent sur les données pré-MRP telles que le plan directeur de production pour vérifier l’adéquation entre PDP et capacité de production. Ainsi, la méthode RRP permet d’anticiper les besoins en ressources, et les RCCP permettent de valider le plan directeur. Cependant, ces méthodes ne peuvent assurer à 100% qu’il n’y aura pas de dépassements de capacité. Il existe donc des techniques de lissage de charge qui peuvent être appliquées sur les résultats du MRP pour tenter de faire disparaı̂tre les problèmes de dépassements de capacité temporaires. Ce type de procédé n’est apparu qu’avec les MRP de type 2. De nombreux progiciels du marché se réclamant être de type MRP2, ne sont en fait que des MRP1 auxquels on a ajouté un CRP. Cet élément est obligatoire pour détecter les surcharges engendrées par la planification du MRP. C’est alors au décideur de mettre en place les actions nécessaires pour résoudre les problèmes de charge. 26 Troisième partie Analyse de l’existant 27 Chapitre 7 Étude du MRP existant Le MRP existant dans Ofbiz a été développé par Thierry Grauss en 2004 dans le cadre de son projet de fin d’étude [TG04]. Le but de ce projet était de mettre au point l’algorithme utilisé par le MRP pour calculer les besoins en composants à partir de commandes de vente d’articles. Cependant, il a été réalisé avant la naissance de projet Néogia, il n’est donc pas intégré à OfbizNéogia. De plus, les structures de données ont fortement changé, il sera donc nécessaire de le porter sur la nouvelle architecture. Une telle opération requiert un bon niveau de connaissance des deux projets d’où l’objet de cette partie. 7.1 Données manipulées par le MRP Ofbiz n’intègre pas de plan directeur de production. Pour pallier ce manque, le MRP de Thierry utilise les enregistrements de la table des commandes de vente comme données d’entrées du MRP. Ces enregistrements sont ensuite utilisés pour initialiser la table de travail du MRP, à savoir la table mouvements de stock planifiés. Cette table permet de suivre l’évolution des besoins et des arrivées de stock suite à la simulation de lancement d’ordres de fabrication (OF) ou d’ordres d’achat (OA) par le MRP. Ces simulations sont conservées dans la table des propositions. Fig. 7.1 – Données d’entrée/sortie du MRP existant 28 7.2. FONCTIONNALITÉS 7.2 Fonctionnalités En terme de fonctionnalités, le MRP existant se situe entre le MRP0 et le MRP1 car bien qu’il ne prenne pas en compte les capacités de production, il utilise la disponibilité des ressources pour déterminer les délais de d’obtention des composants. Le MRP réalisé est du type multi-articles multi-niveaux, c’est-à-dire qu’il traite tous les articles de la table des mouvements planifiés de stocks par niveau de nomenclature, en commençant par le niveau 0. Pour chaque niveau, il applique alors l’algorithme de calcul des besoins présenté dans l’état de l’art sur chaque article, et passe au niveau suivant. Cet algorithme émet des propositions d’ordre de fabrication ou d’achat lorsque le niveau de stock d’un article passe en-dessous de son seuil de sécurité. Par rapport aux MRP du marché à niveau de fonctionnalités équivalent, il lui manque tout de même une fonction : une notion d’horizon de planification afin de limiter la planification des besoins en composants à une période de temps de durée raisonnable. Ce point devra être pris en considération lors du portage du MRP sur la nouvelle architecture d’OfbizNeogia. 7.3 Particularités Contrairement à ce qu’on trouve dans la littérature ([GP75], [VG88], [LD98]), ce MRP ne fonctionne pas sur une base périodique mais en temps continu : il prend les mouvements de stock planifiés les uns à la suite des autres sans les regrouper par période. Cette absence de découpage temporel de l’horizon de planification s’explique par deux raisons. D’une part, ni Ofbiz ni OfbizNéogia n’implémentent la gestion d’un plan directeur de production, qui lui est périodique. D’autre part, il est difficile de trouver une taille de période homogène avec les durées de fabrication des différents produits. Une des conditions nécessaires à la réalisation d’un MRP est de disposer d’un fichier de la durée de fabrication moyenne de chaque article ([VG88]). Or dans le MRP existant, cette durée est calculée à partir de la date de fabrication, de la gamme opératoire et de la disponibilité des ressources. Cette approche est plus coûteuse en temps de calcul car il faut recalculer la durée de fabrication à chaque fois. En revanche, elle est beaucoup plus précise puisqu’elle prend en compte les périodes de disponibilité des ressources ce qui permet d’utiliser le MRP pour de la planification à court terme. 29 Chapitre 8 Module de gestion de production Le module de gestion de production a été le premier module développé par Néréide pour Ofbiz. Ce module a été ensuite porté sur l’architecture Néogia par Thierry Grauss durant le stage qui a suivi son PFE. Il comporte actuellement quatres sous-modules : – gestion des données techniques ; – gestion d’atelier ; – gestion de projet ; – gestion des coûts de production ; Dans ce chapitre, seuls les deux premiers sous-modules seront détaillés car leurs entités et leurs fonctionnalités seront utilisées par le MRP et le CRP. 8.1 Gestion des données techniques Le module de gestion des données techniques est utilisé principalement par le bureau des méthodes pour définir tous les processus de fabrication (outils, phases d’exécution, gammes, etc) intervenant dans la production d’un article. Ces données sont ensuite utilisées par le module de gestion d’atelier pour planifier des ordres de fabrication. 8.1.1 Les ressources Les ressources d’un atelier sont représentées par l’entité TechDataResource. Une ressource peut être soit une machine soit une compétence, par exemple : un tour, un régleur. Il est possible de regrouper plusieurs ressources physiques sous une seule TechDataResource si ces ressources sont identiques et qu’elles peuvent être interchangées à tout moment. Dans ce cas, l’attribut resourceQuantity indique le nombre de ressources de ce type. 8.1.2 Le calendrier industriel L’entité TechDataCalendar représente un calendrier industriel. Un calendrier industriel définit les périodes de disponibilités et/ou d’indisponibilités d’une ressource. Il est utilisé notamment pour définir les périodes de maintenance et les périodes de fermeture de l’atelier. Les ressources 30 8.1. GESTION DES DONNÉES TECHNIQUES Fig. 8.1 – Modélisation d’une ressource d’atelier d’un atelier ne partagent pas forcément toute le même calendrier industriel. La mise en oeuvre d’un calendrier industriel se fait de la manière suivante : L’utilisateur définit une période hebdomadaire typique (CalendarWeek) pour laquelle il indique pour chaque jours l’heure de début de disponibilité ainsi que la durée. Ensuite, il introduit des exceptions (CalendarException) dans le calendrier. Une exception est définit par une date, une nouvelle heure de début de disponibilité et une nouvelle durée. Fig. 8.2 – Modélisation UML du calendrier industriel L’implémentation existante du calendrier industriel ne propose qu’une seule méthode add qui calcule la date de fin d’utilisation d’une ressource à partir de sa durée et de sa date de début, et inversement. Le CRP nécessitera des méthodes plus complexes pour pouvoir étudier les disponibilités des ressources sur un horizon de planification. 8.1.3 Les gammes opératoires Une gamme opératoire définit l’ensemble des opérations nécessaires à la réalisation ou l’assemblage d’un produit. Elle est représentée dans OfbizNéogia par l’entité Routing. Une gamme est toujours associée à un unique produit par contre un produit peut avoir plusieurs gammes, exemple : une gamme standard et une gamme faisant intervenir de la sous-traitance. L’attribut 31 8.1. GESTION DES DONNÉES TECHNIQUES scrapFactor définit le taux de rebus généralement constaté lors de l’exécution de la gamme, c’està-dire le nombre de pièces non conformes par rapport au nombre de pièces produites. Enfin, la gamme définit l’ordre de ses opérations via l’attribut SequenceNum de la classe d’association RoutingComposition. Fig. 8.3 – Modélisation UML des gammes et des opérations 8.1.4 Les opérations Les opérations d’une gamme sont modélisées par l’entité Task. Une opération est définie par sa durée opératoire (estimatedLeadTime), son temps de préparation (estimatedSetupTime), et par les ressources nécessaires à sa réalisation (TaskResource). Parmi ces ressources, il y en a obligatoirement une dont l’attribut valueForPlanification est défini à vrai. Cette ressource est alors utilisée en priorité pour effectuer la planification de l’exécution de l’opération. 8.1.5 Les nomenclatures Les nomenclatures ne sont pas modélisées dans le module de gestion des données techniques d’OfbizNéogia car Ofbiz possédait déjà un support complet des nomenclatures dans le module Product. Avec notamment, la possibilité de gérer des variantes d’un même produit via un objet appelé Configurator dans le cas de produits avec options. Ofbiz modélise les arcs d’une nomenclature comme une association entre deux produits composé-composant (entité ProductAssoc). Chaque arc porte le nombre de composants (quantity), la tâche de la gamme qui requiert le(s) composant(s) (routingWorkEffortId) et une période de validité. 32 8.2. GESTION D’ATELIER 8.2 Gestion d’atelier Le module de gestion d’atelier se charge de la programmation des ordres de fabrication et de leur suivi. En relation avec le module de gestion des stocks, il s’occupe aussi de la réservation des composants et des demandes de sorties de stocks. 8.2.1 Les ordres de fabrication Un ordre de fabrication, représenté par l’entité WRun, est une programmation de l’exécution d’une gamme. Un OF est défini par l’article à produire et sa quantité, par son statut (Planifié, Ferme, EnCours, ...), par ses dates de réalisations et durées estimées / réelles, ses besoins en composants et enfin par les opérations qui le composent (TaskFulfilment). Ces opérations correspondent aux opérations déclarées au niveau de la gamme. L’entité TaskFulfilment représente la programmation d’une opération. Comme pour un ordre de fabrication, on retrouve des informations sur les dates de début et de fin estimées/actuelles, et un statut qui indique l’état de réalisation de l’opération. Un TaskResourceFulfil représente l’utilisation réelle et/ou planifiée d’une resource pour la réalisation d’une opération. Un RunComponent représente un besoin d’un composant particulier. Il doit toujours être disponible au début de l’opération à laquelle il est lié (TaskFulfilement). Fig. 8.4 – Modélisation UML des ordres de fabrication 33 8.2. GESTION D’ATELIER 8.2.2 Programmation de la production La création d’un OF entraı̂ne la programmation de toutes les opérations qui le composent, la déclaration des mouvements de stocks associés aux sorties de stocks des composants et à la production du produit associé à l’OF. Ces mouvements de stocks deviendront fermes une fois l’OF validés. Dans sa version initiale, la planification d’un OF se fait au plus tôt à partir de sa date de début estimée (forward scheduling). Ce comportement est incompatible avec le fonctionnement du MRP qui effectue sa planification à partir des dates de fin. Il faudra donc prendre en compte ce point lors de l’élaboration du MRP et de ses algorithmes de planification. Enfin, il n’est pas possible d’effectuer une replanification partielle ou totale d’un OF. 34 Quatrième partie Développements réalisés 35 Chapitre 9 Solution mise en oeuvre L’objet de cette partie est de présenter la solution mise en oeuvre pour réaliser un MRP à capacité finie, intégré au module de gestion de production de l’ERP libre OfbizNéogia. Cette solution se base sur les observations réalisées dans l’état de l’art sur la gestion des capacités de production, et sur l’étude des fonctionnalités existantes du module de gestion de production. En outre, la mise en oeuvre d’un tel système étant complexe, une approche descendante a été privilégiée pour réaliser l’analyse du système. Ainsi, nous verrons dans un premier temps en quoi consiste un MRP à capacité finie et un algorithme de lissage de charge. Ces premiers éléments permettront ensuite d’élaborer les spécifications fonctionnelles du système et les différents modules à développer. 9.1 9.1.1 Présentation de la solution Principe Après avoir étudié les différentes méthodes concernant la planification des capacité de production et le lissage des charges, il apparaı̂t qu’un MRP à capacité finie est simplement un MRP traditionnel auquel on associe un CRP et un algorithme de lissage de charge. Dans cette approche, le MRP génère des propositions de fabrication que le CRP évalue pour déterminer les ressources qui sont surchargées et celles qui ne le sont pas. On fait ensuite appel à un algorithme de lissage pour essayer d’étaler les dépassements de charge. Si après lissage, les problèmes de surcharge perdurent, cela signifie que soit les capacités de production sont insuffisantes, soit le plan directeur de production est exagéré. Voici quelques éléments à prendre en compte pour l’élaboration du MRP à capacité finie : – Découpage temporel : contrairement au MRP existant dans Ofbiz, l’analyse de la charge des ressources doit s’effectuer par période car la masse de données à ce niveau est trop importante pour pouvoir traiter ce problème en temps continu. Donc le CRP et l’algorithme de lissage doivent travailler sur une base de temps périodique. – Lissage à postériori : le lissage de la charge engendrée ne peut s’effectuer qu’après une première itération du MRP à capacité infinie. En effet, le lissage n’est efficace que s’il est réalisé sur une solution compléte (prenant en compte toutes les charges). – Méthode itérative arrière : l’algorithme de lissage peut être amené à avancer une opération pour étaler la charge. Cette action peut modifier les besoins en composant et donc générer 36 9.1. PRÉSENTATION DE LA SOLUTION de nouveaux ordres de fabrication qui perturberont les charges sur les périodes précédentes. C’est pourquoi le lissage doit toujours s’effectuer de la période la plus éloignée vers la plus proche. 9.1.2 Place du décideur Dans un système MRP sans mécanisme de lissage, on remet en cause le plan directeur de production lorsque les propositions du MRP ne sont pas réalisables. En effet, le PDP est supposé avoir été établi en prenant en compte les capacités de production. Dans ce cas, le décideur doit intervenir pour déterminer les causes de la surcharge, ajuster le PDP en conséquence et relancer la planification (cf. Figure 9.1). Fig. 9.1 – Processus de décision dans un MRP sans lissage Cependant, il peut aussi décider d’introduire manuellement des ajustements et/ou des transferts de capacité pour faire disparaı̂tre les surcharges. Seulement, ce type d’opération n’est pas aisé à réaliser à cause notamment de la masse de données. C’est donc à ce moment que l’algorithme de lissage va intervenir pour automatiser certains ajustements. Pour cela, on introduit un nouveau scénario qui intégre une phase de lissage des charges. Il sera utilisé en premier lieu pour essayer de résoudre les problèmes de dépassement de capacité. En cas d’échec, il sera possible de revenir au scénario précédent. Fig. 9.2 – Processus de décision dans un MRP avec lissage Les techniques de lissage de charge présentées dans l’état de l’art reposent principalement sur l’augmentation des capacités de production avec la mise en place d’heures supplémentaires, sur le transfert de capacité avec de la sous-traitance, et sur l’avancement de certaines opérations. Les deux premiers points pouvant avoir des conséquences qui dépassent strictement le cadre 37 9.2. ALGORITHME DE LISSAGE EN SÉRIE SIMPLIFIÉ économique, nous laisserons au décideur le choix d’avoir recours à ces méthodes. En revanche, l’avancement des opérations qui provoquent les surchages peut facilement être automatisé par un algorithme de lissage en série. Le seul risque économique concerne l’augmentation du coût des stocks en raison de la hausse des en-cours. Ainsi dans ce nouveau scénario, lorsque les propositions du MRP ne sont pas réalisables, on fait appel au décideur qui peut au choix augmenter les capacités des ressources surchargées, transférer certaines charges vers de la sous-traitance ou bien ne rien faire. On fait appel ensuite à l’algorithme de lissage pour tenter de résoudre les problèmes de dépassements de capacité restants et pour mettre à jour la planification. 9.2 Algorithme de lissage en série simplifié L’algorithme de lissage présenté ci-dessous a été élaboré à partir d’une description du principe d’ajustement charge-capacité décrit par Vincent Giard ([VG88]). Il consiste à étudier toutes les périodes de l’horizon de planification en partant de la dernière période et à reporter les dépassements de capacité sur les périodes précédentes. Si un dépassement de capacité est causé par plusieurs opérations, le choix de l’opération à avancer s’effectue à l’aide d’une fonction de décision paramétrable par l’utilisateur. Idéalement, cette fonction devrait choisir l’opération qui minimise le coût du décalage. Le décalage d’une opération consiste à replanifier partiellement l’OF à partir de l’opération concernée en prenant en compte cette fois les contraintes de capacité existantes. Toutefois, la replanification peut échouer si aucune programmation respectant les capacités n’est trouvée. Dans ce cas, l’opération tombe dans la période de rejet (période 0) qui indique que la solution après lissage n’est toujours pas réalisable. Après la replanification d’une opération, il est nécessaire de relancer le MRP uniquement sur l’article traité par l’OF et ses composants pour mettre à jour les besoins en composants. Cette mise à jour peut générer de nouveaux ordres de fabrication et donc entraı̂ner de nouveaux dépassements de capacité. 38 9.3. ANALYSE DES BESOINS FONCTIONNELS 9.3 Analyse des besoins fonctionnels L’élaboration de l’algorithme de lissage était une étape obligatoire pour établir les besoins fonctionnels car il détermine les fonctionnalités que le MRP et le CRP doivent implémenter. Ainsi, il doit être capable de récupérer des informations sur les ressources surchargées, de faire appel à des méthodes de replanification prenant en compte les contraintes de capacité et de relancer le MRP sur un article donné. À partir de ces quelques besoins de haut niveau, une analyse descendante a permis d’obtenir la décomposition fonctionnelle résumée par le diagramme ci-dessous (Figure 9.3). Ce diagramme montre bien que l’algorithme de lissage repose entièrement sur les fonctionnalités du MRP et du CRP, et que tous les développements vont porter sur ces deux modules. Fig. 9.3 – Décomposition fonctionnelle du MRP à capacité finie 9.3.1 MRP Le MRP existant dans Ofbiz, représenté par le bloc fonctionnel MRP multi-niveau, ne peut être repris tel quel dans OfbizNeogia. D’une part, les entrées/sorties du MRP doivent maintenant utilisées les modules de gestion des stocks et de gestion de production d’OfbizNeogia. D’autre part, l’intégration dans ces modules sera simplifiée si le MRP utilise les technologies de Néogia, à savoir la modélisation en UML et la génération de code. Par ailleurs, l’algorithme de lissage nécessite une version modifiée du MRP pour effectuer la mise à jour des besoins en composant d’un unique article. C’est donc l’occasion de repenser le MRP pour que les deux versions différentes partagent un maximum de code, et pour faciliter l’ajout de nouveaux types de MRP tel que les MRP différentiels1 . Dans le diagramme, le code commun aux deux versions du MRP apparaı̂t dans le bloc fonctionnel MRP mono-article mono-niveau. Comme son nom l’indique, il ne calcule des propositions de réapprovisionnement uniquement pour un article donné sans descendre dans les niveaux de nomenclature. On peut ensuite implémenter les deux autres MRP à partir de celui-ci. 1 MRP qui prend en compte ses propositions précédentes pour effectuer une replanification partielle. 39 9.3. ANALYSE DES BESOINS FONCTIONNELS 9.3.2 CRP Le rôle du CRP est de détecter les dépassements de capacité de chacune des ressources de l’atelier. Pour atteindre cet objectif, le CRP doit conserver pour chacune des ressources, un planning d’utilisation mis à jour à chaque fois qu’un ordre de fabrication est programmé. Ce planning, initialisé à partir du calendrier industriel, doit permettre d’obtenir rapidement (c-à-d sans calcul) la capacité et la charge ferme et/ou planifiée d’une ressource pour une période de temps donnée. L’exactitude du CRP repose essentiellement sur la cohérence du planning de chaque ressource. Pour obtenir une planification fiable et cohérente, il centralise donc toutes les méthodes de planification. Par conséquent, il faudra modifier les méthodes du module de gestion d’atelier pour qu’elles utilisent celles du CRP. Enfin, il doit fournir des éléments d’interface graphique pour permettre au décideur de visualiser les ressources surchargées ainsi que leur diagramme de charge pour déterminer quelles sont les opérations qui provoquent les dépassement de capacités. Fig. 9.4 – Exemples d’interfaces graphiques possibles pour le CRP 40 Chapitre 10 Développement du MRP Le MRP existant ne peut être repris tel quel dans OfbizNéogia car d’une part il n’utilise pas les nouvelles structures de données introduites par Néogia, et d’autre part il ne dispose pas des fonctionnalités nécessaires au CRP. En particulier, après avoir replanifier un ordre de fabrication, il faut être capable de refaire tourner le MRP sur l’article concerné par l’OF pour mettre à jour le planning de réapprovisionnement des tous ses composants. De plus, Néréide souhaite finaliser le MRP pour le proposer à ses clients. Il doit donc être parfaitement intégré à OfbizNéogia tant fonctionnellement que graphiquement. Le développement du MRP a consisté dans un premier temps à identifier les données en entrée et en sortie du MRP à partir de l’implémentation existante, et à leur trouver un équivalent dans OfbizNeogia. Ensuite, l’algorithme général du MRP a été rendu plus modulaire pour pouvoir être réutilisé dans des variantes du MRP. Enfin, la dernière étape a été d’intégrer le MRP dans OfbizNéogia sous forme de services et d’interfaces graphiques 10.1 Modélisation du MRP 10.1.1 Les entrées Dans toute la littérature à propos des MRP, on indique que les données d’entrée d’un MRP proviennent du plan directeur de production qui contient pour chaque article ses prévisions de production pour l’horizon de planification. Or dans OfbizNéogia, ce plan directeur de production n’est pas encore implémenté, on doit donc utiliser une autre source de données : les mouvements planifiés de stock du module de gestion des stocks d’OfbizNéogia, Facility. Un mouvement planifié de stock, représenté par l’entité StockEventPlanned, est défini par un article sur lequel porte le mouvement, une quantité qui indique le sens du mouvement (positive indiquant une entrée de stock, négative une sortie) et une date de réalisation. Le mouvement deviendra effectif s’il est transformé en mouvement réalisé avant cette date. Cette distinction entre mouvements planifiés et réalisés permet d’introduire les notions d’ATP (Available To Promise) et de QOH (Quantity On Hand). L’ATP permet de calculer une estimation du niveau de stock d’un article pour une date donnée à partir du stock réel (QOH) et des mouvements planifiés. Mais l’avantage avec Néogia et ses outils de développement est qu’il est possible de modéliser 41 10.1. MODÉLISATION DU MRP des spécialisations. Ainsi dans le cas des mouvements planifiés de stock, on peut distinguer les mouvements causés par la mise en production d’un article (RunStockEventPlanned et RunCompoStkEvPlan) de ceux provoqués par une commande clients (OrderStockEventPlanned). La quantité d’un RunStockEventPlanned est toujours positive car il correspond à la production d’un ou plusieurs articles résultant d’un OF. Alors que celle d’un RunCompoStkEvPlan est toujours négative car il correspond à un besoin en composants. Enfin, dans le cas d’un OrderStockEventPlanned, le signe de la quantité dépend du type d’ordre : positif pour un ordre d’achat et négatif pour un ordre de vente. Fig. 10.1 – Données d’entrée du MRP 42 10.1. MODÉLISATION DU MRP 10.1.2 Les sorties Lorsque le niveau de stock d’un article, traité par le MRP, passe en-dessous de son seuil de sécurité, le MRP va créer un besoin caractérisé par une quantité requise et une date à laquelle le besoin doit être rempli. Ce besoin se traduit par une proposition (ProposedOrder) qui peut prendre soit la forme d’un ordre d’achat (OrderItem), pour les matières premières ou les produits sous-traités, soit la forme d’un ordre de fabrication (WRun) pour les produits manufacturés. Fig. 10.2 – Données de sortie du MRP Dans le cas d’une proposition d’ordre d’achat, la création de la proposition entraı̂ne la création d’une commande d’achat (OrderHeader) avec pour unique produit commandé (OrderItem), l’article de la proposition. Enfin, La commande est créée avec comme date de livraison la date du besoin. À terme, la création de commandes d’achat pourrait être confiée à un module achat qui effectuerait des regroupements pour les commandes ayant le même fournisseur et/ou les mêmes délais de livraison par exemple. Dans le cas d’une proposition d’ordre de fabrication, un nouvel OF est créé avec pour date de fin, la date du besoin, pour quantité, la quantité requise et pour la gamme, elle est choisit automatiquement à partir des données techniques. Cette quantité peut être modifiée en fonction de la taille des lots et du taux de rebus indiqués par la gamme utilisée par l’OF. Ensuite, ce dernier est jalonné à partir de sa date de fin en utilisant une méthode de planification arrière. La création d’un ordre d’achat ou de fabrication entraı̂ne la déclaration des mouvements de stocks planifiés engendrés par l’exécution potentielle de ces ordres. Bien que ces derniers ne soient pas validés par le décideur, il est nécessaire de générer les mouvements de stocks pour que le MRP les prenne en compte lors de sa prochaine exécution ou lors du traitement du niveau de nomenclature suivant. 43 10.1. MODÉLISATION DU MRP 10.1.3 Structures de contrôle du MRP Jusqu’à présent les diagrammes UML présentés ne montraient que les données manipulées par le MRP mais pas son implémentation ni son interface de contrôle. Fig. 10.3 – Structures de contrôle du MRP L’élément principal du MRP est l’entité MrpRun qui représente les paramètres d’exécution du MRP ainsi que les propositions obtenues. Il définit notamment la configuration de l’horizon de planification avec les attributs planningStartDate et planningLength. Il a aussi pour rôle de filtrer les mouvements de stocks selon la configuration du MRP. Afin de pouvoir facilement étendre les fonctionnalités du MRP, le design pattern Stratégie ([DG02]) a été employé pour modéliser les algorithmes du MRP. Ainsi, tout nouvel algorithme doit implémenter l’interface Mrp qui définit les fonctionnalités minimales attendues et uniformise l’utilisation des ces algorithmes. Le MRP est un processus long et consommateur de ressources, qui peut durer plusieurs heures. Il faut donc éviter de bloquer le serveur d’application et tous ses utilisateurs quand le MRP s’exécute. Pour cela, l’algorithme du MRP est exécuté dans un thread différent de celui de l’interface. En contre partie, il est nécessaire de mettre en place un mécanisme de synchronisation pour contrôler l’exécution du MRP. C’est le rôle de la classe MrpController qui implémente le design pattern Singleton ([DG03a]) pour n’autoriser qu’une seule instance de cette classe. Outre son rôle de contrôle de l’exécution du MRP, cette classe assure aussi l’interface avec les utilisateurs du MRP. Ainsi, à travers les méthodes de la classe MrpController, l’utilisateur peut contrôler l’exécution du MRP, récupérer et modifier son état, et lire les messages d’erreur. Cette classe joue le rôle de façade ([DG03b]) qui cache la complexité du système sous-jacent. 44 10.1. MODÉLISATION DU MRP Fig. 10.4 – Diagramme d’état du MRP 45 10.2. ALGORITHMES MIS EN OEUVRE 10.2 Algorithmes mis en oeuvre 10.2.1 Algorithme du MRP mono-article mono-niveau Pour la mise en oeuvre du CRP et de la méthode de lissage envisagée, deux algorithmes légèrement différents du MRP vont être nécessaires. Les principales différences entre ces algorithmes se situent au niveau des paramètres d’entrée. En effet, dans une des versions du MRP, nous aurons besoin de traiter tous les articles du catalogue produit alors que dans l’autre seulement ces composants. Cependant le principe du MRP reste le même pour ces deux algorithmes, il donc possible de partager leur partie commune. Les procédures AvailableToPromise et MinimumStockLevel sont des fonctions du module de gestion des stocks. La première renvoie une estimation du niveau de stock d’un article donné pour une date donnée. Cette estimation est établie à partir du niveau de stock courant de l’article et des mouvements planifiés de stock prévus jusqu’à la date indiquée. La seconde récupère la taille du stock de sécurité de ce produit, c’est-à-dire le niveau en-dessous duquel le niveau de stock ne devrait pas passer. La procédure SelectStockEventPlanned récupère tous les mouvements de stock planifiés durant l’horizon de planification spécifié pour un article donné. Les mouvements sont renvoyés triés par date croissante, ainsi la cohérence du niveau de stock de l’article est préservée pendant les itérations de l’algorithme. 46 10.2. ALGORITHMES MIS EN OEUVRE 10.2.2 Algorithme du MRP mono-article multi-niveaux Cet algorithme implémente un MRP qui traite uniquement un article et tous ses composants. Il sera utilisé par l’algorithme de lissage de charge après avoir rejalonné un OF pour réajuster les besoins en composants et le niveau de stock de l’article produit par l’OF. Itération 1 2 3 4 5 6 7 ProductSet {Table} {Plateau, Pied, Vis} {Pied, Vis, Plaque} {Vis, Plaque, Tasseau} {Plaque, Tasseau} {Tasseau} {} Nomenclature utilisée pour l’exemple Exemple 10.2.1 – Évolution du ProductSet du MRP mono-article multi-niveaux 47 10.2. ALGORITHMES MIS EN OEUVRE 10.2.3 Algorithme du MRP multi-articles Cet algorithme correspond au MRP existant dans Ofbiz, c’est-à-dire qu’il génère des propositions d’ordre de fabrication ou d’achat pour maintenir les niveaux de stock à leur minimum pour tous les articles du catalogue produit sur l’horizon de planification spécifié. Il a été adapté pour utiliser l’algorithme du MRP mono-article mono-niveau afin de partager le maximum de code possible entre les différents algorithmes présentés. Au lieu de lancer le MRP sur tous les articles de l’entreprise, cet algorithme se limite aux articles dont il existe un mouvement de stock dans l’horizon de planification considéré. Cette petite optimisation évite ainsi d’interroger la base de données pour les articles dont on est sûr qu’ils ne vont pas être traités par le MRP. Cette limitation du nombre d’articles traités est réalisée par la procédure SelectProductForMrp. L’algorithme du MRP multi-articles doit se terminer lorsque tous les mouvements de stocks de l’horizon de planification ont été traités. Or il n’est pas possible d’obtenir cette information simplement à cause de la masse de données générées. Donc, pour déterminer la fin de l’algorithme, la donnée d’entrée MaxBomLevelWithNoEvent a été introduite. Elle indique au bout de combien de niveaux de nomenclature successifs sans mouvement de stock généré on peut considérer le MRP comme terminé. La procédure SelectProductForMrp présente un défaut qu’il faudra impérativement corriger avant d’utiliser le MRP dans un système en production : elle ne vérifie pas, si le réapprovisionnement de l’article doit se faire via un MRP ou via une méthode de gestion scientifique des stocks. Il existe bien un champ RequirementProductEnumId prévu à cet effet dans l’entité Product mais pour l’instant aucune valeur n’existe pour cette énumération. 48 10.3. INTÉGRATION DANS OFBIZNÉOGIA 10.3 Intégration dans OfbizNéogia L’intégration du MRP dans OfbizNeogia consiste : d’une part, à déclarer les services du MRP pour qu’ils puissent être appelés par tous les moyens mis à disposition par le ServiceEngine d’Ofbiz, et d’autre part à mettre au point les interfaces graphiques nécessaires pour que l’utilisateur puisse se servir du MRP 10.3.1 Services du MRP Pour que l’utilisateur puisse contrôler le MRP depuis une interface graphique, il faut rendre les fonctionnalités de classe MrpController disponibles sous la forme de services. Un service permet d’exécuter une procédure indépendamment de son langage de programmation, de sa localisation. Il est possible de passer et de récupérer des paramètres à un service, de ne le rendre exécutable que par un utilisateur authentifié, de l’exécuter dans une transaction de base de données, etc. <-- MrpController developed services --> <service name="initMrp" engine="java" invoke="initMrp" location="org.ofbiz.manufacturing.planning.developed.MrpController" auth="true"> <description>Start Manufacturing Requirements Planning computation</description> <attribute name="mrpRunIdName" type="String" mode="IN" optional="false"/> </service> <service name="resetMrp" engine="java" invoke="resetMrp" location="org.ofbiz.manufacturing.planning.developed.MrpController" auth="true"> <description>Reset the Manufacturing Requirements Planning process</description> </service> <service name="startMrp" engine="java" invoke="startMrp" location="org.ofbiz.manufacturing.planning.developed.MrpController" auth="true"> <description>Start Manufacturing Requirements Planning computation</description> </service> <service name="runMrp" engine="java" invoke="runMrp" use-transaction="false" location="org.ofbiz.manufacturing.planning.developed.MrpController" auth="true"> <description>Run Manufacturing Requirements Planning computation</description> </service> <service name="cancelMrp" engine="java" invoke="cancelMrp" location="org.ofbiz.manufacturing.planning.developed.MrpController" auth="true"> <description>Cancel Manufacturing Requirements Planning computation</description> </service> <!-- End of MrpController developed services --> Fig. 10.5 – Extrait du fichier servicedef.xml du module gestion de production On remarque que pour le service runMrp, qui correspond à l’exécution du MRP, l’utilisation des transactions est désactivée. En effet, l’utilisation d’une transaction assure l’isolation des 49 10.3. INTÉGRATION DANS OFBIZNÉOGIA requêtes vers la base de données, en contre-partie des mécanismes d’accès exclusif à certaines tables peuvent empêcher des utilisateurs d’accéder à ces tables. Or le MRP est un processus long et il faut éviter ce type de cas de figure. C’est pourquoi, les transactions sont désactivées au niveau du service et gérées manuellement au niveau du code du MRP. 10.3.2 Interfaces graphiques du MRP Le MRP propose trois types d’interfaces graphiques selon les fonctionnalités auxquelles l’utilisateur souhaite accèder. La première est une interface principale qui permet de configurer le MRP, de l’exécuter, puis de lister les ordres de fabrication ou d’achat proposés. Pour l’instant cette interface ne dispose pas d’un mécanisme permettant de mettre à jour les résultats du MRP au fur et à mesure de son avancement. L’utilisateur est alors obligé de recharger manuellement la page de son navigateur. Cette limitation est due au fait que le MRP et le serveur d’applications tournent sur la même machine, et qu’un rechargement automatique de la page peut être coûteux sur le serveur et peut ralentir le MRP (accès à la base de données, pages dynamiques, ...). Fig. 10.6 – Interface principale du MRP Contrairement à la première interface, la seconde est une page de gestion des MrpRun qui a été entièrement générée par les générateurs de code de Néogia à partir du diagramme de classes du MRP. Elle permet de lister les MrpRun, de les supprimer et d’en créer de nouveaux. Fig. 10.7 – Interface de gestion des MrpRun Le but de la dernière interface développée est de pallier les défauts de l’interface principale, à savoir l’impossibilité de suivre l’avancement du MRP de manière automatique à cause de la charge engendrée sur le serveur. La solution à ce problème est l’utilisation d’une technologie permettant de faire dialoguer un serveur web et un navigateur de manière asynchrone par l’échange de messages au format XML. Cette technologie s’appelle AJAX (Asynchronous Javascript And XML) et repose sur l’utilisation de Javascript, DHTML et XML. L’intérêt d’un système AJAX est que le temps de traitement sur le serveur d’une requête est beaucoup plus rapide que la création et l’envoi d’une page web complète. Le serveur d’applications se retrouve moins chargé permettant ainsi la mise en place de mécanismes de mise à jour automatique. 50 10.3. INTÉGRATION DANS OFBIZNÉOGIA Cette interface permet de charger une configuration (MrpRun), d’exécuter le MRP, de suivre en «temps-réel1 » l’état du MRP (niveau de nomenclature courant, article courant, pourcentages d’avancement, messages d’erreur, ...), d’annuler son exécution ou bien de la recommencer. À terme, cette interface sera présentée automatiquement à l’utilisateur lors du lancement du MRP depuis l’interface principale. Fig. 10.8 – Interface de contrôle du MRP Ci-dessous, un exemple de message XML échangé entre le serveur d’applications et le navigateur du client pour récupérer l’état du MRP. <MrpState status="RUNNING" duration="1650" currentProduct="TABLE" currentBomLevel="1" productProgress="0.2" totalProgess="0.1" isInitialized="true" isRunning="true" isCancelled="false" isRestartable="false"> <Error message="Unable to find routing of product [TABLE]"> </MrpState> Fig. 10.9 – Sérialisation d’un MrpState 1 toutes les secondes 51 Chapitre 11 Développement du CRP La mise en oeuvre d’un CRP nécessite des structures de données adaptées à la planification des capacités de production et à la planification des charges engendrées par le MRP sur l’outil de production. D’une part, le CRP s’exécute sur un temps discret décomposé en périodes, et pour chacune d’entre-elles, il faut être capable de déterminer la capacité et la charge de chaque ressource. D’autre part, toute planification de l’utilisation d’une ressource doit se faire via le CRP pour conserver la cohérence et la justesse de ces données. Le développement du CRP s’articule autour de la mise au point des structures de données et de la reprise de tous les algorithmes de planification de ressources d’OfbizNéogia pour qu’ils utilisent ces structures de données. Enfin, le dernier élément important dans le développement du CRP est la réalisation de l’algorithme de planification à capacité finie qui sera à la base de l’algorithme de lissage par la suite. 52 11.1. STRUCTURES DE DONNÉES DU CRP 11.1 Structures de données du CRP Le CRP sera implicitement utilisé par le MRP lorsque ce dernier créera des ordres de fabrication. Les structures de données ne doivent donc pas pénaliser l’exécution du MRP. Ce type de contrainte conduit généralement à une complexité spatiale plus importante ce qui peut impacter sur les performances de l’ensemble à cause de l’accès à la base de données. Il faut donc développer des structures avec un bon compromis entre temps de recherche et temps de chargement. 11.1.1 Gestion de plannings Lors de l’élaboration de la solution, il a été noté que le CRP devait fonctionner sur une base de temps périodique. Il faut, en particulier, être capable de récupérer la capacité et la charge d’une ressource pour une période donnée. En outre, pour éviter d’avoir à recalculer des données périodiques constantes1 telle que la capacité d’une ressource, ces données doivent être calculées une fois puis conservées dans une structure de données adaptée que nous appelerons Planning. Or ce type de structure n’existe pas dans OfbizNeogia, il a donc fallut les développer. Dans ce type de situation, il faut en profiter pour modéliser une structure qui puisse être réutilisée par d’autres modules du progiciel. Ainsi, la modélisation réalisée pour conserver des données périodiques (cf. Figure 11.1) a pu être réutilisée par l’équipe chargée de la modélisation des prévisions de vente et du plan directeur de production. Un planning est défini par une périodicité et par un ensemble de périodes de temps successives pas nécessairement de tailles fixes (PlanningPeriod). Par exemple, dans un planning avec une périodicité mensuelle, on peut trouver des périodes de 29, 30 et 31 jours. Enfin, l’attribut referenceDate définit la date de début de la période 0. Fig. 11.1 – Modélisation UML de la notion de planning Le fait d’avoir modélisé les périodes d’un planning par une interface permet d’utiliser le design pattern Factory du côté du planning. Ainsi les développeurs souhaitant utiliser cette modélisation sont libres de choisir les données périodiques à conserver, du moment qu’il respecte la spécification de l’interface. Un exemple d’utilisation de cette méthode est la modélisation du planning d’une ressource dans la partie suivante. 1 qui ne changent pas au cours d’une période 53 11.1. STRUCTURES DE DONNÉES DU CRP Les méthodes permettant de calculer la durée d’une période n’apparaissent pas sur le diagramme de classes ci-dessus. Néanmoins, elles sont centralisées au niveau de l’entité PlanningPeriodicity pour faciliter la réutilisation de cette entité dans d’autres modules. La gestion des périodes d’un planning n’est pas forcément simple quand les périodes sont de tailles différentes. Pour simplifier cette tâche, deux outils ont été introduits : PeriodIterator et PlanningPeriodIterator. Le premier permet de manipuler des périodes de temps de durée variable. Le second hérite du premier et est lié à un planning. Il permet d’énumérer les périodes d’un planning sans avoir besoin de lire la base de données. Fig. 11.2 – Modélisation UML de la notion de planning 54 11.1. STRUCTURES DE DONNÉES DU CRP 11.1.2 Modélisation des capacités d’une ressource Maintenant qu’une structure de données adaptée à la gestion de données périodiques est disponible, elle va être spécialisée pour la modélisation des capacités d’une ressource. Ainsi l’entité ResourcePlanning hérite de Planning pour gérer des périodes de type ResourcePlanningPeriod. Une période est définie par sa date de début et sa durée. Les attributs StartOffset et availability indiquent respectivement le début et la durée de disponibilité de la ressource dans la période considérée. Enfin les attributs ressourceQuantity et maxResourceQty donnent le nombre de d’unités de ressource disponible ainsi que la quantité maximum qu’il est possible d’utiliser pour la période. Fig. 11.3 – Modélisation UML des capacités des ressources Fig. 11.4 – Schéma simplifié d’un ResourcePlanning Calcul de la capacité d’une ressource pour une période : capacity = availability ∗ resourceQuantity Un planning étant potentiellement infini, ses périodes sont créées à la demande lorsque l’application tente d’accèder à l’une d’entre-elles. Lors de leur initialisation, les capacités sont 55 11.1. STRUCTURES DE DONNÉES DU CRP fixées à partir du calendrier industriel de la ressource. Le décideur pourra ensuite les modifier pour intégrer des heures supplémentaires, par exemple. Une difficulté qui est apparue lors de l’élaboration du CRP, est que les périodes d’un planning ne correspondent pas forcément à celle du calendrier industriel. Il faut alors effectuer des estimations qui nuisent un peu à la précision de l’ensemble. Ainsi la date de début de disponibilité d’une ressource est calculée de la manière suivante : (duration − availability) startOf f set = 2 Comme indiquée en introduction, le gain de temps gagné sur le calcul des capacités d’une ressource a des répercutions sur la quantité de données à extraire depuis la base de données. Pour pallier ce problème, un mécanisme de caches a été mis en place pour conserver les plannings et leurs périodes en mémoire le temps d’un traitement important tel que l’exécution du MRP ou le lissage des charges. Ces caches peuvent être paramétrés pour fonctionner dans un mode LRU (Last Recent Use). Cependant, pour conserver la cohérence des données entre cache et base de données, les modifications de plannings doivent se faire exclusivement via le CRP. C’est pourquoi toutes les opérations de planification sont centralisées dans ce module. 11.1.3 Modélisation des charges d’une resources Le but de cette modélisation est d’être capable à tout moment, de calculer simplement la charge d’une ressource pour une période donnée. De plus, pour l’algorithme de lissage, il faut être capable de récupérer les opérations qui utilisent cette ressource et de distinguer la charge ferme de la charge planifiée. Pour atteindre ces objectifs, il suffit de lier l’utilisation des ressources (TaskResourceFulfil) aux RessourcePlanningPeriod correspondant. Fig. 11.5 – Modélisation UML des charges des ressources À l’heure actuelle, l’entité ResourcePlanningPeriod ne contient aucun champs concernant la charge de la période car il est facile de l’obtenir en sommant le champs duration de chaque ResourceUsage associé à la période. S’il s’avère à l’usage que ce calcul est finalement coûteux, il est prévu d’ajouter les champs plannedLoad, closedLoad et totalLoad à l’entité ResourcePlanningPeriod. Ces champs devront être mis à jour après chaque planification. 56 11.2. ALGORITHMES DE PLANIFICATION 11.2 Algorithmes de planification Cette partie présente les différents algorithmes de planification mis en oeuvre dans le cadre du CRP. Ces algorithmes se basent sur les structures de données décrites précédemment, et sur celles du module de gestion d’atelier. En effet, ils portent sur la planification des ordres de fabrication et de leurs opérations, ainsi que sur la planification de l’utilisation des ressources. Afin de rester strictement dans le cadre du couple MRP-CRP, les algorithmes présentés ne fonctionnent qu’en planification arrière (planification à partir des dates de fin) bien qu’ils intègrent en réalité aussi la planification avant. Par contre, ils intègrent la prise en compte des capacités de production. 11.2.1 Algorithme de planification d’un OF L’algorithme de planification d’un ordre de fabrication est très simple puisque ce n’est pas à ce niveau que l’on traite la planification multi-ressources ou que l’on prend en compte les capacités. Ces problèmes seront traités dans les parties suivantes, à savoir la planification d’une opération et la planification de l’utilisation d’une ressource. Dans le cas du MRP, le but de la planification d’un OF est de calculer sa date de lancement à partir de sa date de fin estimée. Pour obtenir ce résultat, il suffit simplement de planifier chacune de ses opérations en les prenant dans l’ordre inverse de leur réalisation. Ainsi, la date de début calculée d’une opération devient la date de fin estimée de l’opération précédente de l’OF. La planification d’un OF entraı̂ne la mise à jour de ses besoins en composants, et par la même occastion, la mise à jour des mouvements de stock planifiés qu’il génère. Ces mises à jour s’effectue automatiquement via un mécanisme d’évènements interne à d’Ofbiz appelé SECA qui déclencle l’appel des services de mise à jour. C’est pourquoi ils n’apparaissent pas dans l’algorithme. Le rôle de la donnée BoundDate est de fixer une date limite de planification. Dans le cadre de la planification d’un OF par le MRP, cette date pourrait être la date de début de l’horizon de planification du MRP. Nous verrons son utilité dans la section suivante. 57 11.2. ALGORITHMES DE PLANIFICATION 11.2.2 Algorithme de planification d’une opération La principale difficulté dans la mise en oeuvre de la planification d’une opération est le fait qu’elle puisse nécessiter plusieurs ressources. Dans ce cas, toutes les ressources doivent être disponibles pendant l’opération. Par ailleurs, ces ressources peuvent ne pas avoir le même type de planning ce qui rend la recherche de périodes de disponibilité communes encore plus délicate. Pour comprendre la difficulté de l’algorithme à mettre en oeuvre, nous allons nous basé sur un exemple de planification d’une opération nécessitant trois ressources. Fig. 11.6 – Exemple de planification d’une opération Dans l’exemple ci-dessus (Figure 11.6), on commence par planifier la ressource dont l’indicateur valueForPlanification est à 1 conformément aux spécifications du module de gestion d’atelier. L’utilisation de cette ressource détermine ainsi la position de l’opération dans le temps. Ensuite, il ne reste plus qu’à planifier l’utilisation des ressources restantes dans l’intervalle de temps définit par l’utilisation de la première ressource. Or dans cette exemple, il n’est pas possible de trouver une planification de l’utilisation de la ressource 3 qui satisfasse la contrainte posée par cet intervalle. Dans ce cas, on annule les planifications réalisées et on recommence la planification de la première ressource à partir de la période précédente de son planning (Figure 11.7). Fig. 11.7 – Exemple de planification d’une opération Pour éviter, un temps de recherche infini lorsque les plannings des ressources sont incompatibles ou lorsqu’en mode planification à capacité finie les ressources sont surchargées, une date limite a été introduite. Elle définit la date de début minimale de l’utilisation de toute ressource. 58 11.2. ALGORITHMES DE PLANIFICATION 59 11.2. ALGORITHMES DE PLANIFICATION 11.2.3 Algorithme de planification de l’utilisation d’une ressource L’algorithme de planification de l’utilisation d’une ressource est important car c’est à ce niveau que les structures de données du CRP vont être utilisées pour prendre en compte la capacité et la charge d’une ressource. Il consiste à rechercher dans le planning d’une ressource un emplacement compatible avec l’utilisation prévue de la ressource. On entend par compatible, un emplacement situé dans l’espace de recherche, qui remplit les besoins en capacité et quantité de ressource. L’espace de recherche est définit par l’intervalle [BoundDate, DueDate]. La planification à capacité finie est activée lorsque finiteCapacity est à 1. L’élément important de cet algorithme est l’objet Period qui correspond à l’entité ResourcePlanningPeriod. C’est à partir de cet objet que l’on récupére la capacité disponible d’une ressource et que l’on met à jour sa charge. 60 11.3. CONSÉQUENCES DE LA PLANIFICATION À CAPACITÉ FINIE 11.3 Conséquences de la planification à capacité finie Dans cette partie, on ne s’intéresse qu’à la planification des ressources car c’est le seul endroit où les capacités de production vont intervenir. Une caractéristique principale de cette implémentation de la planification à capacité finie est l’allongement du temps nécessaire à la réalisation d’un ordre de fabrication. D’une part, à cause de la prise en compte des capacités de production mais aussi parce qu’on ne doit plus fixer des dates de début et de fin d’utilisation d’une ressource. C’est le rôle d’un algorithme d’ordonnancement et pas celui du CRP, qui doit uniquement vérifier que les capacités sont disponibles pour une période donnée. Ainsi, ne sachant pas quel sera l’ordonnancement utilisé, les dates de début et de fin d’utilisation d’une ressource sont bornées par les dates de début et de fin des périodes utilisées. Fig. 11.8 – Exemple de planification à capacité finie Allongement du temps nécessaire à la réalisation d’un ordre de fabrication car des opérations ne peuvent plus utiliser une même ressource pendant une même période. En effet, lorsque l’on planifie l’utilisation d’une ressource on sait pendant quelles périodes elle va être utilisée mais pas ses dates de début et de fin. Donc pour éviter tout recouvrement, l’algorithme de planification à capacité finie s’assure qu’il y a toujours une période d’écart pour l’utilisation successive d’une ressource par un même OF. Fig. 11.9 – Allongement du temps nécessaires à la réalisation d’un OF Enfin, allongement du temps nécessaire à la réalisation d’un ordre de fabrication car si la date de fin d’utilisation d’une ressource tombe au milieu d’une période on est obligé de l’avancer à la période précédente. En effet, ne sachant pas quel sera l’ordonnancement utilisé, il n’est pas possible d’assurer que l’utilisation de la ressource sera bien terminée à la date de fin indiquée. 61 11.4. INTÉGRATION AVEC LE MODULE DE GESTION D’ATELIER Fig. 11.10 – Allongement du temps nécessaires à la réalisation d’un OF Le principal défaut de la méthode de planification à capacité finie utilisée est qu’elle n’est pas toujours fiable. Ce n’est pas parce que la capacité nécessaire est disponible que la solution est réalisable car l’algorithme de planification ne prend pas en compte la quantité de ressource disponible. Ainsi, si 5 ressources identiques sont disponibles pendant 24h et que deux opérations nécessitent respectivement 4 ressources pendant 24h et 3 ressources pendant 5h ; la solution n’est pas réalisable car bien que la charge soit inférieure à la capacité, le nombre de ressources nécessaires à chaque instant n’est pas suffisant. 11.4 Intégration avec le module de gestion d’atelier Lors de l’élaboration de la gestion de planning des ressources, nous avons vu que pour que le CRP soit fiable, il faut que toute planification de l’utilisation d’une ressource se fasse par son intermédiaire. C’est pourquoi, les algorithmes de planification d’OFs et d’opérations existants ont été entièrement repris pour intégrer l’utilisation des plannings. Cependant, les algorithmes de planification du module de gestion d’atelier fonctionnent en planification avant (forward scheduling2 ) contrairement au MRP qui utilise la planification arrière (backward scheduling3 ). Ainsi, l’intégration du CRP dans ce module a dû être réalisée en conservant le mode de planification initial. Par conséquent, tous les algorithmes présentés précedemment intègrent la notion de sens de planification. De ce fait, la planification manuelle d’un OF bénéficie du CRP et de ses mécanismes de détection de surcharge. 2 3 planification à partir des dates de début planification à partir des dates de fin 62 Cinquième partie Bilan 63 Chapitre 12 Bilan du projet 12.1 État d’avancement Les modules prévus dans la décomposition fonctionnelle présentée dans le chapitre «Solution mise en oeuvre», n’ont pas encore été tous implémentés en raison des temps de développement requis pour une application de cette ampleur et de certains problèmes rencontrés. Ainsi, l’état d’avancement du projet est estimé à 70% réalisé. En particulier, l’algorithme de lissage des charges n’a pu être terminé à temps à cause de problèmes rencontrés tardivement au niveau la planification multi-ressources à capacité finie et au niveau de la replanification des besoins en composants. En revanche, le reste des fonctionnalités annoncées sont fonctionnelles. Ainsi, OfbizNéogia dispose d’un MRP couplé à CRP ce qui le classe désormais dans la catégorie des MRP-1. 12.2 Problèmes rencontrés 12.2.1 Problèmes fonctionnels Problème lié à la replanification des besoins L’algorithme d’ajustement charge-capacité prévu, peut être amené à décaler des OF afin de faire diminuer les charges pesant sur les ressources. Or, ces décalages peuvent avoir des conséquences sur les niveaux de stock qui n’avaient pas été prévues lors de l’élaboration de l’algorithme. En effet, si l’opération que l’algorithme souhaite décaler nécessitait des besoins en composants, et que ces besoins ont généré des propositions d’OF, alors le décalage va bien décaler les besoins en composant mais ne va pas annuler les OF proposés. On risque ensuite d’avoir une hause des niveaux de stock et une utilisation inutile des ressources de l’atelier. Ces conséquences ne remettent pas en cause l’algorithme de lissage mais il faudra mettre en place un mécanisme pour détecter les propositions inutiles lors de l’appel au MRP chargé de refaire la planification des besoins en composants après le décalage d’une opération. À l’heure actuelle, deux solutions sont envisagées pour résoudre ce problème : – utiliser un MRP différentiel qui ajusterait les propostions existantes ; 64 12.2. PROBLÈMES RENCONTRÉS – développer un mécanisme de «pegging ([GP75])» permettant de retrouver l’origine d’une proposition et de l’ajuster si le besoin n’existe plus. Probléme lié à la planification multi-ressources à capacité finie L’algorithme de planification d’une opération, lorsqu’il est utilisé en planification à capacité finie, présente un risque de ne jamais trouver de solution du fait des décalages de temps introduits par la planification à capacité finie (cf. Section 11.3). Pour éviter un bouclage infinie, des dates limites de planification ont été introduites cependant cette amélioration ne résoud pas le problème. Il existe pourant une solution partielle à ce problème, qui consisterait à diminuer la durée de l’opération pour augmenter les chances de trouver une configuration valide. Le seule moyen disponible pour faire baisser la durée d’une opération est de diminuer la quantité à produire en avançant une partie de la production. Cette solution obligerait l’algorithme de lissage à ne plus considérer uniquement le décalage d’une opération mais aussi le décalage des quantités à produire. À ce stade, il serait peut-être plus simple de revoir le plan directeur de production plutôt que du perdre du temps à trouver une configuration valide. 12.2.2 Problèmes techniques Le principal problème technique rencontré concerne la concurrence de transactions avec la base de données lors de l’exécution du MRP. Par défaut, un service Ofbiz s’exécute dans une transaction qui assure l’isolation par rapport à des requêtes s’exécutant sur la base de données. Or le MRP étant un processus long et une transaction pouvant poser des verrous sur des tables, des situations d’interblocage survenaient lorsque le thread du MRP et celui du MrpController tentaient d’accéder à l’entité MrpRun. 12.2.3 Temps de développement Les temps de développements d’une application dans un ERP comme Ofbiz, sont plus longs en raison de l’architecture et de la taille de ce type de projet. Par exemple, il est quasiment impossible d’utiliser un débogueur avec Ofbiz. Il faut alors utiliser des logs pour tracer le contenu des variables et l’exécution des algorithmes. De même, la mise en place de procédures de tests est rendue délicate en raison de l’omniprésence de la base de données et du temps de lancement de l’ERP qui oscille entre 30 et 90 secondes avant d’obtenir la main sur le système. Pour ce projet, j’au eu la chance de pouvoir travailler directement sur le dépot CVS contenant les sources d’OfbizNéogia. J’avais ainsi accès à un système de suivi des modifications du projet ce qui me permettait de suivre l’évolution des différents modules nécessaires au MRP. En contrepartie, il fallait éviter de «casser» le projet en «commitant» des développements ne compilant pas. Il était donc nécessaire de passer un certain temps à vérifier que les modifications appportées au projet n’allaient pas empêcher les contributeurs du projet de travailler. 65 12.3. AMÉLIORATIONS POSSIBLES 12.3 Améliorations possibles L’infrastructure du MRP et du CRP mise en place fournit une base stable pour de futurs développements. Cependant, le temps de mise en oeuvre de cette infrastructure a consommé du temps de développement initialement prévu pour d’autres aspects du projet. Actuellement, le CRP ne dispose d’aucune interface permettant au décideur de visualiser les dépassements de capacité car les scénarios ne sont pas encore complétement définis. Il faudrait, en particulier, qu’il puisse faire les ajustements de capacité des ressources directement depuis l’interface du CRP avant de laisser la main à l’algorithme de lissage. Un point important qui n’a pas été réalisé faute de temps, est la réalisation d’un jeu de données conséquent pour tester les performances du couple MRP-CRP. Jusqu’à présent, les développements ont porté sur la réalisation d’un système fonctionnel sans prise en compte des performances. La seconde phase des développements consistera donc à améliorer le système pour atteindre des performances correctes pour un système MRP-1. Une possibilité est de développer un générateur de nomenclatures, de gammes et mouvements de stocks planifiés pour tester le système aux limites. 66 Chapitre 13 Conclusion Bien que ce projet ne soit pas complétement terminé, les éléments développés sont fonctionnels et sont d’ores et déjà présentés aux futurs clients de Néréide lors des démonstrations du progiciel. De même, certaines modélisations commencent à être réutilisées dans d’autres parties du progiciel, notamment la gestion de planning. Ce projet est le plus important que j’ai été amené à développer jusqu’à présent. Il m’a permis de découvrir la gestion de production, la mise en oeuvre d’un MRP et les différentes problématiques liées à ce type d’application. Ce fut aussi l’occasion de travailler sur un projet international, notamment par l’envoi de rapports de bogue et de corrections directement aux mainteneurs américains d’Ofbiz. Bien qu’ayant déjà travaillé sur OfbizNéogia au cours d’un stage précédent le PFE, ma plus grande difficulté a été d’avoir une vision globale du projet durant les phases de conception. Concevoir un système le plus ouvert possible pour permettre facilement l’ajout et/ou la réutilisation de fonctionnalités n’est pas une tâche simple quand tous les éléments ne sont pas clairement définis. D’ou un temps non négligeable passé à comprendre le fonctionnement du couple MRP-CRP. De plus, le développpement d’un système ERP est complétement différent du développement d’une application isolée du fait que plusieurs utilisateurs peuvent être connectés au système à tout instant, que les ressources doivent être partagées, que tout passe par une base de données, etc. Enfin, ce projet ne s’arrête pas là puisqu’il fait l’objet d’un stage de fin d’étude chez Néréide. Ce stage devrait me permettre de terminer les fonctionnalités manquantes pour obtenir un MRP-2, à savoir la mise en oeuvre de l’algorithme d’ajustement charge-capacité. 67 Sixième partie Annexes 68 Annexe A Modélisation des données techniques dans OfbizNeogia 69 Annexe B Modélisation des ordre de fabrication dans OfbizNeogia 70 Annexe C Modélisation du MRP réalisé 71 Annexe D Modélisation des charges/capacités des ressources 72 Glossaire A APS ( Advanced Planning Systems ) Logiciels censés apporter de nouvelles fonctions comme une replanification rapide, une planification sous contrainte, un chargement à capacité finie, un algorithme de lissage de charge. Voir aussi «MPS». C CMMS ( Computerized Maintenance Management system ) Gestion de Maintenance Assistée par Ordinateur. CMS ( Content Management Systeme ) Également nommé progiciel de gestion du contenu (PGC), un système de gestion de contenu permet de gérer le contenu des sites web qu’il administre sans avoir besoin d’écrire de code HTML ni d’utiliser d’outils de développement. CRM ( Customer Relationship Management ) Concept préconisant la centralisation au sein d’une base de données de toutes les interactions entre une entreprise et ses clients, afin de mettre en commun et maximiser la connaissance d’un client donné. D Design Pattern ( Modèle de conception ) Dans le monde de l’orienté-objet, les design patterns se présentent comme un catalogue de méthodes de résolution de problèmes récurrents. E ERP ( Enterprise Resource Planning ) M MDA ( Model Driven Architecture ) Model-Driven Architecture (MDA) est une architecture proposée par l’OMG dont l’objectif est de rendre le métier de l’entreprise indépendant du middleware d’accès. 73 GLOSSAIRE MPS ( Master Production Schedule ) Un MPS est un ... MRP ( Material Requirements Planning ) Un MRP est un système qui à partir d’un plan directeur de production établit la liste des besoins en composants. Un besoin étant définit par une quantité et une date de disponibilité. Voir aussi «MPS». O OPT ( Optimized Production Technology ) S SCM ( Supply Chain Management ) Technique de gestion consistant à s’occuper de toute la chaı̂ne logistique, des fournisseurs aux clients en passant par la production. Le SCM passe par la mise en place de logiciels sachant gérer tous les flux physiques d’une entreprise. 74 Bibliographie [CH05] La théorie des contraintes, Christian HOHMANN, <http://membres.lycos. fr/hconline/toc/toc3c.htm>. [DF91] Production and Inventory Management, Donald W. Fogarty, John H. Blacksc 1991 South-Western Publishing Co., tone, et Thomas R. Hoffman, Copyright 0-539-07461-2, South-Western Publishing Co.. [DG02] Strategy for success, David Geary, <http://www.javaworld.com/javaworld/ jw-04-2002/jw-0426-designpatterns.html>. 10.1.3 [DG03a] Simply Singleton, David Geary, <http://www.javaworld.com/javaworld/ jw-04-2003/jw-0425-designpatterns_p.html>. 10.1.3 [DG03b] Façade clears complexity, David Geary, <http://www.javaworld.com/ javaworld/jw-05-2003/jw-0530-designpatterns.html>. 10.1.3 [GP75] c 1996 Orlicky’s Material Requirements Planning, George W. Plossl, Copyright MCGraw-Hill, Inc., 0-07-050459-8, MCGraw-Hill, Inc.. 7.3, 12.2.1 [JF03] GPAO.NET - Le centre des ressources de la gestion de production, Jerome Framery, <http://perso.wanadoo.fr/gpao.net/>. [LD98] La gestion industrielle, Lionel Dupont, 2866017080, Hermes Science Publications. 3.1.1, 5.2, 7.3 [LS91] The Data Model Resource Book : A Library of Universal Data Models by c 1991 Wiley, 0-471-35348-5, Wiley. Industry Types, Len Silverston, Copyright [NA04] The Neogia Project, Olivier Heintz et Yannick Thebault, <http://www. neogia.org/>. [OZ01] The Open For Business Project, David E. Jones et Andy Zeneski, <http: //www.ofbiz.org/>. [SG97] Le monde industriel , SupGedem.net, <http://gpr.insa-lyon.fr/supgedem/ Home/nonjava.htm>. [TG04] Un module MRP pour un ERP libre Open For Business, Thierry Grauss, c 2004 Thierry Grauss. 7 Copyright [VG88] Gestion de la production 2e édition, Vincent Giard. 3, 5.2, 7.3, 9.2 75 Résumé L’objectif de ce projet était de porter le MRP existant d’Ofbiz vers OfbizNeogia et de lui ajouter la prise en compte des capacités de production pour établir sa planification. La solution consiste, dans un premier temps, à développer un CRP (Capacity Requirement Planning) qui permet de détecter les ressources surchargées. Puis, il faut implémenter un algorithme d’ajustement charge-capacité dont le rôle est de lisser la charge. En plus du CRP, il a fallut redévelopper tous les algorithmes de planification pour qu’ils utilisent les structures de données du CRP. Mots-clés Ofbiz, Neogia, MRP, CRP, ajustement charge-capacité Abstract The aim of this project was to port existing MRP from Ofbiz to OfbizNéogia and to add it the ability to take in account production capacities to establish its planning. In a first time, the solution was to develop a CRP (Capacity Requirement Planning) which allows detection of overload resources. Then, it’s necessary to implement a load-capacity adjustment algorithm to smooth the load. Due to OfbizNeogia’s particularities, MRP and CRP are deeply coupled. So in addtion of the CRP, it had to reimplement all planification algorithms in order they use CRP data structures. Keyword Ofbiz, Neogia, MRP, CRP, load-capacity adjustment Étudiant : GORON Peter EPU-DI 3e année Année 2004-2005 Encadrants : SOUKHAL Ameur HEINTZ Olivier
Similar documents
Télécharger
est l’émetteur et dont il a une parfaite maı̂trise et connaissance. Il réalise alors le
More information