Как исправить ошибку «СоздатьОбъект не определена» при создании Excel файла и какие есть альтернативы в 1С 8.3

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

При переходе с платформы 1С 7.7 на 1С 8.3 программисты часто сталкиваются с тем, что привычные конструкции перестают работать. Одной из самых частых проблем является попытка создания объекта Excel старым способом. Разберем, почему возникает эта ошибка, как ее правильно исправить и какие современные методы работы с табличными данными существуют в актуальных версиях платформы.

Анализ причины ошибки: почему «СоздатьОбъект» не работает

Выясним причину возникновения ошибки Процедура или функция с указанным именем не определена (СоздатьОбъект). В платформе 1С:Предприятие 8.x (включая версии 8.2 и 8.3) метод СоздатьОбъект был полностью заменен на оператор Новый. Попытка использовать старый синтаксис в модуле управляемого приложения или на сервере приведет к тому, что компилятор просто не найдет такую функцию в глобальном контексте.

Рассмотрим правильный синтаксис для создания связи с Excel через COM-технологию:


&НаСервере
Процедура ВыгрузитьВЭксельНаСервере()
    Попытка
        // Правильный синтаксис для 1С 8.3
        Эксель = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("Ошибка: " + ОписаниеОшибки() + ". Программа Excel не установлена на сервере!");
        Возврат;
    КонецПопытки;
    
    // Дальнейшая работа с объектами Excel
    Книга = Эксель.WorkBooks.Add();
    Лист = Книга.Sheets.Add();
    
    // Пример заполнения данными
    Счетчик = 0;
    Для каждого Стр Из Объект.Остаток Цикл
        Счетчик = Счетчик + 1;
        Лист.Cells(Счетчик, 1).Value = Стр.Номенклатура;
    КонецЦикла;
    
    Попытка
        Книга.SaveAs("C:\Temp\Остатки.xlsx");
    Исключение
        Сообщить("Ошибка при сохранении: " + ОписаниеОшибки());
    КонецПопытки;
    
    // Обязательно закрываем приложение, чтобы Excel не висел в процессах
    Эксель.Quit();
КонецПроцедуры

Проблемы использования COM-объектов на стороне сервера

Проанализируем ситуацию, когда код выполняется в процедуре с директивой &НаСервере. Хотя синтаксическое исправление решит проблему запуска, возникнут серьезные инфраструктурные риски. Использование Excel.Application через COM на сервере официально не поддерживается Microsoft по следующим причинам:

  1. Интерактивные окна: Если Excel столкнется с ошибкой лицензии или запросит подтверждение открытия файла, он выведет диалоговое окно в скрытой сессии. На сервере некому нажать «ОК», и процесс 1С просто «зависнет» в ожидании ответа, потребляя ресурсы.
  2. Утечки ресурсов: Каждый запуск COM-объекта создает процесс Excel.exe. Если в коде произойдет ошибка до вызова метода Quit(), процесс останется в памяти. Со временем это может привести к полной неработоспособности сервера из-за нехватки ОЗУ.
  3. Права доступа: Пользователь, под которым работает служба сервера 1С (например, USR1CV8), часто не имеет прав на запуск DCOM-компонентов или не имеет созданного профиля рабочего стола (Desktop), без которого Excel не может инициализироваться.

Нативный метод 1С: использование Табличного Документа

Посмотрим на более надежный и кроссплатформенный способ решения задачи. В 1С 8.3 есть встроенный объект ТабличныйДокумент, который позволяет формировать файлы Excel напрямую, не требуя установки самого Microsoft Office. Это работает быстрее, стабильнее и поддерживается даже на Linux-серверах.

Разберем алгоритм по шагам:


&НаСервере
Процедура СформироватьФайлНативно()
    // Создаем пустой табличный документ
    ТабДок = Новый ТабличныйДокумент;
    
    // Заполняем его данными аналогично печатной форме
    Для каждого Стр Из Объект.Остаток Цикл
        НоваяСтрока = ТабДок.КоличествоСтрок() + 1;
        ТабДок.Область(НоваяСтрока, 1).Текст = Стр.Номенклатура;
    КонецЦикла;
    
    // Сохраняем сразу в формате XLSX
    ПутьКФайлу = "C:\Temp\Выгрузка.xlsx";
    ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры

Этот метод считается «золотым стандартом» в современной разработке на 1С, так как он полностью исключает зависимость от внешних программных компонентов.

Особенности работы в среде Linux

Проанализируем вопрос доступности технологий на разных операционных системах. Технология COM является проприетарной разработкой Microsoft и доступна исключительно в среде Windows. Если ваша база данных работает на сервере под управлением Linux, код с Новый COMОбъект("Excel.Application") выдаст ошибку во время выполнения.

Для Linux-серверов рекомендуются следующие подходы:

  1. Использование вышеупомянутого метода ТабличныйДокумент.Записать().
  2. Прямая генерация XML-структуры формата OpenXML (XLSX — это ZIP-архив с XML-файлами внутри).
  3. Использование внешних компонент (Native XLSX), которые работают напрямую с файловым потоком.

Настройка прав доступа на сервере Windows

Если вы все же решили использовать COM на Windows-сервере, необходимо убедиться, что у службы сервера 1С есть необходимые права. Выясним, что нужно настроить:

Во-первых, создайте папку Desktop в системных профилях, так как Excel ищет их при запуске:

Во-вторых, через утилиту dcomcnfg (Настройка служб компонентов) нужно предоставить пользователю USR1CV8 права на «Локальный запуск» и «Локальную активацию» для компонента Microsoft Excel Application.

Итоги и рекомендации

Подводя итог, можно сказать следующее: ошибка автора сообщения 0 вызвана использованием устаревшего синтаксиса СоздатьОбъект. Исправление на Новый COMОбъект решит проблему лишь поверхностно. Для профессиональной разработки в среде 1С 8.3 крайне рекомендуется отказаться от COM-объектов в пользу ТабличногоДокумента. Это обеспечит высокую производительность, стабильность серверных процессов и кроссплатформенность вашего решения.

← На главную