<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://kb.sagedev.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SageDev</id>
	<title>SageDev KB - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://kb.sagedev.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SageDev"/>
	<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php/Special:Contributions/SageDev"/>
	<updated>2026-07-26T08:54:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=282</id>
		<title>Data ora</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=282"/>
		<updated>2019-07-16T06:38:15Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Per ottenere la data corrente in una variabile Date si usa la funzione &amp;lt;code&amp;gt;date$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Allo stesso modo per avere data e ora correnti in una variabile Datetime si usa la funzione &amp;lt;code&amp;gt;datetime$&amp;lt;/code&amp;gt; (solo dalla V7).&lt;br /&gt;
&lt;br /&gt;
La forma canonica per rappresentare data e ora con una stringa è:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;YYYY-MM-DDThh:mm:ssZ           #attenzione alle lettere &amp;quot;in più&amp;quot; T e Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data e ora hanno formato &amp;quot;YYYY-MM-DDThh:mm:ss&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Attenzione: la variabile &amp;lt;code&amp;gt;adxdcs&amp;lt;/code&amp;gt; contiene l'anno pivot, usato per capire a quale secolo fare riferimento (anno 41- &amp;gt; 1941 o 2041?)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
num$(date$)                   #Per ottenere come stringa la data odierna&lt;br /&gt;
num$(time$)                   #Per ottenere come stringa l'ora corrente&lt;br /&gt;
num$(datetime$)               #Per ottenere come stringa canonica la data e ora odierna&lt;br /&gt;
gdat$(DAY,MONTH,YEAR)         #Per ottenere una data dati giorno, mese e anno&lt;br /&gt;
gdatetime$(str)               #Per ottenere una variabile Datetime da una stringa in forma canonica&lt;br /&gt;
year(data)                    #Per ottenere l'anno di una data&lt;br /&gt;
month(data)                   #Per ottenere il numero del mese di una data&lt;br /&gt;
month$(data)                  #Per ottenere il nome del mese di una data nella lingua corrente&lt;br /&gt;
day(data)                     #Per ottenere il numero del giorno del mese (1-31)&lt;br /&gt;
day$(data)                    #Per ottenere il nome del giorno della settimana&lt;br /&gt;
dayn(data)                    #Per ottenere il numero del giorno della settimana (1=lunedì, 7=domenica)&lt;br /&gt;
week(data)                    #Per ottenere il numero della settimana (1-53)&lt;br /&gt;
aweek(settimana,anno)         #Per ottenere il primo giorno (lunedì) della settimana specificata&lt;br /&gt;
nday(data)                    #Per ottenere il numero di giorni passati dal 1 gennaio 1600&lt;br /&gt;
nday$(NUM)                    #Per ottenere una data successiva di NUM giorni dal 1 gennaio 1600&lt;br /&gt;
eomonth(data)                 #Per ottenere l'ultimo giorno del mese di una data&lt;br /&gt;
addmonth(data,mesi)           #Per ottenere una data sommando n mesi alla data specificata&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ottenere come stringa con formato a piacere: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;format$(&amp;quot;D:YYYYMMDD[_]hhmmss&amp;quot;,date$)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il 31 dicembre 2018 alle 12.30 e 56 secondi corrisponderà a “20181231_123056”.&lt;br /&gt;
&lt;br /&gt;
Notare che per inserire uno spazio o altri elementi costanti si usano le parentesi quadre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;FORMATO = &amp;quot;DD[ ]MM[ ]YY&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Esempi ===&lt;br /&gt;
Eseguire anche delle semplici operazioni:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Local Date DATA,DATA1&lt;br /&gt;
DATA=[1/2/2015]+5        #DATA conterrà [06/02/2015]&lt;br /&gt;
DATA1=[1/2/2015]-1        #DATA conterrà [31/01/2015]&lt;br /&gt;
NUMGIORNI=DATA-DATA1      #giorni di differenza tra due date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fare una conversione implicita da data a testo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Local Char DATA_STR(30)                 # dichiaro una stringa&lt;br /&gt;
Local Date DATA                         # dichiaro una data&lt;br /&gt;
DATA=[31/12/2019]                       # imposto una data iniziale&lt;br /&gt;
DATA_STR = DATA                         # conversione implicita: DATA_STR = &amp;quot;20191231&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ottenere ultimo giorno di un mese: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Local date LASTDATE&lt;br /&gt;
LASTDATE = eomonth([1/2/2015])&lt;br /&gt;
Infbox num$(LASTDATE)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ottenere come stringa formattata: usare AFNC.FDH, per esempio &amp;lt;code&amp;gt;func AFNC.FDH(date$,&amp;quot;121531&amp;quot;)&amp;lt;/code&amp;gt; restituirà, il primo giugno 2018: &amp;lt;code&amp;gt;01/06/18 12:15:31&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili globali contenenti stringhe di formattazione ==&lt;br /&gt;
Sono preimpostate in base alle varie parametrizzazioni predefinite.&lt;br /&gt;
Sono utili per mantenere uno standard che si adatta in base ai vari utenti, siti, ecc.&lt;br /&gt;
&lt;br /&gt;
L’ordine giorno-mese-anno di queste formattazioni dipende appunto dalla localizzazione e dalle impostazioni utente.&lt;br /&gt;
&lt;br /&gt;
Le variabili sono queste:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GFMDAT  = data standard, con 2 caratteri per giorno, 2 per il mese , 2 per l’anno&lt;br /&gt;
GFMDAT4 = data con l’anno a 4 cifre&lt;br /&gt;
GFMDAT3 = data con il mese espresso con tre lettere&lt;br /&gt;
GFMDAT9 = data con il mese scritto in lettere&lt;br /&gt;
GFMMOI  = mese-anno&lt;br /&gt;
GFMMOI4 = mese-anno con anno a 4 cifre&lt;br /&gt;
GFMJOU  = giorno-mese&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(per maggiori info dall'help di Sage, Riquadro sviluppo-&amp;gt;sottoprogrammi -&amp;gt;Modulo Supervisore)&lt;br /&gt;
&lt;br /&gt;
== Videate ==&lt;br /&gt;
Per visualizzare un campo che in tabella è di tipo ADATIM (per esempio UPDDATTIM), in maschera utilizzare tipo dato &amp;quot;A&amp;quot; con lunghezza 19.&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_videate_e_campi&amp;diff=281</id>
		<title>Gestione videate e campi</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_videate_e_campi&amp;diff=281"/>
		<updated>2019-07-15T15:33:07Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;code&amp;gt;Grizo&amp;lt;/code&amp;gt; per disabilitare un campo di una videata; &amp;lt;br /&amp;gt;un altro modo è &amp;lt;code&amp;gt; Chgfmt [M:YPE0]YMESSAGE With &amp;quot;KP:10&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;Grizo rank&amp;lt;/code&amp;gt; per disabilitare un blocco: ''rank'' deve essere il valore della colonna ''Numero'' della sezione Blocchi della scheda Generale in gestione maschera (GESAMK)&lt;br /&gt;
#&amp;lt;code&amp;gt;Diszo&amp;lt;/code&amp;gt; per disabilitare (rendere solo visualizzato) un campo di una videata; &lt;br /&gt;
#&amp;lt;code&amp;gt;Actzo&amp;lt;/code&amp;gt; istruzione per abilitare un campo di una videata; &lt;br /&gt;
#&amp;lt;code&amp;gt;Effzo&amp;lt;/code&amp;gt; per sbiancare un campo di una videata; mette spazi bianchi indipendentemente dal tipo dato; le variabili corrispondenti della videata vengono resettate (vedi Raz); (la videata deve essere visualizzata, altrimenti usare Raz)&lt;br /&gt;
#&amp;lt;code&amp;gt;Raz&amp;lt;/code&amp;gt;: per resettare una variabile; in pratica mette una stringa vuota, il valore 0 o la data nulla in base al tipo dato; se la variabile è multidimensionale e non viene indicato un indice, viene resettata completamente&lt;br /&gt;
#Per aggiornare in visualizzazione un campo di una videata: usare la funzione &amp;lt;code&amp;gt;Affzo&amp;lt;/code&amp;gt;; &amp;lt;br /&amp;gt; Attenzione: Effzo + Grizo è diverso che fare Raz + Affzo&lt;br /&gt;
#&amp;lt;code&amp;gt;Envzo&amp;lt;/code&amp;gt;: forza la visualizzazione di un campo (l'istruzione Affzo viene bufferizzata e ottimizzata, Envzo forza l'esecuzione)&lt;br /&gt;
#Per nascondere/fa riapparire un campo di una videata utilizzare ''Chgfmt'', per esempio &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt; Chgfmt [M:YPE0]YMESSAGE With &amp;quot;-K:10&amp;quot;     #nascondo il campo&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt; Chgfmt [M:YPE0]YMESSAGE With &amp;quot;K:10&amp;quot;      #visualizzo il campo&amp;lt;/code&amp;gt;&lt;br /&gt;
#chgtzn per titolo campi in lista &amp;lt;code&amp;gt;Chgtzn[M:TXM1]AMTVAL1 With &amp;quot;new text&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;onkey&amp;lt;/code&amp;gt; permette di eseguire un programma partendo dal clic del tasto destro in un campo (anche per help)&lt;br /&gt;
# setmok&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; per abilitare/disabilitare pulsanti, bottoni o menu della barra dei menu; in genere da usare nella azione SETBOUT (vedi anche variabili GSTABOU, ETABOU, CHMEN, CHAINE).&lt;br /&gt;
#* per vedere le variabili dei vari bottoni: cercare alla voce [[GESAGB|Sviluppo - Dizionario dati - Apertura alla parametrizzazione - Variabili globali]], o nel sorgente WWAGLOBADX, GSTA*: &amp;lt;br /&amp;gt;GSTAOK, GSTARET, GSTAENR...,GSPE*, GCHAN, GCHAINE, GETABOU, GETAMEN...&lt;br /&gt;
&lt;br /&gt;
Esempi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#Esempio in cui si disattiva il bottone Nuovo in fase di modifica&lt;br /&gt;
If REP &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;
    Disable GSTANEW  &lt;br /&gt;
Else&lt;br /&gt;
    Enable GSTANEW&lt;br /&gt;
Endif&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ETABOU(GSPE1)=0 #disattivo pulsante&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Blocco_Riquadro&amp;diff=280</id>
		<title>Gestione Blocco Riquadro</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Blocco_Riquadro&amp;diff=280"/>
		<updated>2019-07-15T15:29:49Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gestione di un blocco riquadro di una videata&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Numeratore di riga NBLIG di tipo ABS, &amp;quot;Inserito&amp;quot;; se viene messo &amp;quot;nascosto&amp;quot; anche il riquadro sarà nascosto.&lt;br /&gt;
&lt;br /&gt;
== Gestione Inserimento/Modifica/Cancellazione righe ==&lt;br /&gt;
Per fare dei controlli alla cancellazione di una linea tramite pulsante contestuale, prima del registra (evitando così di dover usare VERIF_CRE della gestione oggetto)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog C_NBLIG&lt;br /&gt;
  If status=65&lt;br /&gt;
     mkstat=2 #per impedire la cancellazione della riga&lt;br /&gt;
  Endif&lt;br /&gt;
End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vedi l'help dell'istruzione [[status]] per tutti i codici possibili che può avere.&lt;br /&gt;
&lt;br /&gt;
Per il blocco riquadro possono servire:&lt;br /&gt;
* 65 cancellazione di una riga&lt;br /&gt;
* 68 cancellazione di più righe&lt;br /&gt;
* 71 cambio di riga (da capire differenza con 75)&lt;br /&gt;
* 73 inserimento di una riga&lt;br /&gt;
* 75 modifica di una riga (da capire differenza con 71)&lt;br /&gt;
&lt;br /&gt;
== Gestione pulsanti riquadro standard Cancella/Annulla/Copia... ==&lt;br /&gt;
Questi pulsanti si attivano/disattivano tramite il campo &amp;quot;Opzioni&amp;quot; della sezione blocco (gestione Videata).&lt;br /&gt;
&lt;br /&gt;
In genere viene preimpostato &amp;quot;KARID&amp;quot;, che significa Prec/Succ, Cancellazione di una riga, Ripresa,Inserisci e cancellazione multipla attive&lt;br /&gt;
&lt;br /&gt;
Questi i codici (dall'help):&lt;br /&gt;
&amp;lt;pre&amp;gt;K : Previous &amp;amp; next line in entry mode&lt;br /&gt;
K: Riga precedente &amp;amp; successiva in modalità inserimento&lt;br /&gt;
A: Eliminare una riga&lt;br /&gt;
D: Eliminare un intervallo di righe&lt;br /&gt;
R: Aggiunta di righe a fine riquadro&lt;br /&gt;
I: Inserimento di righe&lt;br /&gt;
S: Taglia&lt;br /&gt;
B: Copia&lt;br /&gt;
C: Incolla&lt;br /&gt;
T: Caricamento di tutte le righe del riquadro (Visualizzazione completa)&lt;br /&gt;
? : Ricerca&lt;br /&gt;
+ : Giustificazione colonna&lt;br /&gt;
= : Modalità scheda automatica&lt;br /&gt;
1-9 : Numero di colonne fisse (a partire dalla 1a colonna)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gestione videate Opzioni blocco riquadro.png|none]]&lt;br /&gt;
&lt;br /&gt;
== Aggiungere un riga ad un riquadro ==&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;[M:YXX]CAMPO(NBLIG-1)='valore'   #inserisco i valori alla riga con indice NBLIG-1&lt;br /&gt;
[M:YXX]NBLIG+=1                  #aumento il valore del numero di righe del riquadro&lt;br /&gt;
Affzo [M:YXX]                    #aggiorno la visualizzazione del riquadro&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
* Se l'oggetto è combinato, ad ogni modifica il sistema cancella tutte le righe e le riscrive&lt;br /&gt;
* [S]adxgtb: stato in un riquadro (entrata o uscita)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Blocco_Riquadro&amp;diff=279</id>
		<title>Gestione Blocco Riquadro</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Blocco_Riquadro&amp;diff=279"/>
		<updated>2019-07-15T15:28:52Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gestione di un blocco riquadro di una videata&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Numeratore di riga NBLIG di tipo ABS, &amp;quot;Inserito&amp;quot;; se viene messo &amp;quot;nascosto&amp;quot; anche il riquadro sarà nascosto.&lt;br /&gt;
&lt;br /&gt;
== Gestione Inserimento/Modifica/Cancellazione righe ==&lt;br /&gt;
Per fare dei controlli alla cancellazione di una linea tramite pulsante contestuale, prima del registra (evitando così di dover usare VERIF_CRE della gestione oggetto)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog C_NBLIG&lt;br /&gt;
  If status=65&lt;br /&gt;
     mkstat=2 #per impedire la cancellazione della riga&lt;br /&gt;
  Endif&lt;br /&gt;
End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vedi l'help dell'istruzione [[status]] per tutti i codici possibili che può avere.&lt;br /&gt;
&lt;br /&gt;
Per il blocco riquadro possono servire:&lt;br /&gt;
* 65 cancellazione di una riga&lt;br /&gt;
* 68 cancellazione di più righe&lt;br /&gt;
* 71 cambio di riga (da capire differenza con 75)&lt;br /&gt;
* 73 inserimento di una riga&lt;br /&gt;
* 75 modifica di una riga (da capire differenza con 71)&lt;br /&gt;
&lt;br /&gt;
== Gestione pulsanti riquadro standard Cancella/Annulla/Copia... ==&lt;br /&gt;
Questi pulsanti si attivano/disattivano tramite il campo &amp;quot;Opzioni&amp;quot; della sezione blocco (gestione Videata).&lt;br /&gt;
&lt;br /&gt;
In genere viene preimpostato &amp;quot;KARID&amp;quot;, che significa Prec/Succ, Cancellazione di una riga, Ripresa,Inserisci e cancellazione multipla attive&lt;br /&gt;
&lt;br /&gt;
Questi i codici (dall'help):&lt;br /&gt;
&amp;lt;pre&amp;gt;K : Previous &amp;amp; next line in entry mode&lt;br /&gt;
K: Riga precedente &amp;amp; successiva in modalità inserimento&lt;br /&gt;
A: Eliminare una riga&lt;br /&gt;
D: Eliminare un intervallo di righe&lt;br /&gt;
R: Aggiunta di righe a fine riquadro&lt;br /&gt;
I: Inserimento di righe&lt;br /&gt;
S: Taglia&lt;br /&gt;
B: Copia&lt;br /&gt;
C: Incolla&lt;br /&gt;
T: Caricamento di tutte le righe del riquadro (Visualizzazione completa)&lt;br /&gt;
? : Ricerca&lt;br /&gt;
+ : Giustificazione colonna&lt;br /&gt;
= : Modalità scheda automatica&lt;br /&gt;
1-9 : Numero di colonne fisse (a partire dalla 1a colonna)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gestione videate Opzioni blocco riquadro.png|none]]&lt;br /&gt;
&lt;br /&gt;
== Aggiungere un riga ad un riquadro ==&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;[M:YXX]CAMPO(NBLIG-1)='valore'   #inserisco i valori alla riga con indice NBLIG-1&lt;br /&gt;
[M:YXX]NBLIG+=1                  #aumento il valore del numero di righe del riquadro&lt;br /&gt;
Affzo [M:YXX]                    #aggiorno la visualizzazione del riquadro&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
* [S]adxgtb: stato in un riquadro (entrata o uscita)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Blocco_Riquadro&amp;diff=278</id>
		<title>Gestione Blocco Riquadro</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Blocco_Riquadro&amp;diff=278"/>
		<updated>2019-07-15T15:06:36Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gestione di un blocco riquadro di una videata&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Numeratore di riga NBLIG di tipo ABS, &amp;quot;Inserito&amp;quot;; se viene messo &amp;quot;nascosto&amp;quot; anche il riquadro sarà nascosto.&lt;br /&gt;
&lt;br /&gt;
== Gestione Inserimento/Modifica/Cancellazione righe ==&lt;br /&gt;
Per fare dei controlli alla cancellazione di una linea tramite pulsante contestuale, prima del registra (evitando così di dover usare VERIF_CRE della gestione oggetto)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog C_NBLIG&lt;br /&gt;
  If status=65&lt;br /&gt;
     mkstat=2 #per impedire la cancellazione della riga&lt;br /&gt;
  Endif&lt;br /&gt;
End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vedi l'help dell'istruzione [[status]] per tutti i codici possibili che può avere.&lt;br /&gt;
&lt;br /&gt;
Per il blocco riquadro possono servire:&lt;br /&gt;
* 65 cancellazione di una riga&lt;br /&gt;
* 68 cancellazione di più righe&lt;br /&gt;
* 71 cambio di riga (da capire differenza con 75)&lt;br /&gt;
* 73 inserimento di una riga&lt;br /&gt;
* 75 modifica di una riga (da capire differenza con 71)&lt;br /&gt;
&lt;br /&gt;
== Gestione pulsanti riquadro standard Cancella/Annulla/Copia... ==&lt;br /&gt;
Questi pulsanti si attivano/disattivano tramite il campo &amp;quot;Opzioni&amp;quot; della sezione blocco (gestione Videata).&lt;br /&gt;
&lt;br /&gt;
In genere viene preimpostato &amp;quot;KARID&amp;quot;, che significa Prec/Succ, Cancellazione di una riga, Ripresa,Inserisci e cancellazione multipla attive&lt;br /&gt;
&lt;br /&gt;
Questi i codici (dall'help):&lt;br /&gt;
&amp;lt;pre&amp;gt;K : Previous &amp;amp; next line in entry mode&lt;br /&gt;
K: Riga precedente &amp;amp; successiva in modalità inserimento&lt;br /&gt;
A: Eliminare una riga&lt;br /&gt;
D: Eliminare un intervallo di righe&lt;br /&gt;
R: Aggiunta di righe a fine riquadro&lt;br /&gt;
I: Inserimento di righe&lt;br /&gt;
S: Taglia&lt;br /&gt;
B: Copia&lt;br /&gt;
C: Incolla&lt;br /&gt;
T: Caricamento di tutte le righe del riquadro (Visualizzazione completa)&lt;br /&gt;
? : Ricerca&lt;br /&gt;
+ : Giustificazione colonna&lt;br /&gt;
= : Modalità scheda automatica&lt;br /&gt;
1-9 : Numero di colonne fisse (a partire dalla 1a colonna)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gestione videate Opzioni blocco riquadro.png|none]]&lt;br /&gt;
&lt;br /&gt;
== Aggiungere un riga ad un riquadro ==&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;[M:YXX]CAMPO(NBLIG-1)='valore'   #inserisco i valori alla riga con indice NBLIG-1&lt;br /&gt;
[M:YXX]NBLIG+=1                  #aumento il valore del numero di righe del riquadro&lt;br /&gt;
Affzo [M:YXX]                    #aggiorno la visualizzazione del riquadro&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
* ad ogni modifica il sistema cancella tutte le righe e le riscrive&lt;br /&gt;
* [S]adxgtb: stato in un riquadro (entrata o uscita)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Web_Services&amp;diff=258</id>
		<title>Web Services</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Web_Services&amp;diff=258"/>
		<updated>2019-07-08T14:11:53Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Risorse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Risorse ===&lt;br /&gt;
* [http://www.messengerproducts.com/X3_Web_Services_v6.ppt Slide Sage in Inglese V6.2]&lt;br /&gt;
* [https://slideplayer.fr/slide/1865350/ Slide in francese, V6]&lt;br /&gt;
* https://github.com/oliviermantel/sample-sage-ws-excel-tools-x3-l4g&lt;br /&gt;
&lt;br /&gt;
* pubblicare un programma come ws: https://www.rklesolutions.com/blog/integration-options-with-sage-x3&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=257</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=257"/>
		<updated>2019-07-05T15:53:59Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo (vedi [[Gestione tracce]])&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GSTAOK''': pulsante standard &amp;quot;Ok&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
* '''GOBJET''': flag gestione oggetto; usato per capire all'interno di alcune chiamate (vedi per esempio file W1ITM0.src) se si è in [[GESAOB|gestione oggetto]] o meno&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Lo standard in generale fa queste due chiamate all'apertura e alla chiusura di una finestra (sorgenti SUB*.src):&lt;br /&gt;
&lt;br /&gt;
Dentro $OUVRE&lt;br /&gt;
&amp;lt;pre&amp;gt;#Salva l'attuale situazione delle variabili globali&lt;br /&gt;
Gosub SAUV_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME&lt;br /&gt;
&amp;lt;pre&amp;gt;#Ripristina le variabili globali&lt;br /&gt;
Gosub REST_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;br /&gt;
* '''mkstat''' stato quando si esce da un campo&lt;br /&gt;
* '''fstat''' stato dopo un'operazione su una tabella&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=256</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=256"/>
		<updated>2019-07-05T15:53:22Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Variabili globali */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo (vedi [[Gestione tracce]])&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GSTAOK''': pulsante standard &amp;quot;Ok&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
* '''GOBJET''': flag gestione oggetto; usato per capire all'interno di alcune chiamate (vedi per esempio file W1ITM0.src) se si è in gestione oggetto o meno&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Lo standard in generale fa queste due chiamate all'apertura e alla chiusura di una finestra (sorgenti SUB*.src):&lt;br /&gt;
&lt;br /&gt;
Dentro $OUVRE&lt;br /&gt;
&amp;lt;pre&amp;gt;#Salva l'attuale situazione delle variabili globali&lt;br /&gt;
Gosub SAUV_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME&lt;br /&gt;
&amp;lt;pre&amp;gt;#Ripristina le variabili globali&lt;br /&gt;
Gosub REST_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;br /&gt;
* '''mkstat''' stato quando si esce da un campo&lt;br /&gt;
* '''fstat''' stato dopo un'operazione su una tabella&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=255</id>
		<title>Gestione Bottoni</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=255"/>
		<updated>2019-07-04T16:05:32Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Azioni campo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;...appunti...&lt;br /&gt;
&lt;br /&gt;
= Nelle Finestre =&lt;br /&gt;
* BOTTONI&lt;br /&gt;
** SETBOUT refresh dei bottoni&lt;br /&gt;
** AP_CHOIX dopo clic su bottone&lt;br /&gt;
** AVANT_BOUTON: prima dell'esecuzione bottone specifico&lt;br /&gt;
** AVANT_XXX: prima dell'esecuzione bottone standard&lt;br /&gt;
** BOUTON: dopo esecuzione bottone specifico&lt;br /&gt;
** XXX: dopo esecuzione bottone standard&lt;br /&gt;
&lt;br /&gt;
* Menu&lt;br /&gt;
** AVANT_MEN prima dell'esecuzione&lt;br /&gt;
** MEN: dopo l'esecuzione&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Altro esempio da qualche sorgente SUB*.src:&lt;br /&gt;
&lt;br /&gt;
Finestra&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE &lt;br /&gt;
 When GSTACRE  : Gosub CREATE : #Créer&lt;br /&gt;
 When GSTAANU  : Gosub ANNUL  : #Supprimer&lt;br /&gt;
 When GSTAENR  : Gosub MODIF  : #Enregistrer&lt;br /&gt;
 When GSTARET  :&lt;br /&gt;
  If REP=&amp;quot;C&amp;quot; | REP=&amp;quot;D&amp;quot; : Gosub CREATE &lt;br /&gt;
  Elsif REP=&amp;quot;M&amp;quot; : Gosub MODIF &lt;br /&gt;
  Endif &lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oppure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE&lt;br /&gt;
  When GSTARET :&lt;br /&gt;
    Case GREP&lt;br /&gt;
      When &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; : REPONSE = GSTACRE&lt;br /&gt;
      When &amp;quot;M&amp;quot;      : REPONSE = GSTAENR&lt;br /&gt;
    Endcase&lt;br /&gt;
Endcase&lt;br /&gt;
#&lt;br /&gt;
Case REPONSE&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET, GSTAOK  : Gosub ENREG&lt;br /&gt;
 When GSTAEND, GSTAESC : FIN=1&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dialog box&lt;br /&gt;
&amp;lt;pre&amp;gt;$AP_CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET          : Gosub VALID&lt;br /&gt;
 When GSTAEND, GSTAESC : Gosub CONFIRME&lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Pulsanti standard ==&lt;br /&gt;
&lt;br /&gt;
Talvolta ci sono dei problemi con l'attivazione/disattivazione dei pulsanti standard.&lt;br /&gt;
&lt;br /&gt;
Con le istruzioni [[enable]] e [[disable]]  seguite dal codice del pulsante possiamo gestire la cosa mano.&lt;br /&gt;
&lt;br /&gt;
I codici sono memorizzati in alcune [[variabili globali]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enable GSTACRE   #abilito il pulsante Crea&lt;br /&gt;
Disable GSTAENR  #disabilito il pulsante Registra&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= In azioni oggetto =&lt;br /&gt;
&lt;br /&gt;
Per bottoni: SETBOUT(per disattivarli, CHAINE), AVANTBOUT (prime dell'esecuzione, variabile BOUT), EXEBOUT (dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
Per menu:  SETBOUT(per disattivarli, CHMEN), AVANTBOUT (prime dell'esecuzione, variabile BOUT), STATUT(dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
Per pulsanti standard: &lt;br /&gt;
* AVANT_XXX (AVANT_NEW, AVANT_END, XXX è il codice standard)&lt;br /&gt;
* XXX dopo l'esecuzione (NEW, END, S, C,...)&lt;br /&gt;
&lt;br /&gt;
Per pulsanti specifici: &lt;br /&gt;
* AVANTBOUT (dove la variabile BOUT contiene il codice) &lt;br /&gt;
* EXEBOUT dopo l'esecuzione (dove la variabile BOUT contiene il codice) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per togliere un pulsante da programma specifico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Call VIREBOUT (CHAINE, LISTA) From  GOBJET&amp;lt;/pre&amp;gt; &lt;br /&gt;
* CHAINE : variable char, lista di bottoni disponibili (viene definita nel programma GOBJET)&lt;br /&gt;
* LISTA : value char, lista di bottoni da cancellare &lt;br /&gt;
&lt;br /&gt;
Questi i valori dei bottoni: &lt;br /&gt;
* C - Crea &lt;br /&gt;
* D – Duplica &lt;br /&gt;
* M - Salva &lt;br /&gt;
* A - Elimina&lt;br /&gt;
* F - FINE &lt;br /&gt;
* H – CAMBIAMENTO CODICE lettere aggiornate: bottoni standard &lt;br /&gt;
* J – Allegati&lt;br /&gt;
* K - Commenti  &lt;br /&gt;
* E - Stampa&lt;br /&gt;
* L – Lista&lt;br /&gt;
* R - Selezione&lt;br /&gt;
* 0 - PRIMO &lt;br /&gt;
* 9 - ULTIMO &lt;br /&gt;
* da 1 a 8          : bottoni  standard &lt;br /&gt;
* da a a z          :  bottoni specifici&lt;br /&gt;
* @ - PROPRIETA’ &lt;br /&gt;
* &amp;gt; - Successivo &lt;br /&gt;
* &amp;lt; - Precedente&lt;br /&gt;
&lt;br /&gt;
Esempio: togliere il bottone Crea e attivare il pulsante registrare&lt;br /&gt;
&amp;lt;pre&amp;gt;$SETBOUT&lt;br /&gt;
  Call VIREBOUT (CHAINE, &amp;quot;C&amp;quot;) From  GOBJET  #togliere il bottone Crea&lt;br /&gt;
  REP = &amp;quot;M&amp;quot;  : # attivazione del bottone REGISTRARE&lt;br /&gt;
  # attivazione di una riga menu con codice i (di default le sottorighe dei menu NON sono attive)&lt;br /&gt;
  CHMEN += &amp;quot;i&amp;quot;&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Azioni campo =&lt;br /&gt;
Variabili coinvolte&lt;br /&gt;
&lt;br /&gt;
GREP, GBOUT1..20, GBOUTS, GBOUTA, GBOUTI&lt;br /&gt;
&lt;br /&gt;
GREP:&lt;br /&gt;
* vuoto: nessun bottone selezionato &lt;br /&gt;
* A : annulla&lt;br /&gt;
* C : creazione &lt;br /&gt;
* D : duplicazione &lt;br /&gt;
* M : modifica&lt;br /&gt;
&lt;br /&gt;
== Bx_ZONE ==&lt;br /&gt;
&lt;br /&gt;
Esecuzione del bottone x &lt;br /&gt;
* mkstat = 4, per attivare il bottone registra. &lt;br /&gt;
* mkstat = 99, per posizionare il cursore sul campo successivo&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
vedi anche [[Finestre#Aggiungere_un_bottone.2Fmen.C3.B9_contestuale_che_apre_un_oggetto| Aggiungere un bottone che apre un oggetto]]&lt;br /&gt;
&lt;br /&gt;
= Videate =&lt;br /&gt;
&lt;br /&gt;
== Pulsante contestuale su riga di un riquadro ==&lt;br /&gt;
&lt;br /&gt;
I pulsanti di riquadro possibili sono 20, la cui etichetta è contenuta nelle [[variabili globali]] GBOUT1, GBOUT2 ...GBOUT20&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un pulsante contestuale su riga di un riquadro:&lt;br /&gt;
&lt;br /&gt;
* selezionare tra i campi della videata il campo numeratore di riga, spesso NBLIG&lt;br /&gt;
* impostare un'azione Bottone (dalla 2 in poi, la prima libera); l'azione può essere sia SPE che un'azione vera e propria&lt;br /&gt;
* validare la videata&lt;br /&gt;
* aprire il sorgente corrispondente: se è di tipo SPE troverai aggiunto un &amp;lt;code&amp;gt;Subprog B2_NBLIG&amp;lt;/code&amp;gt; dove scrivere il codice da eseguire alla selezione del menu appena creato&lt;br /&gt;
&lt;br /&gt;
=== Disattivazione ===&lt;br /&gt;
&lt;br /&gt;
Attivare l'evento di riga &amp;quot;Init Bottone&amp;quot; sempre sul campo numeratore di riga (NBLIG).&lt;br /&gt;
&lt;br /&gt;
Dentro il Subprog IB_NBLIG che verrà creato nel sorgente azzerare la variabile corrispondente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog IB_NBLIG &lt;br /&gt;
   Raz GBOUT2       #disattivo il pulsante 2&lt;br /&gt;
   GBOUT3='bla bla' # attivo il pulsante 3 con eticheta 'bla bla'&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulsanti standard blocco riquadro ==&lt;br /&gt;
Vedi [[Gestione_Blocco_Riquadro#Gestione_pulsanti_riquadro_standard_Cancella.2FAnnulla.2FCopia...|Gestione Blocco Riquadro]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=254</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=254"/>
		<updated>2019-07-03T13:06:10Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Variabili speciali */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo (vedi [[Gestione tracce]])&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GSTAOK''': pulsante standard &amp;quot;Ok&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Lo standard in generale fa queste due chiamate all'apertura e alla chiusura di una finestra (sorgenti SUB*.src):&lt;br /&gt;
&lt;br /&gt;
Dentro $OUVRE&lt;br /&gt;
&amp;lt;pre&amp;gt;#Salva l'attuale situazione delle variabili globali&lt;br /&gt;
Gosub SAUV_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME&lt;br /&gt;
&amp;lt;pre&amp;gt;#Ripristina le variabili globali&lt;br /&gt;
Gosub REST_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;br /&gt;
* '''mkstat''' stato quando si esce da un campo&lt;br /&gt;
* '''fstat''' stato dopo un'operazione su una tabella&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=253</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=253"/>
		<updated>2019-07-03T13:05:38Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Variabili speciali */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo (vedi [[Gestione tracce]])&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GSTAOK''': pulsante standard &amp;quot;Ok&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Lo standard in generale fa queste due chiamate all'apertura e alla chiusura di una finestra (sorgenti SUB*.src):&lt;br /&gt;
&lt;br /&gt;
Dentro $OUVRE&lt;br /&gt;
&amp;lt;pre&amp;gt;#Salva l'attuale situazione delle variabili globali&lt;br /&gt;
Gosub SAUV_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME&lt;br /&gt;
&amp;lt;pre&amp;gt;#Ripristina le variabili globali&lt;br /&gt;
Gosub REST_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;br /&gt;
* '''mkstat''' stato quando si esce da un campo&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Forzare_la_rilettura_di_un_record_visualizzato&amp;diff=252</id>
		<title>Forzare la rilettura di un record visualizzato</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Forzare_la_rilettura_di_un_record_visualizzato&amp;diff=252"/>
		<updated>2019-07-03T13:05:03Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se si modifica dei valori di un record già aperto va ricaricato in schermata (spesso si fa tramite delle azioni scatenate da menu/pulsanti).&lt;br /&gt;
&lt;br /&gt;
Nel caso non lo si faccia si può verificare o la perdita della modifica (perché viene riscritto il dato vecchio ancora presente in videata)&lt;br /&gt;
&lt;br /&gt;
o esce il messaggio di errore &amp;quot;Obsolete record&amp;quot; (nel caso si cerchi di fare delle modifiche ed il sistema si accorge dell'incongruenza).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esiste una [[Variabili globali|variabile globale]] apposita: GSTALIT.&lt;br /&gt;
&lt;br /&gt;
Eccone alcuni esempi d'uso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$FIN_ACTION&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTALIT : Gosub RELIT From GOBJSUB : SUIZON=&amp;quot;CODACE&amp;quot;&lt;br /&gt;
Endcase&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME o $FIN&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Se si arriva da un tunnel si imposta mkstat in modo che forzi la rilettura al ritorno dal tunnel stesso&lt;br /&gt;
If GFONC1 = &amp;quot;GESSQH&amp;quot; &lt;br /&gt;
   mkstat=GSTALIT &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog CL_BTN(VALEUR)&lt;br /&gt;
Variable Char    VALEUR()&lt;br /&gt;
  # Per forzare la rilettura dopo l'esecuzione dell'azione Click&lt;br /&gt;
  mkstat = GSTALIT&lt;br /&gt;
End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un modo artigianale per ricaricare il record dopo un'azione ad esempio di un bottone è questo:&lt;br /&gt;
&lt;br /&gt;
# inizializzare una variabile globale in coda all'azione: &amp;lt;code&amp;gt;Global Char YGRELIT&amp;lt;/code&amp;gt;&lt;br /&gt;
# nell'azione AVANT_CHOI, testare la presenza della variabile ed eseguire &amp;lt;code&amp;gt;Gosub RELIT from GOBJSUB&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$AVANT_CHOI&lt;br /&gt;
  #Rilettura del record&lt;br /&gt;
  If dim(YGRELIT) &amp;gt; 0 Then&lt;br /&gt;
    Kill YGRELIT&lt;br /&gt;
    Gosub RELIT From GOBJSUB&lt;br /&gt;
  Endif&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=251</id>
		<title>Gestione tracce</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=251"/>
		<updated>2019-07-03T12:59:42Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
In Sage i file di log sono chiamati tracce, e sono ricercabili attraverso '''LECTRACE''' (all'apertura della finestra premere F12 per vedere l'elenco delle tracce).&lt;br /&gt;
&lt;br /&gt;
Nel creare un file di traccia da codice è possibile distinguere se il programma viene eseguito in modalità batch o in modalità interattiva (in genere in modalità batch si fa sempre un log per poter capire se succede qualcosa di anomalo).&lt;br /&gt;
&lt;br /&gt;
In genere in modalità interattiva al termine dell'esecuzione la traccia viene visualizzata automaticamente, altrimenti viene scritta ed è poi recuperabile con LECTRACE.&lt;br /&gt;
Per capire in che modalità avviene l'esecuzione si utilizza GSERVEUR (vedi [[Variabili_globali|Variabili globali]]).&lt;br /&gt;
&lt;br /&gt;
Nel momento in cui c'è una traccia appena chiusa è possibile visualizzarla all'utente finale con questo comando:&lt;br /&gt;
&amp;lt;code&amp;gt;Call LEC_TRACE FROM LECFIC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La [[Variabili globali|variabile globale]] '''GTRACE''' contiene il nome della traccia corrente; se GTRACE=&amp;quot;&amp;quot; vuol dire che non c'è traccia in corso.&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    #Apertura traccia (in modalità interattiva) (GSERVEUR=0 modalità interattiva, =1 modalità batch)&lt;br /&gt;
    If !GSERVEUR   &lt;br /&gt;
      Call OUVRE_TRACE(&amp;quot;Inizio log&amp;quot; -num$(date$)-time$) From LECFIC&lt;br /&gt;
    Endif&lt;br /&gt;
        &lt;br /&gt;
    #scrivere un messaggio informativo&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Scrittura errore&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,1) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Chiusura e visualizzazione traccia &lt;br /&gt;
    Call ECR_TRACE(&amp;quot;Fine log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    If !GSERVEUR&lt;br /&gt;
        Call FERME_TRACE From LECFIC    #chiudo traccia&lt;br /&gt;
        Call LEC_TRACE FROM LECFIC      #visualizzo traccia&lt;br /&gt;
        Call SUP_TRACE FROM LECFIC      #cancello la traccia &lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call ECR_TRACE(&amp;quot;Testo&amp;quot;,N) From GESECRAN ===&lt;br /&gt;
Valori possibili di N:&lt;br /&gt;
*  0 = nero&lt;br /&gt;
*  1 = rosso&lt;br /&gt;
* -1 = verde&lt;br /&gt;
* -2 = blu&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=250</id>
		<title>Gestione tracce</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=250"/>
		<updated>2019-07-03T12:57:58Z</updated>

		<summary type="html">&lt;p&gt;SageDev: Undo revision 249 by SageDev (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
In Sage i file di log sono chiamati tracce, e sono ricercabili attraverso '''LECTRACE''' (all'apertura della finestra premere F12 per vedere l'elenco delle tracce).&lt;br /&gt;
&lt;br /&gt;
Nel creare un file di traccia da codice è possibile distinguere se il programma viene eseguito in modalità batch o in modalità interattiva (in genere in modalità batch si fa sempre un log per poter capire se succede qualcosa di anomalo).&lt;br /&gt;
&lt;br /&gt;
In genere in modalità interattiva al termine dell'esecuzione la traccia viene visualizzata automaticamente, altrimenti viene scritta ed è poi recuperabile con LECTRACE.&lt;br /&gt;
Per capire in che modalità avviene l'esecuzione si utilizza GSERVEUR (vedi [[Variabili_globali|Variabili globali]]).&lt;br /&gt;
&lt;br /&gt;
Nel momento in cui c'è una traccia appena chiusa è possibile visualizzarla all'utente finale con questo comando:&lt;br /&gt;
&amp;lt;code&amp;gt;Call LEC_TRACE FROM LECFIC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La [[Variabili globali|variabile globale]] '''GTRACE''' contiene il nome della traccia corrente; se GTRACE=&amp;quot;&amp;quot; vuol dire che non c'è traccia in corso.&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    #Apertura traccia (in modalità interattiva) (GSERVEUR=0 modalità interattiva, =1 modalità batch)&lt;br /&gt;
    If !GSERVEUR   &lt;br /&gt;
      Call OUVRE_TRACE(&amp;quot;Inizio log&amp;quot; -num$(date$)-time$) From LECFIC&lt;br /&gt;
    Endif&lt;br /&gt;
        &lt;br /&gt;
    #e modi per scrivere un messaggio informativo&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    Call MESSAGE  (&amp;quot;log&amp;quot;-num$(date$)-time$)   FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Scrittura errore&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,1) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Chiusura e visualizzazione traccia &lt;br /&gt;
    Call ECR_TRACE(&amp;quot;Fine log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    If !GSERVEUR&lt;br /&gt;
        Call FERME_TRACE From LECFIC    #chiudo traccia&lt;br /&gt;
        Call LEC_TRACE FROM LECFIC      #visualizzo traccia&lt;br /&gt;
        Call SUP_TRACE FROM LECFIC      #cancello la traccia &lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call ECR_TRACE(&amp;quot;Testo&amp;quot;,N) From GESECRAN ===&lt;br /&gt;
Valori possibili di N:&lt;br /&gt;
*  0 = nero&lt;br /&gt;
*  1 = rosso&lt;br /&gt;
* -1 = verde&lt;br /&gt;
* -2 = blu&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=249</id>
		<title>Gestione tracce</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=249"/>
		<updated>2019-07-03T12:50:30Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
In Sage i file di log sono chiamati tracce, e sono ricercabili attraverso '''LECTRACE''' (all'apertura della finestra premere F12 per vedere l'elenco delle tracce).&lt;br /&gt;
&lt;br /&gt;
Nel creare un file di traccia da codice è possibile distinguere se il programma viene eseguito in modalità batch o in modalità interattiva (in genere in modalità batch si fa sempre un log per poter capire se succede qualcosa di anomalo).&lt;br /&gt;
&lt;br /&gt;
In genere in modalità interattiva al termine dell'esecuzione la traccia viene visualizzata automaticamente, altrimenti viene scritta ed è poi recuperabile con LECTRACE.&lt;br /&gt;
Per capire in che modalità avviene l'esecuzione si utilizza GSERVEUR (vedi [[Variabili_globali|Variabili globali]]).&lt;br /&gt;
&lt;br /&gt;
Nel momento in cui c'è una traccia appena chiusa è possibile visualizzarla all'utente finale con questo comando:&lt;br /&gt;
&amp;lt;code&amp;gt;Call LEC_TRACE FROM LECFIC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La [[Variabili globali|variabile globale]] '''GTRACE''' contiene il nome della traccia corrente; se GTRACE=&amp;quot;&amp;quot; vuol dire che non c'è traccia in corso.&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    #Apertura traccia (in modalità interattiva) (GSERVEUR=0 modalità interattiva, =1 modalità batch)&lt;br /&gt;
    If !GSERVEUR   &lt;br /&gt;
      Call OUVRE_TRACE(&amp;quot;Inizio log&amp;quot; -num$(date$)-time$) From LECFIC&lt;br /&gt;
    Endif&lt;br /&gt;
        &lt;br /&gt;
    #2 modi per scrivere un messaggio informativo&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    Call MESSAGE  (&amp;quot;log&amp;quot;-num$(date$)-time$)   FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Scrittura errore&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,1) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Chiusura e visualizzazione traccia &lt;br /&gt;
    Call ECR_TRACE(&amp;quot;Fine log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    If !GSERVEUR&lt;br /&gt;
        Call FERME_TRACE From LECFIC    #chiudo traccia&lt;br /&gt;
        Call LEC_TRACE FROM LECFIC      #visualizzo traccia&lt;br /&gt;
        Call SUP_TRACE FROM LECFIC      #cancello la traccia &lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call ECR_TRACE(&amp;quot;Testo&amp;quot;,N) From GESECRAN ===&lt;br /&gt;
Valori possibili di N:&lt;br /&gt;
*  0 = nero&lt;br /&gt;
*  1 = rosso&lt;br /&gt;
* -1 = verde&lt;br /&gt;
* -2 = blu&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=248</id>
		<title>Gestione tracce</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=248"/>
		<updated>2019-07-03T12:49:22Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
In Sage i file di log sono chiamati tracce, e sono ricercabili attraverso '''LECTRACE''' (all'apertura della finestra premere F12 per vedere l'elenco delle tracce).&lt;br /&gt;
&lt;br /&gt;
Nel creare un file di traccia da codice è possibile distinguere se il programma viene eseguito in modalità batch o in modalità interattiva (in genere in modalità batch si fa sempre un log per poter capire se succede qualcosa di anomalo).&lt;br /&gt;
&lt;br /&gt;
In genere in modalità interattiva al termine dell'esecuzione la traccia viene visualizzata automaticamente, altrimenti viene scritta ed è poi recuperabile con LECTRACE.&lt;br /&gt;
Per capire in che modalità avviene l'esecuzione si utilizza GSERVEUR (vedi [[Variabili_globali|Variabili globali]]).&lt;br /&gt;
&lt;br /&gt;
Nel momento in cui c'è una traccia appena chiusa è possibile visualizzarla all'utente finale con questo comando:&lt;br /&gt;
&amp;lt;code&amp;gt;Call LEC_TRACE FROM LECFIC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La [[Variabili globali|variabile globale]] '''GTRACE''' contiene il nome della traccia corrente; se GTRACE=&amp;quot;&amp;quot; vuol dire che non c'è traccia in corso.&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    #Apertura traccia (in modalità interattiva) (GSERVEUR=0 modalità interattiva, =1 modalità batch)&lt;br /&gt;
    If !GSERVEUR   &lt;br /&gt;
      Call OUVRE_TRACE(&amp;quot;Inizio log&amp;quot; -num$(date$)-time$) From LECFIC&lt;br /&gt;
    Endif&lt;br /&gt;
        &lt;br /&gt;
    #e modi per scrivere un messaggio informativo&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    Call MESSAGE  (&amp;quot;log&amp;quot;-num$(date$)-time$)   FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Scrittura errore&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,1) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Chiusura e visualizzazione traccia &lt;br /&gt;
    Call ECR_TRACE(&amp;quot;Fine log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    If !GSERVEUR&lt;br /&gt;
        Call FERME_TRACE From LECFIC    #chiudo traccia&lt;br /&gt;
        Call LEC_TRACE FROM LECFIC      #visualizzo traccia&lt;br /&gt;
        Call SUP_TRACE FROM LECFIC      #cancello la traccia &lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call ECR_TRACE(&amp;quot;Testo&amp;quot;,N) From GESECRAN ===&lt;br /&gt;
Valori possibili di N:&lt;br /&gt;
*  0 = nero&lt;br /&gt;
*  1 = rosso&lt;br /&gt;
* -1 = verde&lt;br /&gt;
* -2 = blu&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=247</id>
		<title>Gestione tracce</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=247"/>
		<updated>2019-07-03T12:48:07Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
In Sage i file di log sono chiamati tracce, e sono ricercabili attraverso '''LECTRACE''' (all'apertura della finestra premere F12 per vedere l'elenco delle tracce).&lt;br /&gt;
&lt;br /&gt;
Nel creare un file di traccia da codice è possibile distinguere se il programma viene eseguito in modalità batch o in modalità interattiva (in genere in modalità batch si fa sempre un log per poter capire se succede qualcosa di anomalo).&lt;br /&gt;
&lt;br /&gt;
In genere in modalità interattiva al termine dell'esecuzione la traccia viene visualizzata automaticamente, altrimenti viene scritta ed è poi recuperabile con LECTRACE.&lt;br /&gt;
Per capire in che modalità avviene l'esecuzione si utilizza GSERVEUR (vedi [[Variabili_globali|Variabili globali]]).&lt;br /&gt;
&lt;br /&gt;
Nel momento in cui c'è una traccia appena chiusa è possibile visualizzarla all'utente finale con questo comando:&lt;br /&gt;
&amp;lt;code&amp;gt;Call LEC_TRACE FROM LECFIC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La [[Variabili globali|variabile globale]] '''GTRACE''' contiene il nome della traccia corrente; se GTRACE=&amp;quot;&amp;quot; vuol dire che non c'è traccia in corso.&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    #Apertura traccia (in modalità interattiva) (GSERVEUR=0 modalità interattiva, =1 modalità batch)&lt;br /&gt;
    If !GSERVEUR   &lt;br /&gt;
      Call OUVRE_TRACE(&amp;quot;Inizio log&amp;quot; -num$(date$)-time$) From LECFIC&lt;br /&gt;
    Endif&lt;br /&gt;
        &lt;br /&gt;
    #Scrittura traccia&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Scrittura errore&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,1) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Chiusura e visualizzazione traccia &lt;br /&gt;
    Call ECR_TRACE(&amp;quot;Fine log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    If !GSERVEUR&lt;br /&gt;
        Call FERME_TRACE From LECFIC    #chiudo traccia&lt;br /&gt;
        Call LEC_TRACE FROM LECFIC      #visualizzo traccia&lt;br /&gt;
        Call SUP_TRACE FROM LECFIC      #cancello la traccia &lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call ECR_TRACE(&amp;quot;Testo&amp;quot;,N) From GESECRAN ===&lt;br /&gt;
Valori possibili di N:&lt;br /&gt;
*  0 = nero&lt;br /&gt;
*  1 = rosso&lt;br /&gt;
* -1 = verde&lt;br /&gt;
* -2 = blu&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Lettura_tabelle&amp;diff=245</id>
		<title>Lettura tabelle</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Lettura_tabelle&amp;diff=245"/>
		<updated>2019-07-03T09:14:49Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Procedura standard di lettura */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Gli esempi che seguono indicano con &amp;lt;code&amp;gt;[XXX]&amp;lt;/code&amp;gt; l'identificativo di una tabella già aperta.&lt;br /&gt;
&lt;br /&gt;
Per limitare la lettura delle colonne vedi istruzione '''[[Columns]]'''.&lt;br /&gt;
&lt;br /&gt;
== Apertura tabella ==&lt;br /&gt;
Apertura di una tabella:&lt;br /&gt;
&amp;lt;pre&amp;gt;If clalev([F:ITM])=0: Local File ITMMASTER [F:ITM] : Endif&amp;lt;/pre&amp;gt;&lt;br /&gt;
Apertura tabella di un dossier diverso dal corrente:&lt;br /&gt;
&amp;lt;pre&amp;gt;If clalev([F:YFCT])=0: Local File 'X3.AFCTCUR' [F:YFCT] : Endif&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Procedura standard di lettura ==&lt;br /&gt;
In generale, per leggere una tabella:&lt;br /&gt;
#Si controlla che non sia già aperta con l'istruzione [[clalev]]&lt;br /&gt;
#Se non è aperta si apre indicando un'etichetta con cui poi ci riferiremo alla tabella; in questo modo è possibile aprire due volte la stessa tabella.&lt;br /&gt;
#Si legge&lt;br /&gt;
#Si controlla che la lettura sia andata a buon fine attraverso la variabile &amp;lt;code&amp;gt;fstat&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !clalev([F:YADI])           :# controllo che non sia aperta&lt;br /&gt;
  Local File ATABDIV [F:YADI]  :# dichiarazione di apertura tabella con etichetta YADI&lt;br /&gt;
Endif&lt;br /&gt;
Read[F:YADI]CODE = 6052;ABFIC  :# lettura da tabella (in questo caso specifico è una tabella diversa, capitolo 6052)&lt;br /&gt;
If fstat                       :# controllo che la lettura sia andata a buon fine&lt;br /&gt;
  Infbox &amp;quot;Errore&amp;quot;                  &lt;br /&gt;
Else&lt;br /&gt;
  InfBox &amp;quot;ok&amp;quot;                  :# se fstat=0 è tutto ok&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Forma breve:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !clalev([F:YADI]) : Local File ATABDIV [F:YADI] : Endif : #commento&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lettura puntuale di un record ==&lt;br /&gt;
&amp;lt;code&amp;gt;Read [XXX]indice = KEY1;KEY2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per sapere come è definito l'indice andare a vedere la tabella da leggere in '''[[GESATB]]''', nella scheda indici.&lt;br /&gt;
&lt;br /&gt;
Esempio (attenzione ai doppi apici da mettere per ogni valore scritto direttamente come stringa)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Read [XXX]indice = &amp;quot;STR1&amp;quot;;&amp;quot;STR2&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
equivalente di&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
VARIABILE2=&amp;quot;STR2&amp;quot;&lt;br /&gt;
Read [XXX]indice = &amp;quot;VAL1&amp;quot;;VARIABILE2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lettura sequenziale di record ==&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt; For [XXX] Where CAMPO = CONDIZIONE&lt;br /&gt;
Next&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt; For [F:YCE] Where YCODMAR = [M:YCE0]YCODMAR&lt;br /&gt;
   ... &lt;br /&gt;
  NUMERO = [F:YCE]YSEQMAR&lt;br /&gt;
 Next&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stability ===&lt;br /&gt;
Nel caso di tabelle che variano con grande frequenza e solo in caso di un SQL server, con l'istruzione &amp;lt;code&amp;gt;For&amp;lt;/code&amp;gt; si può utilizzare l'istruzione &amp;lt;code&amp;gt;With Stability&amp;lt;/code&amp;gt;, per esempio&lt;br /&gt;
 For [FAS] With Stability&lt;br /&gt;
 ...&lt;br /&gt;
 Next&lt;br /&gt;
&lt;br /&gt;
In pratica fa in modo che il ciclo agisca solo sulle righe già presenti nel db quando il ciclo ha inizio.&lt;br /&gt;
&lt;br /&gt;
== Lettura con filtro ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Filter [F:YCE]      # Azzero eventuale filtro precedente&lt;br /&gt;
 Filter [F:YCE] Where YCODMAR = [M:YCE0]YCODMAR Order By YSEQMAR Desc       # applico filtro&lt;br /&gt;
 #oppure Where key NOMEINDICE=campo1;campo2;campo3&lt;br /&gt;
 # è possibile utilizzare Order by (staccato, non OrderBy), per es. Order By RANG Asc; NOM(1) Desc&lt;br /&gt;
&lt;br /&gt;
 For [F:YCE]  &lt;br /&gt;
   Break  #istruzione non necessaria&lt;br /&gt;
 Next&lt;br /&gt;
 Filter [F:YCE] # tolgo filtro&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se la tabella è aperta con una condizione ''[[Where]]'', le condizioni di [[Filter]] vengono applicate ai record già selezionati (come fosse in &amp;quot;and&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
Nel codice sorgente l'istruzione [[Link]] indica una join tra tabelle&lt;br /&gt;
&lt;br /&gt;
E' possibile utilizzare una variabile contenente un criterio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Local Char CRIT(50)(3)&lt;br /&gt;
CRIT(0)=&amp;quot;ABREV='Orig' &amp;quot;&lt;br /&gt;
CRIT(1)=&amp;quot;And MOT&amp;gt;='A'&amp;quot;&lt;br /&gt;
Filter [ABR] Where evalue(CRIT)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si può fare anche &amp;lt;code&amp;gt;Local File AABREV[ABR] where evalue(CRIT)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lettura metadati tabella ==&lt;br /&gt;
Riporto un esempio in cui vengono visualizzate le caratteristiche di una tabella.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Call LEGGIDATI_TABELLA(&amp;quot;YITMINF&amp;quot;)&lt;br /&gt;
End &lt;br /&gt;
&lt;br /&gt;
Subprog LEGGIDATI_TABELLA(TABELLA)&lt;br /&gt;
    Value Char TABELLA()&lt;br /&gt;
    File = TABELLA [YYLT]&lt;br /&gt;
&lt;br /&gt;
    Infbox 'Ci sono '-num$([G:YYLT]nbzon)-' campi nella tabella CLIENTI:'&lt;br /&gt;
    For I = 0 To [G:YYLT]nbzon - 1&lt;br /&gt;
        Infbox [G:YYLT]adxfname(I)&lt;br /&gt;
    Next I&lt;br /&gt;
&lt;br /&gt;
    Infbox 'Ci sono '-num$([G:YYLT]nbind)-'indici nella tabella CLIENTI:'&lt;br /&gt;
    For I = 0 To [G:YYLT]nbind - 1&lt;br /&gt;
        Infbox [G:YYLT]keyname(I)&lt;br /&gt;
        Case [G:YYLT]keyuniq(I)&lt;br /&gt;
        When 0 : Infbox ' (Con Omonimi) '&lt;br /&gt;
        When 1 : Infbox ' (Senza Omonimi) '&lt;br /&gt;
        When 2 : Infbox ' (Più omonimi) '&lt;br /&gt;
        Endcase&lt;br /&gt;
        Infbox 'Lunghezza = '-num$([G:YYLT]keylen(I))&lt;br /&gt;
        Infbox 'Dimensione totale record = '-num$([G:YYLT]tairec)&lt;br /&gt;
    Next I&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
* rowcount() contiene il numero di record di un file appena aperto, e tiene conto dei filtri applicati; per esempio &amp;lt;code&amp;gt;rowcount([F:ITM])&amp;lt;/code&amp;gt;&lt;br /&gt;
* nbrecord() returns the number of lines on a table opened by File or Trbegin.&lt;br /&gt;
* adxdlrec contiene il numero di record cancellati con l'istruzione &amp;lt;code&amp;gt;Delete (classe)&amp;lt;/code&amp;gt;&lt;br /&gt;
* nbrecord() dà il numero di record della tabella passata come parametro (la tabella deve essere aperta).&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=244</id>
		<title>Gestione tracce</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=244"/>
		<updated>2019-07-03T07:14:25Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
In Sage i file di log sono chiamati tracce, e sono ricercabili attraverso '''LECTRACE''' (all'apertura della finestra premere F12 per vedere l'elenco delle tracce).&lt;br /&gt;
&lt;br /&gt;
Nel creare un file di traccia da codice è possibile distinguere se il programma viene eseguito in modalità batch o in modalità interattiva (in genere in modalità batch si fa sempre un log per poter capire se succede qualcosa di anomalo).&lt;br /&gt;
&lt;br /&gt;
In genere in modalità interattiva al termine dell'esecuzione la traccia viene visualizzata automaticamente, altrimenti viene scritta ed è poi recuperabile con LECTRACE.&lt;br /&gt;
Per capire in che modalità avviene l'esecuzione si utilizza GSERVEUR (vedi [[Variabili_globali|Variabili globali]]).&lt;br /&gt;
&lt;br /&gt;
Nel momento in cui c'è una traccia appena chiusa è possibile visualizzarla all'utente finale con questo comando:&lt;br /&gt;
&amp;lt;code&amp;gt;Call LEC_TRACE FROM LECFIC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La [[Variabili globali|variabile globale]] '''GTRACE''' contiene il nome della traccia corrente; se GTRACE=&amp;quot;&amp;quot; vuol dire che non c'è traccia in corso.&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    #Apertura traccia (in modalità interattiva) (GSERVEUR=0 modalità interattiva, =1 modalità batch)&lt;br /&gt;
    If !GSERVEUR   &lt;br /&gt;
      Call OUVRE_TRACE(&amp;quot;Inizio log&amp;quot; -num$(date$)-time$) From LECFIC&lt;br /&gt;
    Endif&lt;br /&gt;
        &lt;br /&gt;
    #Scrittura traccia&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Scrittura errore&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,1) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Chiusura e visualizzazione traccia &lt;br /&gt;
    Call ECR_TRACE(&amp;quot;Fine log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    If !GSERVEUR&lt;br /&gt;
        Call FERME_TRACE From LECFIC    #chiudo traccia&lt;br /&gt;
        Call LEC_TRACE FROM LECFIC      #visualizzo traccia&lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call ECR_TRACE(&amp;quot;Testo&amp;quot;,N) From GESECRAN ===&lt;br /&gt;
Valori possibili di N:&lt;br /&gt;
* 0=nero&lt;br /&gt;
* 1=rosso&lt;br /&gt;
* 2=verde&lt;br /&gt;
* 3=blu&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=243</id>
		<title>Gestione tracce</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=243"/>
		<updated>2019-07-03T07:14:09Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
In Sage i file di log sono chiamati tracce, e sono ricercabili attraverso '''LECTRACE''' (all'apertura della finestra premere F12 per vedere l'elenco delle tracce).&lt;br /&gt;
&lt;br /&gt;
Nel creare un file di traccia da codice è possibile distinguere se il programma viene eseguito in modalità batch o in modalità interattiva (in genere in modalità batch si fa sempre un log per poter capire se succede qualcosa di anomalo).&lt;br /&gt;
&lt;br /&gt;
In genere in modalità interattiva al termine dell'esecuzione la traccia viene visualizzata automaticamente, altrimenti viene scritta ed è poi recuperabile con LECTRACE.&lt;br /&gt;
Per capire in che modalità avviene l'esecuzione si utilizza GSERVEUR (vedi [[Variabili_globali|Variabili globali]]).&lt;br /&gt;
&lt;br /&gt;
Nel momento in cui c'è una traccia appena chiusa è possibile visualizzarla all'utente finale con questo comando:&lt;br /&gt;
&amp;lt;code&amp;gt;Call LEC_TRACE FROM LECFIC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La [[Variabili globali|variabile globale]] GTRACE contiene il nome della traccia corrente; se GTRACE=&amp;quot;&amp;quot; vuol dire che non c'è traccia in corso.&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    #Apertura traccia (in modalità interattiva) (GSERVEUR=0 modalità interattiva, =1 modalità batch)&lt;br /&gt;
    If !GSERVEUR   &lt;br /&gt;
      Call OUVRE_TRACE(&amp;quot;Inizio log&amp;quot; -num$(date$)-time$) From LECFIC&lt;br /&gt;
    Endif&lt;br /&gt;
        &lt;br /&gt;
    #Scrittura traccia&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Scrittura errore&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,1) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Chiusura e visualizzazione traccia &lt;br /&gt;
    Call ECR_TRACE(&amp;quot;Fine log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    If !GSERVEUR&lt;br /&gt;
        Call FERME_TRACE From LECFIC    #chiudo traccia&lt;br /&gt;
        Call LEC_TRACE FROM LECFIC      #visualizzo traccia&lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call ECR_TRACE(&amp;quot;Testo&amp;quot;,N) From GESECRAN ===&lt;br /&gt;
Valori possibili di N:&lt;br /&gt;
* 0=nero&lt;br /&gt;
* 1=rosso&lt;br /&gt;
* 2=verde&lt;br /&gt;
* 3=blu&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=242</id>
		<title>Gestione tracce</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=242"/>
		<updated>2019-07-03T07:13:59Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
In Sage i file di log sono chiamati tracce, e sono ricercabili attraverso '''LECTRACE''' (all'apertura della finestra premere F12 per vedere l'elenco delle tracce).&lt;br /&gt;
&lt;br /&gt;
Nel creare un file di traccia da codice è possibile distinguere se il programma viene eseguito in modalità batch o in modalità interattiva (in genere in modalità batch si fa sempre un log per poter capire se succede qualcosa di anomalo).&lt;br /&gt;
&lt;br /&gt;
In genere in modalità interattiva al termine dell'esecuzione la traccia viene visualizzata automaticamente, altrimenti viene scritta ed è poi recuperabile con LECTRACE.&lt;br /&gt;
Per capire in che modalità avviene l'esecuzione si utilizza GSERVEUR (vedi [[Variabili_globali|Variabili globali]]).&lt;br /&gt;
&lt;br /&gt;
Nel momento in cui c'è una traccia appena chiusa è possibile visualizzarla all'utente finale con questo comando:&lt;br /&gt;
&amp;lt;code&amp;gt;Call LEC_TRACE FROM LECFIC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La [Variabili globali|variabile globale]] GTRACE contiene il nome della traccia corrente; se GTRACE=&amp;quot;&amp;quot; vuol dire che non c'è traccia in corso.&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    #Apertura traccia (in modalità interattiva) (GSERVEUR=0 modalità interattiva, =1 modalità batch)&lt;br /&gt;
    If !GSERVEUR   &lt;br /&gt;
      Call OUVRE_TRACE(&amp;quot;Inizio log&amp;quot; -num$(date$)-time$) From LECFIC&lt;br /&gt;
    Endif&lt;br /&gt;
        &lt;br /&gt;
    #Scrittura traccia&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Scrittura errore&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,1) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Chiusura e visualizzazione traccia &lt;br /&gt;
    Call ECR_TRACE(&amp;quot;Fine log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    If !GSERVEUR&lt;br /&gt;
        Call FERME_TRACE From LECFIC    #chiudo traccia&lt;br /&gt;
        Call LEC_TRACE FROM LECFIC      #visualizzo traccia&lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call ECR_TRACE(&amp;quot;Testo&amp;quot;,N) From GESECRAN ===&lt;br /&gt;
Valori possibili di N:&lt;br /&gt;
* 0=nero&lt;br /&gt;
* 1=rosso&lt;br /&gt;
* 2=verde&lt;br /&gt;
* 3=blu&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=241</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=241"/>
		<updated>2019-07-03T07:11:35Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo (vedi [[Gestione tracce]])&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GSTAOK''': pulsante standard &amp;quot;Ok&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Lo standard in generale fa queste due chiamate all'apertura e alla chiusura di una finestra (sorgenti SUB*.src):&lt;br /&gt;
&lt;br /&gt;
Dentro $OUVRE&lt;br /&gt;
&amp;lt;pre&amp;gt;#Salva l'attuale situazione delle variabili globali&lt;br /&gt;
Gosub SAUV_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME&lt;br /&gt;
&amp;lt;pre&amp;gt;#Ripristina le variabili globali&lt;br /&gt;
Gosub REST_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=240</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=240"/>
		<updated>2019-07-03T07:11:21Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo (vedi [[Gestione_tracce]])&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GSTAOK''': pulsante standard &amp;quot;Ok&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Lo standard in generale fa queste due chiamate all'apertura e alla chiusura di una finestra (sorgenti SUB*.src):&lt;br /&gt;
&lt;br /&gt;
Dentro $OUVRE&lt;br /&gt;
&amp;lt;pre&amp;gt;#Salva l'attuale situazione delle variabili globali&lt;br /&gt;
Gosub SAUV_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME&lt;br /&gt;
&amp;lt;pre&amp;gt;#Ripristina le variabili globali&lt;br /&gt;
Gosub REST_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=239</id>
		<title>Gestione tracce</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=239"/>
		<updated>2019-07-03T07:10:40Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
In Sage i file di log sono chiamati tracce, e sono ricercabili attraverso '''LECTRACE''' (all'apertura della finestra premere F12 per vedere l'elenco delle tracce).&lt;br /&gt;
&lt;br /&gt;
Nel creare un file di traccia da codice è possibile distinguere se il programma viene eseguito in modalità batch o in modalità interattiva (in genere in modalità batch si fa sempre un log per poter capire se succede qualcosa di anomalo).&lt;br /&gt;
&lt;br /&gt;
In genere in modalità interattiva al termine dell'esecuzione la traccia viene visualizzata automaticamente, altrimenti viene scritta ed è poi recuperabile con LECTRACE.&lt;br /&gt;
Per capire in che modalità avviene l'esecuzione si utilizza GSERVEUR (vedi [[Variabili_globali|Variabili globali]]).&lt;br /&gt;
&lt;br /&gt;
Nel momento in cui c'è una traccia appena chiusa è possibile visualizzarla all'utente finale con questo comando:&lt;br /&gt;
&amp;lt;code&amp;gt;Call LEC_TRACE FROM LECFIC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    #Apertura traccia (in modalità interattiva) (GSERVEUR=0 modalità interattiva, =1 modalità batch)&lt;br /&gt;
    If !GSERVEUR   &lt;br /&gt;
      Call OUVRE_TRACE(&amp;quot;Inizio log&amp;quot; -num$(date$)-time$) From LECFIC&lt;br /&gt;
    Endif&lt;br /&gt;
        &lt;br /&gt;
    #Scrittura traccia&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Scrittura errore&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,1) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Chiusura e visualizzazione traccia &lt;br /&gt;
    Call ECR_TRACE(&amp;quot;Fine log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    If !GSERVEUR&lt;br /&gt;
        Call FERME_TRACE From LECFIC    #chiudo traccia&lt;br /&gt;
        Call LEC_TRACE FROM LECFIC      #visualizzo traccia&lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call ECR_TRACE(&amp;quot;Testo&amp;quot;,N) From GESECRAN ===&lt;br /&gt;
Valori possibili di N:&lt;br /&gt;
* 0=nero&lt;br /&gt;
* 1=rosso&lt;br /&gt;
* 2=verde&lt;br /&gt;
* 3=blu&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=238</id>
		<title>Gestione tracce</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_tracce&amp;diff=238"/>
		<updated>2019-07-03T07:09:17Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
In Sage i file di log sono chiamati tracce, e sono ricercabili attraverso '''LECTRACE''' (all'apertura della finestra premere F12 per vedere l'elenco delle tracce).&lt;br /&gt;
&lt;br /&gt;
Nel creare un file di traccia da codice è possibile distinguere se il programma viene eseguito in modalità batch o in modalità interattiva (in genere in modalità batch si fa sempre un log per poter capire se succede qualcosa di anomalo).&lt;br /&gt;
&lt;br /&gt;
In genere in modalità interattiva al termine dell'esecuzione la traccia viene visualizzata automaticamente, altrimenti viene scritta ed è poi recuperabile con LECTRACE.&lt;br /&gt;
Per capire in che modalità avviene l'esecuzione si utilizza GSERVEUR (vedi [[Sage:Variabili_globali|Variabili globali]]).&lt;br /&gt;
&lt;br /&gt;
Nel momento in cui c'è una traccia appena chiusa è possibile visualizzarla all'utente finale con questo comando:&lt;br /&gt;
&amp;lt;code&amp;gt;Call LEC_TRACE FROM LECFIC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    #Apertura traccia (in modalità interattiva) (GSERVEUR=0 modalità interattiva, =1 modalità batch)&lt;br /&gt;
    If !GSERVEUR   &lt;br /&gt;
      Call OUVRE_TRACE(&amp;quot;Inizio log&amp;quot; -num$(date$)-time$) From LECFIC&lt;br /&gt;
    Endif&lt;br /&gt;
        &lt;br /&gt;
    #Scrittura traccia&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Scrittura errore&lt;br /&gt;
    Call ECR_TRACE(&amp;quot;log&amp;quot;-num$(date$)-time$,1) FROM GESECRAN&lt;br /&gt;
&lt;br /&gt;
    #Chiusura e visualizzazione traccia &lt;br /&gt;
    Call ECR_TRACE(&amp;quot;Fine log&amp;quot;-num$(date$)-time$,0) FROM GESECRAN&lt;br /&gt;
    If !GSERVEUR&lt;br /&gt;
        Call FERME_TRACE From LECFIC    #chiudo traccia&lt;br /&gt;
        Call LEC_TRACE FROM LECFIC      #visualizzo traccia&lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call ECR_TRACE(&amp;quot;Testo&amp;quot;,N) From GESECRAN ===&lt;br /&gt;
Valori possibili di N:&lt;br /&gt;
* 0=nero&lt;br /&gt;
* 1=rosso&lt;br /&gt;
* 2=verde&lt;br /&gt;
* 3=blu&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=237</id>
		<title>Gestione Bottoni</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=237"/>
		<updated>2019-07-02T16:10:51Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Finestre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;...appunti...&lt;br /&gt;
&lt;br /&gt;
= Nelle Finestre =&lt;br /&gt;
* BOTTONI&lt;br /&gt;
** SETBOUT refresh dei bottoni&lt;br /&gt;
** AP_CHOIX dopo clic su bottone&lt;br /&gt;
** AVANT_BOUTON: prima dell'esecuzione bottone specifico&lt;br /&gt;
** AVANT_XXX: prima dell'esecuzione bottone standard&lt;br /&gt;
** BOUTON: dopo esecuzione bottone specifico&lt;br /&gt;
** XXX: dopo esecuzione bottone standard&lt;br /&gt;
&lt;br /&gt;
* Menu&lt;br /&gt;
** AVANT_MEN prima dell'esecuzione&lt;br /&gt;
** MEN: dopo l'esecuzione&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Altro esempio da qualche sorgente SUB*.src:&lt;br /&gt;
&lt;br /&gt;
Finestra&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE &lt;br /&gt;
 When GSTACRE  : Gosub CREATE : #Créer&lt;br /&gt;
 When GSTAANU  : Gosub ANNUL  : #Supprimer&lt;br /&gt;
 When GSTAENR  : Gosub MODIF  : #Enregistrer&lt;br /&gt;
 When GSTARET  :&lt;br /&gt;
  If REP=&amp;quot;C&amp;quot; | REP=&amp;quot;D&amp;quot; : Gosub CREATE &lt;br /&gt;
  Elsif REP=&amp;quot;M&amp;quot; : Gosub MODIF &lt;br /&gt;
  Endif &lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oppure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE&lt;br /&gt;
  When GSTARET :&lt;br /&gt;
    Case GREP&lt;br /&gt;
      When &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; : REPONSE = GSTACRE&lt;br /&gt;
      When &amp;quot;M&amp;quot;      : REPONSE = GSTAENR&lt;br /&gt;
    Endcase&lt;br /&gt;
Endcase&lt;br /&gt;
#&lt;br /&gt;
Case REPONSE&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET, GSTAOK  : Gosub ENREG&lt;br /&gt;
 When GSTAEND, GSTAESC : FIN=1&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dialog box&lt;br /&gt;
&amp;lt;pre&amp;gt;$AP_CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET          : Gosub VALID&lt;br /&gt;
 When GSTAEND, GSTAESC : Gosub CONFIRME&lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Pulsanti standard ==&lt;br /&gt;
&lt;br /&gt;
Talvolta ci sono dei problemi con l'attivazione/disattivazione dei pulsanti standard.&lt;br /&gt;
&lt;br /&gt;
Con le istruzioni [[enable]] e [[disable]]  seguite dal codice del pulsante possiamo gestire la cosa mano.&lt;br /&gt;
&lt;br /&gt;
I codici sono memorizzati in alcune [[variabili globali]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enable GSTACRE   #abilito il pulsante Crea&lt;br /&gt;
Disable GSTAENR  #disabilito il pulsante Registra&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= In azioni oggetto =&lt;br /&gt;
&lt;br /&gt;
Per bottoni: SETBOUT(per disattivarli, CHAINE), AVANTBOUT (prime dell'esecuzione, variabile BOUT), EXEBOUT (dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
Per menu:  SETBOUT(per disattivarli, CHMEN), AVANTBOUT (prime dell'esecuzione, variabile BOUT), STATUT(dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
Per pulsanti standard: &lt;br /&gt;
* AVANT_XXX (AVANT_NEW, AVANT_END, XXX è il codice standard)&lt;br /&gt;
* XXX dopo l'esecuzione (NEW, END, S, C,...)&lt;br /&gt;
&lt;br /&gt;
Per pulsanti specifici: &lt;br /&gt;
* AVANTBOUT (dove la variabile BOUT contiene il codice) &lt;br /&gt;
* EXEBOUT dopo l'esecuzione (dove la variabile BOUT contiene il codice) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per togliere un pulsante da programma specifico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Call VIREBOUT (CHAINE, LISTA) From  GOBJET&amp;lt;/pre&amp;gt; &lt;br /&gt;
* CHAINE : variable char, lista di bottoni disponibili (viene definita nel programma GOBJET)&lt;br /&gt;
* LISTA : value char, lista di bottoni da cancellare &lt;br /&gt;
&lt;br /&gt;
Questi i valori dei bottoni: &lt;br /&gt;
* C - Crea &lt;br /&gt;
* D – Duplica &lt;br /&gt;
* M - Salva &lt;br /&gt;
* A - Elimina&lt;br /&gt;
* F - FINE &lt;br /&gt;
* H – CAMBIAMENTO CODICE lettere aggiornate: bottoni standard &lt;br /&gt;
* J – Allegati&lt;br /&gt;
* K - Commenti  &lt;br /&gt;
* E - Stampa&lt;br /&gt;
* L – Lista&lt;br /&gt;
* R - Selezione&lt;br /&gt;
* 0 - PRIMO &lt;br /&gt;
* 9 - ULTIMO &lt;br /&gt;
* da 1 a 8          : bottoni  standard &lt;br /&gt;
* da a a z          :  bottoni specifici&lt;br /&gt;
* @ - PROPRIETA’ &lt;br /&gt;
* &amp;gt; - Successivo &lt;br /&gt;
* &amp;lt; - Precedente&lt;br /&gt;
&lt;br /&gt;
Esempio: togliere il bottone Crea e attivare il pulsante registrare&lt;br /&gt;
&amp;lt;pre&amp;gt;$SETBOUT&lt;br /&gt;
  Call VIREBOUT (CHAINE, &amp;quot;C&amp;quot;) From  GOBJET  #togliere il bottone Crea&lt;br /&gt;
  REP = &amp;quot;M&amp;quot;  : # attivazione del bottone REGISTRARE&lt;br /&gt;
  # attivazione di una riga menu con codice i (di default le sottorighe dei menu NON sono attive)&lt;br /&gt;
  CHMEN += &amp;quot;i&amp;quot;&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Azioni campo =&lt;br /&gt;
Variabili coinvolte&lt;br /&gt;
&lt;br /&gt;
GREP, GBOUT1..20, GBOUTS, GBOUTA, GBOUTI&lt;br /&gt;
&lt;br /&gt;
GREP:&lt;br /&gt;
* vuoto: nessun bottone selezionato &lt;br /&gt;
* A : annulla&lt;br /&gt;
* C : creazione &lt;br /&gt;
* D : duplicazione &lt;br /&gt;
* M : modifica&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
vedi anche [[Finestre#Aggiungere_un_bottone.2Fmen.C3.B9_contestuale_che_apre_un_oggetto| Aggiungere un bottone che apre un oggetto]]&lt;br /&gt;
&lt;br /&gt;
= Videate =&lt;br /&gt;
&lt;br /&gt;
== Pulsante contestuale su riga di un riquadro ==&lt;br /&gt;
&lt;br /&gt;
I pulsanti di riquadro possibili sono 20, la cui etichetta è contenuta nelle [[variabili globali]] GBOUT1, GBOUT2 ...GBOUT20&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un pulsante contestuale su riga di un riquadro:&lt;br /&gt;
&lt;br /&gt;
* selezionare tra i campi della videata il campo numeratore di riga, spesso NBLIG&lt;br /&gt;
* impostare un'azione Bottone (dalla 2 in poi, la prima libera); l'azione può essere sia SPE che un'azione vera e propria&lt;br /&gt;
* validare la videata&lt;br /&gt;
* aprire il sorgente corrispondente: se è di tipo SPE troverai aggiunto un &amp;lt;code&amp;gt;Subprog B2_NBLIG&amp;lt;/code&amp;gt; dove scrivere il codice da eseguire alla selezione del menu appena creato&lt;br /&gt;
&lt;br /&gt;
=== Disattivazione ===&lt;br /&gt;
&lt;br /&gt;
Attivare l'evento di riga &amp;quot;Init Bottone&amp;quot; sempre sul campo numeratore di riga (NBLIG).&lt;br /&gt;
&lt;br /&gt;
Dentro il Subprog IB_NBLIG che verrà creato nel sorgente azzerare la variabile corrispondente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog IB_NBLIG &lt;br /&gt;
   Raz GBOUT2       #disattivo il pulsante 2&lt;br /&gt;
   GBOUT3='bla bla' # attivo il pulsante 3 con eticheta 'bla bla'&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulsanti standard blocco riquadro ==&lt;br /&gt;
Vedi [[Gestione_Blocco_Riquadro#Gestione_pulsanti_riquadro_standard_Cancella.2FAnnulla.2FCopia...|Gestione Blocco Riquadro]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=236</id>
		<title>Gestione Bottoni</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=236"/>
		<updated>2019-07-02T16:06:42Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Da azioni campo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;...appunti...&lt;br /&gt;
&lt;br /&gt;
= Finestre =&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Altro esempio da qualche sorgente SUB*.src:&lt;br /&gt;
&lt;br /&gt;
Finestra&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE &lt;br /&gt;
 When GSTACRE  : Gosub CREATE : #Créer&lt;br /&gt;
 When GSTAANU  : Gosub ANNUL  : #Supprimer&lt;br /&gt;
 When GSTAENR  : Gosub MODIF  : #Enregistrer&lt;br /&gt;
 When GSTARET  :&lt;br /&gt;
  If REP=&amp;quot;C&amp;quot; | REP=&amp;quot;D&amp;quot; : Gosub CREATE &lt;br /&gt;
  Elsif REP=&amp;quot;M&amp;quot; : Gosub MODIF &lt;br /&gt;
  Endif &lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oppure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE&lt;br /&gt;
  When GSTARET :&lt;br /&gt;
    Case GREP&lt;br /&gt;
      When &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; : REPONSE = GSTACRE&lt;br /&gt;
      When &amp;quot;M&amp;quot;      : REPONSE = GSTAENR&lt;br /&gt;
    Endcase&lt;br /&gt;
Endcase&lt;br /&gt;
#&lt;br /&gt;
Case REPONSE&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET, GSTAOK  : Gosub ENREG&lt;br /&gt;
 When GSTAEND, GSTAESC : FIN=1&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dialog box&lt;br /&gt;
&amp;lt;pre&amp;gt;$AP_CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET          : Gosub VALID&lt;br /&gt;
 When GSTAEND, GSTAESC : Gosub CONFIRME&lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Pulsanti standard ==&lt;br /&gt;
&lt;br /&gt;
Talvolta ci sono dei problemi con l'attivazione/disattivazione dei pulsanti standard.&lt;br /&gt;
&lt;br /&gt;
Con le istruzioni [[enable]] e [[disable]]  seguite dal codice del pulsante possiamo gestire la cosa mano.&lt;br /&gt;
&lt;br /&gt;
I codici sono memorizzati in alcune [[variabili globali]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enable GSTACRE   #abilito il pulsante Crea&lt;br /&gt;
Disable GSTAENR  #disabilito il pulsante Registra&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= In azioni oggetto =&lt;br /&gt;
&lt;br /&gt;
Per bottoni: SETBOUT(per disattivarli, CHAINE), AVANTBOUT (prime dell'esecuzione, variabile BOUT), EXEBOUT (dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
Per menu:  SETBOUT(per disattivarli, CHMEN), AVANTBOUT (prime dell'esecuzione, variabile BOUT), STATUT(dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
Per pulsanti standard: &lt;br /&gt;
* AVANT_XXX (AVANT_NEW, AVANT_END, XXX è il codice standard)&lt;br /&gt;
* XXX dopo l'esecuzione (NEW, END, S, C,...)&lt;br /&gt;
&lt;br /&gt;
Per pulsanti specifici: &lt;br /&gt;
* AVANTBOUT (dove la variabile BOUT contiene il codice) &lt;br /&gt;
* EXEBOUT dopo l'esecuzione (dove la variabile BOUT contiene il codice) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per togliere un pulsante da programma specifico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Call VIREBOUT (CHAINE, LISTA) From  GOBJET&amp;lt;/pre&amp;gt; &lt;br /&gt;
* CHAINE : variable char, lista di bottoni disponibili (viene definita nel programma GOBJET)&lt;br /&gt;
* LISTA : value char, lista di bottoni da cancellare &lt;br /&gt;
&lt;br /&gt;
Questi i valori dei bottoni: &lt;br /&gt;
* C - Crea &lt;br /&gt;
* D – Duplica &lt;br /&gt;
* M - Salva &lt;br /&gt;
* A - Elimina&lt;br /&gt;
* F - FINE &lt;br /&gt;
* H – CAMBIAMENTO CODICE lettere aggiornate: bottoni standard &lt;br /&gt;
* J – Allegati&lt;br /&gt;
* K - Commenti  &lt;br /&gt;
* E - Stampa&lt;br /&gt;
* L – Lista&lt;br /&gt;
* R - Selezione&lt;br /&gt;
* 0 - PRIMO &lt;br /&gt;
* 9 - ULTIMO &lt;br /&gt;
* da 1 a 8          : bottoni  standard &lt;br /&gt;
* da a a z          :  bottoni specifici&lt;br /&gt;
* @ - PROPRIETA’ &lt;br /&gt;
* &amp;gt; - Successivo &lt;br /&gt;
* &amp;lt; - Precedente&lt;br /&gt;
&lt;br /&gt;
Esempio: togliere il bottone Crea e attivare il pulsante registrare&lt;br /&gt;
&amp;lt;pre&amp;gt;$SETBOUT&lt;br /&gt;
  Call VIREBOUT (CHAINE, &amp;quot;C&amp;quot;) From  GOBJET  #togliere il bottone Crea&lt;br /&gt;
  REP = &amp;quot;M&amp;quot;  : # attivazione del bottone REGISTRARE&lt;br /&gt;
  # attivazione di una riga menu con codice i (di default le sottorighe dei menu NON sono attive)&lt;br /&gt;
  CHMEN += &amp;quot;i&amp;quot;&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Azioni campo =&lt;br /&gt;
Variabili coinvolte&lt;br /&gt;
&lt;br /&gt;
GREP, GBOUT1..20, GBOUTS, GBOUTA, GBOUTI&lt;br /&gt;
&lt;br /&gt;
GREP:&lt;br /&gt;
* vuoto: nessun bottone selezionato &lt;br /&gt;
* A : annulla&lt;br /&gt;
* C : creazione &lt;br /&gt;
* D : duplicazione &lt;br /&gt;
* M : modifica&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
vedi anche [[Finestre#Aggiungere_un_bottone.2Fmen.C3.B9_contestuale_che_apre_un_oggetto| Aggiungere un bottone che apre un oggetto]]&lt;br /&gt;
&lt;br /&gt;
= Videate =&lt;br /&gt;
&lt;br /&gt;
== Pulsante contestuale su riga di un riquadro ==&lt;br /&gt;
&lt;br /&gt;
I pulsanti di riquadro possibili sono 20, la cui etichetta è contenuta nelle [[variabili globali]] GBOUT1, GBOUT2 ...GBOUT20&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un pulsante contestuale su riga di un riquadro:&lt;br /&gt;
&lt;br /&gt;
* selezionare tra i campi della videata il campo numeratore di riga, spesso NBLIG&lt;br /&gt;
* impostare un'azione Bottone (dalla 2 in poi, la prima libera); l'azione può essere sia SPE che un'azione vera e propria&lt;br /&gt;
* validare la videata&lt;br /&gt;
* aprire il sorgente corrispondente: se è di tipo SPE troverai aggiunto un &amp;lt;code&amp;gt;Subprog B2_NBLIG&amp;lt;/code&amp;gt; dove scrivere il codice da eseguire alla selezione del menu appena creato&lt;br /&gt;
&lt;br /&gt;
=== Disattivazione ===&lt;br /&gt;
&lt;br /&gt;
Attivare l'evento di riga &amp;quot;Init Bottone&amp;quot; sempre sul campo numeratore di riga (NBLIG).&lt;br /&gt;
&lt;br /&gt;
Dentro il Subprog IB_NBLIG che verrà creato nel sorgente azzerare la variabile corrispondente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog IB_NBLIG &lt;br /&gt;
   Raz GBOUT2       #disattivo il pulsante 2&lt;br /&gt;
   GBOUT3='bla bla' # attivo il pulsante 3 con eticheta 'bla bla'&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulsanti standard blocco riquadro ==&lt;br /&gt;
Vedi [[Gestione_Blocco_Riquadro#Gestione_pulsanti_riquadro_standard_Cancella.2FAnnulla.2FCopia...|Gestione Blocco Riquadro]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=235</id>
		<title>Gestione Bottoni</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=235"/>
		<updated>2019-07-02T16:06:22Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Da azioni oggetto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;...appunti...&lt;br /&gt;
&lt;br /&gt;
= Finestre =&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Altro esempio da qualche sorgente SUB*.src:&lt;br /&gt;
&lt;br /&gt;
Finestra&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE &lt;br /&gt;
 When GSTACRE  : Gosub CREATE : #Créer&lt;br /&gt;
 When GSTAANU  : Gosub ANNUL  : #Supprimer&lt;br /&gt;
 When GSTAENR  : Gosub MODIF  : #Enregistrer&lt;br /&gt;
 When GSTARET  :&lt;br /&gt;
  If REP=&amp;quot;C&amp;quot; | REP=&amp;quot;D&amp;quot; : Gosub CREATE &lt;br /&gt;
  Elsif REP=&amp;quot;M&amp;quot; : Gosub MODIF &lt;br /&gt;
  Endif &lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oppure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE&lt;br /&gt;
  When GSTARET :&lt;br /&gt;
    Case GREP&lt;br /&gt;
      When &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; : REPONSE = GSTACRE&lt;br /&gt;
      When &amp;quot;M&amp;quot;      : REPONSE = GSTAENR&lt;br /&gt;
    Endcase&lt;br /&gt;
Endcase&lt;br /&gt;
#&lt;br /&gt;
Case REPONSE&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET, GSTAOK  : Gosub ENREG&lt;br /&gt;
 When GSTAEND, GSTAESC : FIN=1&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dialog box&lt;br /&gt;
&amp;lt;pre&amp;gt;$AP_CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET          : Gosub VALID&lt;br /&gt;
 When GSTAEND, GSTAESC : Gosub CONFIRME&lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Pulsanti standard ==&lt;br /&gt;
&lt;br /&gt;
Talvolta ci sono dei problemi con l'attivazione/disattivazione dei pulsanti standard.&lt;br /&gt;
&lt;br /&gt;
Con le istruzioni [[enable]] e [[disable]]  seguite dal codice del pulsante possiamo gestire la cosa mano.&lt;br /&gt;
&lt;br /&gt;
I codici sono memorizzati in alcune [[variabili globali]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enable GSTACRE   #abilito il pulsante Crea&lt;br /&gt;
Disable GSTAENR  #disabilito il pulsante Registra&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= In azioni oggetto =&lt;br /&gt;
&lt;br /&gt;
Per bottoni: SETBOUT(per disattivarli, CHAINE), AVANTBOUT (prime dell'esecuzione, variabile BOUT), EXEBOUT (dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
Per menu:  SETBOUT(per disattivarli, CHMEN), AVANTBOUT (prime dell'esecuzione, variabile BOUT), STATUT(dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
Per pulsanti standard: &lt;br /&gt;
* AVANT_XXX (AVANT_NEW, AVANT_END, XXX è il codice standard)&lt;br /&gt;
* XXX dopo l'esecuzione (NEW, END, S, C,...)&lt;br /&gt;
&lt;br /&gt;
Per pulsanti specifici: &lt;br /&gt;
* AVANTBOUT (dove la variabile BOUT contiene il codice) &lt;br /&gt;
* EXEBOUT dopo l'esecuzione (dove la variabile BOUT contiene il codice) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per togliere un pulsante da programma specifico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Call VIREBOUT (CHAINE, LISTA) From  GOBJET&amp;lt;/pre&amp;gt; &lt;br /&gt;
* CHAINE : variable char, lista di bottoni disponibili (viene definita nel programma GOBJET)&lt;br /&gt;
* LISTA : value char, lista di bottoni da cancellare &lt;br /&gt;
&lt;br /&gt;
Questi i valori dei bottoni: &lt;br /&gt;
* C - Crea &lt;br /&gt;
* D – Duplica &lt;br /&gt;
* M - Salva &lt;br /&gt;
* A - Elimina&lt;br /&gt;
* F - FINE &lt;br /&gt;
* H – CAMBIAMENTO CODICE lettere aggiornate: bottoni standard &lt;br /&gt;
* J – Allegati&lt;br /&gt;
* K - Commenti  &lt;br /&gt;
* E - Stampa&lt;br /&gt;
* L – Lista&lt;br /&gt;
* R - Selezione&lt;br /&gt;
* 0 - PRIMO &lt;br /&gt;
* 9 - ULTIMO &lt;br /&gt;
* da 1 a 8          : bottoni  standard &lt;br /&gt;
* da a a z          :  bottoni specifici&lt;br /&gt;
* @ - PROPRIETA’ &lt;br /&gt;
* &amp;gt; - Successivo &lt;br /&gt;
* &amp;lt; - Precedente&lt;br /&gt;
&lt;br /&gt;
Esempio: togliere il bottone Crea e attivare il pulsante registrare&lt;br /&gt;
&amp;lt;pre&amp;gt;$SETBOUT&lt;br /&gt;
  Call VIREBOUT (CHAINE, &amp;quot;C&amp;quot;) From  GOBJET  #togliere il bottone Crea&lt;br /&gt;
  REP = &amp;quot;M&amp;quot;  : # attivazione del bottone REGISTRARE&lt;br /&gt;
  # attivazione di una riga menu con codice i (di default le sottorighe dei menu NON sono attive)&lt;br /&gt;
  CHMEN += &amp;quot;i&amp;quot;&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Da azioni campo ==&lt;br /&gt;
Variabili coinvolte&lt;br /&gt;
&lt;br /&gt;
GREP, GBOUT1..20, GBOUTS, GBOUTA, GBOUTI&lt;br /&gt;
&lt;br /&gt;
GREP:&lt;br /&gt;
* vuoto: nessun bottone selezionato &lt;br /&gt;
* A : annulla&lt;br /&gt;
* C : creazione &lt;br /&gt;
* D : duplicazione &lt;br /&gt;
* M : modifica&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
vedi anche [[Finestre#Aggiungere_un_bottone.2Fmen.C3.B9_contestuale_che_apre_un_oggetto| Aggiungere un bottone che apre un oggetto]]&lt;br /&gt;
&lt;br /&gt;
= Videate =&lt;br /&gt;
&lt;br /&gt;
== Pulsante contestuale su riga di un riquadro ==&lt;br /&gt;
&lt;br /&gt;
I pulsanti di riquadro possibili sono 20, la cui etichetta è contenuta nelle [[variabili globali]] GBOUT1, GBOUT2 ...GBOUT20&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un pulsante contestuale su riga di un riquadro:&lt;br /&gt;
&lt;br /&gt;
* selezionare tra i campi della videata il campo numeratore di riga, spesso NBLIG&lt;br /&gt;
* impostare un'azione Bottone (dalla 2 in poi, la prima libera); l'azione può essere sia SPE che un'azione vera e propria&lt;br /&gt;
* validare la videata&lt;br /&gt;
* aprire il sorgente corrispondente: se è di tipo SPE troverai aggiunto un &amp;lt;code&amp;gt;Subprog B2_NBLIG&amp;lt;/code&amp;gt; dove scrivere il codice da eseguire alla selezione del menu appena creato&lt;br /&gt;
&lt;br /&gt;
=== Disattivazione ===&lt;br /&gt;
&lt;br /&gt;
Attivare l'evento di riga &amp;quot;Init Bottone&amp;quot; sempre sul campo numeratore di riga (NBLIG).&lt;br /&gt;
&lt;br /&gt;
Dentro il Subprog IB_NBLIG che verrà creato nel sorgente azzerare la variabile corrispondente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog IB_NBLIG &lt;br /&gt;
   Raz GBOUT2       #disattivo il pulsante 2&lt;br /&gt;
   GBOUT3='bla bla' # attivo il pulsante 3 con eticheta 'bla bla'&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulsanti standard blocco riquadro ==&lt;br /&gt;
Vedi [[Gestione_Blocco_Riquadro#Gestione_pulsanti_riquadro_standard_Cancella.2FAnnulla.2FCopia...|Gestione Blocco Riquadro]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=234</id>
		<title>Gestione Bottoni</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=234"/>
		<updated>2019-07-02T16:06:01Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Da azioni oggetto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;...appunti...&lt;br /&gt;
&lt;br /&gt;
= Finestre =&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Altro esempio da qualche sorgente SUB*.src:&lt;br /&gt;
&lt;br /&gt;
Finestra&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE &lt;br /&gt;
 When GSTACRE  : Gosub CREATE : #Créer&lt;br /&gt;
 When GSTAANU  : Gosub ANNUL  : #Supprimer&lt;br /&gt;
 When GSTAENR  : Gosub MODIF  : #Enregistrer&lt;br /&gt;
 When GSTARET  :&lt;br /&gt;
  If REP=&amp;quot;C&amp;quot; | REP=&amp;quot;D&amp;quot; : Gosub CREATE &lt;br /&gt;
  Elsif REP=&amp;quot;M&amp;quot; : Gosub MODIF &lt;br /&gt;
  Endif &lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oppure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE&lt;br /&gt;
  When GSTARET :&lt;br /&gt;
    Case GREP&lt;br /&gt;
      When &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; : REPONSE = GSTACRE&lt;br /&gt;
      When &amp;quot;M&amp;quot;      : REPONSE = GSTAENR&lt;br /&gt;
    Endcase&lt;br /&gt;
Endcase&lt;br /&gt;
#&lt;br /&gt;
Case REPONSE&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET, GSTAOK  : Gosub ENREG&lt;br /&gt;
 When GSTAEND, GSTAESC : FIN=1&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dialog box&lt;br /&gt;
&amp;lt;pre&amp;gt;$AP_CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET          : Gosub VALID&lt;br /&gt;
 When GSTAEND, GSTAESC : Gosub CONFIRME&lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Pulsanti standard ==&lt;br /&gt;
&lt;br /&gt;
Talvolta ci sono dei problemi con l'attivazione/disattivazione dei pulsanti standard.&lt;br /&gt;
&lt;br /&gt;
Con le istruzioni [[enable]] e [[disable]]  seguite dal codice del pulsante possiamo gestire la cosa mano.&lt;br /&gt;
&lt;br /&gt;
I codici sono memorizzati in alcune [[variabili globali]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enable GSTACRE   #abilito il pulsante Crea&lt;br /&gt;
Disable GSTAENR  #disabilito il pulsante Registra&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Da azioni oggetto ==&lt;br /&gt;
&lt;br /&gt;
Per bottoni: SETBOUT(per disattivarli, CHAINE), AVANTBOUT (prime dell'esecuzione, variabile BOUT), EXEBOUT (dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
Per menu:  SETBOUT(per disattivarli, CHMEN), AVANTBOUT (prime dell'esecuzione, variabile BOUT), STATUT(dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
Per pulsanti standard: &lt;br /&gt;
* AVANT_XXX (AVANT_NEW, AVANT_END, XXX è il codice standard)&lt;br /&gt;
* XXX dopo l'esecuzione (NEW, END, S, C,...)&lt;br /&gt;
&lt;br /&gt;
Per pulsanti specifici: &lt;br /&gt;
* AVANTBOUT (dove la variabile BOUT contiene il codice) &lt;br /&gt;
* EXEBOUT dopo l'esecuzione (dove la variabile BOUT contiene il codice) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per togliere un pulsante da programma specifico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Call VIREBOUT (CHAINE, LISTA) From  GOBJET&amp;lt;/pre&amp;gt; &lt;br /&gt;
* CHAINE : variable char, lista di bottoni disponibili (viene definita nel programma GOBJET)&lt;br /&gt;
* LISTA : value char, lista di bottoni da cancellare &lt;br /&gt;
&lt;br /&gt;
Questi i valori dei bottoni: &lt;br /&gt;
* C - Crea &lt;br /&gt;
* D – Duplica &lt;br /&gt;
* M - Salva &lt;br /&gt;
* A - Elimina&lt;br /&gt;
* F - FINE &lt;br /&gt;
* H – CAMBIAMENTO CODICE lettere aggiornate: bottoni standard &lt;br /&gt;
* J – Allegati&lt;br /&gt;
* K - Commenti  &lt;br /&gt;
* E - Stampa&lt;br /&gt;
* L – Lista&lt;br /&gt;
* R - Selezione&lt;br /&gt;
* 0 - PRIMO &lt;br /&gt;
* 9 - ULTIMO &lt;br /&gt;
* da 1 a 8          : bottoni  standard &lt;br /&gt;
* da a a z          :  bottoni specifici&lt;br /&gt;
* @ - PROPRIETA’ &lt;br /&gt;
* &amp;gt; - Successivo &lt;br /&gt;
* &amp;lt; - Precedente&lt;br /&gt;
&lt;br /&gt;
Esempio: togliere il bottone Crea e attivare il pulsante registrare&lt;br /&gt;
&amp;lt;pre&amp;gt;$SETBOUT&lt;br /&gt;
  Call VIREBOUT (CHAINE, &amp;quot;C&amp;quot;) From  GOBJET  #togliere il bottone Crea&lt;br /&gt;
  REP = &amp;quot;M&amp;quot;  : # attivazione del bottone REGISTRARE&lt;br /&gt;
  # attivazione di una riga menu con codice i (di default le sottorighe dei menu NON sono attive)&lt;br /&gt;
  CHMEN += &amp;quot;i&amp;quot;&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Da azioni campo ==&lt;br /&gt;
Variabili coinvolte&lt;br /&gt;
&lt;br /&gt;
GREP, GBOUT1..20, GBOUTS, GBOUTA, GBOUTI&lt;br /&gt;
&lt;br /&gt;
GREP:&lt;br /&gt;
* vuoto: nessun bottone selezionato &lt;br /&gt;
* A : annulla&lt;br /&gt;
* C : creazione &lt;br /&gt;
* D : duplicazione &lt;br /&gt;
* M : modifica&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
vedi anche [[Finestre#Aggiungere_un_bottone.2Fmen.C3.B9_contestuale_che_apre_un_oggetto| Aggiungere un bottone che apre un oggetto]]&lt;br /&gt;
&lt;br /&gt;
= Videate =&lt;br /&gt;
&lt;br /&gt;
== Pulsante contestuale su riga di un riquadro ==&lt;br /&gt;
&lt;br /&gt;
I pulsanti di riquadro possibili sono 20, la cui etichetta è contenuta nelle [[variabili globali]] GBOUT1, GBOUT2 ...GBOUT20&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un pulsante contestuale su riga di un riquadro:&lt;br /&gt;
&lt;br /&gt;
* selezionare tra i campi della videata il campo numeratore di riga, spesso NBLIG&lt;br /&gt;
* impostare un'azione Bottone (dalla 2 in poi, la prima libera); l'azione può essere sia SPE che un'azione vera e propria&lt;br /&gt;
* validare la videata&lt;br /&gt;
* aprire il sorgente corrispondente: se è di tipo SPE troverai aggiunto un &amp;lt;code&amp;gt;Subprog B2_NBLIG&amp;lt;/code&amp;gt; dove scrivere il codice da eseguire alla selezione del menu appena creato&lt;br /&gt;
&lt;br /&gt;
=== Disattivazione ===&lt;br /&gt;
&lt;br /&gt;
Attivare l'evento di riga &amp;quot;Init Bottone&amp;quot; sempre sul campo numeratore di riga (NBLIG).&lt;br /&gt;
&lt;br /&gt;
Dentro il Subprog IB_NBLIG che verrà creato nel sorgente azzerare la variabile corrispondente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog IB_NBLIG &lt;br /&gt;
   Raz GBOUT2       #disattivo il pulsante 2&lt;br /&gt;
   GBOUT3='bla bla' # attivo il pulsante 3 con eticheta 'bla bla'&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulsanti standard blocco riquadro ==&lt;br /&gt;
Vedi [[Gestione_Blocco_Riquadro#Gestione_pulsanti_riquadro_standard_Cancella.2FAnnulla.2FCopia...|Gestione Blocco Riquadro]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=233</id>
		<title>Gestione Bottoni</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=233"/>
		<updated>2019-07-02T16:00:50Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Da azioni oggetto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;...appunti...&lt;br /&gt;
&lt;br /&gt;
= Finestre =&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Altro esempio da qualche sorgente SUB*.src:&lt;br /&gt;
&lt;br /&gt;
Finestra&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE &lt;br /&gt;
 When GSTACRE  : Gosub CREATE : #Créer&lt;br /&gt;
 When GSTAANU  : Gosub ANNUL  : #Supprimer&lt;br /&gt;
 When GSTAENR  : Gosub MODIF  : #Enregistrer&lt;br /&gt;
 When GSTARET  :&lt;br /&gt;
  If REP=&amp;quot;C&amp;quot; | REP=&amp;quot;D&amp;quot; : Gosub CREATE &lt;br /&gt;
  Elsif REP=&amp;quot;M&amp;quot; : Gosub MODIF &lt;br /&gt;
  Endif &lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oppure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE&lt;br /&gt;
  When GSTARET :&lt;br /&gt;
    Case GREP&lt;br /&gt;
      When &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; : REPONSE = GSTACRE&lt;br /&gt;
      When &amp;quot;M&amp;quot;      : REPONSE = GSTAENR&lt;br /&gt;
    Endcase&lt;br /&gt;
Endcase&lt;br /&gt;
#&lt;br /&gt;
Case REPONSE&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET, GSTAOK  : Gosub ENREG&lt;br /&gt;
 When GSTAEND, GSTAESC : FIN=1&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dialog box&lt;br /&gt;
&amp;lt;pre&amp;gt;$AP_CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET          : Gosub VALID&lt;br /&gt;
 When GSTAEND, GSTAESC : Gosub CONFIRME&lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Pulsanti standard ==&lt;br /&gt;
&lt;br /&gt;
Talvolta ci sono dei problemi con l'attivazione/disattivazione dei pulsanti standard.&lt;br /&gt;
&lt;br /&gt;
Con le istruzioni [[enable]] e [[disable]]  seguite dal codice del pulsante possiamo gestire la cosa mano.&lt;br /&gt;
&lt;br /&gt;
I codici sono memorizzati in alcune [[variabili globali]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enable GSTACRE   #abilito il pulsante Crea&lt;br /&gt;
Disable GSTAENR  #disabilito il pulsante Registra&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Da azioni oggetto ==&lt;br /&gt;
&lt;br /&gt;
Per bottoni: SETBOUT(per disattivarli, CHAINE), AVANTBOUT (prime dell'esecuzione, variabile BOUT), EXEBOUT (dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
Per menu:  SETBOUT(per disattivarli, CHMEN), AVANTBOUT (prime dell'esecuzione, variabile BOUT), STATUT(dopo l'esecuzione, variabile BOUT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per togliere un pulsante da programma specifico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Call VIREBOUT (CHAINE, LISTA) From  GOBJET&amp;lt;/pre&amp;gt; &lt;br /&gt;
* CHAINE : variable char, lista di bottoni disponibili (viene definita nel programma GOBJET)&lt;br /&gt;
* LISTA : value char, lista di bottoni da cancellare &lt;br /&gt;
&lt;br /&gt;
Questi i valori dei bottoni: &lt;br /&gt;
* C - Crea &lt;br /&gt;
* D – Duplica &lt;br /&gt;
* M - Salva &lt;br /&gt;
* A - Elimina&lt;br /&gt;
* F - FINE &lt;br /&gt;
* H – CAMBIAMENTO CODICE lettere aggiornate: bottoni standard &lt;br /&gt;
* J – Allegati&lt;br /&gt;
* K - Commenti  &lt;br /&gt;
* E - Stampa&lt;br /&gt;
* L – Lista&lt;br /&gt;
* R - Selezione&lt;br /&gt;
* 0 - PRIMO &lt;br /&gt;
* 9 - ULTIMO &lt;br /&gt;
* da 1 a 8          : bottoni  standard &lt;br /&gt;
* da a a z          :  bottoni specifici&lt;br /&gt;
* @ - PROPRIETA’ &lt;br /&gt;
* &amp;gt; - Successivo &lt;br /&gt;
* &amp;lt; - Precedente&lt;br /&gt;
&lt;br /&gt;
Esempio: togliere il bottone Crea e attivare il pulsante registrare&lt;br /&gt;
&amp;lt;pre&amp;gt;$SETBOUT&lt;br /&gt;
  Call VIREBOUT (CHAINE, &amp;quot;C&amp;quot;) From  GOBJET  #togliere il bottone Crea&lt;br /&gt;
  REP = &amp;quot;M&amp;quot;  : # attivazione del bottone REGISTRARE&lt;br /&gt;
  # attivazione di una riga menu con codice i (di default le sottorighe dei menu NON sono attive)&lt;br /&gt;
  CHMEN += &amp;quot;i&amp;quot;&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Da azioni campo ==&lt;br /&gt;
Variabili coinvolte&lt;br /&gt;
&lt;br /&gt;
GREP, GBOUT1..20, GBOUTS, GBOUTA, GBOUTI&lt;br /&gt;
&lt;br /&gt;
GREP:&lt;br /&gt;
* vuoto: nessun bottone selezionato &lt;br /&gt;
* A : annulla&lt;br /&gt;
* C : creazione &lt;br /&gt;
* D : duplicazione &lt;br /&gt;
* M : modifica&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
vedi anche [[Finestre#Aggiungere_un_bottone.2Fmen.C3.B9_contestuale_che_apre_un_oggetto| Aggiungere un bottone che apre un oggetto]]&lt;br /&gt;
&lt;br /&gt;
= Videate =&lt;br /&gt;
&lt;br /&gt;
== Pulsante contestuale su riga di un riquadro ==&lt;br /&gt;
&lt;br /&gt;
I pulsanti di riquadro possibili sono 20, la cui etichetta è contenuta nelle [[variabili globali]] GBOUT1, GBOUT2 ...GBOUT20&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un pulsante contestuale su riga di un riquadro:&lt;br /&gt;
&lt;br /&gt;
* selezionare tra i campi della videata il campo numeratore di riga, spesso NBLIG&lt;br /&gt;
* impostare un'azione Bottone (dalla 2 in poi, la prima libera); l'azione può essere sia SPE che un'azione vera e propria&lt;br /&gt;
* validare la videata&lt;br /&gt;
* aprire il sorgente corrispondente: se è di tipo SPE troverai aggiunto un &amp;lt;code&amp;gt;Subprog B2_NBLIG&amp;lt;/code&amp;gt; dove scrivere il codice da eseguire alla selezione del menu appena creato&lt;br /&gt;
&lt;br /&gt;
=== Disattivazione ===&lt;br /&gt;
&lt;br /&gt;
Attivare l'evento di riga &amp;quot;Init Bottone&amp;quot; sempre sul campo numeratore di riga (NBLIG).&lt;br /&gt;
&lt;br /&gt;
Dentro il Subprog IB_NBLIG che verrà creato nel sorgente azzerare la variabile corrispondente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog IB_NBLIG &lt;br /&gt;
   Raz GBOUT2       #disattivo il pulsante 2&lt;br /&gt;
   GBOUT3='bla bla' # attivo il pulsante 3 con eticheta 'bla bla'&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulsanti standard blocco riquadro ==&lt;br /&gt;
Vedi [[Gestione_Blocco_Riquadro#Gestione_pulsanti_riquadro_standard_Cancella.2FAnnulla.2FCopia...|Gestione Blocco Riquadro]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=229</id>
		<title>Gestione Bottoni</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=229"/>
		<updated>2019-07-02T11:29:25Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Finestre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Finestre =&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Altro esempio da qualche sorgente SUB*.src:&lt;br /&gt;
&lt;br /&gt;
Finestra&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE &lt;br /&gt;
 When GSTACRE  : Gosub CREATE : #Créer&lt;br /&gt;
 When GSTAANU  : Gosub ANNUL  : #Supprimer&lt;br /&gt;
 When GSTAENR  : Gosub MODIF  : #Enregistrer&lt;br /&gt;
 When GSTARET  :&lt;br /&gt;
  If REP=&amp;quot;C&amp;quot; | REP=&amp;quot;D&amp;quot; : Gosub CREATE &lt;br /&gt;
  Elsif REP=&amp;quot;M&amp;quot; : Gosub MODIF &lt;br /&gt;
  Endif &lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oppure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE&lt;br /&gt;
  When GSTARET :&lt;br /&gt;
    Case GREP&lt;br /&gt;
      When &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; : REPONSE = GSTACRE&lt;br /&gt;
      When &amp;quot;M&amp;quot;      : REPONSE = GSTAENR&lt;br /&gt;
    Endcase&lt;br /&gt;
Endcase&lt;br /&gt;
#&lt;br /&gt;
Case REPONSE&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET, GSTAOK  : Gosub ENREG&lt;br /&gt;
 When GSTAEND, GSTAESC : FIN=1&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dialog box&lt;br /&gt;
&amp;lt;pre&amp;gt;$AP_CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET          : Gosub VALID&lt;br /&gt;
 When GSTAEND, GSTAESC : Gosub CONFIRME&lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Pulsanti standard ==&lt;br /&gt;
&lt;br /&gt;
Talvolta ci sono dei problemi con l'attivazione/disattivazione dei pulsanti standard.&lt;br /&gt;
&lt;br /&gt;
Con le istruzioni [[enable]] e [[disable]]  seguite dal codice del pulsante possiamo gestire la cosa mano.&lt;br /&gt;
&lt;br /&gt;
I codici sono memorizzati in alcune [[variabili globali]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enable GSTACRE   #abilito il pulsante Crea&lt;br /&gt;
Disable GSTAENR  #disabilito il pulsante Registra&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
vedi anche [[Finestre#Aggiungere_un_bottone.2Fmen.C3.B9_contestuale_che_apre_un_oggetto| Aggiungere un bottone che apre un oggetto]]&lt;br /&gt;
&lt;br /&gt;
= Videate =&lt;br /&gt;
&lt;br /&gt;
== Pulsante contestuale su riga di un riquadro ==&lt;br /&gt;
&lt;br /&gt;
I pulsanti di riquadro possibili sono 20, la cui etichetta è contenuta nelle [[variabili globali]] GBOUT1, GBOUT2 ...GBOUT20&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un pulsante contestuale su riga di un riquadro:&lt;br /&gt;
&lt;br /&gt;
* selezionare tra i campi della videata il campo numeratore di riga, spesso NBLIG&lt;br /&gt;
* impostare un'azione Bottone (dalla 2 in poi, la prima libera); l'azione può essere sia SPE che un'azione vera e propria&lt;br /&gt;
* validare la videata&lt;br /&gt;
* aprire il sorgente corrispondente: se è di tipo SPE troverai aggiunto un &amp;lt;code&amp;gt;Subprog B2_NBLIG&amp;lt;/code&amp;gt; dove scrivere il codice da eseguire alla selezione del menu appena creato&lt;br /&gt;
&lt;br /&gt;
=== Disattivazione ===&lt;br /&gt;
&lt;br /&gt;
Attivare l'evento di riga &amp;quot;Init Bottone&amp;quot; sempre sul campo numeratore di riga (NBLIG).&lt;br /&gt;
&lt;br /&gt;
Dentro il Subprog IB_NBLIG che verrà creato nel sorgente azzerare la variabile corrispondente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog IB_NBLIG &lt;br /&gt;
   Raz GBOUT2       #disattivo il pulsante 2&lt;br /&gt;
   GBOUT3='bla bla' # attivo il pulsante 3 con eticheta 'bla bla'&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulsanti standard blocco riquadro ==&lt;br /&gt;
Vedi [[Gestione_Blocco_Riquadro#Gestione_pulsanti_riquadro_standard_Cancella.2FAnnulla.2FCopia...|Gestione Blocco Riquadro]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=228</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=228"/>
		<updated>2019-07-02T11:27:19Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Gestione tipica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GSTAOK''': pulsante standard &amp;quot;Ok&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Lo standard in generale fa queste due chiamate all'apertura e alla chiusura di una finestra (sorgenti SUB*.src):&lt;br /&gt;
&lt;br /&gt;
Dentro $OUVRE&lt;br /&gt;
&amp;lt;pre&amp;gt;#Salva l'attuale situazione delle variabili globali&lt;br /&gt;
Gosub SAUV_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME&lt;br /&gt;
&amp;lt;pre&amp;gt;#Ripristina le variabili globali&lt;br /&gt;
Gosub REST_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=227</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=227"/>
		<updated>2019-07-02T11:25:45Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GSTAOK''': pulsante standard &amp;quot;Ok&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Lo standard in generale fa queste due chiamate all'apertura e alla chiusura di una finestra (sorgenti SUB*.src):&lt;br /&gt;
&lt;br /&gt;
Dentro $OUVRE&lt;br /&gt;
&amp;lt;pre&amp;gt;#Salva l'attuale situazione delle variabili globali&lt;br /&gt;
Gosub SAUV_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME&lt;br /&gt;
&amp;lt;pre&amp;gt;#Ripristina le variabili globali&lt;br /&gt;
Gosub REST_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Altro esempio da qualche sorgente SUB*.src:&lt;br /&gt;
&lt;br /&gt;
Finestra&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE &lt;br /&gt;
 When GSTACRE  : Gosub CREATE : #Créer&lt;br /&gt;
 When GSTAANU  : Gosub ANNUL  : #Supprimer&lt;br /&gt;
 When GSTAENR  : Gosub MODIF  : #Enregistrer&lt;br /&gt;
 When GSTARET  :&lt;br /&gt;
  If REP=&amp;quot;C&amp;quot; | REP=&amp;quot;D&amp;quot; : Gosub CREATE &lt;br /&gt;
  Elsif REP=&amp;quot;M&amp;quot; : Gosub MODIF &lt;br /&gt;
  Endif &lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oppure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE&lt;br /&gt;
  When GSTARET :&lt;br /&gt;
    Case GREP&lt;br /&gt;
      When &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; : REPONSE = GSTACRE&lt;br /&gt;
      When &amp;quot;M&amp;quot;      : REPONSE = GSTAENR&lt;br /&gt;
    Endcase&lt;br /&gt;
Endcase&lt;br /&gt;
#&lt;br /&gt;
Case REPONSE&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dialog box&lt;br /&gt;
&amp;lt;pre&amp;gt;$AP_CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET          : Gosub VALID&lt;br /&gt;
 When GSTAEND, GSTAESC : Gosub CONFIRME&lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=226</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=226"/>
		<updated>2019-07-02T11:18:45Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Gestione tipica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Lo standard in generale fa queste due chiamate all'apertura e alla chiusura di una finestra (sorgenti SUB*.src):&lt;br /&gt;
&lt;br /&gt;
Dentro $OUVRE&lt;br /&gt;
&amp;lt;pre&amp;gt;#Salva l'attuale situazione delle variabili globali&lt;br /&gt;
Gosub SAUV_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME&lt;br /&gt;
&amp;lt;pre&amp;gt;#Ripristina le variabili globali&lt;br /&gt;
Gosub REST_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Altro esempio da qualche sorgente SUB*.src:&lt;br /&gt;
&lt;br /&gt;
Finestra&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE &lt;br /&gt;
 When GSTACRE  : Gosub CREATE : #Créer&lt;br /&gt;
 When GSTAANU  : Gosub ANNUL  : #Supprimer&lt;br /&gt;
 When GSTAENR  : Gosub MODIF  : #Enregistrer&lt;br /&gt;
 When GSTARET  :&lt;br /&gt;
  If REP=&amp;quot;C&amp;quot; | REP=&amp;quot;D&amp;quot; : Gosub CREATE &lt;br /&gt;
  Elsif REP=&amp;quot;M&amp;quot; : Gosub MODIF &lt;br /&gt;
  Endif &lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oppure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$APRES_CHOI&lt;br /&gt;
Case REPONSE&lt;br /&gt;
  When GSTARET :&lt;br /&gt;
    Case GREP&lt;br /&gt;
      When &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot; : REPONSE = GSTACRE&lt;br /&gt;
      When &amp;quot;M&amp;quot;      : REPONSE = GSTAENR&lt;br /&gt;
    Endcase&lt;br /&gt;
Endcase&lt;br /&gt;
#&lt;br /&gt;
Case REPONSE&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dialog box&lt;br /&gt;
&amp;lt;pre&amp;gt;$AP_CHOIX&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTARET          : Gosub VALID&lt;br /&gt;
 When GSTAEND, GSTAESC : Gosub CONFIRME&lt;br /&gt;
 When Default&lt;br /&gt;
Endcase&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=225</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=225"/>
		<updated>2019-07-02T10:58:09Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Variabili speciali */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gestione tipica ==&lt;br /&gt;
&lt;br /&gt;
Lo standard in generale fa queste due chiamate all'apertura e alla chiusura di una finestra:&lt;br /&gt;
&lt;br /&gt;
Dentro $OUVRE&lt;br /&gt;
&amp;lt;pre&amp;gt;#Salva l'attuale situazione delle variabili globali&lt;br /&gt;
Gosub SAUV_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME&lt;br /&gt;
&amp;lt;pre&amp;gt;#Ripristina le variabili globali&lt;br /&gt;
Gosub REST_GLOB From TRTX3GLOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Forzare_la_rilettura_di_un_record_visualizzato&amp;diff=224</id>
		<title>Forzare la rilettura di un record visualizzato</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Forzare_la_rilettura_di_un_record_visualizzato&amp;diff=224"/>
		<updated>2019-07-02T10:54:21Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se si modifica dei valori di un record già aperto va ricaricato in schermata (spesso si fa tramite delle azioni scatenate da menu/pulsanti).&lt;br /&gt;
&lt;br /&gt;
Nel caso non lo si faccia si può verificare o la perdita della modifica (perché viene riscritto il dato vecchio ancora presente in videata)&lt;br /&gt;
&lt;br /&gt;
o esce il messaggio di errore &amp;quot;Obsolete record&amp;quot; (nel caso si cerchi di fare delle modifiche ed il sistema si accorge dell'incongruenza).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esiste una [[Variabili globali|variabile globale]] apposita: GSTALIT.&lt;br /&gt;
&lt;br /&gt;
Eccone alcuni esempi d'uso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$FIN_ACTION&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTALIT : Gosub RELIT From GOBJSUB : SUIZON=&amp;quot;CODACE&amp;quot;&lt;br /&gt;
Endcase&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME o $FIN&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Se si arriva da un tunnel si iposta mkstat in modo che forzi la rilettura al ritorno dal tunnel stesso&lt;br /&gt;
If GFONC1 = &amp;quot;GESSQH&amp;quot; &lt;br /&gt;
   mkstat=GSTALIT &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog CL_BTN(VALEUR)&lt;br /&gt;
Variable Char    VALEUR()&lt;br /&gt;
  # Per forzare la rilettura dopo l'esecuzione dell'azione Click&lt;br /&gt;
  mkstat = GSTALIT&lt;br /&gt;
End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un modo artigianale per ricaricare il record dopo un'azione ad esempio di un bottone è questo:&lt;br /&gt;
&lt;br /&gt;
# inizializzare una variabile globale in coda all'azione: &amp;lt;code&amp;gt;Global Char YGRELIT&amp;lt;/code&amp;gt;&lt;br /&gt;
# nell'azione AVANT_CHOI, testare la presenza della variabile ed eseguire &amp;lt;code&amp;gt;Gosub RELIT from GOBJSUB&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$AVANT_CHOI&lt;br /&gt;
  #Rilettura del record&lt;br /&gt;
  If dim(YGRELIT) &amp;gt; 0 Then&lt;br /&gt;
    Kill YGRELIT&lt;br /&gt;
    Gosub RELIT From GOBJSUB&lt;br /&gt;
  Endif&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Forzare_la_rilettura_di_un_record_visualizzato&amp;diff=223</id>
		<title>Forzare la rilettura di un record visualizzato</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Forzare_la_rilettura_di_un_record_visualizzato&amp;diff=223"/>
		<updated>2019-07-02T10:53:48Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se si modifica dei valori di un record già aperto va ricaricato in schermata (spesso si fa tramite delle azioni scatenate da menu/pulsanti).&lt;br /&gt;
&lt;br /&gt;
Nel caso non lo si faccia si può verificare o la perdita della modifica (perché viene riscritto il dato vecchio ancora presente in videata)&lt;br /&gt;
&lt;br /&gt;
o esce il messaggio di errore &amp;quot;Obsolete record&amp;quot; (nel caso si cerchi di fare delle modifiche ed il sistema si accorge dell'incongruenza).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un modo casereccio per ricaricare il record dopo un'azione ad esempio di un bottone è questo:&lt;br /&gt;
&lt;br /&gt;
# inizializzare una variabile globale in coda all'azione: &amp;lt;code&amp;gt;Global Char YGRELIT&amp;lt;/code&amp;gt;&lt;br /&gt;
# nell'azione AVANT_CHOI, testare la presenza della variabile ed eseguire &amp;lt;code&amp;gt;Gosub RELIT from GOBJSUB&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$AVANT_CHOI&lt;br /&gt;
  #Rilettura del record&lt;br /&gt;
  If dim(YGRELIT) &amp;gt; 0 Then&lt;br /&gt;
    Kill YGRELIT&lt;br /&gt;
    Gosub RELIT From GOBJSUB&lt;br /&gt;
  Endif&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esiste anche una [[Variabili globali|variabile globale]] apposita: GSTALIT.&lt;br /&gt;
&lt;br /&gt;
Eccone alcuni esempi d'uso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$FIN_ACTION&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTALIT : Gosub RELIT From GOBJSUB : SUIZON=&amp;quot;CODACE&amp;quot;&lt;br /&gt;
Endcase&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME o $FIN&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Se si arriva da un tunnel si iposta mkstat in modo che forzi la rilettura al ritorno dal tunnel stesso&lt;br /&gt;
If GFONC1 = &amp;quot;GESSQH&amp;quot; &lt;br /&gt;
   mkstat=GSTALIT &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog CL_BTN(VALEUR)&lt;br /&gt;
Variable Char    VALEUR()&lt;br /&gt;
  # Per forzare la rilettura dopo l'esecuzione dell'azione Click&lt;br /&gt;
  mkstat = GSTALIT&lt;br /&gt;
End&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Forzare_la_rilettura_di_un_record_visualizzato&amp;diff=222</id>
		<title>Forzare la rilettura di un record visualizzato</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Forzare_la_rilettura_di_un_record_visualizzato&amp;diff=222"/>
		<updated>2019-07-02T10:53:35Z</updated>

		<summary type="html">&lt;p&gt;SageDev: Created page with &amp;quot;Se si modifica dei valori di un record già aperto va ricaricato in schermata (spesso si fa tramite delle azioni scatenate da menu/pulsanti).  Nel caso non lo si faccia si pu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se si modifica dei valori di un record già aperto va ricaricato in schermata (spesso si fa tramite delle azioni scatenate da menu/pulsanti).&lt;br /&gt;
&lt;br /&gt;
Nel caso non lo si faccia si può verificare o la perdita della modifica (perché viene riscritto il dato vecchio ancora presente in videata)&lt;br /&gt;
o esce il messaggio di errore &amp;quot;Obsolete record&amp;quot; (nel caso si cerchi di fare delle modifiche ed il sistema si accorge dell'incongruenza).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un modo casereccio per ricaricare il record dopo un'azione ad esempio di un bottone è questo:&lt;br /&gt;
&lt;br /&gt;
# inizializzare una variabile globale in coda all'azione: &amp;lt;code&amp;gt;Global Char YGRELIT&amp;lt;/code&amp;gt;&lt;br /&gt;
# nell'azione AVANT_CHOI, testare la presenza della variabile ed eseguire &amp;lt;code&amp;gt;Gosub RELIT from GOBJSUB&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$AVANT_CHOI&lt;br /&gt;
  #Rilettura del record&lt;br /&gt;
  If dim(YGRELIT) &amp;gt; 0 Then&lt;br /&gt;
    Kill YGRELIT&lt;br /&gt;
    Gosub RELIT From GOBJSUB&lt;br /&gt;
  Endif&lt;br /&gt;
Return&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esiste anche una [[Variabili globali|variabile globale]] apposita: GSTALIT.&lt;br /&gt;
&lt;br /&gt;
Eccone alcuni esempi d'uso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$FIN_ACTION&lt;br /&gt;
Case REPONSE&lt;br /&gt;
 When GSTALIT : Gosub RELIT From GOBJSUB : SUIZON=&amp;quot;CODACE&amp;quot;&lt;br /&gt;
Endcase&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro $FERME o $FIN&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Se si arriva da un tunnel si iposta mkstat in modo che forzi la rilettura al ritorno dal tunnel stesso&lt;br /&gt;
If GFONC1 = &amp;quot;GESSQH&amp;quot; &lt;br /&gt;
   mkstat=GSTALIT &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog CL_BTN(VALEUR)&lt;br /&gt;
Variable Char    VALEUR()&lt;br /&gt;
  # Per forzare la rilettura dopo l'esecuzione dell'azione Click&lt;br /&gt;
  mkstat = GSTALIT&lt;br /&gt;
End&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=221</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=221"/>
		<updated>2019-07-02T10:41:55Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Variabili globali */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GSTARET''': pulsante standard &amp;quot;return&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=220</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=220"/>
		<updated>2019-07-02T10:40:12Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Variabili globali */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTANEW''': pulsante standard &amp;quot;Nuovo&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=219</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=219"/>
		<updated>2019-07-02T10:30:28Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Variabili globali */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per [[forzare la rilettura di un record visualizzato]]&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=218</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=218"/>
		<updated>2019-07-02T10:29:57Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Variabili globali */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Variabili globali ==&lt;br /&gt;
Ci sono delle variabili definite globalmente che permettono di gestire le diverse condizioni che sovvengono nelle varie fasi di esecuzione del codice.&lt;br /&gt;
&lt;br /&gt;
Per vederle tutte vai alla funzione [[GESAGB]].&lt;br /&gt;
&lt;br /&gt;
* '''GREP''': &lt;br /&gt;
*# vuoto,&amp;quot;&amp;quot;, quando l'utente sta visualizzando i dati&lt;br /&gt;
*# vale &amp;quot;C&amp;quot; se siamo in creazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Crea&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;M&amp;quot; se siamo in visualizzazione/modifica (quando è attivo e viene premuto il pulsante &amp;lt;code&amp;gt;Registra&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;D&amp;quot; se siamo in duplicazione (quando viene premuto il pulsante &amp;lt;code&amp;gt;Duplica&amp;lt;/code&amp;gt;)&lt;br /&gt;
*# vale &amp;quot;A&amp;quot; se siamo in annullamento (quando viene premuto il pulsante &amp;lt;code&amp;gt;Annulla&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''GIMPORT''': variabile utilizzata per gestire la fase di [[ImportExport|importazione/esportazione]]; se vale 1 vuol dire che si è in fase di importazione/esportazione&lt;br /&gt;
* '''GIMP()''': vedi [[ImportExport#Programmazione| Programmazione per Import/Export]]&lt;br /&gt;
* '''GSILENCE''': se vale 0 indica che sono abilitati i messaggi popup; quando viene impostata a 1 l'utente non vedrà più tali messaggi; utile in programmi non interattivi, va poi rimessa a 0&lt;br /&gt;
* '''GERR''': indica/imposta se c'è un messaggio d'errore&lt;br /&gt;
*# 1: messaggio d'errore&lt;br /&gt;
*# 2: messaggio informativo&lt;br /&gt;
*# 3: messaggio di avviso&lt;br /&gt;
*# 4: messaggio in fondo alla videata&lt;br /&gt;
* '''GMESSAGE''': contiene un eventuale messaggio di errore&lt;br /&gt;
* '''GSERVEUR''': indica se l'esecuzione è in modalità interattiva o batch (0 interattivo, 1 batch); se in batch non si creano file di log&lt;br /&gt;
* '''GTRACE''': indica il nome del file traccia attivo, vuoto se non c'è un file di traccia attivo&lt;br /&gt;
* '''GFONCTION''': indica la funzione corrente&lt;br /&gt;
* '''GFONCTION1''': indica la funzione chiamante solo in caso di tunnel o chiamante da un oggetto all'altro, come la precedente (o vuota?) altrimenti&lt;br /&gt;
* '''GFONC1''': indica sempre la funzione precedente, in ogni caso (quindi anche quando una funzione viene aperta tramite F7)&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* PULSANTI&lt;br /&gt;
** '''GSTACRE''': pulsante standard &amp;quot;Crea&amp;quot;&lt;br /&gt;
** '''GSTAENR''': pulsante standard &amp;quot;Registra&amp;quot;&lt;br /&gt;
** '''GSTAANU''': pulsante standard &amp;quot;Elimina&amp;quot;&lt;br /&gt;
** '''GSTAFIN''': pulsante standard &amp;quot;Annulla&amp;quot;&lt;br /&gt;
** '''GBOUT1''','''GBOUT2''',...'''GBOUT20''': contengono le etichette dei pulsanti di riquadro di videata (vedi [[Gestione Bottoni]])&lt;br /&gt;
* '''GREPORT1 e GREPORT2''': contengono il codice stampa scheda e il codice stampa liste, vedi Help funzione da GESAFC (campi Stampa RPT1 e Liste RPT2)&lt;br /&gt;
* '''GSTALIT''': per forzare la rilettura di un record visualizzato&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&amp;lt;pre&amp;gt;If GREP = &amp;quot;C&amp;quot; and !GIMPORT&lt;br /&gt;
   # azione da eseguire se siamo in fase di creazione ma non in fase di importazione&lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If !GSERVEUR          &lt;br /&gt;
    #siamo in modalità interattiva: posso chiedere conferma all'utente&lt;br /&gt;
    Local Integer YESNO : Raz YESNO&lt;br /&gt;
    Call OUINON('Import ODA/ODV da AS400?',YESNO) From GESECRAN&lt;br /&gt;
    If YESNO=1 : Infbox 'Elaborazione bloccata!' : Return : Endif  &lt;br /&gt;
Endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Far eseguire in modalità batch del codice (e non generare log)&lt;br /&gt;
GSERVEUR = 1&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
  Call ...&lt;br /&gt;
GSERVEUR = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabili speciali ==&lt;br /&gt;
&lt;br /&gt;
* '''zc''' contiene il valore del campo corrente, o il valore di una formula corrente o altro in base al contesto &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** CZ, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
* '''zoncou''' contiene il nome del campo corrente in inserimento nella videata &amp;lt;br /&amp;gt;da non confondere con &lt;br /&gt;
** COUZON, variabile attiva in base all'azione, per es. in APRES_MODIF&lt;br /&gt;
** ZONSUI, variabile che permette di indicare il prossimo campo su cui mettere il focus (per es.:&amp;lt;code&amp;gt;zonsui = &amp;quot;[M:PTH1]YNUMPEZZI(&amp;quot;+num$(nolign-1)+&amp;quot;)&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''zonsor''' è una variabile alfanumerica in cui si trova il nome dell'ultimo campo in inserimento nella videata&lt;br /&gt;
* '''maskcou''' contiene il nome della videata corrente&lt;br /&gt;
* '''trtcou''' contiene il nome del programma corrente&lt;br /&gt;
* '''adxpno''' restituisce i nomi dei programmi accodati (il livello 0 è il livello corrente, il livello 1 è quello del programma chiamante, ecc)&lt;br /&gt;
* '''datesyst''' data di sistema (pag.30 di Linguaggio.pdf)&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Blocco_Riquadro&amp;diff=217</id>
		<title>Gestione Blocco Riquadro</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Blocco_Riquadro&amp;diff=217"/>
		<updated>2019-06-27T15:46:30Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Gestione Inserimento/Modifica/Cancellazione righe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gestione di un blocco riquadro di una videata&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Numeratore di riga NBLIG&lt;br /&gt;
&lt;br /&gt;
== Gestione Inserimento/Modifica/Cancellazione righe ==&lt;br /&gt;
Per fare dei controlli alla cancellazione di una linea tramite pulsante contestuale, prima del registra (evitando così di dover usare VERIF_CRE della gestione oggetto)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog C_NBLIG&lt;br /&gt;
  If status=65&lt;br /&gt;
     mkstat=2 #per impedire la cancellazione della riga&lt;br /&gt;
  Endif&lt;br /&gt;
End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vedi l'help dell'istruzione [[status]] per tutti i codici possibili che può avere.&lt;br /&gt;
&lt;br /&gt;
Per il blocco riquadro possono servire:&lt;br /&gt;
* 65 cancellazione di una riga&lt;br /&gt;
* 68 cancellazione di più righe&lt;br /&gt;
* 71 cambio di riga (da capire differenza con 75)&lt;br /&gt;
* 73 inserimento di una riga&lt;br /&gt;
* 75 modifica di una riga (da capire differenza con 71)&lt;br /&gt;
&lt;br /&gt;
== Gestione pulsanti riquadro standard Cancella/Annulla/Copia... ==&lt;br /&gt;
Questi pulsanti si attivano/disattivano tramite il campo &amp;quot;Opzioni&amp;quot; della sezione blocco (gestione Videata).&lt;br /&gt;
&lt;br /&gt;
In genere viene preimpostato &amp;quot;KARID&amp;quot;, che significa Prec/Succ, Cancellazione di una riga, Ripresa,Inserisci e cancellazione multipla attive&lt;br /&gt;
&lt;br /&gt;
Questi i codici (dall'help):&lt;br /&gt;
&amp;lt;pre&amp;gt;K : Previous &amp;amp; next line in entry mode&lt;br /&gt;
K: Riga precedente &amp;amp; successiva in modalità inserimento&lt;br /&gt;
A: Eliminare una riga&lt;br /&gt;
D: Eliminare un intervallo di righe&lt;br /&gt;
R: Aggiunta di righe a fine riquadro&lt;br /&gt;
I: Inserimento di righe&lt;br /&gt;
S: Taglia&lt;br /&gt;
B: Copia&lt;br /&gt;
C: Incolla&lt;br /&gt;
T: Caricamento di tutte le righe del riquadro&lt;br /&gt;
? : Ricerca&lt;br /&gt;
+ : Giustificazione colonna&lt;br /&gt;
= : Modalità scheda automatica&lt;br /&gt;
1-9 : Numero di colonne fisse (a partire dalla 1a colonna)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gestione videate Opzioni blocco riquadro.png|none]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=216</id>
		<title>Gestione Bottoni</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=216"/>
		<updated>2019-06-27T15:45:33Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Altro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Finestre =&lt;br /&gt;
== Pulsanti standard ==&lt;br /&gt;
&lt;br /&gt;
Talvolta ci sono dei problemi con l'attivazione/disattivazione dei pulsanti standard.&lt;br /&gt;
&lt;br /&gt;
Con le istruzioni [[enable]] e [[disable]]  seguite dal codice del pulsante possiamo gestire la cosa mano.&lt;br /&gt;
&lt;br /&gt;
I codici sono memorizzati in alcune [[variabili globali]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enable GSTACRE   #abilito il pulsante Crea&lt;br /&gt;
Disable GSTAENR  #disabilito il pulsante Registra&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
vedi anche [[Finestre#Aggiungere_un_bottone.2Fmen.C3.B9_contestuale_che_apre_un_oggetto| Aggiungere un bottone che apre un oggetto]]&lt;br /&gt;
&lt;br /&gt;
= Videate =&lt;br /&gt;
&lt;br /&gt;
== Pulsante contestuale su riga di un riquadro ==&lt;br /&gt;
&lt;br /&gt;
I pulsanti di riquadro possibili sono 20, la cui etichetta è contenuta nelle [[variabili globali]] GBOUT1, GBOUT2 ...GBOUT20&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un pulsante contestuale su riga di un riquadro:&lt;br /&gt;
&lt;br /&gt;
* selezionare tra i campi della videata il campo numeratore di riga, spesso NBLIG&lt;br /&gt;
* impostare un'azione Bottone (dalla 2 in poi, la prima libera); l'azione può essere sia SPE che un'azione vera e propria&lt;br /&gt;
* validare la videata&lt;br /&gt;
* aprire il sorgente corrispondente: se è di tipo SPE troverai aggiunto un &amp;lt;code&amp;gt;Subprog B2_NBLIG&amp;lt;/code&amp;gt; dove scrivere il codice da eseguire alla selezione del menu appena creato&lt;br /&gt;
&lt;br /&gt;
=== Disattivazione ===&lt;br /&gt;
&lt;br /&gt;
Attivare l'evento di riga &amp;quot;Init Bottone&amp;quot; sempre sul campo numeratore di riga (NBLIG).&lt;br /&gt;
&lt;br /&gt;
Dentro il Subprog IB_NBLIG che verrà creato nel sorgente azzerare la variabile corrispondente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog IB_NBLIG &lt;br /&gt;
   Raz GBOUT2       #disattivo il pulsante 2&lt;br /&gt;
   GBOUT3='bla bla' # attivo il pulsante 3 con eticheta 'bla bla'&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulsanti standard blocco riquadro ==&lt;br /&gt;
Vedi [[Gestione_Blocco_Riquadro#Gestione_pulsanti_riquadro_standard_Cancella.2FAnnulla.2FCopia...|Gestione Blocco Riquadro]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Status&amp;diff=215</id>
		<title>Status</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Status&amp;diff=215"/>
		<updated>2019-06-27T15:44:02Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dall'help:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!valore status !! [[variabili globali]] !! Descrizione !! Indice&amp;lt;br&amp;gt;GETABOU &lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  || Tab positioning &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &amp;amp;nbsp; || Selection window on a field &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GSTARET  || Exit by return &lt;br /&gt;
|-&lt;br /&gt;
| 5 ||  || Shift+tab positioning &lt;br /&gt;
|-&lt;br /&gt;
| 7 || GSTAESC || Closing the box &lt;br /&gt;
|-&lt;br /&gt;
| 20 || GSTATIR || Positioning via mouse click to a field  &lt;br /&gt;
|-&lt;br /&gt;
| 21 ||  || Positioning via mouse click to a grid  &lt;br /&gt;
|-&lt;br /&gt;
| 26 ||  || Entry in a grid by double-click on a cell &lt;br /&gt;
|-&lt;br /&gt;
| 27 || GSTALFT || Click on left list &lt;br /&gt;
|-&lt;br /&gt;
| 28 || GSTALF2 || Double-click on left list &lt;br /&gt;
|-&lt;br /&gt;
| 36 || GSTALF3 || Click on hierarchized list &lt;br /&gt;
|-&lt;br /&gt;
| 37 || GSTALF4 || Double-click on hierarchized list &lt;br /&gt;
|-&lt;br /&gt;
| 41 ||  || De-selection in the picking box &lt;br /&gt;
|-&lt;br /&gt;
| 42 || GSTAPIC || Event on picking box &lt;br /&gt;
|-&lt;br /&gt;
| 43 ||  || De-selection in hierarchized picking box &lt;br /&gt;
|-&lt;br /&gt;
| 44 || GSTAPKF || Closing a picking box &lt;br /&gt;
|-&lt;br /&gt;
| 45 || GSTASRA || Quick selection &lt;br /&gt;
|-&lt;br /&gt;
| 46 || &amp;amp;nbsp; || activation of the &amp;amp;quot;VERIFIER&amp;amp;quot; button in the formula editor &lt;br /&gt;
|-&lt;br /&gt;
| 47 || &amp;amp;nbsp; || Selection of a parent element without a child element in the formula editor &lt;br /&gt;
|-&lt;br /&gt;
| 48 || GSTAPRG || Previous page for the left list &lt;br /&gt;
|-&lt;br /&gt;
| 49 || GSTASVG || Next page for the left list &lt;br /&gt;
|-&lt;br /&gt;
| 55 || GSTABOI || Left list end &lt;br /&gt;
|-&lt;br /&gt;
| 65 ||  || Cancellation of a line &lt;br /&gt;
|-&lt;br /&gt;
| 68 ||  || Cancellation of a group of lines &lt;br /&gt;
|-&lt;br /&gt;
| 71 ||  || Line change &lt;br /&gt;
|-&lt;br /&gt;
| 73 ||  || Line insert &lt;br /&gt;
|-&lt;br /&gt;
| 75 ||  || Line modification &lt;br /&gt;
|-&lt;br /&gt;
| 82 ||  || Summary &lt;br /&gt;
|-&lt;br /&gt;
| 83 ||  || Delete a group of lines &lt;br /&gt;
|-&lt;br /&gt;
| 91 || GSTANEW || File/New || GNOUV &lt;br /&gt;
|-&lt;br /&gt;
| 92 || GSTAENR || File/Save || GENRE &lt;br /&gt;
|-&lt;br /&gt;
| 93 || GSTACRE || File/Create || GCREE &lt;br /&gt;
|-&lt;br /&gt;
| 94 || GSTAANU || File/Delete || GSUPP &lt;br /&gt;
|-&lt;br /&gt;
| 95 || GSTASEL || File/Select || GSELE &lt;br /&gt;
|-&lt;br /&gt;
| 96 || GSTAFIR || File/First || GPREM &lt;br /&gt;
|-&lt;br /&gt;
| 97 || GSTALAS || File/Last || GDERN &lt;br /&gt;
|-&lt;br /&gt;
| 98 || GSTASUI || File/Next || GSUIV &lt;br /&gt;
|-&lt;br /&gt;
| 99 || GSTAPRE || File/Previous || GPREC &lt;br /&gt;
|-&lt;br /&gt;
| 129-136 || GBOUT1..8 || Contextual menus &lt;br /&gt;
|-&lt;br /&gt;
| 145 || GSTAEUR || Display/Euro &lt;br /&gt;
|-&lt;br /&gt;
| 147 || GSTAMHL || Help modification &lt;br /&gt;
|-&lt;br /&gt;
| 148 || GSTAHLP || Field information &lt;br /&gt;
|-&lt;br /&gt;
| 1029 || GSTAOK || OK button || GVALI &lt;br /&gt;
|-&lt;br /&gt;
| 1100-1119 || GSTASPE1..6 || Application buttons preceded by controls (GSTABOU+I)  || GSPE1..6 &lt;br /&gt;
|-&lt;br /&gt;
| 1200-1219 ||  || Application menus preceded by controls &lt;br /&gt;
|-&lt;br /&gt;
| 1220-1239 ||  || Statuses for the specific/custom developments preceded by controls &lt;br /&gt;
|-&lt;br /&gt;
| 1792 || GSTAFIN || Abort button || GABAN &lt;br /&gt;
|-&lt;br /&gt;
| 1793 || GSTACHG || File/Code change || GCHAN &lt;br /&gt;
|-&lt;br /&gt;
| 1794 || GSTAJOI || File/Attachments || GJOIN &lt;br /&gt;
|-&lt;br /&gt;
| 1795 || GSTACOM || File/Comments || GCOMM &lt;br /&gt;
|-&lt;br /&gt;
| 1796 || GSTAEDI || File/Print || GEDIT &lt;br /&gt;
|-&lt;br /&gt;
| 1797 || GSTALIS || File/List || GLIST &lt;br /&gt;
|-&lt;br /&gt;
| 1798 || GSTADAT || File/Properties || GDATC &lt;br /&gt;
|-&lt;br /&gt;
| 1799 || GSTARAF || Display/Refresh || GRAFF &lt;br /&gt;
|-&lt;br /&gt;
| 1800-1819 ||  || Application buttons without controls (GSTABOU2+I)  &lt;br /&gt;
|-&lt;br /&gt;
| 1820 || GSTATRN || Transaction button || GTRAN &lt;br /&gt;
|-&lt;br /&gt;
| 1821 || GSTAFIN || End button || &amp;amp;nbsp; &lt;br /&gt;
|-&lt;br /&gt;
| 1822 || GSTAHLO || OBjet on Parameter help &lt;br /&gt;
|-&lt;br /&gt;
| 1823 || GSTASTA || Statistics &lt;br /&gt;
|-&lt;br /&gt;
| 1824 || GSTAWOR || Workflow &lt;br /&gt;
|-&lt;br /&gt;
| 1825 || GSTALNK || Link browser &lt;br /&gt;
|-&lt;br /&gt;
| 1826 || GSTAUNL || web service site: unlock and abort current record &lt;br /&gt;
|-&lt;br /&gt;
| 1827 || GSTAMOT || Key-word selection &lt;br /&gt;
|-&lt;br /&gt;
| 1828 || GSTALIT || forcing the read &lt;br /&gt;
|-&lt;br /&gt;
| 1829 || GSTANBR || Number of records in an OBject (GEODE) &lt;br /&gt;
|-&lt;br /&gt;
| 1830 || GSTAPCK || Selection on a picking browser ( GEODE ) &lt;br /&gt;
|-&lt;br /&gt;
| 1831 || GSTAENV || Changing environment ( GEODE ) &lt;br /&gt;
|-&lt;br /&gt;
| 1832 || GSTAPCK1 || Check all on a picking browser ( GEODE ) &lt;br /&gt;
|-&lt;br /&gt;
| 1833 || GSTAPCK2 || Uncheck all on a picking browser ( GEODE ) &lt;br /&gt;
|-&lt;br /&gt;
| 2000-2019 ||  || Application menus without controls &lt;br /&gt;
|-&lt;br /&gt;
| 2020-2029 ||  || Statuses for the specific/custom developments without controls |}&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Status&amp;diff=214</id>
		<title>Status</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Status&amp;diff=214"/>
		<updated>2019-06-27T15:43:15Z</updated>

		<summary type="html">&lt;p&gt;SageDev: Created page with &amp;quot;Dall'help:  {| class=&amp;quot;wikitable&amp;quot; |- !Statuses !! Associated variables !! Description !! Index&amp;lt;br&amp;gt;GETABOU  |- | 1 ||  || Tab positioning  |- | 2 || &amp;amp;nbsp; || Selection window o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dall'help:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Statuses !! Associated variables !! Description !! Index&amp;lt;br&amp;gt;GETABOU &lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  || Tab positioning &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &amp;amp;nbsp; || Selection window on a field &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GSTARET  || Exit by return &lt;br /&gt;
|-&lt;br /&gt;
| 5 ||  || Shift+tab positioning &lt;br /&gt;
|-&lt;br /&gt;
| 7 || GSTAESC || Closing the box &lt;br /&gt;
|-&lt;br /&gt;
| 20 || GSTATIR || Positioning via mouse click to a field  &lt;br /&gt;
|-&lt;br /&gt;
| 21 ||  || Positioning via mouse click to a grid  &lt;br /&gt;
|-&lt;br /&gt;
| 26 ||  || Entry in a grid by double-click on a cell &lt;br /&gt;
|-&lt;br /&gt;
| 27 || GSTALFT || Click on left list &lt;br /&gt;
|-&lt;br /&gt;
| 28 || GSTALF2 || Double-click on left list &lt;br /&gt;
|-&lt;br /&gt;
| 36 || GSTALF3 || Click on hierarchized list &lt;br /&gt;
|-&lt;br /&gt;
| 37 || GSTALF4 || Double-click on hierarchized list &lt;br /&gt;
|-&lt;br /&gt;
| 41 ||  || De-selection in the picking box &lt;br /&gt;
|-&lt;br /&gt;
| 42 || GSTAPIC || Event on picking box &lt;br /&gt;
|-&lt;br /&gt;
| 43 ||  || De-selection in hierarchized picking box &lt;br /&gt;
|-&lt;br /&gt;
| 44 || GSTAPKF || Closing a picking box &lt;br /&gt;
|-&lt;br /&gt;
| 45 || GSTASRA || Quick selection &lt;br /&gt;
|-&lt;br /&gt;
| 46 || &amp;amp;nbsp; || activation of the &amp;amp;quot;VERIFIER&amp;amp;quot; button in the formula editor &lt;br /&gt;
|-&lt;br /&gt;
| 47 || &amp;amp;nbsp; || Selection of a parent element without a child element in the formula editor &lt;br /&gt;
|-&lt;br /&gt;
| 48 || GSTAPRG || Previous page for the left list &lt;br /&gt;
|-&lt;br /&gt;
| 49 || GSTASVG || Next page for the left list &lt;br /&gt;
|-&lt;br /&gt;
| 55 || GSTABOI || Left list end &lt;br /&gt;
|-&lt;br /&gt;
| 65 ||  || Cancellation of a line &lt;br /&gt;
|-&lt;br /&gt;
| 68 ||  || Cancellation of a group of lines &lt;br /&gt;
|-&lt;br /&gt;
| 71 ||  || Line change &lt;br /&gt;
|-&lt;br /&gt;
| 73 ||  || Line insert &lt;br /&gt;
|-&lt;br /&gt;
| 75 ||  || Line modification &lt;br /&gt;
|-&lt;br /&gt;
| 82 ||  || Summary &lt;br /&gt;
|-&lt;br /&gt;
| 83 ||  || Delete a group of lines &lt;br /&gt;
|-&lt;br /&gt;
| 91 || GSTANEW || File/New || GNOUV &lt;br /&gt;
|-&lt;br /&gt;
| 92 || GSTAENR || File/Save || GENRE &lt;br /&gt;
|-&lt;br /&gt;
| 93 || GSTACRE || File/Create || GCREE &lt;br /&gt;
|-&lt;br /&gt;
| 94 || GSTAANU || File/Delete || GSUPP &lt;br /&gt;
|-&lt;br /&gt;
| 95 || GSTASEL || File/Select || GSELE &lt;br /&gt;
|-&lt;br /&gt;
| 96 || GSTAFIR || File/First || GPREM &lt;br /&gt;
|-&lt;br /&gt;
| 97 || GSTALAS || File/Last || GDERN &lt;br /&gt;
|-&lt;br /&gt;
| 98 || GSTASUI || File/Next || GSUIV &lt;br /&gt;
|-&lt;br /&gt;
| 99 || GSTAPRE || File/Previous || GPREC &lt;br /&gt;
|-&lt;br /&gt;
| 129-136 || GBOUT1..8 || Contextual menus &lt;br /&gt;
|-&lt;br /&gt;
| 145 || GSTAEUR || Display/Euro &lt;br /&gt;
|-&lt;br /&gt;
| 147 || GSTAMHL || Help modification &lt;br /&gt;
|-&lt;br /&gt;
| 148 || GSTAHLP || Field information &lt;br /&gt;
|-&lt;br /&gt;
| 1029 || GSTAOK || OK button || GVALI &lt;br /&gt;
|-&lt;br /&gt;
| 1100-1119 || GSTASPE1..6 || Application buttons preceded by controls (GSTABOU+I)  || GSPE1..6 &lt;br /&gt;
|-&lt;br /&gt;
| 1200-1219 ||  || Application menus preceded by controls &lt;br /&gt;
|-&lt;br /&gt;
| 1220-1239 ||  || Statuses for the specific/custom developments preceded by controls &lt;br /&gt;
|-&lt;br /&gt;
| 1792 || GSTAFIN || Abort button || GABAN &lt;br /&gt;
|-&lt;br /&gt;
| 1793 || GSTACHG || File/Code change || GCHAN &lt;br /&gt;
|-&lt;br /&gt;
| 1794 || GSTAJOI || File/Attachments || GJOIN &lt;br /&gt;
|-&lt;br /&gt;
| 1795 || GSTACOM || File/Comments || GCOMM &lt;br /&gt;
|-&lt;br /&gt;
| 1796 || GSTAEDI || File/Print || GEDIT &lt;br /&gt;
|-&lt;br /&gt;
| 1797 || GSTALIS || File/List || GLIST &lt;br /&gt;
|-&lt;br /&gt;
| 1798 || GSTADAT || File/Properties || GDATC &lt;br /&gt;
|-&lt;br /&gt;
| 1799 || GSTARAF || Display/Refresh || GRAFF &lt;br /&gt;
|-&lt;br /&gt;
| 1800-1819 ||  || Application buttons without controls (GSTABOU2+I)  &lt;br /&gt;
|-&lt;br /&gt;
| 1820 || GSTATRN || Transaction button || GTRAN &lt;br /&gt;
|-&lt;br /&gt;
| 1821 || GSTAFIN || End button || &amp;amp;nbsp; &lt;br /&gt;
|-&lt;br /&gt;
| 1822 || GSTAHLO || OBjet on Parameter help &lt;br /&gt;
|-&lt;br /&gt;
| 1823 || GSTASTA || Statistics &lt;br /&gt;
|-&lt;br /&gt;
| 1824 || GSTAWOR || Workflow &lt;br /&gt;
|-&lt;br /&gt;
| 1825 || GSTALNK || Link browser &lt;br /&gt;
|-&lt;br /&gt;
| 1826 || GSTAUNL || web service site: unlock and abort current record &lt;br /&gt;
|-&lt;br /&gt;
| 1827 || GSTAMOT || Key-word selection &lt;br /&gt;
|-&lt;br /&gt;
| 1828 || GSTALIT || forcing the read &lt;br /&gt;
|-&lt;br /&gt;
| 1829 || GSTANBR || Number of records in an OBject (GEODE) &lt;br /&gt;
|-&lt;br /&gt;
| 1830 || GSTAPCK || Selection on a picking browser ( GEODE ) &lt;br /&gt;
|-&lt;br /&gt;
| 1831 || GSTAENV || Changing environment ( GEODE ) &lt;br /&gt;
|-&lt;br /&gt;
| 1832 || GSTAPCK1 || Check all on a picking browser ( GEODE ) &lt;br /&gt;
|-&lt;br /&gt;
| 1833 || GSTAPCK2 || Uncheck all on a picking browser ( GEODE ) &lt;br /&gt;
|-&lt;br /&gt;
| 2000-2019 ||  || Application menus without controls &lt;br /&gt;
|-&lt;br /&gt;
| 2020-2029 ||  || Statuses for the specific/custom developments without controls |}&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Choose&amp;diff=213</id>
		<title>Choose</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Choose&amp;diff=213"/>
		<updated>2019-06-27T15:33:46Z</updated>

		<summary type="html">&lt;p&gt;SageDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Choose&amp;lt;/code&amp;gt; è un comando che permette di visualizzare una finestra di selezione personalizzata.&lt;br /&gt;
&lt;br /&gt;
Ecco un esempio che recupera da tabella un elenco di record e poi in base alla scelta popola i campi della videata.&lt;br /&gt;
Va notato che il carattere &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt; deve essere ''il primo della riga''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subprog S_YCODMAR(VALEUR)&lt;br /&gt;
  Variable Char    VALEUR()&lt;br /&gt;
&lt;br /&gt;
  Choose [F:YCE] Order By [F:YCE]YCODMAR Asc; [F:YCE]YSEQMAR Asc Using&lt;br /&gt;
&amp;amp; [F:YCE]YCODMAR Titled &amp;quot;Cod.Marchio&amp;quot;,&lt;br /&gt;
&amp;amp; [F:YCE]YSEQMAR Titled &amp;quot;Sequenza&amp;quot;,&lt;br /&gt;
&amp;amp; [F:YCE]YNUMFILE Titled &amp;quot;NumFile&amp;quot;,&lt;br /&gt;
&amp;amp; [F:YCE]YTXTETI Titled &amp;quot;TestoEti&amp;quot;,&lt;br /&gt;
&amp;amp; [F:YCE]YGRPCERT Titled &amp;quot;GrpCert&amp;quot;&lt;br /&gt;
&amp;amp; Sized(120,360)&lt;br /&gt;
&amp;amp; Titled &amp;quot;Seleziona certificazione &amp;quot;&lt;br /&gt;
&lt;br /&gt;
  # Lo status a 28 indica che un record è stato scelto ed è come se fosse stata fatta una READ puntuale sul record selezionato&lt;br /&gt;
  If [S]status = 28 Then&lt;br /&gt;
    #[M:YCC1]YCODMAR(nolign-1)=[F:YCE]YCODMAR&lt;br /&gt;
    VALEUR =[F:YCE]YCODMAR&lt;br /&gt;
    [M:YCC1]YSEQMAR(nolign-1)=[F:YCE]YSEQMAR&lt;br /&gt;
    [M:YCC1]YNUMFILE(nolign-1)=[F:YCE]YNUMFILE &lt;br /&gt;
    [M:YCC1]YTXTETI(nolign-1)=[F:YCE]YTXTETI  &lt;br /&gt;
    [M:YCC1]YGRPCERT(nolign-1)=[F:YCE]YGRPCERT &lt;br /&gt;
  Endif&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vedi help istruzione [[status]]:&lt;br /&gt;
&lt;br /&gt;
* 27 GSTALFT Click on left list  &lt;br /&gt;
* 28 GSTALF2 Double-click on left list&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=GESAOB&amp;diff=212</id>
		<title>GESAOB</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=GESAOB&amp;diff=212"/>
		<updated>2019-06-27T15:30:41Z</updated>

		<summary type="html">&lt;p&gt;SageDev: Created page with &amp;quot;Gestione oggetto   Appunti  * Esempio Oggetto semplice ITM  Articoli * Esempio Oggetto combinato QLC Schede qualità o AYP [GESAYP|Stli personalizzati]]...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gestione oggetto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appunti&lt;br /&gt;
&lt;br /&gt;
* Esempio Oggetto semplice ITM [[GESITM| Articoli]]&lt;br /&gt;
* Esempio Oggetto combinato QLC [[GESQLC|Schede qualità]] o AYP [GESAYP|Stli personalizzati]]&lt;br /&gt;
* Esempio Oggetto browser SO2 selezione ordini&lt;br /&gt;
* Esempio Oggetto in riquadro APE [[GESAPE| Entry point]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Blocco_Riquadro&amp;diff=211</id>
		<title>Gestione Blocco Riquadro</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Blocco_Riquadro&amp;diff=211"/>
		<updated>2019-06-27T15:10:24Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Gestione pulsanti riquadro standard Cancella/Annulla/Copia... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gestione di un blocco riquadro di una videata&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Numeratore di riga NBLIG&lt;br /&gt;
&lt;br /&gt;
== Gestione Inserimento/Modifica/Cancellazione righe ==&lt;br /&gt;
Per fare dei controlli alla cancellazione di una linea tramite pulsante contestuale, prima del registra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog C_NBLIG&lt;br /&gt;
  If status=65&lt;br /&gt;
     mkstat=2 #per impedire la cancellazione della riga&lt;br /&gt;
  Endif&lt;br /&gt;
End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vedi l'help dell'istruzione [[status]] per tutti i codici possibili che può avere.&lt;br /&gt;
&lt;br /&gt;
Per il blocco riquadro possono servire:&lt;br /&gt;
* 65 cancellazione di una riga&lt;br /&gt;
* 68 cancellazione di più righe&lt;br /&gt;
* 71 cambio di riga (da capire differenza con 75)&lt;br /&gt;
* 73 inserimento di una riga&lt;br /&gt;
* 75 modifica di una riga (da capire differenza con 71)&lt;br /&gt;
&lt;br /&gt;
== Gestione pulsanti riquadro standard Cancella/Annulla/Copia... ==&lt;br /&gt;
Questi pulsanti si attivano/disattivano tramite il campo &amp;quot;Opzioni&amp;quot; della sezione blocco (gestione Videata).&lt;br /&gt;
&lt;br /&gt;
In genere viene preimpostato &amp;quot;KARID&amp;quot;, che significa Prec/Succ, Cancellazione di una riga, Ripresa,Inserisci e cancellazione multipla attive&lt;br /&gt;
&lt;br /&gt;
Questi i codici (dall'help):&lt;br /&gt;
&amp;lt;pre&amp;gt;K : Previous &amp;amp; next line in entry mode&lt;br /&gt;
K: Riga precedente &amp;amp; successiva in modalità inserimento&lt;br /&gt;
A: Eliminare una riga&lt;br /&gt;
D: Eliminare un intervallo di righe&lt;br /&gt;
R: Aggiunta di righe a fine riquadro&lt;br /&gt;
I: Inserimento di righe&lt;br /&gt;
S: Taglia&lt;br /&gt;
B: Copia&lt;br /&gt;
C: Incolla&lt;br /&gt;
T: Caricamento di tutte le righe del riquadro&lt;br /&gt;
? : Ricerca&lt;br /&gt;
+ : Giustificazione colonna&lt;br /&gt;
= : Modalità scheda automatica&lt;br /&gt;
1-9 : Numero di colonne fisse (a partire dalla 1a colonna)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gestione videate Opzioni blocco riquadro.png|none]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=210</id>
		<title>Gestione Bottoni</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Gestione_Bottoni&amp;diff=210"/>
		<updated>2019-06-27T15:09:12Z</updated>

		<summary type="html">&lt;p&gt;SageDev: /* Pulsanti standard blocco riquadro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Finestre =&lt;br /&gt;
== Pulsanti standard ==&lt;br /&gt;
&lt;br /&gt;
Talvolta ci sono dei problemi con l'attivazione/disattivazione dei pulsanti standard.&lt;br /&gt;
&lt;br /&gt;
Con le istruzioni [[enable]] e [[disable]]  seguite dal codice del pulsante possiamo gestire la cosa mano.&lt;br /&gt;
&lt;br /&gt;
I codici sono memorizzati in alcune [[variabili globali]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enable GSTACRE   #abilito il pulsante Crea&lt;br /&gt;
Disable GSTAENR  #disabilito il pulsante Registra&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
vedi anche [[Finestre#Aggiungere_un_bottone.2Fmen.C3.B9_contestuale_che_apre_un_oggetto| Aggiungere un bottone che un oggetto]]&lt;br /&gt;
&lt;br /&gt;
= Videate =&lt;br /&gt;
&lt;br /&gt;
== Pulsante contestuale su riga di un riquadro ==&lt;br /&gt;
&lt;br /&gt;
I pulsanti di riquadro possibili sono 20, la cui etichetta è contenuta nelle [[variabili globali]] GBOUT1, GBOUT2 ...GBOUT20&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un pulsante contestuale su riga di un riquadro:&lt;br /&gt;
&lt;br /&gt;
* selezionare tra i campi della videata il campo numeratore di riga, spesso NBLIG&lt;br /&gt;
* impostare un'azione Bottone (dalla 2 in poi, la prima libera); l'azione può essere sia SPE che un'azione vera e propria&lt;br /&gt;
* validare la videata&lt;br /&gt;
* aprire il sorgente corrispondente: se è di tipo SPE troverai aggiunto un &amp;lt;code&amp;gt;Subprog B2_NBLIG&amp;lt;/code&amp;gt; dove scrivere il codice da eseguire alla selezione del menu appena creato&lt;br /&gt;
&lt;br /&gt;
=== Disattivazione ===&lt;br /&gt;
&lt;br /&gt;
Attivare l'evento di riga &amp;quot;Init Bottone&amp;quot; sempre sul campo numeratore di riga (NBLIG).&lt;br /&gt;
&lt;br /&gt;
Dentro il Subprog IB_NBLIG che verrà creato nel sorgente azzerare la variabile corrispondente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Subprog IB_NBLIG &lt;br /&gt;
   Raz GBOUT2       #disattivo il pulsante 2&lt;br /&gt;
   GBOUT3='bla bla' # attivo il pulsante 3 con eticheta 'bla bla'&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulsanti standard blocco riquadro ==&lt;br /&gt;
Vedi [[Gestione_Blocco_Riquadro#Gestione_pulsanti_riquadro_standard_Cancella.2FAnnulla.2FCopia...|Gestione Blocco Riquadro]]&lt;/div&gt;</summary>
		<author><name>SageDev</name></author>
	</entry>
</feed>