LECTURE

Description

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.

Modèle

Consultation

Utilisation

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 des enregistrements
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] Where evalue(WFIL) & evalue(WFIL1) & evalue(WFIL2) Order By Key SQH0
      When 2 : # tri par date
                    Filter
[SQH] Where evalue(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] Where evalue(WFIL) & evalue(WFIL1) & evalue(WFIL2) Order By Key SQH0 Desc
     When 2 : # tri par date
                   Filter
[SQH] Where evalue(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
[M:CSQ2] : Endif
       NBLU = 2
    Endif

#-- stockage des bornes début et fin d'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 qui a déclenché la lecture
                                 1     < Recherche >
                                 2     < Suite >
                                 3     < Raffraichissement >
                               - 1    < Dernier >
                               - 2    < Retour >
    MAXLIG :        nombre de lignes maximum dans le tableau.

Les variables disponibles en mise à jour sont les suivantes :

    NBLU :           nombre d'enregistrements à afficher.

    NOL :              indice de remplissage du tableau
                                l'incrémenter si CHGPAG > 0
                                le décrémenter si CHGPAG < 0

    SUITE :          permet de désactiver les boutons < Suite > et < Dernier >

    RETOUR :       permet de désactiver le bouton < Retour >