Skip to main content

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 / 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

  • 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

Menu : act_exercices.Enabled := CanOpen('TM_EXO')
Init : InitOpenOf('TM_EXO', FonctionOK(110,100) and DroitSurToutesSection)

  • Après 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

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.