К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как записать данные из 1С в файл Excel

Как записать данные из 1С в файл Excel: табличный документ, COM-объект Excel.Application, запись без Excel. Примеры кода, ошибки и проверка результата.

Запись данных из 1С в файл Excel — одна из самых частых задач при обмене с контрагентами, выгрузке отчётов и подготовке прайс-листов. В зависимости от ситуации применяются три подхода: сохранение табличного документа в формате XLSX, работа через COM-объект Excel.Application и формирование файла без установленного Excel на компьютере. У каждого способа есть свои ограничения по скорости, требованиям к окружению и совместимости.

Выбор метода определяется двумя вопросами: где выполняется код (на клиенте или на сервере) и установлен ли Microsoft Excel на этой машине. Простейший вариант — заполнить табличный документ и вызвать его метод Записать() с типом файла XLSX: он не требует Excel вообще и работает на сервере. COM-подход даёт полный контроль над форматированием, но требует установленного Excel и работает только под Windows.

Как выбрать способ записи в Excel

Прежде чем писать код, определите условия выполнения. Если обработка запускается в файловой базе на компьютере бухгалтера с установленным Office, допустим любой вариант. Если код выполняется на сервере 1С под Linux или в фоновом задании, COM-объект недоступен, и единственный рабочий путь — табличный документ или формирование файла программно.

Второй критерий — объём данных. Табличный документ комфортно работает с тысячами строк, но при выгрузке сотен тысяч записей потребление памяти резко растёт. В таких случаях данные либо разбивают на несколько файлов, либо выгружают в CSV, который Excel открывает напрямую.

Маршрут решения

Как выбрать действие

Excel на машине не установлен или код работает на сервереИспользуйте табличный документ и метод Записать() с типом XLSX
Нужна сложная вёрстка: формулы, диаграммы, условное форматированиеИспользуйте COM-объект Excel.Application на клиенте с установленным Office
Нужно выгрузить сотни тысяч строк без оформленияВыгружайте в CSV или разбивайте табличный документ на части
Файл должен открываться и в старых версиях ExcelСохраняйте в формате XLS (Excel 97-2003), но учтите ограничение в 65536 строк

Запись через табличный документ — универсальный способ

Табличный документ — встроенный объект платформы, который умеет сохраняться в форматы XLSX, XLS, ODS, PDF и другие. Это основной и рекомендуемый способ записи в Excel, потому что он не зависит от внешних программ. Достаточно создать объект, заполнить ячейки и вызвать метод записи.

Типовой код выглядит так: создаётся объект ТабличныйДокумент, в цикле по выборке или таблице значений заполняются области, затем вызывается ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX). Путь к файлу должен быть доступен тому процессу, где выполняется код: на сервере — серверному каталогу, на клиенте — локальному диску пользователя.

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

Обратите внимание на адресацию ячеек: область задаётся в формате «R{строка}C{колонка}», например R1C1. Если файл с таким именем уже существует, он будет перезаписан без предупреждения. Если файл открыт в Excel в момент записи, платформа выдаст ошибку доступа — это одна из самых частых причин сбоев.

Использование макета для оформления

Когда нужна шапка с заголовками, объединённые ячейки и рамки, удобнее заранее подготовить макет табличного документа в конфигураторе. В макете создают именованные области «Шапка», «Строка», «Подвал», затем в коде последовательно получают области через Макет.ПолучитьОбласть(), заполняют параметры и выводят через ТабДок.Вывести(). Такой подход отделяет оформление от логики и упрощает поддержку.

Запись через COM-объект Excel.Application

COM-подключение даёт доступ ко всем возможностям Excel: формулы, автофильтры, условное форматирование, диаграммы, закрепление областей. Код создаёт объект Excel.Application, добавляет книгу и заполняет лист через коллекцию Cells. Способ работает только на Windows-клиенте или Windows-сервере с установленным Microsoft Office.

bsl
Попытка
    Excel = Новый COMОбъект("Excel.Application");
Исключение
    Сообщить("Excel не установлен: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
Лист.Cells(1, 1).Value = "Наименование";
Лист.Cells(1, 2).Value = "Цена";
Книга.SaveAs("C:\Выгрузка\Товары.xlsx");
Excel.Quit();

Критически важно завершать работу вызовом Excel.Quit() и освобождать объект, иначе в диспетчере задач остаются зависшие процессы EXCEL.EXE. При массовых выгрузках это приводит к утечке памяти и блокировке файлов. Рекомендуется оборачивать весь код в попытку-исключение и в секции исключения также закрывать Excel.

Ускорение записи через COM

Построчная запись через Cells() медленная: каждый вызов — отдельное COM-обращение. Для ускорения отключают обновление экрана (Excel.ScreenUpdating = False) и автопересчёт формул, а массивы данных записывают диапазоном целиком. Даже с этими мерами на больших объёмах табличный документ обычно быстрее и стабильнее.

Запись без Excel и без табличного документа

Файл XLSX — это ZIP-архив с XML-файлами внутри, поэтому теоретически его можно сформировать программно через ЗаписьXML и упаковку. На практике такой путь оправдан редко: он трудоёмок и подвержен ошибкам в структуре. Гораздо чаще вместо него используют формат CSV или MXL.

CSV подходит, когда не нужны оформление и несколько листов: данные пишутся построчно через ЗаписьТекста с разделителем-точкой с запятой. Excel открывает такие файлы напрямую. Ограничения: нет форматирования, возможны проблемы с кодировкой (сохраняйте в UTF-8 с BOM) и с автоматическим преобразованием длинных чисел в экспоненциальную запись.

Сравнение вариантов

Табличный документ → XLSX

Универсальный, без Excel, сервер и клиент. Ограничение: большой расход памяти на сотнях тысяч строк

COM Excel.Application

Полное форматирование и формулы. Ограничение: нужен установленный Office, только Windows, риск зависших процессов

CSV через ЗаписьТекста

Максимально быстро для огромных объёмов. Ограничение: нет оформления, один лист, нюансы с кодировкой

Программная сборка XLSX через XML

Полный контроль без зависимостей. Ограничение: высокая трудоёмкость, легко получить повреждённый файл

Запись на клиенте и на сервере: в чём разница

В клиент-серверном режиме код с директивой &НаСервере выполняется на сервере 1С, и путь C:\Выгрузка\ будет указывать на диск сервера, а не компьютера пользователя. Это типичная ошибка: файл успешно создаётся, но пользователь его не находит. Решение — записать файл во временное хранилище на сервере, а затем передать на клиент через ПолучитьФайл() или НачатьПолучениеФайлов().

На тонком и веб-клиенте прямой записи на диск нет: файл сначала помещается во временное хранилище, затем пользователю предлагается диалог сохранения. В тонком клиенте также недоступна работа с файловой системой без расширения работы с файлами — его нужно запросить через НачатьПодключениеРасширенияРаботыСФайлами().

Проверка результата и типичные ошибки

После записи откройте файл и проверьте три вещи: количество строк совпадает с источником, числа не превратились в текст (признак — зелёные треугольники в углу ячеек и невозможность посчитать сумму), даты отображаются корректно. Числа становятся текстом, когда в ячейку записывают строковое представление — записывайте значения числового типа, а не форматированные строки.

Частая проблема с COM — ошибка «Ошибка при вызове конструктора (COMОбъект)»: она означает, что Excel не установлен, разрядность Office не совпадает с разрядностью клиента 1С или COM-компонент не зарегистрирован. Проверьте разрядность: 64-битный клиент 1С требует 64-битный Office для прямого COM-подключения.

Типичные ошибки
01
Запись в файл, открытый в Excel — ошибка доступа или потеря данных; закрывайте файл перед выгрузкой
02
Запись чисел как строк — итоги в Excel не считаются; передавайте значения числового типа
03
Отсутствие Excel.Quit() — накопление зависших процессов EXCEL.EXE и блокировка файлов
04
Запись на сервере по локальному пути клиента — файл создаётся на сервере, пользователь его не видит
05
Превышение лимита строк Excel (около миллиона для XLSX) — данные обрезаются без предупреждения; разбивайте выгрузку
Контрольные точки

Как проверить результат

Файл открывается в Excel
Норма

Открывается без предупреждений о повреждении

Тревожный признак

Сообщение о невозможности открыть или восстановлении содержимого

Количество строк
Норма

Совпадает с числом записей в источнике плюс шапка

Тревожный признак

Строк меньше — данные обрезаны или цикл завершился досрочно

Числа и суммы
Норма

Автосумма в Excel считает значения корректно

Тревожный признак

Ячейки с зелёным треугольником, сумма равна нулю

Кодировка CSV
Норма

Кириллица читается при открытии

Тревожный признак

Кракозябры — файл сохранён не в UTF-8 с BOM

FAQ

Итог

Что важно запомнить

Основной способ записи из 1С в Excel — табличный документ с методом Записать() в формате XLSX: он работает везде и не требует Office. COM-объект оставьте для задач со сложным форматированием и всегда закрывайте Excel через Quit(). Проверяйте, где выполняется код, и не забывайте про лимиты строк и типы данных.

Можно ли записать файл Excel на сервере 1С без установленного Office?

Да. Табличный документ сохраняется в XLSX штатными средствами платформы и не требует Excel ни на сервере, ни на клиенте. Достаточно заполнить объект ТабличныйДокумент и вызвать Записать() с типом ТипФайлаТабличногоДокумента.XLSX.

Почему возникает ошибка при создании COMОбъект("Excel.Application")?

Чаще всего Excel не установлен на машине, где выполняется код, либо разрядность Office не совпадает с разрядностью клиента 1С. Также COM недоступен на Linux-сервере и в веб-клиенте. Проверьте установку Office и разрядность обеих программ.

Как записать числа, чтобы в Excel считались суммы?

Передавайте в ячейку значения числового типа, а не строки с форматированием. В табличном документе задайте параметру области числовое значение, в COM используйте Value с числом. Строки вида «1 234,56» Excel воспринимает как текст.

Что делать, если строк больше миллиона?

Лист XLSX вмещает около миллиона строк. Разбейте данные на несколько листов или файлов, либо выгружайте в CSV — он не имеет жёсткого лимита, хотя Excel при открытии всё равно покажет только первый миллион строк.

Как передать файл пользователю, если запись выполняется на сервере?

Запишите файл во временный каталог сервера, поместите его во временное хранилище функцией ПоместитьВоВременноеХранилище(), а на клиенте получите через диалог сохранения или НачатьПолучениеФайлов(). Прямая запись на диск пользователя с сервера невозможна.

Чем отличается сохранение в XLS от XLSX?

XLS — устаревший формат с ограничением около 65 тысяч строк, нужен только для совместимости со старыми версиями Excel. XLSX — современный формат с большим лимитом строк и меньшим размером файла, используйте его по умолчанию.