<?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=Mwadmin</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=Mwadmin"/>
	<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php/Special:Contributions/Mwadmin"/>
	<updated>2026-06-10T09:32:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=AREQUETE&amp;diff=1136</id>
		<title>AREQUETE</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=AREQUETE&amp;diff=1136"/>
		<updated>2026-06-09T08:40:45Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Funzione dove vedere i log delle varie schedulazioni (vedi [[GESABA]]).&lt;br /&gt;
&lt;br /&gt;
Lo stato è il campo FLAG (menu 21).&lt;br /&gt;
&lt;br /&gt;
E' possibile schedulare la cancellazione dei record più vecchi con il job [[AHISTO]], codice ABATCH.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I file di log del tipo SERVX3.RQTXXXXXXXX si trovano nella cartella &amp;quot;folders\SERVX3\TRA&amp;quot;&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Richiamo_memo&amp;diff=1135</id>
		<title>Richiamo memo</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Richiamo_memo&amp;diff=1135"/>
		<updated>2026-06-04T09:29:06Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: Created page with &amp;quot;== Richiamo Memo == Esempio     #-- Maschera Corrente    Local Mask YXXXXX [DIA]    #-- Gestione Memo    Call LECMEMO (&amp;quot;STD&amp;quot;,&amp;quot;[M:DIA]&amp;quot;,&amp;quot;vf8&amp;quot;) From GMEMO&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Richiamo Memo ==&lt;br /&gt;
Esempio&lt;br /&gt;
&lt;br /&gt;
   #-- Maschera Corrente&lt;br /&gt;
   Local Mask YXXXXX [DIA]&lt;br /&gt;
   #-- Gestione Memo&lt;br /&gt;
   Call LECMEMO (&amp;quot;STD&amp;quot;,&amp;quot;[M:DIA]&amp;quot;,&amp;quot;vf8&amp;quot;) From GMEMO&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Programmazione&amp;diff=1134</id>
		<title>Programmazione</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Programmazione&amp;diff=1134"/>
		<updated>2026-06-04T09:28:08Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* Esempi vari */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Programmazione base ==&lt;br /&gt;
# [[Istruzioni base|Istruzioni base]]&lt;br /&gt;
# [[Lettura tabelle|Lettura tabelle]]&lt;br /&gt;
# [[Gestione file|Gestione file e cartelle]]&lt;br /&gt;
# [[Gestione videate e campi|Gestione videate e campi]]&lt;br /&gt;
# [[Variabili globali|Variabili globali predefinite]]&lt;br /&gt;
# [[Choose|Choose]]&lt;br /&gt;
# [[Entry_Points|Entry Points]]&lt;br /&gt;
# [[Esempi_di_programmazione|Esempi]]&lt;br /&gt;
&lt;br /&gt;
== [[Programmi_specifici|Programmazioni specifiche]] ==&lt;br /&gt;
# [[Programmi_specifici#Aprire_un_URL_con_il_browser_della_postazione_client|Aprire un URL con il browser della postazione client]]&lt;br /&gt;
# [[Programmi_specifici#Far_eseguire_un_comando_al_sistema_operativo|Far eseguire un comando al sistema operativo]]&lt;br /&gt;
# [[Programmi_specifici#Stampa_di_un_pdf|Stampa di un pdf]]&lt;br /&gt;
# [[Programmi_specifici#Conoscere_hostname_che_esegue_il_client|Conoscere hostname che esegue il client]]&lt;br /&gt;
# [[Istruzioni SQL|Istruzioni SQL]]&lt;br /&gt;
# [[Gestione tracce|Gestione tracce]]&lt;br /&gt;
# [[Gestione errori|Gestione errori a run time (eccezioni)]]&lt;br /&gt;
# [[Finestre di dialogo|Finestre di dialogo]]&lt;br /&gt;
# [[Far eseguire SPV e SUB prima dello SPE|Far eseguire SPV e SUB prima dello SPE]]&lt;br /&gt;
&lt;br /&gt;
== Programmazioni composte ==&lt;br /&gt;
Vengono elencate di seguito delle programmazioni che richiedono sia codice che parametrizzazione:&lt;br /&gt;
&lt;br /&gt;
# [[Debug|Come fare debug]]&lt;br /&gt;
# [[ImportExport#Programmazione|Import/Export]]&lt;br /&gt;
# [[Testata/Dettaglio|Gestione testata/dettaglio]]&lt;br /&gt;
# [[Invio mail|Invio mail]]&lt;br /&gt;
# [[Numeratore|Numeratori]]&lt;br /&gt;
# [[Transazioni_tabella|Transazioni su tabella]]&lt;br /&gt;
# [[Traduzioni|Traduzioni]]&lt;br /&gt;
&lt;br /&gt;
== Esempi vari ==&lt;br /&gt;
# aprire [[mappa goggle|google maps]]&lt;br /&gt;
# [[funzione replace]]&lt;br /&gt;
# [[richiamo memo]]&lt;br /&gt;
&lt;br /&gt;
== Appunti ==&lt;br /&gt;
#AFFZO: il no-lign non è necessario, aggiorna sempre tutta la colonna di una tabella&lt;br /&gt;
#NBLIG è il numero di riga di visualizzazione, non è uno dei campi chiave&lt;br /&gt;
# all'interno di una subroutine si può fare il casting tra &amp;lt;code&amp;gt;CLBfile&amp;lt;/code&amp;gt;(Clob) e &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; &amp;lt;br /&amp;gt; da metodo chiamante a metodo chiamato invece la differenza di tipo tra argomento e parametro genera errore&lt;br /&gt;
#E' possibile inserire delle azioni all'interno di un tipo dato: un esempio è il tipo dato YIT (con funzioni YGESTYIT, YSTRYIT, YCTRYIT)&lt;br /&gt;
#Per vedere in quali punti è utilizzato un tipo dato eseguire la seguente query in sql server:&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;select * from SAGEDEV.AMSKZON where CODTYP_o='YIT'&amp;lt;/code&amp;gt;&lt;br /&gt;
#CONTOBJW è un'azione che permette di disattivare il controllo d'esistenza nella tabella, con parametro OBJET che deve essere impostato con il codice dell'oggetto (per  azione di tipo oggetto - vedi YIC)&lt;br /&gt;
#CONTOBJN è un'azione che permette di disattivare tutti i controllo dell'oggetto (per  azione di tipo oggetto)&lt;br /&gt;
#Per recuperare il  percorso base di un dossier ci sono due modi, SETPARAM o filpath:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
filpath(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Local Char    MACHIN(20)                         &lt;br /&gt;
Local Char    IRS(2)                               &lt;br /&gt;
Local Char    OS(20)&lt;br /&gt;
Local Integer I&lt;br /&gt;
Local Char YDIR(250)&lt;br /&gt;
Call SETPARAM(YDIR,MACHIN,IRS,OS,I) From PARFICBAN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Per andare a capo a metà di una riga di codice basta mettere come primo carattere della nuova riga un &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        [M:YI3]YFVABBR(nolign-1) = [F:YFD]YFVVALCOD + &amp;quot; &amp;quot; +func AFNC.TEXTRA(&amp;quot;ATABDIV&amp;quot;,&amp;quot;SHODES&amp;quot;,&amp;quot;6033&amp;quot;,[F:YFD]YFVVALCOD)&lt;br /&gt;
&amp;amp;+ &amp;quot; &amp;quot; +func AFNC.TEXTRA(&amp;quot;ATABDIV&amp;quot;,&amp;quot;LNGDES&amp;quot;,&amp;quot;6033&amp;quot;,[F:YFD]YFVVALCOD)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
# per compilare un sorgente da codice (compilazione sorgente da programma)&lt;br /&gt;
&amp;lt;pre&amp;gt;LOCAL Integer MYOK&lt;br /&gt;
CALL VALID(&amp;quot;TRT&amp;quot;,&amp;quot;SPEITM&amp;quot;, nomap, MYOK) From VALMSKSUB        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Debug&amp;diff=1132</id>
		<title>Debug</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Debug&amp;diff=1132"/>
		<updated>2026-05-13T09:31:04Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Ci sono vari modi di fare debug in Sage X3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calcolatrice ==&lt;br /&gt;
Il modo più semplice e immediato per verificare il valore di una variabile, di un campo di una maschera o di un file è l'utilizzo della calcolatrice: dal menu &lt;br /&gt;
&lt;br /&gt;
'''''? &amp;amp;rarr; Help diagnostici &amp;amp;rarr; Calcolatrice'''''&lt;br /&gt;
&lt;br /&gt;
basta inserire il nome della variabile o campo desiderato e premere &amp;lt;code&amp;gt;Invio&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esempi:&lt;br /&gt;
&lt;br /&gt;
* GFONCTION1 &amp;amp;rarr; funzione&lt;br /&gt;
* GFLAG &amp;amp;rarr; transazione&lt;br /&gt;
&lt;br /&gt;
== Istruzione Affdbg ==&lt;br /&gt;
&lt;br /&gt;
Inserire nel punto voluto del codice sorgente l'istruzione [[Dbgaff]] e ricompilare (&amp;lt;code&amp;gt;F7&amp;lt;/code&amp;gt;): quando il codice arriverà a questa istruzione si aprirà la finestra &amp;quot;Debugger&amp;quot;:&lt;br /&gt;
*premere il pulsante &amp;lt;code&amp;gt;Riga&amp;lt;/code&amp;gt; per entrare nelle subroutine (anche del verticale e del DX, se ci sono i sorgenti)&lt;br /&gt;
*premere il pulsante &amp;lt;code&amp;gt;Continua&amp;lt;/code&amp;gt; per vedere solo le chiamate del programma principale&lt;br /&gt;
*premere il pulsante &amp;lt;code&amp;gt;Fine&amp;lt;/code&amp;gt; per terminare il debug.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dalla finestra, cliccare pulsante &amp;quot;Dettagli&amp;quot;, sul tab &amp;quot;Selezione Classi&amp;quot; scrivere per esempio &amp;quot;[M:RPT]&amp;quot; (senza virgolette), per vederne il contenuto.&lt;br /&gt;
&lt;br /&gt;
== Timing ==&lt;br /&gt;
Il menu di timing permette di misurare le prestazini e i colli di bottiglia:&lt;br /&gt;
&lt;br /&gt;
[[File:Timing.png|thumb|Menu fo timing]]&lt;br /&gt;
&lt;br /&gt;
Si attiva il timing (basta dare ok sulla finestra di dialogo che compare):&lt;br /&gt;
&lt;br /&gt;
[[File:Timing activation box.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
poi, quando si desidera avere il resoconto, si clicca sulla lettura, ottenendo un log tipo questo:&lt;br /&gt;
&lt;br /&gt;
[[File:Timing log esempio.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Parametri utente per timing===&lt;br /&gt;
&lt;br /&gt;
L'utente deve avere, in definizione parametri  Parameter definition tab will need to have DBG=Yes in the SUP chapter and DEV group.&lt;br /&gt;
&lt;br /&gt;
[[File:Timimg user parameter.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Da codice 4GL===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # attivazione timing&lt;br /&gt;
  Call ACTIVE From TIMING&lt;br /&gt;
&lt;br /&gt;
  # codice...&lt;br /&gt;
&lt;br /&gt;
  #Stop e lettura traccia&lt;br /&gt;
  Call ARRET from TIMING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se si esegue via BATCH server o web service:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Call ACTIVE_MAN(filpath(&amp;quot;!tmp&amp;quot;,GUSER,&amp;quot;tra&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;),X) From TIMING&lt;br /&gt;
#Dove &lt;br /&gt;
# X=2 se si vuole attivare il flag Gosub (quello della maschera di attivazione del timing), 1 altrimenti&lt;br /&gt;
# GUSER è la variabile globale che indica il codice utente; in realtà questo parametro è il nome del file&lt;br /&gt;
# tmp è la cartella dove scrivere il file&lt;br /&gt;
# tra è l'estensione del file di traccia&lt;br /&gt;
&lt;br /&gt;
# Codice ...&lt;br /&gt;
&lt;br /&gt;
#Fermo il timing e chiudo il file (non visualizza il log)&lt;br /&gt;
Call ARRET_MAN From TIMING&lt;br /&gt;
&lt;br /&gt;
# per vedere l'analisi dei tempi aprendo il file di log creato&lt;br /&gt;
#fare quetsa chiamata con gli stessi parametri di prima&lt;br /&gt;
Call LECTURE(filpath(&amp;quot;!tmp&amp;quot;,GUSER,&amp;quot;tra&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;),2) From TIMING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Da codice V7===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Local Integer YSTAT&lt;br /&gt;
Local Char TIMING(100)&lt;br /&gt;
YSTAT= func ASYRTIMING.START(&amp;quot;&amp;quot;,0)&lt;br /&gt;
#Dove&lt;br /&gt;
# il primo parametro indica il nome del file da creare (senza estensione e perorso); se si lascia vuoto lo calcola in automatico con il nome utente minuscolo, più adxuid(1) separati da un undescore, usa la cartella tmp del dossier corrente e l'estensione &amp;quot;.tra&amp;quot;.&lt;br /&gt;
# il secondo parametro è 0 di default; va messo a 1 se si vogliono analizzare i Gosub (non 2 come in V6...)&lt;br /&gt;
&lt;br /&gt;
# codice ...&lt;br /&gt;
&lt;br /&gt;
YSTAT=func ASYRTIMING.STOP(GACTX,&amp;quot;&amp;quot;,2,TIMING)&lt;br /&gt;
#DOVE&lt;br /&gt;
# puntatore al contesto corrente&lt;br /&gt;
# nome del file di timing: se non si specifica usa il suo predefinito&lt;br /&gt;
# valore del gosub 2 o 1 come pin V6&lt;br /&gt;
# una variabile Char che conterrà il nome del file generato&lt;br /&gt;
&lt;br /&gt;
#lettura come per V6 (se non si definisce il percorso lo crea nella tmp del runtime)&lt;br /&gt;
Call LECTURE(filpath(&amp;quot;!tmp&amp;quot;,GUSER,&amp;quot;tra&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;),2) From TIMING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File di traccia ==&lt;br /&gt;
&lt;br /&gt;
=== Ottenere un file di traccia V6===&lt;br /&gt;
&lt;br /&gt;
Per ottenere un file di traccia con tutte le chiamate effettuate da Sage, comprese quelle di sistema, seguire i seguenti passi:&lt;br /&gt;
#Porsi nella situazione di inizio di cui si vuole ottenere una traccia di log (per esempio scrivere all'interno di un campo senza dare TAB o INVIO per tracciare gli eventi del tipo &amp;quot;Post Campo&amp;quot;)&lt;br /&gt;
#Premere &amp;lt;code&amp;gt;Ctrl-ALt-F&amp;lt;/code&amp;gt;, oppure da menù '''''? &amp;amp;rarr; Help diagnostici &amp;amp;rarr; Debug ON\Off'''''&lt;br /&gt;
#Sulla finestra &amp;quot;Debugger&amp;quot; che esce spuntare il flag '''''Traccia''''' in basso e premere &amp;lt;code&amp;gt;TAB&amp;lt;/code&amp;gt;: comparirà il percorso del file che verrà salvato (volendo si può modificare)&lt;br /&gt;
#A questo punto si può avviare il debug:&lt;br /&gt;
#*premere il pulsante &amp;lt;code&amp;gt;Riga&amp;lt;/code&amp;gt; per entrare nelle subroutine (anche del verticale e del DX, se ci sono i sorgenti)&lt;br /&gt;
#*premere il pulsante &amp;lt;code&amp;gt;Continua&amp;lt;/code&amp;gt; per vedere solo le chiamate del programma principale&lt;br /&gt;
#Effettuare le azioni da tracciare&lt;br /&gt;
#Terminare il debug premendo nuovamente &amp;lt;code&amp;gt;Ctrl-ALt-F&amp;lt;/code&amp;gt;: sulla finestra &amp;quot;Debugger&amp;quot; togliere la spunta al flag '''''Traccia''''' e premere il pulsante &amp;lt;code&amp;gt;Fine&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nel riquadro &amp;quot;Variabili&amp;quot; della finestra &amp;quot;Debugger&amp;quot; è possibile inserire i nomi di variabili locali o globali, di maschera o file, nella colonna &amp;quot;Espressione&amp;quot; per ispezionarne il valore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ottenere un file di traccia di sessione V7 ===&lt;br /&gt;
In Sage X3 è possibile recuperare la traccia di tutte le chiamate&lt;br /&gt;
che il sistema esegue mentre usiamo l'interfaccia.&lt;br /&gt;
&lt;br /&gt;
Per ottenere questa traccia basta andare alla voce&lt;br /&gt;
USO\Tracce\x3 sessione configurazione&lt;br /&gt;
del menu Administrator.&lt;br /&gt;
&lt;br /&gt;
Nel campo flag metti 1 (maggiori info sul pulsante Aiuto),&lt;br /&gt;
come directory metti &amp;quot;tmp&amp;quot; (che sta ad indicare la cartella del dossier corrente dove salvare il file),&lt;br /&gt;
clicca su &amp;quot;Invia&amp;quot; e su &amp;quot;Activate X3 log&amp;quot;.&lt;br /&gt;
Esci dalla finestra.&lt;br /&gt;
&lt;br /&gt;
[[File:Tracce sessione 01.png|upright=0.25]]&lt;br /&gt;
&lt;br /&gt;
A questo punto qualunque funzione aprirai il sistema comincerà&lt;br /&gt;
a scrivere le chiamate eseguite su un file&lt;br /&gt;
CARTELLA_DOSSIER\tmp\x3diary_UTENTE_xxxxx.tra&lt;br /&gt;
&lt;br /&gt;
Lì dentro troverai la traccia indentata della sequenza di chiamate,&lt;br /&gt;
con tanto di numero riga eseguita (tra parentesi tonde)&lt;br /&gt;
e riferimento temporale &amp;quot;tick&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:File di traccia sessione.png|upright=0.25]]&lt;br /&gt;
&lt;br /&gt;
Per la traccia di un preciso momento,&lt;br /&gt;
basta, appena prima di quel momento,&lt;br /&gt;
aprire il file, cancellare il contenuto e salvarlo.&lt;br /&gt;
Poi nell'interfaccia compiere l'azione da analizzare.&lt;br /&gt;
A questo punto sul file troverai le chiamate che ti interessano.&lt;br /&gt;
&lt;br /&gt;
=== Recuperare un file di traccia ===&lt;br /&gt;
&lt;br /&gt;
Dal menù '''''Stampe &amp;amp;rarr; Lettura tracce''''' (F7 '''LECTRACE'''), Selezione o F12 per ricercare il file voluto&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:Timing_activation_box.png&amp;diff=1131</id>
		<title>File:Timing activation box.png</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:Timing_activation_box.png&amp;diff=1131"/>
		<updated>2026-05-13T09:13:17Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Timing activation box&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:Timimg_user_parameter.png&amp;diff=1130</id>
		<title>File:Timimg user parameter.png</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:Timimg_user_parameter.png&amp;diff=1130"/>
		<updated>2026-05-13T09:06:53Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Timimg user parameter&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:Timing_log_esempio.png&amp;diff=1129</id>
		<title>File:Timing log esempio.png</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:Timing_log_esempio.png&amp;diff=1129"/>
		<updated>2026-05-13T09:03:36Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Timing log esempio&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:Timing.png&amp;diff=1128</id>
		<title>File:Timing.png</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:Timing.png&amp;diff=1128"/>
		<updated>2026-05-13T08:59:39Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;menu for timing&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Crystal_Report&amp;diff=1126</id>
		<title>Crystal Report</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Crystal_Report&amp;diff=1126"/>
		<updated>2026-04-16T12:40:02Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Le istruzioni devono terminare con un &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;, eccetto l'ultima per cui è facoltativo. L'ultima istruzione rappresenta il valore di ritorno di una formula.&lt;br /&gt;
&lt;br /&gt;
In caso di istruzioni raggruppate con parentesi tonde (come per esempio negli &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;), tale gruppo rappresenta un'istruzione e in caso di istruizioni successive deve anch'esso essere seguito da un &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Condizioni ==&lt;br /&gt;
&lt;br /&gt;
if &amp;lt;condition&amp;gt; &lt;br /&gt;
then &amp;lt;then&amp;gt; &lt;br /&gt;
else &amp;lt;else&amp;gt; &lt;br /&gt;
&lt;br /&gt;
dove &amp;lt;condition&amp;gt;, &amp;lt;then&amp;gt; e &amp;lt;else&amp;gt; sono tutte espressioni singole. Se dopo &amp;lt;then&amp;gt; o &amp;lt;else&amp;gt; sono presenti più espressioni, convertirle in singole espressioni racchiudendole tra parentesi. Ad esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if {SDELIVERY_1.YSDHNUM_0}&amp;lt;&amp;gt;&amp;quot;&amp;quot; then&lt;br /&gt;
(&lt;br /&gt;
  lastValue := {Branch_View.Branch_ID};&lt;br /&gt;
  crRed;&lt;br /&gt;
)&lt;br /&gt;
else&lt;br /&gt;
  lastValue := {Branch_View.Branch_ID};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Condizioni particolari ===&lt;br /&gt;
&lt;br /&gt;
Se un testo deve comparire solo se è l'ultimo record di dettaglio dell'ordine, per esempio la dicitura &amp;quot;NON APPROVATO&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (OnLastRecord or (Next({PORDER.POHNUM_0}) &amp;lt;&amp;gt; {PORDER.POHNUM_0})) then&lt;br /&gt;
    //siamo dopo l'ultimo record di dettaglio dell'ordine&lt;br /&gt;
    if {PORDER.APPFLG_0}&amp;gt;=3 then&lt;br /&gt;
        //l'ordine è stato approvato, quindi sopprimo questa sezione&lt;br /&gt;
        true&lt;br /&gt;
    else&lt;br /&gt;
        //l'ordine NON è stato approvato, quindi questa sezione deve comparire, NON devo sopprimerla&lt;br /&gt;
        false&lt;br /&gt;
else &lt;br /&gt;
// non è l'ultimo record dell'ordine; sopprimo la sezione&lt;br /&gt;
    true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per far comparire un'intestazione solo sulla prima pagina del gruppo, mettere nella condizione Sopprimi della sezione l'istruzione:&lt;br /&gt;
&amp;lt;pre&amp;gt;InRepeatedGroupHeader&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per far comparire qualcosa solo nell'ultima pagina, mettere nella condizione Ometti:&lt;br /&gt;
&amp;lt;pre&amp;gt;PageNumber &amp;lt;&amp;gt; TotalPageCount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversioni ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Totext(number)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trasforma una variabile numerica in testo: 100 -&amp;gt;&amp;quot;100&amp;quot;&lt;br /&gt;
Stessa cosa di Cstr()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ToWord(NUmero, decimali)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
trasforma un numero nella sua rappresentazione in lettere: 110-&amp;gt; &amp;quot;centodieci&amp;quot;-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AmountToWord(Dossier, Lingua, CodiceValuta, Importo)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
permette di convertire in lettere nella lingua voluta, un importo numerico&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AmountToDigit(Dossier, Lingua, CodiceValuta, ImportoInLettere&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
permette di convertire in lettere nella lingua voluta, un importo espresso in stringa numerica&lt;br /&gt;
&lt;br /&gt;
== Formule ==&lt;br /&gt;
Per inserire un a capo in una stringa:&lt;br /&gt;
&amp;lt;code&amp;gt;testo := testo &amp;amp; ChrW (10)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per inserire una formula in un'altra formula usare la sintassi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{@ySageDev_Formula}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio: &amp;lt;code&amp;gt;RiferimentoDDT := RiferimentoDDT &amp;amp; &amp;quot;  -  &amp;quot; &amp;amp; {@ySageDev_RiferimentoPCKLIST}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esempio di indirizzo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
whilePrintingRecords;&lt;br /&gt;
global stringVar Indirizzo;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  trim({SORDER.BPDADDLIG_0}) &amp;amp; &amp;quot;  &amp;quot; &amp;amp; trim({SORDER.BPDADDLIG_1});&lt;br /&gt;
&lt;br /&gt;
if trim({SORDER.BPDADDLIG_2})&amp;lt;&amp;gt;&amp;quot;&amp;quot;  then &lt;br /&gt;
    Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; trim({SORDER.BPDADDLIG_2});&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; {SORDER.BPDPOSCOD_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCTY_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCRYNAM_0};&lt;br /&gt;
//&amp;amp; {SORDER.BPDSAT_0} &lt;br /&gt;
//&amp;amp; {SORDER.BPDCRY_0}&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; {SORDER.BPDPOSCOD_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCTY_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCRYNAM_0};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Momento di valutazione ===&lt;br /&gt;
&lt;br /&gt;
BeforeReadingRecords: prima di recuperare i record dal database&lt;br /&gt;
WhileReadingRecords: durante la lettura dei record del database ma prima del raggruppamento, dell’ordinamento e del riepilogo &lt;br /&gt;
WhilePrintingRecords: durante la stampa dei record (raggruppamento, ordinmento e riepilogo)&lt;br /&gt;
EvaluateAfter()&lt;br /&gt;
&lt;br /&gt;
== Formato Date ==&lt;br /&gt;
Se il valore data è in un campo:&lt;br /&gt;
ToText({MYFIELDNAME }, &amp;quot;dd-MMM-yyyy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Se è il risultato di una formula:&lt;br /&gt;
CSTR({?@ck_date}, &amp;quot;dddd, MMMM d, yyyy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ToText({Command.EffectiveDate} , &amp;quot;dd-MM-yyyy hh:mm:ss&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
I vari formati d dd ddd dddd M MM MMM MMMM yy yyyy&lt;br /&gt;
&lt;br /&gt;
== Barcode ==&lt;br /&gt;
Vai qui: [[CrystalReport_Barcode | Barcode]]&lt;br /&gt;
&lt;br /&gt;
== Traduzioni ==&lt;br /&gt;
=== Avviso ===&lt;br /&gt;
Le formule qui esposte di Crystal Repor recuperano le traduzioni dai file &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;\DOSSIERS\&amp;lt;nome dossier&amp;gt;\textraita&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
(se italiano) oppure &amp;lt;code&amp;gt;textrafra&amp;lt;/code&amp;gt; se francese, ecc. &lt;br /&gt;
&lt;br /&gt;
Affinché questi file siano aggiornati (quindi ogni volta dopo modifiche su campi di tipo AXX) e’ necessario eseguire la funzione di aggiornamento:&lt;br /&gt;
&lt;br /&gt;
'''''Sviluppo-&amp;gt;Strumenti-&amp;gt;Diversi-&amp;gt;Aggiornamento Testi traducibili'''''&lt;br /&gt;
&lt;br /&gt;
Le tabelle contenenti i campi traducibili usati in Crystal devono avere il '''flag &amp;quot;Generazione testi traducibili&amp;quot;''' attivo.&lt;br /&gt;
&lt;br /&gt;
=== Testi traducibili (tabella ATEXTRA) ===&lt;br /&gt;
;X3TranslatedText&lt;br /&gt;
(Questa funzione è contenuta nella libreria u212ltext.dll)&lt;br /&gt;
&lt;br /&gt;
Per recuperare una traduzione dalla tabella '''''ATEXTRA''''' utilizzare la seguente sintassi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stringVar X3TEX := &amp;quot;NOMETABELLA~NOMECAMPO~&amp;quot;+VALORECAMPO+&amp;quot;~~&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In caso di dubbi verificare direttamente nella tabella ATEXTRA i vari campi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stringVar X3TEX := &amp;quot;CODFIC_0~ZONE_0~IDENT1_0~IDENT2_0~&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;stringVar X3TEX := &amp;quot;TABCOUNTRY~CRYDES~&amp;quot;+{SINVOICEV.BPDCRY_0}+&amp;quot;~~&amp;quot;;&lt;br /&gt;
stringVar PaeseTradotto := X3TranslatedText ({?X3DOS}, lang_trad, X3TEX);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Altro esempio con il testo da recuperare che consiste in un valore di una '''tabella diversa''' (vedi funzione '''''GESADI''''' da F7 in sage):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WhilePrintingRecords;&lt;br /&gt;
stringVar X3TEX := &amp;quot;ATABDIV~LNGDES~20~&amp;quot;+{SORDERP.TSICOD_0}+&amp;quot;~&amp;quot;;&lt;br /&gt;
X3TranslatedText ({?X3DOS}, {@P_lang_trad},X3TEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Invece di ''LNGDES'' mettere ''SHODES'' se si vuole la descrizione breve.&lt;br /&gt;
&lt;br /&gt;
=== Menù locali (tabella APLSTD) ===&lt;br /&gt;
;TextOfChapter (accesso diretto, con i numeri)&lt;br /&gt;
&lt;br /&gt;
Nella formula '''''TextOfChapter''''' si trovano in genere tutte le istruzioni per recuperare le traduzioni necessarie, con righe del tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;global stringVar txtcondiV1 := TextOfChapter ({?X3DOS},   lang_trad,2281,50);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dove lang_trad è la variabile che contiene la lingua in cui tradurre, 2281 è il capitolo del menu (vedi funzione '''''TXT''''' da F7 in sage), e 50 è l'indice del testo da recuperare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TextForCode (con nome campo)&lt;br /&gt;
Per recuperare la descrizione associata ad un valore di menu locale (nella lingua dell'utente):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TextForCode(&amp;quot;Dossier;server;porta;versione&amp;quot;, &amp;quot;Tabella.Campo&amp;quot;, Valore)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
per esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TextForCode ({?X3DOS},&amp;quot;{STOJOU.TRSTYP_0}&amp;quot;,{STOJOU.TRSTYP_0})&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per recuperare una traduzione nella lingua voluta&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TranslatedTextForCode( Dossier, Lingua, &amp;quot;Tabella.Campo&amp;quot;, Valore)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TranslatedTextForCode( {?X3DOS}, {?X3LAN}, &amp;quot;{ITMMASTER.STOMGTCOD_0}&amp;quot;, ITMMASTER.STOMGTCOD_0 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Formattazioni ==&lt;br /&gt;
&lt;br /&gt;
=== Stili ===&lt;br /&gt;
&lt;br /&gt;
Costanti di stile delle linea: si possono usare all'interno delle formule&lt;br /&gt;
&lt;br /&gt;
* ''crNoLine''  Nessuna linea di bordo&lt;br /&gt;
* ''crSingleLine''  Una sola linea di bordo&lt;br /&gt;
* ''crDoubleLine''  Doppia linea di bordo &lt;br /&gt;
* ''crDashedLine''  Linea di bordo tratteggiata&lt;br /&gt;
* ''crDottedLine''  Linea di bordo punteggiata&lt;br /&gt;
&lt;br /&gt;
== Connessione ODBC ==&lt;br /&gt;
&lt;br /&gt;
Da esperto database, tab Dati, su Connessioni personali, cliccare sul + della connessione voluta; nella finestra che esce:&lt;br /&gt;
* selezionare l'origine dati voluta e cliccare AVANTI&lt;br /&gt;
* come ID utente mettere il nome del dossier (attenzione a maiuscolo/minuscolo)&lt;br /&gt;
* cliccare FINE e attendere che il db compaia sotto la connessione personale scelta&lt;br /&gt;
* inserire la solita password&lt;br /&gt;
&lt;br /&gt;
=== Usare una direttamente  query ===&lt;br /&gt;
&lt;br /&gt;
Se si vuole usare una direttamente una query bisogna aggiungere un comando:&lt;br /&gt;
&lt;br /&gt;
[[File:Crystal Report Query.png]]&lt;br /&gt;
&lt;br /&gt;
== Cause di lentezza ==&lt;br /&gt;
&lt;br /&gt;
* una possibile causa di estrema lentezza può essere un'istruzione &amp;quot;WhilePrintingReports&amp;quot; su un campo di dettaglio; meglio puntare su una vista ben relazionata che risolve molte cose in modo più performante.&lt;br /&gt;
&lt;br /&gt;
== Pagine in appendice (tipo Termini e Condizioni) ==&lt;br /&gt;
&lt;br /&gt;
Impostare in &amp;quot;Piè di pagina Report&amp;quot;, &amp;quot;Nuova pagina prima&amp;quot; (da &amp;quot;Esperto sezione&amp;quot;, selezionare &amp;quot;Piè di pagina Report&amp;quot; , scheda &amp;quot;Paging&amp;quot;). &lt;br /&gt;
Scrivi la tua appendice nella sezione &amp;quot;Piè di pagina Report&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Se c'è già una sezione &amp;quot;Piè di pagina Report&amp;quot;, aggiungere una sottosezione e impostare questa come appena detto.&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Crystal_Report&amp;diff=1125</id>
		<title>Crystal Report</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Crystal_Report&amp;diff=1125"/>
		<updated>2026-04-16T12:39:03Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Le istruzioni devono terminare con un &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;, eccetto l'ultima per cui è facoltativo. L'ultima istruzione rappresenta il valore di ritorno di una formula.&lt;br /&gt;
&lt;br /&gt;
In caso di istruzioni raggruppate con parentesi tonde (come per esempio negli &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;), tale gruppo rappresenta un'istruzione e in caso di istruizioni successive deve anch'esso essere seguito da un &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Condizioni ==&lt;br /&gt;
&lt;br /&gt;
if &amp;lt;condition&amp;gt; &lt;br /&gt;
then &amp;lt;then&amp;gt; &lt;br /&gt;
else &amp;lt;else&amp;gt; &lt;br /&gt;
&lt;br /&gt;
dove &amp;lt;condition&amp;gt;, &amp;lt;then&amp;gt; e &amp;lt;else&amp;gt; sono tutte espressioni singole. Se dopo &amp;lt;then&amp;gt; o &amp;lt;else&amp;gt; sono presenti più espressioni, convertirle in singole espressioni racchiudendole tra parentesi. Ad esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if {SDELIVERY_1.YSDHNUM_0}&amp;lt;&amp;gt;&amp;quot;&amp;quot; then&lt;br /&gt;
(&lt;br /&gt;
  lastValue := {Branch_View.Branch_ID};&lt;br /&gt;
  crRed;&lt;br /&gt;
)&lt;br /&gt;
else&lt;br /&gt;
  lastValue := {Branch_View.Branch_ID};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Condizioni particolari ===&lt;br /&gt;
&lt;br /&gt;
Se un testo deve comparire solo se è l'ultimo record di dettaglio dell'ordine, per esempio la dicitura &amp;quot;NON APPROVATO&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (OnLastRecord or (Next({PORDER.POHNUM_0}) &amp;lt;&amp;gt; {PORDER.POHNUM_0})) then&lt;br /&gt;
    //siamo dopo l'ultimo record di dettaglio dell'ordine&lt;br /&gt;
    if {PORDER.APPFLG_0}&amp;gt;=3 then&lt;br /&gt;
        //l'ordine è stato approvato, quindi sopprimo questa sezione&lt;br /&gt;
        true&lt;br /&gt;
    else&lt;br /&gt;
        //l'ordine NON è stato approvato, quindi questa sezione deve comparire, NON devo sopprimerla&lt;br /&gt;
        false&lt;br /&gt;
else &lt;br /&gt;
// non è l'ultimo record dell'ordine; sopprimo la sezione&lt;br /&gt;
    true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per far comparire un'intestazione solo sulla prima pagina del gruppo, mettere nella condizione Sopprimi della sezione l'istruzione:&lt;br /&gt;
&amp;lt;pre&amp;gt;InRepeatedGroupHeader&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per far comparire qualcosa solo nell'ultima pagina, mettere nella condizione Ometti:&lt;br /&gt;
&amp;lt;pre&amp;gt;PageNumber &amp;lt;&amp;gt; TotalPageCount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversioni ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Totext(number)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trasforma una variabile numerica in testo: 100 -&amp;gt;&amp;quot;100&amp;quot;&lt;br /&gt;
Stessa cosa di Cstr()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ToWord(NUmero, decimali)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
trasforma un numero nella sua rappresentazione in lettere: 110-&amp;gt; &amp;quot;centodieci&amp;quot;-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AmountToWord(Dossier, Lingua, CodiceValuta, Importo)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
permette di convertire in lettere nella lingua voluta, un importo numerico&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AmountToDigit(Dossier, Lingua, CodiceValuta, ImportoInLettere&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
permette di convertire in lettere nella lingua voluta, un importo espresso in stringa numerica&lt;br /&gt;
&lt;br /&gt;
== Formule ==&lt;br /&gt;
Per inserire un a capo in una stringa:&lt;br /&gt;
&amp;lt;code&amp;gt;testo := testo &amp;amp; ChrW (10)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per inserire una formula in un'altra formula usare la sintassi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{@ySageDev_Formula}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio: &amp;lt;code&amp;gt;RiferimentoDDT := RiferimentoDDT &amp;amp; &amp;quot;  -  &amp;quot; &amp;amp; {@ySageDev_RiferimentoPCKLIST}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esempio di indirizzo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
whilePrintingRecords;&lt;br /&gt;
global stringVar Indirizzo;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  trim({SORDER.BPDADDLIG_0}) &amp;amp; &amp;quot;  &amp;quot; &amp;amp; trim({SORDER.BPDADDLIG_1});&lt;br /&gt;
&lt;br /&gt;
if trim({SORDER.BPDADDLIG_2})&amp;lt;&amp;gt;&amp;quot;&amp;quot;  then &lt;br /&gt;
    Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; trim({SORDER.BPDADDLIG_2});&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; {SORDER.BPDPOSCOD_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCTY_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCRYNAM_0};&lt;br /&gt;
//&amp;amp; {SORDER.BPDSAT_0} &lt;br /&gt;
//&amp;amp; {SORDER.BPDCRY_0}&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; {SORDER.BPDPOSCOD_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCTY_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCRYNAM_0};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Momento di valutazione ===&lt;br /&gt;
&lt;br /&gt;
BeforeReadingRecords: prima di recuperare i record dal database&lt;br /&gt;
WhileReadingRecords: durante la lettura dei record del database ma prima del raggruppamento, dell’ordinamento e del riepilogo &lt;br /&gt;
WhilePrintingRecords: durante la stampa dei record (raggruppamento, ordinmento e riepilogo)&lt;br /&gt;
EvaluateAfter()&lt;br /&gt;
&lt;br /&gt;
== Formato Date ==&lt;br /&gt;
Se il valore data è in un campo:&lt;br /&gt;
ToText({MYFIELDNAME }, &amp;quot;dd-MMM-yyyy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Se è il risultato di una formula:&lt;br /&gt;
CSTR({?@ck_date}, &amp;quot;dddd, MMMM d, yyyy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ToText({Command.EffectiveDate} , &amp;quot;dd-MM-yyyy hh:mm:ss&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
I vari formati d dd ddd dddd M MM MMM MMMM yy yyyy&lt;br /&gt;
&lt;br /&gt;
== Barcode ==&lt;br /&gt;
Vai qui: [[CrystalReport_Barcode | Barcode]]&lt;br /&gt;
&lt;br /&gt;
== Traduzioni ==&lt;br /&gt;
=== Avviso ===&lt;br /&gt;
Le formule qui esposte di Crystal Repor recuperano le traduzioni dai file &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;\DOSSIERS\&amp;lt;nome dossier&amp;gt;\textraita&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
(se italiano) oppure &amp;lt;code&amp;gt;textrafra&amp;lt;/code&amp;gt; se francese, ecc. &lt;br /&gt;
&lt;br /&gt;
Affinché questi file siano aggiornati (quindi ogni volta dopo modifiche su campi di tipo AXX) e’ necessario eseguire la funzione di aggiornamento:&lt;br /&gt;
&lt;br /&gt;
'''''Sviluppo-&amp;gt;Strumenti-&amp;gt;Diversi-&amp;gt;Aggiornamento Testi traducibili'''''&lt;br /&gt;
&lt;br /&gt;
Le tabelle contenenti i campi traducibili usati in Crystal devono avere il '''flag &amp;quot;Generazione testi traducibili&amp;quot;''' attivo.&lt;br /&gt;
&lt;br /&gt;
=== Testi traducibili (tabella ATEXTRA) ===&lt;br /&gt;
;X3TranslatedText&lt;br /&gt;
(Questa funzione è contenuta nella libreria u212ltext.dll)&lt;br /&gt;
&lt;br /&gt;
Per recuperare una traduzione dalla tabella '''''ATEXTRA''''' utilizzare la seguente sintassi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stringVar X3TEX := &amp;quot;NOMETABELLA~NOMECAMPO~&amp;quot;+VALORECAMPO+&amp;quot;~~&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In caso di dubbi verificare direttamente nella tabella ATEXTRA i vari campi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stringVar X3TEX := &amp;quot;CODFIC_0~ZONE_0~IDENT1_0~IDENT2_0~&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;stringVar X3TEX := &amp;quot;TABCOUNTRY~CRYDES~&amp;quot;+{SINVOICEV.BPDCRY_0}+&amp;quot;~~&amp;quot;;&lt;br /&gt;
stringVar PaeseTradotto := X3TranslatedText ({?X3DOS}, lang_trad, X3TEX);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Altro esempio con il testo da recuperare che consiste in un valore di una '''tabella diversa''' (vedi funzione '''''GESADI''''' da F7 in sage):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WhilePrintingRecords;&lt;br /&gt;
stringVar X3TEX := &amp;quot;ATABDIV~LNGDES~20~&amp;quot;+{SORDERP.TSICOD_0}+&amp;quot;~&amp;quot;;&lt;br /&gt;
X3TranslatedText ({?X3DOS}, {@P_lang_trad},X3TEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Invece di ''LNGDES'' mettere ''SHODES'' se si vuole la descrizione breve.&lt;br /&gt;
&lt;br /&gt;
=== Menù locali (tabella APLSTD) ===&lt;br /&gt;
;TextOfChapter (accesso diretto, con i numeri)&lt;br /&gt;
&lt;br /&gt;
Nella formula '''''TextOfChapter''''' si trovano in genere tutte le istruzioni per recuperare le traduzioni necessarie, con righe del tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;global stringVar txtcondiV1 := TextOfChapter ({?X3DOS},   lang_trad,2281,50);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dove lang_trad è la variabile che contiene la lingua in cui tradurre, 2281 è il capitolo del menu (vedi funzione '''''TXT''''' da F7 in sage), e 50 è l'indice del testo da recuperare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TextForCode (con nome campo)&lt;br /&gt;
Per recuperare la descrizione associata ad un valore di menu locale (nella lingua dell'utente):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TextForCode(&amp;quot;Dossier;server;porta;versione&amp;quot;, &amp;quot;Tabella.Campo&amp;quot;, Valore)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
per esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TextForCode ({?X3DOS},&amp;quot;{STOJOU.TRSFAM_0}&amp;quot;,{STOJOU.TRSFAM_0})&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per recuperare una traduzione nella lingua voluta&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TranslatedTextForCode( Dossier, Lingua, &amp;quot;Tabella.Campo&amp;quot;, Valore)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TranslatedTextForCode( {?X3DOS}, {?X3LAN}, &amp;quot;{ITMMASTER.STOMGTCOD_0}&amp;quot;, ITMMASTER.STOMGTCOD_0 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Formattazioni ==&lt;br /&gt;
&lt;br /&gt;
=== Stili ===&lt;br /&gt;
&lt;br /&gt;
Costanti di stile delle linea: si possono usare all'interno delle formule&lt;br /&gt;
&lt;br /&gt;
* ''crNoLine''  Nessuna linea di bordo&lt;br /&gt;
* ''crSingleLine''  Una sola linea di bordo&lt;br /&gt;
* ''crDoubleLine''  Doppia linea di bordo &lt;br /&gt;
* ''crDashedLine''  Linea di bordo tratteggiata&lt;br /&gt;
* ''crDottedLine''  Linea di bordo punteggiata&lt;br /&gt;
&lt;br /&gt;
== Connessione ODBC ==&lt;br /&gt;
&lt;br /&gt;
Da esperto database, tab Dati, su Connessioni personali, cliccare sul + della connessione voluta; nella finestra che esce:&lt;br /&gt;
* selezionare l'origine dati voluta e cliccare AVANTI&lt;br /&gt;
* come ID utente mettere il nome del dossier (attenzione a maiuscolo/minuscolo)&lt;br /&gt;
* cliccare FINE e attendere che il db compaia sotto la connessione personale scelta&lt;br /&gt;
* inserire la solita password&lt;br /&gt;
&lt;br /&gt;
=== Usare una direttamente  query ===&lt;br /&gt;
&lt;br /&gt;
Se si vuole usare una direttamente una query bisogna aggiungere un comando:&lt;br /&gt;
&lt;br /&gt;
[[File:Crystal Report Query.png]]&lt;br /&gt;
&lt;br /&gt;
== Cause di lentezza ==&lt;br /&gt;
&lt;br /&gt;
* una possibile causa di estrema lentezza può essere un'istruzione &amp;quot;WhilePrintingReports&amp;quot; su un campo di dettaglio; meglio puntare su una vista ben relazionata che risolve molte cose in modo più performante.&lt;br /&gt;
&lt;br /&gt;
== Pagine in appendice (tipo Termini e Condizioni) ==&lt;br /&gt;
&lt;br /&gt;
Impostare in &amp;quot;Piè di pagina Report&amp;quot;, &amp;quot;Nuova pagina prima&amp;quot; (da &amp;quot;Esperto sezione&amp;quot;, selezionare &amp;quot;Piè di pagina Report&amp;quot; , scheda &amp;quot;Paging&amp;quot;). &lt;br /&gt;
Scrivi la tua appendice nella sezione &amp;quot;Piè di pagina Report&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Se c'è già una sezione &amp;quot;Piè di pagina Report&amp;quot;, aggiungere una sottosezione e impostare questa come appena detto.&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Gestione_videate_e_campi&amp;diff=1121</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=1121"/>
		<updated>2026-01-21T13:24:38Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &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;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aggiornare una finestra ==&lt;br /&gt;
&lt;br /&gt;
Fonte:https://communityhub.sage.com/us/sage_x3/f/general-discussion/103996/hot-to-invoke-refresh-button&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per aggiornare una finestra va eseguita la chiamata&lt;br /&gt;
&amp;lt;pre&amp;gt;Gosub RELIT From GOBJSUB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ma prima vanno recuperate alcune variabili, in base alla situazione possono essere nessuna o solo alcune.&lt;br /&gt;
Qui il codice per recuperale tutte all'apertura della finestra e poi la chiamata di aggiornamento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$OUVRE&lt;br /&gt;
&lt;br /&gt;
  Global Integer YCLECUR : YCLECUR = CLECUR&lt;br /&gt;
  Global Char YCLECUR1(30) : YCLECUR1 = CLECUR1&lt;br /&gt;
  Global Char YCLECUR2(30) : YCLECUR1 = CLECUR2&lt;br /&gt;
  Global Integer YTYPGES : YTYPGES = TYPGES&lt;br /&gt;
  Global Char YABFIC(30) : YABFIC = ABFIC&lt;br /&gt;
  Global Char YCLEPRIM(30) : YCLEPRIM = CLEPRIM&lt;br /&gt;
  Global Char YPROGOBJ(30) : YPROGOBJ = PROGOBJ&lt;br /&gt;
  Global Integer YVERROU : YVERROU = VERROU&lt;br /&gt;
  Global Integer YOVERROU : YOVERROU = OVERROU&lt;br /&gt;
  Global Char YSYMBOLE(30) : YSYMBOLE = SYMBOLE&lt;br /&gt;
  Global Integer YNBMASK : YNBMASK = NBMASK&lt;br /&gt;
  Global Char YWINPROG(30) : YWINPROG = WINPROG&lt;br /&gt;
  Global Integer YAMA(dim(AMA)) : YAMA = AMA&lt;br /&gt;
  Global Integer AMAINDX : AMAINDX = dim(AMA)&lt;br /&gt;
  Global Integer YAIMGLCK : YAIMGLCK = AIMGLCK&lt;br /&gt;
Return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subprog REFRESH_SCREEN()&lt;br /&gt;
Local Integer AMA(AMAINDX)&lt;br /&gt;
&lt;br /&gt;
  TYPGES = YTYPGES&lt;br /&gt;
  CLECUR = YCLECUR&lt;br /&gt;
  CLECUR1 = YCLECUR1&lt;br /&gt;
  CLECUR2 = YCLECUR2&lt;br /&gt;
  ABFIC = YABFIC&lt;br /&gt;
  CLEPRIM = YCLEPRIM&lt;br /&gt;
  PROGOBJ = YPROGOBJ&lt;br /&gt;
  VERROU = YVERROU&lt;br /&gt;
  OVERROU = YOVERROU&lt;br /&gt;
  SYMBOLE = YSYMBOLE&lt;br /&gt;
  NBMASK = YNBMASK&lt;br /&gt;
  WINPROG = YWINPROG&lt;br /&gt;
  AMA = YAMA&lt;br /&gt;
  AIMGLCK = YAIMGLCK&lt;br /&gt;
  Gosub RELIT From GOBJSUB&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Errori&amp;diff=1114</id>
		<title>Errori</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Errori&amp;diff=1114"/>
		<updated>2024-12-23T16:24:03Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: Created page with &amp;quot; === &amp;quot;Funzione non definita per il valore fornito&amp;quot; ===   Potrebbe essere che la schermata ha raggiuntno il numero massimo di righe (specie i dati sono alimentati da più perso...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== &amp;quot;Funzione non definita per il valore fornito&amp;quot; === &lt;br /&gt;
&lt;br /&gt;
Potrebbe essere che la schermata ha raggiuntno il numero massimo di righe (specie i dati sono alimentati da più persone in contemporanea o attraverso altri sw).&lt;br /&gt;
&lt;br /&gt;
Andare sulla definizione schermata e cambiare il vaore del campo Riga&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Main_Page&amp;diff=1113</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Main_Page&amp;diff=1113"/>
		<updated>2024-12-23T16:21:59Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Benvenuti in SageDev KB!&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il wiki italiano su Sage X3&lt;br /&gt;
&lt;br /&gt;
Chiunque può contribuire!&lt;br /&gt;
&lt;br /&gt;
Buon lavoro&lt;br /&gt;
&lt;br /&gt;
== Parti da qui ==&lt;br /&gt;
=== per utenti finali ===&lt;br /&gt;
* [[UtentiFinali| Utenti finali]]&lt;br /&gt;
&lt;br /&gt;
=== per tecnici ===&lt;br /&gt;
&lt;br /&gt;
* [[Sistema|Sistema]]: Informazioni relative allo configurazione del Sistema Sage&lt;br /&gt;
* [[Syracuse]]&lt;br /&gt;
* [[Menu principale]]&lt;br /&gt;
* [[Parametrizzazione|Parametrizzazione]]: Informazioni relative allo sviluppo parametrico&lt;br /&gt;
* [[Programmazione|Programmazione]]: Informazioni relative allo sviluppo software&lt;br /&gt;
* [[Errori]]&lt;br /&gt;
* [[Web Services]]&lt;br /&gt;
* [[Crystal Report]]&lt;br /&gt;
* [[Eclipse|Eclipse]]&lt;br /&gt;
* [[Parametrizzazioni Funzionali]]&lt;br /&gt;
* [[Risorse]]&lt;br /&gt;
* [[Supporto Formula|Supporto Formula]]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=1110</id>
		<title>Data ora</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=1110"/>
		<updated>2024-12-05T09:18:47Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &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;
&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;
&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;
&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;
=== gdatetime$: da stringa canonica a dateTime ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Local Date DATA&lt;br /&gt;
Local Char STR_DATETIME(20)&lt;br /&gt;
STR_DATETIME=&amp;quot;2011-05-23T04:43:53Z&amp;quot;  #la stringa deve avere 20 caratteri nel formato canonico&lt;br /&gt;
gdatetime$(str)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
YYYY-MM-DDThh:mm:ssZ&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;
Conversione da data a stringa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;format$(&amp;quot;DD2&amp;quot;,date$)&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>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=1109</id>
		<title>Data ora</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=1109"/>
		<updated>2024-12-05T09:13:32Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &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;
&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;
&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;
&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;
=== gdatetime$: da stringa canonica a dateTime ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Local Date DATA&lt;br /&gt;
Local Char STR_DATETIME(20)&lt;br /&gt;
STR_DATETIME=&amp;quot;2011-05-23T04:43:53Z&amp;quot;  #la stringa deve avere 20 caratteri nel formato canonico&lt;br /&gt;
gdatetime$(str)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
YYYY-MM-DDThh:mm:ssZ&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;
Conversione da data a stringa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;format$(&amp;quot;DD2&amp;quot;,date$)&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>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=1108</id>
		<title>Data ora</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=1108"/>
		<updated>2024-12-05T08:59:23Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &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;
Conversione da data a stringa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;format$(&amp;quot;DD2&amp;quot;,date$)&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>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=1107</id>
		<title>Data ora</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=1107"/>
		<updated>2024-12-05T08:56:50Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* Esempi */&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;
&lt;br /&gt;
&amp;lt;code&amp;gt;format$(&amp;quot;DD2&amp;quot;,date$)&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>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=1106</id>
		<title>Data ora</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Data_ora&amp;diff=1106"/>
		<updated>2024-12-05T08:35:09Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &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;
&lt;br /&gt;
&amp;lt;code&amp;gt;format$(&amp;quot;DD2&amp;quot;,date$)&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>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Crystal_Report&amp;diff=1105</id>
		<title>Crystal Report</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Crystal_Report&amp;diff=1105"/>
		<updated>2024-12-05T08:23:50Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Le istruzioni devono terminare con un &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;, eccetto l'ultima per cui è facoltativo. L'ultima istruzione rappresenta il valore di ritorno di una formula.&lt;br /&gt;
&lt;br /&gt;
In caso di istruzioni raggruppate con parentesi tonde (come per esempio negli &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;), tale gruppo rappresenta un'istruzione e in caso di istruizioni successive deve anch'esso essere seguito da un &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Condizioni ==&lt;br /&gt;
&lt;br /&gt;
if &amp;lt;condition&amp;gt; &lt;br /&gt;
then &amp;lt;then&amp;gt; &lt;br /&gt;
else &amp;lt;else&amp;gt; &lt;br /&gt;
&lt;br /&gt;
dove &amp;lt;condition&amp;gt;, &amp;lt;then&amp;gt; e &amp;lt;else&amp;gt; sono tutte espressioni singole. Se dopo &amp;lt;then&amp;gt; o &amp;lt;else&amp;gt; sono presenti più espressioni, convertirle in singole espressioni racchiudendole tra parentesi. Ad esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if {SDELIVERY_1.YSDHNUM_0}&amp;lt;&amp;gt;&amp;quot;&amp;quot; then&lt;br /&gt;
(&lt;br /&gt;
  lastValue := {Branch_View.Branch_ID};&lt;br /&gt;
  crRed;&lt;br /&gt;
)&lt;br /&gt;
else&lt;br /&gt;
  lastValue := {Branch_View.Branch_ID};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Condizioni particolari ===&lt;br /&gt;
&lt;br /&gt;
Se un testo deve comparire solo se è l'ultimo record di dettaglio dell'ordine, per esempio la dicitura &amp;quot;NON APPROVATO&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (OnLastRecord or (Next({PORDER.POHNUM_0}) &amp;lt;&amp;gt; {PORDER.POHNUM_0})) then&lt;br /&gt;
    //siamo dopo l'ultimo record di dettaglio dell'ordine&lt;br /&gt;
    if {PORDER.APPFLG_0}&amp;gt;=3 then&lt;br /&gt;
        //l'ordine è stato approvato, quindi sopprimo questa sezione&lt;br /&gt;
        true&lt;br /&gt;
    else&lt;br /&gt;
        //l'ordine NON è stato approvato, quindi questa sezione deve comparire, NON devo sopprimerla&lt;br /&gt;
        false&lt;br /&gt;
else &lt;br /&gt;
// non è l'ultimo record dell'ordine; sopprimo la sezione&lt;br /&gt;
    true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per far comparire un'intestazione solo sulla prima pagina del gruppo, mettere nella condizione Sopprimi della sezione l'istruzione:&lt;br /&gt;
&amp;lt;pre&amp;gt;InRepeatedGroupHeader&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per far comparire qualcosa solo nell'ultima pagina, mettere nella condizione Ometti:&lt;br /&gt;
&amp;lt;pre&amp;gt;PageNumber &amp;lt;&amp;gt; TotalPageCount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversioni ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Totext(number)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trasforma una variabile numerica in testo: 100 -&amp;gt;&amp;quot;100&amp;quot;&lt;br /&gt;
Stessa cosa di Cstr()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ToWord(NUmero, decimali)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
trasforma un numero nella sua rappresentazione in lettere: 110-&amp;gt; &amp;quot;centodieci&amp;quot;-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AmountToWord(Dossier, Lingua, CodiceValuta, Importo)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
permette di convertire in lettere nella lingua voluta, un importo numerico&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AmountToDigit(Dossier, Lingua, CodiceValuta, ImportoInLettere&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
permette di convertire in lettere nella lingua voluta, un importo espresso in stringa numerica&lt;br /&gt;
&lt;br /&gt;
== Formule ==&lt;br /&gt;
Per inserire un a capo in una stringa:&lt;br /&gt;
&amp;lt;code&amp;gt;testo := testo &amp;amp; ChrW (10)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per inserire una formula in un'altra formula usare la sintassi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{@ySageDev_Formula}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio: &amp;lt;code&amp;gt;RiferimentoDDT := RiferimentoDDT &amp;amp; &amp;quot;  -  &amp;quot; &amp;amp; {@ySageDev_RiferimentoPCKLIST}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esempio di indirizzo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
whilePrintingRecords;&lt;br /&gt;
global stringVar Indirizzo;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  trim({SORDER.BPDADDLIG_0}) &amp;amp; &amp;quot;  &amp;quot; &amp;amp; trim({SORDER.BPDADDLIG_1});&lt;br /&gt;
&lt;br /&gt;
if trim({SORDER.BPDADDLIG_2})&amp;lt;&amp;gt;&amp;quot;&amp;quot;  then &lt;br /&gt;
    Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; trim({SORDER.BPDADDLIG_2});&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; {SORDER.BPDPOSCOD_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCTY_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCRYNAM_0};&lt;br /&gt;
//&amp;amp; {SORDER.BPDSAT_0} &lt;br /&gt;
//&amp;amp; {SORDER.BPDCRY_0}&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; {SORDER.BPDPOSCOD_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCTY_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCRYNAM_0};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Momento di valutazione ===&lt;br /&gt;
&lt;br /&gt;
BeforeReadingRecords: prima di recuperare i record dal database&lt;br /&gt;
WhileReadingRecords: durante la lettura dei record del database ma prima del raggruppamento, dell’ordinamento e del riepilogo &lt;br /&gt;
WhilePrintingRecords: durante la stampa dei record (raggruppamento, ordinmento e riepilogo)&lt;br /&gt;
EvaluateAfter()&lt;br /&gt;
&lt;br /&gt;
== Formato Date ==&lt;br /&gt;
Se il valore data è in un campo:&lt;br /&gt;
ToText({MYFIELDNAME }, &amp;quot;dd-MMM-yyyy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Se è il risultato di una formula:&lt;br /&gt;
CSTR({?@ck_date}, &amp;quot;dddd, MMMM d, yyyy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ToText({Command.EffectiveDate} , &amp;quot;dd-MM-yyyy hh:mm:ss&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
I vari formati d dd ddd dddd M MM MMM MMMM yy yyyy&lt;br /&gt;
&lt;br /&gt;
== Barcode ==&lt;br /&gt;
Vai qui: [[CrystalReport_Barcode | Barcode]]&lt;br /&gt;
&lt;br /&gt;
== Traduzioni ==&lt;br /&gt;
=== Avviso ===&lt;br /&gt;
Le formule qui esposte di Crystal Repor recuperano le traduzioni dai file &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;\DOSSIERS\&amp;lt;nome dossier&amp;gt;\textraita&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
(se italiano) oppure &amp;lt;code&amp;gt;textrafra&amp;lt;/code&amp;gt; se francese, ecc. &lt;br /&gt;
&lt;br /&gt;
Affinché questi file siano aggiornati (quindi ogni volta dopo modifiche su campi di tipo AXX) e’ necessario eseguire la funzione di aggiornamento:&lt;br /&gt;
&lt;br /&gt;
'''''Sviluppo-&amp;gt;Strumenti-&amp;gt;Diversi-&amp;gt;Aggiornamento Testi traducibili'''''&lt;br /&gt;
&lt;br /&gt;
Le tabelle contenenti i campi traducibili usati in Crystal devono avere il '''flag &amp;quot;Generazione testi traducibili&amp;quot;''' attivo.&lt;br /&gt;
&lt;br /&gt;
=== Testi traducibili (tabella ATEXTRA) ===&lt;br /&gt;
;X3TranslatedText&lt;br /&gt;
(Questa funzione è contenuta nella libreria u212ltext.dll)&lt;br /&gt;
&lt;br /&gt;
Per recuperare una traduzione dalla tabella '''''ATEXTRA''''' utilizzare la seguente sintassi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stringVar X3TEX := &amp;quot;NOMETABELLA~NOMECAMPO~&amp;quot;+VALORECAMPO+&amp;quot;~~&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In caso di dubbi verificare direttamente nella tabella ATEXTRA i vari campi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stringVar X3TEX := &amp;quot;CODFIC_0~ZONE_0~IDENT1_0~IDENT2_0~&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;stringVar X3TEX := &amp;quot;TABCOUNTRY~CRYDES~&amp;quot;+{SINVOICEV.BPDCRY_0}+&amp;quot;~~&amp;quot;;&lt;br /&gt;
stringVar PaeseTradotto := X3TranslatedText ({?X3DOS}, lang_trad, X3TEX);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Altro esempio con il testo da recuperare che consiste in un valore di una '''tabella diversa''' (vedi funzione '''''GESADI''''' da F7 in sage):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WhilePrintingRecords;&lt;br /&gt;
stringVar X3TEX := &amp;quot;ATABDIV~LNGDES~20~&amp;quot;+{SORDERP.TSICOD_0}+&amp;quot;~&amp;quot;;&lt;br /&gt;
X3TranslatedText ({?X3DOS}, {@P_lang_trad},X3TEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Invece di ''LNGDES'' mettere ''SHODES'' se si vuole la descrizione breve.&lt;br /&gt;
&lt;br /&gt;
=== Menù locali (tabella APLSTD) ===&lt;br /&gt;
;TextOfChapter (accesso diretto, con i numeri)&lt;br /&gt;
&lt;br /&gt;
Nella formula '''''TextOfChapter''''' si trovano in genere tutte le istruzioni per recuperare le traduzioni necessarie, con righe del tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;global stringVar txtcondiV1 := TextOfChapter ({?X3DOS},   lang_trad,2281,50);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dove lang_trad è la variabile che contiene la lingua in cui tradurre, 2281 è il capitolo del menu (vedi funzione '''''TXT''''' da F7 in sage), e 50 è l'indice del testo da recuperare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TextForCode (con nome campo)&lt;br /&gt;
Per recuperare la descrizione associata ad un valore di menu locale (nella lingua dell'utente):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TextForCode(&amp;quot;Dossier;server;porta;versione&amp;quot;, &amp;quot;Tabella.Campo&amp;quot;, Valore)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per recuperare una traduzione nella lingua voluta&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TranslatedTextForCode( Dossier, Lingua, &amp;quot;Tabella.Campo&amp;quot;, Valore)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TranslatedTextForCode( {?X3DOS}, {?X3LAN}, &amp;quot;{ITMMASTER.STOMGTCOD_0}&amp;quot;, ITMMASTER.STOMGTCOD_0 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Formattazioni ==&lt;br /&gt;
&lt;br /&gt;
=== Stili ===&lt;br /&gt;
&lt;br /&gt;
Costanti di stile delle linea: si possono usare all'interno delle formule&lt;br /&gt;
&lt;br /&gt;
* ''crNoLine''  Nessuna linea di bordo&lt;br /&gt;
* ''crSingleLine''  Una sola linea di bordo&lt;br /&gt;
* ''crDoubleLine''  Doppia linea di bordo &lt;br /&gt;
* ''crDashedLine''  Linea di bordo tratteggiata&lt;br /&gt;
* ''crDottedLine''  Linea di bordo punteggiata&lt;br /&gt;
&lt;br /&gt;
== Connessione ODBC ==&lt;br /&gt;
&lt;br /&gt;
Da esperto database, tab Dati, su Connessioni personali, cliccare sul + della connessione voluta; nella finestra che esce:&lt;br /&gt;
* selezionare l'origine dati voluta e cliccare AVANTI&lt;br /&gt;
* come ID utente mettere il nome del dossier (attenzione a maiuscolo/minuscolo)&lt;br /&gt;
* cliccare FINE e attendere che il db compaia sotto la connessione personale scelta&lt;br /&gt;
* inserire la solita password&lt;br /&gt;
&lt;br /&gt;
=== Usare una direttamente  query ===&lt;br /&gt;
&lt;br /&gt;
Se si vuole usare una direttamente una query bisogna aggiungere un comando:&lt;br /&gt;
&lt;br /&gt;
[[File:Crystal Report Query.png]]&lt;br /&gt;
&lt;br /&gt;
== Cause di lentezza ==&lt;br /&gt;
&lt;br /&gt;
* una possibile causa di estrema lentezza può essere un'istruzione &amp;quot;WhilePrintingReports&amp;quot; su un campo di dettaglio; meglio puntare su una vista ben relazionata che risolve molte cose in modo più performante.&lt;br /&gt;
&lt;br /&gt;
== Pagine in appendice (tipo Termini e Condizioni) ==&lt;br /&gt;
&lt;br /&gt;
Impostare in &amp;quot;Piè di pagina Report&amp;quot;, &amp;quot;Nuova pagina prima&amp;quot; (da &amp;quot;Esperto sezione&amp;quot;, selezionare &amp;quot;Piè di pagina Report&amp;quot; , scheda &amp;quot;Paging&amp;quot;). &lt;br /&gt;
Scrivi la tua appendice nella sezione &amp;quot;Piè di pagina Report&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Se c'è già una sezione &amp;quot;Piè di pagina Report&amp;quot;, aggiungere una sottosezione e impostare questa come appena detto.&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Crystal_Report&amp;diff=1104</id>
		<title>Crystal Report</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Crystal_Report&amp;diff=1104"/>
		<updated>2024-12-05T08:22:40Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Le istruzioni devono terminare con un &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;, eccetto l'ultima per cui è facoltativo. L'ultima istruzione rappresenta il valore di ritorno di una formula.&lt;br /&gt;
&lt;br /&gt;
In caso di istruzioni raggruppate con parentesi tonde (come per esempio negli &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;), tale gruppo rappresenta un'istruzione e in caso di istruizioni successive deve anch'esso essere seguito da un &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Condizioni ==&lt;br /&gt;
&lt;br /&gt;
if &amp;lt;condition&amp;gt; &lt;br /&gt;
then &amp;lt;then&amp;gt; &lt;br /&gt;
else &amp;lt;else&amp;gt; &lt;br /&gt;
&lt;br /&gt;
dove &amp;lt;condition&amp;gt;, &amp;lt;then&amp;gt; e &amp;lt;else&amp;gt; sono tutte espressioni singole. Se dopo &amp;lt;then&amp;gt; o &amp;lt;else&amp;gt; sono presenti più espressioni, convertirle in singole espressioni racchiudendole tra parentesi. Ad esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if {SDELIVERY_1.YSDHNUM_0}&amp;lt;&amp;gt;&amp;quot;&amp;quot; then&lt;br /&gt;
(&lt;br /&gt;
  lastValue := {Branch_View.Branch_ID};&lt;br /&gt;
  crRed;&lt;br /&gt;
)&lt;br /&gt;
else&lt;br /&gt;
  lastValue := {Branch_View.Branch_ID};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Condizioni particolari ===&lt;br /&gt;
&lt;br /&gt;
Se un testo deve comparire solo se è l'ultimo record di dettaglio dell'ordine, per esempio la dicitura &amp;quot;NON APPROVATO&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (OnLastRecord or (Next({PORDER.POHNUM_0}) &amp;lt;&amp;gt; {PORDER.POHNUM_0})) then&lt;br /&gt;
    //siamo dopo l'ultimo record di dettaglio dell'ordine&lt;br /&gt;
    if {PORDER.APPFLG_0}&amp;gt;=3 then&lt;br /&gt;
        //l'ordine è stato approvato, quindi sopprimo questa sezione&lt;br /&gt;
        true&lt;br /&gt;
    else&lt;br /&gt;
        //l'ordine NON è stato approvato, quindi questa sezione deve comparire, NON devo sopprimerla&lt;br /&gt;
        false&lt;br /&gt;
else &lt;br /&gt;
// non è l'ultimo record dell'ordine; sopprimo la sezione&lt;br /&gt;
    true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per far comparire un'intestazione solo sulla prima pagina del gruppo, mettere nella condizione Sopprimi della sezione l'istruzione:&lt;br /&gt;
&amp;lt;pre&amp;gt;InRepeatedGroupHeader&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per far comparire qualcosa solo nell'ultima pagina, mettere nella condizione Ometti:&lt;br /&gt;
&amp;lt;pre&amp;gt;PageNumber &amp;lt;&amp;gt; TotalPageCount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversioni ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Totext(number)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trasforma una variabile numerica in testo: 100 -&amp;gt;&amp;quot;100&amp;quot;&lt;br /&gt;
Stessa cosa di Cstr()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ToWord(NUmero, decimali)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
trasforma un numero nella sua rappresentazione in lettere: 110-&amp;gt; &amp;quot;centodieci&amp;quot;-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AmountToWord(Dossier, Lingua, CodiceValuta, Importo)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
permette di convertire in lettere nella lingua voluta, un importo numerico&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AmountToDigit(Dossier, Lingua, CodiceValuta, ImportoInLettere&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
permette di convertire in lettere nella lingua voluta, un importo espresso in stringa numerica&lt;br /&gt;
&lt;br /&gt;
== Formule ==&lt;br /&gt;
Per inserire un a capo in una stringa:&lt;br /&gt;
&amp;lt;code&amp;gt;testo := testo &amp;amp; ChrW (10)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per inserire una formula in un'altra formula usare la sintassi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{@ySageDev_Formula}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio: &amp;lt;code&amp;gt;RiferimentoDDT := RiferimentoDDT &amp;amp; &amp;quot;  -  &amp;quot; &amp;amp; {@ySageDev_RiferimentoPCKLIST}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esempio di indirizzo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
whilePrintingRecords;&lt;br /&gt;
global stringVar Indirizzo;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  trim({SORDER.BPDADDLIG_0}) &amp;amp; &amp;quot;  &amp;quot; &amp;amp; trim({SORDER.BPDADDLIG_1});&lt;br /&gt;
&lt;br /&gt;
if trim({SORDER.BPDADDLIG_2})&amp;lt;&amp;gt;&amp;quot;&amp;quot;  then &lt;br /&gt;
    Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; trim({SORDER.BPDADDLIG_2});&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; {SORDER.BPDPOSCOD_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCTY_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCRYNAM_0};&lt;br /&gt;
//&amp;amp; {SORDER.BPDSAT_0} &lt;br /&gt;
//&amp;amp; {SORDER.BPDCRY_0}&lt;br /&gt;
&lt;br /&gt;
Indirizzo:=  Indirizzo &amp;amp; chrw(10) &amp;amp; chrw(13) &amp;amp; {SORDER.BPDPOSCOD_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCTY_0} &amp;amp; &amp;quot;  &amp;quot; &amp;amp; {SORDER.BPDCRYNAM_0};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Momento di valutazione ===&lt;br /&gt;
&lt;br /&gt;
BeforeReadingRecords: prima di recuperare i record dal database&lt;br /&gt;
WhileReadingRecords: durante la lettura dei record del database ma prima del raggruppamento, dell’ordinamento e del riepilogo &lt;br /&gt;
WhilePrintingRecords: durante la stampa dei record (raggruppamento, ordinmento e riepilogo)&lt;br /&gt;
EvaluateAfter()&lt;br /&gt;
&lt;br /&gt;
== Formato Date ==&lt;br /&gt;
Se il valore data è in un campo:&lt;br /&gt;
ToText({MYFIELDNAME }, &amp;quot;dd-MMM-yyyy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Se è il risultato di una formula:&lt;br /&gt;
CSTR({?@ck_date}, &amp;quot;dddd, MMMM d, yyyy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ToText({Command.EffectiveDate} , &amp;quot;dd-MM-yyyy hh:mm:ss&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
I vari formati d dd ddd dddd M MM MMM MMMM yy yyyy&lt;br /&gt;
&lt;br /&gt;
== Barcode ==&lt;br /&gt;
Vai qui: [[CrystalReport_Barcode | Barcode]]&lt;br /&gt;
&lt;br /&gt;
== Traduzioni ==&lt;br /&gt;
=== Avviso ===&lt;br /&gt;
Le formule qui esposte di Crystal Repor recuperano le traduzioni dai file &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;\DOSSIERS\&amp;lt;nome dossier&amp;gt;\textraita&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
(se italiano) oppure &amp;lt;code&amp;gt;textrafra&amp;lt;/code&amp;gt; se francese, ecc. &lt;br /&gt;
&lt;br /&gt;
Affinché questi file siano aggiornati (quindi ogni volta dopo modifiche su campi di tipo AXX) e’ necessario eseguire la funzione di aggiornamento:&lt;br /&gt;
&lt;br /&gt;
'''''Sviluppo-&amp;gt;Strumenti-&amp;gt;Diversi-&amp;gt;Aggiornamento Testi traducibili'''''&lt;br /&gt;
&lt;br /&gt;
Le tabelle contenenti i campi traducibili usati in Crystal devono avere il '''flag &amp;quot;Generazione testi traducibili&amp;quot;''' attivo.&lt;br /&gt;
&lt;br /&gt;
=== Testi traducibili (tabella ATEXTRA) ===&lt;br /&gt;
;X3TranslatedText&lt;br /&gt;
(Questa funzione è contenuta nella libreria u212ltext.dll)&lt;br /&gt;
&lt;br /&gt;
Per recuperare una traduzione dalla tabella '''''ATEXTRA''''' utilizzare la seguente sintassi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stringVar X3TEX := &amp;quot;NOMETABELLA~NOMECAMPO~&amp;quot;+VALORECAMPO+&amp;quot;~~&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In caso di dubbi verificare direttamente nella tabella ATEXTRA i vari campi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stringVar X3TEX := &amp;quot;CODFIC_0~ZONE_0~IDENT1_0~IDENT2_0~&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;stringVar X3TEX := &amp;quot;TABCOUNTRY~CRYDES~&amp;quot;+{SINVOICEV.BPDCRY_0}+&amp;quot;~~&amp;quot;;&lt;br /&gt;
stringVar PaeseTradotto := X3TranslatedText ({?X3DOS}, lang_trad, X3TEX);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Altro esempio con il testo da recuperare che consiste in un valore di una '''tabella diversa''' (vedi funzione '''''GESADI''''' da F7 in sage):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WhilePrintingRecords;&lt;br /&gt;
stringVar X3TEX := &amp;quot;ATABDIV~LNGDES~20~&amp;quot;+{SORDERP.TSICOD_0}+&amp;quot;~&amp;quot;;&lt;br /&gt;
X3TranslatedText ({?X3DOS}, {@P_lang_trad},X3TEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Invece di ''LNGDES'' mettere ''SHODES'' se si vuole la descrizione breve.&lt;br /&gt;
&lt;br /&gt;
=== Menù locali (tabella APLSTD) ===&lt;br /&gt;
;TextOfChapter (accesso diretto, con i numeri)&lt;br /&gt;
&lt;br /&gt;
Nella formula '''''TextOfChapter''''' si trovano in genere tutte le istruzioni per recuperare le traduzioni necessarie, con righe del tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;global stringVar txtcondiV1 := TextOfChapter ({?X3DOS},   lang_trad,2281,50);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dove lang_trad è la variabile che contiene la lingua in cui tradurre, 2281 è il capitolo del menu (vedi funzione '''''TXT''''' da F7 in sage), e 50 è l'indice del testo da recuperare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TextForCode (con nome campo)&lt;br /&gt;
Per recuperare la descrizione associata ad un valore di menu locale (nella lingua dell'utente):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TextForCode(&amp;quot;Dossier;server;porta;versione&amp;quot;, &amp;quot;Tabella.Campo&amp;quot;, Valore)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per recuperare una traduzione nella lingua voluta&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TranslatedTextForCode( Dossier, Lingua, &amp;quot;Tabella.Campo&amp;quot;, Valore)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TranslatedTextForCode( {?X3DOS}, {?X3LAN}, &amp;quot;{ITMMASTER.STOMGTCOD_0}&amp;quot;, ITMMASTER.STOMGTCOD_0 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Formattazioni ==&lt;br /&gt;
&lt;br /&gt;
=== Stili ===&lt;br /&gt;
&lt;br /&gt;
Costanti di stile delle linea: si possono usare all'interno delle formule&lt;br /&gt;
&lt;br /&gt;
* ''crNoLine''  Nessuna linea di bordo&lt;br /&gt;
* ''crSingleLine''  Una sola linea di bordo&lt;br /&gt;
* ''crDoubleLine''  Doppia linea di bordo &lt;br /&gt;
* ''crDashedLine''  Linea di bordo tratteggiata&lt;br /&gt;
* ''crDottedLine''  Linea di bordo punteggiata&lt;br /&gt;
&lt;br /&gt;
== Connessione ODBC ==&lt;br /&gt;
&lt;br /&gt;
Da esperto database, tab Dati, su Connessioni personali, cliccare sul + della connessione voluta; nella finestra che esce:&lt;br /&gt;
* selezionare l'origine dati voluta e cliccare AVANTI&lt;br /&gt;
* come ID utente mettere il nome del dossier (attenzione a maiuscolo/minuscolo)&lt;br /&gt;
* cliccare FINE e attendere che il db compaia sotto la connessione personale scelta&lt;br /&gt;
* inserire la solita password&lt;br /&gt;
&lt;br /&gt;
=== Usare una direttamente  query ===&lt;br /&gt;
&lt;br /&gt;
Se si vuole usare una direttamente una query bisogna aggiungere un comando :&lt;br /&gt;
[[File:Crystal Report Query.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Cause di lentezza ==&lt;br /&gt;
&lt;br /&gt;
* una possibile causa di estrema lentezza può essere un'istruzione &amp;quot;WhilePrintingReports&amp;quot; su un campo di dettaglio; meglio puntare su una vista ben relazionata che risolve molte cose in modo più performante.&lt;br /&gt;
&lt;br /&gt;
== Pagine in appendice (tipo Termini e Condizioni) ==&lt;br /&gt;
&lt;br /&gt;
Impostare in &amp;quot;Piè di pagina Report&amp;quot;, &amp;quot;Nuova pagina prima&amp;quot; (da &amp;quot;Esperto sezione&amp;quot;, selezionare &amp;quot;Piè di pagina Report&amp;quot; , scheda &amp;quot;Paging&amp;quot;). &lt;br /&gt;
Scrivi la tua appendice nella sezione &amp;quot;Piè di pagina Report&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Se c'è già una sezione &amp;quot;Piè di pagina Report&amp;quot;, aggiungere una sottosezione e impostare questa come appena detto.&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:Crystal_Report_Query.png&amp;diff=1103</id>
		<title>File:Crystal Report Query.png</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:Crystal_Report_Query.png&amp;diff=1103"/>
		<updated>2024-12-05T08:19:27Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to use a query in Crystal report&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=426</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=426"/>
		<updated>2021-07-22T12:58:58Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* 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 di errore; 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;
* '''GWEBSERV''': indica modalità Web Services&lt;br /&gt;
* '''GUSER''': codice utente corrente&lt;br /&gt;
* '''GNOMUSER''': nome utente corrente&lt;br /&gt;
* '''GPROFIL''': profilo funzione &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;
* '''GLANDEF''': lingua default&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* '''GBOITE''': finestra corrente&lt;br /&gt;
* '''GABREV''': abbreviazione oggetto corrente&lt;br /&gt;
* '''GFCYDEF(n)''': sito di default per i vari moduli; vengono impostati in [[GESAFT]]&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;
* '''GDECPRI''': numer decimali per i prezzi; &lt;br /&gt;
* '''GCURLEG''': legislazione corrente&lt;br /&gt;
* '''GSOCIETE''': società corrente&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; contiene il valore del campo corrente&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; contiene il nome del campo corrente&lt;br /&gt;
** COUIND variabile attiva in base all'azione, per es. in APRES_MODIF; contiene l'indice del campo corrente, se apppartiene ad un riquadro.&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 l'abbreviazione della videata corrente&lt;br /&gt;
* '''masknam()''' restituisce il nome, per esempio &amp;lt;code&amp;gt;masknam([M:YWY4])&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''masknbf([ITM0]))''' restituisce il numero di campi presenti nella videata ITM0 (se è aperta)&lt;br /&gt;
* '''masklev()''' restituisce il livello di nidificazione della videata; 0 significa che la videata non è aperta; 1 che è aperta all'interno di un processo; N che è aperta dalla N-esima subroutine nidificata in una istruzione Call.&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;br /&gt;
* '''currbox''' : contiene il valore del browser corrente (GAU_CHE browser principale, GAU_CHE1...GAU_CHE8, GAU_CHE9 ultimi letti)&lt;br /&gt;
&lt;br /&gt;
Poco usate&lt;br /&gt;
* '''maskabr(i)''' contiene le abbreviazioni delle videate aperte&lt;br /&gt;
* '''maskrk(&amp;lt;class | num_exp&amp;gt;, row_exp)''' returns the rows of the fields for an open screen&lt;br /&gt;
* '''masksiz(i)''' numero di bytes usati dalla i-esima videata (il cui nome è &amp;lt;code&amp;gt;masknam(i)&amp;lt;/code&amp;gt;)&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=425</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=425"/>
		<updated>2021-07-22T12:51:40Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* 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 di errore; 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;
* '''GWEBSERV''': indica modalità Web Services&lt;br /&gt;
* '''GUSER''': codice utente corrente&lt;br /&gt;
* '''GNOMUSER''': nome utente corrente&lt;br /&gt;
* '''GPROFIL''': profilo funzione &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;
* '''GLANDEF''': lingua default&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* '''GBOITE''': finestra corrente&lt;br /&gt;
* '''GABREV''': abbreviazione oggetto corrente&lt;br /&gt;
* '''GFCYDEF(n)''': sito di default per i vari moduli; vengono impostati in [[GESAFT]]&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;
* '''GDECPRI''': numer decimali per i prezzi; &lt;br /&gt;
* '''GCURLEG''': legislazione corrente&lt;br /&gt;
* '''GSOCIETE''': società corrente&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; contiene il valore del campo corrente&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; contiene il nome del campo corrente&lt;br /&gt;
** COUIND variabile attiva in base all'azione, per es. in APRES_MODIF; contiene l'indice del campo corrente, se apppartiene ad un riquadro.&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 l'abbreviazione della videata corrente&lt;br /&gt;
* '''masknam()''' restituisce il nome, per esempio &amp;lt;code&amp;gt;masknam([M:YWY4])&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''masknbf([ITM0]))''' restituisce il numero di campi presenti nella videata ITM0 (se è aperta)&lt;br /&gt;
* '''masklev()''' restituisce il livello di nidificazione della videata; 0 significa che la videata non è aperta; 1 che è aperta all'interno di un processo; N che è aperta dalla N-esima subroutine nidificata in una istruzione Call.&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;br /&gt;
&lt;br /&gt;
Poco usate&lt;br /&gt;
* '''maskabr(i)''' contiene le abbreviazioni delle videate aperte&lt;br /&gt;
* '''maskrk(&amp;lt;class | num_exp&amp;gt;, row_exp)''' returns the rows of the fields for an open screen&lt;br /&gt;
* '''masksiz(i)''' numero di bytes usati dalla i-esima videata (il cui nome è &amp;lt;code&amp;gt;masknam(i)&amp;lt;/code&amp;gt;)&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=419</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=419"/>
		<updated>2021-04-16T14:25:51Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &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 di errore; 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;
* '''GWEBSERV''': indica modalità Web Services&lt;br /&gt;
* '''GUSER''': codice utente corrente&lt;br /&gt;
* '''GNOMUSER''': nome utente corrente&lt;br /&gt;
* '''GPROFIL''': profilo funzione &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;
* '''GLANDEF''': lingua default&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* '''GFCYDEF(n)''': sito di default per i vari moduli; vengono impostati in [[GESAFT]]&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;
* '''GDECPRI''': numer decimali per i prezzi; &lt;br /&gt;
* '''GCURLEG''': legislazione corrente&lt;br /&gt;
* '''GSOCIETE''': società corrente&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; contiene il valore del campo corrente&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; contiene il nome del campo corrente&lt;br /&gt;
** COUIND variabile attiva in base all'azione, per es. in APRES_MODIF; contiene l'indice del campo corrente, se apppartiene ad un riquadro.&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 l'abbreviazione della videata corrente&lt;br /&gt;
* '''masknam()''' restituisce il nome, per esempio &amp;lt;code&amp;gt;masknam([M:YWY4])&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''masknbf([ITM0]))''' restituisce il numero di campi presenti nella videata ITM0 (se è aperta)&lt;br /&gt;
* '''masklev()''' restituisce il livello di nidificazione della videata; 0 significa che la videata non è aperta; 1 che è aperta all'interno di un processo; N che è aperta dalla N-esima subroutine nidificata in una istruzione Call.&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;br /&gt;
&lt;br /&gt;
Poco usate&lt;br /&gt;
* '''maskabr(i)''' contiene le abbreviazioni delle videate aperte&lt;br /&gt;
* '''maskrk(&amp;lt;class | num_exp&amp;gt;, row_exp)''' returns the rows of the fields for an open screen&lt;br /&gt;
* '''masksiz(i)''' numero di bytes usati dalla i-esima videata (il cui nome è &amp;lt;code&amp;gt;masknam(i)&amp;lt;/code&amp;gt;)&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=AVOCAB&amp;diff=418</id>
		<title>AVOCAB</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=AVOCAB&amp;diff=418"/>
		<updated>2021-03-29T14:30:16Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* Personalizzazione vocabolario */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Personalizzazione vocabolario ==&lt;br /&gt;
Questa funzione permette di sostituire delle traduzioni presenti a standard.&lt;br /&gt;
&lt;br /&gt;
Le modifiche inserite qui non vengono sovrascritte in caso di rivalidazione dossier.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Personalizzazione vocabolario .png|Personalizzazione vocabolario .png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Personalizzazione vocabolario esempio.png|Personalizzazione vocabolario esempio.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Personalizzazione vocabolario validazione .png|Personalizzazione vocabolario validazione .png]]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=AVOCAB&amp;diff=417</id>
		<title>AVOCAB</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=AVOCAB&amp;diff=417"/>
		<updated>2021-03-29T14:30:00Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* Personalizzazione vocabolario */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Personalizzazione vocabolario ==&lt;br /&gt;
Questa funzione permette di sostituire delle traduzioni presenti a standard.&lt;br /&gt;
&lt;br /&gt;
Le modifiche inserite qui non vengono sovrascritte in caso di rivalidazione dossier.&lt;br /&gt;
[[File:Personalizzazione vocabolario .png|Personalizzazione vocabolario .png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Personalizzazione vocabolario esempio.png|Personalizzazione vocabolario esempio.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Personalizzazione vocabolario validazione .png|Personalizzazione vocabolario validazione .png]]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:Personalizzazione_vocabolario_validazione_.png&amp;diff=416</id>
		<title>File:Personalizzazione vocabolario validazione .png</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:Personalizzazione_vocabolario_validazione_.png&amp;diff=416"/>
		<updated>2021-03-29T14:29:37Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Personalizzazione vocabolario valid&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:Personalizzazione_vocabolario_esempio.png&amp;diff=415</id>
		<title>File:Personalizzazione vocabolario esempio.png</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:Personalizzazione_vocabolario_esempio.png&amp;diff=415"/>
		<updated>2021-03-29T14:28:02Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Personalizzazione vocabolario esempio [AVOCAB]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:Personalizzazione_vocabolario_.png&amp;diff=414</id>
		<title>File:Personalizzazione vocabolario .png</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:Personalizzazione_vocabolario_.png&amp;diff=414"/>
		<updated>2021-03-29T14:27:19Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Personalizzazione vocabolario [AVOCAB]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=GESTRN&amp;diff=409</id>
		<title>GESTRN</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=GESTRN&amp;diff=409"/>
		<updated>2021-03-17T15:14:07Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* Regole d'arrotondamento */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Regole d'arrotondamento ==&lt;br /&gt;
&lt;br /&gt;
tabella TABROUND&lt;br /&gt;
&lt;br /&gt;
tipo dati RND, da RECHTYP non risulta nessun uso&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Arrotondamenti_Prezzi&amp;diff=408</id>
		<title>Arrotondamenti Prezzi</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Arrotondamenti_Prezzi&amp;diff=408"/>
		<updated>2021-03-17T14:57:09Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Per gestire l'arrotondamento dei prezzi ci sono diverse variabili in gioco.&lt;br /&gt;
La [[Variabili_globali|variabile globale]] '''GDECPRI'''&lt;br /&gt;
&lt;br /&gt;
Il parametro SALRND definibile per società:&lt;br /&gt;
&lt;br /&gt;
[[File:SALRND.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gli arrotondamenti definiti sulla valuta:&lt;br /&gt;
&lt;br /&gt;
[[File:Currency_round.png]]&lt;br /&gt;
&lt;br /&gt;
Il formato2 serve per un importo corto (prezzo unitario, sconto). L'Help su campo inoltre avvisa che &lt;br /&gt;
&amp;quot;il numero di decimali effettivi dei prezzi unitari è determinato dalla variabile GDECPRI.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
La voce arrotondamento vale per qualsiasi valore espresso in quella valuta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vedere i vari help su campo per maggiori dettagli&lt;br /&gt;
&lt;br /&gt;
Ci sarebbe da capire poi cosa si può fare con la funzione [[GESTRN]]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=407</id>
		<title>Variabili globali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Variabili_globali&amp;diff=407"/>
		<updated>2021-03-17T14:56:33Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* 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 di errore; 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;
* '''GWEBSERV''': indica modalità Web Services&lt;br /&gt;
* '''GUSER''': codice utente corrente&lt;br /&gt;
* '''GNOMUSER''': nome utente corrente&lt;br /&gt;
* '''GPROFIL''': profilo funzione &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;
* '''GLANDEF''': lingua default&lt;br /&gt;
* '''GLANGUE''': lingua della sessione corrente&lt;br /&gt;
* '''GFLAG''': transazione corrente&lt;br /&gt;
* '''GFCYDEF(n)''': sito di default per i vari moduli; vengono impostati in [[GESAFT]]&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;
* '''GDECPRI''': numer decimali per i prezzi; &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; contiene il valore del campo corrente&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; contiene il nome del campo corrente&lt;br /&gt;
** COUIND variabile attiva in base all'azione, per es. in APRES_MODIF; contiene l'indice del campo corrente, se apppartiene ad un riquadro.&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 l'abbreviazione della videata corrente&lt;br /&gt;
* '''masknam()''' restituisce il nome, per esempio &amp;lt;code&amp;gt;masknam([M:YWY4])&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''masknbf([ITM0]))''' restituisce il numero di campi presenti nella videata ITM0 (se è aperta)&lt;br /&gt;
* '''masklev()''' restituisce il livello di nidificazione della videata; 0 significa che la videata non è aperta; 1 che è aperta all'interno di un processo; N che è aperta dalla N-esima subroutine nidificata in una istruzione Call.&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;br /&gt;
&lt;br /&gt;
Poco usate&lt;br /&gt;
* '''maskabr(i)''' contiene le abbreviazioni delle videate aperte&lt;br /&gt;
* '''maskrk(&amp;lt;class | num_exp&amp;gt;, row_exp)''' returns the rows of the fields for an open screen&lt;br /&gt;
* '''masksiz(i)''' numero di bytes usati dalla i-esima videata (il cui nome è &amp;lt;code&amp;gt;masknam(i)&amp;lt;/code&amp;gt;)&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Arrotondamenti_Prezzi&amp;diff=406</id>
		<title>Arrotondamenti Prezzi</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Arrotondamenti_Prezzi&amp;diff=406"/>
		<updated>2021-03-17T14:53:09Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Per gestire l'arrotondamento dei prezzi ci sono diverse variabili in gioco.&lt;br /&gt;
La variabile globale '''GDECPRI'''&lt;br /&gt;
&lt;br /&gt;
Il parametro SALRND definibile per società:&lt;br /&gt;
&lt;br /&gt;
[[File:SALRND.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gli arrotondamenti definiti sulla valuta:&lt;br /&gt;
&lt;br /&gt;
[[File:Currency_round.png]]&lt;br /&gt;
&lt;br /&gt;
Il formato2 serve per un importo corto (prezzo unitario, sconto). L'Help su campo inoltre avvisa che &lt;br /&gt;
&amp;quot;il numero di decimali effettivi dei prezzi unitari è determinato dalla variabile GDECPRI.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
La voce arrotondamento vale per qualsiasi valore espresso in quella valuta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vedere i vari help su campo per maggiori dettagli&lt;br /&gt;
&lt;br /&gt;
Ci sarebbe da capire poi cosa si può fare con la funzione [[GESTRN]]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Arrotondamenti_Prezzi&amp;diff=405</id>
		<title>Arrotondamenti Prezzi</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Arrotondamenti_Prezzi&amp;diff=405"/>
		<updated>2021-03-17T14:40:26Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Per gestire l'arrotondamento dei prezzi ci sono diverse variabili in gioco.&lt;br /&gt;
La variabile globale '''GDECPRI'''&lt;br /&gt;
&lt;br /&gt;
Il parametro SALRND definibile per società:&lt;br /&gt;
&lt;br /&gt;
[[File:SALRND.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gli arrotondamenti definiti sulla valuta:&lt;br /&gt;
&lt;br /&gt;
[[File:Currency_round.png]]&lt;br /&gt;
&lt;br /&gt;
Il formato2 serve per un importo corto (prezzo unitario, sconto).&lt;br /&gt;
&lt;br /&gt;
La voce arrotondamento vale per qualsiasi valore espresso in quella valuta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vedere i vari help su campo per maggiori dettagli&lt;br /&gt;
&lt;br /&gt;
Ci sarebbe da capire poi cosa si può fare con la funzione [[GESTRN]]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=GESTRN&amp;diff=404</id>
		<title>GESTRN</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=GESTRN&amp;diff=404"/>
		<updated>2021-03-17T14:40:16Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: Created page with &amp;quot;== Regole d'arrotondamento ==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Regole d'arrotondamento ==&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Arrotondamenti_Prezzi&amp;diff=403</id>
		<title>Arrotondamenti Prezzi</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Arrotondamenti_Prezzi&amp;diff=403"/>
		<updated>2021-03-17T14:35:44Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: Created page with &amp;quot; Per gestire l'arrotondamento dei prezzi ci sono diverse variabili in gioco. La variabile globale '''GDECPRI'''  Il parametro SALRND definibile per società:  File:SALRND.pn...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Per gestire l'arrotondamento dei prezzi ci sono diverse variabili in gioco.&lt;br /&gt;
La variabile globale '''GDECPRI'''&lt;br /&gt;
&lt;br /&gt;
Il parametro SALRND definibile per società:&lt;br /&gt;
&lt;br /&gt;
[[File:SALRND.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gli arrotondamenti definiti sulla valuta:&lt;br /&gt;
&lt;br /&gt;
[[File:Currency_round.png]]&lt;br /&gt;
&lt;br /&gt;
Vedere i vari help su campo per maggiori dettagli&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:Currency_round.png&amp;diff=402</id>
		<title>File:Currency round.png</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:Currency_round.png&amp;diff=402"/>
		<updated>2021-03-17T14:33:20Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Arrotondamenti legati alla valuta&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:SALRND.png&amp;diff=401</id>
		<title>File:SALRND.png</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:SALRND.png&amp;diff=401"/>
		<updated>2021-03-17T14:32:04Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Parametro Arrotondamento prezzo unitario&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Parametrizzazioni_Funzionali&amp;diff=400</id>
		<title>Parametrizzazioni Funzionali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Parametrizzazioni_Funzionali&amp;diff=400"/>
		<updated>2021-03-17T14:30:07Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* Vendite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Parametrizzazioni Funzionali ==&lt;br /&gt;
&lt;br /&gt;
=== Vendite ===&lt;br /&gt;
[[Arrotondamenti_Prezzi|Arrotondamenti Prezzi]]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Parametrizzazioni_Funzionali&amp;diff=399</id>
		<title>Parametrizzazioni Funzionali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Parametrizzazioni_Funzionali&amp;diff=399"/>
		<updated>2021-03-17T14:29:59Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* Vendite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Parametrizzazioni Funzionali ==&lt;br /&gt;
&lt;br /&gt;
=== Vendite ===&lt;br /&gt;
[[Arrotondamenti_Prezzi|Arrotondamenti Prezzi]]&lt;br /&gt;
GDECPRI&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Parametrizzazioni_Funzionali&amp;diff=398</id>
		<title>Parametrizzazioni Funzionali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Parametrizzazioni_Funzionali&amp;diff=398"/>
		<updated>2021-03-17T14:29:51Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* Vendite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Parametrizzazioni Funzionali ==&lt;br /&gt;
&lt;br /&gt;
=== Vendite ===&lt;br /&gt;
Arrotondamenti_Prezzi|Arrotondamenti Prezzi]]&lt;br /&gt;
GDECPRI&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Parametrizzazioni_Funzionali&amp;diff=397</id>
		<title>Parametrizzazioni Funzionali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Parametrizzazioni_Funzionali&amp;diff=397"/>
		<updated>2021-03-17T14:29:26Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* Vendite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Parametrizzazioni Funzionali ==&lt;br /&gt;
&lt;br /&gt;
=== Vendite ===&lt;br /&gt;
[[Vendite Arrotondamenti Prezzi]]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Parametrizzazioni_Funzionali&amp;diff=396</id>
		<title>Parametrizzazioni Funzionali</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Parametrizzazioni_Funzionali&amp;diff=396"/>
		<updated>2021-03-17T14:29:16Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: Created page with &amp;quot;== Parametrizzazioni Funzionali ==  === Vendite === Vendite_Arrotondamenti_Prezzi&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Parametrizzazioni Funzionali ==&lt;br /&gt;
&lt;br /&gt;
=== Vendite ===&lt;br /&gt;
[[Vendite_Arrotondamenti_Prezzi]]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Main_Page&amp;diff=395</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Main_Page&amp;diff=395"/>
		<updated>2021-03-17T14:28:25Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: /* per tecnici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Benvenuti in SageDev KB!&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il wiki italiano su Sage X3&lt;br /&gt;
&lt;br /&gt;
Chiunque può contribuire!&lt;br /&gt;
&lt;br /&gt;
Buon lavoro&lt;br /&gt;
&lt;br /&gt;
== Parti da qui ==&lt;br /&gt;
=== per utenti finali ===&lt;br /&gt;
* [[UtentiFinali| Utenti finali]]&lt;br /&gt;
&lt;br /&gt;
=== per tecnici ===&lt;br /&gt;
&lt;br /&gt;
* [[Sistema|Sistema]]: Informazioni relative allo configurazione del Sistema Sage&lt;br /&gt;
* [[Syracuse]]&lt;br /&gt;
* [[Menu principale]]&lt;br /&gt;
* [[Parametrizzazione|Parametrizzazione]]: Informazioni relative allo sviluppo parametrico&lt;br /&gt;
* [[Programmazione|Programmazione]]: Informazioni relative allo sviluppo software&lt;br /&gt;
* [[Web Services]]&lt;br /&gt;
* [[Crystal Report]]&lt;br /&gt;
* [[Eclipse|Eclipse]]&lt;br /&gt;
* [[Parametrizzazioni Funzionali]]&lt;br /&gt;
* [[Risorse]]&lt;br /&gt;
* [[Supporto Formula|Supporto Formula]]&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Troubleshooting_picking_ricevimenti_da_creazione_fattura_acquisto&amp;diff=394</id>
		<title>Troubleshooting picking ricevimenti da creazione fattura acquisto</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Troubleshooting_picking_ricevimenti_da_creazione_fattura_acquisto&amp;diff=394"/>
		<updated>2021-03-16T09:40:31Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quando si crea una fattura di acquisto si può andare in picking dal browser &amp;quot;Selezione ricevimenti&amp;quot; (oggetto PT1)&lt;br /&gt;
&lt;br /&gt;
Il browser &amp;quot;Selezione ricevimenti&amp;quot; è gestito dai sorgente SUBPIH (standard) e da SPVPIH (verticale italiano). &lt;br /&gt;
La prima condizione di filtro è che la riga di ricevimento NON sia fatturata (non completamente fatturata) &amp;lt;code&amp;gt;PRECEIPTD.LININVFLG = 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:FILGAUSUP.jpg|FILGAUSUP.jpg]]&lt;br /&gt;
&lt;br /&gt;
in SUBPIHA, dove viene impostato FILGAUSUP, troviamo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $OUVRE_BOITE&lt;br /&gt;
 #-------------------------------#&lt;br /&gt;
 # Après ouverture de la fenêtre #&lt;br /&gt;
 #-------------------------------#&lt;br /&gt;
 #----- Chargement des noms des Currbox de chaque tiroir -----#&lt;br /&gt;
 Global Char GBOXPI2(10), GBOXPO1(10), GBOXPT1(10), GBOXPI1(10), GBOXPN1(10), GBOXSI2(10), GBOXLO1(10)&lt;br /&gt;
 GBOXPI2=&amp;quot;GAU_CHE&amp;quot;+num$(find(&amp;quot;PI2&amp;quot;,OBJLIS(1..8))) : # Liste des factures par fournisseur&lt;br /&gt;
 GBOXPO1=&amp;quot;GAU_CHE&amp;quot;+num$(find(&amp;quot;PO1&amp;quot;,OBJLIS(1..8))) : # Picking des commandes&lt;br /&gt;
 GBOXPT1=&amp;quot;GAU_CHE&amp;quot;+num$(find(&amp;quot;PT1&amp;quot;,OBJLIS(1..8))) : # Picking des réceptions&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 [...]&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $FILGAUCHE&lt;br /&gt;
 #----------------------------------------------#&lt;br /&gt;
 # Filtrer les enregistrements listes de gauche #&lt;br /&gt;
 #----------------------------------------------#  &lt;br /&gt;
 &lt;br /&gt;
 [...]&lt;br /&gt;
 &lt;br /&gt;
  Elsif currbox=GBOXPT1 : # Picking des réceptions&lt;br /&gt;
    If [M:PIH0]PIHTYP&amp;lt;&amp;gt;1&lt;br /&gt;
      FILGAUSUP(0) =&amp;quot;[F:PTD]LININVFLG=9&amp;quot; : FILGAUSUP(1)=&amp;quot;&amp;quot;&lt;br /&gt;
    Else&lt;br /&gt;
      FILGAUSUP(0) =&amp;quot;[F:PTD]LININVFLG=1 &amp;amp; [F:PTD]BPSINV=[M:PIH0]BPR&amp;quot;&lt;br /&gt;
      If [M:PCIW]WITMREF&amp;lt;&amp;gt;&amp;quot;&amp;quot; FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTD]ITMREF,[M:PCIW]WITMREF)&amp;lt;&amp;gt;0&amp;quot; : Endif&lt;br /&gt;
      If [M:PCIW]WNUMRCP&amp;lt;&amp;gt;&amp;quot;&amp;quot; FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTD]PTHNUM,[M:PCIW]WNUMRCP)&amp;lt;&amp;gt;0&amp;quot; : Endif&lt;br /&gt;
      If [M:PCIW]WNUMCDE&amp;lt;&amp;gt;&amp;quot;&amp;quot; FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTD]POHNUM,[M:PCIW]WNUMCDE)&amp;lt;&amp;gt;0&amp;quot; : Endif&lt;br /&gt;
      FILGAUSUP(0)-=&amp;quot;&amp;amp; [F:PTD]LINTYP&amp;lt;3&amp;quot;&lt;br /&gt;
      If [M:PCIW]WBPSNDE&amp;lt;&amp;gt;&amp;quot;&amp;quot;&lt;br /&gt;
        FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTH]BPSNDE,[M:PCIW]WBPSNDE)&amp;lt;&amp;gt;0&amp;quot;&lt;br /&gt;
      Endif&lt;br /&gt;
      FILGAUSUP(1)=&amp;quot;&amp;amp; [F:FCY]LEGCPY=GSOCIETE&amp;quot;&lt;br /&gt;
      If GCTLDATORI=2  FILGAUSUP(1)-=&amp;quot;&amp;amp; (([F:PTH]NDEDAT=[0/0/0] &amp;amp; [F:PTH]RCPDAT&amp;lt;=[M:PIH0]ACCDAT)|([F:PTH]NDEDAT&amp;lt;&amp;gt;[0/0/0] &amp;amp; min([F:PTH]NDEDAT,[F:PTH]RCPDAT)&amp;lt;=[M:PIH0]ACCDAT))&amp;quot; &lt;br /&gt;
      Endif&lt;br /&gt;
      FILGAUSUP(1)-=&amp;quot;&amp;amp; ([F:PTH]BETFCY&amp;lt;&amp;gt;2  | [F:PTH]BETCPY=2)&amp;quot;&lt;br /&gt;
      GBIDC3=&amp;quot;&amp;quot; : Call FILROLE(&amp;quot;PTH&amp;quot;,GBIDC3) From SUBARL&lt;br /&gt;
      If GPIHQTYRET = 1&lt;br /&gt;
        FILGAUSUP(3) =&amp;quot;&amp;amp; [F:PTD]RTNQTYPUU&amp;lt;[F:PTD]QTYPUU&amp;quot;&lt;br /&gt;
        FILGAUSUP(3) -=&amp;quot;&amp;amp; &amp;quot;+GBIDC3&lt;br /&gt;
      Else&lt;br /&gt;
        FILGAUSUP(3) =&amp;quot;&amp;amp; &amp;quot;+GBIDC3&lt;br /&gt;
      Endif&lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andando in Situazione riga:&lt;br /&gt;
&lt;br /&gt;
[[File:PTH Situazione riga.gif|PTH Situazione riga.gif]]&lt;br /&gt;
&lt;br /&gt;
si possono vedere le qta fatturate; se il totale supera la qta ricevuta ovviamente la riga non comparirà perchè è già stato fatturato tutto.&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Troubleshooting_picking_ricevimenti_da_creazione_fattura_acquisto&amp;diff=393</id>
		<title>Troubleshooting picking ricevimenti da creazione fattura acquisto</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Troubleshooting_picking_ricevimenti_da_creazione_fattura_acquisto&amp;diff=393"/>
		<updated>2021-03-16T09:23:50Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quando si crea una fattura di acquisto si può andare in picking dal browser &amp;quot;Selezione ricevimenti&amp;quot; (oggetto PT1)&lt;br /&gt;
&lt;br /&gt;
Il browser &amp;quot;Selezione ricevimenti&amp;quot; è gestito dai sorgente SUBPIH (standard) e da SPVPIH (verticale italiano). &lt;br /&gt;
La prima condizione di filtro è che la riga di ricevimento NON sia fatturata (non completamente fatturata) &amp;lt;code&amp;gt;PRECEIPTD.LININVFLG = 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:FILGAUSUP.jpg|FILGAUSUP.jpg]]&lt;br /&gt;
&lt;br /&gt;
in SUBPIHA, dove viene impostato FILGAUSUP, troviamo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$OUVRE_BOITE&lt;br /&gt;
#-------------------------------#&lt;br /&gt;
# Après ouverture de la fenêtre #&lt;br /&gt;
#-------------------------------#&lt;br /&gt;
#----- Chargement des noms des Currbox de chaque tiroir -----#&lt;br /&gt;
Global Char GBOXPI2(10), GBOXPO1(10), GBOXPT1(10), GBOXPI1(10), GBOXPN1(10), GBOXSI2(10), GBOXLO1(10)&lt;br /&gt;
GBOXPI2=&amp;quot;GAU_CHE&amp;quot;+num$(find(&amp;quot;PI2&amp;quot;,OBJLIS(1..8))) : # Liste des factures par fournisseur&lt;br /&gt;
GBOXPO1=&amp;quot;GAU_CHE&amp;quot;+num$(find(&amp;quot;PO1&amp;quot;,OBJLIS(1..8))) : # Picking des commandes&lt;br /&gt;
GBOXPT1=&amp;quot;GAU_CHE&amp;quot;+num$(find(&amp;quot;PT1&amp;quot;,OBJLIS(1..8))) : # Picking des réceptions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$FILGAUCHE&lt;br /&gt;
#----------------------------------------------#&lt;br /&gt;
# Filtrer les enregistrements listes de gauche #&lt;br /&gt;
#----------------------------------------------#&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
  Elsif currbox=GBOXPT1 : # Picking des réceptions&lt;br /&gt;
    If [M:PIH0]PIHTYP&amp;lt;&amp;gt;1&lt;br /&gt;
      FILGAUSUP(0) =&amp;quot;[F:PTD]LININVFLG=9&amp;quot; : FILGAUSUP(1)=&amp;quot;&amp;quot;&lt;br /&gt;
    Else&lt;br /&gt;
      FILGAUSUP(0) =&amp;quot;[F:PTD]LININVFLG=1 &amp;amp; [F:PTD]BPSINV=[M:PIH0]BPR&amp;quot;&lt;br /&gt;
      If [M:PCIW]WITMREF&amp;lt;&amp;gt;&amp;quot;&amp;quot; FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTD]ITMREF,[M:PCIW]WITMREF)&amp;lt;&amp;gt;0&amp;quot; : Endif&lt;br /&gt;
      If [M:PCIW]WNUMRCP&amp;lt;&amp;gt;&amp;quot;&amp;quot; FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTD]PTHNUM,[M:PCIW]WNUMRCP)&amp;lt;&amp;gt;0&amp;quot; : Endif&lt;br /&gt;
      If [M:PCIW]WNUMCDE&amp;lt;&amp;gt;&amp;quot;&amp;quot; FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTD]POHNUM,[M:PCIW]WNUMCDE)&amp;lt;&amp;gt;0&amp;quot; : Endif&lt;br /&gt;
     #FILGAUSUP(0)-=&amp;quot;&amp;amp; ([F:PTD]QTYPUU&amp;gt;[F:PTD]INVQTYPUU | [F:PTD]QTYSTU&amp;gt;[F:PTD]INVQTYSTU)&amp;quot;&lt;br /&gt;
      FILGAUSUP(0)-=&amp;quot;&amp;amp; [F:PTD]LINTYP&amp;lt;3&amp;quot;&lt;br /&gt;
      If [M:PCIW]WBPSNDE&amp;lt;&amp;gt;&amp;quot;&amp;quot;&lt;br /&gt;
        FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTH]BPSNDE,[M:PCIW]WBPSNDE)&amp;lt;&amp;gt;0&amp;quot;&lt;br /&gt;
      Endif&lt;br /&gt;
      FILGAUSUP(1)=&amp;quot;&amp;amp; [F:FCY]LEGCPY=GSOCIETE&amp;quot;&lt;br /&gt;
      #VPO 21/04/11 73382 ajout ctl DATORI aussi avec date BL&lt;br /&gt;
      #If GCTLDATORI=2  FILGAUSUP(1)-=&amp;quot;&amp;amp; [F:PTH]RCPDAT&amp;lt;=[M:PIH0]ACCDAT&amp;quot; : Endif&lt;br /&gt;
      If GCTLDATORI=2  FILGAUSUP(1)-=&amp;quot;&amp;amp; (([F:PTH]NDEDAT=[0/0/0] &amp;amp; [F:PTH]RCPDAT&amp;lt;=[M:PIH0]ACCDAT)|([F:PTH]NDEDAT&amp;lt;&amp;gt;[0/0/0] &amp;amp; min([F:PTH]NDEDAT,[F:PTH]RCPDAT)&amp;lt;=[M:PIH0]ACCDAT))&amp;quot; : Endif&lt;br /&gt;
      # Issue 95534 - 2013-12-31 by SR : Réceptions Inter société sont toujours facurables&lt;br /&gt;
      #FILGAUSUP(1)-=&amp;quot;&amp;amp; ([F:PTH]BETFCY&amp;lt;&amp;gt;2 | ([F:PTH]BETCPY=2 &amp;amp; ([F:PTD]VERFLG=2 | [F:PTD]SDHNUM='')))&amp;quot;&lt;br /&gt;
      FILGAUSUP(1)-=&amp;quot;&amp;amp; ([F:PTH]BETFCY&amp;lt;&amp;gt;2  | [F:PTH]BETCPY=2)&amp;quot;&lt;br /&gt;
      GBIDC3=&amp;quot;&amp;quot; : Call FILROLE(&amp;quot;PTH&amp;quot;,GBIDC3) From SUBARL&lt;br /&gt;
      # Issue 70507 - 2012-01-18 by MUARN : qté facturable non nulle&lt;br /&gt;
      If GPIHQTYRET = 1&lt;br /&gt;
        FILGAUSUP(3) =&amp;quot;&amp;amp; [F:PTD]RTNQTYPUU&amp;lt;[F:PTD]QTYPUU&amp;quot;&lt;br /&gt;
        FILGAUSUP(3) -=&amp;quot;&amp;amp; &amp;quot;+GBIDC3&lt;br /&gt;
      Else&lt;br /&gt;
        FILGAUSUP(3) =&amp;quot;&amp;amp; &amp;quot;+GBIDC3&lt;br /&gt;
      Endif&lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andando in Situazione riga:&lt;br /&gt;
&lt;br /&gt;
[[File:PTH Situazione riga.gif|PTH Situazione riga.gif]]&lt;br /&gt;
&lt;br /&gt;
si pussono vedere le qta fatturate; se il totale supera la qta ricevuta ovviamente la riga non comparirà perchè è già stato fatturato tutto.&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Troubleshooting_picking_ricevimenti_da_creazione_fattura_acquisto&amp;diff=392</id>
		<title>Troubleshooting picking ricevimenti da creazione fattura acquisto</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Troubleshooting_picking_ricevimenti_da_creazione_fattura_acquisto&amp;diff=392"/>
		<updated>2021-03-16T09:21:16Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quando si crea una fattura di acquisto si può andare in picking dal browser &amp;quot;Selezione ricevimenti&amp;quot; (oggetto PT1)&lt;br /&gt;
&lt;br /&gt;
Il browser &amp;quot;Selezione ricevimenti&amp;quot; è gestito dai sorgente SUBPIH (standard) e da SPVPIH (verticale italiano). &lt;br /&gt;
La prima condizione di filtro è che la riga di ricevimento NON sia fatturata (non completamente fatturata) &amp;lt;code&amp;gt;PRECEIPTD.LININVFLG = 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:FILGAUSUP.jpg|FILGAUSUP.jpg]]&lt;br /&gt;
&lt;br /&gt;
in SUBPIHA troviamo una cosa simile, dove viene impostato FILGAUSUP&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  Elsif currbox=GBOXPT1 : # Picking des réceptions&lt;br /&gt;
    If [M:PIH0]PIHTYP&amp;lt;&amp;gt;1&lt;br /&gt;
      FILGAUSUP(0) =&amp;quot;[F:PTD]LININVFLG=9&amp;quot; : FILGAUSUP(1)=&amp;quot;&amp;quot;&lt;br /&gt;
    Else&lt;br /&gt;
      FILGAUSUP(0) =&amp;quot;[F:PTD]LININVFLG=1 &amp;amp; [F:PTD]BPSINV=[M:PIH0]BPR&amp;quot;&lt;br /&gt;
      If [M:PCIW]WITMREF&amp;lt;&amp;gt;&amp;quot;&amp;quot; FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTD]ITMREF,[M:PCIW]WITMREF)&amp;lt;&amp;gt;0&amp;quot; : Endif&lt;br /&gt;
      If [M:PCIW]WNUMRCP&amp;lt;&amp;gt;&amp;quot;&amp;quot; FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTD]PTHNUM,[M:PCIW]WNUMRCP)&amp;lt;&amp;gt;0&amp;quot; : Endif&lt;br /&gt;
      If [M:PCIW]WNUMCDE&amp;lt;&amp;gt;&amp;quot;&amp;quot; FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTD]POHNUM,[M:PCIW]WNUMCDE)&amp;lt;&amp;gt;0&amp;quot; : Endif&lt;br /&gt;
     #FILGAUSUP(0)-=&amp;quot;&amp;amp; ([F:PTD]QTYPUU&amp;gt;[F:PTD]INVQTYPUU | [F:PTD]QTYSTU&amp;gt;[F:PTD]INVQTYSTU)&amp;quot;&lt;br /&gt;
      FILGAUSUP(0)-=&amp;quot;&amp;amp; [F:PTD]LINTYP&amp;lt;3&amp;quot;&lt;br /&gt;
      If [M:PCIW]WBPSNDE&amp;lt;&amp;gt;&amp;quot;&amp;quot;&lt;br /&gt;
        FILGAUSUP(0)+=&amp;quot; &amp;amp; pat([F:PTH]BPSNDE,[M:PCIW]WBPSNDE)&amp;lt;&amp;gt;0&amp;quot;&lt;br /&gt;
      Endif&lt;br /&gt;
      FILGAUSUP(1)=&amp;quot;&amp;amp; [F:FCY]LEGCPY=GSOCIETE&amp;quot;&lt;br /&gt;
      #VPO 21/04/11 73382 ajout ctl DATORI aussi avec date BL&lt;br /&gt;
      #If GCTLDATORI=2  FILGAUSUP(1)-=&amp;quot;&amp;amp; [F:PTH]RCPDAT&amp;lt;=[M:PIH0]ACCDAT&amp;quot; : Endif&lt;br /&gt;
      If GCTLDATORI=2  FILGAUSUP(1)-=&amp;quot;&amp;amp; (([F:PTH]NDEDAT=[0/0/0] &amp;amp; [F:PTH]RCPDAT&amp;lt;=[M:PIH0]ACCDAT)|([F:PTH]NDEDAT&amp;lt;&amp;gt;[0/0/0] &amp;amp; min([F:PTH]NDEDAT,[F:PTH]RCPDAT)&amp;lt;=[M:PIH0]ACCDAT))&amp;quot; : Endif&lt;br /&gt;
      # Issue 95534 - 2013-12-31 by SR : Réceptions Inter société sont toujours facurables&lt;br /&gt;
      #FILGAUSUP(1)-=&amp;quot;&amp;amp; ([F:PTH]BETFCY&amp;lt;&amp;gt;2 | ([F:PTH]BETCPY=2 &amp;amp; ([F:PTD]VERFLG=2 | [F:PTD]SDHNUM='')))&amp;quot;&lt;br /&gt;
      FILGAUSUP(1)-=&amp;quot;&amp;amp; ([F:PTH]BETFCY&amp;lt;&amp;gt;2  | [F:PTH]BETCPY=2)&amp;quot;&lt;br /&gt;
      GBIDC3=&amp;quot;&amp;quot; : Call FILROLE(&amp;quot;PTH&amp;quot;,GBIDC3) From SUBARL&lt;br /&gt;
      # Issue 70507 - 2012-01-18 by MUARN : qté facturable non nulle&lt;br /&gt;
      If GPIHQTYRET = 1&lt;br /&gt;
        FILGAUSUP(3) =&amp;quot;&amp;amp; [F:PTD]RTNQTYPUU&amp;lt;[F:PTD]QTYPUU&amp;quot;&lt;br /&gt;
        FILGAUSUP(3) -=&amp;quot;&amp;amp; &amp;quot;+GBIDC3&lt;br /&gt;
      Else&lt;br /&gt;
        FILGAUSUP(3) =&amp;quot;&amp;amp; &amp;quot;+GBIDC3&lt;br /&gt;
      Endif&lt;br /&gt;
    Endif&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andando in Situazione riga:&lt;br /&gt;
&lt;br /&gt;
[[File:PTH Situazione riga.gif|PTH Situazione riga.gif]]&lt;br /&gt;
&lt;br /&gt;
si pussono vedere le qta fatturate; se il totale supera la qta ricevuta ovviamente la riga non comparirà perchè è già stato fatturato tutto.&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Troubleshooting_picking_ricevimenti_da_creazione_fattura_acquisto&amp;diff=391</id>
		<title>Troubleshooting picking ricevimenti da creazione fattura acquisto</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Troubleshooting_picking_ricevimenti_da_creazione_fattura_acquisto&amp;diff=391"/>
		<updated>2021-03-16T09:08:07Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quando si crea una fattura di acquisto si può andare in picking dal browser &amp;quot;Selezione ricevimenti&amp;quot; (oggetto PT1)&lt;br /&gt;
&lt;br /&gt;
Il browser &amp;quot;Selezione ricevimenti&amp;quot; è gestito dai sorgente SUBPIH (standard) e da SPVPIH (verticale italiano). &lt;br /&gt;
La prima condizione di filtro è che la riga di ricevimento NON sia fatturata (non completamente fatturata) &amp;lt;code&amp;gt;PRECEIPTD.LININVFLG = 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:FILGAUSUP.jpg|FILGAUSUP.jpg]]&lt;br /&gt;
&lt;br /&gt;
Andando in Situazione riga:&lt;br /&gt;
&lt;br /&gt;
[[File:PTH Situazione riga.gif|PTH Situazione riga.gif]]&lt;br /&gt;
&lt;br /&gt;
si pussono vedere le qta fatturate; se il totale supera la qta ricevuta ovviamente la riga non comparirà perchè è già stato fatturato tutto.&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=Troubleshooting_picking_ricevimenti_da_creazione_fattura_acquisto&amp;diff=390</id>
		<title>Troubleshooting picking ricevimenti da creazione fattura acquisto</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=Troubleshooting_picking_ricevimenti_da_creazione_fattura_acquisto&amp;diff=390"/>
		<updated>2021-03-16T09:07:51Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: Created page with &amp;quot;Quando si crea una fattura di acquisto si può andare in picking dal browser &amp;quot;Selezione ricevimenti&amp;quot; (oggetto PT1)  Il browser &amp;quot;Selezione ricevimenti&amp;quot; è gestito dai sorgente...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quando si crea una fattura di acquisto si può andare in picking dal browser &amp;quot;Selezione ricevimenti&amp;quot; (oggetto PT1)&lt;br /&gt;
&lt;br /&gt;
Il browser &amp;quot;Selezione ricevimenti&amp;quot; è gestito dai sorgente SUBPIH (standard) e da SPVPIH (verticale italiano). &lt;br /&gt;
La prima condizione di filtro è che la riga di ricevimento NON sia fatturata (non completamente fatturata) &amp;lt;code&amp;gt;PRECEIPTD.LININVFLG = 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:FILGAUSUP.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
Andando in Situazione riga:&lt;br /&gt;
&lt;br /&gt;
[[File:PTH Situazione riga.gif|thumb]]&lt;br /&gt;
&lt;br /&gt;
si pussono vedere le qta fatturate; se il totale supera la qta ricevuta ovviamente la riga non comparirà perchè è già stato fatturato tutto.&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
	<entry>
		<id>https://kb.sagedev.it/index.php?title=File:FILGAUSUP.jpg&amp;diff=389</id>
		<title>File:FILGAUSUP.jpg</title>
		<link rel="alternate" type="text/html" href="https://kb.sagedev.it/index.php?title=File:FILGAUSUP.jpg&amp;diff=389"/>
		<updated>2021-03-16T09:06:15Z</updated>

		<summary type="html">&lt;p&gt;Mwadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Filtro righe ricevimenti in picking fattura acquisto&lt;/div&gt;</summary>
		<author><name>Mwadmin</name></author>
	</entry>
</feed>