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

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

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

Как вывести таблицу значений в табличный документ 1С: построчный перебор, построитель отчета, СКД. Примеры кода, проверка результата и типичные ошибки.

Таблица значений в 1С — это объект в памяти, который пользователь не видит напрямую. Чтобы показать её содержимое, распечатать или сохранить в файл (Excel, MXL, PDF), данные нужно перенести в табличный документ. Задача решается несколькими способами: от простого построчного перебора с выводом ячеек до автоматического построения через построитель отчёта или СКД.

Выбор метода зависит от требований к оформлению. Если нужен контроль над каждой ячейкой, группировками и итогами — подходит ручной вывод через области макета. Если достаточно «плоской» таблицы с шапкой — быстрее воспользоваться построителем отчёта, который сам сформирует заголовки колонок. Ниже разобраны все основные подходы с готовым кодом.

Что понадобится перед началом работы

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

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

Способ 1. Построчный вывод через макет

Это базовый и самый управляемый вариант. Создаётся макет с двумя областями: «Шапка» (заголовки колонок) и «Строка» (параметры для каждой колонки). В коде области последовательно выводятся в табличный документ.

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

Макет = ПолучитьМакет("МакетТаблицы");

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ТабДок.Вывести(ОбластьШапка);

ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Для Каждого СтрокаТЗ Из ТаблицаЗначений Цикл

ОбластьСтрока.Параметры.Номенклатура = СтрокаТЗ.Номенклатура;

ОбластьСтрока.Параметры.Количество = СтрокаТЗ.Количество;

ОбластьСтрока.Параметры.Сумма = СтрокаТЗ.Сумма;

ТабДок.Вывести(ОбластьСтрока);

КонецЦикла;

ТабДок.Показать("Результат выгрузки");

Имена параметров в макете должны совпадать с именами, к которым обращается код. Если параметр не заполнен, в ячейке окажется пустое значение без ошибки — это частая причина «пустых» колонок при опечатке в имени параметра.

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

Порядок действий при ручном выводе
  1. 1
    Создайте макет с областями «Шапка» и «Строка», задайте параметры в ячейках строки
  2. 2
    В коде создайте Новый ТабличныйДокумент и получите макет
  3. 3
    Выведите шапку один раз до цикла
  4. 4
    В цикле по строкам таблицы значений заполняйте параметры и выводите область строки
  5. 5
    Покажите документ методом Показать() или сохраните методом Записать()

Способ 2. Вывод без макета — прямой доступ к ячейкам

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

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

НомерСтроки = 1;

Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл

ТабДок.Область(НомерСтроки, ТаблицаЗначений.Колонки.Индекс(Колонка) + 1).Текст = Колонка.Имя;

КонецЦикла;

Для Каждого СтрокаТЗ Из ТаблицаЗначений Цикл

НомерСтроки = НомерСтроки + 1;

Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл

ТабДок.Область(НомерСтроки, ТаблицаЗначений.Колонки.Индекс(Колонка) + 1).Текст = Строка(СтрокаТЗ[Колонка.Имя]);

КонецЦикла;

КонецЦикла;

Здесь заголовки формируются автоматически из имён колонок таблицы значений. Минус подхода — все значения приводятся к строке, поэтому теряются форматы чисел и дат, а при сохранении в Excel числа могут распознаваться как текст. Для «боевых» отчётов лучше использовать макет или построитель.

Способ 3. Построитель отчёта — быстрый вывод простой таблицы

Если таблица значений уже готова и нужен аккуратный табличный документ с шапкой «в один заход», удобен объект ПостроительОтчета. Он сам создаёт колонки и выводит данные.

Построитель = Новый ПостроительОтчета;

Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначений);

Построитель.ЗаполнитьНастройки();

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

Построитель.Вывести(ТабДок);

ТабДок.Показать("Таблица значений");

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

Сравнение способов вывода

Макет + построчный вывод

Полный контроль над оформлением, группировками и итогами. Требует ручной работы и аккуратности с именами параметров.

Прямой доступ к ячейкам

Быстро для отладки, не нужен макет. Теряются форматы, всё выводится как текст.

Построитель отчёта

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

СКД (схема компоновки)

Максимальные возможности: отборы, группировки, ресурсы. Избыточна для простого переноса таблицы.

Сохранение табличного документа в файл

После заполнения табличный документ сохраняется методом Записать() с указанием типа файла. Поддерживаются форматы MXL, XLSX, PDF, HTML, ODS, TXT и другие.

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

// Или на сервере с передачей клиенту:

ДанныеФайла = ТабДок.Записать(ТипФайлаТабличногоДокумента.XLSX); // поток в памяти

При вызове Записать с одним аргументом-типом метод возвращает поток — это удобно в веб-клиенте и при передаче файла с сервера на клиент без дисковых операций. На тонком клиенте запись в произвольный путь файловой системы может быть недоступна из-за безопасного режима — используйте диалог сохранения файла или механизм ПолучитьФайл.

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

После вывода убедитесь, что число строк в табличном документе совпадает с количеством строк таблицы значений плюс шапка. Проверьте, что числовые колонки сохранили тип — при выводе через параметры макета тип сохраняется автоматически, при прямом заполнении свойства Текст — нет.

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

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

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

Строк данных = строкам таблицы значений, шапка одна

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

Строк меньше/больше, шапки повторяются

Типы данных
Норма

Числа и даты распознаются в Excel как числа и даты

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

Всё сохранено как текст, суммы не считаются

Заполненность колонок
Норма

Все колонки содержат значения

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

Отдельные колонки пустые — проверьте имена параметров

FAQ

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

Используйте прямое обращение к ячейкам через ТабДок.Область(Строка, Колонка).Текст. Учтите, что значения будут строками; для чисел лучше задать ячейке свойство Значение вместо Текст, чтобы сохранить тип.

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

Да. Метод Записать() с типом XLSX работает на сервере. Результат можно поместить во временное хранилище и передать клиенту для скачивания через ПолучитьФайл.

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

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

Как добавить итоги по числовым колонкам?

При ручном выводе создайте в макете область «Итоги» и заполните её параметры результатами ТаблицаЗначений.Итог("ИмяКолонки"). Построитель отчёта и СКД умеют считать итоги автоматически.

Что делать, если таблица содержит сотни тысяч строк?

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

Итог

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

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