Cette action est appelée quand on lance la recherche, c'est à dire au lancement de la fonction, lorsque l'on pagine ou lorsque l'on change les critères. Cette action est indispensable pour alimenter l'écran de consultation par l'ensemble des enregistrements sélectionnés.
Consultation
Elle est indispensable et sert à alimenter l'écran de consultation par l'ensemble des enregistrements sélectionnés. On appelle l'action "FILTRE" afin que le spécifique puisse éventuellement insérer un filtre de sélection. Cette action sera écrite sur le modèle ci-dessous (extrait de la consultation des devis). Ce qui est particulier à l'exemple, est inscrit en caractères non gras.
$LECTURE
#-- critères obligatoires (section facultative)
If [M:CSQ1]CPY="" & [M:CSQ1]SALFCY="": NBLU=0 : Return
Endif
Gosub CHANGE_MSK From GCONSULT
If CHGPAG<0 : NOL = MAXLIG : Endif
#-- Positionnement des Filtres
Gosub LOAD_FILTER
#-- dans les traitements standards uniquement: appel au spécifique
If PROGSPE<>""
ACTION = "FILTRE" : Gosub ACTION From =PROGSPE
Endif
#-- Application des Filtres et tri desenregistrements
If CHGPAG > 0
SUITE=1
If CHGPAG = 1 : RETOUR = 1 : Elsif CHGPAG = 2 : RETOUR = 2 : Endif
Case[M:CCSQ]TRI
When 1 : # tri par numéro
Filter[SQH] Whereevalue(WFIL) & evalue(WFIL1) & evalue(WFIL2) Order By Key
When 2 : # tri par date
Filter[SQH] Whereevalue(WFIL) & evalue(WFIL1) & evalue(WFIL2)
& Order By Key CLE=[F:SQH]QUODAT;[F:SQH]SQHNUM
Endcase
Else
RETOUR=1
If CHGPAG = -1 : SUITE = 1 : Else SUITE = 2 : Endif
Case[M:CCSQ]TRI
When 1 : # tri par numéro
Filter[SQH] Whereevalue(WFIL) & evalue(WFIL1) & evalue(WFIL2) Order By Key
When 2 : # tri par date
Filter[SQH] Whereevalue(WFIL) & evalue(WFIL1) & evalue(WFIL2)
& Order By[F:SQH]QUODAT Desc ;[F:SQH]SQHNUM Desc
Endcase
Endif
#-- raz du masque si 1ere ou dernière page
If CHGPAG<>2 & CHGPAG<>-2 : Raz [M:CSQ2] : Endif
#-- boucle de lecture
$BOUCLE
For[SQH]
#-- Filtre supplémentaire(section facultative)
If [M:CSQ1]CPY <> ""
If [F:FCY]FCY <> [F:SQH]SALFCY
Read [F:FCY]FCY0 = [F:SQH]SALFCY
If fstat Raz [F:FCY] : Endif
Endif
If [F:FCY]LEGCPY <> [M:CSQ1]CPY Goto SUIV :Endif
Endif
If NBLU = 1
If CHGPAG=2 | CHGPAG=-2 : Raz
NBLU = 2
Endif
#-- stockage des bornes début et find'enregistrement pour l'écran
If CHGPAG > 0
If NOL >= MAXLIG-1 : SUITE=2 : Break : Endif
NOL += 1
If NOL=0
DEBNUM =[F:SQH]SQHNUM
DEBDAT = [F:SQH]QUODAT
Endif
FINNUM = [F:SQH]SQHNUM
FINDAT = [F:SQH]QUODAT
Else
If NOL <= 0 : RETOUR=2 : Break : Endif
NOL -= 1
If NOL=MAXLIG-1
FINNUM = [F:SQH]SQHNUM
FINDAT = [F:SQH]QUODAT
Endif
DEBNUM =[F:SQH]SQHNUM
DEBDAT = [F:SQH]QUODAT
Endif
#-- chargement du masque
nolign = NOL+1
[M:CSQ2]SQHNUM(nolign-1) = [F:SQH]SQHNUM
[M:CSQ2]BPCORD(nolign-1) = [F:SQH]BPCORD
[M:CSQ2]QUODAT(nolign-1) = [F:SQH]QUODAT
[M:CSQ2]VLYDAT(nolign-1) = [F:SQH]VLYDAT
[M:CSQ2]QUOSTA(nolign-1) = [F:SQH]QUOSTA
[M:CSQ2]QUONOT(nolign-1) = [F:SQH]QUONOT
[M:CSQ2]QUOATI(nolign-1) = [F:SQH]QUOATI
[M:CSQ2]CUR(nolign-1) = [F:SQH]CUR
...
$SUIV
Next
Filter[SQH]
Return
#--- Préparation du filtre #
$LOAD_FILTER
WFIL = "1=1"
WFIL1 = "1=1"
WFIL2 = "1=1"
If [M:CSQ1]SALFCY <> ""
WFIL += "&[F:SQH]SALFCY=[M:CSQ1]SALFCY"
Endif
...
Case CHGPAG
When 3 : # rafraichissement
Case [M:CCSQ]TRI
When 1: # tri par numéro
WFIL1 += "&[F:SQH]SQHNUM>=DEBNUM"
When 2 : # tri par date
WFIL1 += "&([F:SQH]QUODAT>DEBDAT | ([F:SQH]QUODAT=DEBDAT &[F:SQH]SQHNUM>=DEBNUM))"
Endcase
When 2 : # suite
Case [M:CCSQ]TRI
When 1: # tri par numéro
WFIL1 += "&[F:SQH]SQHNUM>FINNUM"
When 2 : # tri par date
WFIL1 += "&([F:SQH]QUODAT>FINDAT | ([F:SQH]QUODAT=FINDAT &[F:SQH]SQHNUM>FINNUM))"
Endcase
When -2 : # retour
Case [M:CCSQ]TRI
When 1: # tri par numéro
WFIL1 += "&[F:SQH]SQHNUM<DEBNUM"
When 2 : # tri par date
WFIL1 += "& ([F:SQH]QUODAT<DEBDAT | ([F:SQH]QUODAT=DEBDAT &[F:SQH]SQHNUM<DEBNUM))"
Endcase
Endcase
Return
Les variables disponibles en lecture sont les suivantes :
CHGPAG : identifie l'action quia déclenché la lecture
1 < Recherche >
2 < Suite >
3 < Raffraichissement >
- 1 < Dernier >
- 2 < Retour >
MAXLIG : nombre de lignesmaximum dans le tableau.
Les variables disponibles en mise à jour sont les suivantes :
NBLU : nombred'enregistrements à afficher.
NOL : indice de remplissage du tableau
l'incrémenter si CHGPAG > 0
le décrémenter si CHGPAG < 0
SUITE : permet dedésactiver les boutons < Suite > et < Dernier >
RETOUR : permet de désactiver lebouton < Retour >