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

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

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

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

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

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

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

Вывод таблицы значений через Сообщить()

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

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

Сообщить(Строка(СтрокаТЗ.Номенклатура) + " | "

+ СтрокаТЗ.Количество + " | " + СтрокаТЗ.Сумма);

КонецЦикла;

Чтобы не выводить тысячи строк при отладке больших таблиц, ограничивайте вывод счётчиком — например, первыми 20 строками. Также полезно перед циклом вывести количество строк: Сообщить("Строк в таблице: " + ТаблицаЗначений.Количество()); — это сразу покажет, пустая таблица или нет.

Обратите внимание: значения ссылочных типов выводятся как представления, а значения типа «Дата» и «Число» — в формате по умолчанию. Если нужен конкретный формат, используйте функцию Формат().

bsl
Для Каждого СтрокаТЗ Из ТЗ Цикл
    Сообщить(Формат(СтрокаТЗ.Дата, "ДЛФ=D") + " | " + СтрокаТЗ.Контрагент);
КонецЦикла;

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

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

Программное заполнение ячеек

Создайте объект ТабличныйДокумент, заполните строки в цикле и вызовите метод Показать(). Этот вариант даёт полный контроль над оформлением, но требует больше кода:

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

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

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

ТабДок.Область("R" + НомерСтроки + "C1").Текст = Строка(СтрокаТЗ.Номенклатура);

ТабДок.Область("R" + НомерСтроки + "C2").Текст = СтрокаТЗ.Количество;

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

КонецЦикла;

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

Вывод через ПостроительОтчета

Более быстрый вариант — объект ПостроительОтчета. Он автоматически формирует шапку с именами колонок и выводит все строки одним вызовом:

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

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

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

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

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

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

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

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

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

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

// На сервере

Процедура ЗаполнитьТаблицуНаСервере()

ТЗ = ПолучитьДанные(); // произвольная таблица значений

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

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

Ключевой момент: напрямую присвоить таблицу значений реквизиту формы нельзя — реквизит формы имеет тип «ДанныеФормыКоллекция». Преобразование выполняют методы ЗначениеВРеквизитФормы() и обратно РеквизитФормыВЗначение(). Если колонки реквизита и таблицы совпадают по именам, можно использовать ЗначениеВДанныеФормы().

Порядок вывода на управляемую форму
  1. 1
    Добавьте реквизит формы типа ТаблицаЗначений с нужными колонками
  2. 2
    Перетащите реквизит в дерево элементов формы — платформа создаст таблицу с колонками
  3. 3
    В серверной процедуре получите таблицу значений и загрузите её через ЗначениеВРеквизитФормы()
  4. 4
    Откройте форму и проверьте, что строки и колонки отображаются

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

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

В конфигураторе также работает «Табло» (Ctrl+Shift+W): добавьте туда выражение с именем переменной, и при остановке отладки увидите структуру объекта, количество строк и сможете раскрыть содержимое. Это самый быстрый способ проверить, что запрос или обработка вернули ожидаемые данные.

Ограничение: при отладке серверного кода просмотр доступен, но если таблица очень большая, открытие окна просмотра может занять заметное время. В таких случаях смотрите выборочно — например, выражение ТЗ[0] покажет первую строку.

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

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

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

Совпадает с ожидаемым числом записей результата запроса

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

Таблица пустая или строк заметно больше — проверьте условия запроса и соединения

Имена колонок
Норма

Совпадают с теми, к которым обращается код вывода

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

Ошибка «Поле не найдено» — имя колонки отличается или колонка не создана

Типы значений
Норма

Числа выводятся как числа, даты — как даты

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

Все значения строкового типа — данные загружены из строкового источника без преобразования

Вывод через схему компоновки данных

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

ВнешниеНаборы = Новый Структура("ТЗ", ТаблицаЗначений);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ТабДок);

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

ТабДок.Показать("Отчёт");

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

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

Сообщить()

Мгновенно, только для разработчика; не подходит для больших таблиц и конечных пользователей

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

Печать и сохранение в файл; требует кода заполнения или построителя отчёта

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

Интерактивность и редактирование; нужна доработка формы и преобразование типов

СКД

Группировки, итоги, отборы; самый трудоёмкий в настройке вариант

Отладчик

Без изменения кода; работает только в сеансе отладки

Типичные ошибки и ограничения

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

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

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

Типичные ошибки
01
Присвоение таблицы значений реквизиту формы напрямую — ошибка несоответствия типов; нужно ЗначениеВРеквизитФормы()
02
Вызов Сообщить() в серверной процедуре без привязки к сеансу — сообщения копятся и показываются пачкой, иногда теряются при исключении
03
Вывод миллионов строк в табличный документ — зависание клиента; ограничивайте объём
04
Несовпадение имён полей СКД и колонок таблицы — пустые колонки в отчёте без явной ошибки

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

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

Через отладчик: остановитесь на точке останова, выделите переменную, нажмите Shift+F9 и выберите показ значения в отдельном окне. Таблица откроется в табличном виде со всеми строками и колонками.

Почему Сообщить() ничего не показывает?

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

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

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

Как выгрузить таблицу значений в Excel вместо экрана?

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

Чем отличается таблица значений от динамического списка на форме?

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

Как вывести только часть колонок таблицы значений?

При выводе через цикл просто обращайтесь к нужным колонкам. Для табличного документа или формы создайте копию таблицы с нужными колонками через ТЗ.Скопировать(,"Колонка1,Колонка2") либо настройте видимость колонок у элемента формы.

Итог

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

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