Разработка и Конфигурация · 9 мин
Как вывести таблицу значений в 1С
Как вывести таблицу значений в 1С: на форму, в табличный документ, в сообщение и на печать. Примеры кода, типичные ошибки и ответы на вопросы.
Таблица значений в 1С — универсальная структура для хранения промежуточных данных: результатов запросов, выборок из справочников, рассчитанных показателей. Но сама по себе таблица значений невидима для пользователя — чтобы её увидеть, нужно явно вывести данные в одно из доступных представлений: на форму, в табличный документ, в окно сообщений или в отчёт на СКД.
Выбор способа зависит от задачи. Для отладки достаточно вывести содержимое в сообщения или в консоль. Для интерактивной работы пользователя таблицу размещают на управляемой форме как динамический реквизит. Для печати и выгрузки в Excel используют табличный документ с построчным выводом. Ниже разобраны все основные сценарии с готовым кодом.
Что такое таблица значений и когда её нужно выводить
Таблица значений (объект ТаблицаЗначений) — это несвязанная с базой данных коллекция строк и колонок, которая существует только в памяти. Типичное появление таблицы — результат метода Выгрузить() у результата запроса или выборки. Дальше разработчик решает, как показать эти данные пользователю.
Важно понимать ограничение: таблица значений не отображается сама по себе и не сохраняется между сеансами. Если нужно показать данные интерактивно — таблица превращается в реквизит формы. Если нужен печатный вид — данные переносятся в табличный документ. Если нужна быстрая проверка — достаточно цикла с Сообщить().
Вывод таблицы значений на управляемую форму
Самый востребованный сценарий — показать таблицу пользователю на форме обработки или отчёта. Для этого в конфигураторе добавляют реквизит формы с типом «ТаблицаЗначений», у него создают подчинённые реквизиты-колонки с нужными типами, а затем перетаскивают реквизит в дерево элементов формы — платформа автоматически создаст таблицу с колонками.
Заполнение выполняется кодом. Если таблица получена из запроса, достаточно присвоить её реквизиту через ЗначениеВРеквизитФормы или напрямую загрузить:
Запрос = Новый Запрос("ВЫБРАТЬ Номенклатура, Количество ИЗ РегистрНакопления.Остатки.Остатки");
ТЗ = Запрос.Выполнить().Выгрузить();
ЗначениеВРеквизитФормы(ТЗ, "ТаблицаДанных");
Если колонки таблицы значений совпадают по именам с реквизитами формы, можно использовать ТаблицаДанных.Загрузить(ТЗ) — метод скопирует строки. При несовпадении состава колонок платформа выдаст ошибку, поэтому перед загрузкой стоит проверить структуру.
Программное создание колонок на форме
Когда состав колонок заранее неизвестен (например, динамический отчёт), реквизиты и элементы формы создают программно в обработчике ПриСозданииНаСервере: сначала формируют массив добавляемых реквизитов через Новый РеквизитФормы, вызывают ИзменитьРеквизиты(), затем добавляют элементы Элементы.Добавить() с привязкой к путям данных. Это трудоёмкий, но единственный способ для полностью динамической структуры.
Вывод таблицы значений в табличный документ
Табличный документ — стандартный способ показать данные для просмотра, печати и сохранения в Excel. Классический приём — создать макет с областями «Шапка» и «Строка», а затем в цикле по таблице значений заполнять параметры и выводить области:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ТабДок.Вывести(ОбластьШапка);
Для Каждого Стр Из ТЗ Цикл
ОбластьСтрока.Параметры.Заполнить(Стр);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ТабДок.Показать("Результат");
Ключевой момент — имена параметров в макете должны совпадать с именами колонок таблицы значений, тогда Параметры.Заполнить(Стр) заполнит их автоматически. Иначе каждый параметр придётся присваивать вручную.
Для быстрого вывода без макета можно формировать табличный документ программно: в первой строке вывести имена колонок, далее построчно значения через ТабДок.Область("R" + НомерСтроки + "C" + НомерКолонки).Текст. Способ подходит для служебных выгрузок, но для пользовательских отчётов лучше макет — его можно менять без правки кода.
Вывод в сообщения и другие способы для отладки
Во время разработки часто нужно просто увидеть содержимое таблицы, не создавая форм и макетов. Самый простой вариант — цикл с выводом в окно сообщений:
Для Каждого Стр Из ТЗ Цикл
ТекстСтроки = "";
Для Каждого Колонка Из ТЗ.Колонки Цикл
ТекстСтроки = ТекстСтроки + " | " + Стр[Колонка.Имя];
КонецЦикла;
Сообщить(ТекстСтроки);
КонецЦикла;
Альтернативы для отладки: выгрузка таблицы в файл через ЗначениеВФайл() с последующим просмотром, передача таблицы в табличный документ через построитель отчёта (ПостроительОтчета.ИсточникДанных) или временный вывод на форму обработки «консоли». Во внешних инструментах вроде консоли кода таблица значений визуализируется автоматически.
- 1Создайте макет типа «Табличный документ» с областями «Шапка» и «Строка»
- 2Назовите параметры ячеек точно как колонки таблицы значений
- 3Получите макет и области в коде
- 4Выведите шапку, затем в цикле заполняйте параметры и выводите строки
- 5Вызовите ТабДок.Показать() и проверьте, что все колонки заполнены
Вывод через СКД и построитель отчёта
Если таблица значений — результат сложной программной обработки, а пользователю нужны группировки, итоги и настройки, данные передают в систему компоновки данных как внешний набор. В модуле объекта отчёта в обработчике ПриКомпоновкеРезультата формируют таблицу и передают её через КомпоновщикМакета с типом набора «Объект».
Более простой вариант — построитель отчёта: он принимает таблицу значений напрямую через Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ) и автоматически выводит её в табличный документ с шапкой по колонкам. Для служебных отчётов это самый быстрый путь.
Сравнение способов вывода
Интерактивная работа, редактирование, отбор. Требует описания колонок, тяжёлый при больших объёмах
Просмотр, печать, сохранение в Excel. Не редактируется как данные, только ячейки
Только отладка. Нет структуры, неудобно при большом числе строк
Отчёты с настройками и итогами. Требует дополнительной настройки схемы
Типичные ошибки и как их избежать
Наиболее частая проблема — попытка вывести таблицу значений на клиенте в тонком клиенте там, где объект недоступен, или передача таблицы между клиентом и сервером. На управляемых формах работа с ТаблицаЗначений возможна только в серверном контексте; на клиенте используют ДанныеФормыКоллекция.
Вторая группа ошибок связана с несовпадением имён: параметры макета не совпадают с колонками, реквизиты формы названы иначе, чем колонки выгрузки из запроса. Признак — пустые ячейки или исключение при загрузке. Проверяйте имена через ТЗ.Колонки перед выводом.
Как проверить результат
Совпадает с ТЗ.Количество() в отладчике
Строк меньше — проверяйте фильтры и область вывода
Все значения видны, типы отображаются корректно
Пустые ячейки при заполненной таблице — несовпадение имён
Форма открывается за 1–3 секунды
Заметная пауза — сократите объём или используйте динамический список
Частые вопросы
Что важно запомнить
Таблица значений не отображается сама — её выводят на форму через реквизит, в табличный документ через макет, в сообщения для отладки или в отчёт через СКД. Совпадение имён колонок и параметров — ключ к корректному выводу, а большие объёмы требуют динамического списка вместо реквизита формы.
Как вывести таблицу значений на форму, если колонки заранее неизвестны?
Создавайте реквизиты и элементы формы программно в ПриСозданииНаСервере: сформируйте массив объектов РеквизитФормы, вызовите ИзменитьРеквизиты(), затем добавьте элементы через Элементы.Добавить() с привязкой ПутьКДанным к колонкам таблицы.
Можно ли вывести таблицу значений в Excel напрямую?
Да, через табличный документ: выведите таблицу в ТабличныйДокумент, затем сохраните его методом Записать() с типом файла ТипФайлаТабличногоДокумента.XLSX. Прямой записи таблицы значений в Excel без промежуточного документа платформа не предоставляет.
Почему в табличном документе пустые ячейки, хотя таблица заполнена?
Чаще всего имена параметров в макете не совпадают с именами колонок таблицы значений, включая регистр и пробелы. Проверьте состав колонок через цикл по ТЗ.Колонки и сравните с именами параметров в макете.
Как вывести таблицу значений в обычном приложении (не управляемом)?
В обычных формах добавьте на форму элемент «ТабличноеПоле» и свяжите его с реквизитом типа ТаблицаЗначений через свойство Данные. Колонки табличного поля можно создать в конфигураторе или программно.
Что делать, если таблица содержит сотни тысяч строк?
Не выводите такой объём реквизитом формы — используйте динамический список на основе запроса, выгрузку в файл или постраничный вывод в табличный документ. Таблица значений целиком хранится в памяти и при больших объёмах приводит к замедлению и перерасходу памяти сервера.
Как посмотреть содержимое таблицы значений в отладчике?
В конфигураторе при остановке на точке останова выделите переменную таблицы, нажмите F2 (Вычислить выражение) и выберите «Показать значение в отдельном окне» — таблица откроется в виде сетки с возможностью прокрутки и просмотра всех колонок.