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

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

Как вывести таблицу на форму 1С

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

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

Главный принцип управляемых форм 1С: элемент формы не хранит данные сам, а лишь отображает реквизит формы через свойство «ПутьКДанным». Поэтому последовательность всегда одинаковая: сначала создаётся реквизит нужного типа, затем на форму добавляется элемент «Таблица», который ссылается на этот реквизит, и только потом таблица заполняется данными.

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

Какие типы таблиц можно вывести на форму

Прежде чем добавлять элементы, определите, какие данные должна показывать таблица. От этого зависит выбор реквизита и способ заполнения.

  • Табличная часть объекта — данные хранятся в самом документе или справочнике и сохраняются вместе с ним. Подходит для строк документа: товары, услуги, начисления.
  • Реквизит формы «ТаблицаЗначений» — временные данные, живут только пока открыта форма. Используется для подбора, промежуточных расчётов, результатов запросов.
  • Динамический список — таблица на основе запроса к базе данных с автоматическим обновлением, отбором и сортировкой. Основной способ показа списков документов и справочников.
  • Дерево значений — иерархический вариант таблицы, например для группировки товаров по категориям.

Сравнение вариантов

Табличная часть объекта

Данные сохраняются в базе вместе с объектом; не подходит для временных вычислений

ТаблицаЗначений в реквизите формы

Гибкое программное заполнение; данные теряются при закрытии формы

Динамический список

Автоматическое обновление и отборы; сложнее редактировать данные вручную

Дерево значений

Иерархическое отображение; требует заполнения с вложенными строками

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

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

Перетащите табличную часть мышью в дерево элементов формы (левая панель) в нужное место — обычно после полей шапки. Конфигуратор предложит добавить колонки автоматически. Платформа создаст элемент «Таблица» со свойством ПутьКДанным = «Объект.Товары» и подчинённые элементы-колонки для каждого реквизита.

Если форма создаётся с нуля через конструктор, достаточно отметить табличную часть флажком — колонки будут добавлены автоматически. После этого данные загружаются и сохраняются платформой без единой строки кода: при записи документа строки табличной части уходят в базу вместе с ним.

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

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

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

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

Порядок действий
  1. 1
    Откройте форму в конфигураторе и добавьте реквизит типа «ТаблицаЗначений»
  2. 2
    Добавьте в реквизит колонки с нужными именами и типами
  3. 3
    Перетащите реквизит в дерево элементов формы — появится элемент «Таблица»
  4. 4
    Проверьте, что у элемента таблицы ПутьКДанным указывает на ваш реквизит
  5. 5
    Заполните таблицу данными в коде и откройте форму для проверки

Программное заполнение таблицы данными

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

Типовой код заполнения из запроса выглядит так:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Товар,

| Номенклатура.Код КАК Код

|ИЗ

| Справочник.Номенклатура КАК Номенклатура";

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

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

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

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

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

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

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

&НаСервере

Процедура СоздатьТаблицуПрограммно()

// 1. Добавляем реквизит-таблицу

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

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

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

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

// 2. Добавляем колонки реквизита

Колонки = Новый Массив;

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

Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150)), "ТаблицаДанных"));

Колонки.Добавить(Новый РеквизитФормы("Сумма",

Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)), "ТаблицаДанных"));

ИзменитьРеквизиты(Колонки);

// 3. Создаём элемент формы

Таблица = Элементы.Добавить("ТаблицаДанных", Тип("ТаблицаФормы"));

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

ПолеТовар = Элементы.Добавить("ТаблицаДанныхТовар", Тип("ПолеФормы"), Таблица);

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

ПолеТовар.Вид = ВидПоляФормы.ПолеВвода;

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

Обратите внимание на порядок: сначала ИзменитьРеквизиты(), и только потом добавление элементов. Элементы нельзя привязать к реквизитам, которых ещё не существует. Также программно созданные реквизиты и элементы не сохраняются между вызовами сервера в том виде, как статические, — пересоздавать их нужно при каждом создании формы.

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

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

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

Отборы удобно задавать через параметры запроса: Список.Параметры.УстановитьЗначениеПараметра("Склад", ВыбранныйСклад); — список обновится автоматически без перезаполнения вручную.

Настройка внешнего вида таблицы

После вывода таблицы обычно требуется доработать её представление. Основные свойства элемента «Таблица»:

  • Шапка и подвал — свойства «Шапка» и «Подвал» включают отображение заголовков и итогов. Для показа суммы по колонке у колонки реквизита заполните свойство «ПутьКДаннымПодвала» или включите автоподсчёт.
  • ТолькоПросмотр — запрещает редактирование, полезно для таблиц-отчётов.
  • Командная панель — у таблицы есть автозаполняемая панель с кнопками «Добавить», «Удалить», «Найти»; её можно отключить или дополнить своими командами.
  • Условное оформление — через настройку формы или кодом можно раскрасить строки по условию, например выделить красным отрицательные остатки.
  • Высота и ширина — свойства «Высота», «РастягиватьПоВертикали» управляют поведением при изменении размера окна.

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

Если таблица должна только показывать данные без редактирования, сразу ставьте свойство ТолькоПросмотр = Истина и убирайте лишние кнопки командной панели. Это избавит пользователей от случайных изменений и вопросов «почему не сохранилось» — ведь реквизит формы не записывается в базу сам по себе.
ПЗ
Практическое замечание

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

Большинство проблем при выводе таблицы сводится к нескольким повторяющимся причинам:

Типичные ошибки
01
Элемент таблицы добавлен, но ПутьКДанным не заполнен — таблица отображается пустой или не отображается вовсе
02
Имена колонок результата запроса не совпадают с именами колонок реквизита — данные теряются при ЗначениеВРеквизитФормы
03
Заполнение таблицы выполнено в клиентской процедуре без вызова сервера — запрос не выполняется и возникает ошибка
04
Попытка редактировать динамический список как обычную таблицу — изменения не сохраняются
05
Программное добавление элементов до вызова ИзменитьРеквизиты — ошибка «Реквизит не найден»
06
Забыт признак «Сохраняемые данные» у реквизита при необходимости переноса значений между вызовами

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

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

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

Видимость таблицы на форме
Норма

Таблица отображается с колонками и заголовками

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

Таблицы нет или она пустая — проверить ПутьКДанным

Заполнение данными
Норма

Строки соответствуют результату запроса

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

Колонки пустые — имена полей не совпадают с колонками реквизита

Итоги в подвале
Норма

Сумма пересчитывается при изменении строк

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

Подвал пуст — не настроен ПутьКДаннымПодвала у колонки

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

Можно ли вывести таблицу на форму без изменения конфигурации?

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

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

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

Почему при заполнении возникает ошибка «Недопустимое значение» в ЗначениеВРеквизитФормы?

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

Как вывести иерархические данные?

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

Как сделать, чтобы данные таблицы сохранялись вместе с документом?

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

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

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

Итог

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

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