Разработка и Конфигурация · 13 мин
Что такое ActiveX в 1С и как с ним работать
ActiveX в 1С: что это за технология, где применяется в конфигурациях, как подключить компонент через ЗагрузитьВнешнююКомпоненту, риски безопасности и современные альтернативы.
ActiveX — это технология Microsoft для создания повторно используемых программных компонентов (COM-объектов), которые одно приложение может подключать и вызывать внутри другого. В контексте 1С под «ActiveX в 1С» обычно понимают два разных сценария: использование внешних ActiveX/COM-компонентов из кода 1С (например, для работы со сканером штрих-кодов или Excel) и, наоборот, обращение к самой 1С как к COM-серверу из внешних программ через объект V83.COMConnector.
Исторически ActiveX-компоненты широко применялись в конфигурациях на платформе 1С:Предприятие 7.7 и в ранних версиях 8.x — для торгового оборудования, визуальных элементов на формах, интеграции с офисными пакетами. С развитием платформы эта технология вытесняется более безопасными механизмами: внешними компонентами по технологии Native API, веб-сервисами и HTTP-интерфейсами.
Понимание того, что такое ActiveX, остаётся практически необходимым: в эксплуатации до сих пор встречаются доработанные конфигурации, где товарные весы, кассовые аппараты старых моделей или обмен с Excel завязаны именно на COM/ActiveX. При обновлении платформы или переходе на 64-разрядный сервер такие участки становятся источником ошибок, и их нужно уметь диагностировать и переписывать.
Как ActiveX устроен и почему он работает только под Windows
ActiveX построен поверх компонентной модели COM (Component Object Model). Компонент — это зарегистрированная в реестре Windows библиотека (обычно DLL или OCX), у которой есть уникальный идентификатор класса CLSID и программный идентификатор ProgID вида «AddIn.Scanner» или «Excel.Application». Когда код вызывает такой объект, операционная система находит его по реестру, загружает библиотеку в процесс и предоставляет интерфейс вызова методов.
Из этого следуют жёсткие ограничения. ActiveX-компонент — это машинный код Windows, поэтому он не работает на сервере 1С под Linux, в веб-клиенте (кроме устаревшего режима через Internet Explorer) и в мобильной платформе. Разрядность тоже критична: 32-разрядный компонент нельзя загрузить в 64-разрядный процесс, и наоборот. Если сервер 1С 64-разрядный, а драйвер оборудования поставляется только в 32-битной версии, вызов COM-объекта в серверном коде завершится ошибкой создания объекта.
Где ActiveX применялся и применяется в 1С
Наиболее частый сценарий — подключение торгового и складского оборудования: сканеров штрих-кодов, терминалов сбора данных, электронных весов, старых фискальных регистраторов. Драйверы таких устройств нередко распространялись именно как ActiveX-компоненты, которые конфигурация загружала при открытии рабочего места кассира.
Второй типовой сценарий — интеграция с Microsoft Office. Создание COM-объекта «Excel.Application» позволяет формировать сложные отчёты, читать данные из прайс-листов, заполнять договоры по шаблонам Word. Этот приём до сих пор встречается в самописных и сильно доработанных конфигурациях, хотя у него есть встроенная альтернатива — табличные документы и работа с файлами через форматы.
Третий сценарий обратный: внешняя программа (скрипт VBScript, приложение на C#, другая база 1С) подключается к информационной базе через COM-соединитель V83.COMConnector и выполняет в ней код, читает и записывает данные. Так строят ночные обмены между базами без публикации веб-сервисов.
Наконец, в формах старых конфигураций встречаются визуальные ActiveX-элементы: календари, графики, элементы просмотра документов. В тонком и веб-клиенте такие элементы не поддерживаются, поэтому при переходе с обычных форм на управляемые их приходится заменять.
Поищите по конфигурации строки «Новый COMОбъект» и «ЗагрузитьВнешнююКомпоненту» — это прямые точки подключения внешних компонентов.
Ошибка создания COM-объекта при открытии формы обычно означает, что компонент не зарегистрирован или не совпадает разрядность.
Если сканер или весы работают только на конкретном компьютере, вероятно, драйвер установлен локально как ActiveX.
Скрипты и обработки, создающие COMConnector, соединяются с базой извне и зависят от зарегистрированной DLL платформы.
Как подключить ActiveX-компонент из кода 1С
Регистрация компонента выполняется в операционной системе, а не в 1С. DLL регистрируют командой regsvr32 с правами администратора; для 32-разрядного компонента на 64-разрядной Windows используют regsvr32 из каталога SysWOW64. Только после регистрации объект станет доступен по своему ProgID.
В коде 1С объект создаётся конструктором COMОбъект. Типичный фрагмент выглядит так: сначала попытка создания объекта внутри конструкции «Попытка…Исключение», затем проверка, что объект создан, и только потом вызов его методов. Без обработки исключения любая проблема с регистрацией приведёт к падению всей операции, например проведения документа.
Попытка
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Не удалось создать COM-объект: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Excel.Visible = Ложь;
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
Лист.Cells(1, 1).Value = "Отчёт сформирован";
Книга.SaveAs("C:\Temp\report.xlsx");
Excel.Quit();Обязательно завершайте работу объекта: вызывайте метод закрытия (Quit, Close) и обнуляйте переменную. COM-объекты живут в отдельных процессах Windows, и «забытый» Excel.Application останется висеть в диспетчере задач, удерживая файл и память. На сервере 1С такие зависшие процессы накапливаются и со временем приводят к нехватке ресурсов.
Подключение к 1С извне через COM-коннектор
Для обратного сценария платформа поставляет COM-соединитель — библиотеку comcntr.dll, которая регистрируется при установке платформы. Внешний код создаёт объект V83.COMConnector, передаёт ему строку соединения (путь к файловой базе или параметры сервера, имя пользователя и пароль) и получает объект «Соединение», через который обращается к данным базы почти как из встроенного языка.
У этого способа есть важные ограничения. Версия comcntr.dll должна соответствовать версии платформы, на которой работает база; после обновления платформы старую DLL нужно перерегистрировать или заменить. COM-соединение создаёт полноценный сеанс и занимает лицензию — скрипт, который не завершил соединение, оставляет «висячий» сеанс. Кроме того, через COM-коннектор нельзя выполнять интерактивные действия и использовать модальные вызовы.
Риски безопасности и стабильности
ActiveX-компонент выполняется с правами того процесса, который его загрузил. Если компонент загружен в клиентское приложение 1С, он получает доступ к файловой системе и сети от имени пользователя; если на сервере — от имени учётной записи агента сервера 1С, у которой обычно широкие права. Вредоносный или просто содержащий уязвимости компонент становится каналом атаки на всю инфраструктуру.
Ошибка внутри компонента (access violation, утечка памяти) способна аварийно завершить процесс 1С целиком, потому что код компонента работает в том же адресном пространстве. На сервере это означает падение рабочего процесса rphost и обрыв сеансов всех пользователей, которых он обслуживал. Именно поэтому сомнительные компоненты не должны исполняться в серверном контексте.
Отдельная проблема — сопровождение. Поставщик оборудования может прекратить поддержку драйвера, и при очередном обновлении Windows компонент перестанет регистрироваться. Если бизнес-процесс критичен (например, отгрузка со склада зависит от сканера), заранее держите резервный вариант: дистрибутив драйвера, инструкцию по регистрации и план замены оборудования или технологии.
Современные альтернативы ActiveX
Для подключения оборудования и нативного кода платформа предлагает технологию внешних компонентов (Native API). Такая компонента — это ZIP-архив с библиотеками под разные платформы и разрядности, который подключается из макета конфигурации и работает в том числе в веб-клиенте через расширение браузера. Типовые драйверы оборудования в современных конфигурациях поставляются именно в этом формате.
Для интеграции между системами вместо COM-коннектора используют HTTP-сервисы и веб-сервисы, публикуемые на стороне 1С, либо обмен через файлы и брокеры сообщений. HTTP-интерфейс не требует регистрации DLL, не занимает клиентскую лицензию на постоянное соединение, работает через стандартные сетевые протоколы и проще контролируется по правам доступа.
Работу с офисными документами во многих случаях заменяют встроенные механизмы: табличные документы с сохранением в формат Excel, чтение файлов формата, формирование печатных форм по макетам. Это убирает зависимость от установленного Office и риск зависших процессов.
Сравнение подходов к интеграции
Подходит для поддержки существующих решений и локального оборудования под Windows. Ограничения: только Windows, регистрация в системе, риск падения процесса.
Подходит для нового подключения оборудования и нативных библиотек. Работает в тонком и веб-клиенте, поставляется в составе конфигурации.
Подходят для обмена между системами по сети. Не зависят от разрядности и реестра, требуют публикации и настройки аутентификации.
Подходит для простых локальных обменов с файловой или серверной базой. Ограничения: привязка к версии платформы, занятый сеанс и лицензия.
Как проверить и перевести решение с ActiveX
Начните с инвентаризации: найдите в конфигурации все создания COM-объектов, загрузки внешних компонентов и визуальные ActiveX-элементы на формах. Для каждого случая зафиксируйте, какая бизнес-задача решается, где зарегистрирован компонент, какой разрядности драйвер и есть ли у поставщика обновления.
Затем для каждого случая подберите замену: оборудование — на драйвер Native API из типовой библиотеки подключаемого оборудования, обмен между базами — на HTTP-сервис, формирование Excel — на табличные документы. Перевод делайте поэтапно на копии базы, оставляя старый механизм доступным по настройке до полной проверки нового.
- 1Воспроизведите ошибку и запишите полный текст: «ошибка создания объекта», «класс не зарегистрирован» или другая.
- 2Проверьте, зарегистрирован ли компонент: выполните regsvr32 для нужной DLL от имени администратора.
- 3Сверьте разрядность процесса 1С и разрядность компонента; при несовпадении используйте подходящую версию.
- 4Проверьте права учётной записи, под которой работает процесс (пользователь или служба агента сервера).
- 5Протестируйте создание объекта минимальным кодом вне прикладной логики, чтобы отделить проблему компонента от ошибок конфигурации.
- 6Проверьте результат: объект создаётся, методы вызываются, процесс корректно завершается без зависших задач.
Как проверить результат
COMОбъект создаётся без исключения на всех целевых компьютерах
Ошибка «класс не зарегистрирован» или «не удалось создать объект»
После закрытия обработки в диспетчере задач нет лишних процессов
Процессы Excel или драйвера накапливаются после каждого запуска
Серверный вызов не блокирует других пользователей и быстро завершается
Растут блокировки, таймауты, сеансы зависают
Обмен работает под учётной записью с минимально необходимыми правами
Скрипт выполняется с полными правами, пароль хранится открытым текстом
Частые вопросы об ActiveX в 1С
Работает ли ActiveX в веб-клиенте 1С?
В современных браузерах — нет: поддержка ActiveX существовала только в Internet Explorer, который выведен из эксплуатации. Для веб-клиента используют внешние компоненты Native API с расширением для работы с файлами и компонентами либо переносят логику на сервер.
Почему после перехода на 64-разрядный сервер 1С перестал работать драйвер оборудования?
Скорее всего, драйвер — 32-разрядный ActiveX и не может загрузиться в 64-разрядный процесс rphost. Варианты решения: найти 64-разрядную версию драйвера, перенести вызов на клиентские 32-разрядные рабочие станции или заменить драйвер на внешнюю компоненту Native API.
Чем COMОбъект отличается от ЗагрузитьВнешнююКомпоненту?
COMОбъект создаёт произвольный COM/ActiveX-компонент, зарегистрированный в Windows, по его ProgID. ЗагрузитьВнешнююКомпоненту подключает компоненту, собранную по правилам платформы (старый формат или Native API), обычно из макета конфигурации или файла, без обязательной регистрации в реестре.
Безопасно ли использовать COM-коннектор для обмена между базами?
Технически это рабочий механизм, но он занимает сеанс и лицензию, привязан к версии платформы и требует хранения пароля в скрипте. Для регулярных обменов безопаснее и устойчивее опубликовать HTTP-сервис с отдельной учётной записью и ограниченными правами.
Как узнать, какие ActiveX-компоненты использует наша конфигурация?
Выполните глобальный поиск по конфигурации по строкам «COMОбъект», «ЗагрузитьВнешнююКомпоненту» и «ПодключитьВнешнююКомпоненту», проверьте макеты с двоичными данными и формы на предмет нестандартных элементов. Дополнительно опросите администраторов: какие DLL регистрируются на рабочих местах при установке.
Можно ли вызывать ActiveX-компонент на сервере 1С под Linux?
Нет, COM — технология исключительно Windows. На Linux-сервере внешний код подключают через внешние компоненты Native API, собранные под Linux, либо выносят взаимодействие в отдельный сервис, доступный по сети.
Что важно запомнить
ActiveX в 1С — это вызов внешних COM-компонентов Windows из кода 1С или подключение к базе извне через COM-коннектор. Технология требует регистрации компонента, зависит от разрядности процесса и несёт риски стабильности и безопасности. Действующие решения поддерживайте аккуратно, а новые разработки стройте на внешних компонентах Native API и HTTP-сервисах.