Настройка сервера печати и оборудования, поддерживаемые устройства

Конфигурация сервера печати находится в файле setupfrk.config. Конфигурация содержит комментарии и все варианты своих параметров, так что настройка не должна вызвать затруднения.

Два параметра - driver и port - управляют связкой "устройство - сетевой порт", остальные параметры конфигурации специфичны для каждого поддерживаемого драйвера (см. параметры в описании каждого драйвера).

Параметр port, как понятно, определяет порт, на котором сервер печати слушает подключения сервера биллинга.

Параметр driver указывает на класс драйвера устройства. В данный момент поддерживаются следующие устройства (в каждом подразделе даётся строка для указания в качестве имени драйвера) со следующими параметрами (см. ниже).

На данный момент это всё оборудование, которое поддерживается сервером печати. Работоспособность других устройств не гарантируется (более того - маловероятна). Но реализация этой поддержки, конечно, возможна.

В конфигурации сервера печати прописаны некие параметры "по умолчанию" для каждого устройства на момент написания драйвера. Вполне возможно, что у вас настройки будут иные. Внимательно проверяйте все параметры! Например, несовпадение параметров COM-порта в устройстве, настройках драйвера и в самой системе чаще всего приведёт к невозможности работы с этим устройством.

Фискальный регистратор Штрих-ФР-К для использования его в BGBilling

driver: ru.bitel.frk.driver.shtrih.Driver

Конфигурация:

  • portName - имя порта, например, в Windows com<X>, в Linux /dev/ttyS<X>;

  • baudRate - скорость обмена (2400, 4800, 9600, 19200, 38400, 57600, 115200);

  • flowControlIn, flowControlOut - описание типа flow control (None, Xon/Xoff Out, Xon/Xoff In, RTS/CTS In, RTS/CTS Out);

  • databits - настройка data bits (5, 6, 7, 8);

  • stopbits - настройка stop bits (1, 1.5, 2);

  • parity - настройка parity (None, Even, Odd);

  • oneByteTimeout - таймаут приёма одного байта, характеристика порта (по умолчанию 100).

Драйвером поддерживаются следующие устройства:

ШТРИХ-ФР-Ф (версия 03), ШТРИХ-ФР-Ф (версия 04), ШТРИХ-ФР-Ф (Казахстан), ЭЛВЕС-МИНИ-ФР-Ф, ФЕЛИКС-Р Ф, ШТРИХ-ФР-К, ШТРИХ-950К, ЭЛВЕС-ФР-К, ШТРИХ-МИНИ-ФР-К, ШТРИХ-ФР-Ф (Белоруссия), ШТРИХ-КОМБО-ФР-К, Фискальный блок Штрих-POS-Ф, ШТРИХ-950К (версия 02), ШТРИХ-КОМБО-ФР-К (версия 02), ШТРИХ-МИНИ-ФР-К (версия 02, 57 мм), ШТРИХ-КИОСК-ФР-К

Из указанного списка проверены не все устройства, но согласно описанию протокола должны работать все из этого списка. Подробная сверка моделей и наличия в них используемых команд не проводилась (за исключением обычных, распространённых моделей - ФР-К и т.д.), поэтому, возможно, что среди указанных моделей есть специфические устройства, которые будут работать с ограниченным функционалом.

Ограниченно поддерживаются следующие (обычные, без ФП) принтеры:

Принтер ШТРИХ-500

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

Реализована вторая версия драйвера ККМ Штрих. Задумывалась как обновлённая реализация протокола "Штрих", более полная поддержка железа и устойчивость к ошибкам, особенно в проблемных вариантах (через маппинг портов, при нестойких соединениях через разные переходники usb и т.д.). Написано не по рекомендациям протокола, а по опытным наблюдениям. В данный момент тестируется, рекомендуется к использованию как альтернатива.

driver: ru.bitel.frk.driver.shtrih2.Driver

Параметры и настройки те же.

Для обеих версий драйвера имеются дополнительные параметры драйвера (использовать по ситуации):

# таймаут в мс между опросами состояний для ожидания окончания печати предыдущей операции
waitNoprintTimeout: 1000

# кол-во опросов состояния для ожидания окончания печати предыдущей операции (каждое длиной таймаут)
waitNoprintNumtry: 20

# запрет прямого использования команды отрезки (позволяет избежать проблем с отрезчиком в некоторых случаях)
# по умолчанию - 0 (отрезчик используется)
cutterDisabled: 1

# насильное использование резчика после каждой операции печати (если вдруг авторезка не работает)
# по умолчанию - 0 (отрезчик руками не включается, срабатывает только если авторезка)
#cutterForceManual: 0
Здесь и далее - флаг cutterDisabled действует только на ручную команду отрезки при печати произвольного текста или при приветствии итд итп. А отрезка или неотрезка при чеках/отчётах настраивается в принтере. После печати чека должно резать автоматически, это заложено в программе регистратора и настраивается в нём самом.

Эмулятор принтера, подразумевающегося к использованию в BGBilling

driver: ru.bitel.frk.driver.emu.Driver

Представляет собой некую заглушку. Если нет реального устройства или оно не поддерживается/не работает, можно запустить и протестировать с этим драйвером-эмулятором. При этом некоторый вывод драйвера (вместо вывода на реальную бумагу) выкидывается в консоль (и, следовательно, попадает в cashserver.out). Дополнительной конфигурации этот драйвер не требует.

К этому драйверу прилагается визуальный "эмулятор принтера", очень грубым образом отображающий возможный вид "напечатанных" чеков. Этот эмулятор интерпретирует консольный вывод драйвера-заглушки и рендерит чеки, отдалённо напоминающие чеки регистраторов Штрих. Может применяться для оценки работы сервера печати и системы в целом.

Эмулятор принтера

Приложение виртаульного принтера запускается из папки сервера печати: virtualprinter.sh(.bat). Параметры можно увидеть при запуске.

Использование: <virtualprinter>[.bat|.sh] [--noskipexist] [--encoding=<encoding>] <logfilename>, где --noskipexist - не пропускать уже существующие на момент запуска виртуального принтера строки в выводе драйвера-эмулятора;

--encoding=<encoding> - указание кодировки исходного файла (вывода эмулятора);

logfilename - путь к файлу 'cashserver.out'.

Например:

./virtualprinter.sh ./log/cashserver.out

Любой системный принтер для печати на нём XSL-FO шаблонов

river: ru.bitel.frk.driver.fop.Driver

Представляет собой FO-транслятор, который действует так:

  1. Формирует из приходящих данных (текстовые строки) xml;

  2. Обрабатывает с помошью этой xml указанный заранее xsl:fo шаблон;

  3. Выводит его на печать на указанном принтере.

Необходимая конфигурация сервера печати:

# Название принтера в системе (если не указан, то возьмётся принтер по умолчанию, прописнный в системе, если и такого нет, будет ошибка)
printer=pdf

# Шаблон xsl. Прямой путь к файлу (можно, конечно, положить его в xsl сервера
# биллинга, тогда сервер печати, конечно, не стартует без старта последнего)
#xsl=http://127.0.0.1:8080/bgbilling/xsl/cashcheck_fop.xsl
#xsl=file:///home/dimon/workspace/bgbilling/modules/cashcheck/server/server_files/xsl/cashcheck_fop.xsl
xsl=file:///usr/local/BGCashcheckServer/xsl/cashcheck_fop.xsl

# Имя задания печати (произвольное), может быть "не задано"
jobName=fop driver printing

# Количество копий, может быть "не задано"
jobCopies=1

К этому драйверу нужны две сущности: скрипт поведения, который формирует нужные строки для драйвера, и xsl-шаблон, который преобразуется с помощью xml, сформированной драйвером, в готовый документ для печати. Пример скрипта поведения см. ниже, в разделе "настройка внешнего вида чеков". Смысл скрипта состоит в заполнении набора строк с помощью конструкций вида

check.addString( "строка" );

Порядок строк важен для шаблона, там они выбираются по номерам. Список строк драйвер преобразует в xml такого вида:

<?xml version="1.0" encoding="UTF-8"?>
<data clientsumma="10.0" summa="10.0">
<line n="1" text="120,00р."/>
<line n="2" text="строка2"/>
<line n="3" text="строка3" summ="10.0" dep="15"/>
</data>

Такую xml и надо иметь ввиду при создании и редактировании xsl-шаблона. Последняя, третья, строка получена с помощью метода addPayment в скрипте обработки, а не addString. Сам шаблон представляет собой любой валидный FO-документ. Получить в этом шаблоне значения строковых параметров из драйвера можно таким кодом (см. исходную xml выше):

<!-- Сумма платежа: 120,00р. -->
<xsl:variable name="param_summ" select="line[@n='1']/@text" />

Таким образом, в xsl-переменной окажется значение аттрибута "text" из первой строки ("n"=1).

При правке или замене XSL-FO шаблона при необходимости видеть результат внесённых изменений необходимо перезагрузить CashCheck-сервер, т.к. шаблон загружается и распознаётся при инициализации драйвера во время старта сервера. Для оптимизации по скорости.

Устройства с протоколом от компании АТОЛ

driver: ru.bitel.frk.driver.atol.Driver

Драйвер реализует поддержку протоколов, основанных на разработках компании АТОЛ. В данный момент это следующие устройства:

Триум-Ф эталонной версии 01, «Меркурий-140Ф» АТОЛ, ФЕЛИКС-Р Ф эталонная версия 02, ФЕЛИКС-02К эталонная версия 01, ТОРНАДО (МЕРКУРИЙ-114.1Ф эталонная версия 04), Меркурий MS-K эталонная версия 02, ФЕЛИКС-Р К эталонной версии 01, ФЕЛИКС-3СК эталонная версия 01, FPrint-01K эталонная версия 01, FPrint-02K эталонная версия 02, FPrint-03K эталонная версия 01, ККМ BIXOLON-01K, PayPPU-700K, PayVKP-80K, PayCTS-2000K, FPrint-88K, FPrint-5200K

Параметры для этого драйвера такие:

  • portName - имя порта, например, в Windows COM<X>, в Linux /dev/ttyS<X>;

  • baudRate - скорость порта. По протоколу заявлены следующие возможные значения: 1200, 2400, 4800, 9600, 14400, 38400, 57600, 115200;

  • Остальные параметры порта по умолчанию заявлены в протоколе следующими: 1 стартовый бит, 8 битов данных, 1 стоповый бит, без проверки на четность, 3 линии (TXD, RXD, GND);

  • type - так как драйвер поддерживает несколько принтеров, разновидностей и их платформ, то необходимо указать тип принтера заранее. В конфигурации приведены все возможные значения;

  • accessPassword - пароль доступа к ККМ (не пароль кассира/админа/сисадмина!). 4цифры, по умолчанию "0000", согласно протоколу.

Имеются дополнтельные параметры драйвера (использовать по ситуации):

# запрет прямого использования команды отрезки (позволяет избежать проблем с отрезчиком в некоторых случаях)
# по умолчанию - 0 (отрезчик используется)
cutterDisabled: 1

# насильное использование резчика после каждой операции печати (если вдруг авторезка не работает)
# по умолчанию - 0 (отрезчик руками не включается, срабатывает только, если авторезка)
#cutterForceManual: 0