Разработка универсального драйвера ФР нижнего уровня
Введение
Порядок создания и внедрения собственного драйвера фискального регистратора нижнего уровня разделяется на несколько этапов:
- Заявка на sd.rkeeper.ru — заявка для выдачи FiscRegTypeID для драйвера который будет разработан
- Добавление разрабатываемого драйвера в r_keeper — проверка разрабатываемого драйвера, путем переименования уже имеющегося в системе
- Загрузка разработанного драйвера — добавление разработанного драйвера под собственным именем, после выполнения заявки на sd
Заявка на добавление нового драйвера
Добавление своего драйвера в r_keeper происходит следующим образом:
- Разработчик создает заявку с указанием определенных параметров
- После обработки заявки, запись о новом драйвере добавляется дистрибутив поставки в r_keeper
- Компания r_keeper добавляет новый номер FiscRegTypeID и параметры из заявки в файл upgradedevices.abs, предоставляет номер FiscRegTypeID и файл upgradedevices разработчику
- Разработчик добавляет файл upgradedevices.abs в папку workmods сервера справочников и перезапускает сервер справочников и менеджерскую станцию. Сервер справочников обновляет записи в своей базе.
Менеджерская станция, подключившись к серверу справочников позволяет выбрать новый драйвер в свойстве FiscRegTypeID драйвера UniFR.dll (universal driver for fiscal printer) и настроить кассовую станцию на его использование.
После создания заявки рекомендуется, не дожидаясь обработки заявки, переходить к тестированию разрабатываемого драйвера. Для этого можно использовать любой из драйверов, уже добавленных в систему. Подробнее смотрите в разделе добавление драйвера под своим именем.
Структура заявки
В заявке на регистрацию нового ФР на sd.rkeeper.ru необходимо указать следующую информацию:
Наименование ФР латинскими буквами для имени свойства фискального индекса у валют и налогов
- Диапазоны индексов платежей, например: 1..4 или 0..7 и индекс по умолчанию, если не настроен никакой.
Пример: для Титан-Ф диапазон указан от1 до 2, поэтому при попытке указать индекс больше 2, система вернет ошибку: - Диапазоны индексов налоговых ставок, например: 1..4 и индекс по умолчанию, если не настроен никакой.
Пример: для Титан-Ф диапазон от 1 до 4, при попытке указать другой индекс, возникает ошибка - Имя DLL. Желательно начинать с fp[Наименование страны]_Название драйвера. Например: fpRU_Atol или fpKZ_Strih.
Есть возможность настроить значения по умолчанию индексов платежей для предустановленных типов валют и налоговых ставок. Важный процесс, так как значения в базе данных пользователя не перезаписываются, а только добавляются. В случае ошибки придётся исправлять все базы клиентов вручную.
Для поддержки редактора параметров в менеджерской станции необходимо создать схему параметров в формате XSD, прилинковать её в качестве ресурса с именем DEVICECONFIGV01XSD в DLL драйвера.
Для автоматического распространения DLL драйвера от сервера справочников до всех станций, DLL следует упаковать в формат udb — это делает компания r_keeper по отдельной заявке и добавить в папку workmods сервера справочников. В этом случае DLL драйвера автоматически скачается с сервера справочников и будет помещена в папку к rk7man.exe при запуске файла rk7man.bat.
На этапе разработки драйвера (до упаковки в формат udb) DLL драйвера следует копировать в папку к rk7man.exe вручную. Если файл DLL драйвера будет отсутствовать в папке с rk7man.exe, то при нажатии на ... в параметре LowDriverParams драйвера UniFR будет вызван не специальный редактор параметров драйвера по схеме XSD, а обычный текстовый редактор. Параметры драйвера будут переданы в функцию UFRInitXML при запуске станции обслуживания в том виде, как они были сохранены в менеджерской станции.
Добавление драйвера под другим именем
После того как заявка создана, можно не дожидаться ее выполнения и уже работать с разрабатываемым драйвером.
Для этого необходимо выполнить следующие шаги:
- Запустите кассовый сервер и кассу без разрабатываемого драйвера. Касса должна выгрузить все необходимые для работы драйвера. Например драйвера графических библиотек, клавиатуры и т.д.
- Отредактируйте файл wincash.bat, чтобы при следующем запуске кассы не перезаписать разработанный драйвер добавленный в r_keeper.
Для этого:- В папке станции обслуживания откройте файл wincash.bat с помощью текстового редактора
- После метки :now_run добавьте строку команды перехода к метке, например goto new_start
- В конце текстового файла, перед командой start doscash.exe укажите метку для перехода :new_start
- Сохраните изменения и выйдите из редактора.
- Отключите проверку целостностей модулей:
- В менеджерской станции перейдите в меню Настройки > Параметры
- Нажмите на значок лупы и геометрические фигуры под меню Персонал
- В поисковой строке введите consis
- Выберите параметр Режим проверки целостности модулей
- В блоке Основное в строке Значение из выпадающего списка выберите Без Проверки
- Сохраните изменения.
- Переименуйте свою разрабатываемую DLL на имеющуюся в системе. Рекомендуем использовать fpTestBuild.dll — DLL с большим диапазоном платежных и налоговых индексов.
То есть в папке с кассовым севером, вы находите файл fpTestBuild.dll переименовываете его, например fpTestBuild_2.dll. Свою dll, которую хотите протестировать называете fpTestBuild.dll - Свою переименованную DLL добавьте в папку станции обслуживания к doscash.exe. Если менеджерская станция установлена в другую папку, или на другой компьютер — добавьте DLL и к ней в папку.
- Перезапустите серверы и менеджерскую станцию.
- В менеджерской станции добавьте на кассу, на вкладке свойства драйвер universal driver for fiscal printer
- В разделе Опции в строке FiscRegTypeID из выпадающего списка выберете драйвер, в который переименовали свой разрабатываемый. У нас это fpTestBuild.
- В настройках валют и налогов настройте фискальные индексы для драйвера fpTestBuild таким образом, как их будет использовать разрабатываемый драйвер.
- Сохраните изменения.
- Запустите станцию обслуживания.
Ваш драйвер готов к работе.
Добавление драйвера под своим именем
После того как заявка на sd будет выполнена вы получите файл upgradedevices.abs и номер FiscRegTypeID
- Поместите файл в папку с сервером справочников.
- В разделе Опции в строке FiscRegTypeID из выпадающего списка выберете драйвер, имя которого указали в заявке
- В настройках валют и налогов настройте фискальные индексы для разработанного драйвера. Сохраните изменения. Запустите станцию обслуживания. Ваш драйвер готов к работе.
После того, как вы разработали и проверили свою DLL, для того чтобы не подбрасывать DLL в ручную для каждой кассы, необходимо упаковать драйвер в формат в udb. Это делается соответствующей заявкой на sd.
Нумерация версий для упаковки в формат udb.
Для автоматического распространения драйвера от сервера справочников на все станции обслуживания и менеджерские станции — используется формат udb.
Формат udb кроме DLL драйвера содержит дополнительную информацию, среди которой есть контрольная сумма DLL и число номера версии: от 1 до 2147483648
При запуске станции, DLL драйвера скачивается с сервера справочников только в том случае если:
- Не совпадает контрольная сумма,
- Число номера версии на станции меньше числа на сервере справочников.
Для формирования числа номера версии драйвера, компания r_keeper использует атрибут FILEVERSION в ресурсе VERSIONINFO.
Атрибут FILEVERSION формируется по следующим правилам:
- 1-ое число: константа 7 — обозначает драйвер, разработанный командой r_keeper7
- 2-ое число: номер версии протокола, которую учитывал разработчик при разработке драйвера
- 3-е число: сквозной номер версии драйвера. Монотонно увеличивается при каждой релизной сборке.
- 4-ое число: константа 0. Ненулевые значения используются в тестовых целях и не должны попадать в дистрибутив поставки и к конечному пользователю.
Из четырёх чисел FILEVERSION формируется число номера версии udb по следующей формуле:
число_номера_версии = 1000 * 3-е число + 4-ое число.
Если разработчик придерживается схемы нумерации, совместимой с вышеуказанной, то в заявке на упаковку DLL драйвера в формат udb требуется указать UDBVERSION=STD. В противном случае разработчик должен сам указывать число номера версии udb в виде UDBVERSION=12345.
Полезные статьи
- Описание протокола универсального драйвера — во вложении исходный текст примера тестового драйвера.
- https://github.com/rkeeper/rkeeper_desktop_hardware_drivers — тестовая dll, выложенная на GitHub.