Перевод торгового оборудования на новые форматы фискальных данных (ФФД) и обновление прошивок кассовых аппаратов Атол часто требуют установки свежих версий драйверов (ДТО 9 или ДТО 10). Однако при работе с историческими конфигурациями на платформе 1С 7.7 (например, Комплексная автоматизация 7.7, Торговля и Склад 7.7) технические специалисты регулярно сталкиваются с проблемой: в тесте драйвера ККМ связь с кассой есть, а из самой 1С подключить оборудование не удается. При попытке выполнить тест связи программа выдает критические ошибки инициализации или сообщает об отсутствии необходимых методов.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем внутренние механизмы взаимодействия старой платформы 1С с современными драйверами Атол и пошагово восстановим работоспособность кассы.
Для того чтобы понять корень проблемы, нам необходимо рассмотреть архитектурные различия между старыми версиями драйверов (ДТО 6/8) и более современными линейками (ДТО 9/10). Платформа 1С 7.7 является строго 32-разрядным приложением, которое взаимодействует с внешним оборудованием посредством технологии COM/OLE или через специальные внешние компоненты (файлы с расширением .dll).
При обновлении драйверов до версии 9 возникают три ключевые проблемы:
Qt). Если платформа 1С не может найти эти зависимые файлы в своем рабочем каталоге, загрузка внешней компоненты завершается ошибкой.AddIn.FprnM45. В ДТО 9 используется совершенно другой программный интерфейс и ProgID (например, AddIn.ATOL_KKM_1C82_54FZ). Попытка вызвать методы старого драйвера через новую библиотеку без изменения кода приводит к ошибкам выполнения.Ethernet over USB (EoU) для передачи чеков в ОФД, а второй должен использоваться учетной системой. При неверной настройке порты начинают конфликтовать, блокируя доступ 1С к ККТ.Рассмотрим по шагам, как локализовать и устранить каждую из этих проблем.
Для того чтобы платформа 1С 7.7 «увидела» новую компоненту драйвера, недостаточно просто запустить установщик ДТО. Нам необходимо скопировать исполняемые файлы компоненты непосредственно в рабочий каталог платформы.
Выполним следующие действия:
C:\Program Files (x86)\ATOL\Drivers9\ или аналогичный путь).FPrnM1C.dll (для работы по старому стандарту) или FprnM1C82_54FZ.dll (для работы с новыми требованиями ФЗ-54).Qt*.dll, если они присутствуют в каталоге драйвера) в папку BIN установленной платформы 1С 7.7. Обычно она находится по пути: C:\Program Files (x86)\1Cv77\BIN\.Проанализируем частую ошибку разработчиков при попытке инициализировать объект кассы в кодовой базе 1С. Очень часто в настройках торгового оборудования или коде обработок обслуживания оставляют вызов старого класса при подключенной новой DLL.
Нам важно четко сопоставить используемые файлы библиотек и их программные идентификаторы:
FPrnM1C.dll регистрирует в системе класс AddIn.FprnM45.FprnM1C82_54FZ.dll регистрирует в системе класс AddIn.ATOL_KKM_1C82_54FZ.Если в настройках торгового оборудования 1С указан путь к новой библиотеке FprnM1C82_54FZ.dll, но в коде обработки обслуживания (например, frATOL54_comm_105.ert) происходит попытка создать объект старого типа:
// Ошибка! Попытка создать старый объект через новую библиотеку
ЗагрузитьВнешнююКомпоненту("FprnM1C82_54FZ.dll");
ФР = СоздатьОбъект("AddIn.FprnM45");
Система выдаст критическую ошибку инициализации, так как внутри новой библиотеки класс со старым ProgID отсутствует. Нам необходимо проверить код обработки и убедиться в строгом соответствии загружаемой компоненты и создаваемого объекта.
Даже если компонента успешно загрузилась и объект создался, тест связи может не проходить из-за отсутствия поддержки конкретных методов старой обработки в новом драйвере. Например, методы управления свойствами драйвера 9-й версии существенно отличаются от 8-й.
Откроем обработку обслуживания кассы (файл с расширением .ert, находящийся в каталоге базы данных \ExtForms\Equip\, например frATOL54_comm_105.ert) через Конфигуратор 1С 7.7 и проанализируем программный код инициализации устройства:
// Корректный пример загрузки и создания объекта для работы с ФЗ-54
Если ЗагрузитьВнешнююКомпоненту("FprnM1C82_54FZ.dll") <> 1 Тогда
Предупреждение("Не удалось загрузить внешнюю компоненту FprnM1C82_54FZ.dll!");
Возврат;
КонецЕсли;
Попытка
// Используем правильный ProgID для ДТО 9
Касса = СоздатьОбъект("AddIn.ATOL_KKM_1C82_54FZ");
Исключение
Предупреждение("Не удалось создать объект драйвера AddIn.ATOL_KKM_1C82_54FZ!");
Возврат;
КонецПопытки;
Если ваша касса работает на новой прошивке (с поддержкой последних требований к налоговым ставкам и маркировке товаров), стандартная старая обработка обслуживания под ДТО 8 работать не будет. Нам придется дорабатывать функции передачи ставок НДС и признаков предметов расчета, заменяя устаревшие вызовы свойств на совместимые с ДТО 9 методы.
Если библиотеки зарегистрированы корректно, ProgID совпадает, но при тесте связи из 1С система все равно выдает ошибку, велика вероятность того, что порт ККТ заблокирован службой передачи данных EoU (Ethernet over USB).
Выясним причину этого конфликта и настроим порты:
settings.xml) и убедимся, что там прописан порт передачи данных ОФД (COM4), а в настройках торгового оборудования 1С жестко зададим рабочий порт ККТ (COM3).Практика сопровождения торговых точек показывает, что линейка драйверов Атол 9.х была промежуточной и имеет ряд неустранимых программных ошибок. Производитель прекратил развитие этой ветки и полностью перешел на поддержку ДТО 10 (Драйвер ККТ 10.х).
Для надежной работы 1С 7.7 с современными кассами на платформе 5.0 рекомендуется отказаться от ДТО 9 и перевести систему на ДТО 10. Рассмотрим, как реализовать этот переход:
addin_fptr10_x86.dll в операционной системе. Для этого откроем командную строку от имени администратора и выполним регистрацию:
regsvr32 "C:\Program Files (x86)\ATOL\Drivers10\KKT\bin\addin_fptr10_x86.dll"
ЗагрузитьВнешнююКомпоненту(), так как новая компонента написана по стандартам, отличным от старого Native API 1С 7.7. Вместо этого мы будем обращаться к драйверу напрямую как к системному OLE/COM-объекту.Посмотрим на пример инициализации объекта ДТО 10 в коде 1С 7.7:
Попытка
// Создаем прямой COM-объект драйвера версии 10
Драйвер10 = СоздатьОбъект("AddIn.Fptr10");
Драйвер10.Инициализировать();
Исключение
Предупреждение("Не удалось подключить драйвер АТОЛ ДТО 10! Проверьте регистрацию DLL.");
Возврат;
КонецПопытки;
// Настройка параметров подключения
Драйвер10.ПоставитьПараметр(Драйвер10.LIBFPTR_PARAM_CONNECTION_TYPE, Драйвер10.LIBFPTR_PORT_COM);
Драйвер10.ПоставитьПараметр(Драйвер10.LIBFPTR_PARAM_COM_FILE, "COM3");
Драйвер10.ПоставитьПараметр(Драйвер10.LIBFPTR_PARAM_BAUDRATE, Драйвер10.LIBFPTR_PORT_SPEED_115200);
Если Драйвер10.Открыть() <> 0 Тогда
Предупреждение("Ошибка соединения с ККТ: " + Драйвер10.ПолучитьОписаниеОшибки());
Иначе
Сообщить("Связь с ККТ Атол успешно установлена средствами ДТО 10!");
Драйвер10.Закрыть();
КонецЕсли;
Перевод конфигурации на прямое взаимодействие с ДТО 10 через COM-объект полностью решает проблемы несовместимости старых библиотек FPrnM1C.dll и избавляет от необходимости постоянно следить за тем, скопированы ли нужные зависимые файлы в каталог BIN платформы.