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

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

Как отобразить таблицу значений в 1С

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

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

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

Какие способы отображения существуют и когда их применять

Перед выбором метода важно понимать контекст исполнения. Код, работающий в толстом клиенте обычного приложения, не всегда выполнится в тонком или веб-клиенте, а серверный код вообще не имеет доступа к интерфейсу. Поэтому способ вывода подбирается под конкретную ситуацию.

Основные варианты: отладочный показ через Показать(), вывод в табличный документ для печати или просмотра, отображение на управляемой форме через реквизит, а также передача данных в динамический список или отчет на СКД. Каждый из них имеет свои ограничения по производительности и интерактивности.

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

Метод Показать()

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

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

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

Реквизит формы + ТаблицаФормы

Полноценный интерактивный просмотр и редактирование в управляемой форме. Требует программного создания реквизитов и колонок.

Поле табличного документа на форме

Компромисс: статичный вывод внутри формы без печати. Данные нельзя редактировать напрямую.

Быстрая отладка: метод Показать() и табличный документ

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

ТЗ = Новый ТаблицаЗначений;

ТЗ.Колонки.Добавить("Номенклатура");

ТЗ.Колонки.Добавить("Количество");

// ... заполнение таблицы ...

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

Учтите: Показать() — модальный метод, он приостанавливает выполнение кода до закрытия окна и не работает на сервере, в тонком и веб-клиенте. Для этих режимов используйте вывод в табличный документ.

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

Табличный документ можно заполнить программно, перебрав строки таблицы значений. Это универсальный способ, который работает в любом клиенте и позволяет сразу распечатать результат.

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

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

// Заголовки колонок

НомерКолонки = 1;

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

ТабДок.Область(НомерСтроки, НомерКолонки).Текст = Колонка.Имя;

НомерКолонки = НомерКолонки + 1;

КонецЦикла;

// Данные

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

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

НомерКолонки = 1;

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

ТабДок.Область(НомерСтроки, НомерКолонки).Текст =

Строка(СтрокаТЗ[Колонка.Имя]);

НомерКолонки = НомерКолонки + 1;

КонецЦикла;

КонецЦикла;

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

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

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

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

&НаСервере

Процедура СоздатьТаблицуНаФорме(ТЗ)

// 1. Реквизиты

ДобавляемыеРеквизиты = Новый Массив;

РеквизитТаблица = Новый РеквизитФормы("ДанныеТаблицы",

Новый ОписаниеТипов("ТаблицаЗначений"));

ДобавляемыеРеквизиты.Добавить(РеквизитТаблица);

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

РеквизитКолонка = Новый РеквизитФормы(Колонка.Имя,

Колонка.ТипЗначения, "ДанныеТаблицы", Колонка.Заголовок);

ДобавляемыеРеквизиты.Добавить(РеквизитКолонка);

КонецЦикла;

ИзменитьРеквизиты(ДобавляемыеРеквизиты);

// 2. Элементы формы

ЭлементТаблица = Элементы.Добавить("ДанныеТаблицы",

Тип("ТаблицаФормы"));

ЭлементТаблица.ПутьКДанным = "ДанныеТаблицы";

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

ЭлементКолонка = Элементы.Добавить("Колонка_" + Колонка.Имя,

Тип("ПолеФормы"), ЭлементТаблица);

ЭлементКолонка.ПутьКДанным = "ДанныеТаблицы." + Колонка.Имя;

ЭлементКолонка.Вид = ВидПоляФормы.ПолеВвода;

КонецЦикла;

// 3. Заполнение данными

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

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

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

Типовая ошибка: вызов на клиенте

Методы ИзменитьРеквизиты() и ЗначениеВРеквизитФормы() доступны только на сервере. Если разместить этот код в клиентской процедуре, получите ошибку «Процедура или функция с указанным именем не определена» или недоступность метода. Всегда выносите создание реквизитов в серверный контекст, а из клиентской процедуры вызывайте серверную.

Отображение в обычных формах и через табличное поле

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

// Обычная форма, реквизит ТЗ уже добавлен в конфигураторе

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

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

ТаблицаДанных = ТЗ;

Если колонки не созданы в конфигураторе, табличное поле создаст их автоматически при присваивании значения. Для управляемых форм такой «автоматики» нет — это частая причина пустой таблицы у разработчиков, переходящих с обычных форм.

Отладочные варианты: сообщения и консоль кода

Когда интерактивный вывод недоступен (фоновое задание, серверный код), таблицу можно вывести построчно через Сообщить() или записать в журнал регистрации. Это грубый, но надежный способ проверить содержимое.

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

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

КонецЦикла;

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

Проверка результата и типичные ошибки

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

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

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

Таблица на форме видна
Норма

Отображаются все колонки и строки с данными

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

Таблица есть, но пустая — данные не загружены в реквизит

Типы колонок
Норма

Даты и числа показаны в читаемом формате

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

Везде строки — колонки созданы без типа значения

Производительность
Норма

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

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

Форма зависает — таблица слишком велика для вывода целиком

Повторное формирование
Норма

Данные обновляются без ошибок

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

Ошибка «Реквизит уже существует» — не удалены старые реквизиты

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

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

Как показать таблицу значений пользователю без программирования формы?

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

Почему на управляемой форме таблица отображается пустой?

Чаще всего данные не загружены в реквизит формы: создание реквизитов и элементов не заполняет таблицу само по себе. Проверьте, что вызван ЗначениеВРеквизитФормы(ТЗ, "ИмяРеквизита") и что сама исходная таблица содержит строки.

Как обновить таблицу на форме при повторном формировании?

Повторно добавлять реквизиты с теми же именами нельзя — будет ошибка. Либо удаляйте старые реквизиты через второй параметр ИзменитьРеквизиты(), либо создайте реквизиты один раз и при обновлении только очищайте реквизит и загружайте новые данные.

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

Интерактивный вывод там невозможен. Варианты: записать данные в журнал регистрации, сериализовать в JSON или XML и сохранить в файл, либо сохранить табличный документ на диск сервера для последующего просмотра.

Как вывести таблицу с иерархией или группировками?

Таблица значений плоская — для иерархии используйте дерево значений и элемент «ДеревоФормы». Группировки для просмотра удобнее реализовать через отчет на СКД, передав таблицу как внешний набор данных.

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

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

Итог

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

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