К статье
Практический материал

Разработка и Конфигурация · 10 мин

ActiveX в 1С: что это и как с ним работать

Что такое ActiveX в 1С, где применяется, как подключить компонент через ЗагрузитьВнешнююКомпоненту и CreateObject, типичные ошибки и современные альтернативы.

ActiveX — это технология Microsoft для создания повторно используемых программных компонентов (COM-объектов), которые одно приложение может подключать и вызывать из другого. В контексте 1С под ActiveX обычно понимают внешние компоненты и OLE/COM-объекты, через которые платформа обращается к оборудованию, сторонним библиотекам и функциям операционной системы.

Исторически ActiveX широко применялся в 1С:Предприятии 7.7 и ранних версиях 8.x: через него подключали сканеры штрих-кодов, фискальные регистраторы, элементы управления на формах (например, поле HTML-документа или табличные компоненты). С развитием платформы прямое использование ActiveX вытеснили внешние компоненты по технологии Native API и встроенные механизмы интеграции, но на старых конфигурациях и при работе с устаревшим оборудованием ActiveX встречается до сих пор.

Понимание того, что такое ActiveX и как он встраивается в 1С, нужно в трёх ситуациях: при сопровождении старых конфигураций, при подключении торгового оборудования с драйверами в виде COM-объектов и при миграции решений на современные версии платформы, где поддержка ActiveX ограничена или отсутствует.

Что такое ActiveX и как он связан с 1С

ActiveX — надстройка над Component Object Model (COM), позволяющая регистрировать в системе компоненты с уникальным идентификатором (ProgID или CLSID) и вызывать их методы из любого приложения, которое умеет работать с COM. Компонент поставляется обычно в виде DLL или OCX-файла, который регистрируется в реестре Windows командой regsvr32.

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

Важно понимать границу терминов: в обиходе «ActiveX в 1С» часто называют любые внешние компоненты, включая компоненты по технологии Native API. Это разные вещи: Native API — собственный интерфейс фирмы «1С», кроссплатформенный и не зависящий от реестра Windows, тогда как ActiveX — чисто Windows-технология.

Где ActiveX применялся в 1С

Классические сценарии использования ActiveX в 1С охватывают несколько областей. Знание этих сценариев помогает быстро распознать технологию в чужом коде при сопровождении.

  • Торговое оборудование: сканеры штрих-кодов, фискальные регистраторы, терминалы сбора данных, весы — драйверы многих устройств поставлялись как COM/ActiveX-объекты.
  • Элементы управления на формах: в 1С 7.7 и ранних 8.x на форму можно было поместить ActiveX-элемент — календарь, браузер, таблицу стороннего производителя.
  • Доступ к системным функциям: работа с реестром, WMI, файловыми диалогами через объекты Windows.
  • Интеграция с офисными пакетами: хотя чаще для этого используют COM-соединение с Excel/Word, механизм тот же.

В 1С 7.7 типичный пример — компонент V7Plus.dll, расширявший возможности платформы (работа с почтой, XML, криптографией). В 8.x ActiveX-элементы на формах поддерживались в обычных формах толстого клиента, но не работают в управляемых формах и веб-клиенте.

Как подключить ActiveX-компонент в 1С

Подключение состоит из трёх этапов: регистрация компонента в Windows, создание объекта в коде 1С и вызов его методов. Ниже — типовой порядок для 1С 8.x.

Порядок подключения
  1. 1
    Убедитесь, что разрядность компонента совпадает с разрядностью клиента 1С: 32-битный ActiveX не загрузится в 64-битный процесс и наоборот.
  2. 2
    Зарегистрируйте DLL командой regsvr32 от имени администратора (для 32-битной DLL на 64-битной Windows используйте regsvr32 из папки SysWOW64).
  3. 3
    В коде 1С создайте объект: ПодключитьВнешнююКомпоненту() для Native API либо Новый COMОбъект("ProgID") для COM/ActiveX.
  4. 4
    Вызовите методы компонента и обработайте возвращаемые значения и исключения через Попытка/Исключение.
  5. 5
    Проверьте работу на целевом компьютере пользователя, а не только на машине разработчика.

Пример создания COM-объекта во встроенном языке 1С:

Попытка

Объект = Новый COMОбъект("AddIn.MyComponent");

Результат = Объект.ВыполнитьДействие(Параметр);

Исключение

Сообщить("Не удалось создать компонент: " + ОписаниеОшибки());

КонецПопытки;

ProgID компонента указывает производитель в документации. Если его нет, идентификатор можно найти в реестре Windows в ветке HKEY_CLASSES_ROOT или посмотреть утилитой просмотра OLE/COM-объектов.

Ограничения и совместимость

Главное ограничение ActiveX — привязка к Windows. Тонкий клиент и веб-клиент под Linux или macOS, а также серверная часть на Linux не смогут работать с такими компонентами. Если код с ActiveX выполняется на сервере 1С, компонент должен быть зарегистрирован именно на сервере, а не на клиенте.

Второе ограничение — разрядность. 64-битный клиент 1С загружает только 64-битные компоненты. Многие старые драйверы оборудования существуют только в 32-битной версии, что вынуждает запускать 32-битный клиент или искать обновлённый драйвер.

Третий момент — управляемые формы. ActiveX-элементы, встроенные в интерфейс, работают только в обычных формах толстого клиента. При переходе конфигурации на управляемые формы такие элементы перестают отображаться, и функциональность приходится переписывать.

Контрольные точки

Как проверить результат

Регистрация компонента
Норма

regsvr32 сообщает об успехе, ProgID находится в реестре

Тревожный признак

Ошибка 0x80004005 или «модуль не найден»

Создание объекта в 1С
Норма

Новый COMОбъект() выполняется без исключения

Тревожный признак

Исключение «Недопустимая строка с указанием класса»

Разрядность
Норма

Разрядность клиента 1С и DLL совпадают

Тревожный признак

Компонент 32-битный, а клиент 64-битный — объект не создаётся

Типичные ошибки при работе с ActiveX в 1С

Большинство проблем при подключении ActiveX сводится к нескольким повторяющимся причинам. Их стоит проверять в первую очередь, прежде чем искать дефект в самом компоненте.

Типичные ошибки
01
Регистрация 32-битной DLL через 64-битный regsvr32 — компонент регистрируется не в том разделе реестра и не находится клиентом.
02
Создание COM-объекта на сервере, где компонент не установлен, — код работает у разработчика и падает в продуктиве.
03
Отсутствие обработки исключений — любой сбой драйвера обрывает выполнение всей процедуры.
04
Использование ActiveX-элементов формы при плановом переходе на управляемые формы — вложенный труд пропадёт.
05
Игнорирование прав: регистрация и первый запуск драйвера требуют прав администратора, у рядового пользователя их может не быть.

Отдельная категория проблем — утечки ресурсов. COM-объекты освобождаются сборщиком мусора 1С не всегда предсказуемо. Если компонент захватывает порт сканера или файл, а объект не освобождён, повторное подключение может завершиться ошибкой «устройство занято». Явно присваивайте переменной Неопределено после завершения работы.

Современные альтернативы ActiveX в 1С

Для новых разработок ActiveX применять не рекомендуется: фирма «1С» предлагает более надёжные механизмы, которые не зависят от реестра Windows и работают кроссплатформенно.

Сравнение вариантов

ActiveX / COM

Подходит только для поддержки старых конфигураций и оборудования без новых драйверов. Только Windows, зависимость от реестра и разрядности.

Внешние компоненты Native API

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

HTTP/веб-сервисы

Подходит для интеграции с оборудованием и системами, имеющими сетевой интерфейс. Не требует установки компонентов на клиенте.

Драйверы по стандартам 1С (БПО)

Подходит для торгового оборудования: типовая библиотека подключаемого оборудования уже поддерживает большинство устройств.

Маршрут решения

Как выбрать действие

Конфигурация старая, оборудование работает через ActiveX и заменить его нельзяОставьте ActiveX, зафиксируйте разрядность клиента и задокументируйте порядок регистрации DLL
Разрабатывается новая функциональность для Windows-клиентовИспользуйте внешнюю компоненту Native API
Нужна работа в веб-клиенте или на LinuxПереносите логику на серверные вызовы, HTTP-сервисы или Native API
Подключается стандартное торговое оборудованиеСначала проверьте готовый драйвер в библиотеке подключаемого оборудования типовой конфигурации

При миграции со старой конфигурации, где ActiveX использовался для элементов интерфейса, функциональность обычно переносят на поле HTML-документа в управляемых формах или на встроенные элементы платформы. Для оборудования — на актуальные драйверы, совместимые с библиотекой подключаемого оборудования.

Часто задаваемые вопросы

Работает ли ActiveX в веб-клиенте 1С?

Нет. Веб-клиент выполняется в браузере и не имеет доступа к реестру Windows и локальным COM-объектам. Для работы с оборудованием в веб-клиенте используются внешние компоненты Native API, собранные в том числе под браузерное окружение, либо серверные механизмы интеграции.

Что делать, если COMОбъект выдаёт ошибку «Недопустимая строка с указанием класса»?

Эта ошибка означает, что компонент с указанным ProgID не зарегистрирован в системе или зарегистрирован не в той разрядности. Проверьте наличие ProgID в реестре, повторно зарегистрируйте DLL нужной версией regsvr32 и убедитесь, что разрядность клиента 1С совпадает с разрядностью компонента.

Чем ActiveX отличается от внешней компоненты 1С?

ActiveX — универсальная технология Microsoft, не зависящая от 1С: компонент регистрируется в Windows и может вызываться из любого приложения. Внешняя компонента Native API — спецификация фирмы «1С»: такой компонент подключается только из 1С через ПодключитьВнешнююКомпоненту, не требует записи в реестр и может работать на разных платформах.

Можно ли использовать ActiveX на сервере 1С под Linux?

Нет, COM и ActiveX существуют только в Windows. Если сервер 1С работает на Linux, весь код, зависящий от ActiveX, нужно переносить на Windows-клиенты либо заменять кроссплатформенными механизмами — веб-сервисами, Native API или файловым обменом.

Безопасно ли регистрировать сторонние ActiveX-компоненты?

Компонент выполняется с правами пользователя, запустившего 1С, и имеет доступ к файловой системе и сети. Регистрируйте только DLL от доверенных поставщиков, проверяйте цифровую подпись файла и тестируйте на изолированном стенде. Антивирусные решения нередко блокируют регистрацию неизвестных ActiveX, что также стоит учитывать при развёртывании.

Итог

Что важно запомнить

ActiveX в 1С — это COM-компоненты Windows для доступа к оборудованию и внешним библиотекам. Технология работает только под Windows, требует совпадения разрядности и регистрации в реестре, не поддерживается в управляемых формах и веб-клиенте. Для новых решений используйте Native API, HTTP-интеграции и типовые драйверы оборудования.