Разработка и Конфигурация · 12 мин
ActiveX в 1С 8: назначение, подключение и практика работы
Что такое ActiveX в 1С 8, как подключить внешнюю ActiveX-компоненту, работать с ней из встроенного языка и какие ограничения и риски учитывать.
ActiveX в 1С 8 — это механизм, позволяющий использовать в прикладном решении внешние COM-компоненты (ActiveX-элементы управления), зарегистрированные в операционной системе Windows. Через ActiveX из встроенного языка 1С можно обращаться к сторонним библиотекам: сканерам штрих-кодов, криптографическим провайдерам, элементам визуализации, драйверам оборудования и другим программным компонентам, у которых есть COM-интерфейс.
Технология появилась задолго до платформы «1С:Предприятие 8» и считается устаревающей: современные версии платформы предлагают более безопасные и кроссплатформенные способы расширения функциональности — внешние компоненты по технологии Native API, COM-соединение, веб-сервисы и HTTP-запросы. Тем не менее ActiveX продолжает применяться в старых конфигурациях и в сценариях, где сторонний производитель поставляет только ActiveX-элемент, например для подписания документов в браузерных решениях или работы со специфическим оборудованием.
Понимание того, как работает ActiveX в 1С 8, нужно в трёх ситуациях: при сопровождении унаследованного кода, при интеграции с оборудованием или ПО, у которого нет другого интерфейса, и при диагностике ошибок вида «Ошибка создания объекта ActiveX». Ниже разобраны принцип работы, способы подключения, типовой код, ограничения и безопасные альтернативы.
Как работает ActiveX в контексте платформы 1С 8
ActiveX — это частный случай COM-технологии Microsoft. Компонент представляет собой библиотеку (обычно DLL или OCX), которая регистрируется в системном реестре Windows и получает уникальный идентификатор класса (CLSID) и программный идентификатор (ProgID), например «Vendor.Component». Платформа 1С обращается к компоненту через COM-инфраструктуру операционной системы: создаёт экземпляр объекта, вызывает его методы и читает свойства.
С точки зрения встроенного языка существует два сценария. Первый — программное создание объекта через конструктор Новый COMОбъект("ProgID"), когда компонент не имеет визуального интерфейса и используется как библиотека функций. Второй — размещение элемента управления ActiveX на форме, когда компонент визуальный (например, элемент просмотра или ввода). Второй сценарий доступен только в толстом клиенте обычного приложения и в управляемых формах с ограничениями.
Важно понимать, что платформа 1С сама по себе не содержит ActiveX-компонентов — она лишь клиент. Если компонент не установлен и не зарегистрирован на компьютере, где выполняется код, обращение завершится ошибкой. В клиент-серверном режиме код, исполняемый на сервере 1С, будет искать компонент на сервере, а не на компьютере пользователя, что часто становится причиной неочевидных сбоев.
Когда ActiveX в 1С 8 действительно нужен
Основной легитимный сценарий — интеграция с оборудованием или ПО, для которого производитель поставляет только ActiveX/COM-интерфейс. Так встречаются некоторые криптографические библиотеки, компоненты работы с электронной подписью, драйверы специализированных сканеров и старые версии офисных библиотек. Если альтернативного API у поставщика нет, ActiveX остаётся единственным рабочим путём.
Второй сценарий — сопровождение унаследованных решений. Многие конфигурации, написанные под платформу 8.0–8.2, активно используют ActiveX-элементы на формах: поля HTML-документа, элементы отображения диаграмм, компоненты печати штрих-кодов. При миграции таких решений нужно чётко понимать, что делает каждый компонент, чтобы корректно заменить его современным аналогом.
Сравнение вариантов
Подходит, если у поставщика есть только COM-интерфейс. Ограничение: только Windows, требуется регистрация компонента на каждой машине исполнения.
Рекомендуемый путь для новых разработок: работает в тонком и веб-клиенте, подключается как макет конфигурации, не требует регистрации в реестре.
Подходит, если функциональность можно вынести в отдельный сервис. Кроссплатформенно, но требует сетевого взаимодействия и разработки сервиса.
Как подключить ActiveX-компонент программно
Программное подключение выполняется через конструктор Новый COMОбъект(), которому передаётся ProgID компонента. ProgID указывается в документации поставщика; его также можно найти в реестре Windows в ветке HKEY_CLASSES_ROOT. Перед использованием компонент должен быть установлен и зарегистрирован командой regsvr32 для OCX/DLL либо штатным установщиком поставщика.
Типовой фрагмент кода с защитой от ошибок выглядит так:
Попытка
Компонент = Новый COMОбъект("Vendor.Component");
Исключение
Сообщить("Не удалось создать ActiveX-объект: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Результат = Компонент.DoWork(Параметр);
- 1Установите компонент от поставщика или зарегистрируйте DLL/OCX командой regsvr32 от имени администратора
- 2Найдите ProgID компонента в документации или в реестре HKEY_CLASSES_ROOT
- 3Создайте объект в коде через Новый COMОбъект с обработкой исключения
- 4Вызовите нужные методы и проверьте возвращаемые значения
- 5Протестируйте код именно в том окружении, где он будет исполняться: на клиенте или на сервере
Обратите внимание на разрядность: 32-разрядный клиент 1С может загружать только 32-разрядные COM-компоненты, а 64-разрядный сервер — только 64-разрядные. Если компонент поставляется только в 32-разрядной версии, а код исполняется на 64-разрядном сервере 1С, объект не создастся. Решение — перенести вызов на клиента 32-разрядной версии или обернуть компонент в отдельный процесс.
Размещение элемента ActiveX на форме
Визуальный ActiveX-элемент добавляется на форму в конфигураторе через вставку элемента управления типа ActiveX — в диалоге выбора система показывает список зарегистрированных на текущем компьютере компонентов. После размещения доступ к объекту элемента выполняется через свойства формы, а события элемента можно перехватывать в модуле формы.
Этот способ имеет жёсткие ограничения. В тонком клиенте и веб-клиенте произвольные ActiveX-элементы не работают: веб-клиент исполняется в браузере, где поддержка ActiveX существовала только в устаревших версиях Internet Explorer. Поэтому формы с ActiveX-элементами в современных режимах работы либо не открываются корректно, либо требуют замены элемента на поле HTML-документа, поле табличного документа или внешнюю компоненту.
Типичные ошибки и их диагностика
Самая частая ошибка — исключение при создании объекта с текстом вида «Недопустимая строка с указанием класса» или «Класс не зарегистрирован». Она означает, что компонент отсутствует на машине исполнения, зарегистрирован не той разрядности или ProgID указан с опечаткой. Проверка начинается с поиска ProgID в реестре и попытки создать объект из простого скрипта PowerShell или VBScript вне 1С — это отделяет проблему регистрации от проблемы в коде конфигурации.
Вторая группа ошибок связана с местом исполнения кода. Код с директивой &НаСервере ищет компонент на сервере 1С, а не у пользователя. Если компонент установлен только на клиентских машинах, вызов нужно перенести в клиентский контекст. Обратная ситуация — обращение к клиентскому оборудованию с сервера — принципиально невозможно без промежуточного звена.
Как проверить результат
Конструктор Новый COMОбъект выполняется без исключения
Исключение «класс не зарегистрирован» или «недопустимая строка с указанием класса»
Методы возвращают ожидаемые значения, оборудование или библиотека реагируют
Ошибки вызова методов, пустые или некорректные значения
После присваивания Неопределено внешний процесс выгружается из памяти
Процесс компонента остаётся в диспетчере задач после закрытия 1С
Безопасность и ограничения технологии
ActiveX-компонент исполняется в процессе, который его загрузил, с полными правами этого процесса. Скомпрометированный или уязвимый компонент способен читать файлы, обращаться к сети и менять данные от имени пользователя 1С или сервера. Поэтому правило простое: использовать только подписанные компоненты проверенных поставщиков и своевременно обновлять их.
Архитектурные ограничения тоже существенны. Технология привязана к Windows — на Linux-сервере 1С ActiveX недоступен. Веб-клиент и мобильная платформа произвольные ActiveX не поддерживают. При проектировании нового решения зависимость от ActiveX означает зависимость от конкретной инфраструктуры, что усложняет масштабирование и перевод системы в облачные или кроссплатформенные сценарии.
Как выбрать действие
Современные альтернативы ActiveX в 1С
Основная замена — внешние компоненты по технологии Native API. Они подключаются из макета конфигурации методом ПодключитьВнешнююКомпоненту(), работают в толстом, тонком и веб-клиенте, не требуют записи в системный реестр и могут поставляться в сборках под разные платформы одновременно. Для типовых задач — сканеры, криптография, обмен с оборудованием — существуют готовые компоненты как от фирмы «1С», так и от сторонних разработчиков.
Для интеграционных задач, где не нужен прямой доступ к оборудованию пользователя, часто достаточно HTTP-запросов к внешнему сервису или веб-сервисов. Это снимает зависимость от Windows, упрощает обновление логики (она меняется в одном месте — на стороне сервиса) и позволяет работать из любого клиента 1С, включая веб-клиент и мобильные приложения.
Что важно запомнить
ActiveX в 1С 8 — это вызов зарегистрированных в Windows COM-компонентов через Новый COMОбъект или элементы формы. Технология работает только под Windows, чувствительна к разрядности и месту исполнения кода, требует доверия к поставщику компонента. Для новых разработок выбирайте внешние компоненты Native API или сервисную интеграцию.
Частые вопросы
Чем ActiveX отличается от внешней компоненты 1С?
ActiveX — это COM-компонент Windows, зарегистрированный в реестре и работающий только под Windows. Внешняя компонента 1С создаётся по технологии Native API, подключается из макета конфигурации без регистрации в системе и может работать в тонком, веб-клиенте и на разных ОС.
Почему возникает ошибка «Класс не зарегистрирован» при создании COMОбъекта?
Компонент не установлен на машине, где исполняется код, зарегистрирован не той разрядности (32/64 бита) или ProgID указан с ошибкой. Проверьте наличие ProgID в реестре и попробуйте создать объект из PowerShell вне 1С.
Работает ли ActiveX в веб-клиенте 1С?
Произвольные ActiveX-элементы в веб-клиенте не работают: поддержка ActiveX существовала только в устаревших версиях Internet Explorer. Для веб-клиента используйте внешние компоненты Native API или заменяйте элементы на штатные поля формы.
Можно ли использовать ActiveX на сервере 1С под Linux?
Нет. COM/ActiveX — технология Windows, на Linux-сервере она недоступна. Код с COMОбъект нужно либо переносить на Windows-клиента, либо заменять кроссплатформенным механизмом: внешней компонентой или HTTP-интеграцией.
Как безопасно освободить ActiveX-объект после работы?
Присвойте переменной значение Неопределено после завершения работы и не храните ссылку в глобальных переменных. Если компонент запускает внешний процесс, вызывайте его штатный метод завершения (Quit, Close и подобный) до освобождения ссылки.
Где взять ProgID компонента, если документации нет?
Откройте реестр Windows и поищите в ветке HKEY_CLASSES_ROOT записи, связанные с именем поставщика или файла компонента. Также список зарегистрированных ActiveX-элементов виден в диалоге вставки элемента ActiveX на форму в конфигураторе.