Strichcode mit dem Kassenartikel auf den Bon drucken
Der Kassierer musste den Artikel bisher von Hand in der Kasse suchen. Jetzt steht er als Strichcode unter dem Betrag und wird gescannt. CODE128 in Zeichensatz B, nicht das sonst uebliche CODE39: dort sind nur Grossbuchstaben erlaubt, ein Artikel namens "techniker" waere damit nicht darstellbar. Die Modulbreite waehlt escpos.js so gross, wie die Papierbreite zulaesst - breitere Balken liest ein Handscanner zuverlaessiger, gerade auf Thermopapier, das einen Tag in einer Hosentasche hinter sich hat. Daraus ergibt sich die Laengengrenze von 17 Zeichen bei 80 mm Papier. Artikelname und An/Aus liegen in den Einstellungen, nicht im Code: der Name haengt am Artikelstamm der Kasse und kann sich aendern, ohne dass jemand an die App muss. Zwei Faelle, die sonst still danebengingen, melden sich jetzt: - Umlaute und Sonderzeichen weist das Speichern ab, statt sie zu verschlucken und einen Code zu drucken, der einen anderen Artikel bedeutet. - Passt der Name nicht auf die Papierbreite, druckt receipt.js ihn nur in Klarschrift. Ein abgeschnittener Code wird von keinem Scanner gelesen. Geprueft auf dem Epson TM-T88IV: Zwischenbeleg und Endbeleg, ausgeschalteter Strichcode, Laengengrenze, geschweifte Klammer im Namen (wird verdoppelt, sonst liest der Drucker sie als Umschaltbefehl). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b1c7d89a7d
commit
6ba0cdd07f
7 files changed
+229
-9
No files matched your search
@@ -288,6 +288,24 @@ Drei Wege führen zu einem Bon:
|
||||
| **✓ Beenden** | Endbeleg | ist beendet und in der Historie |
|
||||
| **🖨** in der Historie | Nachdruck desselben Belegs | — |
|
||||
|
||||
#### Strichcode
|
||||
|
||||
Unter dem Betrag steht ein Strichcode mit dem Artikelnamen, den die Kasse führt
|
||||
(ab Werk `techniker`). Name und An/Aus stehen in den Einstellungen, also in der
|
||||
Datenbank — nicht im Code und nicht in der `.env`.
|
||||
|
||||
Symbologie ist **CODE128, Zeichensatz B**. CODE39, sonst der Standard für solche
|
||||
Fälle, kennt nur Großbuchstaben und könnte `techniker` gar nicht abbilden.
|
||||
Zeichensatz B deckt den druckbaren ASCII-Bereich ab; alles darüber — Umlaute
|
||||
zumal — weist `PUT /api/settings` ab, statt es still zu verschlucken.
|
||||
|
||||
Die Modulbreite wählt `escpos.js` selbst: so breit, wie die Papierbreite es
|
||||
zulässt (Ruhezonen eingerechnet), denn breitere Balken liest ein Handscanner
|
||||
zuverlässiger. Daraus folgt die Längengrenze — bei 42 Zeichen je Zeile sind es
|
||||
17 Zeichen, bei 32 noch 12. Passt der Name nicht, druckt `receipt.js` ihn nur
|
||||
in Klarschrift: ein abgeschnittener Code würde ohnehin von keinem Scanner
|
||||
gelesen.
|
||||
|
||||
**Reihenfolge ist Absicht:** Beim Beenden wird erst gespeichert, dann gedruckt.
|
||||
Ein leerer Papierhalter ist damit ein Papierproblem und kein Datenproblem — der
|
||||
Vorgang steht in der Historie und lässt sich von dort nachdrucken. Die
|
||||
@@ -453,7 +471,7 @@ Alle Endpunkte außer `/health`, `/api/login`, `/api/auth/status` und
|
||||
| `POST` | `/api/timers/:id/receipt` | Zwischenbon drucken, Timer bleibt unangetastet |
|
||||
| `DELETE` | `/api/timers/:id` | verwerfen, **nichts** speichern |
|
||||
| `GET` | `/api/settings` | Tarif, Bon-Texte und Druckerzustand lesen |
|
||||
| `PUT` | `/api/settings` | `{rateAmount, rateInterval}` sowie optional `{receiptHeader, receiptFooter, printAutoOnStop}` |
|
||||
| `PUT` | `/api/settings` | `{rateAmount, rateInterval}` sowie optional `{receiptHeader, receiptFooter, printAutoOnStop, receiptBarcodeEnabled, receiptBarcodeArticle}` |
|
||||
| `GET` | `/api/printer/status` | Erreichbarkeit und Zustand des Druckers |
|
||||
| `POST` | `/api/printer/test` | Probedruck |
|
||||
| `POST` | `/api/printer/provision` | `{host, port, username, password}` → richtet den Pi ein und übernimmt ihn. Antwort enthält das Schrittprotokoll, nie die Zugangsdaten |
|
||||
|
||||
Reference in new issue
Block a user