Часто при разработке интеграций и загрузок данных в 1С мы сталкиваемся с ошибками инициализации внешних приложений, таких как Microsoft Excel или LibreOffice. При попытке выполнить код ПолучитьCOMОбъект(ПутьКФайлу) платформа может выдать критическую ошибку:
Ошибка получения объекта COM: -2146959355(0x80080005): Ошибка при выполнении приложения-сервера или Ошибка получения объекта COM: -2147467262(0x80004002): Интерфейс не поддерживается.
Давайте подробно разберем, проанализируем ситуацию и рассмотрим по шагам, как устранить эту неприятную проблему. Чаще всего она возникает, когда 1С (особенно серверная часть) пытается запустить Excel в фоновом режиме, но приложению не хватает специфических прав, профильных папок или мешают зависшие процессы.
Одной из главных причин, почему приложение-сервер не может выполниться, является нехватка прав у пользователя, под которым работает сервер 1С (чаще всего это USR1CV8). Выясним причину и настроим DCOM.
dcomcnfg.USR1CV8), дав ему полные права.USR1CV8. В некоторых случаях помогает выбор опции «Текущий пользователь» (Interactive user).Рассмотрим неочевидный, но крайне важный момент: Excel при фоновом запуске через COM обязательно требует наличия папки Desktop в профиле системы. Если ее нет, процесс падает с ошибкой 0x80080005.
Чтобы решить эту проблему, создайте папку Desktop вручную по следующим путям (в зависимости от разрядности вашей ОС и установленного пакета Office):
C:\Windows\System32\config\systemprofile\DesktopC:\Windows\SysWOW64\config\systemprofile\DesktopПосле создания папок обязательно зайдите в их свойства, перейдите на вкладку «Безопасность» и предоставьте полные права на чтение и запись пользователю USR1CV8.
Проанализируем ситуацию с ошибкой «Интерфейс не поддерживается». Она часто возникает из-за несовпадения разрядности клиента/сервера 1С и самого Microsoft Office. Сервер 1С x64 не может напрямую получить доступ к 32-битному COM-объекту без правильной настройки реестра или DCOM.
Если у вас установлен 32-битный Office на 64-битной Windows, в стандартной оснастке dcomcnfg вы можете не найти «Microsoft Excel Application». В этом случае запустите консоль специальной командой:
mmc comexp.msc /32
Только после этого в списке появится нужный компонент, и вы сможете настроить права, как было описано в первом шаге.
Посмотрим на пример из практики: после неудачного чтения файла в диспетчере задач остаются зависшие процессы EXCEL.EXE. Если их накапливается много, операционной системе не хватает ресурсов для создания новых COM-объектов, и 1С снова выдает ошибку.
Во-первых, откройте диспетчер задач и принудительно завершите все процессы EXCEL.EXE. Во-вторых, необходимо корректно писать код обработки на стороне 1С, чтобы гарантированно закрывать приложение даже при возникновении ошибок чтения ячеек.
Рассмотрим пример безопасного вызова:
Попытка
ОбъектЭксель = ПолучитьCOMОбъект(ПутьКФайлу);
// Выполняем чтение или запись данных
// ...
Исключение
Сообщить("Ошибка при работе с файлом: " + ОписаниеОшибки());
КонецПопытки;
Если ОбъектЭксель <> Неопределено Тогда
Попытка
ОбъектЭксель.Application.Quit();
Исключение
КонецПопытки;
ОбъектЭксель = Неопределено;
КонецЕсли;
Такой подход с использованием блоков Попытка и Исключение, а также обязательным вызовом Application.Quit() позволяет освободить память и избежать «зависания» невидимых экземпляров Excel. Примеры правильного программного взаимодействия с ячейками демонстрирует обработка для чтения и записи области листа Excel через COMObject.
Иногда Excel зависает при запуске из-за того, что сторонние надстройки (плагины PDF-редакторов, антивирусов, криптопровайдеров) пытаются вывести какое-то всплывающее окно. Поскольку процесс запущен платформой 1С в фоновом (скрытом) режиме, пользователь не видит этого диалогового окна и не может нажать «ОК». Процесс останавливается, таймаут истекает, и 1С генерирует ошибку.
Для решения этой проблемы откройте Excel обычным способом (ярлыком на рабочем столе), перейдите по пути: Файл -> Параметры -> Надстройки. Внизу в выпадающем списке «Управление» выберите Надстройки COM и нажмите «Перейти». Снимите галочки со всех сторонних плагинов и перезапустите Excel. После этого проверьте работу обмена в 1С. Чтобы в дальнейшем автоматизировать регулярный обмен данными между базами 1С по расписанию, можно использовать специальный модуль, работающий через COM-соединение.
Применяя эти шаги в комплексе, вы сможете стабилизировать работу COM-соединения и навсегда избавиться от ошибок 0x80080005 и 0x80004002. В исправленной среде можно автоматически сравнить бухгалтерские и налоговые проводки через COM-соединение для выверки данных после их переноса или обмена.