Ouverture d'une période
Documentation technique GRH — suivi d’ouverture de période / exercice (verrou RHOUV*, reprise phase A/B, droit TM_EXO, journal des événements).
Voir aussi la doc utilisateur.
1. Objectif
Sécuriser l’ouverture de période et d’exercice : un seul poste à la fois, reprise après coupure sans rejouer inutilement les étapes déjà OK, traçabilité dans le journal des événements.
2. Fichiers / unités
Copie de travail sous sources_modifiees/ouverture_periode/ — ne pas éditer directement les sources EIG.
| Unité | Rôle |
|---|---|
Mensuel.Periode.I_OuvertureSuivi | Enums, constantes timeout, interface suivi |
Mensuel.Periode.U_OuvertureSuivi | Verrou, étapes, heartbeat, reprise |
Mensuel.Periode.F_Ouverture | Orchestration PER/EXE, UI busy, reprise écran |
d_GRHmain | Garde connexion (EN_COURS / INTERROMPU), droit après init |
Menu.Fr_GRHMainMenu | Ouverture forcée reprise, act_exercices / TM_EXO |
U_GRHNotificationDB | Heartbeat Notif_USER (session visible) |
ddl/RHOUVPERIODE.sql | Tables Firebird + générateur |
3. Tables
RHOUVPERIODE
| Champ | Rôle |
|---|---|
OUVID | PK (générateur RH_GENID_OUVPERIODE) |
OUVSTATUT | 0 EN_COURS · 1 INTERROMPU · 2 TERMINE · 3 ABANDONNE |
OUVPERIODE | Index AAAAMM période cible |
OUVUSER / OUVATTACH | Utilisateur / ConnectionID verrou |
OUVHB | Dernier heartbeat |
OUVETAPE / OUVMESSAGE | Étape courante / message |
RHOUVETAPE : une ligne par étape (ETAPCODE = TOuvEtape, statut A_FAIRE / EN_COURS / OK / KO / IGNORE).
4. Constantes d’activation / timing
| Constante | Unité | Défaut | Rôle |
|---|---|---|---|
C_USE_OUVERTURE_SUIVI |
I_OuvertureSuivi |
True | Active / coupe tout le suivi (verrou, étapes, heartbeat, reprise) |
C_OUV_HB_TIMEOUT_SEC |
I_OuvertureSuivi |
90 | Délai sans heartbeat avant INTERROMPU |
C_OUV_HB_INTERVAL_SEC |
I_OuvertureSuivi |
15 | Fréquence du heartbeat suivi |
C_USE_NOTIF_USER_HEARTBEAT_THREAD |
U_GRHNotificationDB |
True | True = heartbeat USERCONNECT sur thread dédié ; False = WM_TIMER historique |
5. Pipeline
Controles users → DemarrerSuivi (verrou) → alertes DSN / P99 / CanChange* → PreBascule → Bascule → PostOuverture → Terminer
* En reprise : alertes DSN / P99 / « forcer le changement » sautées.
ExecuterPreBascule— CHG_HOR (mois), TAUX_PAS, DSN, ARCH_*ExecuterBascule— CLOSE_PER → BASCULE (trx) → DATE / INFO_ASSO / DEBLOCExecuterPostOuverture— ARCH_HISTO (EXE) → APRES_OUV → message →Terminer
Le verrou est posé avant les dialogues DSN / CanChange. Abandon d’un contrôle → AbandonnerSuiviSiActif.
6. Verrou & heartbeat
- EN_COURS + heartbeat < 90 s → autre session refusée (« Réessayez plus tard »).
- Process tué → heartbeat expire → INTERROMPU au prochain démarrage.
- Fin OK →
Terminer→ TERMINE + arrêt heartbeat (déverrouillage immédiat). - Abandon / contrôles KO après démarrage → ABANDONNE.
7. Reprise phase A / B
| Phase | Critère | Comportement |
|---|---|---|
| A | Période ouverte ≠ cible | Étapes pré-bascule déjà OK conservées. Reset seulement EN_COURS/KO. |
| B | Période ouverte = cible | Étapes ≤ bascule → IGNORE. Post-bascule → A_FAIRE. Ne pas re-basculer. |
AssureInfoAssoGRH : en reprise, CanChangePeriode est sauté → recréer _InfoAssoGRH avant SaveToDB.
8. Droits
- Après
doInitDroitsUsers: si reprise demandée et pasCanOpen('TM_EXO')→ refus. CheckExerciceExist/ écran : même garde.
9. UI pendant traitement
SetUIOuvertureBusy— désactive boutons / navigation._INTRT— bloque Escape / fermeture (CanClose := False).
10. Erreurs & arrêt
| Cas | Comportement |
|---|---|
| Exception pendant ouverture / reprise | StopperOuvertureSurException → message, PasserInterrompu, journal, Application.Terminate |
| Contrôle métier KO | AbandonnerSuiviSiActif — pas d’arrêt appli |
| Refus droit TM_EXO | Exception / message — pas de traitement |
11. Journal des événements
Traces via _GetBigBrother.AddEventGlobal (libellé UI : journal des événements). Source typique : F_SaisieExercices / D_GRHMain.