Numéros de programme sans doublon
Plusieurs postes créent des fiches en même temps, chacune doit repartir avec son propre numéro. Sans base de données.
01 — Contexte
Le point de départ
Deux opérateurs ouvrent le formulaire de création en même temps. Les deux lisent le dernier numéro, 3943. Les deux créent la fiche 3944. Personne ne voit rien avant que les fiches remontent dans Clipper, plusieurs heures plus tard, et là il est trop tard pour corriger simplement.
Cette appli sert à créer les fiches programme de l'atelier. Son vrai travail, c'est de rendre ce scénario impossible, avec des fichiers et un verrou, parce qu'il n'y a pas de base de données.
02
La course
Les nouvelles fiches ne remontent dans Clipper qu'après validation, avec plusieurs heures de décalage. Le numéro doit donc être réservé pendant que l'opérateur remplit le formulaire, pas quand la fiche arrive dans Clipper.
03
Des réservations de 15 secondes
Quand le formulaire s'ouvre, le serveur ne se contente pas de calculer le prochain numéro : il le réserve dans un fichier de verrous, avec une expiration à 15 secondes. Tant que la réservation tient, aucun autre poste ne peut avoir ce numéro. Le formulaire la renouvelle tant qu'il reste ouvert.
Pour choisir, le serveur parcourt les numéros dans l'ordre et prend le premier qui n'est ni dans Clipper, ni réservé. Le ménage des réservations expirées, la recherche et la nouvelle réservation se font dans un seul verrou exclusif sur le fichier. Deux requêtes simultanées passent donc l'une après l'autre, et la deuxième voit la réservation de la première.

04
Les choix
-
Une réservation qui expire
Écarté :
un verrou que le navigateur libèreUn verrou que seul le navigateur peut libérer finit par rester bloqué : onglet fermé, navigateur planté, PC éteint, coupure réseau. Le numéro serait perdu. Avec une date d'expiration, un poste qui ne donne plus de nouvelles est un cas prévu. Il n'y a pas de tâche de fond : chaque requête qui lit le fichier supprime au passage les réservations périmées.
-
15 secondes, renouvelées
Écarté :
une réservation de 5 minutesTrop court, le numéro change sous les doigts de quelqu'un qui réfléchit. Trop long, un formulaire abandonné bloque un numéro pendant des minutes, et l'opérateur suivant voit un trou dans la numérotation. Avec 15 secondes renouvelées tant que le formulaire est ouvert, un formulaire ouvert garde son numéro aussi longtemps qu'il faut, et un formulaire abandonné le rend en quelques secondes.
05
Ce qui a coincé
- La réservation peut expirer pendant la saisieQuelqu'un laisse le formulaire ouvert et s'en va. Quand il valide, sa réservation a pu expirer et être reprise par un autre poste. Si la validation faisait confiance à la réservation, on retombait sur le doublon. Donc la validation revérifie que le numéro est libre au moment d'écrire, sous verrou. La réservation sert à ce que le numéro affiché reste stable. Ce qui empêche vraiment le doublon, c'est cette vérification.
- Rendre le numéro quand on annuleFermer le formulaire sans valider devait rendre le numéro tout de suite, sans attendre les 15 secondes. Sinon quelqu'un qui hésite laisse des trous dans la numérotation. Le bouton « Annuler », le clic en dehors du formulaire et la touche Échap libèrent tous la réservation. L'expiration reste là pour les cas que je ne contrôle pas.
06
Où ça en est
- 3 943fiches synchronisées depuis Clipper
- 15 spar réservation, renouvelée tant que le formulaire est ouvert
L'appli tourne sur le réseau de l'atelier depuis juillet 2026. Chaque création envoie un mail au responsable, et chaque étape de l'envoi (connexion, STARTTLS, authentification, envoi) est écrite dans un journal quotidien. Quand un mail ne part pas, on sait à quelle étape ça a cassé sans avoir à reproduire le problème.
Je n'ai pas le nombre de fiches créées depuis que je suis parti, donc je ne peux pas vous dire combien de doublons ça a évité.
07
À reprendre
- Le renouvellement dépend du navigateur.Quand un onglet passe en arrière-plan, le navigateur peut ralentir ses minuteurs et laisser la réservation expirer alors que la personne est toujours là. La revérification évite le doublon, mais le numéro affiché peut changer. Relancer le renouvellement quand l'onglet revient au premier plan (API Page Visibility) réglerait ça.
- Il n'y a pas d'authentification.Le service ne répond que sur le réseau local, et la règle du pare-feu est limitée au profil privé. Mais aucune action n'est rattachée à une personne. Pour un outil qui envoie des mails au nom de l'entreprise, une identification, même simple, serait plus saine.