# Modelli di etichetta

> Un file di comandi di stampante della libreria Etichette: nome e codifica, l'editor dei comandi di stampante e l'importazione da file, la grammatica dei segnaposto, la coda di Windows installata e l'invio di collaudo.

Un modello di etichetta è una riga della libreria **Etichette** (Process > Modelli di documento >
Etichette): un file di comandi di stampante (ZPL, EPL, CPCL o un qualsiasi altro linguaggio di
comandi RAW) con segnaposto `{{NAME}}` dove va un valore della prova. Ganter Lab invia i byte a una
coda RAW di Windows e sostituisce i segnaposto; non analizza, non genera e non mostra mai in
anteprima il linguaggio della stampante, quindi l'impaginato si disegna nello strumento del
produttore della stampante. Modificarlo richiede **Gestire Process**; l'intera pagina è inerte mentre
un'unità è in marcia, e un invio di collaudo è rifiutato mentre il runtime è fermo. Un modello nuovo
nasce vuoto, di nome "Etichetta" ("Etichetta 2", e così via), e non stampa nulla finché non contiene comandi:
ogni via che genera o invia rifiuta un modello vuoto.

La pagina è fatta di cinque riquadri, nell'ordine in cui si lavora: l'identità e la codifica, i
comandi, i segnaposto trovati al loro interno, come si prepara un file in un programma di disegno, e
l'invio di collaudo.

## Modello {#template}

| Campo | Che cos'è | Valori / predefinito | Effetto |
| --- | --- | --- | --- |
| Nome | Il nome che mostrano la libreria e ogni comando di etichetta. | Testo; si applica quando si lascia il campo. | Un nome vuoto è rifiutato ("Un modello di etichetta richiede un nome.") e resta il nome precedente. |
| Codifica | Come i byte conservati vengono riletti come testo, e come viene codificato ogni valore sostituito. | UTF-8 (predefinita), Latin-1, ASCII. | Cambiarla riscrive nella codifica nuova i comandi modificabili; un carattere che la codifica nuova non può rappresentare è rifiutato ("I comandi restano in UTF-8. La riga 3 contiene 'é', che ASCII non può rappresentare.") e la codifica resta quella di prima. I comandi opachi conservano i propri byte e sono semplicemente riletti sotto la dichiarazione nuova. |

## Comandi di stampante {#printer-commands}

| Comando | Che cosa fa |
| --- | --- |
| L'editor | Un campo di testo a spaziatura fissa che contiene i comandi, con una forma ZPL come testo segnaposto. Scrivere convalida via via (l'elenco dei segnaposto e ogni rifiuto seguono il testo); lasciare il campo salva. Una bozza rifiutata resta sullo schermo con il proprio motivo e non è salvata; aprire un altro modello la scarta. Salvare un testo identico ai byte conservati non cambia nulla. |
| Importa un file… / Sostituisci il file… | Porta dentro un file di comandi di stampante (`.zpl`, `.epl`, `.epl2`, `.cpcl`, `.prn`, `.lbl`, `.txt`). I byte sono copiati nella configurazione e il nome del file è conservato per tracciabilità: spostare o eliminare l'originale non tocca il modello. Un file vuoto e un file oltre 2 MB sono rifiutati, e così è rifiutato un file i cui segnaposto sono malformati. |

I comandi sono modificabili come testo soltanto finché sopravvivono al viaggio di andata e ritorno
byte per byte: si decodificano sotto la codifica dichiarata, si ricodificano negli stessi byte,
terminano ogni riga allo stesso modo (tutte LF oppure tutte CR LF; uno stile CR LF importato è
rimesso a ogni salvataggio) e non portano alcun carattere di controllo oltre alla tabulazione e alla
terminazione di riga. I comandi che non superano una di quelle prove restano **opachi**: l'editor è
sostituito dal motivo ("Il byte 0x1B alla posizione 12 non è testo UTF-8.", "I fine riga sono misti: alcune righe finiscono con CR LF e altre solo con LF.") e i byte cambiano soltanto
sostituendo il file. Una riga sotto il riquadro dice che cosa è conservato: "Non è ancora conservato
nulla.", "Importato da labels.zpl · 1,2 KB · le terminazioni di riga CR LF si conservano" oppure
"Scritto qui · 240 B".

## Segnaposto rilevati {#detected-markers}

I segnaposto trovati nei comandi conservati, nell'ordine della prima comparsa. Un segnaposto è un
rigoroso `{{NAME}}` ASCII: il nome comincia con una lettera da A a Z, prosegue con lettere da A a Z,
cifre da 0 a 9 oppure trattini bassi, è lungo al massimo 64 caratteri e chiude con `}}`. Qualsiasi
cosa apra con `{{` e non segua la grammatica è rifiutata con il proprio offset in byte e la regola
infranta ("Segnaposto di etichetta malformato all'offset di byte 40: il nome può contenere soltanto
A-Z, 0-9 o trattino basso."). Ogni byte fuori da un segnaposto è conservato, e la sostituzione avviene
una volta sola e mai in modo ricorsivo.

Un modello senza comandi si legge "Ancora nessun comando. Scrivere qui sopra i comandi di stampante,
oppure importare un file esportato da un programma di disegno di etichette. Fino ad allora questo
modello non stampa nulla."; un modello con comandi e senza segnaposto si legge "Non è stato trovato
alcun segnaposto: questa etichetta fissa invia sempre gli stessi byte e non usa dati della prova." ed
è un modello valido. Ogni segnaposto distinto richiede una sorgente in ogni comando di etichetta che
usa il modello; un segnaposto ripetuto riceve lo stesso valore. Il riquadro si chiude con la regola
fissa: Ganter Lab convalida la sintassi dei segnaposto, non i comandi del produttore. Conservare
soltanto comandi di cui ci si fida; possono cambiare il comportamento della stampante.

## Preparare un modello in un programma di disegno di etichette {#prepare-a-template-in-a-label-designer}

Un promemoria a scomparsa del flusso di lavoro:

1. Creare il disegno dell'etichetta nello strumento del produttore della stampante, per esempio ZebraDesigner.
2. Inserire i segnaposto di Ganter Lab, come `{{SERIAL}}` o `{{RESULT}}`, dentro il testo o il contenuto di un codice a barre.
3. Esportare il file di comandi pronto per la stampante, per esempio ZPL. Non importare il file di progetto del programma di disegno.
4. Importare qui quel file (oppure incollarne il contenuto nel campo dei comandi) e verificare i segnaposto rilevati.
5. Immettere qui sotto valori rappresentativi e provare su una coda di Windows installata.

Lo stesso flusso vale per EPL, CPCL e altri linguaggi di comandi di stampante.

## Invio di collaudo {#test-send}

| Comando | Che cosa fa |
| --- | --- |
| Aggiorna le code | Rilegge le code di stampa installate per l'utente interattivo di Windows. Un errore di lettura è detto accanto al selettore. |
| Una casella di valore per segnaposto | Il testo di esempio sostituito a quel segnaposto soltanto in questo invio. Un modello fisso legge "Questo modello fisso non richiede valori di esempio."; uno vuoto legge "Non c'è nulla da inviare finché questo modello non ha comandi di stampante." |
| Coda di Windows installata | La coda a cui va il collaudo ("(scegliere una coda)" oppure "(nessuna coda installata)"). |
| Invia il collaudo | Genera i comandi conservati con i valori di esempio e li trasmette come documento RAW di nome `Ganter Lab test · <template>`. Non si crea alcuna prova e alcun artefatto. L'esito arriva nel registro delle azioni ("Etichetta di collaudo inviata a 'Q'." oppure "Invio di collaudo non riuscito: motivo"). |

Invia il collaudo è in grigio senza comandi conservati, senza una coda scelta, durante l'invio e
mentre la pagina è inerte. Un valore che un segnaposto non può portare nella codifica dichiarata è
rifiutato dal generatore. Esito positivo significa che la coda di Windows ha accettato il documento
RAW; non conferma che sia stata stampata un'etichetta fisica.

## Da dove vengono i valori {#where-the-values-come-from}

I valori di esempio qui sopra servono soltanto per il collaudo. In una prova, ogni segnaposto
distinto del modello è associato a una sola sorgente finita sul comando di etichetta che lo usa
([Azioni](process-actions)): i metadati congelati, il nome e la revisione del modello, il nome e il
codice dell'unità, il nome e il codice della procedura, l'identificatore della prova, l'istante di
avvio, lo stato della prova e, al Completamento, anche l'istante di conclusione, la durata, l'esito,
il motivo della conclusione e il risultato di un criterio nominato con un ciclo esplicito. Le
sorgenti di data e ora prendono un formato (data e ora della stazione, data della stazione, ora della
stazione, ISO 8601) e le sorgenti numeriche un numero fisso facoltativo di decimali (da 0 a 9). Un
numero è scritto per la macchina che lo legge e non nel modo in cui la stazione mostra i numeri sullo
schermo: mai un separatore delle migliaia, che dentro un codice a barre rompe il sistema ricevente,
sempre il punto decimale invariante, e un numero intero, come un conteggio o una durata in secondi,
scritto intero. Un valore che contiene un carattere di controllo, un'interruzione di riga compresa,
oppure un carattere che apre un comando di stampante (`^`, `~`) è rifiutato nominando il proprio
segnaposto: spezzerebbe la riga in cui sta, oppure stamperebbe un'etichetta diversa. Che cosa offre
ciascun momento di emissione, come l'artefatto viene congelato e come un invio viene annotato sta in
[Emettere etichette e
rapporti](process-emission); associare un modello a mano su una prova registrata sta in [Etichette e
rapporti](histories-documents#labels).

## Che cosa non fa questa pagina {#what-this-page-does-not-do}

Non disegna alcuna anteprima dell'etichetta e non convalida nulla del linguaggio della stampante. Non
associa alcun segnaposto a un valore: quello è compito del comando di etichetta. Non stampa
un'etichetta per una prova: gli artefatti di una prova si stampano dal suo registro negli Storici. Ed
eliminare il modello (**Elimina l'etichetta**, sulla barra) lascia intatto ogni artefatto
registrato; smettono di generare soltanto i comandi che lo nominano ancora.
