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.
Consultazione
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 >