Insieme di routine necessarie nell'ambito dello spaginamento griglia, per il corretto posizionamento sui record del file di transito;
Esempio della chiamata alla routine
Vengono richiamate da altre routine automatiche.
Esempio delle routine
*------------------------------------------------------------------*
* Restart per chiave non minore
*------------------------------------------------------------------*
grid-det-rn-start-not-less.
perform st-t-grid-det-notmin-chia2
if not w-verbo-ok
move gor-r-end-read to gor-r-fl-read
end-if
.
*------------------------------------------------------------------*
* Restart in avanti
*------------------------------------------------------------------*
grid-det-rn-start.
perform st-t-grid-det-may-chia2
if not w-verbo-ok
move gor-r-end-read to gor-r-fl-read
end-if
.
*------------------------------------------------------------------*
* Restart all'indietro
*------------------------------------------------------------------*
grid-det-rp-start-less.
perform st-t-grid-det-min-chia2
if not w-verbo-ok
move gor-r-end-read to gor-r-fl-read
end-if
.
*------------------------------------------------------------------*
* Restart per chiave identica
*------------------------------------------------------------------*
grid-det-rp-start-equal.
perform st-t-grid-det-equal-chia2
.
*------------------------------------------------------------------*
* Muovo la prima chiave sulla chiave di lettura
*------------------------------------------------------------------*
grid-det-rp-fill-key.
move gor-r-t-key to t-gor-r-chia2
.
*------------------------------------------------------------------*
* Muovo l'ultima chiave sulla chiave di lettura
*------------------------------------------------------------------*
grid-det-rp-fill-key-from-b.
move gor-r-b-key to t-gor-r-chia2
.
*------------------------------------------------------------------*
* Lettura record successivo/precedente
*------------------------------------------------------------------*
grid-det-sn-read.
perform rdnxt-t-grid-det
.
grid-det-sp-read.
perform rdprv-t-grid-det
.
*------------------------------------------------------------------*
* Salvo la chiave del record sulla prima chiave
*------------------------------------------------------------------*
grid-det-fill-t-key.
move t-gor-r-chia2 to gor-r-t-key
.
*------------------------------------------------------------------*
* Salvo la chiave del record sulla ultima chiave
*------------------------------------------------------------------*
grid-det-fill-b-key.
move t-gor-r-chia2 to gor-r-b-key
.
*------------------------------------------------------------------*
* Eseguo una restart in avanti
*------------------------------------------------------------------*
grid-det-rst-next.
move 'E' to gor-r-end-read
move gor-r-w-t-size to gor-r-t-size
move 0 to gor-r-n-m
perform grid-det-rn-start
perform until
gor-r-n-m = gor-r-t-size or
gor-r-fl-read = gor-r-end-read
perform grid-det-src-next
end-perform
move gor-r-n-m to gor-r-t-size
.
*------------------------------------------------------------------*
* Eseguo una restart per chiave non minore
*------------------------------------------------------------------*
grid-det-rst-not-less.
move 'E' to gor-r-end-read
move gor-r-w-t-size to gor-r-t-size
move 0 to gor-r-n-m
perform grid-det-rn-start-not-less
perform until
gor-r-n-m = gor-r-t-size or
gor-r-fl-read = gor-r-end-read
perform grid-det-src-next
end-perform
move gor-r-n-m to gor-r-t-size
.
*------------------------------------------------------------------*
* Eseguo una restart all'indietro
* Comprende una start all'indietro e una in avanti
*------------------------------------------------------------------*
grid-det-rst-previous.
move 'B' to gor-r-end-read
move gor-r-w-t-size to gor-r-t-size
move 0 to gor-r-n-m
perform grid-det-rp-start-less
perform until
gor-r-n-m = gor-r-t-size or
gor-r-fl-read = gor-r-end-read
perform grid-det-src-previous
end-perform
move 'E' to gor-r-end-read
move 0 to gor-r-n-m
perform grid-det-rp-fill-key
perform grid-det-rp-start-equal
if stato = '00'
perform until
gor-r-n-m = gor-r-t-size or
gor-r-fl-read = gor-r-end-read
perform grid-det-src-next
end-perform
end-if
move gor-r-n-m to gor-r-t-size
.
*------------------------------------------------------------------*
* Ricerca del record successivo
*------------------------------------------------------------------*
grid-det-src-next.
perform grid-det-sn-read
if stato = '10' or stato = '46'
move gor-r-end-read to gor-r-fl-read
end-if
perform grid-det-controlli-read
if gor-r-fl-read <> gor-r-end-read
perform grid-det-controlli-fill
perform grid-det-fill-b-key
if gor-r-n-m = 1 and
gor-r-fl-fill <> 'N'
perform grid-det-fill-t-key
end-if
end-if
.
*------------------------------------------------------------------*
* Ricerca del record precedente
*------------------------------------------------------------------*
grid-det-src-previous.
perform grid-det-sp-read
if stato = '10' or stato = '46'
move gor-r-end-read to gor-r-fl-read
end-if
perform grid-det-controlli-read
if gor-r-fl-read <> gor-r-end-read
perform grid-det-controlli-fill
perform grid-det-fill-t-key
if gor-r-n-m = 1 and
gor-r-fl-fill <> 'N'
perform grid-det-fill-b-key
end-if
end-if
.
*------------------------------------------------------------------*
* Scroll in basso di una riga
*------------------------------------------------------------------*
grid-det-pg-after-giu.
move gor-r-t-key to gor-r-t-key-dep
perform grid-det-rp-fill-key
perform grid-det-rst-next
if gor-r-n-m < gor-r-t-length
move gor-r-t-key-dep to gor-r-t-key
perform grid-det-rp-fill-key
move ' ' to gor-r-fl-read
perform grid-det-rst-not-less
end-if
.
*------------------------------------------------------------------*
* Scroll in alto di una riga
*------------------------------------------------------------------*
grid-det-pg-after-su.
move gor-r-b-key to gor-r-b-key-dep
perform grid-det-rp-fill-key-from-b
perform grid-det-rst-previous
if gor-r-n-m < gor-r-t-length
move gor-r-b-key-dep to gor-r-b-key
perform grid-det-rp-fill-key-from-b
move ' ' to gor-r-fl-read
perform grid-det-rst-previous
end-if
.
*------------------------------------------------------------------*
* Scroll in basso di una pagina intera
*------------------------------------------------------------------*
grid-det-pg-after-pg-dwn.
perform grid-det-rp-fill-key-from-b
perform grid-det-rst-next
if gor-r-n-m = 0
perform grid-det-rp-fill-key
move ' ' to gor-r-fl-read
perform grid-det-rst-not-less
end-if
.
*------------------------------------------------------------------*
* Scroll in alto di una pagina intera
*------------------------------------------------------------------*
grid-det-pg-after-pg-up.
perform grid-det-rp-fill-key
perform grid-det-rst-previous
if gor-r-n-m = 0
perform grid-det-rp-fill-key-from-b
move ' ' to gor-r-fl-read
perform grid-det-rst-previous
end-if
.
*------------------------------------------------------------------*
* Reload della pagina corrente
*------------------------------------------------------------------*
grid-det-pg-reload.
move gor-r-t-key to gor-r-t-key-dep
perform grid-det-rp-fill-key
initialize gor-r-fl-read
perform grid-det-rst-not-less
.
*------------------------------------------------------------------*
* Gestione eventi su griglia: grid-det
*------------------------------------------------------------------*
z-99-processa-event-grid-det.
evaluate event-type
when msg-begin-entry
evaluate w-grid-entry-reason
when x'00'
move 'DBLCLICK' to w-grid-entry-reason
when x'0D'
move 'ENTER' to w-grid-entry-reason
end-evaluate
when msg-paged-prev
if gor-r-fl-read = 'B' or
(gor-r-fl-read = 'E' and
gor-r-n-m = 0)
continue
else
modify e-grid-det, event null
perform grid-det-pg-after-su
perform z-costruisci-grid-det
perform z-operazioni-acc-grid-det
modify e-grid-det, event z-99-event-grid-det
end-if
when msg-paged-next
if gor-r-fl-read = 'E'
continue
else
modify e-grid-det, event null
perform grid-det-pg-after-giu
perform z-costruisci-grid-det
if i > gor-r-n-m
move gor-r-n-m to i
modify e-grid-det, cursor-y = i + 1
end-if
perform z-operazioni-acc-grid-det
modify e-grid-det, event z-99-event-grid-det
end-if
when msg-paged-nextpage
if gor-r-fl-read <> 'E'
set event-action to event-action-terminate
modify e-grid-det, event null
perform grid-det-pg-after-pg-dwn
perform z-costruisci-grid-det
if i > gor-r-n-m
move gor-r-n-m to i
modify e-grid-det, cursor-y = i + 1
end-if
perform z-operazioni-acc-grid-det
modify e-grid-det, event z-99-event-grid-det
end-if
when msg-paged-prevpage
if gor-r-fl-read = 'B' or
(gor-r-fl-read = 'E' and
gor-r-n-m = 0)
continue
else
set event-action to event-action-terminate
modify e-grid-det, event null
perform grid-det-pg-after-pg-up
perform z-costruisci-grid-det
perform z-operazioni-acc-grid-det
modify e-grid-det, event z-99-event-grid-det
end-if
when msg-heading-dblclick
if event-data-2 = 1
move 'S' to w-grid-det-ord-reset
if gor-r-pnt = 1 and
gor-r-col (1) = event-data-1
move k-pmg-ord-aggiungi-des to funzio
else
move k-pmg-ord-aggiungi-asc to funzio
end-if
modify e-grid-det,
cursor-x = event-data-1,
x = event-data-1
perform z-grid-det-ord-aggiungi
perform z-grid-det-riordina
if gor-r-ok = 'S'
set event-action to event-action-terminate
modify e-grid-det, event null
perform z-grid-det-carica-tab
modify e-grid-det, event z-99-event-grid-det
end-if
end-if
when other
perform z-operazioni-acc-grid-det
end-evaluate
.
*------------------------------------------------------------------*
* Gestione del ridimensionamento di una form in
* presenza di griglia paged: grid-det
*------------------------------------------------------------------*
z-ntf-resized-on-grid-det.
compute w-window-lines = event-data-1 / 100
compute w-window-size = event-data-2 / 100
perform x-ricalcola-grid-det
compute gor-r-w-t-size = w-lines-grid-det - 1
move gor-r-w-t-size to gor-r-t-length gor-r-t-size
if w-lines-grid-det-pre not = w-lines-grid-det
if gor-r-n-m <> 0
initialize gor-r-fl-read
perform grid-det-rp-fill-key
perform grid-det-rst-not-less
end-if
if fl-sono-su-grid = 'S'
perform z-costruisci-grid-det
end-if
inquire e-grid-det, cursor-y in w-cell-y
if w-cell-y > (gor-r-t-length + 1)
compute w-cell-y = gor-r-t-length + 1
modify e-grid-det, cursor-y = w-cell-y
move gor-r-t-length to i
end-if
end-if
.