Разработка и Конфигурация · 10 мин
Как программно сохранить табличный документ в 1С
Как программно сохранить табличный документ 1С в файл: метод Записать, типы файлов MXL, PDF, Excel, HTML, примеры кода, проверка результата и типичные ошибки.
Табличный документ в 1С — объект типа «ТабличныйДокумент», который программа использует для печатных форм, отчётов и выгрузок. Сохранить его программно можно одним методом Записать(), указав имя файла и тип сохраняемого файла. Этого достаточно для выгрузки в MXL, PDF, Excel, HTML и ряд других форматов без участия пользователя.
Типичные сценарии: автоматическая рассылка отчётов по почте, выгрузка печатных форм в архив, сохранение результатов обработки в Excel для передачи контрагенту, формирование PDF-комплекта документов по регламентному заданию. Во всех случаях логика одинакова: сформировать табличный документ, вызвать Записать(), убедиться, что файл создан и открывается.
Ниже разобраны синтаксис метода, доступные форматы, различия толстого и тонкого клиента, сохранение на сервере, проверка результата и ошибки, которые чаще всего мешают получить корректный файл.
Метод Записать: синтаксис и параметры
Метод Записать() объекта «ТабличныйДокумент» принимает до трёх параметров. Первый — полное имя файла с расширением. Второй — значение системного перечисления ТипФайлаТабличногоДокумента, определяющее формат. Третий, необязательный, — параметры записи (например, объект «ПараметрыЗаписиPDF» для настройки выгрузки в PDF).
Базовый пример выглядит так:
ТабДок = Новый ТабличныйДокумент;
// ... заполнение документа ...
ТабДок.Записать("C:\Выгрузки\Отчет.pdf", ТипФайлаТабличногоДокумента.PDF);
Если тип файла не указан, платформа попытается определить формат по расширению имени файла. Явное указание типа надёжнее: при опечатке в расширении или нестандартном имени файла неявное определение может дать неожиданный результат.
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);Доступные форматы и когда какой выбрать
Перечисление ТипФайлаТабличногоДокумента содержит заметно больше форматов, чем используется на практике. Реальный выбор обычно стоит между MXL, PDF и таблицами Excel.
| Формат | Значение перечисления | Когда применять |
|---|---|---|
| MXL | MXL | Внутренний формат 1С; хранение и повторное открытие в 1С без потерь |
| Отправка контрагентам, архив, документы «только для чтения» | ||
| XLSX / XLS | XLSX / XLS | Передача данных для дальнейшей обработки в Excel |
| ODS | ODS | Обмен с пользователями LibreOffice / OpenOffice |
| HTML | HTML5 / HTML4 | Публикация на веб-странице, вставка в письмо |
| TXT | TXT | Простой текстовый обмен, фиксированные форматы выгрузки |
| ANSITXT | ANSITXT | Текст в ANSI-кодировке для старых систем |
Для PDF есть дополнительная настройка через объект «ПараметрыЗаписиPDF»: можно ограничить выгрузку диапазоном страниц, задать уровень сжатия. Для Excel стоит помнить, что XLS ограничен 65536 строками — при больших объёмах используйте XLSX.
Сравнение вариантов
Лучший вид при печати и гарантированная неизменность; не подходит, если получатель хочет редактировать данные
Данные можно фильтровать и пересчитывать; сложное форматирование (объединённые ячейки, картинки) может исказиться
Полное сохранение структуры, но открывается только в 1С — внешнему получателю не подходит
Сохранение на клиенте и на сервере: в чём разница
Ключевой подводный камень — место выполнения кода. Если Записать() вызывается в клиентской процедуре, файл создаётся на компьютере пользователя, и путь C:\Отчеты означает диск его машины. Если код выполняется на сервере (директива &НаСервере, регламентное задание, фоновое задание), тот же путь указывает на диск сервера 1С — пользователь файл у себя не увидит.
Типовая схема для управляемых форм: на сервере сформировать табличный документ и записать его во временный файл, поместить файл во временное хранилище, а на клиенте получить данные из хранилища и сохранить через диалог выбора файла. Либо передать сам табличный документ на клиент и вызвать Записать() уже там.
Для интерактивного сохранения с выбором имени удобен метод Показать() с последующим сохранением пользователем вручную, либо диалог ДиалогВыбораФайла в режиме сохранения — тогда пользователь сам решает, куда положить файл.
Пошаговый пример: выгрузка отчёта в PDF
Полный цикл от формирования до готового файла удобно выстроить по шагам и выполнять их в проверенном порядке.
- 1Создайте объект: ТабДок = Новый ТабличныйДокумент
- 2Заполните документ: выведите макет, области, установите параметры печати
- 3Убедитесь, что каталог назначения существует, при необходимости создайте его методом СоздатьКаталог()
- 4Вызовите ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF)
- 5Проверьте результат: Файл = Новый Файл(ИмяФайла); Файл.Существует()
Пример серверной процедуры целиком:
&НаСервере
Процедура СохранитьОтчетВPDF(ИмяФайла)
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакетОтчета(); // функция формирования
ТабДок.Вывести(Макет);
ТабДок.АвтоМасштаб = Истина;
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
КонецПроцедуры
Проверка результата не должна ограничиваться отсутствием исключения. Полезно убедиться, что файл существует, имеет ненулевой размер и открывается в соответствующей программе — особенно при выгрузке в Excel, где структура может формально записаться, но визуально «поехать».
Как проверить результат
Новый Файл(ИмяФайла).Существует() = Истина
Файла нет — проверяйте путь и права доступа
Размер больше нуля и сопоставим с объёмом данных
Нулевой размер — документ был пуст или запись прервана
PDF/Excel открывается без ошибок, данные читаются
Ошибка формата — неверно указан тип файла или имя
Типичные ошибки и как их избежать
Большинство проблем при программном сохранении связано не с самим методом, а с окружением: путями, правами и контекстом выполнения.
Оборачивайте вызов Записать() в конструкцию Попытка ... Исключение ... КонецПопытки и записывайте текст ошибки в журнал регистрации через ЗаписьЖурналаРегистрации(). Для регламентных заданий это единственный способ узнать, что выгрузка не состоялась.
Ещё одна тонкость: если табличный документ формируется через «СхемуКомпоновкиДанных» (типовые отчёты на СКД), сохранять нужно итоговый результат вывода — объект «ТабличныйДокумент», заполненный процессором вывода, а не саму схему.
Альтернативы методу Записать
Если задача — передать документ пользователю, а не положить файл на диск, есть варианты без явного сохранения. Метод Показать() открывает документ в окне просмотра, откуда пользователь сохранит его сам. Для отправки по почте табличный документ можно сразу записать во временный файл и вложить в письмо через объект «ИнтернетПочтовоеСообщение».
Для обмена между базами 1С удобен формат MXL: документ записывается методом Записать() в MXL, а в другой базе читается методом Прочитать() с полным сохранением структуры, форматирования и расшифровок.
Как выбрать действие
FAQ
Можно ли сохранить табличный документ в Word (DOCX)?
Прямого значения DOCX в перечислении ТипФайлаТабличногоДокумента нет. Практические обходные пути: сохранение в HTML и открытие его в Word, выгрузка в XLSX либо использование внешних компонент и COM-объекта Word для формирования документа напрямую.
Почему при сохранении в Excel ломается форматирование?
При выгрузке в XLSX платформа переносит данные и базовое оформление, но сложные элементы — объединённые ячейки с нестандартной структурой, вложенные таблицы, некоторые картинки — могут искажаться. Если критичен внешний вид, используйте PDF; если критичны данные — упрощайте макет.
Как сохранить файл, чтобы пользователь сам выбрал место?
На клиенте используйте объект ДиалогВыбораФайла в режиме РежимДиалогаВыбораФайла.Сохранение: пользователь укажет путь, после чего вызовите ТабДок.Записать() с полученным именем файла.
Записать() выдаёт ошибку «Ошибка доступа к файлу» — что делать?
Проверьте три вещи: существует ли каталог, есть ли у учётной записи (пользователя или службы сервера 1С) права на запись в него, не открыт ли файл другим приложением. В большинстве случаев причина — в правах на серверный каталог.
Можно ли сохранить табличный документ без вывода на экран?
Да. Метод Записать() не требует отображения документа: объект формируется и записывается полностью в фоне, в том числе в регламентных заданиях, где интерфейс в принципе недоступен.
Какой формат выбрать для архивного хранения печатных форм?
Оптимален PDF: он компактен, открывается на любом устройстве без 1С и защищает документ от случайного редактирования. MXL стоит хранить дополнительно, если потребуется повторная обработка документа средствами 1С.
Что важно запомнить
Сохранение табличного документа выполняется методом Записать(ИмяФайла, ТипФайла). Выбирайте формат под задачу (PDF — для чтения, XLSX — для редактирования, MXL — для обмена между базами), учитывайте контекст выполнения (клиент или сервер), проверяйте существование и размер файла и логируйте ошибки при фоновой выгрузке.