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

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

1С: как сохранить табличный документ в Excel программно

Как программно сохранить табличный документ 1С в Excel через метод Записать: типы файлов, примеры кода, ошибки и проверка результата.

Табличный документ в 1С — это универсальный объект, в котором формируются печатные формы, отчёты и произвольные таблицы. У пользователей регулярно возникает потребность передать такой документ контрагенту или открыть его для доработки в Excel, поэтому программное сохранение в формат XLSX или XLS — одна из самых частых задач при доработке конфигураций.

Для решения задачи используется метод Записать() объекта «ТабличныйДокумент» с указанием пути к файлу и типа файла. Никаких внешних компонентов и установленного Microsoft Office на компьютере не требуется: платформа 1С сама формирует файл в нужном формате. Это принципиально отличает метод от интеграции через COM-объект Excel, которая требует установленного офисного пакета и работает заметно медленнее.

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

Как работает метод Записать и какие форматы доступны

Метод Записать() объекта «ТабличныйДокумент» принимает два ключевых параметра: полное имя файла (путь вместе с именем и расширением) и тип файла из системного перечисления ТипФайлаТабличногоДокумента. Если тип не указан, платформа пытается определить его по расширению файла, но явное указание надёжнее и делает код читаемым.

Для выгрузки в Excel используются три основных значения перечисления. XLSX — современный формат Office Open XML, рекомендуемый по умолчанию. XLS — устаревший бинарный формат Excel 97–2003, нужен только для совместимости со старым ПО получателя. XLS95 и другие экзотические варианты на практике почти не применяются. Дополнительно доступны форматы ODS (OpenDocument), MXL (родной формат 1С), PDF, HTML и другие.

Важно понимать ограничение: при сохранении в Excel переносятся значения, форматирование ячеек, объединения и ширина колонок, но не переносятся расшифровки, интерактивные элементы и логика группировок 1С. Получатель получает «плоский» статичный файл.

Минимальный пример: сохранение в XLSX

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

ТабДок = Новый ТабличныйДокумент;

// ... заполнение документа ...

ТабДок.Записать("C:\Выгрузки\Отчет.xlsx",

ТипФайлаТабличногоДокумента.XLSX);

Если табличный документ получен из печатной формы или отчёта, его не нужно создавать заново — достаточно вызвать Записать() у готового объекта. Например, в типовых конфигурациях печатная форма возвращается функцией формирования, и её результат можно сразу сохранить.

bsl
Процедура СохранитьВExcel(ТабДок, Каталог)
    ИмяФайла = Каталог + "\Отчет_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_HHmmss") + ".xlsx";
    ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры

Обратите внимание на формирование имени файла. Добавление даты и времени в имя предотвращает перезапись предыдущих выгрузок и ошибки «файл занят», когда пользователь ещё не закрыл прошлый файл в Excel. Это простая практика, которая избавляет от большинства обращений пользователей с ошибкой сохранения.

Выбор между XLSX, XLS и ODS

Выбор формата определяется тем, кто и как будет открывать файл. Для большинства сценариев подходит XLSX: его открывают все актуальные версии Excel, LibreOffice и онлайн-редакторы. Формат XLS имеет ограничение в 65536 строк на лист, тогда как XLSX поддерживает значительно больше — это критично при выгрузке крупных таблиц, например оборотных ведомостей за длительный период.

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

XLSX

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

XLS

Только если получатель работает в Excel 2003 или старой учётной системе. Ограничение около 65 тысяч строк на лист.

ODS

Для получателей на OpenOffice/LibreOffice без лицензии Microsoft Office. Excel тоже открывает, но возможны потери форматирования.

Если выгрузка предназначена для дальнейшей машинной обработки (загрузка в другую систему), иногда рациональнее сохранять не в Excel, а в CSV или формировать файл через текстовый документ — это убирает проблемы с форматами чисел и дат. Но для передачи человеку Excel остаётся стандартом.

Сохранение на сервере и передача файла клиенту

В клиент-серверном режиме код часто выполняется на сервере, где нет доступа к диску пользователя. Типовая схема выглядит так: серверная процедура формирует табличный документ и записывает его во временный файл, затем файл помещается во временное хранилище, а на клиенте извлекается и сохраняется через диалог выбора файла.

&НаСервере

Функция СформироватьФайлНаСервере()

ТабДок = СформироватьОтчет(); // ваша процедура

ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");

ТабДок.Записать(ИмяВременногоФайла,

ТипФайлаТабличногоДокумента.XLSX);

ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);

Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные,

УникальныйИдентификаторФормы);

УдалитьФайлы(ИмяВременногоФайла);

Возврат Адрес;

КонецФункции

На клиенте остаётся получить данные из хранилища и записать их в выбранное пользователем место. Для интерактивного сохранения используется ДиалогВыбораФайла в режиме сохранения либо метод ПолучитьФайл при работе через расширение работы с файлами.

Порядок выгрузки из клиент-серверной базы
  1. 1
    Сформируйте табличный документ в серверной процедуре
  2. 2
    Запишите его во временный файл с типом XLSX
  3. 3
    Прочитайте файл в ДвоичныеДанные и поместите во временное хранилище
  4. 4
    Удалите временный файл на сервере
  5. 5
    На клиенте покажите диалог сохранения и запишите данные из хранилища
  6. 6
    Откройте полученный файл и проверьте содержимое

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

Типичные ошибки и как их избежать

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

Вторая группа ошибок связана с занятым файлом: если пользователь открыл прошлую выгрузку в Excel, повторная запись в тот же файл завершится исключением. Лечится уникальными именами файлов или обёрткой вызова в попытку с понятным сообщением пользователю.

Типичные ошибки
01
Запись в несуществующий каталог — вызов Записать падает с ошибкой; проверяйте каталог объектом Файл заранее
02
Фиксированное имя файла — повторная выгрузка падает, если файл открыт в Excel; добавляйте дату-время в имя
03
Сохранение в XLS при большом объёме — строки сверх лимита формата теряются; используйте XLSX
04
Вызов клиентского диалога сохранения в серверной процедуре — недопустимо в управляемых формах; передавайте файл через временное хранилище
05
Игнорирование исключений — пользователь не понимает, что файл не сохранён; оборачивайте Записать в Попытка/Исключение

Третья группа — несоответствие расширения и типа файла. Если записать файл с расширением .xlsx, но указать тип XLS, Excel при открытии выдаст предупреждение о несоответствии формата. Всегда согласовывайте расширение имени файла с передаваемым типом.

Проверка результата и контроль качества выгрузки

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

Контрольные точки

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

Файл существует по указанному пути
Норма

Объект Файл с Существует() = Истина

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

Файла нет — запись не выполнилась, проверяйте путь и права

Размер файла
Норма

Размер больше нескольких килобайт (зависит от объёма данных)

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

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

Открытие в Excel
Норма

Файл открывается без предупреждений, данные и форматирование на месте

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

Предупреждение о формате — расширение не совпадает с типом файла

Полнота данных
Норма

Количество строк соответствует источнику

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

Обрезанные строки — вероятно, использован формат XLS с лимитом строк

Для регламентных выгрузок имеет смысл логировать факт сохранения: имя файла, время, пользователя, количество строк. Это упрощает разбор ситуаций «файл не пришёл» и позволяет повторить выгрузку без обращения к разработчику.

Если выгрузка выполняется регламентным заданием, сохраняйте файлы в сетевой каталог, доступный и серверу 1С, и ответственным пользователям. Проверяйте доступность каталога в начале задания — это самая частая причина «тихих» сбоев ночных выгрузок.
ПЗ
Практическое замечание

Альтернативы: когда Записать недостаточно

Метод Записать() закрывает большинство задач, но есть сценарии, где нужны другие подходы. Если требуется заполнить готовый Excel-шаблон с формулами, диаграммами и макросами, сохранение табличного документа не подойдёт — шаблон будет потерян. В этом случае используют COM-объект Excel.Application (только на Windows с установленным Office) или формируют файл построчно через чтение и модификацию готового XLSX как zip-архива.

Для обмена данными между системами вместо Excel часто лучше подходят CSV, XML или JSON: они не зависят от форматирования и надёжнее парсятся. Excel-формат оправдан, когда конечный потребитель файла — человек, которому важны внешний вид и возможность ручной правки.

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

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

Нужно отдать пользователю готовую таблицу для просмотраТабличныйДокумент.Записать с типом XLSX
Нужно заполнить сложный Excel-шаблон с формуламиCOM-объект Excel или работа с XLSX как пакетом
Файл уйдёт в другую информационную системуРассмотрите CSV/XML вместо Excel
Код выполняется регламентным заданием на сервереЗаписать напрямую в сетевой каталог, без клиентских диалогов

Стоит помнить и про интерактивный вариант: пользователь может сам сохранить открытый табличный документ через меню «Файл — Сохранить копию». Программная выгрузка нужна, когда процесс должен быть автоматическим, массовым или встроенным в бизнес-процесс.

Итог

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

Сохранение табличного документа в Excel выполняется методом Записать с типом XLSX и не требует установленного Office. Проверяйте каталог и права, делайте уникальные имена файлов, на сервере передавайте результат через временное хранилище, а после записи контролируйте существование и размер файла.

Частые вопросы

Нужен ли установленный Excel для сохранения файла из 1С?

Нет. Метод Записать формирует файл средствами платформы, поэтому работает на любом компьютере и на Linux-сервере. Установленный Office нужен только для варианта с COM-объектом Excel.Application.

Как сохранить табличный документ в Excel из управляемой формы?

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

Почему Excel ругается на несоответствие формата при открытии файла?

Расширение имени файла не совпадает с фактическим типом: например, файл назван .xlsx, но записан с типом XLS. Приведите расширение и параметр ТипФайлаТабличногоДокумента в соответствие друг другу.

Что делать, если при записи возникает ошибка «Ошибка доступа к файлу»?

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

Сохраняются ли при выгрузке группировки и расшифровка отчёта?

Нет. В Excel переносятся значения ячеек, форматирование, объединённые области и картинки, но интерактивные механизмы 1С — расшифровка, отборы, динамические группировки — в файле не работают. Получатель получает статичную таблицу.

Как выгрузить очень большую таблицу, если строк больше лимита XLS?

Используйте тип XLSX — его лимит строк значительно выше старого формата. Если данных больше и этого порога, разбивайте выгрузку на несколько файлов или переходите на CSV, который не имеет практического ограничения по строкам.