Bonjour je cherche à récupérer en CL si le dimanche qui vient est le 1er , 2eme , 3eme, 4eme ou 5eme du mois.
Des idées en CL ou SQL ?
Merci
CLP - Récupérer le numéro de semaine
-
- Messages : 8
- Enregistré le : jeu. 11 déc. 2008, 11:41:42
(sans texte)
Bjr
Par sql, j'utiliserais la fonction WEEKISO, 1 fois pour le 1er jour du mois, et 1 fois pour le jour en cours. La différence entre les 2 n° de semaine (avec peut-être un ajustement +1) doit donner le rang du dimanche suivant.
Pour cela il faut appeler un pgm en RPG par exemple, en CL seul, on ne peut pas récupérer un résultat de requête sql dans une variable.
Par sql, j'utiliserais la fonction WEEKISO, 1 fois pour le 1er jour du mois, et 1 fois pour le jour en cours. La différence entre les 2 n° de semaine (avec peut-être un ajustement +1) doit donner le rang du dimanche suivant.
Pour cela il faut appeler un pgm en RPG par exemple, en CL seul, on ne peut pas récupérer un résultat de requête sql dans une variable.
(sans texte)
Bonjour jcbas,
Je suis en V5R4.
J'ai fait un CL qui semble correspondre à ton besoin.
C'est UN CLLE à compiler par 14 sous PDM.
Il est sûrement à améliorer.
Tu peux enlever les commentaires et les envois de messages intermédiaires pour mise au point.
Ça m'a fait réviser mon CL.
Bon courrage
Je suis en V5R4.
J'ai fait un CL qui semble correspondre à ton besoin.
C'est UN CLLE à compiler par 14 sous PDM.
Il est sûrement à améliorer.
Tu peux enlever les commentaires et les envois de messages intermédiaires pour mise au point.
Ça m'a fait réviser mon CL.
Code : Tout sélectionner
/*----------------------------------------------------------------------------*/
PGM
DCL VAR(&DATE) TYPE(*CHAR) LEN(6)
DCL VAR(&DAT6) TYPE(*DEC) LEN(6)
DCL VAR(&SHORTDAY) TYPE(*CHAR) LEN(4)
DCL VAR(&DATEDUDIM) TYPE(*DEC) LEN(6)
DCL VAR(&PREMDUMOI) TYPE(*DEC) LEN(6)
DCL VAR(&DELTA) TYPE(*DEC) LEN(6)
DCL VAR(&CATEDUDIM) TYPE(*CHAR) LEN(6)
DCL VAR(&CREMDUMOI) TYPE(*CHAR) LEN(6)
MONMSG MSGID(CPF0000) EXEC(GOTO ERREUR)
/* -------------------------------------------------------------- */
/* Récupération date du jour , cvt en YYMMDD et mise en numérique */
/* -------------------------------------------------------------- */
RTVSYSVAL SYSVAL(QDATE) RTNVAR(&DATE)
CVTDAT DATE(&DATE) TOVAR(&DATE) FROMFMT(*JOB) +
TOFMT(*YMD) TOSEP(*NONE)
CHGVAR VAR(&DAT6) VALUE(&DATE)
/* ------------------------------------------------------------- */
/* Récupération jour de la semaine et calcul du dimanche suivant */
/* ------------------------------------------------------------- */
RTVSYSVAL SYSVAL(QDAYOFWEEK) RTNVAR(&SHORTDAY)
SELECT
WHEN COND(&SHORTDAY = '*SUN') THEN(CHGVAR +
VAR(&DATEDUDIM) VALUE(&DAT6))
WHEN COND(&SHORTDAY = '*MON') THEN(CHGVAR +
VAR(&DATEDUDIM) VALUE(&DAT6 + 6))
WHEN COND(&SHORTDAY = '*TUE') THEN(CHGVAR +
VAR(&DATEDUDIM) VALUE(&DAT6 + 5))
WHEN COND(&SHORTDAY = '*WED') THEN(CHGVAR +
VAR(&DATEDUDIM) VALUE(&DAT6 + 4))
WHEN COND(&SHORTDAY = '*THU') THEN(CHGVAR +
VAR(&DATEDUDIM) VALUE(&DAT6 + 3))
WHEN COND(&SHORTDAY = '*FRI') THEN(CHGVAR +
VAR(&DATEDUDIM) VALUE(&DAT6 + 2))
WHEN COND(&SHORTDAY = '*SAT') THEN(CHGVAR +
VAR(&DATEDUDIM) VALUE(&DAT6 + 1))
ENDSELECT
/* --------------------------------------------------------------- */
/* Mise en charactere de la date du dimanche pour envoi de message */
/* --------------------------------------------------------------- */
CHGVAR VAR(&CATEDUDIM) VALUE(&DATEDUDIM)
SNDPGMMSG MSG(&CATEDUDIM) TOPGMQ(*PRV *) +
MSGTYPE(*COMP)
/* ------------------------------ */
/* Calcul du premier jour du mois */
/* ------------------------------ */
CHGVAR VAR(&DAT6) VALUE(&DAT6 / 100)
CHGVAR VAR(&PREMDUMOI) VALUE( (&DAT6 * 100) + 1)
/* --------------------------------------------------------------- */
/* Mise en charactere la date du 1er du mois pour envoi de message */
/* --------------------------------------------------------------- */
CHGVAR VAR(&CREMDUMOI) VALUE(&PREMDUMOI)
SNDPGMMSG MSG(&CREMDUMOI) TOPGMQ(*PRV *) +
MSGTYPE(*COMP)
/* ----------------------------------------------------------------------- */
/* Calcul du delta entre le dimanche et le 1er du mois et message résultat */
/* ----------------------------------------------------------------------- */
CHGVAR VAR(&DELTA) VALUE(&DATEDUDIM - &PREMDUMOI)
IF (&DELTA *LT 7) THEN(DO)
SNDPGMMSG MSG('1er Dimanche du mois') TOPGMQ(*PRV *) +
MSGTYPE(*COMP)
ENDDO
IF ((&DELTA *GT 6) *AND (&DELTA *LT 14)) THEN(DO)
SNDPGMMSG MSG('2ième Dimanche du mois') TOPGMQ(*PRV *) +
MSGTYPE(*COMP)
ENDDO
IF ((&DELTA *GT 13) *AND (&DELTA *LT 21)) THEN(DO)
SNDPGMMSG MSG('3ièmé Dimanche du mois') TOPGMQ(*PRV *) +
MSGTYPE(*COMP)
ENDDO
IF ((&DELTA *GT 20) *AND (&DELTA *LT 28)) THEN(DO)
SNDPGMMSG MSG('4ième Dimanche du mois') TOPGMQ(*PRV *) +
MSGTYPE(*COMP)
ENDDO
IF (&DELTA *GT 27) THEN(DO)
SNDPGMMSG MSG('5ième Dimanche du mois') TOPGMQ(*PRV *) +
MSGTYPE(*COMP)
ENDDO
GOTO FIN
ERREUR:
SNDPGMMSG MSG('fin en erreur') TOPGMQ(*PRV *) +
MSGTYPE(*COMP)
/* SNDPGMMSG MSG('le jour du mois est' *BCAT &SHORTDAY + */
/* *TCAT ' (' *BCAT &LONGDAY *TCAT '). La + */
/* Date est ' *BCAT &DATE) TOMSGQ(MORVANT) + */
/* MSGTYPE(*INQ) RPYMSGQ(MORVAN) */
FIN:
ENDPGM
/*----------------------------------------------------------------------------*/