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

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

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

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

Табличный документ в 1С — объект типа «ТабличныйДокумент», который программа использует для печатных форм, отчётов и выгрузок. Сохранить его программно можно одним методом Записать(), указав имя файла и тип сохраняемого файла. Этого достаточно для выгрузки в MXL, PDF, Excel, HTML и ряд других форматов без участия пользователя.

Типичные сценарии: автоматическая рассылка отчётов по почте, выгрузка печатных форм в архив, сохранение результатов обработки в Excel для передачи контрагенту, формирование PDF-комплекта документов по регламентному заданию. Во всех случаях логика одинакова: сформировать табличный документ, вызвать Записать(), убедиться, что файл создан и открывается.

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

Метод Записать: синтаксис и параметры

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

Базовый пример выглядит так:

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

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

ТабДок.Записать("C:\Выгрузки\Отчет.pdf", ТипФайлаТабличногоДокумента.PDF);

Если тип файла не указан, платформа попытается определить формат по расширению имени файла. Явное указание типа надёжнее: при опечатке в расширении или нестандартном имени файла неявное определение может дать неожиданный результат.

bsl
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);

Доступные форматы и когда какой выбрать

Перечисление ТипФайлаТабличногоДокумента содержит заметно больше форматов, чем используется на практике. Реальный выбор обычно стоит между MXL, PDF и таблицами Excel.

ФорматЗначение перечисленияКогда применять
MXLMXLВнутренний формат 1С; хранение и повторное открытие в 1С без потерь
PDFPDFОтправка контрагентам, архив, документы «только для чтения»
XLSX / XLSXLSX / XLSПередача данных для дальнейшей обработки в Excel
ODSODSОбмен с пользователями LibreOffice / OpenOffice
HTMLHTML5 / HTML4Публикация на веб-странице, вставка в письмо
TXTTXTПростой текстовый обмен, фиксированные форматы выгрузки
ANSITXTANSITXTТекст в ANSI-кодировке для старых систем

Для PDF есть дополнительная настройка через объект «ПараметрыЗаписиPDF»: можно ограничить выгрузку диапазоном страниц, задать уровень сжатия. Для Excel стоит помнить, что XLS ограничен 65536 строками — при больших объёмах используйте XLSX.

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

PDF

Лучший вид при печати и гарантированная неизменность; не подходит, если получатель хочет редактировать данные

XLSX

Данные можно фильтровать и пересчитывать; сложное форматирование (объединённые ячейки, картинки) может исказиться

MXL

Полное сохранение структуры, но открывается только в 1С — внешнему получателю не подходит

Сохранение на клиенте и на сервере: в чём разница

Ключевой подводный камень — место выполнения кода. Если Записать() вызывается в клиентской процедуре, файл создаётся на компьютере пользователя, и путь C:\Отчеты означает диск его машины. Если код выполняется на сервере (директива &НаСервере, регламентное задание, фоновое задание), тот же путь указывает на диск сервера 1С — пользователь файл у себя не увидит.

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

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

Пошаговый пример: выгрузка отчёта в PDF

Полный цикл от формирования до готового файла удобно выстроить по шагам и выполнять их в проверенном порядке.

Порядок действий
  1. 1
    Создайте объект: ТабДок = Новый ТабличныйДокумент
  2. 2
    Заполните документ: выведите макет, области, установите параметры печати
  3. 3
    Убедитесь, что каталог назначения существует, при необходимости создайте его методом СоздатьКаталог()
  4. 4
    Вызовите ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF)
  5. 5
    Проверьте результат: Файл = Новый Файл(ИмяФайла); Файл.Существует()

Пример серверной процедуры целиком:

&НаСервере

Процедура СохранитьОтчетВPDF(ИмяФайла)

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

Макет = ПолучитьМакетОтчета(); // функция формирования

ТабДок.Вывести(Макет);

ТабДок.АвтоМасштаб = Истина;

ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);

КонецПроцедуры

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

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

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

Существование файла
Норма

Новый Файл(ИмяФайла).Существует() = Истина

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

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

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

Размер больше нуля и сопоставим с объёмом данных

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

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

Открытие файла
Норма

PDF/Excel открывается без ошибок, данные читаются

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

Ошибка формата — неверно указан тип файла или имя

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

Большинство проблем при программном сохранении связано не с самим методом, а с окружением: путями, правами и контекстом выполнения.

Типичные ошибки
01
Сохранение на сервере с ожиданием файла на клиенте — файл «теряется» на диске сервера
02
Относительный путь вместо полного — файл создаётся в неочевидном рабочем каталоге
03
Несуществующий каталог — метод Записать вызывает исключение, обработка прерывается
04
Несоответствие расширения и типа файла — получатель не может открыть документ
05
Запись в XLS при объёме больше 65536 строк — данные обрезаются без предупреждения
06
Отсутствие обработки исключений — при регламентном задании ошибка остаётся незамеченной

Оборачивайте вызов Записать() в конструкцию Попытка ... Исключение ... КонецПопытки и записывайте текст ошибки в журнал регистрации через ЗаписьЖурналаРегистрации(). Для регламентных заданий это единственный способ узнать, что выгрузка не состоялась.

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

Альтернативы методу Записать

Если задача — передать документ пользователю, а не положить файл на диск, есть варианты без явного сохранения. Метод Показать() открывает документ в окне просмотра, откуда пользователь сохранит его сам. Для отправки по почте табличный документ можно сразу записать во временный файл и вложить в письмо через объект «ИнтернетПочтовоеСообщение».

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

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

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

Файл нужен пользователю на его компьютереЗаписывайте на клиенте или передавайте через временное хранилище
Выгрузка выполняется регламентным заданиемЗаписывайте на сервер в каталог с гарантированными правами и логируйте ошибки
Получатель — внешний контрагентИспользуйте PDF для чтения или XLSX для редактирования
Обмен между базами 1СИспользуйте MXL и методы Записать/Прочитать

FAQ

Можно ли сохранить табличный документ в Word (DOCX)?

Прямого значения DOCX в перечислении ТипФайлаТабличногоДокумента нет. Практические обходные пути: сохранение в HTML и открытие его в Word, выгрузка в XLSX либо использование внешних компонент и COM-объекта Word для формирования документа напрямую.

Почему при сохранении в Excel ломается форматирование?

При выгрузке в XLSX платформа переносит данные и базовое оформление, но сложные элементы — объединённые ячейки с нестандартной структурой, вложенные таблицы, некоторые картинки — могут искажаться. Если критичен внешний вид, используйте PDF; если критичны данные — упрощайте макет.

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

На клиенте используйте объект ДиалогВыбораФайла в режиме РежимДиалогаВыбораФайла.Сохранение: пользователь укажет путь, после чего вызовите ТабДок.Записать() с полученным именем файла.

Записать() выдаёт ошибку «Ошибка доступа к файлу» — что делать?

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

Можно ли сохранить табличный документ без вывода на экран?

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

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

Оптимален PDF: он компактен, открывается на любом устройстве без 1С и защищает документ от случайного редактирования. MXL стоит хранить дополнительно, если потребуется повторная обработка документа средствами 1С.

Итог

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

Сохранение табличного документа выполняется методом Записать(ИмяФайла, ТипФайла). Выбирайте формат под задачу (PDF — для чтения, XLSX — для редактирования, MXL — для обмена между базами), учитывайте контекст выполнения (клиент или сервер), проверяйте существование и размер файла и логируйте ошибки при фоновой выгрузке.