При работе с файлами Excel в среде 1С:Предприятие программисты часто сталкиваются с критической ошибкой: -2146959355(0x80080005): Ошибка при выполнении приложения-сервера. Эта проблема обычно возникает при попытке инициализации COMОбъект("Excel.Application") в коде, исполняемом на стороне сервера. Ситуация осложняется тем, что на локальной машине разработчика код может работать идеально, но при переносе на серверную инфраструктуру выполнение прерывается.
В этой статье мы подробно разберем, почему возникает эта ошибка, как настроить права доступа DCOM и почему переход на использование встроенных механизмов 1С является лучшим стратегическим решением. Например, для переноса сведений из файлов торговых площадок в бухгалтерию используется загрузка отчётов о продажах маркетплейсов в БП 3 из Excel, исключающая ручной ввод данных.
Проанализируем техническую подоплеку. Ошибка 0x80080005 сигнализирует о том, что Windows не смогла запустить процесс excel.exe в качестве сервера автоматизации. Основные причины кроются в специфике работы службы «Агент сервера 1С:Предприятие»:
USR1CV8), не имеет прав на запуск и активацию COM-объектов Microsoft Office.Если ваша задача требует использования именно COM-объекта (например, сложная обработка макросов или форматирование), рассмотрим пошагово, как устранить ошибку конфигурации системы.
Шаг 1: Создание необходимых папок профиля.
Это самое распространенное решение, которое часто игнорируется. Excel требует наличия папки Desktop в профиле системного пользователя. Нам необходимо создать их вручную:
C:\Windows\SysWOW64\config\systemprofile\DesktopC:\Windows\System32\config\systemprofile\DesktopПосле создания папок обязательно проверьте, что у пользователя, под которым работает сервер 1С, есть права Полный доступ на эти каталоги.
Шаг 2: Настройка службы компонентов (dcomcnfg).
Разберем настройку прав активации. Запустите консоль командой dcomcnfg (если Office 32-битный на 64-битной Windows, используйте команду mmc comexp.msc /32). Далее проследуйте по пути: «Служба компонентов» — «Компьютеры» — «Мой компьютер» — «Настройка DCOM».
Найдите в списке Microsoft Excel Application и откройте его свойства:
USR1CV8), предоставив ему все права.Как показывает практика и обсуждения на форумах, работа через COM — это «путь в никуда» из-за нестабильности и зависимости от установленного Office. Современная платформа 1С позволяет прочитать файл Excel напрямую в объект ТабличныйДокумент. Это работает быстрее, надежнее и не требует установки Microsoft Excel на сервер.
Проанализируем программный код, который позволяет реализовать загрузку данных из конкретного листа Excel без использования COM-объектов:
// Создаем объект ТабличныйДокумент для чтения файла
ТабличныйДокумент = Новый ТабличныйДокумент;
Попытка
// Читаем файл Excel напрямую в таблицу 1С
// СпособЧтенияЗначенийТабличногоДокумента.Значение позволяет получить данные без форматирования
ТабличныйДокумент.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
Сообщить("Ошибка при чтении файла: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// Проверяем, не пустой ли файл
Если ТабличныйДокумент.ВысотаТаблицы < 1 Тогда
Сообщить("Выбранный файл не содержит строк данных");
Возврат;
КонецЕсли;
// Если в Excel несколько листов, 1С помещает их в коллекции Области
Для Каждого ТекущаяОбласть ИЗ ТабличныйДокумент.Области Цикл
ИмяЛиста = СокрЛП(ТекущаяОбласть.Имя);
// Нам нужен только конкретный лист, например "Лист1"
Если НЕ ИмяЛиста = "Лист1" Тогда
Продолжить;
КонецЕсли;
// Используем ПостроительЗапроса для удобной выгрузки данных листа в Таблицу Значений
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТекущаяОбласть);
ПостроительЗапроса.Выполнить();
// Получаем готовую таблицу со всеми данными листа
ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();
// Теперь мы можем обойти таблицу обычным циклом
Для Каждого СтрокаДанных ИЗ ТаблицаДанных Цикл
// Обработка данных, например:
// Артикул = СтрокаДанных.Артикул;
// Цена = СтрокаДанных.Цена;
КонецЦикла;
КонецЦикла;
Разберем преимущества использования ТабличныйДокумент и ПостроительЗапроса:
.xlsx платформой 1С происходит в разы быстрее, чем последовательное обращение к каждой ячейке через COM-интерфейс.excel.exe не «зависнет» в памяти сервера, блокируя файлы или потребляя оперативную память.ПостроительЗапроса позволяет мгновенно превратить лист Excel в привычную ТаблицаЗначений, где колонки именуются согласно заголовкам в файле.Если вы все же решили остаться на использовании COM, обратите внимание на ситуацию, когда сервер выдает ошибку из-за уже запущенных процессов. Если предыдущий сеанс загрузки завершился аварийно, в диспетчере задач сервера может висеть «фантомный» процесс excel.exe. Он может блокировать создание новых экземпляров объекта.
Посмотрим на алгоритм действий в таком случае:
excel.exe для всех пользователей.Подводя итог, можно сказать: ошибка 0x80080005 — это четкий сигнал системы о том, что настройки безопасности Windows конфликтуют с требованиями приложения Office. Пересмотрев архитектуру загрузки в пользу ТабличныйДокумент.Прочитать(), вы навсегда избавитесь от необходимости «ковырять» Службы компонентов и обеспечите бесперебойную работу вашей системы 1С.