При работе в терминальном режиме (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.
Для исправления работы COM-объекта выполним настройку системной оснастки Windows. Разберем по шагам весь процесс:
comexp.msc и нажмите Enter.Режим Запускающий пользователь позволяет создавать отдельный экземпляр EXCEL.EXE в контексте сеанса того пользователя, который выполняет код 1С, предотвращая межсессионный конфликт.
Если на 64-битной серверной операционной системе установлен 32-битный пакет Microsoft Office, компонент Excel может отсутствовать в стандартной консоли comexp.msc. В этом случае выполним запуск 32-битной оснастки:
mmc comexp.msc /32Если код 1С выполняется на стороне сервера (в фоновом или регламентном задании под учетной записью службы usr1cv8), Excel требует наличия специальной структуры папок системного профиля. Без них создание COM-объекта также завершится ошибкой.
Создадим вручную следующие каталоги на сервере:
C:\Windows\System32\config\systemprofile\DesktopC:\Windows\SysWOW64\config\systemprofile\DesktopНазначим на эти папки полные права доступа для пользователя, под которым запущена служба 1С:Предприятие.
Использование COM-автоматизации (Excel.Application) имеет существенные недостатки: высокую чувствительность к модальным окнам, зависание процессов EXCEL.EXE в памяти и официальные ограничения от Microsoft на использование в серверных средах.
Рассмотрим более надежные альтернативные варианты работы с файлами Excel в 1С:
Платформа 1С умеет читать и сохранять файлы формата XLSX нативно, без необходимости устанавливать Microsoft Office на сервер:
// Чтение файла XLSX в табличный документ
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\files\data.xlsx");
// Сохранение табличного документа в XLSX
ТабДок.Записать("C:\files\output.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Если требуется быстро прочитать данные из файла как из таблицы базы данных, можно использовать 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 и обеспечить стабильную работу системы в многопользовательском режиме.