Intégré au sein de l'entreprise Gémopal, ma mission principale consiste à concevoir et développer le module "Gestion des Stocks" d'une solution mobile industrielle. Un défi technique centré sur la robustesse, l'architecture logicielle stricte et l'optimisation pour le terrain.
1. Contexte et Problématique
La situation initiale : L'entreprise dispose déjà d'un écosystème logiciel robuste (Desktop et Web) pour gérer la logistique de palettes. Cependant, la composante mobile était incomplète et ne permettait pas de gérer efficacement les flux physiques directement sur le terrain.
Le problème : Les opérateurs logistiques (trieurs, réparateurs) et les chefs d'équipe avaient besoin d'un outil fiable sur terminaux durcis pour suivre les mouvements de stock en temps réel, sans repasser par un poste fixe.
Le besoin : Concevoir un module capable de fonctionner avec une base de données distante, de gérer des règles métier complexes (états des palettes, traçabilité) et d'offrir une ergonomie adaptée à un usage industriel intensif.
2. Objectifs du Projet
L'objectif n'était pas seulement de créer une application, mais de livrer un module autonome et évolutif intégré à la suite logicielle existante.
- Saisie des mouvements : Gérer les entrées en stock, les sorties vers la réparation et les retours de tri.
- Gestion des acteurs : Permettre la sélection dynamique des trieurs et réparateurs via des listes filtrées.
- Traçabilité avancée : Génération automatique de numéros de documents uniques par terminal.
- Calculs automatisés : Gestion automatique des données temporelles (Semaine ISO, Mois, Année) et des états de stock (Palettes Bonnes vs Cassées/KC).
3. Rôle et Responsabilités
En tant que Développeur Full Stack Mobile en alternance, j'évolue en binôme au sein du service informatique.
- Mon périmètre : J'ai la responsabilité intégrale du module "Stock". Cela couvre la conception de l'interface (Vue), la logique métier (Présentateur) et l'accès aux données (Modèle).
- Collaboration : Je travaille en étroite collaboration avec un second développeur qui gère le module "Palettes" ainsi que le Webservice assurant la liaison entre les terminaux mobiles et le système central Desktop.
- Autonomie : De l'analyse du besoin à l'implémentation de l'architecture logicielle.
4. Technologies et Méthodes
Le projet repose sur la suite PC SOFT, standard dans l'environnement de l'entreprise, mais appliqué avec une rigueur architecturale moderne.
Stack Technique
- Langage & IDE : WLangage sous WinDev Mobile (Android).
- Base de Données : HFSQL (Client/Serveur).
- Matériel Cible : Terminaux Android industriels (Zebra/Honeywell).
- Versioning : GDS (Gestionnaire de Sources).
Architecture Logicielle : Pattern MVP
Contrairement au développement "rapide" souvent associé à WinDev, j'ai imposé une architecture Modèle-Vue-Présentateur (MVP) stricte pour garantir la maintenabilité :
- Modèle : Gère l'accès aux données HFSQL.
- Vue : L'interface graphique (Fenêtre) est totalement passive. Elle ne contient aucune logique métier.
- Présentateur : L'orchestrateur qui fait le lien, traite les règles de gestion et formate les données pour la vue.
5. Réalisations Techniques Majeures
Ce projet m'a permis de mettre en œuvre des concepts avancés de programmation orientée objet (POO).
Gestion avancée du Data Binding
Un défi technique a été de lier des listes déroulantes (Combos) de l'interface à des tableaux d'objets imbriqués dans le Présentateur. J'ai développé une liaison par programmation (..FichierParcouru) pour contourner les limitations de l'éditeur graphique, permettant une mise à jour dynamique des listes de trieurs.
Système centralisé de gestion d'erreurs (UX)
Pour éviter les crashs et améliorer l'expérience utilisateur, j'ai créé une classe CErreur et un mécanisme d'exceptions personnalisées.
« Le Présentateur détecte une erreur métier ou SQL, lève une exception, et la Vue l'intercepte pour afficher une popup native claire et formatée. L'utilisateur n'est jamais bloqué par un message technique obscur. »
Optimisation via Héritage et Polymorphisme
J'ai refactorisé les calculs statistiques (Dates, Semaines ISO) via une classe parente MBase. Grâce à une méthode virtuelle AffecteStats redéfinie dans les classes enfants (MStocks, MStocks_Reparations), le code de calcul est centralisé et non dupliqué.
Aperçu de l'Interface
Captures d'écran (simulées) de l'application sur les terminaux industriels.
6. Résultats et Apprentissages
État actuel (Projet en cours)
- Le module Stock est fonctionnel : création et modification fiables des fiches de stocks.
- Le code est standardisé : une modification des règles de gestion se fait à un seul endroit.
- L'expérience utilisateur est fluide grâce à la gestion non-bloquante des erreurs.
Ce que j'ai appris
Cette mission est formatrice sur plusieurs aspects cruciaux :
- Rigueur Architecturale : J'ai compris l'importance vitale du découplage (MVP) dans une application complexe.
- Injection de Dépendances : Passage de contexte via constructeurs pour éviter l'usage abusif de variables globales.
- POO en WLangage : Manipulation avancée des structures de données en mémoire et de l'héritage.
Perspectives
Pour la suite du projet, j'envisage la mise en place de Tests Unitaires automatisés sur les classes Présentateurs. Cela permettrait de valider la logique métier (calculs, numérotation) de manière industrielle avant chaque déploiement sur les terminaux physiques.
