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

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

Как вывести таблицу значений в 1С

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

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

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

Что такое таблица значений и когда её нужно выводить

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

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

Вывод таблицы значений на управляемую форму

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

Заполнение выполняется кодом. Если таблица получена из запроса, достаточно присвоить её реквизиту через ЗначениеВРеквизитФормы или напрямую загрузить:

Запрос = Новый Запрос("ВЫБРАТЬ Номенклатура, Количество ИЗ РегистрНакопления.Остатки.Остатки");

ТЗ = Запрос.Выполнить().Выгрузить();

ЗначениеВРеквизитФормы(ТЗ, "ТаблицаДанных");

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

Программное создание колонок на форме

Когда состав колонок заранее неизвестен (например, динамический отчёт), реквизиты и элементы формы создают программно в обработчике ПриСозданииНаСервере: сначала формируют массив добавляемых реквизитов через Новый РеквизитФормы, вызывают ИзменитьРеквизиты(), затем добавляют элементы Элементы.Добавить() с привязкой к путям данных. Это трудоёмкий, но единственный способ для полностью динамической структуры.

Вывод таблицы значений в табличный документ

Табличный документ — стандартный способ показать данные для просмотра, печати и сохранения в Excel. Классический приём — создать макет с областями «Шапка» и «Строка», а затем в цикле по таблице значений заполнять параметры и выводить области:

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

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

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

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

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

Для Каждого Стр Из ТЗ Цикл

ОбластьСтрока.Параметры.Заполнить(Стр);

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

КонецЦикла;

ТабДок.Показать("Результат");

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

Для быстрого вывода без макета можно формировать табличный документ программно: в первой строке вывести имена колонок, далее построчно значения через ТабДок.Область("R" + НомерСтроки + "C" + НомерКолонки).Текст. Способ подходит для служебных выгрузок, но для пользовательских отчётов лучше макет — его можно менять без правки кода.

Вывод в сообщения и другие способы для отладки

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

Для Каждого Стр Из ТЗ Цикл

ТекстСтроки = "";

Для Каждого Колонка Из ТЗ.Колонки Цикл

ТекстСтроки = ТекстСтроки + " | " + Стр[Колонка.Имя];

КонецЦикла;

Сообщить(ТекстСтроки);

КонецЦикла;

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

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

Вывод через СКД и построитель отчёта

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

Более простой вариант — построитель отчёта: он принимает таблицу значений напрямую через Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ) и автоматически выводит её в табличный документ с шапкой по колонкам. Для служебных отчётов это самый быстрый путь.

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

Реквизит формы

Интерактивная работа, редактирование, отбор. Требует описания колонок, тяжёлый при больших объёмах

Табличный документ

Просмотр, печать, сохранение в Excel. Не редактируется как данные, только ячейки

Сообщения

Только отладка. Нет структуры, неудобно при большом числе строк

СКД / построитель

Отчёты с настройками и итогами. Требует дополнительной настройки схемы

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

Наиболее частая проблема — попытка вывести таблицу значений на клиенте в тонком клиенте там, где объект недоступен, или передача таблицы между клиентом и сервером. На управляемых формах работа с ТаблицаЗначений возможна только в серверном контексте; на клиенте используют ДанныеФормыКоллекция.

Вторая группа ошибок связана с несовпадением имён: параметры макета не совпадают с колонками, реквизиты формы названы иначе, чем колонки выгрузки из запроса. Признак — пустые ячейки или исключение при загрузке. Проверяйте имена через ТЗ.Колонки перед выводом.

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

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

Количество строк на форме или в документе
Норма

Совпадает с ТЗ.Количество() в отладчике

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

Строк меньше — проверяйте фильтры и область вывода

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

Все значения видны, типы отображаются корректно

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

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

Скорость открытия формы
Норма

Форма открывается за 1–3 секунды

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

Заметная пауза — сократите объём или используйте динамический список

Частые вопросы

Итог

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

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

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

Создавайте реквизиты и элементы формы программно в ПриСозданииНаСервере: сформируйте массив объектов РеквизитФормы, вызовите ИзменитьРеквизиты(), затем добавьте элементы через Элементы.Добавить() с привязкой ПутьКДанным к колонкам таблицы.

Можно ли вывести таблицу значений в Excel напрямую?

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

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

Чаще всего имена параметров в макете не совпадают с именами колонок таблицы значений, включая регистр и пробелы. Проверьте состав колонок через цикл по ТЗ.Колонки и сравните с именами параметров в макете.

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

В обычных формах добавьте на форму элемент «ТабличноеПоле» и свяжите его с реквизитом типа ТаблицаЗначений через свойство Данные. Колонки табличного поля можно создать в конфигураторе или программно.

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

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

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

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