Vai al contenuto

Griglie Evolute - File TM e Programma Sorgente

'NOMEPRG'.TM

Questo file contiene l'elenco delle variabili associate ai controlli non indicizzati di una maschera. Conterrà solo un gruppo di dati con livello "02" che dovrà essere messo, se necessario all'interno di TAB-MASCHERA. Se incluso, non sarà necessario definire manualmente i campi di w/s relativi.

TM-INTERFACCIA

*----------------------------------------------------------------*
* Interfaccia con impostazioni predefinite
*----------------------------------------------------------------*
02 tm-interfaccia.
   03 tm-zona              pic x(0003).
   03 tm-zona-des           pic x(0040).
   03 tm-tecnico            pic 9(0010).
   03 tm-tecnico-des        pic x(0030).
   03 tm-ana-cod-c          pic 9(0005).
   03 tm-ana-des-c          pic x(0040).
   03 tm-amtr-dst-idx       pic 9(0004).
   03 tm-stato-chiamata     pic x(0002).
   03 tm-stato-chiamata-des pic x(0060).
   03 tm-descrizione        pic x(0060).
   03 tm-chiamata-da        pic 9(0008).
   .......

(esempio prelevato da ASN210)

In questo gruppo dati è inclusa la variabile associata ai controlli della maschera. Sono escluse le variabili dei seguenti controlli: - Controllo di tipo etichetta, frame, griglia - Controllo associato ad un indice ("Value"="Indice") - Nome controllo non indicato

Per ciascuna variabile viene definito tipo e dimensione in funzione delle caratteristiche indicate in Screens.

NB: Aggiungere, se desiderato, questa copy nel sorgente immediatamente sotto a TAB-MASCHERA:

01 tab-maschera.
   copy "asn210.tm".
   02 tm-dati.
      04 tm-tipo-chiamata pic x(01).
      ......

In tal caso rimuovere i singoli campi direttamente da TAB-MASCHERA.


Programma sorgente

Descrizione delle sezioni necessarie di un programma sorgente che gestisce una griglia modificabile.

X-GRIDADMN-'nomegrid'-EP

Per ciascuna griglia modificabile occorre aggiungere nel programma sorgente questa perform. Può anche essere lasciata vuota. Può essere utile per:

Gestire le colonne "custom" Ovvero quelle colonne che devono essere rese forzatamente visibili/invisibili, a seconda di alcune configurazioni o particolarità dell'utente.

Ad esempio, nel programma FORM71 di EUROFORM, le colonne con "Qualifica" sono visibili se il cliente prevede la gestione della qualifica prodotto, e attiva l'apposita configurazione.

In tal caso si dovrà creare una subroutine con le istruzioni che servono, e aggiungere la chiamata alla subroutine: - Nella preparazione della griglia - Nell'entry-point a GRIDADMN

A) Routine di gestione colonne custom:

z-imposta-gdad-custom.
   move "F" to gdad-forza-custom
   initialize gdad-custom
   if tm-cfg-qp = "SI"
      move "S" to gdad-cst-vis (k-cn-qual)
      move "S" to gdad-cst-vis (k-cn-qual-des)
   else
      move "N" to gdad-cst-vis (k-cn-qual)
      move "N" to gdad-cst-vis (k-cn-qual-des)
   end-if
   if fl-tipo-vis = "V"
      move "S" to gdad-cst-vis (k-cn-lotto)
      move "S" to gdad-cst-vis (k-cn-lotto-scad)
      move "S" to gdad-cst-vis (k-cn-prezzo)
      move "S" to gdad-cst-vis (k-cn-sco-1)
      move "S" to gdad-cst-vis (k-cn-sco-2)
      move "S" to gdad-cst-vis (k-cn-provv)
   else
      move "N" to gdad-cst-vis (k-cn-lotto)
      move "N" to gdad-cst-vis (k-cn-lotto-scad)
      move "N" to gdad-cst-vis (k-cn-prezzo)
      move "N" to gdad-cst-vis (k-cn-sco-1)
      move "N" to gdad-cst-vis (k-cn-sco-2)
      move "N" to gdad-cst-vis (k-cn-provv)
   end-if
   .

B) Preparazione della griglia:

z-prepara-tm-grid.
   set handle-grid to handle of e-tm-tab.
   set handle-grid-appunti to handle of e-tm-tab.
   perform x-calcola-dimensione-cella
   inquire handle-maschera,
      lines in w-window-lines,
      size in w-window-size
   perform x-ricalcola-tm-tab
   perform x-ricalcola-frame
   modify e-tm-tab, reset-grid = 1
   initialize util-gdad
   move "Prepara" to gdad-ope
   move k-program-id to gdad-prg
   move 1 to gdad-frm
   move k-id-tm-tab to gdad-ctrl-id
   perform z-imposta-gdad-custom
   call "GRIDADMN" using stringhe util-gdad, null, gdad-custom
   .

C) Entry-point a GRIDADMN:

**---------------------------------------------------------------**
* Definizione campi personalizzati nella chiamata a GRIDADMN
* Gianluca: entry-point prima delle chiamate a GRIDADMN
**---------------------------------------------------------------**
x-gridadmn-tm-tab-ep.
   perform z-imposta-gdad-custom
   .

X-CONTROLLA-'nomegrid'-COL-EP

Per ciascuna griglia modificabile occorre aggiungere nel programma sorgente questa perform. Può anche essere lasciata vuota. Permette di inserire controlli trasversali su una riga griglia (cioè controlli che non riguardano un singolo campo ma un insieme di campi).

I controlli inseriti in questa routine vengono eseguiti nella routine X-CONTROLLA-nomegrid-COL (routine privata), che è richiamata nelle routines pubbliche: - X-CONTROLLA-nomegrid-TUTTO (controlli globali sulla griglia) - X-CONTROLLA-nomegrid-RIGA (controlli su una specifica riga)

Esempio prelevato da COGV91G

*---------------------------------------------------------------**
* Qui introduco dei controlli aggiuntivi non legati ad un singolo
* campo
*---------------------------------------------------------------**
x-controlla-grid-det-col-ep.
*---------------------------------------------------------------**
* Merce "inizio voce":
* - Se contiene una voce, deve essere diversa dalla voce
*   della riga precedente
* - Deve avere una descrizione
*---------------------------------------------------------------**
   if tm-mer-cm (i) = tm-cfg-merce-ini-voce
      if i > 1 and
         tm-voce (i) <> " " and
         tm-voce (i - 1) <> " " and
         tm-voce (i - 1) = tm-voce (i)
         string "La merce 'Inizio voce' deve "
            "avere una voce diversa "
            "dalla precedente" delimited size into x-f3-msg
         perform x-set-f3-msg-grid-det
         move "N" to x-f3-ok-parziale
      end-if
      if tm-idx-des (i) = 0
         string "Sulla merce " tm-cfg-merce-ini-voce " deve "
            "essere presente una descrizione"
            delimited size into x-f3-msg
         perform x-set-f3-msg-grid-det
         move "N" to x-f3-ok-parziale
      end-if
   end-if
   .

Esempio prelevato da CRM065

x-controlla-grid-det-col-ep.
   evaluate w-cell-x
   when gcn-r-dos-key-num
      if f9
         initialize util-crmk11
         move k-program-id to crmk11-caller
         move "CRMK11" to crmk11-called
         move "S" to crmk11-modalita
         move " " to crmk11-tdo
         call "CRMK11" using stringhe util-crmk11
         cancel "CRMK11"
         if crmk11-out-num not = 0
            move crmk11-out-key-tdo to tm-r-dos-key-tip (i)
            move crmk11-out-num to tm-r-dos-key-num (i)
            perform x-controlla-tm-r-dos-key-num
            move i to k-rg
            perform x-modify-riga-grid-det
         end-if
      end-if
   when gcn-r-dos-id
      ....
   end-evaluate
   .

X-SET-FL-MOD

Questa routine potrà essere utile per impostare il valore delle variabili FL-MOD-nomegrid. Può essere utile per:

Rendere una griglia read-only. Ad esempio, nei programmi di gestione tabella (vedi tabella provincie, COGF09), che possono essere richiamati: - In selezione/consultazione: FL-MOD-nomegrid = "N" - In manutenzione: FL-MOD-nomegrid = "S"

**---------------------------------------------------------------**
** Imposto il contenuto di fl-mod-tm-tab
**---------------------------------------------------------------**
x-set-fl-mod.
   if a-modalita = "S"
      move "N" to fl-mod-tm-tab
   else
      move "S" to fl-mod-tm-tab
   end-if
   perform z-imposta-riga-alt-tm-tab
   .

In questo esempio, il valore della variabile viene impostato in funzione della modalità di chiamata. Poi si esegue Z-IMPOSTA-RIGA-ALT-nomegrid, che modifica il layout della griglia.

Chiamata alla routine: Si deve includere la routine all'inizio del programma, dopo il comando "DISPLAY S-MM-1":

perform x-trova-col-num-tm-tab
perform x-set-fl-mod

Z-GESTIONE-TF-nomegrid-EP

Gestione griglie modificabili.

Questa routine deve essere inserita nel programma sorgente per ciascuna griglia modificabile, ed è obbligatoria. Gestisce l'attivazione e/o la disattivazione dei tasti funzione sulle celle di una griglia non di tipo "speciale" dove è necessario attivare dei t.f. particolari (ad esempio aiuto su tabelle, ecc.).

La gestione della chiamata ai sottoprogrammi collegati è in Z-USA-TF-nomegrid-EP.

Esempio della routine (tratto da ASN140)

z-gestione-tf-tm-tab1-ep.
   evaluate w-cell-x
   when gcn-g1-sn
      if tm-g1-gca-sn (i1) = "S" and
         w-visible-f9-ric-avanzata = 0
         perform x-attiva-f9-ric-avanzata
      end-if
   when gcn-g1-tecn1
      if tm-g1-gca-tecn1 (i1) = "S" and
         w-visible-f8-aiuto = 0
         perform x-attiva-f8-aiuto
      end-if
   when gcn-g1-prezzo-lor
      if tm-g1-gca-prezzo-lor (i1) = "S" and
         w-visible-f7-prezzi-preced = 0
         perform x-attiva-f7-prezzi-preced
      end-if
   when other
      perform z-disattiva-tf-tm-tab1
   end-evaluate
   .

Per ciascuna colonna che prevede tasti funzione: il tasto funzione va attivato se: - Non è ancora visibile - La cella è abilitata per l'accept

Nel caso when other: - Z-DISATTIVA-TF-nomegrid: se è stato spuntato EP "Disattiva tf"? - La disattivazione manuale dei tasti funzione se non spuntato.

Z-USA-TF-nomegrid-EP

Gestione griglie modificabili.

Questa routine deve essere inserita nel programma sorgente per ciascuna griglia modificabile, ed è obbligatoria. Gestisce le chiamate ai sottoprogrammi richiamabili sulle singole celle, con l'uso di un tasto funzione.

Esempio della routine (tratto da CRM065)

z-usa-tf-tm-tab1-ep.
   evaluate w-cell-x
   when gcn-r-dos-key-num
      if f9
         initialize util-crmk11
         move k-program-id to crmk11-caller
         move "CRMK11" to crmk11-called
         move "S" to crmk11-modalita
         move " " to crmk11-tdo
         call "CRMK11" using stringhe util-crmk11
         cancel "CRMK11"
         if crmk11-out-num not = 0
            move crmk11-out-key-tdo to tm-r-dos-key-tip (i)
            move crmk11-out-num to tm-r-dos-key-num (i)
            perform x-controlla-tm-r-dos-key-num
            move i to k-rg
            perform x-modify-riga-grid-det
         end-if
      end-if
   end-evaluate
   .

Z-DISATTIVA-TF-nomegrid

Gestione griglie modificabili.

Questa routine deve essere inserita nel programma se viene spuntato EP "Disattiva tf"?. Dovrà contenere la disattivazione di tasti funzione particolari usati all'interno della griglia.

Esempio della routine (tratto da ASN140)

z-disattiva-tf-tm-tab1.
   perform x-disattiva-f9-ric-avanzata
   perform x-disattiva-f8-aiuto
   perform x-disattiva-f7-prezzi-preced
   .

Problemi Riscontrabili

Celle non editabili

Se una cella dovrebbe essere editabile ma durante l'elaborazione non lo è, ho riscontrato che il problema potrebbe succedere se si usa un thin client versione 7.2.2; il problema comunque dipende anche dalla posizione in cui la colonna è configurata.

Soluzione del problema Sembra che il problema sia dovuto ad un baco nella versione 7.2.2. Ho provato con la versione 8.1.3 e funziona correttamente, anche se ho un problema di allineamento durante l'accept, che ora provo a risolvere.

Celle non editabili dopo chiamata o sottoprogramma

Durante la gestione di una griglia modificabile avviene questo: - Modifico una cella: durante la modifica una condizione porta alla chiamata ad un sottoprogramma - Viene eseguito il sottoprogramma, e si ritorna sulla griglia - La griglia non è più modificabile

(Problema riscontrato ad esempio in COGV14W: dopo l'accept di una quantità se c'è la gestione lotti viene richiamato COGV32)

Soluzione problema Prima o dopo la chiamata al sottoprogramma si dovrà aggiungere la riga:

set event-action to event-action-fail-terminate

HowTo

Effettuare delle operazioni dopo la modifica di una cella

Normalmente, è sufficiente aggiungere la parte di codice necessaria nella routine Z-EVENT-nomegrid-AFTER.

Nei casi in cui la modifica di una cella viene effettuata attraverso la chiamata ad una finestra di aiuto (quindi non entro in edit sulla cella) è necessario simulare il comportamento di FINISH-ENTRY. - Nel caso di una colonna di tipo merce, viene fatto automaticamente. - Nel caso di altre colonne i cui t.f. sono gestiti automaticamente, dovrò implementare le stesse modifiche per gli altri tipi di campo (vedi Z-USA-TF-nomegrid-EP) - Nel caso di colonne i cui TF vengono gestiti direttamente nel sorgente, occorrerà: - Copiare manualmente il contenuto della cella nel campo GRB-prefisso-'colid' - Aggiungere la seguente parte di codice a valle della chiamata al sottoprogramma di aiuto

Attivazione customizzata colonne

Se è necessario gestire colonne la cui modifica dipende da fattori dinamici (ad esempio il contenuto di altre colonne) è sufficiente, nella definizione griglia impostare la Proprietà "Validazione" a Validazione "C" (custom).

Gestione TF personalizzati su colonne

Quando è necessario gestire t.f. che si attivano solo su una determinata colonna: - Attivare il tasto funzione: Gestione Z-GESTIONE-TF-nomegrid-AUTO - Utilizzo del tasto funzione: Gestione Z-USA-TF-nomegrid-EP (es. COGB35) - Accertarsi che al di sotto della perform di accept griglia ci sia la chiamata a Z-USA-TF-nomegrid

Gestione colori personalizzati su celle

Se c'è la necessità di gestire colori personalizzati su celle, c'è un metodo molto semplice da applicare alle griglie modificabili di qualunque tipo: - Sulla colonna desiderata definire la proprietà "Begin-Entry" = "Custom": questo forzerà la creazione della routine Z-nomegrid-colonna-BE-EP

Questa dovrà essere costruita come nell'esempio, preso da GRIDELTR:

z-grid-det-colore-be-ep.
   move "N" to w-cell-accept-ok
   if tm-r-colore (k-be) > 0
      move tm-r-colore (k-be) to w-cell-color-custom
   end-if
   .

L'importante è popolare correttamente il dato W-CELL-COLOR-CUSTOM.


Da implementare

Gestione pulsanti con bitmap

Per gestire i pulsanti con BITMAP occorre generare:

Sulla gestione maschere, se un controllo è di tipo "PUSH-BUTTON": - Aggiungere spunta "bitmap"

Per ciascun bottone "bitmap" dovrà essere creato dall'utente un file ".BMP" con nome "nome-programma_nomecontrollo"

File .SCR Aggiungere sui controlli PUSH-BUTTON le righe:

bitmap
bitmap-handle handle-bmp-clipot
bitmap-number 1

File .WRK

copy resource "p:\eurocoge\sys\gridsist-btn-su.bmp".
01 handle-bmp-clipot handle of bitmap.

File .PRC

Z-CARICA-BITMAP.
   call "W$BITMAP" using wbitmap-load,
      "gridsist-btn-su.bmp" GIVING handle-bmp-clipot
   .
Z-SCARICA-TUTTO.
   call "W$BITMAP" using wbitmap-destroy,
      handle-bmp-clipot
   .

Estratto da documentazione interna ClickUp