Как решить проблему с установкой драйвера АТОЛ на 64-разрядной платформе 1С:Предприятие 8.3?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация Торговля и дистрибуция
← На главную

При работе в клиент-серверном варианте базы данных на платформе 1С:Предприятие 8.3 x64 под управлением СУБД MSSQL специалисты часто сталкиваются с ошибкой инициализации торгового оборудования АТОЛ. Программа выдает предупреждение: «Не установлен на текущем компьютере. Не определен тип: AddIn.ATOL_KKM_1C82_54FZ». Данная ситуация возникает из-за несовместимости разрядности процессов платформы 1С и подключаемых динамических библиотек драйвера.

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

Выясняем причину возникновения проблемы

Идентификатор AddIn.ATOL_KKM_1C82_54FZ указывает на использование устаревшей 8-й версии драйверов торгового оборудования АТОЛ (ДТО 8). Внешняя компонента для этой версии поставляется в виде 32-разрядного COM-объекта (динамической библиотеки FprnM1C82_54FZ.dll).

Основное правило операционных систем Windows и архитектуры x86/x64 заключается в следующем: 64-разрядный процесс не может напрямую загрузить в свое адресное пространство 32-разрядную DLL-библиотеку. Соответственно:

  1. Если у вас запущен 64-разрядный клиент 1С (1cv8.exe), он физически не сможет инициализировать 32-битную внешнюю компоненту АТОЛ.
  2. Если код работы с кассой выполняется на стороне сервера в контексте 64-битного рабочего процесса 1С (rphost.exe), сервер также выдаст ошибку отсутствия типа компоненты.

Рассмотрим подробнее четыре основных метода преодоления этой проблемы — от простой смены разрядности клиента до настройки системного моста COM+ и перехода на современные драйверы.


Метод 1. Использование 32-разрядного тонкого клиента 1С

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

Обратите внимание, что сервер 1С:Предприятия при этом может оставаться 64-разрядным. Разрядность сервера никак не влияет на работу локального оборудования, если вся работа с внешней компонентой инициализируется и выполняется строго на стороне клиента.

Разберем по шагам, как запустить базу через нужный клиент:

  1. Убедитесь, что на компьютере пользователя установлена 32-битная (x86) версия платформы 1С:Предприятие 8.3.
  2. В окне запуска 1С выберите нужную информационную базу и нажмите кнопку «Изменить».
  3. Перейдите на последнюю вкладку настроек и в поле «Разрядность» принудительно укажите значение «32 (x86)» вместо значения «Выбирать автоматически».
  4. Запустите сеанс. Теперь тонкий клиент запустится в 32-битной среде и сможет без проблем загрузить 32-битный драйвер FprnM1C82_54FZ.dll.

Метод 2. Переход на современный Драйвер ККТ АТОЛ 10.х (ДТО 10)

Использование устаревших драйверов ДТО 8 или ДТО 9 сильно ограничивает стабильность и безопасность системы. Самым правильным и современным решением является переход на 10-ю версию драйверов АТОЛ.

Разработчики АТОЛ полностью переписали архитектуру ДТО 10, сделав её кроссплатформенной. Интеграционная компонента поставляется сразу в двух вариантах: для 32-битных и для 64-битных приложений.

Проанализируем шаги перехода на ДТО 10:

  1. Скачайте с официального сайта АТОЛ актуальный дистрибутив ДТО 10 для Windows. Обратите внимание, что вам необходим установщик с поддержкой 64-битной архитектуры (например, файл с именем вида KKT10-...-windows64-setup.exe).
  2. Установите драйвер на компьютере, где физически подключена ККТ, а также на сервере 1С (если печать чеков будет происходить в фоновом режиме на сервере).
  3. Откройте 1С и перейдите в раздел управления подключаемым оборудованием (Администрирование — Подключаемое оборудование).
  4. Добавьте новое устройство ККТ и выберите обработчик драйвера «АТОЛ:ККТ с передачей данных в ОФД 10.х».
  5. Программа автоматически распакует и зарегистрирует нужную компоненту в зависимости от разрядности запущенного сеанса 1С.

Метод 3. Настройка обертки COM+ для работы старого драйвера в 64-битном окружении

Бывают ситуации, когда конфигурация сильно доработана, и быстро переписать код под требования ДТО 10 невозможно. Если при этом печать чеков обязательно должна выполняться на стороне 64-разрядного сервера 1С (например, при оплате заказов на сайте, когда фоновое задание на сервере должно пробить чек), стандартный запуск библиотеки не сработает.

В этом случае мы можем настроить специальный системный мост внутри Windows, используя технологию COM+ Application. Это позволит запускать 32-битный драйвер внутри отдельного процесса dllhost.exe, к которому 64-битный сервер 1С будет обращаться удаленно.

Рассмотрим этот процесс по шагам:

  1. Зарегистрируйте библиотеку АТОЛ в системе. Для этого откройте командную строку от имени Администратора и выполните регистрацию через 32-битную утилиту regsvr32: C:\Windows\SysWOW64\regsvr32.exe "C:\PathToDriver\FprnM1C82_54FZ.dll"
  2. Откройте утилиту настройки служб Windows. Для этого нажмите сочетание клавиш Win + R, введите команду dcomcnfg и нажмите Enter.
  3. В открывшемся дереве консоли перейдите по пути: Службы компонентов — Компьютеры — Мой компьютер — Приложения COM+.
  4. Нажмите правой кнопкой мыши на раздел «Приложения COM+», выберите Создать — Приложение.
  5. В мастере создания выберите «Создать новое пустое приложение». Введите понятное имя (например, Atol_KKT_Bridge) и обязательно установите переключатель в положение «Серверное приложение» (Server Application). Нажмите «Далее».
  6. В окне выбора учетной записи (Удостоверение) укажите пользователя, под которым запускается служба сервера 1С:Предприятие (обычно это локальный пользователь USR1CV8), или выберите системную учетную запись. Закончите создание приложения.
  7. Разверните созданное приложение Atol_KKT_Bridge, найдите внутри ветку «Компоненты» (Components).
  8. Нажмите правой кнопкой мыши по ветке «Компоненты» и выберите Создать — Компонент.
  9. В мастере выберите пункт «Установка новых компонентов» и укажите путь к зарегистрированному файлу FprnM1C82_54FZ.dll. Система создаст необходимые COM-классы интерфейса.

После выполнения этих шагов 64-битный рабочий процесс сервера 1С сможет успешно создавать COM-объект AddIn.ATOL_KKM_1C82_54FZ через системный посредник.


Метод 4. Разделение контекста выполнения (Клиент-Сервер)

Очень часто ошибка возникает из-за того, что разработчики при написании кода забывают ограничить выполнение процедур работы с торговым оборудованием клиентским контекстом.

Проанализируем правильный подход к структурированию кода 1С. Все вызовы внешней компоненты ККТ должны быть жестко локализованы на стороне клиента. Рассмотрим пример кода, который выполняет корректную инициализацию драйвера:


&НаКлиенте
Процедура ИнициализироватьКассуНаКлиенте()

    // Проверяем, подключена ли уже внешняя компонента
    Если Не ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверАтол8", "AtolDriver", ТипВнешнейКомпоненты.COM) Тогда
        ВызватьИсключение "Не удалось подключить внешнюю компоненту АТОЛ на клиенте!";
    КонецЕсли;

    Попытка
        // Создаем объект драйвера в контексте клиента
        ОбъектДрайвера = Новый COMОбъект("AddIn.FPrnM45");
        Сообщить("Связь с кассой успешно установлена на клиенте.");
    Исключение
        ЗаписатьЛогОшибки(ОписаниеОшибки());
        ВызватьИсключение "Ошибка создания объекта драйвера: " + ОписаниеОшибки();
    КонецПопытки;

КонецПроцедуры

При таком подходе на сервере 1С вообще не требуется устанавливать библиотеки АТОЛ, регистрировать COM-объекты или выполнять настройки разрядности. Сервер отвечает только за подготовку XML-пакета данных чека, а непосредственную отправку команды на печать выполняет тонкий клиент.

Обязательно проверьте свойства общих модулей, в которых содержатся процедуры работы с ККТ. В палитре свойств модуля должны стоять флаги «Клиент (управляемое приложение)» и «Вызов сервера», но флаг «Сервер» должен быть отключен.


Метод 5. Очистка кэша внешних компонент платформы 1С

Если вы уже проделали вышеописанные шаги (например, перешли на 32-битный тонкий клиент или установили ДТО 10), но платформа продолжает выдавать старую ошибку инициализации типа, велика вероятность влияния кэша внешних компонент.

1С кэширует динамические библиотеки локально в профиле пользователя операционной системы. Для очистки старых версий библиотек выполните следующие действия:

  1. Полностью закройте все сеансы 1С:Предприятия на рабочем компьютере.
  2. Перейдите в каталог хранения временных файлов пользователя. По умолчанию для операционной системы Windows путь выглядит так: C:\Users\Имя_Пользователя\AppData\Roaming\1C\1Cv8\ExtCompT\ (для некоторых старых конфигураций папка может называться 1Cv82).
  3. Найдите файлы, содержащие в названии Atol, Fprn или имеющие расширение .dll, относящиеся к интеграционным компонентам АТОЛ, и удалите их.
  4. Запустите 1С заново. При первом обращении к кассе платформа скачает свежую и корректную версию библиотеки из макета конфигурации и зарегистрирует её в системе без конфликтов со старыми версиями.

Используя предложенные методики, вы сможете быстро диагностировать и устранить любые проблемы, связанные с разрядностью драйверов торгового оборудования АТОЛ в среде 1С.

← На главную