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.
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
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
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 / DEBLOC
ExecuterPostOuverture — 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
Terminer → TERMINE + arrêt heartbeat (déverrouillage immédiat).
Abandon / contrôles KO après démarrage → ABANDONNE.
7. Reprise phase A / B
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
doInitDroitsUsers : si reprise demandée et pas CanOpen('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
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.