Как исправить ошибку «Недостаточно прав на создание COM-объекта Excel.Application» на сервере 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке механизмов загрузки данных из внешних файлов Microsoft Excel программисты часто сталкиваются со следующей проблемой: код отлично отрабатывает на клиенте или в файловом варианте базы данных, но при переносе выполнения на сервер 1С (особенно в трехзвенной архитектуре под управлением x64-платформ) вылетает критическая ошибка безопасности при попытке создания объекта Excel.Application.

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

Почему возникает ошибка инициализации Excel на сервере?

Для начала разберем природу этого сбоя. Когда вы вызываете конструктор Новый COMОбъект("Excel.Application") в контексте &НаСервере, операционная система пытается запустить экземпляр приложения Microsoft Excel от имени той учетной записи, под которой работает служба сервера 1С (по умолчанию это системный пользователь USR1CV8).

Поскольку Microsoft Excel изначально проектировался как офисное интерактивное приложение для настольных ПК, его запуск в фоновом (неинтерактивном) режиме операционной системы сопряжен со строгими ограничениями безопасности Windows. Служба 1С не имеет полноценного окружения рабочего стола и необходимых токенов аутентификации DCOM (Distributed Component Object Model). Как результат — система безопасности блокирует запуск процесса EXCEL.EXE, возвращая ошибку доступа.

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

Решение 1. Тонкая настройка удостоверения и прав DCOM

Чаще всего предоставления прав пользователю USR1CV8 на запуск компонента в стандартной оснастке DCOM оказывается недостаточно, так как Excel пытается стартовать от имени запускающего пользователя, не имеющего графической сессии. Мы исправим это через принудительное назначение удостоверения:

  1. Нажмите на сервере сочетание клавиш Win + R, введите команду dcomcnfg и нажмите Enter. Если у вас установлена 64-разрядная операционная система, а MS Office установлен в 32-разрядной версии, запустите 32-битную консоль DCOM командой: mmc comexp.msc /32.
  2. В открывшемся окне перейдите по пути: Службы компонентов -> Компьютеры -> Мой компьютер -> Настройка DCOM.
  3. Найдите в списке элемент с именем Microsoft Excel Application (или Microsoft Excel Document), нажмите на него правой кнопкой мыши и выберите Свойства.
  4. Перейдите на вкладку Удостоверение (Identity). По умолчанию там активен переключатель «Запускающий пользователь». Установите значение в положение «Указанный пользователь» (This user).
  5. Нажмите «Обзор», найдите локального пользователя сервера USR1CV8 (или создайте для этих целей отдельного администратора) и введите его пароль. Это заставит Excel запускаться в строго определенном контексте безопасности, независимо от того, кто инициировал вызов из 1С.
  6. Перейдите на вкладку Безопасность (Security). В разделах «Разрешения на запуск и активацию» (Launch and Activation Permissions) и «Разрешения на доступ» (Access Permissions) выберите пункт «Настроить» (Customize), нажмите кнопку «Изменить» и добавьте пользователя USR1CV8, предоставив ему полные права (Локальный запуск, Локальная активация).
  7. На вкладке Общие (General) в поле «Уровень проверки подлинности» (Authentication Level) установите значение «Отсутствует» (None) или «По умолчанию» (Default) для обхода строгих проверок Kerberos.
  8. Примените изменения и обязательно перезапустите службу сервера 1С:Предприятие.

Решение 2. Создание профиля Desktop с учетом локализации системы

Excel при запуске инициализирует свои внутренние структуры данных и временные файлы, обращаясь к специальным папкам рабочего стола системного профиля Windows. Если этих папок физически нет на диске, Excel завершит работу аварийно еще до открытия файла.

Важным нюансом является языковая локализация операционной системы Windows Server. Создавать нужно как англоязычную папку Desktop, так и русскоязычную Рабочий стол:

  1. Перейдите по пути на системном диске сервера: C:\Windows\System32\config\systemprofile\.
  2. Создайте внутри этой папки две директории с именами Desktop и Рабочий стол.
  3. Перейдите по пути: C:\Windows\SysWOW64\config\systemprofile\ (актуально для 64-битных ОС).
  4. Аналогично создайте там папки Desktop и Рабочий стол.
  5. Откройте свойства созданных папок, перейдите на вкладку «Безопасность» и добавьте учетную запись USR1CV8 (или ту, под которой работает служба сервера 1С), предоставив ей права Полный доступ (Full Control) на эти каталоги.

Решение 3. Настройка локальных политик безопасности Windows

Чтобы служба 1С могла корректно вызывать подсистемы DCOM, ее учетная запись должна обладать необходимыми привилегиями на уровне операционной системы:

  1. Запустите оснастку локальных политик безопасности: нажмите Win + R и введите secpol.msc.
  2. Перейдите по дереву меню: Локальные политики -> Назначение прав пользователя.
  3. Найдите политику Вход в качестве службы (Log on as a service), откройте ее свойства и убедитесь, что пользователь USR1CV8 добавлен в этот список.
  4. Найдите политику Обход перекрестной проверки (Bypass traverse checking) и проверьте, что учетная запись службы сервера 1С также присутствует в списке разрешенных пользователей.

Решение 4. Принудительная очистка зависших процессов EXCEL.EXE

При отладке механизмов COM на сервере из-за постоянных аварийных завершений процедур в диспетчере задач сервера могут накапливаться десятки «висящих» фоновых процессов EXCEL.EXE. Они продолжают удерживать монопольный доступ к COM-интерфейсам ядра и вызывают ложные ошибки «Недостаточно прав».

Перед каждым тестированием настроек DCOM выполняйте принудительное завершение всех фоновых процессов Excel. Для этого откройте командную строку (CMD) на сервере от имени Администратора и выполните инструкцию:

taskkill /im excel.exe /f

Альтернативное решение без использования COM (Кроссплатформенное чтение)

Использование COM-объектов на сервере считается устаревшим подходом, так как это снижает стабильность работы сервера 1С, привязывает систему исключительно к Windows-окружению (не работает на Linux-серверах) и требует дорогостоящего лицензирования Microsoft Office на серверные мощности.

Если ваша задача — получить список листов Excel для последующего выбора пользователем (как у автора темы), мы можем решить эту задачу современными методами без обращения к механизмам COM.

Вариант 1. Чтение листов через «ТабличныйДокумент»

В современных версиях платформы 1С:Предприятие 8.3 встроенный объект ТабличныйДокумент при чтении многостраничных файлов .xlsx автоматически преобразует листы книги в системные именованные области. Мы можем прочитать файл напрямую на сервере и получить реальные имена листов без вызова Excel:


&НаСервере
Функция ПолучитьСписокЛистовЧерезТабДок(ПутьКФайлу) Экспорт
    
    СписокЛистов = Новый СписокЗначений;
    ТабДок = Новый ТабличныйДокумент;
    
    Попытка
        ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияТабличногоДокумента.XLSX);
    Исключение
        ЗаписатьЛогСобытий("Ошибка чтения файла: " + ОписаниеОшибки());
        Возврат СписокЛистов;
    КонецПопытки;
    
    // Каждая именованная область в прочитанном документе соответствует листу Excel
    Для Каждого Область Из ТабДок.Области Цикл
        // Исключаем системные служебные области, если они есть
        Если Найти(Область.Имя, "Print_Area") = 0 Тогда
            СписокЛистов.Добавить(Область.Имя, Область.Имя);
        КонецЕсли;
    КонецЦикла;
    
    Возврат СписокЛистов;
    
КонецФункции

Вариант 2. Быстрое чтение структуры XML из ZIP-архива (.xlsx)

Современные файлы Excel с расширением .xlsx физически представляют собой упакованный ZIP-архив. Информация о листах книги хранится внутри этого архива в текстовом файле формата XML по пути xl/workbook.xml.

Этот способ работает невероятно быстро, не требует установленного пакета MS Office на сервере и стабильно функционирует даже на серверах под управлением Linux:


&НаСервере
Функция ПолучитьИменаЛистовИзАрхиваXLSX(ПутьКФайлу) Экспорт
    
    СписокЛистов = Новый СписокЗначений;
    
    // Создаем временную директорию для распаковки структуры XML
    ВременныйКаталог = ПолучитьИмяВременногоФайла("");
    СоздатьКаталог(ВременныйКаталог);
    
    // Распаковываем xlsx как стандартный ZIP-архив
    Архив = Новый ЧтениеZipФайла;
    Попытка
        Архив.Открыть(ПутьКФайлу);
        // Извлекаем только файл структуры книги
        Архив.Извлечь(Архив.Элементы.Найти("xl/workbook.xml"), ВременныйКаталог, РежимВосстановленияПутейФайловZip.Восстанавливать);
        Архив.Закрыть();
    Исключение
        ВызватьИсключение "Не удалось распаковать структуру Excel файла: " + ОписаниеОшибки();
    КонецПопытки;
    
    ФайлСтруктуры = Новый Файл(ВременныйКаталог + "/xl/workbook.xml");
    Если Не ФайлСтруктуры.Существует() Тогда
        Возврат СписокЛистов;
    КонецЕсли;
    
    // Читаем XML файл парсером 1С
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ФайлСтруктуры.ПолноеИмя);
    
    Пока ЧтениеXML.Прочитать() Цикл
        // Ищем узлы с описанием листов книги <sheet name="..." ... />
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "sheet" Тогда
            Если ЧтениеXML.ПрочитатьАтрибут() Тогда
                ИмяЛиста = ЧтениеXML.Значение;
                СписокЛистов.Добавить(ИмяЛиста, ИмяЛиста);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    ЧтениеXML.Закрыть();
    
    // Очищаем временную папку за собой
    Попытка
        УдалитьФайлы(ВременныйКаталог);
    Исключение
        // Игнорируем ошибки удаления временных файлов
    КонецПопытки;
    
    Возврат СписокЛистов;
    
КонецФункции

Использование предложенных бескомпьютерных альтернатив чтения файлов Excel позволяет полностью обезопасить серверную часть приложения 1С от сбоев, зависших фоновых процессов, уязвимостей в безопасности DCOM и необходимости сложной системной настройки прав при каждом обновлении или переносе платформы 1С.

← На главную