M cenaly.ru
🍽️ Зал, кухня и учёт

🖨️ Печать на кухне

Тикеты по станциям, стикеры 60×40 и кассовые документы через мост оборудования

Документация

Печать на кухне и в зале

Вся физическая печать заведения идёт через Cenaly Hardware Bridge — небольшую программу на кассовом устройстве, к которому подключены принтеры. Браузер не печатает на термопринтер напрямую: он отправляет документ мосту, а мост уже говорит с железом на языке ESC/POS.

Через мост печатаются: кухонные тикеты по станциям, стикеры на позицию и на пакет, чек продажи и возврата, пречек, X- и Z-отчёты и манифест пакета на экране выдачи.


Кухонные тикеты по станциям#

Тикет должен приезжать туда, где блюдо готовят: холодный цех — на свой принтер, гриль — на свой, бар — на свой.

Настройка — в Кухне (KDS) → панель «Цеха», таблица «станция → принтер» внутри неё. По каждой станции задаются:

Поле Что означает
Принтер конкретное устройство моста; пусто — печатать на принтер с ролью «кухонный»
Резервный принтер куда уйдёт тикет, если основной не отвечает
Кто печатает выключено, касса или KDS
Ширина ленты 42 символа (80-мм лента) или 32 (58-мм)
Кодовая страница см. ниже
Стикеры на позиции печатать наклейки при переводе тикета в «готово»

«Кто печатает» — это выбор, а не галочка. Касса и KDS — разные устройства с разными мостами, и лента напечатанного хранится у того, кто печатал. Если включить оба, на кухне будет два одинаковых тикета.

Список принтеров подтягивается у локального моста, поэтому настраивать станцию нужно с той машины, к которой принтер физически подключён.

Что попадает в тикет. Крупный шрифт (повар читает бумажку через стол), название блюда, количество, модификаторы отдельной строкой под блюдом, комментарий («без лука»), номер гостя и курс подачи, если заказ по ним разложен. Цен и итогов в кухонном тикете нет.

Печатается только новое. Повторный тап официанта не печатает второй тикет: система помнит, какие строки уже уехали на станцию. Если позицию добавили или изменили количество — уедет тикет-дозаказ, а не полный дубль заказа.


Стикеры на позицию и на пакет#

Наклейка 60×40 мм на стакане и на коробке решает две проблемы выдачи: пакеты перестают путаться между курьерами, а гость видит на стакане, что молоко действительно безлактозное — модификатор больше не остаётся только на кухонном тикете.

  • стикер на позицию — печатается при переводе тикета в «готово», если у станции включена соответствующая настройка;
  • стикер на пакет — печатается на выдаче: экран спрашивает число пакетов и печатает «Пакет 1 из 3», «2 из 3» и так далее;
  • манифест пакета — бумажка внутри пакета с полным составом заказа, включая модификаторы отдельными строками: по ней курьер и гость сверяют комплектность, а спор «не доложили позицию» с агрегатором закрывается печатной уликой. Кнопка — на экране Выдача (Expo).

Стикеры печатает устройство с ролью «этикеточный принтер»; если такой роли на мосте нет, наклейка уйдёт на обычный чековый принтер.

Роль «этикеточный принтер» у моста есть: наклейка уходит на устройство, назначенное этой ролью, а если такого нет — на обычную чековую головку 60-мм класса узким ESC/POS-документом шириной 32 символа, отрыв делает гребёнка. Полноценные TSPL/ZPL-языки этикеточных принтеров не поддерживаются — печатается тот же ESC/POS.


Кассовые документы#

Документ Через мост Комментарий
Чек продажи / возврата да фолбэк — печать браузером
Пречек (гостевой счёт) да нефискальный, с явной подписью на бумаге
X- и Z-отчёты да см. Кассовая смена
Манифест пакета да экран Выдача (Expo)
Кухонный тикет, стикеры да без браузерного фолбэка

Точка, где из железа только фискальный регистратор. С 31.08.2026 мост не гонит через регистратор наши документы: чек, распечатанный служебным документом кассы, выглядел бы чеком, им не являясь. Мост отвечает отказом, а касса вместо диалога печати говорит, что чек печатает сама касса, — браузерный фолбэк в этом случае не запускается. Через регистратор разрешены ровно два документа: тестовая печать (иначе на такой точке нечем проверить, печатает ли касса вообще) и пречек (гостевой счёт по закону не фискальный документ). Отдельный чековый принтер снимает это ограничение целиком.

Репринт выданного чека всегда записывается в журнал опасных операций; менеджерский PIN он спрашивает только у должностей, где включено «репринт под PIN» — см. Контроль потерь.

Фискальный чек — отдельная история: он печатается фискальным регистратором и подчиняется законам страны, см. Фискализация.


Очередь печати и что означает результат#

У моста restart-safe очередь с ретраями: если принтер офлайн, задание не теряется, а ждёт и повторяется. Индикатор очереди виден в шапке кассы.

Зависшее задание можно снять. Классическая беда кухни: принтер зажевал бумагу, его чинят полчаса, а когда включают — он выплёвывает полсотни устаревших тикетов. Из очереди в шапке кассы задание отменяется по одному: мост ставит отметку «отменено» и, когда принтер оживёт, просто пропустит его. Если задание уже ушло в печать, отмена честно скажет об этом — бумага в этом случае выйдет.

Кнопка «отменить» есть только у зависших — тех, что ждут принтера дольше трёх минут. Свежие задания видно строкой, но снять их нельзя, и это сделано нарочно: секундная заминка (принтер проснулся, дёрнули кабель) — норма, мост допечатает сам, а кнопка рядом с таким заданием означала бы потерянный чек.

Исход печати — четырёхзначный, и для кассира это разные новости:

Исход Что произошло
Напечатано мост подтвердил физическую печать
В очереди мост принял задание, но принтер недоступен — гость чек на руки не получил
Браузером моста нет или он не принял документ, печать пошла через диалог браузера
Не напечатано не удалось никак

При исходе «в очереди» браузерный фолбэк не запускается — иначе один чек напечатался бы дважды.

Задания идемпотентны: повторная отправка того же документа не даёт второй бумажки.


Кодовые страницы и нелатиница#

Термопринтер не знает, что такое UTF-8: он рисует по глифу на байт из выбранной однобайтовой таблицы. Поэтому кодовая страница задаётся на каждый настроенный принтер:

Значение Что делает
auto (по умолчанию) нашёл кириллицу — переключает голову на CP1251; латиница и латиница-расширенная (турецкая, польская, албанская) остаются как есть
cp1251 / cp866 явный выбор кириллической таблицы — дешёвые головки бывают с одной из двух
georgian-academy / georgian-ps / georgian-expert раскладки шрифтового ПЗУ грузинских устройств
utf8 историческое поведение: на любой нелатинице — кракозябры

Про грузинский честно. Какую таблицу «понимает» конкретная головка — свойство физического устройства, в спецификации протокола этого нет; поэтому таблица выбирается по устройству. Грузинской кодовой страницы в стандарте ESC/POS нет вообще, так что раньше «ხინკალი» уезжало романизацией — khinkali: читается, но заказано было не это.

Теперь строку, которую головка напечатать не может, мост рисует картинкой — растровая печать со встроенным шрифтом, она работает на любом принтере и от его ПЗУ не зависит. Встроенного шрифта хватает на латиницу и латиницу-расширенную, греческий, кириллицу, армянский и все три грузинских начертания (мхедрули, мтаврули, асомтаврули). Там, где текст печатается обычным способом, ничего не меняется — растр включается только по необходимости.

Поведение управляется галочкой «растр для нелатиницы» у каждого устройства (по умолчанию включена, есть и на странице моста, и в облачном разделе «Оборудование»). Снимете — вернётся прежняя романизация: это нужно для редких головок, не понимающих растровую печать.

Иероглифы (китайский, японский, корейский), иврит и арабица в шрифт намеренно не вошли: у письменностей справа налево строка вышла бы задом наперёд, и это хуже нынешнего результата. Панель станций на кухне честно показывает, что будет со строкой: «уйдёт картинкой» или «ни таблицы, ни шрифта нет».

Растровая печать и роль этикеточного принтера требуют Cenaly Hardware Bridge не ниже 0.18.0 (актуальная версия — 0.23.0). На более старых мостах работает прежнее поведение: романизация нелатиницы и печать наклейки на чековой головке.

Турецкая, польская и албанская латиница намеренно не прогоняются через CP1251: там ş, ğ, ą превратились бы в ?.


Что нужно для запуска#

  • Мост на кассовом компьютереCenaly Hardware Bridge. Вся физическая печать идёт через него.
  • Принтер, подключённый к этому же компьютеру — USB, LAN или Bluetooth; мост находит устройства сам.
  • Маппинг «станция → принтер» — иначе тикеты некуда маршрутизировать.
  • Рулон нужного формата для стикеров позиции и пакета.
  • Станции у блюд — тикет собирается по станции позиции (KDS).

Ограничения#

  • Мост печатает только со своего компьютера. Браузер не достучится до моста на соседнем ПК: ставьте мост на каждое кассовое устройство или используйте печать через облако на принтер другого ПК.
  • Этикеточные принтеры TSPL/ZPL на живом железе не проверены — сейчас этикетки печатаются растром на чековом принтере.
  • Ширину ленты решает устройство. Она берётся из настройки принтера, иначе из модели фискальной кассы, иначе принимается безопасной; ширина документа 80 мм на фискальную кассу не переносится, потому что касса не переносит строку, а обрезает её вместе с суммами.
  • Пречек не остаётся в очереди. Если чековый принтер настроен, но офлайн, счёт гостю печатается на фискальной кассе: бумажка нужна сейчас, а копия через час поверх оплаченного заказа — это вторая бумажка. Чек продажи ведёт себя иначе — он ждёт повтора.
  • Пречек не уходит на кухонный принтер — для счёта гостю такой принтер считается негодным, и работа уходит на кассу.

Устранение неполадок#

Тикет не напечатался. Проверьте статус моста: если он офлайн, задание стоит в очереди печати и уйдёт при восстановлении связи с ним — очередь переживает перезапуск.

Печатается не на том принтере. У станции не задан свой принтер, и резолвер выбрал «любой доступный». Пропишите маппинг станций явно.

Вместо букв — иероглифы или пустые квадраты. Проблема кодовой страницы принтера: включите растровый шрифт — он рисует текст картинкой и печатает любые языки.

Обрезаются суммы справа. Указана слишком большая ширина ленты: поставьте реальную ширину в опции устройства.

Стикеры выходят кривым размером. Проверьте формат рулона и то, что печать идёт на этикеточный принтер, а не на чековый (сейчас этикетки на чековом печатаются растром).


Связанные разделы#


Частые вопросы#

Тикет напечатался дважды — почему?#

Скорее всего, у станции включена печать и на кассе, и на KDS. Это два разных устройства с двумя мостами, и каждое напечатало свой экземпляр. Оставьте одно значение в поле «Кто печатает».

Принтер отключили — заказы потерялись?#

Нет. Задание уходит в очередь моста и печатается, когда принтер оживёт. Но пока оно в очереди, бумаги физически нет — интерфейс это прямо говорит.

Можно ли печатать на кухню без моста?#

Кухонные тикеты и стикеры — нет, они идут только через мост. Кассовые документы имеют браузерный фолбэк: печать через обычный диалог печати. Исключение — точка, где из железа только фискальный регистратор: там чек печатает сама касса, и браузерный фолбэк не включается.

Почему в списке принтеров пусто?#

Список берётся у моста на этом устройстве. Если мост не запущен или принтер подключён к другой машине, устройства не появятся — настраивайте станцию с той машины, где принтер физически подключён.

Модификаторы печатаются в манифесте пакета?#

Да. Кухонный тикет, стикер позиции и манифест пакета собираются одним форматом строки: название блюда, под ним модификаторы отдельными строками и комментарий. Так три бумажки по одному заказу выглядят одинаково и сверяются глазами.