Vai al contenuto

Griglie Evolute - Griglie Modificabili

Gestione griglie modificabili

Z-99-ACCEPT-nomegrid

Routine da eseguire al posto di una accept diretta di una griglia, permette di gestire una serie di automatismi collegati alla gestione degli eventi, colori, ecc.

Esempio della chiamata alla routine Questa routine deve essere inserita in un programma nel punto in cui si esegue l'accept della griglia.

a-grid.
   modify e-frame-dettaglio, title = m-frame-dettaglio
   initialize x-enabled
   perform z-carica-controlli
   perform x-attiva-tf-grid
   modify e-tm-tab, enabled = 1
   .
a-accept-grid.
   perform z-99-accept-grid
   if wesc go to fine.
   if f-event
      if event-type = msg-begin-entry
         inquire e-tm-tab,
            entry-reason in w-entry-reason
         if w-entry-double-click or
            w-entry-enter
            set funzio to k-fun-invio
         end-if
      else
         go to x-test-mouse
      end-if
   end-if
   .....

Esempio della routine

**---------------------------------------------------------------**
** Routine per accept griglia: grid-det
**---------------------------------------------------------------**
z-99-accept-grid-det.
   move "S" to fl-sono-su-grid

   inquire e-grid-det, cursor-y in w-cell-y
   if last-row-grid-det > 1
      compute i-grid-color = last-row-grid-det - 1
      if i-grid-color > gor-r-n-m and
         gor-r-n-m > 0
         move gor-r-n-m to i-grid-color
      end-if
      perform X-SET-ROW-nomegrid-COLOR
      modify e-grid-det, y = last-row-grid-det,
         row-color = row-grid-color
   end-if

   if ext-riga-sel-griglie-mod = 'S' or
      fl-mod-grid-det <> 'S'
      modify e-grid-det, y = w-cell-y,
         row-color = ext-color-grid-row-sel
   end-if

   move w-cell-y to last-row-grid-det
   if w-cell-y > 1
      compute i = w-cell-y - 1
   end-if

   perform z-operazioni-acc-grid-det
   if w-grid-before-time = 0
      accept e-grid-det on exception continue
      end-accept
   else
      accept e-grid-det
         before time w-grid-before-time
         on exception continue
   end-if
   move "N" to fl-sono-su-grid
   inquire e-grid-det, id in control-id,
      cursor-x in w-cell-x,
      cursor-y in w-cell-y,
   if wesc
      exit paragraph
   end-if
   .

Z-99-EVENT-nomegrid

Routine che gestisce gli eventi principali per una griglia modificabile. Viene agganciato al componente "grid" nella screen section, ma viene anche richiamata in alcune procedure automatiche, soprattutto per scollegarla/ricollegarla alla griglia.

Esempio della routine

**---------------------------------------------------------------**
** Gestione eventi per griglia: grid-det
**---------------------------------------------------------------**
z-99-event-grid-det.
   if last-row-grid-det > 1
      inquire e-grid-det, y in w-cell-y
      compute i-grid-color = last-row-grid-det - 1
      perform x-set-row-grid-det-color
      modify e-grid-det,
         y = last-row-grid-det,
         row-color = row-grid-color
      modify e-grid-det, y = w-cell-y
   end-if

   if event-type = msg-goto-cell or
      event-type = msg-goto-cell-mouse
      inquire e-grid-det, y in w-cell-y
   else
      inquire e-grid-det, cursor-y in w-cell-y
   end-if
   inquire e-grid-det, x in w-cell-x
   if w-cell-y not = 0 and
      w-cell-y not = 1
      compute i = w-cell-y - 1
   end-if

   if fl-sono-su-grid = 'S'
      if ext-riga-sel-griglie-mod = 'S' or
         fl-mod-grid-det <> 'S'
         modify e-grid-det, y = w-cell-y,
            row-color = ext-color-grid-row-sel
      end-if
   end-if

   modify e-grid-det, event procedure null
   perform z-operazioni-acc-grid-det
   perform z-event-grid-det-ep
   perform z-gestione-tf-grid-det-auto

   evaluate event-type
   when msg-begin-entry
      if event-action = event-action-normal
         perform Z-nomegrid-BEGIN-ENTRY
      end-if
   when msg-finish-entry
      move 'S' to fl-validazione-post-accept
      perform z-grid-det-finish-entry
      move 'N' to fl-validazione-post-accept
   when msg-cancel-entry
      perform z-grid-det-cancel-entry
   end-evaluate
   perform z-event-grid-det-after

   modify e-grid-det, event procedure z-99-event-grid-det

   evaluate event-type
   when msg-col-width-changed
      perform x-grid-cambia-dimensione-colonna
   end-evaluate

   if w-cell-y > 1
      if ext-riga-sel-griglie-mod = 'S' or
         fl-mod-grid-det <> 'S'
         modify e-grid-det, y = w-cell-y,
            row-color = ext-color-grid-row-sel
      end-if
   end-if

   move w-cell-y to last-row-grid-det
   perform z-99-processa-event-grid-det
   .

X-RICALCOLA-nomegrid

Permette il ridimensionamento della griglia, se previsto su screens.

Esempio della chiamata alla routine Questa routine viene richiamata da alcune procedure automatiche, ma al bisogno può essere usata nel programma.

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

Esempio della routine

**---------------------------------------------------------------**
** Ricalcolo dimensioni griglia: grid-det
**---------------------------------------------------------------**
x-ricalcola-grid-det.
   compute w-size-grid-det =
      w-window-size - k-rel-size-grid-det
   move w-lines-grid-det to w-lines-grid-det-pre
   compute w-lines-grid-det =
      w-pix-form-cella-y *
      (w-window-lines - k-rel-lines-grid-det) /
      (w-pix-grid-cella-y + 1)
   compute w-lines-grid-det = w-lines-grid-det /
      ((ext-vpadding + 100) / 100)
   modify e-grid-det,
      lines = w-lines-grid-det,
      size = w-size-grid-det
   .

Z-PROCESSA-EVENT-nomegrid

(Sezione di smistamento eventi, dettagliata nel file griglie-modo-a.md)

Z-nomegrid-BEGIN-ENTRY

Gestione delle operazioni da eseguire prima della modifica di una cella.

Esempio della routine

**---------------------------------------------------------------**
** Gestione BEGIN-ENTRY griglia: grid-det
**---------------------------------------------------------------**
z-grid-det-begin-entry.
   if i = 0
      set event-action to event-action-fail-terminate
      exit paragraph
   end-if
   inquire e-grid-det, x in w-cell-x,
      entry-reason in w-entry-reason
   inquire e-grid-det (1, w-cell-x),
      hidden-data in w-hidden-data
   move 'S' to w-cell-accept-ok
   move ' ' to wb-msg

   evaluate w-hid-data-col-id
   when 'riga'
      move tm-r-riga (i) to grb-r-riga
      set event-action to event-action-fail-terminate
      ....
   end-evaluate
   if w-cell-accept-ok = 'N'
      set event-action to event-action-fail-terminate
   end-if
   .

Z-nomegrid-FINISH-ENTRY

Gestione delle operazioni da eseguire dopo la modifica di una cella.

Esempio della routine

**---------------------------------------------------------------**
** Gestione FINISH-ENTRY griglia: grid-det
**---------------------------------------------------------------**
z-grid-det-finish-entry.
   inquire e-grid-det,
      x in w-cell-x, y in w-cell-y,
      cell-data in w-cell-data,
      finish-reason in w-finish-reason
   inquire e-grid-det (1, w-cell-x),
      hidden-data in w-hidden-data

   move 'S' to fl-esc-agg
   move 'S' to tm-r-fl-riga-mod (i)

   evaluate w-hid-data-col-id
   when 'data'
      initialize util-s52
      move 'Acc-ext' to s52-ope
      move 'Z' to s52-verifica
      move w-cell-data to s52-data-edit
      set s52-handle-data to null
      call 'COGS52W' using stringhe util-s52
      if s52-esito = 'S'
         move s52-data to tm-r-data (i)
         modify e-grid-det (w-cell-y, w-cell-x),
            cell-data = s52-data-edit
      else
         set event-action to event-action-fail
      end-if
      if (w-finish-naviga or
         w-finish-reason > 0) and
         fl-validazione-contestuale = 'S'
         perform x-controlla-tm-r-data-auto
         perform x-ctr-color-tm-r-data
         if x-f3-ok-parziale = 'N'
            move x-f3-msg to wb-msg
            perform vbx-msg-error
            set event-action to event-action-fail-terminate
         end-if
      end-if
   when 'ora'
      initialize util-s93
      move 'Acc-ext' to s93-ope
      move 'Z' to s93-verifica
      move w-cell-data to s93-ora-edit
      call 'COGS93W' using stringhe util-s93
      if s93-esito = 'S'
         move s93-ora to tm-r-ora (i)
         modify e-grid-det (w-cell-y, w-cell-x),
            cell-data = s93-ora-edit
      else
         set event-action to event-action-fail
      end-if
   when 'val-f'
      initialize util-gridcol
      move 'CERCA-DES' to gridcol-ope
      ...
   when 'ana-des'
      move w-cell-data to tm-r-ana-des (i)
      ...
   when 'check'
      continue
   when 'ana-cod'
      move function numval(w-cell-data)
         to tm-r-ana-cod (i)
      ...
   when 'mer'
      perform z-grid-det-fe-mer
   end-evaluate
   initialize w-finish-reason
   .

Z-nomegrid-CANCEL-ENTRY

Gestione delle operazioni da eseguire dopo che l'utente ha annullato la modifica di una cella.

Esempio della routine

**---------------------------------------------------------------**
** Gestione CANCEL-ENTRY griglia: grid-det
**---------------------------------------------------------------**
z-grid-det-cancel-entry.
   if tm-grid-det-dati-pnt = 0
      exit paragraph
   end-if
   inquire e-grid-det (1, w-cell-x),
      hidden-data in w-hidden-data

   evaluate w-hid-data-col-id
   when 'data'
      move grb-r-data to tm-r-data (i)
      perform x-controlla-tm-r-data-auto
      perform x-ctr-color-tm-r-data
   when 'ora'
      move grb-r-ora to tm-r-ora (i)
   when 'val-f'
      move grb-r-val-f to tm-r-val-f (i)
   when 'ana-des'
      move grb-r-ana-des to tm-r-ana-des (i)
   when 'check'
      move grb-r-check to tm-r-check (i)
   when 'ana-cod'
      move grb-r-ana-cod to tm-r-ana-cod (i)
      perform x-controlla-tm-r-ana-cod-auto
      perform x-ctr-color-tm-r-ana-cod
   when 'mer'
      move grb-r-mer-cm to tm-r-mer-cm (i)
      move grb-r-mer-dm to tm-r-mer-dm (i)
      perform x-controlla-tm-r-mer-auto
      perform x-ctr-color-tm-r-mer
   end-evaluate
   move i to k-rg
   perform x-modify-riga-grid-det
   .

Estratto da documentazione interna ClickUp