При работе в клиент-серверном варианте базы данных на платформе 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-библиотеку. Соответственно:
1cv8.exe), он физически не сможет инициализировать 32-битную внешнюю компоненту АТОЛ.rphost.exe), сервер также выдаст ошибку отсутствия типа компоненты.Рассмотрим подробнее четыре основных метода преодоления этой проблемы — от простой смены разрядности клиента до настройки системного моста COM+ и перехода на современные драйверы.
Самый простой и быстрый способ решения, если кассовый аппарат подключен локально к рабочему месту пользователя, — это использование правильной версии клиента 1С.
Обратите внимание, что сервер 1С:Предприятия при этом может оставаться 64-разрядным. Разрядность сервера никак не влияет на работу локального оборудования, если вся работа с внешней компонентой инициализируется и выполняется строго на стороне клиента.
Разберем по шагам, как запустить базу через нужный клиент:
FprnM1C82_54FZ.dll.Использование устаревших драйверов ДТО 8 или ДТО 9 сильно ограничивает стабильность и безопасность системы. Самым правильным и современным решением является переход на 10-ю версию драйверов АТОЛ.
Разработчики АТОЛ полностью переписали архитектуру ДТО 10, сделав её кроссплатформенной. Интеграционная компонента поставляется сразу в двух вариантах: для 32-битных и для 64-битных приложений.
Проанализируем шаги перехода на ДТО 10:
KKT10-...-windows64-setup.exe).Бывают ситуации, когда конфигурация сильно доработана, и быстро переписать код под требования ДТО 10 невозможно. Если при этом печать чеков обязательно должна выполняться на стороне 64-разрядного сервера 1С (например, при оплате заказов на сайте, когда фоновое задание на сервере должно пробить чек), стандартный запуск библиотеки не сработает.
В этом случае мы можем настроить специальный системный мост внутри Windows, используя технологию COM+ Application. Это позволит запускать 32-битный драйвер внутри отдельного процесса dllhost.exe, к которому 64-битный сервер 1С будет обращаться удаленно.
Рассмотрим этот процесс по шагам:
regsvr32:
C:\Windows\SysWOW64\regsvr32.exe "C:\PathToDriver\FprnM1C82_54FZ.dll"
Win + R, введите команду dcomcnfg и нажмите Enter.Atol_KKT_Bridge) и обязательно установите переключатель в положение «Серверное приложение» (Server Application). Нажмите «Далее».USR1CV8), или выберите системную учетную запись. Закончите создание приложения.Atol_KKT_Bridge, найдите внутри ветку «Компоненты» (Components).FprnM1C82_54FZ.dll. Система создаст необходимые COM-классы интерфейса.После выполнения этих шагов 64-битный рабочий процесс сервера 1С сможет успешно создавать COM-объект AddIn.ATOL_KKM_1C82_54FZ через системный посредник.
Очень часто ошибка возникает из-за того, что разработчики при написании кода забывают ограничить выполнение процедур работы с торговым оборудованием клиентским контекстом.
Проанализируем правильный подход к структурированию кода 1С. Все вызовы внешней компоненты ККТ должны быть жестко локализованы на стороне клиента. Рассмотрим пример кода, который выполняет корректную инициализацию драйвера:
&НаКлиенте
Процедура ИнициализироватьКассуНаКлиенте()
// Проверяем, подключена ли уже внешняя компонента
Если Не ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверАтол8", "AtolDriver", ТипВнешнейКомпоненты.COM) Тогда
ВызватьИсключение "Не удалось подключить внешнюю компоненту АТОЛ на клиенте!";
КонецЕсли;
Попытка
// Создаем объект драйвера в контексте клиента
ОбъектДрайвера = Новый COMОбъект("AddIn.FPrnM45");
Сообщить("Связь с кассой успешно установлена на клиенте.");
Исключение
ЗаписатьЛогОшибки(ОписаниеОшибки());
ВызватьИсключение "Ошибка создания объекта драйвера: " + ОписаниеОшибки();
КонецПопытки;
КонецПроцедуры
При таком подходе на сервере 1С вообще не требуется устанавливать библиотеки АТОЛ, регистрировать COM-объекты или выполнять настройки разрядности. Сервер отвечает только за подготовку XML-пакета данных чека, а непосредственную отправку команды на печать выполняет тонкий клиент.
Обязательно проверьте свойства общих модулей, в которых содержатся процедуры работы с ККТ. В палитре свойств модуля должны стоять флаги «Клиент (управляемое приложение)» и «Вызов сервера», но флаг «Сервер» должен быть отключен.
Если вы уже проделали вышеописанные шаги (например, перешли на 32-битный тонкий клиент или установили ДТО 10), но платформа продолжает выдавать старую ошибку инициализации типа, велика вероятность влияния кэша внешних компонент.
1С кэширует динамические библиотеки локально в профиле пользователя операционной системы. Для очистки старых версий библиотек выполните следующие действия:
C:\Users\Имя_Пользователя\AppData\Roaming\1C\1Cv8\ExtCompT\ (для некоторых старых конфигураций папка может называться 1Cv82).Atol, Fprn или имеющие расширение .dll, относящиеся к интеграционным компонентам АТОЛ, и удалите их.Используя предложенные методики, вы сможете быстро диагностировать и устранить любые проблемы, связанные с разрядностью драйверов торгового оборудования АТОЛ в среде 1С.