При интеграции фискальных регистраторов с мобильными приложениями на платформе «1С:Предприятие» для Android (например, «1С:Мобильная касса» или конфигурациями на базе «1С:Библиотека подключаемого оборудования для мобильных приложений») разработчики часто сталкиваются с ситуацией, когда требуемая модель ККТ (в частности, АТОЛ 60Ф) отсутствует в стандартном списке выбора оборудования либо выдает ошибку инициализации при запуске драйвера. Разберем по шагам, как устроена работа с внешними компонентами драйверов АТОЛ под Android, как корректно обновить библиотеку в конфигурации, добавить отсутствующую модель и избежать аварийного завершения приложения.
Распространенная ошибка при попытке обновить драйвер Native API для мобильной платформы — прямая замена скомпилированного файла библиотеки .so в общем макете конфигурации. Мобильная платформа 1С требует наличия структуры пакета драйвера, а не одиночного бинарного файла.
Выясним правильный порядок обновления драйвера в конфигураторе:
ДрайверАТОЛККТ54ФЗ необходимо загружать не единичный файл libcom_atol_fprt1c_54fz_ARM_*.so, а полноценный ZIP-архив (например, ATOL_KKT_9.zip).MANIFEST.XML, описывающий поддерживаемые архитектуры процессоров (armeabi-v7a, arm64-v8a, x86), типы оборудования и пути к библиотекам.МенеджерОборудованияВызовСервераПереопределяемый и скорректируем номер сборки (например, заменим устаревшую версию на актуальную 9.10.0.5560).При инициализации драйвера в методе ПолучитьОписаниеДрайвера() модуля МенеджерОборудованияВнешняяКомпонентаКлиент выполняется вызов метода компоненты:
ОбъектДрайвера.ПолучитьПараметры(ПараметрыДрайвера);
Драйвер возвращает XML-структуру параметров подключения и перечень моделей в узле <ChoiceList>. Если в сборке драйвера линейки 9.x модель АТОЛ 60Ф отсутствует в списке выбора интерфейса, ее можно добавить программно, модифицировав возвращаемую XML-строку перед формированием формы настроек. Код модели для АТОЛ 60Ф в протоколе АТОЛ 3.X равен 75.
Посмотрим на пример переопределения XML-структуры в коде:
ПараметрыДрайвера = СтрЗаменить(
ПараметрыДрайвера,
"<Item Value=""69"">АТОЛ: АТОЛ 77Ф</Item>",
"<Item Value=""69"">АТОЛ: АТОЛ 77Ф</Item>" + Символы.ПС + "<Item Value=""75"">АТОЛ 60Ф</Item>"
);
После такой подмены в форме настройки подключаемого оборудования появится пункт АТОЛ 60Ф, что позволит завершить настройку порта связи (Bluetooth, TCP/IP или USB) и выполнить успешный тест устройства.
Разберем типичные ошибки, возникающие на этапе тестирования кассовых операций на Android-устройствах:
Если в кассе установлен массогабаритный макет фискального накопителя (МГМ), касса не сможет снять «Отчет о текущем состоянии расчетов» до тех пор, пока не будет выполнена процедура фискализации/регистрации ККТ в тестовом режиме. Для устранения ошибки подключим кассу к ПК и выполним тестовую регистрацию через утилиту «Тест драйвера ККТ».
В ранних версиях внешних компонент линейки 9.10.x для Android присутствовали ошибки в Native API при разборе фискального ответа от ККТ, а также при обработке таймаутов Bluetooth SPP-стека. В момент печати чека в native-коде .so происходит необработанное исключение (SIGSEGV), приводящее к аварийному завершению процесса 1С. В результате чек физически печатается на ККТ, но транзакция в мобильной базе 1С откатывается, а кассовый документ остается непроведенным.
Для организации стабильной работы кассового узла на базе АТОЛ 60Ф и мобильной платформы 1С применим следующие подходы:
Рекомендуется использовать релизы подсистемы БПО для мобильных приложений версии 2.2.3 и новее, где обновлен стандарт требований к разработке драйверов (версия 1.2) и включены исправленные версии внешних компонент Native API.
Вместо прямой загрузки нестабильной .so-библиотеки в память процесса 1С можно использовать запуск внешнего Android-приложения (драйвер-службы) через вызов ЗапускПриложенияМобильногоУстройства(). Это изолирует процесс 1С от сбоев оборудования: даже при разрыве Bluetooth-соединения основная программа не упадет аварийно.
Если мобильное устройство используется курьером или выездным сотрудником, надежным решением является отправка чека из мобильного приложения на центральный сервер базы 1С предприятия, где фискализация выполняется стационарной кассой или кассовой фермой, а клиенту отправляется электронный чек.