Как исправить ошибку «No such interface supported» при программном открытии Excel в 1С на сервере

Программист IT и автоматизация бизнеса
← На главную

При работе в терминальном режиме (RDP) на сервере разработчики и пользователи часто сталкиваются с ситуацией, когда программный вызов Microsoft Excel из 1С перестает работать. При попытке инициализировать объект в коде 1С вылетает ошибка:

Ошибка при вызове конструктора (COMОбъект): No such interface supported: No such interface supported

Рассмотрим причину возникновения этой проблемы, разберем по шагам её устранение через параметры DCOM, а также проанализируем альтернативные способы работы с файлами Excel в 1С.

Выясним причину ошибки

Проанализируем ситуацию, которая происходит на сервере. Код инициализации COM-соединения выглядит следующим образом:

ExcelПриложение = Новый COMОбъект("Excel.Application");

Когда на сервере одновременно работают несколько пользователей под разными учетными записями RDP, служба DCOM (Distributed Component Object Model) пытается сопоставить запуск приложения Excel с активной сессией. По умолчанию COM-сервер Microsoft Excel настроен на работу с интерактивным пользователем (тем, кто зашел на сервер первым или работает в консоли).

При входе второго пользователя или переключении RDP-сессий происходит сбой маршалинга COM-интерфейсов между разными сеансами Windows. В результате платформа 1С не может получить доступ к интерфейсу OLE/COM и выдает исключение No such interface supported.

Основной способ решения: настройка прав DCOM

Для исправления работы COM-объекта выполним настройку системной оснастки Windows. Разберем по шагам весь процесс:

  1. Откроем службу компонентов Windows. Для этого нажмите сочетание клавиш Win + R, введите comexp.msc и нажмите Enter.
  2. Перейдите по дереву: Службы компонентов -> Компьютеры -> Мой компьютер -> Настройка DCOM.
  3. Найдите в списке компонент Microsoft Excel Application и откройте его свойства через контекстное меню.
  4. Перейдите на вкладку Удостоверение (Identity).
  5. Выберите вариант Запускающий пользователь (Launching User) или Указанный пользователь (This User) с вводом данных учетной записи с правами администратора.
  6. Нажмите Применить и ОК.

Режим Запускающий пользователь позволяет создавать отдельный экземпляр EXCEL.EXE в контексте сеанса того пользователя, который выполняет код 1С, предотвращая межсессионный конфликт.

Особенности настройки на 64-битных ОС и для 32-битного Office

Если на 64-битной серверной операционной системе установлен 32-битный пакет Microsoft Office, компонент Excel может отсутствовать в стандартной консоли comexp.msc. В этом случае выполним запуск 32-битной оснастки:

  1. Нажмите Win + R.
  2. Введите команду: mmc comexp.msc /32
  3. Найдите Microsoft Excel Application и настройте параметр Удостоверение, как описано выше.

Создание системных каталогов для фонового режима

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

Создадим вручную следующие каталоги на сервере:

  1. C:\Windows\System32\config\systemprofile\Desktop
  2. C:\Windows\SysWOW64\config\systemprofile\Desktop

Назначим на эти папки полные права доступа для пользователя, под которым запущена служба 1С:Предприятие.

Альтернативные варианты работы с Excel без использования COM

Использование COM-автоматизации (Excel.Application) имеет существенные недостатки: высокую чувствительность к модальным окнам, зависание процессов EXCEL.EXE в памяти и официальные ограничения от Microsoft на использование в серверных средах.

Рассмотрим более надежные альтернативные варианты работы с файлами Excel в 1С:

1. Использование встроенного объекта «ТабличныйДокумент»

Платформа 1С умеет читать и сохранять файлы формата XLSX нативно, без необходимости устанавливать Microsoft Office на сервер:


// Чтение файла XLSX в табличный документ
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\files\data.xlsx");

// Сохранение табличного документа в XLSX
ТабДок.Записать("C:\files\output.xlsx", ТипФайлаТабличногоДокумента.XLSX);

2. Чтение данных через ADO (ADODB.Connection)

Если требуется быстро прочитать данные из файла как из таблицы базы данных, можно использовать ADO-соединение. Этот способ работает быстро и не требует запуска приложения Excel:


Соединение = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\files\data.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES;""";
Соединение.Open(СтрокаПодключения);

НаборЗаписей = Новый COMОбъект("ADODB.Recordset");
НаборЗаписей.Open("SELECT * FROM [Лист1$]", Соединение);

Пока НЕ НаборЗаписей.EOF Цикл
    // Обработка данных
    ЗначениеПоля = НаборЗаписей.Fields(0).Value;
    НаборЗаписей.MoveNext();
КонецЦикла;

Соединение.Close();

Использование встроенных механизмов 1С и технологии ADO позволяет полностью избавиться от зависимости от DCOM и обеспечить стабильную работу системы в многопользовательском режиме.

← На главную