При попытке вывести на чековый принтер или фискальный регистратор нестандартные символы Юникода (например, карточные масти, значки иконки, стрелки или спецсимволы с кодами выше 255) устройство очень часто печатает знак вопроса ?. Разберем подробнее, почему возникают такие ограничения и какими способами можно напечатать нужные символы или изображения на кассовой ленте.
Проанализируем техническое устройство чековых принтеров и фискальных регистраторов. В отличие от обычных офисных принтеров, кассовые аппараты используют встроенный аппаратный генератор знаков (знакогенератор), прописанный прямо в прошивке устройства.
Работа с текстом в ККТ строится на основе однобайтовых таблиц кодировок (8-bit Code Pages, такие как CP866 или Windows-1251). Это означает, что касса распознает строго ограниченный набор из 256 символов (коды от 0 до 255). Платформа 1С формирует и передает текстовые строки в формате UTF-16 (Unicode). Когда драйвер торгового оборудования или сама касса получает символ с кодом за пределами однобайтовой таблицы (например, символ масти карточной бубны с кодом 9830), выполняется автоматическая замена нераспознанного символа на знак вопроса ?.
Рассмотрим наименее трудоемкий способ вывода произвольных символов и шрифтов. Для этого кассовый аппарат или чековый принтер подключается к операционной системе не как фискальное устройство через драйвер ККТ, а как стандартный Windows-принтер (используя драйвер печати чеков POS / GDI).
В этом случае растрирование символов и шрифтов выполняет операционная система. На принтер отправляется готовое растровое изображение строки, что позволяет выводить абсолютно любой символ или иконку. Обратите внимание: при таком подходе печать выполняется медленнее, чем при отправке чистых текстовых команд во внутренний знакогенератор.
Если требуется сохранить подключение устройства через специализированный драйвер ККТ, разберем альтернативный вариант — конвертацию текста со спецсимволами в картинку перед отправкой на печать.
С помощью внешних утилит (например, ImageMagick) или средств генерации графики в 1С можно сформировать монохромный рисунок нужной строки или значка, после чего отправить изображение в кассу специальной командой печати графики.
Рассмотрим порядок действий при таком подходе:
BMP.Проанализируем возможности протокола управления чековыми принтерами ESC/POS. Большинство чековых аппаратов поддерживают переопределение таблицы символов (User-Defined Characters) и печать логотипов из энергонезависимой памяти (NVRAM).
ESC/POS можно задать пиксельную матрицу (например, 12х24 точки) для конкретного ASCII-кода и назначить его на один из неиспользуемых кодов из диапазона 32–126. После загрузки матрицы отправка данного кода будет выводить переопределенный знак.Выясним, как использовать встроенные возможности знакогенератора ККТ: