Настройка сервера печати и оборудования, поддерживаемые устройства
Конфигурация сервера печати находится в файле 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-транслятор, который действует так:
-
Формирует из приходящих данных (текстовые строки) xml;
-
Обрабатывает с помошью этой xml указанный заранее xsl:fo шаблон;
-
Выводит его на печать на указанном принтере.
Необходимая конфигурация сервера печати:
# Название принтера в системе (если не указан, то возьмётся принтер по умолчанию, прописнный в системе, если и такого нет, будет ошибка)
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