CLP - Récupérer le numéro de semaine

RPG (3 et 4, free), CL, SQL, etc...
Répondre
jcbas
Messages : 1
Enregistré le : ven. 11 févr. 2011, 15:41:59

CLP - Récupérer le numéro de semaine

Message par jcbas »

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

Jean Roussel
Messages : 8
Enregistré le : jeu. 11 déc. 2008, 11:41:42

(sans texte)

Message par Jean Roussel »

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.

germor
Messages : 75
Enregistré le : lun. 06 juin 2011, 08:01:43

(sans texte)

Message par germor »

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.

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
/*----------------------------------------------------------------------------*/ 
Bon courrage :wink:

Répondre