Per le stampanti testuali è possibile personalizzare le stampe caricando nell’apposito campo “Configurazione stampa”, un file xml contenente il “layout” testuale. La personalizzazione, sebbene non raggiunga la completezza e la potenza di quella possibile con le stampanti grafiche, consente di aggiungere e posizionare all’interno del documento gli stessi campi dati che sono disponibili nei layout grafici inoltre è possibile aggiungere i comandi Esc\Pos sia per definire lo stile di output del testo sia per eseguire alcune funzionalità della stampante (es: apertura cassetto, modifiche alla dimensione del testo, beep sonori, ecc). Di seguito è spiegato come è composto il file xml del layout testuale in modo da poterlo modificare a proprio piacimento.
È possibile personalizzare i seguenti tipi documento:
Nella cartella utilità\stampanti dentro la cartella di installazione sono presenti alcuni file contenenti layout predefiniti che è già possibile utilizzare direttamente oppure come base di partenza per personalizzare la stampa.
I file sono i seguenti:
La struttura del file xml si presenta nel seguente modo:
<doc> | Radice dell’intero file xml | |||
<comandi> | Sezione configurazione dei comandi Esc/Pos | |||
<comando nome=”nome” valore=”valore comando” /> | Configurazione comando Esc pos | |||
... | ||||
</comandi> | Fine sezione configurazione comandi Esc/Pos | |||
<tipoDocumento> | Inizio documento | |||
... | Composizione del documento (vedi sotto) | |||
</tipoDocumento> | Fine documento | |||
</doc> | Fine documento xml |
Il tag tipoDocumento può assumere i seguenti valori:
Per ogni tipo documento elencato, quindi, è possibile personalizzare la stampa testuale.
N.B. i documenti scontrino e ricevuta saranno stampanti come documenti NON fiscali
Es:
<doc> | Radice dell’intero file xml | |||
<comandi> | Sezione configurazione dei comandi Esc/Pos | |||
<comando nome=”nome” valore=”valore comando” /> | Configurazione comando Esc pos | |||
... | ||||
</comandi> | Fine sezione configurazione comandi Esc/Pos | |||
<buonoSconto> | Inizio documento buono sconto | |||
... | Composizione del buono sconto | |||
</buonoSconto> | Fine documento buono sconto | |||
</doc> | Fine documento xml |
ELEMENTO RIGA
Ogni tipoDocumento è composto da tanti elementi di tipo <riga> che, appunto, rappresentano le varie righe del documento. Per i tipi più complessi (comanda e tipi conto) tali elementi riga sono raggruppati in sezioni (corrispondenti a diversi tag XML) che costituiscono la struttura del documento.
Ogni elemento <riga> è costituito dai seguenti elementi di base corrispondenti ad altrettanti tag xml:
<testo>testo da inserire</testo>
Esempio | OUTPUT |
<riga> <testo>testo semplice</testo> </riga> | Testo semplice |
<var>NomeVariabile</var>
dove NomeVariabile è il nome della variabile che si intende inserire. Le variabili da utilizzare sono contenute nell’xml in fondo
Ogni sezione ha le proprie variabili e non è possibile ad esempio inserire una variabile di testata nella sezione righe. Ogni elemento di tipo var può avere i seguenti attributi:
Esempio | OUTPUT |
<riga> <testo>ORA: </testo> <var formato='HH:mm'>DataCorrente</var> </riga> <riga> <testo>Centro di produzione</testo> <var>CentroProduzione</var> </riga> | ORA: 11:30 Centro di produzione: BAR |
È possibile inoltre applicare le seguenti funzioni alle variabili:
Esempio | OUTPUT |
<riga> <var>Cliente.Anagrafica.RagioneSociale</var> </riga> <riga> <var>Replace(Cliente.Anagrafica.RagioneSociale, "Rossi", "Verdi")</var> </riga> | Mario Rossi Mario Verdi |
Questi comandi permettono sia di applicare un particolare stile al testo (grassetto, corsivo, ecc) sia di effettuare delle operazioni particolari alla stampante (aprire il cassetto portamonete, emettere un beep sonoro, ecc). Per la lista dei comandi Esc/Pos supportati dalla stampante occorre fare riferimento al manuale della stampante.
Per aggiungere un nuovo comando occorre prima di tutto aggiungere un elemento di tipo “comando” nella sezione “comandi” all’inizio del documento nel seguente formato:
<comando nome="nomecomando" valore="valoreComando" />
“nome” contiene il nome del comando che si sta creando
“valore” contiene il valore del comando. Ogni carattere che compone il comando deve essere inserito in formato esadecimale e preceduto da “\x”
Ad esempio se si vuole aggiungere il comando di beep sonoro, occorre configurarlo nel modo seguente:
<comandi>
<comando nome="beep" valore="\x1C\xC0\x07" />
...
</comandi>
Successivamente per utilizzare il comando nelle righe occorre inserire un elemento di tipo “comando” in questo modo:
<riga>
...
<comando>beep<comando/>
...
</riga>
In fase di stampa il programma sostituirà al valore beep il valore specificato nella configurazione del comando.
Esempio comando | OUTPUT |
<comandi> <comando nome="corsivoOn" valore="\x1B\x21\x40" /> <comando nome="corsivoOff" valore="\x1B\x21\x00" /> </comandi> ... <riga> <comando>corsivoOn</comando> <testo>Centro di produzione: </testo> <comando>corsivoOff</comando> <var>CentroProduzione</var> </riga> | Centro di produzione: BAR |
CONDIZIONI
All’interno di ogni sezione documento (o all’interno del documento stesso se non è prevista la suddivisione in sezioni) è possibile utilizzare particolari tag per gestire le condizioni. Ad esempio è possibile nascondere alcune righe se una certa condizione non è soddisfatta.
A tal scopo si utilizzano i seguenti tag:
struttura condizioni |
<condizione> <if valore1="PrimoValore" operatore=”=” valore2="SecondoValore" > …. </if> <elseif valore1="PrimoValore" operatore=”=” valore2="SecondoValore" > …. </elseif> <else> …. </else> </condizione> |
Ogni tag <condizione> contiene un tag <if> ed eventuali altri tag <elseif> ed <else> tramite i quali è possibile specificare condizioni che se soddisfatte consentono di stampare le righe contenute in essi.
Per specificare la condizione si utilizzano i seguenti attributi:
Operatore | significato |
= | uguale |
eq | uguale |
!= | Diverso |
gt | Maggiore (>) |
lt | Minore (<) |
ge | Maggiore o uguale (>=) |
le | Minore o uguale (<=) |
IsNull | È nullo |
StartWith | Inizia con |
EndsWith | Termina con |
Contains | Contiene |
valore1 e valore2 possono essere variabili del programma o costanti.
Esempio:
Operatore | Esempio |
= | <if valore1="Sconto" operatore="=" valore2="0" > |
eq | <if valore1="Cliente.Anagrafica.RagioneSociale" operatore="eq" valore2="Mario Rossi" > |
!= | <if valore1="Sconto" operatore="!=" valore2="0" > |
gt | <if valore1="Sconto" operatore="gt" valore2="0" > |
lt | <if valore1="Sconto" operatore="lt" valore2="0" > |
ge | <if valore1="Sconto" operatore="ge" valore2="0" > |
le | <if valore1="Sconto" operatore="le" valore2="0" > |
IsNull | <if valore1="DataConsegna" operatore="IsNull" valore2="" > |
StartWith | <if valore1="promozioneDescrizione1" operatore="StartWith" valore2="Promo" > |
EndsWith | <if valore1="promozioneDescrizione1" operatore="EndsWith" valore2="estate" > |
Contains | <if valore1="promozioneDescrizione1" operatore="Contains" valore2="estate" > |
Non sono previsti operatori AND e OR, ma è possibile innestare ulteriori condizioni all’interno di un tag if, elseif o else.
Inoltre, come visto sopra per le variabili, è possibile applicare le funzioni a valore1 e valore2:
Operatore | Esempio |
len | <if valore1="len(CodiceABarre)" operatore="=" valore2="13" > |
Right | <if valore1="Right(Cliente.Anagrafica.RagioneSociale, 3)" operatore="eq" valore2="Ros" > |
Remove | <if valore1="Replace(Nome, "Rossi", "Verdi")" operatore="eq" valore2="Mario Verdi" > |
Mid | <if valore1="Sconto" operatore="lt" valore2="0" > |
Trim | <if valore1="Sconto" operatore="ge" valore2="0" > |
PadLeft | <if valore1="Sconto" operatore="le" valore2="0" > |
PadL | <if valore1="DataConsegna" operatore="IsNull" valore2="" > |
StartWith | <if valore1="promozioneDescrizione1" operatore="StartWith" valore2="Promo" > |
EndsWith | <if valore1="promozioneDescrizione1" operatore="EndsWith" valore2="estate" > |
Contains | <if valore1="promozioneDescrizione1" operatore="Contains" valore2="estate" > |
COMPOSIZIONE DEL LAYOUT COMANDA
Il layout della “comanda” è composto dalle seguenti sezioni:
La struttura del file xml si presenta nel seguente modo:
<doc> | Radice dell’intero file xml | ||||
<comandi> | Sezione configurazione dei comandi Esc/Pos | ||||
<comando nome=”nome” valore=”valore comando” /> | Configurazione comando Esc pos | ||||
... | |||||
</comandi> | Fine sezione configurazione comandi Esc/Pos | ||||
<comanda> | Inizio documento comanda | ||||
<testata>...</testata> | Sezione testata della comanda | ||||
<testataAsporto>...</testataAsporto> | Sezione testata per la comanda asporto | ||||
<righeElementi> | Sezione righe elementi (contenitore) | ||||
<separatoreUscite>...</separatoreUscite> | Sezione separatore uscite in comanda | ||||
<separatoreUsciteNonInviate>...</separatoreUsciteNonInviate> | Sezione separatore uscite non inviate in comanda | ||||
<inizioCameriereInvio>...</inizioCameriereInvio> | Sezione di intestazione delle uscite del cameriere che invia la comanda (nel caso sia diverso dal cameriere proprietario della comanda) | ||||
<fineCameriereInvio>...</fineCameriereInvio> | Fine sezione intestazione cameriere invio comanda | ||||
<rigaElemento>...</rigaElemento> | Sezione elementi presenti in comanda | ||||
</righeElementi> | Fine sezione righe elementi (contenitore) | ||||
<piede>...</piede> | Sezione piede comanda | ||||
</comanda> | Fine documento comanda | ||||
</doc> | Fine documento xml |
Le sezioni che contengono uno o più elementi xml di tipo <riga> sono quelle visualizzate in corsivo.
VARIABILI UTILIZZABILI NELLE SEZIONI TESTATA e PIEDE “testata”, “testataAsporto” e “piede” | ||
Variabile | Tipo | Descrizione |
CentroProduzione | String | Centro produzione a cui è inviata la comanda |
Cliente.OID | Int | ID del cliente |
Cliente.Anagrafica.Cap | String | Cap del cliente |
Cliente.Anagrafica.Cellulare | String | Cellulare cliente |
Cliente.Anagrafica.Citta | String | Città del cliente |
Cliente.Anagrafica.CodiceFiscale | String | Codice fiscale cliente |
Cliente.Anagrafica.DataNascita | DateTime | Data di nascita del cliente |
Cliente.Anagrafica.Email | String | Email cliente |
Cliente.Anagrafica.Fax | String | Fax cliente |
Cliente.Anagrafica.Indirizzo | String | Indirizzo del cliente |
Cliente.Anagrafica.Nazione | String | Nazione cliente |
Cliente.Anagrafica.Note | String | Nome del cliente |
Cliente.Anagrafica.PartitaIva | String | Partita iva cliente |
Cliente.Anagrafica.Provincia | String | Provincia cliente |
Cliente.Anagrafica.RagioneSociale | String | Ragione sociale del cliente |
Cliente.Anagrafica.Telefono | String | Telefono cliente |
Cliente.Anagrafica.Telefono2 | String | Telefono 2 cliente |
DataConsegna | DateTime | Data consegna asporto |
DataCorrente | String | Data + ora di invio comanda |
DataCreazione | DateTime | Data di creazione della comanda |
Intestazione1 | String | Intestazione 1 asporto |
Intestazione2 | String | Intestazione 2 asporto |
Intestazione3 | String | Intestazione 3 asporto |
Note | String | Note di comanda |
NumeroCoperti | Int | Numero coperti correnti della comanda aperta |
OID | Int | ID della comanda |
Priorità | String | Priorità della comanda |
Progressivo | Int | Progressivo di comanda |
Stato | String | Stato della comanda |
Tavolo.Numero | String | Nome del tavolo |
Tavolo.Sala.Nome | String | Sala corrente |
Tavolo.Cameriere.Anagrafica.RagioneSociale | String | Ragione sociale del cameriere proprietario della comanda |
Tavolo.Cameriere.Login | String | |
TempoAttesaTraPortate | Int | Tempo di attesa tra le portate |
TipoAsporto | String | Tipo asporto |
TipoCentroProduzione | String | Tipo centro produzione a cui è inviata la comanda |
Titolo | String | Titolo comanda automatico (es: CHIAMATA, RISTAMPA, ecc) |
VARIABILI UTILIZZABILI NELLE SEZIONI DI DETTAGLIO “separatoreUscite”, “separatoreUsciteNonInviate”, “inizioCameriereInvio”, “fineCameriereInvio” e “rigaElemento” | ||
Variabile | Tipo | Descrizione |
Coperto | String | Posto corrente |
Descrizione | String | Descrizione dell’elemento corrente |
DescrizioneAutomatica | String | Descrizione automatica dell’elemento (in base a opzione dentro in Opzioni installazione) |
DescrizioneSecondaria | String | Descrizione secondaria dell’elemento corrente |
CategoriaElementi | String | Categoria elementi dell’elemento corrente |
CentroProduzione | String | Centro di produzione dell’elemento corrente |
CameriereCorrente | String | Cameriere corrente della comanda |
Cliente.Anagrafica.RagioneSociale | String | Ragione sociale del cliente della comanda |
Commesso.Anagrafica.RagioneSociale | String | Ragione sociale del cameriere che invia la comanda |
ElementoCompostoPadre | String | Nome elemento composto padre |
IsVariante | Bool | Indica se l’elemento corrente è una variante |
Master.OID | Int | ID della comanda |
NomeElemento | String | Nome elemento venduto |
Numero | String | Numero portata corrente |
NumPezzi | Int | Numero pezzi totale dell’elemento corrente |
PrezzoConVarianti | Decimal | Prezzo dell’elemento varianti incluse |
PrezzoTotale | Decimal | Prezzo totale |
quantitaProdotta | Int | Quantità |
ESEMPI DETTAGLIATI
Esempio di definizione testata della comanda | ||
<testata> | Inizio sezione testata comanda | |
<riga> | Inizio riga 1 | |
<testo> </testo> | Stampo 9 spazi | |
<var>Titolo</var> | Stampo il valore del titolo | |
<testo> - Tavolo: </testo> | Stampo il testo “ – Tavolo: ” | |
<comando>grassettoOn</comando> | Abilito il testo in grassetto | |
<var>Tavolo.Numero</var> | Stampo il valore del numero del tavolo | |
<comando>grassettoOff</comando> | Disabilito il testo in grassetto | |
</riga> | Chiusura riga 1 | |
<riga> | Inizio riga 2 | |
<testo>Centro: </testo> | Stampo il testo “Centro: ” | |
<var>CentroProduzione</var> | Stampo il valore del centro di produzione | |
</riga> | Chiusura riga 2 | |
<riga> | Inizio riga 3 | |
<testo>Cameriere: </testo> | Stampo il testo “Cameriere: “ | |
<var>Tavolo.Cameriere.Anagrafica.RagioneSociale</var> | Stampo il valore del cameriere | |
</riga> | Chiusura riga 3 | |
<riga> | Inizio riga 4 | |
<testo>ORA: </testo> | Stampo il testo “ORA: “ | |
<var formato='HH:mm'>DataCorrente</var> | Stampo l’orario specificando il formato | |
</riga> | Chiusura riga 4 | |
</ testata > | Chiusura della sezione | |
Output della testata 5 10 15 20 25 30 35 ----+----+----+----+----+----+----+ | ||
CHIAMATA – Tavolo: 5 | Riga 1 | |
Centro: Cucina | Riga 2 | |
Cameriere: Mario | Riga 3 | |
ORA: 11:30 | Riga 4 |
Esempio di definizione riga elemento | |
<rigaElemento> | Inizio sezione rigaElemento |
<riga> | Inizio definizione di una riga della comanda |
<comando>grassettoOn</comando> | Abilito il testo in grassetto |
<var lunghezza = '3'>NumPezzi</var> | Stampo la quantità dell’elemento con lunghezza fissa = 3 |
<comando>grassettoOff</comando> | Disabilito il testo in grassetto |
<testo> </testo> | Stampo uno spazio dopo la quantità |
<comando>corsivoOn</comando> | Abilito il testo in corsivo |
<var lunghezza="23">DescrizioneAutomatica</var> | Stampo la descrizione dell’elemento con lunghezza fissa = 23 |
<comando>corsivoOff</comando> | Disabilito il testo in corsivo |
<testo> </testo> | Stampo uno spazio dopo la descrizione |
</riga> | Chiusura della riga |
</rigaElemento> | Chiusura della sezione |
Esempio di output di una riga elementi 5 10 15 20 25 30 35 ----+----+----+----+----+----+----+ | |
3 Lasagne al forno |
COMPOSIZIONE DEL LAYOUT DI TIPO CONTO
I layout di tipo conto hanno tutti la stessa struttura, l’unica differenza è il tag XML di definizione del tipo conto che assume come valore lo stesso tipo del conto: scontrino, proforma, preconto, fattura, ricevutahotel.
La struttura del file xml per il conto si presenta nel seguente modo:
<doc> | Radice dell’intero file xml | ||||
<comandi> | Sezione configurazione dei comandi Esc/Pos | ||||
<comando nome=”nome” valore=”valore comando” /> | Configurazione comando Esc pos | ||||
... | |||||
</comandi> | Fine sezione configurazione comandi Esc/Pos | ||||
... | |||||
<scontrino> | Inizio documento conto (es: scontrino) | ||||
<testata>...</testata> | Sezione testata del conto | ||||
<righeArticoli> | Sezione righe articoli (contenitore) | ||||
<rigaArticoli> | Sezione contenitore riga articolo | ||||
<riga>...</riga> | Definizione riga articolo | ||||
</rigaArticoli> | |||||
</righeArticoli> | Fine sezione righe articoli (contenitore) | ||||
<totali> | Sezione totali conto | ||||
<riga>...</riga> | Definizione riga totale (una o più) | ||||
</totali> | Sezione totali conto | ||||
<pagamenti> | Sezione pagamenti conto | ||||
<riga>...</riga> | Definizione riga pagamento (una o più a seconda dei pagamenti) | ||||
</pagamenti> | Sezione pagamenti conto | ||||
<piede> | Sezione piede conto | ||||
<riga>...</riga> | Definizione riga piede (una o più) | ||||
</piede> | Sezione totali conto | ||||
</scontrino> | Fine documento conto | ||||
</doc> | Fine documento xml |
È possibile trovare la lista delle variabili in fondo ai file xml forniti con l’installazione sotto forma di commento.
Nel layout testuale per il conto è presente anche il tag xml "intestazioneRaggruppamentoArticoli" per effettuare i raggruppamenti sugli articoli. Tale tag va inserito all'interno del tag RigheArticoli in questo modo:
<righeArticoli>
<intestazioneRaggruppamentoArticoli campo="CategoriaArticolo.Nome">
<riga><var>CategoriaArticolo.Nome</var></riga>
</intestazioneRaggruppamentoArticoli>
......
</righeArticoli>
L'attributo "campo" del tag articoli specifica il campo su cui raggruppare. All'interno è possibile poi specificare le righe da stampare nell'intestazione (nell'esempio la categoria stessa).
N.B. Specificando un raggruppamento, le righe del conto saranno ordinate per tale campo
Inoltre non è possibile specificare più gruppi o più colonne
COMPOSIZIONE DEL LAYOUT DI TIPO BUONO SCONTO E NOTA
I layout di tipo buono sconto e nota non sono suddivisi in sezioni, pertanto contengono tanti tag “riga” quante sono le righe che devono essere stampate.
È possibile trovare la lista delle variabili in fondo ai file xml forniti con l’installazione sotto forma di commento.