# ラベルのテンプレート

> ラベルのライブラリにあるプリンターの指令ファイル 1 つです。名前と文字コード、指令の編集欄とファイルの取り込み、差し込み項目の書き方、インストール済みの Windows のキュー、そして試し送りを説明します。

ラベルのテンプレートは、**ラベル**のライブラリ（Process > テンプレート > ラベル）の 1 行です。プリンターに送れる指令ファイル（ZPL、EPL、CPCL、そのほかどの RAW の指令言語でも）に、実行の値が入る場所を `{{NAME}}` の差し込み項目で書いたものです。Ganter Lab は、そのバイト列を Windows の RAW のキューに送り、差し込み項目を置き換えます。プリンターの言語を解釈することも、描くことも、下見せすることも決してないので、レイアウトそのものは、プリンターのメーカーのツールで設計します。編集には**Process の管理**が要ります。ユニットが実行中の間、このページは全体が動かず、ランタイムが停止している間は試し送りが拒まれます。新しいテンプレートは空で生まれ、「ラベル」（「ラベル 2」、と続きます）という名前が付き、指令を持つまで何も印刷しません。描く経路も送る経路も、空のテンプレートを拒みます。

ページは 5 枚のカードで、仕事をする順に並びます。識別と文字コード、指令、その中に見つかった差し込み項目、設計ツールでファイルを用意する方法、そして試し送りです。

## テンプレート {#template}

| 項目 | 何であるか | 値 / 既定 | 効果 |
| --- | --- | --- | --- |
| 名前 | ライブラリと、どのラベルの指令も見せる名前です。 | 文字。欄を離れたときに効きます。 | 空の名前は拒まれ（「ラベルのテンプレートには名前が必要です。」）、前の名前が残ります。 |
| 文字コード | 保存したバイト列を文字として読み返す方法と、差し込む値をどう符号化するかです。 | UTF-8（既定）、Latin-1、ASCII。 | 変えると、編集できる指令を新しい文字コードで書き直します。新しい文字コードで表せない文字は拒まれ（「指令は UTF-8 のままです。3 行目に、ASCII では表せない 'é' があります。」）、文字コードはそのまま残ります。編集できない指令はバイト列を保ち、新しい宣言のもとで読み直されるだけです。 |

## プリンターの指令 {#printer-commands}

| 操作 | 何をするか |
| --- | --- |
| 編集欄 | 指令を持つ等幅の文字の欄で、入力例に ZPL の形が出ます。打ちながら検査されます（差し込み項目の一覧と、拒否があればその理由が、文字に付いていきます）。欄を離れると保存します。拒まれた下書きは理由とともに画面に残り、保存されません。別のテンプレートを開くと、それは捨てられます。保存されているバイト列と同じ文字を保存しても、何も変わりません。 |
| ファイルを取り込み… / ファイルを置き換え… | プリンターの指令ファイルを持ち込みます（`.zpl`、`.epl`、`.epl2`、`.cpcl`、`.prn`、`.lbl`、`.txt`）。バイト列は構成の中に複製され、たどれるようにファイル名が保たれます。元のファイルを移動したり削除したりしても、テンプレートには影響しません。空のファイルと 2 MB を超えるファイルは拒まれ、差し込み項目の書き方が正しくないファイルも拒まれます。 |

指令を文字として編集できるのは、往復してもバイト列が 1 バイトも変わらない間だけです。宣言された文字コードで読めて、同じバイト列に戻り、どの行も同じ終わり方をして（すべて LF か、すべて CR LF。取り込んだ CR LF の流儀は、保存のたびに戻されます）、タブと改行のほかに制御文字を持たない、という条件です。どれかに通らない指令は**編集できない**ままになります。編集欄はその理由に置き換わり（「位置 12 のバイト 0x1B は UTF-8 のテキストではありません。」、「改行が混在しています。CR LF で終わる行と LF だけで終わる行があります。」）、バイト列は、ファイルを置き換えることでしか変わりません。カードの下の 1 行が、何が保存されているかを言います。「まだ何も保存していません。」、「labels.zpl から取り込み · 1.2 KB · CR LF の改行はそのまま保ちます」、または「ここで作成 · 240 B」です。

## 見つかった差し込み項目 {#detected-markers}

保存された指令の中に見つかった差し込み項目が、最初に現れた順に並びます。差し込み項目は厳密な ASCII の `{{NAME}}` です。名前は A から Z で始まり、A から Z、0 から 9、下線が続き、長さは 64 文字までで、`}}` で閉じます。`{{` で開いてこの書き方に従わないものは、そのバイトの位置と、破った決まりとともに拒まれます（「40 バイト目のラベルの差し込み項目の書き方が正しくありません。名前に使えるのは A-Z、0-9、下線だけです。」）。差し込み項目の外のバイトはすべて保たれ、置き換えは 1 度だけで、決して入れ子にはなりません。

指令のないテンプレートには「まだ指令がありません。上にプリンターの指令を書くか、ラベルの設計ツールから書き出したファイルを取り込んでください。それまで、このテンプレートは何も印刷しません。」と出ます。指令があって差し込み項目がないテンプレートには「差し込み項目は見つかりませんでした。この固定のラベルは毎回同じバイト列を送り、実行のデータは使いません。」と出て、これも正しいテンプレートです。種類の異なる差し込み項目には、このテンプレートを使うどのラベルの指令でも 1 つずつ取得元が要ります。同じ差し込み項目が繰り返し出てくるところには、同じ値が入ります。カードは、常に立つ決まりで閉じます。Ganter Lab が確かめるのは差し込み項目の書き方であって、メーカーの指令ではありません。信頼できる指令だけを保存してください。指令はプリンターの動作を変えることがあります。

## ラベルの設計ツールでテンプレートを用意する {#prepare-a-template-in-a-label-designer}

流れを畳んで置いてある覚え書きです。

1. ZebraDesigner など、プリンターのメーカーのツールでラベルを設計します。
2. 文字やバーコードの中身に、`{{SERIAL}}` や `{{RESULT}}` のような Ganter Lab の差し込み項目を書きます。
3. ZPL など、プリンターに送れる指令ファイルを書き出します。設計ツールのプロジェクトファイルは取り込まないでください。
4. そのファイルをここに取り込み（または中身を指令の欄に貼り付け）、見つかった差し込み項目を確かめます。
5. 下に代表的な値を入れ、インストール済みの Windows のキューに対して試します。

同じ流れが EPL、CPCL、ほかのプリンターの指令言語にも当てはまります。

## 試し送り {#test-send}

| 操作 | 何をするか |
| --- | --- |
| キューを再読み込み | 対話中の Windows の利用者にインストールされている印刷キューを読み直します。読めなかったときは、選択欄の横にそう出ます。 |
| 差し込み項目 1 つにつき 1 つの値の欄 | この送信にだけ、その差し込み項目に入れる見本の文字です。固定のテンプレートには「この固定のテンプレートには、見本の値は要りません。」と出て、空のテンプレートには「このテンプレートにプリンターの指令が入るまで、送るものはありません。」と出ます。 |
| インストール済みの Windows のキュー | 試しの送り先のキューです（「（キューを選択）」または「（インストール済みのキューなし）」）。 |
| 試しに送る | 保存された指令を見本の値で描き、`Ganter Lab test · <template>` という名前の RAW の文書として送ります。実行記録も成果物も作られません。結果は操作ログ帯に出ます（「試験用のラベルを「Q」に送りました。」または「試し送りに失敗しました：理由」）。 |

試しに送るは、指令が保存されていないとき、キューを選んでいないとき、送信中、そしてページが動かない間は灰色になります。宣言された文字コードで差し込み項目が運べない値は、描く仕組みが拒みます。成功は、Windows のキューが RAW の文書を受け付けたという意味です。実際にラベルが印刷されたことの確認ではありません。

## 値がどこから来るか {#where-the-values-come-from}

上の見本の値は、試しのためだけのものです。実行では、テンプレートの種類の異なる差し込み項目それぞれが、それを使うラベルの指令の上で、1 つの限られた取得元に対応付けられます（[アクション](process-actions)）。固定したメタデータ、モデルの名前と版、ユニットの名前とコード、手順の名前とコード、実行記録の識別子、開始の時点、実行記録の状態、そして完了時にはさらに終了の時点、所要時間、総合判定、終了の理由、そしてサイクルをはっきり指定した名前付きの判定基準の結果 1 つです。日付と時刻の取得元は書式を取り（ステーションの日付と時刻、ステーションの日付、ステーションの時刻、ISO 8601 形式）、数値の取得元は決まった小数桁を任意に取ります（0 から 9）。数は、それを読む機械のために書かれるのであって、ステーションが画面で数を見せるやり方では書かれません。桁区切りは決して入れません。バーコードの中に入ると、受け取る側の仕組みが壊れるからです。小数点は常に不変のものを使い、件数や秒数の所要時間のような整数は、整数のまま書きます。制御文字（改行も含みます）や、プリンターの指令を始める文字（`^`、`~`）を持つ値は、その差し込み項目を名指して拒まれます。それが入っている行を割ってしまうか、別のラベルを印刷してしまうからです。どの区切りが何を差し出すか、成果物がどう固定されるか、送信がどう記録されるかは [ラベルとレポートの発行](process-emission) にあります。記録された実行記録に対してテンプレートを手で対応付けるのは [ラベルとレポート](histories-documents#labels) です。

## このページがしないこと {#what-this-page-does-not-do}

ラベルの下見は描かず、プリンターの言語については何も確かめません。差し込み項目を値に対応付けることもしません。それはラベルの指令の仕事です。実行のためにラベルを印刷することもしません。実行の成果物は、履歴にあるその記録から印刷します。そして、テンプレートを削除しても（バーの**ラベルを削除**）、記録された成果物には何も起きません。それを名指したままの指令が、出さなくなるだけです。
