При автоматизации бизнес-процессов в 1С часто возникает задача выгрузки данных в формат Microsoft Excel. Самым популярным, но в то же время самым капризным методом является использование COM-соединения. Разберем типичную ситуацию: при выполнении кода Новый COMОбъект("Excel.Application") или при попытке добавить новую рабочую книгу WorkBooks.Add система выдает ошибку: «Приложению Microsoft Excel не удается открыть или сохранить документы из-за нехватки памяти или места на диске». При этом места на сервере достаточно, а оперативная память не загружена даже наполовину. Проанализируем причины этой ошибки и найдем способы её решения.
Это самая распространенная скрытая причина, если код выполняется на стороне сервера. Приложение Excel, запускаемое через COM, требует наличия рабочего стола (Desktop) в профиле пользователя, от имени которого работает служба 1C:Enterprise Server (обычно это USR1CV8). Если папки нет, Excel «считает», что ему не хватает ресурсов для инициализации интерфейса.
Рассмотрим, как это исправить по шагам:
Desktop по следующим путям:
C:\Windows\System32\config\systemprofile\DesktopC:\Windows\SysWOW64\config\systemprofile\DesktopПроанализируем ситуацию: после создания этих путей Excel получает виртуальное пространство для работы своих временных объектов, и ошибка нехватки памяти часто исчезает без перезагрузки сервера.
Иногда проблема кроется в несоответствии путей временных файлов в реестре, особенно если на сервере менялись пользователи или проводилось обновление системы. Рассмотрим решение через редактор реестра:
regedit от имени администратора.HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders.Cache. Если в нем указан путь к несуществующей папке старого пользователя (например, C:\Users\OldUser\AppData\Local\Microsoft\Windows\INetCache), Excel не сможет создать временные файлы при вызове WorkBooks.Add.%USERPROFILE%\AppData\Local\Microsoft\Windows\INetCache или напрямую на временную папку C:\Temp (предварительно создав её и дав права).Проделанные действия помогут системе правильно инициализировать переменные среды для COM-объекта.
Excel блокирует создание или открытие файлов, если считает источник или среду выполнения «ненадежной». Это часто случается при работе в фоновых заданиях. Разберем, какие настройки нужно изменить в самом Excel (запустив его под учетной записью администратора на сервере):
C:\1C_Temp\). Обязательно установим галочку «Также доверять всем вложенным папкам».Если сервер 1С работает под специфической учетной записью, прав на запуск COM-объекта может не хватать. Посмотрим, как настроить права через консоль управления:
Win+R, введем dcomcnfg и нажмем Enter.USR1CV8), предоставив ему все права.Важно понимать, что Microsoft официально не рекомендует использовать пакет Office на стороне сервера для автоматизации. Это приводит к зависанию процессов excel.exe и утечкам памяти. Рассмотрим более современный и надежный подход, который работает начиная с платформы 8.3.6. При необходимости выгрузки сложных многолистовых документов без COM и установки Office на сервере можно воспользоваться готовым инструментом для создания многолистовых файлов Excel.
Проанализируем пример кода, который создает файл Excel без установленного Microsoft Office и без использования COM-объектов:
// Создаем табличный документ, который будет служить макетом
ТабДок = Новый ТабличныйДокумент;
// Заполняем его данными (пример заполнения одной ячейки)
Область = ТабДок.Область(1, 1);
Область.Текст = "Привет, Excel!";
// Определяем путь для сохранения
ПутьКФайлу = "C:\Temp\MyReport.xlsx";
// Используем встроенный метод платформы для записи в формате XLSX
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
Преимущества этого метода:
Desktop.Выясним причину ошибки: если вам принципиально нужно использовать COMОбъект (например, для сложного форматирования, которое не поддерживает ТабличныйДокумент), начните с создания папок Desktop в профиле systemprofile. Если же ваша задача — просто выгрузить данные в таблицу, лучшим решением будет переход на метод Записать() объекта ТабличныйДокумент. Это избавит вас от проблем с «нехваткой памяти» раз и навсегда.