LECTURE

Descrizione

Questa azione è richiamata quando si lancia la ricerca, cioè al lancio della funzione, quando si pagina o quando si cambiano i criteri. Questa azione è indispensabile per alimentare la videata di consultazione con l'insieme dei record selezionati.

Modello

Consultazione

Utilizzo

E' indispensabile e serve ad alimentare la videata di consultazione con l'insieme dei record selezionati. Si chiama l'azione "FILTRE" affinché lo specifico possa eventualmente inserire un filtro di selezione. Questa azione sarà scritta sul modello sottostante (estratto della consultazione delle offerte). Quanto è particolare nell'esempio è scritto in caratteri non in grassetto.

$LECTURE
#-- criteri obbligatori (sezione facoltativa)
If [M:CSQ1]CPY="" & [M:CSQ1]SALFCY="": NBLU=0 : Return
Endif

Gosub CHANGE_MSK From GCONSULT
If CHGPAG<0 : NOL = MAXLIG : Endif

#-- Posizionamento dei Filtri
Gosub LOAD_FILTER

#-- solo nei programmi standard: chiamata allo specifico
If PROGSPE<>""
ACTION = "FILTRE" : Gosub ACTION From =PROGSPE
Endif

#-- Applicazione dei Filtri ed ordinamento dei record
If CHGPAG > 0
   SUITE=1
   If CHGPAG = 1 : RETOUR = 1 : Elsif CHGPAG = 2 : RETOUR = 2 : Endif
   Case
[M:CCSQ]TRI
      When 1 : # ordinamento per numero
                    Filter
[SQH] Where evalue(WFIL) & evalue(WFIL1) & evalue(WFIL2) Order By KeySQH0
      When 2 : # ordinamento per data
                    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 : # ordinamento per numero
                    Filter
[SQH] Where evalue(WFIL) & evalue(WFIL1) & evalue(WFIL2) Order By KeySQH0 Desc
     When 2 : # ordinamento per data
                   Filter
[SQH] Where evalue(WFIL) & evalue(WFIL1) & evalue(WFIL2)
                                      & Order By
[F:SQH]QUODAT Desc ;[F:SQH]SQHNUM Desc
   Endcase
Endif

#-- reset della videata se prima o ultima pagina
If CHGPAG<>2 & CHGPAG<>-2 : Raz [M:CSQ2] : Endif

#-- ciclo di lettura
$BOUCLE
For
[SQH]

    #-- Filtro supplementare (sezione facoltativa)
    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

#-- memorizzazione degli intervalli inizio e fine di record per la videata
   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

   #-- caricamento della videata
   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

#--- Preparazione del filtro #
$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 : # refresh
      Case [M:CCSQ]TRI
       
   When 1 : # ordinamento per numero
                        WFIL1 += "&[F:SQH]SQHNUM>=DEBNUM"
          When 2 : # ordinamento per data
                        WFIL1 += "&([F:SQH]QUODAT>DEBDAT | ([F:SQH]QUODAT=DEBDAT & [F:SQH]SQHNUM>=DEBNUM))"

      Endcase
   When 2 : # seguito
      Case [M:CCSQ]TRI
       
   When 1 : # ordinamento per numero
                        WFIL1 += "&[F:SQH]SQHNUM>=DEBNUM"
          When 2 : # ordinamento per data
                        WFIL1 += "&([F:SQH]QUODAT>FINDAT | ([F:SQH]QUODAT=FINDAT & [F:SQH]SQHNUM>FINNUM))"
      Endcase

   When -2 : # indietro
      Case [M:CCSQ]TRI
       
   When 1 : # ordinamento per numero
                        WFIL1 += "&[F:SQH]SQHNUM<DEBNUM"
          When 2 : # ordinamento per data
                        WFIL1 += "& ([F:SQH]QUODAT<DEBDAT | ([F:SQH]QUODAT=DEBDAT & [F:SQH]SQHNUM<DEBNUM))"
      Endcase

Endcase
Return

Le variabili disponibili in lettura sono le seguenti:

    CHGPAG :        identifica l'azione che ha attivato la lettura
                                 1     < Ricerca >
                                 2     < Successivo >
                                 3     < Refresh >
                               - 1    < Ultimo >
                               - 2    < Indietro >
    MAXLIG :        numero massimo di righe nel riquadro.

Le variabili disponibili in aggiornamento sono le seguenti:

    NBLU :           numero di record da visualizzare.

    NOL :              indice di alimentazione del riquadro
                                incrementarlo se CHGPAG > 0
                                decrementarlo se CHGPAG < 0

    SUITE :          permette di disattivare i bottoni < Successivo > e < Ultimo >

    RETOUR :       permette di disattivare il bottone < Indietro >