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