Как подключить ККТ Атол к 1С 7.7 после обновления драйверов на версию 9?

Программист 1С v7.7 1С:Комплексная автоматизация Управленческий учет Торговля и дистрибуция
← На главную

Перевод торгового оборудования на новые форматы фискальных данных (ФФД) и обновление прошивок кассовых аппаратов Атол часто требуют установки свежих версий драйверов (ДТО 9 или ДТО 10). Однако при работе с историческими конфигурациями на платформе 1С 7.7 (например, Комплексная автоматизация 7.7, Торговля и Склад 7.7) технические специалисты регулярно сталкиваются с проблемой: в тесте драйвера ККМ связь с кассой есть, а из самой 1С подключить оборудование не удается. При попытке выполнить тест связи программа выдает критические ошибки инициализации или сообщает об отсутствии необходимых методов.

В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем внутренние механизмы взаимодействия старой платформы 1С с современными драйверами Атол и пошагово восстановим работоспособность кассы.

Почему ломается интеграция 1С 7.7 с ДТО 9?

Для того чтобы понять корень проблемы, нам необходимо рассмотреть архитектурные различия между старыми версиями драйверов (ДТО 6/8) и более современными линейками (ДТО 9/10). Платформа 1С 7.7 является строго 32-разрядным приложением, которое взаимодействует с внешним оборудованием посредством технологии COM/OLE или через специальные внешние компоненты (файлы с расширением .dll).

При обновлении драйверов до версии 9 возникают три ключевые проблемы:

  1. Несовместимость библиотек в системном окружении. Новые компоненты Атол используют библиотеки сторонних фреймворков (в частности, библиотеки Qt). Если платформа 1С не может найти эти зависимые файлы в своем рабочем каталоге, загрузка внешней компоненты завершается ошибкой.
  2. Конфликт ProgID (идентификаторов программного класса). В коде старых обработок обслуживания прописано обращение к объектам ДТО 8 через ProgID AddIn.FprnM45. В ДТО 9 используется совершенно другой программный интерфейс и ProgID (например, AddIn.ATOL_KKM_1C82_54FZ). Попытка вызвать методы старого драйвера через новую библиотеку без изменения кода приводит к ошибкам выполнения.
  3. Занятость портов службой передачи данных EoU. При подключении кассы через USB-интерфейс операционная система создает виртуальные COM-порты. Один из них забирает служба Ethernet over USB (EoU) для передачи чеков в ОФД, а второй должен использоваться учетной системой. При неверной настройке порты начинают конфликтовать, блокируя доступ 1С к ККТ.

Рассмотрим по шагам, как локализовать и устранить каждую из этих проблем.

Шаг 1. Правильное размещение и регистрация библиотек в каталоге Bin

Для того чтобы платформа 1С 7.7 «увидела» новую компоненту драйвера, недостаточно просто запустить установщик ДТО. Нам необходимо скопировать исполняемые файлы компоненты непосредственно в рабочий каталог платформы.

Выполним следующие действия:

  1. Перейдем в каталог установки драйверов Атол (обычно это C:\Program Files (x86)\ATOL\Drivers9\ или аналогичный путь).
  2. Найдем файлы компоненты интеграции. Нам понадобятся файлы FPrnM1C.dll (для работы по старому стандарту) или FprnM1C82_54FZ.dll (для работы с новыми требованиями ФЗ-54).
  3. Скопируем выбранную библиотеку, а также все сопутствующие DLL-файлы (включая библиотеки Qt*.dll, если они присутствуют в каталоге драйвера) в папку BIN установленной платформы 1С 7.7. Обычно она находится по пути: C:\Program Files (x86)\1Cv77\BIN\.
  4. Если база работает в сетевом режиме или на терминальном сервере, убедимся, что у пользователя есть права на чтение и выполнение файлов в этой директории.

Шаг 2. Разрешение конфликта идентификаторов ProgID

Проанализируем частую ошибку разработчиков при попытке инициализировать объект кассы в кодовой базе 1С. Очень часто в настройках торгового оборудования или коде обработок обслуживания оставляют вызов старого класса при подключенной новой DLL.

Нам важно четко сопоставить используемые файлы библиотек и их программные идентификаторы:

Если в настройках торгового оборудования 1С указан путь к новой библиотеке FprnM1C82_54FZ.dll, но в коде обработки обслуживания (например, frATOL54_comm_105.ert) происходит попытка создать объект старого типа:


// Ошибка! Попытка создать старый объект через новую библиотеку
ЗагрузитьВнешнююКомпоненту("FprnM1C82_54FZ.dll");
ФР = СоздатьОбъект("AddIn.FprnM45");

Система выдаст критическую ошибку инициализации, так как внутри новой библиотеки класс со старым ProgID отсутствует. Нам необходимо проверить код обработки и убедиться в строгом соответствии загружаемой компоненты и создаваемого объекта.

Шаг 3. Адаптация обработки обслуживания ККМ (файла ERT)

Даже если компонента успешно загрузилась и объект создался, тест связи может не проходить из-за отсутствия поддержки конкретных методов старой обработки в новом драйвере. Например, методы управления свойствами драйвера 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 методы.

Шаг 4. Устранение конфликта портов и службы EoU

Если библиотеки зарегистрированы корректно, ProgID совпадает, но при тесте связи из 1С система все равно выдает ошибку, велика вероятность того, что порт ККТ заблокирован службой передачи данных EoU (Ethernet over USB).

Выясним причину этого конфликта и настроим порты:

  1. Откроем Диспетчер устройств Windows и развернем ветку «Порты (COM и LPT)».
  2. При подключении Атол 30Ф по USB мы должны увидеть два виртуальных COM-порта (например, COM3 и COM4).
  3. Запустим утилиту «Тест драйвера ККТ» из комплекта Атол. В параметрах связи поочередно проверим оба порта на скорость связи (обычно 115200) и протокол связи.
  4. Определим, какой из портов отвечает на запросы кассы. Допустим, касса отозвалась на порту COM3.
  5. Второй порт (в нашем примере COM4) по умолчанию выделяется под службу EoU. Эта служба запускается в фоне как системная служба Windows и непрерывно опрашивает кассу для отправки накопленных чеков в ОФД. Если в настройках службы EoU указан тот же порт, который вы пытаетесь занять из 1С, связь установить не удастся.
  6. Откроем конфигурационный файл службы EoU (обычно он находится в каталоге установки драйвера, файл settings.xml) и убедимся, что там прописан порт передачи данных ОФД (COM4), а в настройках торгового оборудования 1С жестко зададим рабочий порт ККТ (COM3).

Альтернативное решение: почему стоит перейти на ДТО 10

Практика сопровождения торговых точек показывает, что линейка драйверов Атол 9.х была промежуточной и имеет ряд неустранимых программных ошибок. Производитель прекратил развитие этой ветки и полностью перешел на поддержку ДТО 10 (Драйвер ККТ 10.х).

Для надежной работы 1С 7.7 с современными кассами на платформе 5.0 рекомендуется отказаться от ДТО 9 и перевести систему на ДТО 10. Рассмотрим, как реализовать этот переход:

  1. Скачаем и установим 32-разрядную (x86) версию ДТО 10. Это критически важно: даже на 64-битной Windows платформа 1С 7.7 сможет работать только с 32-битной компонентой драйвера.
  2. Зарегистрируем библиотеку addin_fptr10_x86.dll в операционной системе. Для этого откроем командную строку от имени администратора и выполним регистрацию: regsvr32 "C:\Program Files (x86)\ATOL\Drivers10\KKT\bin\addin_fptr10_x86.dll"
  3. В коде нашей обработки обслуживания 1С 7.7 нам больше не нужно использовать функцию ЗагрузитьВнешнююКомпоненту(), так как новая компонента написана по стандартам, отличным от старого 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 платформы.

← На главную