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

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

Как добавить табличную часть на форму в 1С

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

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

Основная сложность для начинающих разработчиков — понимание связки «реквизит формы → элемент формы». Реквизит хранит данные (таблицу значений или табличную часть объекта), а элемент отображает их на экране. Если создать только реквизит, на форме ничего не появится; если создать только элемент без привязки к данным, он останется пустым и бесполезным.

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

Что нужно понимать перед началом работы

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

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

Добавление существующей табличной части объекта

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

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

Порядок действий
  1. 1
    Откройте форму объекта в конфигураторе
  2. 2
    В панели реквизитов раскройте реквизит «Объект»
  3. 3
    Перетащите табличную часть в дерево элементов формы
  4. 4
    Проверьте свойство «ПутьКДанным» созданной таблицы
  5. 5
    Настройте состав и порядок колонок
  6. 6
    Сохраните форму и проверьте в режиме 1С:Предприятие

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

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

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

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

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

Программное добавление таблицы на управляемую форму

Динамическое создание требуется, когда состав колонок зависит от настроек пользователя или от данных. Вся работа выполняется в обработчике ПриСозданииНаСервере в два этапа: сначала добавляются реквизиты через метод ИзменитьРеквизиты(), затем создаются элементы формы.

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

    // 1. Добавляем реквизит-таблицу и колонки
    ДобавляемыеРеквизиты = Новый Массив;

    НоваяТаблица = Новый РеквизитФормы("ДанныеСтрок",
        Новый ОписаниеТипов("ТаблицаЗначений"));
    ДобавляемыеРеквизиты.Добавить(НоваяТаблица);

    КолонкаТовар = Новый РеквизитФормы("Товар",
        Новый ОписаниеТипов("СправочникСсылка.Номенклатура"), "ДанныеСтрок", "Товар");
    ДобавляемыеРеквизиты.Добавить(КолонкаТовар);

    КолонкаКолво = Новый РеквизитФормы("Количество",
        Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(15, 3)), "ДанныеСтрок", "Количество");
    ДобавляемыеРеквизиты.Добавить(КолонкаКолво);

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

    // 2. Создаём элемент таблицы и колонки
    ЭлементТаблица = Элементы.Добавить("ДанныеСтрок", Тип("ТаблицаФормы"));
    ЭлементТаблица.ПутьКДанным = "ДанныеСтрок";

    ПолеТовар = Элементы.Добавить("ДанныеСтрокТовар", Тип("ПолеФормы"), ЭлементТаблица);
    ПолеТовар.Вид = ВидПоляФормы.ПолеВвода;
    ПолеТовар.ПутьКДанным = "ДанныеСтрок.Товар";

    ПолеКолво = Элементы.Добавить("ДанныеСтрокКоличество", Тип("ПолеФормы"), ЭлементТаблица);
    ПолеКолво.Вид = ВидПоляФормы.ПолеВвода;
    ПолеКолво.ПутьКДанным = "ДанныеСтрок.Количество";

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

Ключевые моменты кода: метод ИзменитьРеквизиты() вызывается один раз и принимает массив объектов РеквизитФормы; у колонок третьим параметром конструктора указывается путь — имя родительской таблицы. После изменения реквизитов элементы добавляются методом Элементы.Добавить() с обязательным указанием ПутьКДанным, иначе таблица останется пустой.

Заполнение данными выполняется обычным обращением к реквизиту как к таблице значений: Строка = ДанныеСтрок.Добавить(); Строка.Товар = .... Если данные готовятся в виде таблицы значений в запросе, удобно использовать ЗначениеВРеквизитФормы(ТаблицаРезультата, "ДанныеСтрок").

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

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

Главное отличие — программное заполнение. У дерева строки добавляются в корень через Дерево.ПолучитьЭлементы().Добавить(), а дочерние строки — через тот же метод у родительской строки. При выводе дерева из запроса с итогами используется РеквизитФормыВЗначение и обратное преобразование.

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

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

Подходит, когда данные хранятся в документе или справочнике. Ограничение: состав колонок жёстко задан в метаданных.

Реквизит «ТаблицаЗначений»

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

Реквизит «ДеревоЗначений»

Для иерархических списков. Ограничение: сложнее заполнение и обход строк.

Программное создание

Когда структура колонок динамическая. Ограничение: больше кода, сложнее сопровождение.

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

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

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

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

Таблица отображается на форме
Норма

Таблица видна, колонки соответствуют реквизитам

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

Таблицы нет — элемент не привязан к реквизиту или скрыт

Добавление строки
Норма

Строка добавляется, поля доступны для ввода

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

Ошибка «Поле не найдено» — неверный ПутьКДанным

Сохранение данных
Норма

Строки табличной части объекта сохраняются при записи

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

Данные пропадают — использован реквизит формы вместо табличной части объекта

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

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

Ограничения и практические рекомендации

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

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

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

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

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

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

Как добавить табличную часть на форму обработки?

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

Почему таблица на форме пустая, хотя реквизит заполнен?

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

Как добавить колонку в уже существующую таблицу на форме?

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

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

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

Как вывести в таблицу итог по колонке?

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

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

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