Разработка и Конфигурация · 8 мин
Как сохранить таблицу значений в табличный документ 1С
Как вывести таблицу значений в табличный документ 1С: построчный перебор, построитель отчета, СКД. Примеры кода, проверка результата и типичные ошибки.
Таблица значений в 1С — это объект в памяти, который пользователь не видит напрямую. Чтобы показать её содержимое, распечатать или сохранить в файл (Excel, MXL, PDF), данные нужно перенести в табличный документ. Задача решается несколькими способами: от простого построчного перебора с выводом ячеек до автоматического построения через построитель отчёта или СКД.
Выбор метода зависит от требований к оформлению. Если нужен контроль над каждой ячейкой, группировками и итогами — подходит ручной вывод через области макета. Если достаточно «плоской» таблицы с шапкой — быстрее воспользоваться построителем отчёта, который сам сформирует заголовки колонок. Ниже разобраны все основные подходы с готовым кодом.
Что понадобится перед началом работы
Для вывода потребуется заполненная таблица значений (объект типа ТаблицаЗначений) и новый объект ТабличныйДокумент. Таблица значений должна иметь явно описанные колонки — если она получена из запроса, колонки создаются автоматически по полям выборки.
Дополнительно желательно подготовить макет (объект метаданных «Макет» в общих макетах или макет обработки/отчёта) с именованными областями «Шапка» и «Строка». Макет позволяет отделить оформление от кода: шрифты, границы и форматы ячеек настраиваются визуально, а в коде остаётся только заполнение параметров.
Способ 1. Построчный вывод через макет
Это базовый и самый управляемый вариант. Создаётся макет с двумя областями: «Шапка» (заголовки колонок) и «Строка» (параметры для каждой колонки). В коде области последовательно выводятся в табличный документ.
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетТаблицы");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТЗ Из ТаблицаЗначений Цикл
ОбластьСтрока.Параметры.Номенклатура = СтрокаТЗ.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТЗ.Количество;
ОбластьСтрока.Параметры.Сумма = СтрокаТЗ.Сумма;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ТабДок.Показать("Результат выгрузки");
Имена параметров в макете должны совпадать с именами, к которым обращается код. Если параметр не заполнен, в ячейке окажется пустое значение без ошибки — это частая причина «пустых» колонок при опечатке в имени параметра.
Обратите внимание: одна и та же область ОбластьСтрока переиспользуется в цикле. Перед каждым выводом параметры заполняются заново, иначе в документ попадут значения предыдущей итерации.
- 1Создайте макет с областями «Шапка» и «Строка», задайте параметры в ячейках строки
- 2В коде создайте Новый ТабличныйДокумент и получите макет
- 3Выведите шапку один раз до цикла
- 4В цикле по строкам таблицы значений заполняйте параметры и выводите область строки
- 5Покажите документ методом Показать() или сохраните методом Записать()
Способ 2. Вывод без макета — прямой доступ к ячейкам
Если макет создавать не хочется, ячейки можно заполнять напрямую через область табличного документа. Способ подходит для быстрой отладки или простых выгрузок, когда оформление не важно.
ТабДок = Новый ТабличныйДокумент;
НомерСтроки = 1;
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
ТабДок.Область(НомерСтроки, ТаблицаЗначений.Колонки.Индекс(Колонка) + 1).Текст = Колонка.Имя;
КонецЦикла;
Для Каждого СтрокаТЗ Из ТаблицаЗначений Цикл
НомерСтроки = НомерСтроки + 1;
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
ТабДок.Область(НомерСтроки, ТаблицаЗначений.Колонки.Индекс(Колонка) + 1).Текст = Строка(СтрокаТЗ[Колонка.Имя]);
КонецЦикла;
КонецЦикла;
Здесь заголовки формируются автоматически из имён колонок таблицы значений. Минус подхода — все значения приводятся к строке, поэтому теряются форматы чисел и дат, а при сохранении в Excel числа могут распознаваться как текст. Для «боевых» отчётов лучше использовать макет или построитель.
Способ 3. Построитель отчёта — быстрый вывод простой таблицы
Если таблица значений уже готова и нужен аккуратный табличный документ с шапкой «в один заход», удобен объект ПостроительОтчета. Он сам создаёт колонки и выводит данные.
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначений);
Построитель.ЗаполнитьНастройки();
ТабДок = Новый ТабличныйДокумент;
Построитель.Вывести(ТабДок);
ТабДок.Показать("Таблица значений");
Построитель автоматически формирует заголовки по именам полей и применяет стандартное оформление. Недостаток — ограниченный контроль над внешним видом: для нестандартных группировок, многострочных шапок и сложных итогов он не предназначен.
Сравнение способов вывода
Полный контроль над оформлением, группировками и итогами. Требует ручной работы и аккуратности с именами параметров.
Быстро для отладки, не нужен макет. Теряются форматы, всё выводится как текст.
Минимум кода, автоматическая шапка. Подходит только для простых плоских таблиц.
Максимальные возможности: отборы, группировки, ресурсы. Избыточна для простого переноса таблицы.
Сохранение табличного документа в файл
После заполнения табличный документ сохраняется методом Записать() с указанием типа файла. Поддерживаются форматы MXL, XLSX, PDF, HTML, ODS, TXT и другие.
ТабДок.Записать("C:\Temp\Выгрузка.xlsx", ТипФайлаТабличногоДокумента.XLSX);
// Или на сервере с передачей клиенту:
ДанныеФайла = ТабДок.Записать(ТипФайлаТабличногоДокумента.XLSX); // поток в памяти
При вызове Записать с одним аргументом-типом метод возвращает поток — это удобно в веб-клиенте и при передаче файла с сервера на клиент без дисковых операций. На тонком клиенте запись в произвольный путь файловой системы может быть недоступна из-за безопасного режима — используйте диалог сохранения файла или механизм ПолучитьФайл.
Проверка результата и типичные ошибки
После вывода убедитесь, что число строк в табличном документе совпадает с количеством строк таблицы значений плюс шапка. Проверьте, что числовые колонки сохранили тип — при выводе через параметры макета тип сохраняется автоматически, при прямом заполнении свойства Текст — нет.
Как проверить результат
Строк данных = строкам таблицы значений, шапка одна
Строк меньше/больше, шапки повторяются
Числа и даты распознаются в Excel как числа и даты
Всё сохранено как текст, суммы не считаются
Все колонки содержат значения
Отдельные колонки пустые — проверьте имена параметров
FAQ
Как вывести таблицу значений в табличный документ без макета и без построителя?
Используйте прямое обращение к ячейкам через ТабДок.Область(Строка, Колонка).Текст. Учтите, что значения будут строками; для чисел лучше задать ячейке свойство Значение вместо Текст, чтобы сохранить тип.
Можно ли сохранить табличный документ в Excel на сервере без показа пользователю?
Да. Метод Записать() с типом XLSX работает на сервере. Результат можно поместить во временное хранилище и передать клиенту для скачивания через ПолучитьФайл.
Почему при сохранении в XLSX числа становятся текстом?
Обычно потому, что в ячейку записана строка (через свойство Текст или функцию Строка()). Заполняйте параметры макета значениями исходного типа или используйте свойство Значение области.
Как добавить итоги по числовым колонкам?
При ручном выводе создайте в макете область «Итоги» и заполните её параметры результатами ТаблицаЗначений.Итог("ИмяКолонки"). Построитель отчёта и СКД умеют считать итоги автоматически.
Что делать, если таблица содержит сотни тысяч строк?
Табличный документ не предназначен для таких объёмов. Выгружайте данные напрямую в CSV/Excel построчно через ТекстовыйДокумент или COM/ADO, либо ограничьте выборку на этапе запроса.
Что важно запомнить
Для полного контроля используйте макет и построчный вывод областей, для простой таблицы — построитель отчёта. Сохранение выполняется методом Записать() с нужным типом файла, а показ пользователю возможен только на клиенте.