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

Print Friendly, PDF & Email