При выполнении серверного кода (например, в регламентных и фоновых заданиях) попытка инициализировать офисное приложение через Новый COMОбъект("Excel.Application") нередко приводит к исключению: -2147467262(0x80004002): Интерфейс не поддерживается. Разберем детально, почему возникает эта ошибка, как настроить серверную среду и какими штатными методами 1С можно полностью заменить ненадежный COM-интерфейс.
Проанализируем ключевые факторы, из-за которых операционная система блокирует создание COM-объекта из сеанса службы 1С:
USR1CV8) требует наличия служебных папок рабочего стола в системном профиле Windows. Без них компоненты инициализации интерфейсов аварийно завершают работу.EXCEL.EXE от предыдущих аварийно завершенных регламентных заданий могут блокировать создание новых сессий.Рассмотрим наиболее правильный и рекомендуемый подход. Согласно официальным рекомендациям Microsoft, серверная автоматизация офисных пакетов (Server-Side Automation) не поддерживается, так как Excel архитектурно спроектирован для интерактивной работы пользователя. Для сохранения и чтения данных на сервере 1С следует использовать встроенный функционал платформы.
Для генерации отчета и сохранения его в файл Excel для последующей рассылки используем метод Записать() объекта ТабличныйДокумент:
// Формируем отчет или заполняем табличный документ
ТабДок = Новый ТабличныйДокумент;
// ... заполнение макета или вывод отчета ...
// Сохраняем в формате XLSX напрямую без установленного Excel
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
Если стоит обратная задача — прочитать данные из файла Excel, используем метод Прочитать(). Платформа 1С позволяет напрямую загружать таблицы на сервере без COM-компонентов:
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
// Обходим полученные строки и колонки
КоличествоСтрок = ТабДок.ВысотаТаблицы;
КоличествоКолонок = ТабДок.ШиринаТаблицы;
Для НомерСтроки = 1 По КоличествоСтрок Цикл
ЗначениеЯчейки = ТабДок.Область(НомерСтроки, 1).Текст;
// Обработка прочитанных данных
КонецЦикла;
Если проектные требования строго обязывают использовать именно COMОбъект, разберем по шагам корректную настройку операционной системы.
Desktop (если они отсутствуют):
C:\Windows\System32\config\systemprofile\DesktopC:\Windows\SysWOW64\config\systemprofile\DesktopUSR1CV8) полные права доступа к обеим папкам.dcomcnfg в строке «Выполнить»):
mmc comexp.msc /32.HKEY_CLASSES_ROOT\AppID\. Создадим в ней раздел EXCEL.EXE и строковый параметр AppID со значением {00020812-0000-0000-C000-000000000046}.Рассмотрим другие высокопроизводительные методы, не зависящие от установленного офисного пакета и разрядности сервера:
.xlsx представляет собой стандартный ZIP-архив с набором XML-документов. Платформа 1С с помощью объектов ЧтениеZipФайла и ЧтениеXML позволяет напрямую извлекать данные из листов книги с максимальной скоростью и без утечек памяти.