Разработка и Конфигурация · 10 мин
Как вывести таблицу значений на экран в 1С
Как вывести таблицу значений на экран в 1С: через Сообщить, табличный документ, табличное поле формы и отладчик. Примеры кода, ошибки и советы.
Таблица значений в 1С — это объект встроенного языка, который существует только в памяти и не имеет собственного визуального представления. Чтобы увидеть её содержимое, разработчику нужно явно передать данные в один из доступных интерфейсных механизмов: сообщение пользователю, табличный документ, элемент формы или окно отладчика.
Выбор способа зависит от задачи. Для быстрой проверки содержимого во время разработки достаточно цикла с выводом через Сообщить(). Для показа пользователю результата обработки удобнее табличный документ с возможностью печати. Если таблица должна быть интерактивной — с редактированием, отбором и сортировкой — её размещают на управляемой форме через реквизит формы.
Ниже разобраны все основные способы с примерами кода, ограничениями каждого подхода и типичными ошибками, которые приводят к пустому выводу или падению производительности.
Вывод таблицы значений через Сообщить()
Самый простой способ увидеть содержимое таблицы — перебрать строки в цикле и вывести значения колонок через Сообщить(). Результат появится в окне сообщений внизу окна клиентского приложения. Способ подходит только для разработчика: конечный пользователь такие данные обычно не читает.
Для Каждого СтрокаТЗ Из ТаблицаЗначений Цикл
Сообщить(Строка(СтрокаТЗ.Номенклатура) + " | "
+ СтрокаТЗ.Количество + " | " + СтрокаТЗ.Сумма);
КонецЦикла;
Чтобы не выводить тысячи строк при отладке больших таблиц, ограничивайте вывод счётчиком — например, первыми 20 строками. Также полезно перед циклом вывести количество строк: Сообщить("Строк в таблице: " + ТаблицаЗначений.Количество()); — это сразу покажет, пустая таблица или нет.
Обратите внимание: значения ссылочных типов выводятся как представления, а значения типа «Дата» и «Число» — в формате по умолчанию. Если нужен конкретный формат, используйте функцию Формат().
Для Каждого СтрокаТЗ Из ТЗ Цикл
Сообщить(Формат(СтрокаТЗ.Дата, "ДЛФ=D") + " | " + СтрокаТЗ.Контрагент);
КонецЦикла;Вывод в табличный документ
Табличный документ — стандартный способ показать пользователю структурированные данные с возможностью печати и сохранения в файл. Для вывода таблицы значений есть два подхода: программное заполнение ячеек и использование построителя отчёта с методом Вывести().
Программное заполнение ячеек
Создайте объект ТабличныйДокумент, заполните строки в цикле и вызовите метод Показать(). Этот вариант даёт полный контроль над оформлением, но требует больше кода:
ТабДок = Новый ТабличныйДокумент;
НомерСтроки = 1;
Для Каждого СтрокаТЗ Из ТаблицаЗначений Цикл
ТабДок.Область("R" + НомерСтроки + "C1").Текст = Строка(СтрокаТЗ.Номенклатура);
ТабДок.Область("R" + НомерСтроки + "C2").Текст = СтрокаТЗ.Количество;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
ТабДок.Показать("Результат обработки");
Вывод через ПостроительОтчета
Более быстрый вариант — объект ПостроительОтчета. Он автоматически формирует шапку с именами колонок и выводит все строки одним вызовом:
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначений);
Построитель.ЗаполнитьНастройки();
ТабДок = Новый ТабличныйДокумент;
Построитель.Вывести(ТабДок);
ТабДок.Показать("Таблица значений");
Метод работает и в толстом, и в тонком клиенте, но на тонком клиенте весь код должен выполняться в серверной или клиентской процедуре с учётом контекста — табличный документ создаётся на клиенте, а таблица значений обычно формируется на сервере. Передавайте таблицу между контекстами через параметры процедур.
Вывод таблицы значений на управляемую форму
Когда таблицу нужно показать интерактивно — с прокруткой, сортировкой и возможностью редактирования — её размещают на форме. В управляемых формах для этого служит реквизит формы типа «ТаблицаЗначений» и связанный с ним элемент «Таблица».
Порядок действий при программном создании: добавьте реквизит формы типа «ТаблицаЗначений», добавьте в него колонки через ИзменитьРеквизиты(), создайте элемент формы и привяжите его к реквизиту через свойство ПутьКДанным. Затем загрузите данные методом Загрузить():
// На сервере
Процедура ЗаполнитьТаблицуНаСервере()
ТЗ = ПолучитьДанные(); // произвольная таблица значений
ЗначениеВРеквизитФормы(ТЗ, "ТаблицаНаФорме");
КонецПроцедуры
Ключевой момент: напрямую присвоить таблицу значений реквизиту формы нельзя — реквизит формы имеет тип «ДанныеФормыКоллекция». Преобразование выполняют методы ЗначениеВРеквизитФормы() и обратно РеквизитФормыВЗначение(). Если колонки реквизита и таблицы совпадают по именам, можно использовать ЗначениеВДанныеФормы().
- 1Добавьте реквизит формы типа ТаблицаЗначений с нужными колонками
- 2Перетащите реквизит в дерево элементов формы — платформа создаст таблицу с колонками
- 3В серверной процедуре получите таблицу значений и загрузите её через ЗначениеВРеквизитФормы()
- 4Откройте форму и проверьте, что строки и колонки отображаются
Просмотр таблицы значений в отладчике
Во время отладки таблицу значений можно посмотреть без единой строки кода. Установите точку останова после заполнения таблицы, выделите переменную и нажмите Shift+F9 («Вычислить выражение»). В открывшемся окне для коллекций платформа предлагает кнопку «Показать значение в отдельном окне» — содержимое откроется в виде таблицы.
В конфигураторе также работает «Табло» (Ctrl+Shift+W): добавьте туда выражение с именем переменной, и при остановке отладки увидите структуру объекта, количество строк и сможете раскрыть содержимое. Это самый быстрый способ проверить, что запрос или обработка вернули ожидаемые данные.
Ограничение: при отладке серверного кода просмотр доступен, но если таблица очень большая, открытие окна просмотра может занять заметное время. В таких случаях смотрите выборочно — например, выражение ТЗ[0] покажет первую строку.
Как проверить результат
Совпадает с ожидаемым числом записей результата запроса
Таблица пустая или строк заметно больше — проверьте условия запроса и соединения
Совпадают с теми, к которым обращается код вывода
Ошибка «Поле не найдено» — имя колонки отличается или колонка не создана
Числа выводятся как числа, даты — как даты
Все значения строкового типа — данные загружены из строкового источника без преобразования
Вывод через схему компоновки данных
Если таблицу нужно показать пользователю как полноценный отчёт — с группировками, итогами, отборами и оформлением — используйте СКД с внешним источником данных. Таблица значений передаётся в процессор компоновки через коллекцию ВнешниеНаборыДанных:
ВнешниеНаборы = Новый Структура("ТЗ", ТаблицаЗначений);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ТабДок.Показать("Отчёт");
В схеме компоновки набор данных создаётся с типом «Объект», имя объекта должно совпадать с ключом структуры внешних наборов. Поля набора описываются вручную — имена и типы должны соответствовать колонкам таблицы значений, иначе в отчёте появятся пустые колонки или ошибка компоновки.
Сравнение способов вывода
Мгновенно, только для разработчика; не подходит для больших таблиц и конечных пользователей
Печать и сохранение в файл; требует кода заполнения или построителя отчёта
Интерактивность и редактирование; нужна доработка формы и преобразование типов
Группировки, итоги, отборы; самый трудоёмкий в настройке вариант
Без изменения кода; работает только в сеансе отладки
Типичные ошибки и ограничения
Частая проблема — попытка вывести таблицу значений на клиенте, когда она заполнена на сервере. В управляемом приложении таблица значений недоступна в клиентском контексте напрямую: передавайте её через параметр серверной процедуры или преобразуйте в массив структур, если объём данных небольшой.
Вторая типичная ситуация — пустой вывод при непустой таблице. Причины: обращение к колонке по несуществующему имени (платформа выдаст ошибку, но в некоторых конструкциях с Попытка она «проглатывается»), вывод в табличный документ без вызова Показать(), либо данные загружены в локальную переменную, а выводится другая.
При выводе больших таблиц (десятки тысяч строк и больше) табличный документ формируется медленно и потребляет много памяти. В таких случаях ограничивайте выборку, используйте постраничный вывод или выгружайте результат в файл напрямую.
Частые вопросы
Как быстро посмотреть таблицу значений без изменения кода?
Через отладчик: остановитесь на точке останова, выделите переменную, нажмите Shift+F9 и выберите показ значения в отдельном окне. Таблица откроется в табличном виде со всеми строками и колонками.
Почему Сообщить() ничего не показывает?
Чаще всего таблица пустая — проверьте ТЗ.Количество(). Также возможно, что код выполняется, но исключение перехвачено конструкцией Попытка/Исключение до вывода. Проверьте окно сообщений: оно может быть скрыто в интерфейсе клиента.
Можно ли вывести таблицу значений в мобильном клиенте?
Табличный документ в мобильном клиенте имеет ограничения. Надёжнее выводить данные через форму с реквизитом «ТаблицаЗначений» или динамический список — эти механизмы поддерживаются полностью.
Как выгрузить таблицу значений в Excel вместо экрана?
Заполните табличный документ и сохраните его методом Записать() с типом файла XLSX. Пользователь получит готовый файл, который можно открыть в Excel или другой табличной программе.
Чем отличается таблица значений от динамического списка на форме?
Таблица значений — статичный снимок данных в памяти, который заполняется программно. Динамический список связан с запросом к базе и обновляется автоматически при изменении данных. Для произвольных вычисленных данных подходит таблица значений, для данных из таблиц базы — динамический список.
Как вывести только часть колонок таблицы значений?
При выводе через цикл просто обращайтесь к нужным колонкам. Для табличного документа или формы создайте копию таблицы с нужными колонками через ТЗ.Скопировать(,"Колонка1,Колонка2") либо настройте видимость колонок у элемента формы.
Что важно запомнить
Для разработчика достаточно Сообщить() или отладчика, для пользователя — табличный документ или реквизит формы, для сложных отчётов — СКД с внешним набором данных. Всегда проверяйте количество строк и имена колонок перед выводом, а большие таблицы ограничивайте по объёму.