Accueil du site > Les articles > Récupération de la date système
Version à imprimer Enregistrer au format PDF

Récupération de la date système

mercredi 11 août 2004, par Grégory Jarrige Visites  7240 |Popularité : 23%  Première mise en ligne le jeudi 6 novembre 2003.

outil de récupération de la date système


En RPG, il est facile de récupérer la date système

Grâce aux variables *DAY, *MONTH et *YEAR (à utiliser de préférence à UDAY, UMONTH et UYEAR).

En Adélia, les variables équivalentes à *DAY, *MONTH et *YEAR sont *JOUR, *MOIS et *ANNEE4. On peut par exemple récupérer la date système au format SSAAMMJJ par la formule suivante :

W_DATE_SYS = *ANNEE4 * 10000 + *MOIS * 100 + *JOUR

Mais il y a un piège !!!, et mes collègues et moi somme tombés dedans récemment.

En effet, la date que l’on récupère selon la méthode évoquée ci-dessus, n’est pas réellement la date système, mais la date d’ouverture de la session de l’utilisateur. Ce n’est généralement pas un problème, car la plupart des utilisateurs travaillent de jour. Mais dans certaines sociétés, les utilisateurs commencent à travailler à 21h pour terminer le lendemain matin à 5h. Lorsque ces utilisateurs se connectent à votre application à 21h, les variables *DAY, *MONTH et *YEAR sont préchargées avec la date du jour, et elles ne sont jamais rafraîchies, quoique vous fassiez, jusqu’au moment où l’utilisateur ferme sa session. Sur un programme de saisie de commande, qui a besoin de stocker la date de saisie de commande, ou d’effectuer des calculs à partir de cette date, cela peut avoir des conséquences désastreuses.

Pour pallier ce problème, je me suis rabattu sur la date système stockée dans les valeurs système, et que l’on peut récupérer par la commande RTVSYSVAL. Cette date système est parfaitement fiable puisque c’est l’horloge de l’AS/400. J’ai donc créé une règle de gestion que j’ai appelée RECUP_DAT_SYS, règle de gestion qui appelle un petit CL dont vous trouverez le source ci-dessous. Ce CL retourne une date système au format SSAAMMJJ.

/**************************************************************************/
/*  FONCTION  :   RECUPERATION DATE SYSTEME                               */
/*                                                                        */
/*  PARAMETRES : &DATDES --->  DATE AU FORMAT SSAAMMJJ                    */
/*                                                                        */
/**************************************************************************/
             PGM        PARM(&DATDES)

             DCL        VAR(&DATORI) TYPE(*CHAR) LEN(6)
             DCL        VAR(&DATDES) TYPE(*CHAR) LEN(8)    
             RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&DATORI)
             CVTDAT     DATE(&DATORI) TOVAR(&DATDES) +
                        FROMFMT(*SYSVAL) TOFMT(*YYMD) TOSEP(*NONE)

             ENDPGM