Регистрация DLL и внешних компонент для 1С 8.3: COM, Native API, макет конфигурации

· 9 мин

Содержание

Чтобы зарегистрировать библиотеку в 1С, сначала определите её тип. COM-библиотеку (comcntr.dll, radmin.dll, драйвер оборудования) регистрируют в Windows командой regsvr32 из командной строки администратора. Внешнюю компоненту по технологии Native API не регистрируют в системе вообще: её упаковывают в ZIP-архив с файлом MANIFEST.XML и подключают из кода 1С методом ПодключитьВнешнююКомпоненту.

Типовая ситуация: разработчик прислал DLL, 1С выдаёт Недопустимая строка с указанием класса, а regsvr32 ругается на точку входа. Обычно это значит, что библиотеку пытаются зарегистрировать не тем способом или не той разрядности. Ниже — все варианты по порядку, от подготовки файлов до диагностики.

1. Какая у вас библиотека: подготовка файлов и форматов описания

От типа файла зависит весь дальнейший путь. Перепутать легко: расширение .dll бывает у трёх разных по устройству библиотек.

ТипКак узнатьКак регистрироватьГде работает
COM-серверв описании указан ProgID, например V83.COMConnectorregsvr32 в Windowsтолько Windows, клиент и сервер
.NET-сборка с COM-видимостьюпоставщик пишет «.NET», в комплекте .tlbregasm /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 для консоли администрирования кластера.

Пошагово

  1. Откройте командную строку от имени администратора: меню «Пуск» → введите cmd → правая кнопка → «Запуск от имени администратора».
  2. Выясните разрядность DLL и установленной платформы. 64-битная платформа лежит в C:\Program Files\1cv8\, 32-битная — в C:\Program Files (x86)\1cv8\.
  3. Выполните команду для 64-битной библиотеки:
regsvr32 "C:\Program Files\1cv8\8.3.24.1467\bin\comcntr.dll"
  1. Для 32-битной библиотеки на 64-битной Windows запускайте regsvr32 из папки SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.24.1467\bin\comcntr.dll"
  1. Дождитесь окна «Успешное выполнение 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) есть справочник «Внешние компоненты». Через него администратор загружает архив компоненты в базу без Конфигуратора, а код конфигурации потом находит его по идентификатору.

Как открыть:

  1. Включите команду «Все функции»: Сервис и настройки → Параметры → флажок «Отображать команду “Все функции”».
  2. Откройте Все функции → Справочники → Внешние компоненты.
  3. Нажмите команду добавления из файла и выберите ZIP-архив компоненты.
  4. Проверьте карточку: идентификатор, версию, поддерживаемые ОС. Сохраните.

Этот путь годится, когда компоненту требует сама типовая конфигурация: например, для работы с торговым оборудованием или сканированием. Подключить через справочник произвольную DLL, которую код конфигурации не ждёт, не получится — нужен программный вызов.

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

4. Программная регистрация библиотеки в конфигурации

Самый надёжный способ для Native API — положить архив в конфигурацию и подключать оттуда. Тогда компонента переезжает вместе с базой и обновлением.

Шаг 1. Добавьте общий макет

  1. В Конфигураторе откройте Общие → Общие макеты и добавьте новый макет.
  2. Тип макета — «Двоичные данные». Имя, например, КомпонентаСканер.
  3. Загрузите в макет ZIP-архив с MANIFEST.XML.
  4. Сохраните и выполните «Обновить конфигурацию базы данных» (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С и как их снять

Диагностика: выберите симптом

Если не помогло

  1. Проверьте разрядность процесса: в Диспетчере задач у 32-битных процессов в столбце «Платформа» указано «32 бита».
  2. Посмотрите, куда указывает регистрация: в редакторе реестра найдите ProgID в HKEY_CLASSES_ROOT, откройте CLSID и проверьте путь в InprocServer32.
  3. Для сервера включите технологический журнал с событием EXCP и повторите вызов: в журнале будет точный текст ошибки загрузки.

Перезапуск службы «Агент сервера 1С:Предприятия» обрывает все сеансы пользователей. Делайте это вечером или предупредите людей заранее.

8. Частые вопросы

Нужно ли регистрировать Native API компоненту через regsvr32?
Нет. Такие компоненты в Windows не регистрируются. Их подключают из 1С методом ПодключитьВнешнююКомпоненту или устанавливают методом УстановитьВнешнююКомпоненту.
Где хранить архив компоненты: в макете или в файле на диске?
Лучше в общем макете конфигурации или расширения. Тогда компонента переносится вместе с базой и не зависит от путей на конкретном компьютере.
Можно ли использовать 32-битную DLL с 64-битным сервером 1С?
Нет. Процесс загружает библиотеки только своей разрядности. Нужна 64-битная версия DLL или 32-битный сервер.
Почему после обновления платформы перестало работать COM-соединение?
Регистрация comcntr.dll указывает на папку старой версии. Снимите старую регистрацию и зарегистрируйте comcntr.dll из папки новой платформы.
Работают ли COM-объекты на сервере 1С под Linux?
Нет. COM — технология Windows. Под Linux используйте компоненты Native API, собранные для Linux.