При настройке сканеров штрихкода в среде «1С:Предприятие» технические специалисты часто сталкиваются с ошибкой при попытке ручной регистрации библиотеки ScanOPOS64.dll или ScanOPOS.dll. Система выдает сообщение: «Не удалось выполнить вызов DLLRegisterServer, код ошибки 0x80070005» (или аналогичное). Попытки запуска консоли от имени администратора или использование разных версий утилиты regsvr32 не всегда приносят результат. Разберем подробно, почему это происходит и как правильно интегрировать драйвер в систему.
Проанализируем архитектуру современных драйверов «1С». В обсуждении на форуме и в документации ИТС подчеркивается, что компоненты с припиской NativeWin разработаны по технологии Native API. В отличие от старых COM-компонент, они имеют принципиальные отличия в механизме взаимодействия с операционной системой:
DLLRegisterServer. Именно поэтому при попытке выполнить команду regsvr32 Windows сообщает о невозможности вызова этой функции — её просто нет в коде DLL.Следовательно, если мы видим ошибку вызова DLLRegisterServer, это первый признак того, что мы пытаемся зарегистрировать Native-компоненту способом, предназначенным для COM-объектов или ActiveX-контейнеров. Этого делать не нужно. При необходимости можно использовать утилиту для передачи данных из COM-порта сканера через эмуляцию клавиатуры.
Одной из частых причин проблем является путаница в разрядности (32-бит против 64-бит). Рассмотрим, как правильно сопоставить компоненты:
ScanOPOS.dll).ScanOPOS64.dll).Важно помнить, что если мы все же работаем с COM-компонентой (не Native), то для 32-битных библиотек на 64-битной ОС нужно использовать утилиту regsvr32, расположенную по пути: C:\Windows\SysWOW64\regsvr32.exe.
Как показывает практика и опыт участников обсуждения, корень проблемы часто кроется в самой конфигурации. В современных решениях 1С (УТ 11, Розница 2/3, БП 3) за работу с оборудованием отвечает подсистема БПО. Рассмотрим пошагово, как исправить ошибку «Драйвер не зарегистрирован» через инструменты 1С:
Выясним, соответствует ли ваша версия БПО версии используемой Платформы и БСП (Библиотеки стандартных подсистем). Как отметил автор темы, зачастую переустановка или обновление БПО решает проблему. Если компоненты драйвера в макетах конфигурации устарели или не адаптированы к текущему релизу платформы, 1С не сможет корректно распаковать и подключить их.
При первой установке драйвера 1С распаковывает DLL из макета во временную папку пользователя. Если там остались файлы от предыдущих неудачных попыток, возникнет конфликт. Выполним следующие действия:
%AppData%\Local\1C\1cv8\ExtCompDir.Для работы ScanOPOSNativeWin в системе должны быть установлены пакеты Microsoft Visual C++ Redistributable. Если нужной версии рантайма (часто это версии 2015-2022) нет, 1С выдаст общую ошибку регистрации, хотя на самом деле Windows просто не может инициализировать библиотеку из-за отсутствия зависимых файлов. Рекомендуем установить обе версии пакетов — x86 и x64.
Если вы разрабатываете собственную обработку, проанализируем пример кода для подключения Native-компоненты без регистрации в реестре. Мы используем метод ПодключитьВнешнююКомпоненту, указывая путь к файлу или имя макета:
// Пример подключения Native-компоненты из макета
Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканераNative", "ScanerAlias", ТипВнешнейКомпоненты.Native);
Если Результат Тогда
Сканер = Новый("AddIn.ScanerAlias.ScanOPOS");
// Дальнейшая настройка объекта
Иначе
Сообщить("Не удалось загрузить компоненту!");
КонецЕсли;
В данном примере мы видим, что регистрация в Windows не требуется, так как 1С сама управляет жизненным циклом библиотеки Native. Для реализации альтернативного сценария без драйверов оборудования подойдёт пример обработки событий сканера в разрыв клавиатуры.
Подводя итог, если вы столкнулись с ошибкой регистрации ScanOPOS, выполните следующие действия:
1cv8.exe (а не просто операционной системы).exe-файла, запустите его от имени администратора. Он сам установит необходимые зависимости и подготовит среду.Соблюдение этих правил позволит избежать большинства ошибок при интеграции торгового оборудования и обеспечит стабильную работу сканеров штрихкодов в системе.