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

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

OLE-объекты в 1С: что это такое и как их использовать

Что такое OLE-объекты в 1С, как вставить объект OLE в документ и справочник, чем OLE отличается от COM и внешних компонент, типичные ошибки и ограничения.

OLE (Object Linking and Embedding — связывание и внедрение объектов) — технология Windows, позволяющая размещать внутри одного приложения данные, созданные другой программой. В контексте 1С под OLE-объектами обычно понимают встроенные в документы, справочники или отчёты фрагменты из внешних приложений: таблицу Excel, документ Word, рисунок, диаграмму. Такой объект сохраняется вместе с данными 1С и при двойном щелчке открывается в «родной» программе.

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

Понимать разницу важно, потому что от выбора механизма зависят надёжность обмена, переносимость базы между компьютерами и поведение системы при обновлении платформы. Ниже разобраны оба сценария, условия их применения, типичные ошибки и современные альтернативы.

Что такое OLE-объект и как он работает в 1С

Когда пользователь вставляет OLE-объект в документ 1С, происходит одно из двух действий. При внедрении (embedding) копия данных целиком сохраняется внутри базы 1С вместе со служебной информацией о программе-источнике. При связывании (linking) в базе хранится только ссылка на внешний файл и его отображаемое изображение. В первом случае объект доступен на любом компьютере, но раздувает базу; во втором — база компактна, но при переносе файла связь разрывается.

Двойной щелчок по внедрённому объекту запускает приложение-источник: таблица откроется в Excel, текст — в Word. После редактирования и сохранения изменения записываются обратно в объект внутри 1С. Для этого на компьютере пользователя обязательно должна быть установлена соответствующая программа — без неё объект отображается как статичная картинка или значок.

В типовых конфигурациях старых линеек (1С:Предприятие 7.7 и ранние версии 8.x) OLE-внедрение использовалось для хранения договоров, спецификаций и прайсов прямо в элементах справочников. В современных конфигурациях эту роль взял на себя механизм присоединённых файлов, который надёжнее и не требует OLE-регистрации приложений.

Чем OLE отличается от COM, ActiveX и внешних компонентов

Путаница в терминах — главный источник ошибок при поиске решений. OLE, COM и ActiveX — родственные, но разные вещи. COM (Component Object Model) — базовая технология взаимодействия компонентов, на которой построен OLE. В 1С COM чаще всего встречается в виде объекта V83.COMConnector для подключения к другой базе 1С или при вызове внешних приложений через Новый COMОбъект("Excel.Application").

OLE в узком смысле — это именно визуальное внедрение документов. ActiveX — элементы управления, размещаемые на формах (например, старые компоненты календаря или просмотра). Внешние компоненты 1С (Native API, COM-компоненты по технологии «Внешние компоненты») — отдельный механизм расширения функциональности платформы.

МеханизмНазначение в 1СТипичный пример
OLE-внедрениеХранение документа другой программы внутри объекта 1СТаблица Excel в элементе справочника
COM-автоматизацияПрограммное управление внешним приложением или другой базойЗаполнение Excel из кода 1С
ActiveXВизуальные компоненты на формеУстаревшие элементы просмотра
Внешние компонентыРасширение возможностей платформыДрайверы сканеров, криптография

Если задача — программно выгрузить данные в Excel, нужен COM, а не OLE-внедрение. Если задача — хранить файл договора в карточке контрагента, современный способ — присоединённые файлы, а не OLE. Выбор неверного механизма приводит к решениям, которые ломаются при обновлении платформы или переезде на другой компьютер.

Как вставить OLE-объект в документ или справочник

В конфигурациях, где OLE-внедрение предусмотрено разработчиком, вставка выполняется через меню формы: «Действия» → «Вставить объект» или аналогичная команда. Откроется стандартный диалог Windows со списком зарегистрированных типов объектов: «Лист Microsoft Excel», «Документ Microsoft Word», «Рисунок Paint» и другие. Состав списка зависит от установленного на компьютере ПО.

В диалоге доступны два режима: создать новый пустой объект или вставить из существующего файла. При выборе файла появляется флажок «Связать» — включённый флажок создаёт связь с файлом, снятый — внедряет копию в базу. Это ключевая развилка, определяющая дальнейшее поведение объекта.

Порядок вставки OLE-объекта
  1. 1
    Откройте форму документа или элемента справочника, где предусмотрено поле OLE-объекта
  2. 2
    Выберите команду вставки объекта через меню действий формы
  3. 3
    В диалоге выберите тип объекта или режим «Создать из файла»
  4. 4
    Решите, нужна ли связь с файлом: снимите флажок «Связать» для хранения копии в базе
  5. 5
    Отредактируйте объект в открывшемся приложении и закройте его
  6. 6
    Сохраните объект 1С и проверьте, что внедрённый фрагмент отображается корректно

После вставки проверьте поведение на другом рабочем месте, если база сетевая. Внедрённый объект откроется везде, где установлена программа-источник. Связанный объект откроется только там, где доступен исходный файл по тому же пути — при сетевых путях используйте UNC-формат (\\сервер\папка\файл), а не буквы дисков, которые у разных пользователей различаются.

Программная работа через OLE и COM

Вторая ипостась технологии — обращение к внешним приложениям из кода встроенного языка. Классический пример — создание экземпляра Excel и заполнение книги данными из 1С. Код создаёт COM-объект, открывает или создаёт книгу, пишет в ячейки и сохраняет результат.

1c
Попытка
	Excel = Новый COMОбъект("Excel.Application");
Исключение
	Сообщить("Excel не установлен или недоступен: " + ОписаниеОшибки());
	Возврат;
КонецПопытки;
Excel.Visible = Ложь;
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
Лист.Cells(1, 1).Value = "Номенклатура";
Книга.SaveAs("C:\Обмен\Выгрузка.xlsx");
Excel.Quit();

Для подключения одной базы 1С к другой используется COM-коннектор: Новый COMОбъект("V83.COMConnector") с последующим вызовом метода Connect и строки подключения. Это рабочий, но ресурсоёмкий способ интеграции: каждое соединение занимает лицензию и память, а при аварийном завершении сеанса в системе могут оставаться «висячие» процессы.

Критическое ограничение: COM-объекты работают только в Windows и только там, где зарегистрировано соответствующее приложение. Код, обращающийся к Excel, нельзя выполнить на Linux-сервере или в веб-клиенте. Если обмен должен работать на сервере 1С, приложение (например, Excel) должно быть установлено именно на сервере, что лицензионно и технически не всегда допустимо.

Типичные проблемы и способы их диагностики

Самая частая жалоба — «объект не открывается». Причины почти всегда одни и те же: на компьютере не установлено приложение-источник, нарушена связь с внешним файлом или повреждён сам внедрённый объект при нештатном завершении сеанса. Вторая группа проблем — ошибки вида «Ошибка при создании объекта из компоненты» при программном обращении: приложение не зарегистрировано в системе, разрядность не совпадает (32-битный COM не виден из 64-битного процесса и наоборот) или не хватает прав у учётной записи, под которой работает сервер 1С.

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

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

Двойной щелчок по внедрённому объекту
Норма

Открывается приложение-источник с актуальными данными

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

Ничего не происходит или появляется сообщение об отсутствии приложения

Связанный объект после переноса базы
Норма

Объект обновляется при изменении исходного файла

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

Отображается устаревший снимок или ошибка связи

Выполнение COM-кода
Норма

Объект создаётся, приложение завершается, процесс исчезает из диспетчера задач

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

Ошибка создания объекта или накопление процессов в памяти

Размер базы после внедрения
Норма

Рост соответствует размеру внедряемых файлов

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

База растёт непропорционально — вероятно, внедряются избыточные данные

Типичные ошибки
01
Связывание вместо внедрения при локальном пути к файлу — после переноса базы на другой компьютер все объекты теряют содержимое
02
Внедрение объёмных файлов в справочники — база раздувается, замедляется выгрузка и резервное копирование
03
Вызов COM-объектов на сервере без установленного приложения — код падает с ошибкой создания объекта
04
Отсутствие освобождения COM-объектов в коде — утечка памяти и «висячие» процессы Excel
05
Использование OLE в новых разработках вместо присоединённых файлов или форматов обмена — решение не работает в веб-клиенте и на Linux

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

OLE-внедрение и OLE-автоматизация — технологии эпохи настольных Windows-приложений. Они не работают в веб-клиенте, не поддерживаются на Linux и macOS, зависят от установленного на каждом рабочем месте ПО и плохо переносят обновления версий приложений-источников. Платформа 1С сохраняет их поддержку ради совместимости, но для новых решений рекомендуются другие механизмы.

Чем заменить OLE в новых решениях

Присоединённые файлы (БСП)

Стандарт для хранения документов в карточках объектов; работает в тонком и веб-клиенте, поддерживает версии и подписание

Табличный документ (mxl)

Для отчётов и печатных форм внутри 1С без внешних приложений

Обмен через XML/JSON/EnterpriseData

Для интеграции между базами вместо COM-коннектора; работает на любой платформе

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

Для онлайн-интеграции без установки приложений и без привязки к Windows

Сохранение в Excel через табличный документ

Метод Записать() табличного документа выгружает в xlsx без установленного Excel

Если старая база уже наполнена OLE-объектами, планируйте миграцию: программно извлеките данные из объектов (у многих есть методы доступа к содержимому), сохраните их как присоединённые файлы и удалите OLE-поля. Делать это стоит до перехода на файловый веб-доступ или Linux-сервер, где OLE перестанет работать физически.

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

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

Нужно хранить документы Word/Excel в карточках объектовИспользуйте присоединённые файлы, а не OLE-внедрение
Нужно выгрузить данные в ExcelСохраняйте табличный документ в формате xlsx; COM-объект Excel — только если нужна сложная автоматизация и Excel гарантированно установлен
Нужна интеграция двух баз 1СПредпочтите HTTP/веб-сервисы или планы обмена; COMConnector — для разовых или локальных задач
В базе уже есть OLE-объекты и планируется веб-доступЗапланируйте извлечение данных и перевод их в присоединённые файлы до миграции

Частые вопросы об OLE-объектах в 1С

Почему внедрённый объект открывается у одного пользователя и не открывается у другого?

На компьютере второго пользователя не установлено приложение-источник или установлена несовместимая версия. OLE-объект требует зарегистрированной в системе программы, создавшей его. Установите то же приложение той же или более новой версии, и объект откроется.

Можно ли восстановить данные из связанного OLE-объекта, если исходный файл удалён?

Обычно нет: при связывании в базе хранится только ссылка и отображаемый снимок. Снимок можно сохранить как картинку, но редактируемые данные утрачены вместе с файлом. Поэтому для важных документов всегда используйте внедрение или присоединённые файлы.

Работают ли OLE-объекты в тонком и веб-клиенте?

Полноценное OLE-внедрение ориентировано на толстый клиент Windows. В тонком и веб-клиенте такие объекты в лучшем случае отображаются как статичное изображение. Если пользователи работают через браузер, храните документы в присоединённых файлах.

Почему код Новый COMОбъект("Excel.Application") выдаёт ошибку на сервере?

Excel не установлен на сервере, не зарегистрирован для учётной записи службы агента 1С или несовпадает разрядность. COM-автоматизация Office на сервере официально не рекомендуется самим производителем Office. Замените выгрузку на сохранение табличного документа в xlsx — это не требует установленного Excel.

Сильно ли OLE-объекты увеличивают размер базы?

Внедрённые объекты хранятся в базе целиком, причём часто с избыточными служебными данными приложения-источника. Сотни внедрённых документов заметно раздувают базу, удлиняют резервное копирование и обновление. Контролируйте рост и по возможности переносите файлы в хранилище присоединённых файлов, где доступны тома на диске.

Чем заменить COM-подключение между двумя базами 1С?

Для постоянной интеграции — планы обмена, HTTP-сервисы или формат EnterpriseData. Они не требуют дополнительной лицензии на соединение, работают на любой платформе и не оставляют «висячих» процессов. COMConnector оставьте для разовых переносов данных в локальной сети.

Итог

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

OLE-объект в 1С — внедрённый или связанный фрагмент данных внешнего приложения. Технология работает только в Windows-клиенте, зависит от установленного ПО и считается устаревшей. Для хранения файлов используйте присоединённые файлы, для выгрузки в Excel — запись табличного документа, для интеграции — сервисы и планы обмена вместо COM.