Регистрация DLL и внешних компонент для 1С 8.3: COM, Native API, макет конфигурации
Содержание
Чтобы зарегистрировать библиотеку в 1С, сначала определите её тип. COM-библиотеку (comcntr.dll, radmin.dll, драйвер оборудования) регистрируют в Windows командой regsvr32 из командной строки администратора. Внешнюю компоненту по технологии Native API не регистрируют в системе вообще: её упаковывают в ZIP-архив с файлом MANIFEST.XML и подключают из кода 1С методом ПодключитьВнешнююКомпоненту.
Типовая ситуация: разработчик прислал DLL, 1С выдаёт Недопустимая строка с указанием класса, а regsvr32 ругается на точку входа. Обычно это значит, что библиотеку пытаются зарегистрировать не тем способом или не той разрядности. Ниже — все варианты по порядку, от подготовки файлов до диагностики.
1. Какая у вас библиотека: подготовка файлов и форматов описания
От типа файла зависит весь дальнейший путь. Перепутать легко: расширение .dll бывает у трёх разных по устройству библиотек.
| Тип | Как узнать | Как регистрировать | Где работает |
|---|---|---|---|
| COM-сервер | в описании указан ProgID, например V83.COMConnector | regsvr32 в Windows | только Windows, клиент и сервер |
| .NET-сборка с COM-видимостью | поставщик пишет «.NET», в комплекте .tlb | regasm /codebase | только Windows |
| Native API | поставляется ZIP-архивом или набором DLL/SO для разных ОС | не регистрируется, подключается из 1С | Windows, Linux, macOS, веб-клиент |
📦 Что проверить в комплекте поставки:
- 🔹 разрядность: отдельные файлы под 32 и 64 бита или один;
- 🔹 ProgID или имя класса — без него объект в коде не создать;
- 🔹 для Native API — наличие
MANIFEST.XMLвнутри архива; - 🔹 документацию по методам и свойствам объекта.
Формат MANIFEST.XML для компоненты Native API
Манифест описывает, какой файл брать под какую ОС и архитектуру. Платформа читает его при установке и сама выбирает нужную библиотеку.
<?xml version="1.0" encoding="UTF-8"?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle">
<component os="Windows" path="AddInWin32.dll" type="native" arch="i386"/>
<component os="Windows" path="AddInWin64.dll" type="native" arch="x86_64"/>
<component os="Linux" path="libAddInLin64.so" type="native" arch="x86_64"/>
</bundle>
Файлы библиотек и манифест кладут в корень архива, без вложенных папок. Имена в атрибуте path должны совпадать с именами файлов посимвольно: в Linux регистр букв важен.
JSON для описания компоненты платформа не использует. Если поставщик прислал JSON, это настройки самой библиотеки, а не манифест для 1С.
2. Регистрация COM-библиотеки в Windows через regsvr32
Классический пример — comcntr.dll, которая даёт COM-соединение V83.COMConnector для обменов и внешних программ. Так же регистрируют radmin.dll для консоли администрирования кластера.
Пошагово
- Откройте командную строку от имени администратора: меню «Пуск» → введите
cmd→ правая кнопка → «Запуск от имени администратора». - Выясните разрядность DLL и установленной платформы. 64-битная платформа лежит в
C:\Program Files\1cv8\, 32-битная — вC:\Program Files (x86)\1cv8\. - Выполните команду для 64-битной библиотеки:
regsvr32 "C:\Program Files\1cv8\8.3.24.1467\bin\comcntr.dll"
- Для 32-битной библиотеки на 64-битной Windows запускайте
regsvr32из папкиSysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.24.1467\bin\comcntr.dll"
- Дождитесь окна «Успешное выполнение DllRegisterServer». Номер версии в пути замените на свой.
Регистрировать нужно DLL ровно той версии платформы, через которую идёт подключение. После обновления платформы старая регистрация указывает на удалённую папку — перерегистрируйте comcntr.dll после каждого обновления платформы.
Как проверить, что регистрация прошла
Окно «Успешное выполнение» говорит только о том, что запись попала в реестр. Проверьте, что объект реально создаётся. Быстрее всего — из PowerShell той же разрядности, что и 1С:
$c = New-Object -ComObject V83.COMConnector
$c.GetType().FullName
Если команда вернула имя типа без ошибки, класс доступен. Для 32-битной проверки запускайте PowerShell из C:\Windows\SysWOW64\WindowsPowerShell\v1.0\.
Пример с консолью администрирования: если оснастка кластера не открывается или пишет, что класс не зарегистрирован, перерегистрируйте radmin.dll из папки bin установленной платформы той же командой regsvr32.
Как снять регистрацию
Перед регистрацией новой версии полезно удалить старую запись:
regsvr32 /u "C:\Program Files\1cv8\8.3.23.1865\bin\comcntr.dll"
.NET-библиотеки
Сборку .NET регистрируют утилитой regasm из каталога .NET Framework, тоже от администратора:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /codebase "C:\Lib\MyLib.dll"
Для 32-битного клиента берите Framework вместо Framework64. Ключ /codebase прописывает в реестр путь к файлу, поэтому DLL после регистрации не переносите.
3. Регистрация компоненты через интерфейс администрирования БСП
В типовых конфигурациях на БСП 3.1 и новее (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть справочник «Внешние компоненты». Через него администратор загружает архив компоненты в базу без Конфигуратора, а код конфигурации потом находит его по идентификатору.
Как открыть:
- Включите команду «Все функции»:
Сервис и настройки → Параметры→ флажок «Отображать команду “Все функции”». - Откройте
Все функции → Справочники → Внешние компоненты. - Нажмите команду добавления из файла и выберите ZIP-архив компоненты.
- Проверьте карточку: идентификатор, версию, поддерживаемые ОС. Сохраните.
Этот путь годится, когда компоненту требует сама типовая конфигурация: например, для работы с торговым оборудованием или сканированием. Подключить через справочник произвольную DLL, которую код конфигурации не ждёт, не получится — нужен программный вызов.
Для подключаемого оборудования (ККТ, сканеры, весы) драйверы ставят в отдельном разделе: Администрирование → Подключаемое оборудование. Там же есть установка драйвера на рабочее место.
4. Программная регистрация библиотеки в конфигурации
Самый надёжный способ для Native API — положить архив в конфигурацию и подключать оттуда. Тогда компонента переезжает вместе с базой и обновлением.
Шаг 1. Добавьте общий макет
- В Конфигураторе откройте
Общие → Общие макетыи добавьте новый макет. - Тип макета — «Двоичные данные». Имя, например,
КомпонентаСканер. - Загрузите в макет ZIP-архив с
MANIFEST.XML. - Сохраните и выполните «Обновить конфигурацию базы данных» (F7).
Если править основную конфигурацию нельзя, макет добавляют в расширение конфигурации (доступны с платформы 8.3.6).
Шаг 2. Подключите на сервере
&НаСервере
Процедура ПодключитьКомпонентуНаСервере()
Подключено = ПодключитьВнешнююКомпоненту(
"ОбщийМакет.КомпонентаСканер",
"Scanner",
ТипВнешнейКомпоненты.Native);
Если Не Подключено Тогда
ВызватьИсключение "Не удалось подключить компоненту Scanner";
КонецЕсли;
Компонента = Новый("AddIn.Scanner.Main");
Версия = Компонента.ПолучитьВерсию();
Сообщить("Версия компоненты: " + Версия);
КонецПроцедуры
Имя объекта собирается по шаблону AddIn.<Имя из второго параметра>.<Имя класса>. Имя класса (Main) и метод ПолучитьВерсию здесь условные — берите их из документации компоненты.
Шаг 3. Подключите на клиенте
На клиенте компоненту сначала устанавливают на компьютер пользователя, затем подключают. На платформе 8.3.18 и выше удобно писать асинхронно:
&НаКлиенте
Асинх Процедура ПодключитьКомпоненту(Команда)
Путь = "ОбщийМакет.КомпонентаСканер";
Подключено = Ждать ПодключитьВнешнююКомпонентуАсинх(Путь, "Scanner", ТипВнешнейКомпоненты.Native);
Если Не Подключено Тогда
Ждать УстановитьВнешнююКомпонентуАсинх(Путь);
Подключено = Ждать ПодключитьВнешнююКомпонентуАсинх(Путь, "Scanner", ТипВнешнейКомпоненты.Native);
КонецЕсли;
Если Подключено Тогда
Компонента = Новый("AddIn.Scanner.Main");
Иначе
Сообщить("Компонента не подключена");
КонецЕсли;
КонецПроцедуры
При первой установке платформа покажет пользователю запрос на установку. Это нормальное поведение, его нельзя отключить из кода.
Подключение из файла на диске
Если архив лежит в общей папке, первым параметром передают полный путь к файлу:
Подключено = ПодключитьВнешнююКомпоненту("\\srv\addins\Scanner.zip", "Scanner", ТипВнешнейКомпоненты.Native);
Вариант подходит для отладки. В рабочей базе он хрупкий: переименовали папку или сменили права — и компонента перестала подключаться у всех пользователей сразу.
Подключение COM-объекта из кода
Для зарегистрированной COM-библиотеки ничего подключать не нужно, объект создают по ProgID:
Коннектор = Новый COMОбъект("V83.COMConnector");
COM-объекты работают только в Windows и только в толстом и тонком клиенте или на сервере под Windows. В веб-клиенте и на сервере Linux этот код упадёт.
5. Обработчики событий компоненты и контекст выполнения
Некоторые компоненты сами присылают данные в 1С: сканер штрихкодов отдаёт считанный код, весы — вес. Для этого компонента вызывает внешнее событие, а форма его обрабатывает.
В управляемой форме это обработчик события формы «ВнешнееСобытие». Создайте его в палитре свойств формы, на вкладке событий:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Источник = "Scanner" И Событие = "BarCodeValue" Тогда
ОбработатьШтрихкод(Данные);
КонецЕсли;
КонецПроцедуры
Значения Источник и Событие задаёт разработчик компоненты, сверяйтесь с его описанием.
Где подключать: клиент или сервер
| Контекст | Что учесть |
|---|---|
| Клиент (тонкий, толстый) | библиотека нужна под разрядность клиента; установка на каждый компьютер |
| Веб-клиент | только Native API, нужно расширение браузера для 1С |
| Сервер 1С | библиотека нужна под ОС и разрядность сервера; работает в рабочем процессе rphost под учётной записью службы |
| Файловая база | «сервер» — это тот же компьютер, где запущен клиент |
Компоненту, которая работает с оборудованием на рабочем месте, подключайте на клиенте. Компоненту для расчётов, шифрования или разбора файлов — на сервере, чтобы не ставить её каждому пользователю.
6. Права доступа и безопасность при регистрации DLL
⚙️ Что нужно на каждом этапе:
- 🔐
regsvr32иregasm— только с правами локального администратора Windows; - 🔐 COM на сервере 1С регистрируют на самом сервере, а не на компьютере пользователя;
- 🔐 учётная запись службы сервера 1С должна иметь право на чтение папки с DLL;
- 🔐 изменение общих макетов и расширений — роль с административными правами в 1С.
Безопасный режим и профили безопасности
Внешние обработки и расширения могут выполняться в безопасном режиме. В нём создавать COM-объекты и подключать внешние компоненты нельзя.
На сервере 1С администратор может включить профили безопасности в консоли кластера. Тогда в профиле нужно явно разрешить нужные COM-классы и внешние компоненты, иначе подключение будет отклонено с ошибкой о нарушении прав.
Подключайте только библиотеки из проверенного источника. Код внешней компоненты выполняется с правами процесса 1С. На сервере это значит доступ ко всем базам кластера от имени службы.
7. Ошибки при регистрации библиотеки в 1С и как их снять
Если не помогло
- Проверьте разрядность процесса: в Диспетчере задач у 32-битных процессов в столбце «Платформа» указано «32 бита».
- Посмотрите, куда указывает регистрация: в редакторе реестра найдите ProgID в
HKEY_CLASSES_ROOT, откройте CLSID и проверьте путь вInprocServer32. - Для сервера включите технологический журнал с событием
EXCPи повторите вызов: в журнале будет точный текст ошибки загрузки.
Перезапуск службы «Агент сервера 1С:Предприятия» обрывает все сеансы пользователей. Делайте это вечером или предупредите людей заранее.