Друк на кухні та в залі
Увесь фізичний друк закладу йде через Cenaly Hardware Bridge — невелику програму на касовому пристрої, до якого підключені принтери. Браузер не друкує на термопринтер напряму: він надсилає документ мосту, а міст уже говорить із залізом мовою ESC/POS.
Через міст друкуються: кухонні тикети за станціями, стікери на товар і на пакет, чек продажу й повернення, пречек, X- і Z-звіти та манифест пакета на екрані видачі.
Кухонні тикети за станціями#
Тикет має приїжджати туди, де готують страву: холодний цех — на свій принтер, гриль — на свій, бар — на свій.
Налаштування — у Кухні (KDS) → панель «Цехи», таблиця «станція → принтер» усередині неї. За кожною станцією задаються:
| Поле | Що означає |
|---|---|
| Принтер | конкретний пристрій моста; порожньо — друкувати на принтер із роллю «кухонний» |
| Резервний принтер | куди піде тикет, якщо основний не відповідає |
| Хто друкує | вимкнено, каса або KDS |
| Ширина стрічки | 42 символи (80-мм стрічка) або 32 (58-мм) |
| Кодова сторінка | див. нижче |
| Стікери на товар | друкувати наліпки при переведенні тикета в «готово» |
Список принтерів підтягується в локального моста, тому налаштовувати станцію потрібно з тієї машини, до якої принтер фізично підключений.
Що потрапляє в тикет. Великий шрифт (кухар читає папірець через стіл), назва страви, кількість, модифікатори окремим рядком під стравою, коментар («без цибулі»), номер гостя і курс подачі, якщо замовлення за ними розкладено. Цін і підсумків у кухонному тикеті немає.
Друкується лише нове. Повторний тап офіціанта не друкує другий тикет: система пам'ятає, які рядки вже поїхали на станцію. Якщо товар додали або змінили кількість — поїде тикет-дозамовлення, а не повний дубль замовлення.
Стікери на товар і на пакет#
Наліпка 60×40 мм на склянці та на коробці вирішує дві проблеми видачі: пакети перестають плутатися між кур'єрами, а гість бачить на склянці, що молоко справді безлактозне — модифікатор більше не залишається лише на кухонному тикеті.
- стікер на товар — друкується при переведенні тикета в «готово», якщо в станції увімкнено відповідне налаштування;
- стікер на пакет — друкується на видачі: екран запитує число пакетів і друкує «Пакет 1 з 3», «2 з 3» і так далі;
- манифест пакета — папірець усередині пакета з повним складом замовлення, включно з модифікаторами окремими рядками: за ним кур'єр і гість звіряють комплектність, а спір «не доложили товар» з агрегатором закривається друкованим доказом. Кнопка — на екрані Видача (Expo).
Стікери друкує пристрій із роллю «етикетувальний принтер»; якщо такої ролі на мості немає, наліпка піде на звичайний чековий принтер.
Касові документи#
| Документ | Через міст | Коментар |
|---|---|---|
| Чек продажу / повернення | так | фолбек — друк браузером |
| Пречек (рахунок гостя) | так | нефискальний, з явним підписом на папері |
| X- і Z-звіти | так | див. Касова зміна |
| Манифест пакета | так | екран Видача (Expo) |
| Кухонний тикет, стікери | так | без браузерного фолбеку |
Репринт виданого чека завжди записується в журнал небезпечних операцій; менеджерський PIN він запитує лише в посад, де увімкнено «репринт під PIN» — див. Контроль втрат.
Фіскальний чек — окрема історія: він друкується фіскальним реєстратором і підкоряється законам країни, див. Фіскалізація.
Черга друку і що означає результат#
У моста restart-safe черга з ретраями: якщо принтер офлайн, завдання не губиться, а чекає й повторюється. Індикатор черги видно в шапці каси.
Зависле завдання можна зняти. Класична біда кухні: принтер зажував папір, його лагодять пів години, а коли вмикають — він випльовує пів сотні застарілих тикетів. З черги в шапці каси завдання скасовується по одному: міст ставить позначку «скасовано» і, коли принтер оживе, просто пропустить його. Якщо завдання вже пішло в друк, скасування чесно скаже про це — папір у цьому разі вийде.
Кнопка «скасувати» є лише у завислих — тих, що чекають на принтер довше трьох хвилин. Свіжі завдання видно рядком, але зняти їх не можна, і це зроблено навмисно: секундна заминка (принтер прокинувся, смикнули кабель) — норма, міст допечатає сам, а кнопка поруч із таким завданням означала б загублений чек.
Результат друку — чотиризначний, і для касира це різні новини:
| Результат | Що сталося |
|---|---|
| Надруковано | міст підтвердив фізичний друк |
| У черзі | міст прийняв завдання, але принтер недоступний — гість чек на руки не отримав |
| Браузером | моста немає або він не прийняв документ, друк пішов через діалог браузера |
| Не надруковано | не вдалося жодним способом |
За результату «у черзі» браузерний фолбек не запускається — інакше один чек надрукувався б двічі.
Завдання ідемпотентні: повторне надсилання того самого документа не дає другої бумажки.
Кодові сторінки та нелатиниця#
Термопринтер не знає, що таке UTF-8: він малює по гліфу на байт із вибраної однобайтової таблиці. Тому кодова сторінка задається на кожен налаштований принтер:
| Значення | Що робить |
|---|---|
auto (за замовчуванням) |
знайшов кирилицю — перемикає голову на CP1251; латиниця та латиниця-розширена (турецька, польська, албанська) залишаються як є |
cp1251 / cp866 |
явний вибір кириличної таблиці — дешеві головки бувають з однією з двох |
georgian-academy / georgian-ps / georgian-expert |
розкладки шрифтового ПЗП грузинських пристроїв |
utf8 |
історична поведінка: на будь-якій нелатиниці — кракозябри |
Про грузинську чесно. Яку таблицю «розуміє» конкретна головка — властивість фізичного пристрою, у специфікації протоколу цього немає; тому таблиця вибирається за пристроєм. Грузинської кодової сторінки у стандарті ESC/POS немає взагалі, тож раніше «ხინკალი» виїжджало романізацією — khinkali: читається, але замовлено було не це.
Тепер рядок, який головка надрукувати не може, міст малює картинкою — растровий друк із вбудованим шрифтом, він працює на будь-якому принтері й від його ПЗП не залежить. Вбудованого шрифту вистачає на латиницю та латиницю-розширену, грецьку, кирилицю, вірменську та всі три грузинські накреслення (мхедрулі, мтаврулі, асомтаврулі). Там, де текст друкується звичайним способом, нічого не змінюється — растр вмикається лише за потреби.
Поведінка керується галочкою «растр для нелатиниці» у кожного пристрою (за замовчуванням увімкнена, є і на сторінці моста, і в хмарному розділі «Обладнання»). Знімете — повернеться попередня романізація: це потрібно для рідкісних головок, які не розуміють растрового друку.
Ієрогліфи (китайська, японська, корейська), іврит та арабиця до шрифту навмисно не увійшли: у письменностях справа наліво рядок вийшов би задом наперед, і це гірше за нинішній результат. Панель станцій на кухні чесно показує, що буде з рядком: «піде картинкою» або «ні таблиці, ні шрифту немає».
Турецька, польська та албанська латиниця навмисно не проганяються через CP1251: там ş, ğ, ą перетворилися б на ?.
Що потрібно для запуску#
- Міст на касовому комп'ютері — Cenaly Hardware Bridge. Увесь фізичний друк іде через нього.
- Принтер, підключений до цього ж комп'ютера — USB, LAN або Bluetooth; міст знаходить пристрої сам.
- Мапінг «станція → принтер» — інакше тикети нікуди маршрутизувати.
- Рулон потрібного формату для стікерів товару й пакета.
- Станції у страв — тикет збирається за станцією товару (KDS).
Обмеження#
- Міст друкує лише зі свого комп'ютера. Браузер не достукається до моста на сусідньому ПК: ставте міст на кожен касовий пристрій або використовуйте друк через хмару на принтер іншого ПК.
- Етикеткові принтери TSPL/ZPL на живому залізі не перевірені — зараз етикетки друкуються растром на чековому принтері.
- Ширину стрічки вирішує пристрій. Вона береться з налаштування принтера, інакше з моделі фіскального реєстратора, інакше приймається безпечною; ширина документа 80 мм на фіскальний реєстратор не переноситься, бо реєстратор не переносить рядок, а обрізає його разом із сумами.
- Пречек не залишається в черзі. Якщо чековий принтер налаштований, але офлайн, рахунок гостю друкується на фіскальному реєстраторі: бумажка потрібна зараз, а копія через годину поверх оплаченого замовлення — це друга бумажка. Чек продажу поводиться інакше — він чекає на повтор.
- Пречек не йде на кухонний принтер — для рахунку гостю такий принтер вважається непридатним, і робота йде на касу.
Усунення неполадок#
Тикет не надрукувався. Перевірте статус моста: якщо він офлайн, завдання стоїть у черзі друку й піде після відновлення зв'язку з ним — черга переживає перезапуск.
Друкується не на тому принтері. У станції не задано власний принтер, і резолвер вибрав «будь-який доступний». Пропишіть мапінг станцій явно.
Замість літер — ієрогліфи або порожні квадрати. Проблема кодової сторінки принтера: увімкніть растровий шрифт — він малює текст картинкою і друкує будь-які мови.
Обрізаються суми справа. Указано завелику ширину стрічки: поставте реальну ширину в опції пристрою.
Стікери виходять кривим розміром. Перевірте формат рулону й те, що друк іде на етикетковий принтер, а не на чековий (зараз етикетки на чековому друкуються растром).
Пов'язані розділи#
- Cenaly Hardware Bridge — встановлення моста, список пристроїв, ролі принтерів
- Кухня (KDS) — станції, курси подачі та налаштування друку
- Каса (POS) — чек, пречек, репринт
- Видача (Expo) — маніфест і стікери пакета
- Касова зміна — X- і Z-звіти
- Контроль втрат — репринт як подія ризику
Часті питання#
Тикет надрукувався двічі — чому?#
Найімовірніше, у станції увімкнено друк і на касі, і на KDS. Це два різні пристрої з двома мостами, і кожен надрукував свій примірник. Залиште одне значення в полі «Хто друкує».
Принтер вимкнули — замовлення загубилися?#
Ні. Завдання йде в чергу моста й друкується, коли принтер оживе. Але поки воно в черзі, паперу фізично немає — інтерфейс це прямо каже.
Чи можна друкувати на кухню без моста?#
Кухонні тикети та стікери — ні, вони йдуть лише через міст. Касові документи мають браузерний фолбек: друк через звичайний діалог друку. Виняток — точка, де із заліза лише фіскальний реєстратор: там чек друкує сама каса, і браузерний фолбек не вмикається.
Чому в списку принтерів порожньо?#
Список береться в моста на цьому пристрої. Якщо міст не запущено або принтер під'єднано до іншої машини, пристрої не з'являться — налаштовуйте станцію з тієї машини, де принтер фізично під'єднано.
Модифікатори друкуються в маніфесті пакета?#
Так. Кухонний тикет, стікер товару й маніфест пакета збираються одним форматом рядка: назва страви, під нею модифікатори окремими рядками та коментар. Так три папірці за одним замовленням виглядають однаково й звіряються очима.