Вводная информация

Как правило, основные команды для управления принтером реализованы в драйвере. Но если используется нестандартный принтер либо требуется добавить какую-либо нестандартную операцию (инициализация кодовой страницы, печать логотипа, управление звонком и т.д.), можно указать ESC-команду непосредственно в печатной форме.

Для начала необходимо определиться с формой, в которую должна быть помещена команда. Ниже приведены основные печатные формы:

  • FCHECK.FRM  - форма печати пречеков, нефискальных чеков
  • FICHECK.FRM - аналогично FCHECK.FRM, если используется ФР с поддержкой нефискальной печати
  • SERVPRN.FRM - форма печати сервис-чеков

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

Система команд ESC/POS

 

Важно: Кассовый клиент R-Keeper v6 не поддерживает работу с нулевыми байтами [00] - если такой байт будет указан в печатной форме, ESC-команда работать не будет

 

В печатную форму можно добавить любую команду, но т.к. самой распространненной системой для POS-принтеров является ESC/POS, будем рассматривать процедуру на ее примере.

Для каждого принтера или семейства принтеров может быть свой набор ESC/POS команд, который обычно описан в руководстве к принтеру.

Простые команды ESC/POS состоят из нескольких байт, бывают также достаточно сложные команды, состоящие из множества параметров.

Рассмотрим пример простой ESC-команды для выбора кодовой страницы принтера:

ESC t n

[Name]
Select character code table

[Format]
ASCII ESC t n
Hex 1B 74 n Decimal 27 116 n

[Range]
Except for Thai model:0 ≤ n ≤ 5, 16 ≤ n ≤ 19, n = 254, 255
For Thai model: 0 ≤ n ≤ 5, 16 ≤ n ≤ 26, n = 254, 255

[Default] Except for Thai model:n = 0
For Thai model: n = 20

[Description] Selects a page n from the character code table.

Данная команда состоит из 3-х байт: 1B 74 n. Последний байт (n) определяет номер кодовой страницы, которую требуется установить.

В руководстве к принтеру есть таблица с номерами кодовых страниц, которые поддерживает принтер:
 

n Selected character code
0 PC437 (USA: Standard Europe)
2 Katakana
.... ...
17 PC866 (Cyrillic #2)
... ...

Нас интересует кодовая страница PC866 - ее номер 17. Соотв. команда будет выглядеть так: 1B 74 17 (три байта в шестнадцатиричном виде)

Редактирование печатной формы

Для добавления команды в печатную форму используется стандартный редактор форм FormEditor (RK6\FEDITOR.EXE)

Открываем форму в редакторе (в примере используется FCHECK.FRM), выбираем самый первый раздел Page Header и добавляем на форму новый элемент (Item -> Add)

Важно: Ширина (Width) нового элемента должна соотвю длине добавляемой ESC-команды

В нашем случае команда состоит из 3-х байт, соотв. ширину нового элемента устанавливаем равной 3.

Для того, чтобы в дальнейшем было легче править форму в HEX-редакторе, значение нового элемента указываем в виде трех одинаковых чисел (это не обязательное требование, но значительно облегчает поиск строки в HEX-режиме) - в примере используется значение 888:

В результате получаем:

Далее сохраняем форму и закрываем редактор.

HEX-редактор

Заключительным этапом будет редактирование формы в любом HEX-редакторе (скриншоты ниже сделаны в приложении WinHex)

Открываем файл макета печати (FCHECK.FRM) в редакторе и поиском находим добавленную ранее строку:

Если поиск в вашем редакторе возможен только в шестнадцатиричном виде, искомую строку предварительно нужно перевести в HEX (строке 888 соотв. HEX-значение 38 38 38)

Далее меняем каждый байт найденной строки на соотв. байт ESC-команды:

Сохраняем файл макета печати, записываем его на кассу и проверяем работу принтера!