Разработка и Конфигурация · 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);
Если табличный документ получен из печатной формы или отчёта, его не нужно создавать заново — достаточно вызвать Записать() у готового объекта. Например, в типовых конфигурациях печатная форма возвращается функцией формирования, и её результат можно сразу сохранить.
Процедура СохранитьВExcel(ТабДок, Каталог)
ИмяФайла = Каталог + "\Отчет_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_HHmmss") + ".xlsx";
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедурыОбратите внимание на формирование имени файла. Добавление даты и времени в имя предотвращает перезапись предыдущих выгрузок и ошибки «файл занят», когда пользователь ещё не закрыл прошлый файл в Excel. Это простая практика, которая избавляет от большинства обращений пользователей с ошибкой сохранения.
Выбор между XLSX, XLS и ODS
Выбор формата определяется тем, кто и как будет открывать файл. Для большинства сценариев подходит XLSX: его открывают все актуальные версии Excel, LibreOffice и онлайн-редакторы. Формат XLS имеет ограничение в 65536 строк на лист, тогда как XLSX поддерживает значительно больше — это критично при выгрузке крупных таблиц, например оборотных ведомостей за длительный период.
Сравнение форматов
Универсальный выбор. Открывается везде, поддерживает большие таблицы. Ограничений для типовых задач нет.
Только если получатель работает в Excel 2003 или старой учётной системе. Ограничение около 65 тысяч строк на лист.
Для получателей на OpenOffice/LibreOffice без лицензии Microsoft Office. Excel тоже открывает, но возможны потери форматирования.
Если выгрузка предназначена для дальнейшей машинной обработки (загрузка в другую систему), иногда рациональнее сохранять не в Excel, а в CSV или формировать файл через текстовый документ — это убирает проблемы с форматами чисел и дат. Но для передачи человеку Excel остаётся стандартом.
Сохранение на сервере и передача файла клиенту
В клиент-серверном режиме код часто выполняется на сервере, где нет доступа к диску пользователя. Типовая схема выглядит так: серверная процедура формирует табличный документ и записывает его во временный файл, затем файл помещается во временное хранилище, а на клиенте извлекается и сохраняется через диалог выбора файла.
&НаСервере
Функция СформироватьФайлНаСервере()
ТабДок = СформироватьОтчет(); // ваша процедура
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
ТабДок.Записать(ИмяВременногоФайла,
ТипФайлаТабличногоДокумента.XLSX);
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные,
УникальныйИдентификаторФормы);
УдалитьФайлы(ИмяВременногоФайла);
Возврат Адрес;
КонецФункции
На клиенте остаётся получить данные из хранилища и записать их в выбранное пользователем место. Для интерактивного сохранения используется ДиалогВыбораФайла в режиме сохранения либо метод ПолучитьФайл при работе через расширение работы с файлами.
- 1Сформируйте табличный документ в серверной процедуре
- 2Запишите его во временный файл с типом XLSX
- 3Прочитайте файл в ДвоичныеДанные и поместите во временное хранилище
- 4Удалите временный файл на сервере
- 5На клиенте покажите диалог сохранения и запишите данные из хранилища
- 6Откройте полученный файл и проверьте содержимое
В файловом режиме работы (база в каталоге на диске) всё проще: метод Записать() можно вызывать прямо в клиентской процедуре, и файл появится по указанному пути. Но код, написанный с расчётом на серверный вызов, будет корректно работать в обоих режимах, поэтому для доработок рекомендуется именно серверный вариант.
Типичные ошибки и как их избежать
Самая частая проблема — ошибка записи из-за недоступности пути. Каталог может не существовать, у пользователя (или учётной записи агента сервера 1С) может не быть прав на запись, а сетевой путь может быть недоступен. Перед записью стоит проверять существование каталога объектом Файл и при необходимости создавать его.
Вторая группа ошибок связана с занятым файлом: если пользователь открыл прошлую выгрузку в Excel, повторная запись в тот же файл завершится исключением. Лечится уникальными именами файлов или обёрткой вызова в попытку с понятным сообщением пользователю.
Третья группа — несоответствие расширения и типа файла. Если записать файл с расширением .xlsx, но указать тип XLS, Excel при открытии выдаст предупреждение о несоответствии формата. Всегда согласовывайте расширение имени файла с передаваемым типом.
Проверка результата и контроль качества выгрузки
После записи полезно убедиться, что файл действительно создан и не пустой. Программно это делается проверкой существования файла и его размера. Нулевой размер или отсутствие файла означают, что запись не выполнилась, даже если исключения не было.
Как проверить результат
Объект Файл с Существует() = Истина
Файла нет — запись не выполнилась, проверяйте путь и права
Размер больше нескольких килобайт (зависит от объёма данных)
Нулевой размер — документ был пуст или запись оборвалась
Файл открывается без предупреждений, данные и форматирование на месте
Предупреждение о формате — расширение не совпадает с типом файла
Количество строк соответствует источнику
Обрезанные строки — вероятно, использован формат XLS с лимитом строк
Для регламентных выгрузок имеет смысл логировать факт сохранения: имя файла, время, пользователя, количество строк. Это упрощает разбор ситуаций «файл не пришёл» и позволяет повторить выгрузку без обращения к разработчику.
Если выгрузка выполняется регламентным заданием, сохраняйте файлы в сетевой каталог, доступный и серверу 1С, и ответственным пользователям. Проверяйте доступность каталога в начале задания — это самая частая причина «тихих» сбоев ночных выгрузок.
Альтернативы: когда Записать недостаточно
Метод Записать() закрывает большинство задач, но есть сценарии, где нужны другие подходы. Если требуется заполнить готовый Excel-шаблон с формулами, диаграммами и макросами, сохранение табличного документа не подойдёт — шаблон будет потерян. В этом случае используют COM-объект Excel.Application (только на Windows с установленным Office) или формируют файл построчно через чтение и модификацию готового XLSX как zip-архива.
Для обмена данными между системами вместо Excel часто лучше подходят CSV, XML или JSON: они не зависят от форматирования и надёжнее парсятся. Excel-формат оправдан, когда конечный потребитель файла — человек, которому важны внешний вид и возможность ручной правки.
Как выбрать способ выгрузки
Стоит помнить и про интерактивный вариант: пользователь может сам сохранить открытый табличный документ через меню «Файл — Сохранить копию». Программная выгрузка нужна, когда процесс должен быть автоматическим, массовым или встроенным в бизнес-процесс.
Что важно запомнить
Сохранение табличного документа в Excel выполняется методом Записать с типом XLSX и не требует установленного Office. Проверяйте каталог и права, делайте уникальные имена файлов, на сервере передавайте результат через временное хранилище, а после записи контролируйте существование и размер файла.
Частые вопросы
Нужен ли установленный Excel для сохранения файла из 1С?
Нет. Метод Записать формирует файл средствами платформы, поэтому работает на любом компьютере и на Linux-сервере. Установленный Office нужен только для варианта с COM-объектом Excel.Application.
Как сохранить табличный документ в Excel из управляемой формы?
Сформируйте документ и запишите его в серверной процедуре во временный файл, поместите двоичные данные во временное хранилище, а на клиенте предложите диалог сохранения и запишите данные из хранилища. Прямой вызов Записать в клиентском коде работает только в файловом режиме.
Почему Excel ругается на несоответствие формата при открытии файла?
Расширение имени файла не совпадает с фактическим типом: например, файл назван .xlsx, но записан с типом XLS. Приведите расширение и параметр ТипФайлаТабличногоДокумента в соответствие друг другу.
Что делать, если при записи возникает ошибка «Ошибка доступа к файлу»?
Проверьте, что каталог существует и у учётной записи, под которой выполняется код (у сервера 1С это учётная запись агента), есть права на запись. Также убедитесь, что файл с таким именем не открыт в Excel — в этом случае используйте уникальное имя с датой и временем.
Сохраняются ли при выгрузке группировки и расшифровка отчёта?
Нет. В Excel переносятся значения ячеек, форматирование, объединённые области и картинки, но интерактивные механизмы 1С — расшифровка, отборы, динамические группировки — в файле не работают. Получатель получает статичную таблицу.
Как выгрузить очень большую таблицу, если строк больше лимита XLS?
Используйте тип XLSX — его лимит строк значительно выше старого формата. Если данных больше и этого порога, разбивайте выгрузку на несколько файлов или переходите на CSV, который не имеет практического ограничения по строкам.