Проблема с инициализацией COM-объектов Microsoft Excel в среде 1С:Предприятие 7.7 — это классическая задача, с которой часто сталкиваются системные администраторы и программисты при переносе старых баз на современные серверные операционные системы (Windows Server 2008/2012/2016/2019/2022). Ситуация часто выглядит парадоксально: в 1С 8.x всё работает идеально, файл вручную открывается без проблем, но 1С 7.7 упорно выдает ошибку «неудачная попытка создания объекта (Excel.Application)».
Разберем причины этого поведения и рассмотрим пошаговые инструкции по исправлению ситуации.
Проанализируем архитектурное различие. Платформа 1С 7.7 является строго 32-битным приложением. Если на сервере установлен 64-битный Microsoft Office, 32-битный процесс 1С не всегда может корректно инициировать 64-битный COM-сервер без дополнительных настроек в реестре или прослоек в системе. В то же время 1С 8.x может работать как в 32-битном, так и в 64-битном режиме (в зависимости от версии платформы), что делает её более гибкой.
Решение: Если есть возможность, переустановите Microsoft Office, выбрав 32-битную (x86) версию. Сама компания Microsoft до сих пор рекомендует использовать 32-битный Office для обеспечения максимальной совместимости со сторонними надстройками и COM-интерфейсами.
Выясним одну из самых неочевидных причин. При запуске через COM-объект Excel требует наличия определенных папок в профиле системы (SystemProfile), даже если он работает в фоновом (скрытом) режиме. Если этих папок нет, Excel не может инициализировать свои временные настройки и аварийно завершает работу еще до того, как 1С получит к нему доступ.
Рассмотрим алгоритм действий для исправления этой проблемы:
C:\Windows\SysWOW64\config\systemprofile\ (для 64-битных систем) или C:\Windows\System32\config\systemprofile\ (для 32-битных систем).Этот простой шаг решает проблему в 80% случаев на серверных ОС.
Если создание папок не помогло, проанализируем настройки компонента DCOM. Для этого нам потребуется утилита конфигурирования служб компонентов.
Выполним следующие шаги:
Win + R и введем команду dcomcnfg.{000208D5-...}).Иногда в системе установлено несколько версий Office или остались «хвосты» в реестре от предыдущих установок. В этом случае команда СоздатьОбъект("Excel.Application") может обращаться к неверному разделу реестра.
Посмотрим на пример кода, где мы указываем конкретную версию установленного Excel (ProgID):
// Вместо стандартного вызова:
// Эксел = СоздатьОбъект("Excel.Application");
// Попробуем указать версию явно:
Попытка
// Для Office 2010 это версия 14
Эксел = СоздатьОбъект("Excel.Application.14");
Исключение
Попытка
// Для Office 2013/2016/2019 пробуем другие версии
Эксел = СоздатьОбъект("Excel.Application.15");
Исключение
Сообщить("Excel не найден в системе!");
КонецПопытки;
КонецПопытки;
Как было замечено в обсуждении, если Excel работает в субботу (когда сервер пуст), но не работает в будни, проблема может быть связана с конфликтом сессий. Windows запрещает интерактивным приложениям (каким является Excel) запускаться в «нулевой сессии» или конфликтовать с уже запущенными процессами под тем же пользователем.
Проанализируем ситуацию в диспетчере задач. Если вы видите в списке процессов множество «зависших» excel.exe, это означает, что 1С не закрывает объект корректно. Убедитесь, что в конце работы с объектом вы вызываете метод Quit():
Эксел.Quit();
Эксел = 0; // Освобождаем ссылку
Если настройки DCOM и папок Desktop не помогают из-за жестких политик безопасности компании, рассмотрим альтернативные пути взаимодействия с файлами Excel, которые не требуют использования тяжелого COM-объекта Excel.Application.
Connection = СоздатьОбъект("ADODB.Connection");
ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ИмяФайла + ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";";
Connection.Open(ConnectionString);
Подведем итог: Начните с создания папок Desktop в системных профилях и проверки прав доступа. Если это не поможет — переходите к настройке DCOM и смене Удостоверения. Эти шаги в совокупности позволяют решить проблему в подавляющем большинстве случаев.