Разработка и Конфигурация · 12 мин
Как добавить табличную часть на форму в 1С
Как добавить табличную часть на форму в 1С: настройка в конфигураторе, программное создание, работа с деревом значений и типичные ошибки разработчиков.
Табличная часть — один из самых востребованных элементов интерфейса в 1С: в ней выводятся строки документов, списки товаров, этапы работ и любые однородные наборы данных. Добавить табличную часть на форму можно двумя способами: через дерево реквизитов формы в конфигураторе или программно, создавая реквизиты и элементы встроенным языком. Выбор зависит от того, статична ли структура данных или формируется динамически в процессе работы.
Основная сложность для начинающих разработчиков — понимание связки «реквизит формы → элемент формы». Реквизит хранит данные (таблицу значений или табличную часть объекта), а элемент отображает их на экране. Если создать только реквизит, на форме ничего не появится; если создать только элемент без привязки к данным, он останется пустым и бесполезным.
Ниже разобраны оба подхода на практических примерах: добавление существующей табличной части объекта, создание новой таблицы значений как реквизита формы, программное построение таблицы в управляемой форме, а также проверка результата и типичные ошибки.
Что нужно понимать перед началом работы
Перед добавлением таблицы определите, откуда берутся данные. Возможны три ситуации: у объекта конфигурации (документа, справочника) уже есть табличная часть, и её нужно просто показать; данных в объекте нет, и требуется реквизит формы типа «ТаблицаЗначений» для промежуточных расчётов; структура колонок неизвестна заранее и строится программно.
Второй важный момент — тип формы. В управляемых формах (тонкий клиент, веб-клиент) вся логика построения выполняется на сервере, а в обычных формах (толстый клиент, устаревший режим) элементы добавляются напрямую. Далее речь идёт преимущественно об управляемых формах, так как они используются в современных конфигурациях.
Добавление существующей табличной части объекта
Самый простой сценарий — у документа или справочника уже есть табличная часть, например «Товары» у документа «Реализация». Откройте форму объекта в конфигураторе и посмотрите на правую панель с закладкой «Реквизиты». Раскройте основной реквизит «Объект» — внутри него будут перечислены все реквизиты и табличные части объекта.
Найдите нужную табличную часть и перетащите её мышью из панели реквизитов в дерево элементов формы в левой части окна. Платформа автоматически создаст элемент типа «Таблица», заполнит свойство «ПутьКДанным» и добавит колонки по составу табличной части. Останется только расположить таблицу в нужном месте формы и настроить видимость колонок.
- 1Откройте форму объекта в конфигураторе
- 2В панели реквизитов раскройте реквизит «Объект»
- 3Перетащите табличную часть в дерево элементов формы
- 4Проверьте свойство «ПутьКДанным» созданной таблицы
- 5Настройте состав и порядок колонок
- 6Сохраните форму и проверьте в режиме 1С:Предприятие
Если табличная часть перетащена, но колонок слишком много, лишние можно удалить из дерева элементов — сами данные в объекте от этого не пострадают, удаляется только отображение. Обратное тоже верно: добавление колонки в элемент таблицы не изменяет структуру метаданных.
Создание таблицы значений как реквизита формы
Когда данные не привязаны к объекту (например, результат обработки, подбор номенклатуры, временный список), используется реквизит формы типа «ТаблицаЗначений». В панели реквизитов нажмите кнопку «Добавить реквизит» (зелёный плюс), задайте имя, например «ТаблицаПодбора», и выберите тип «ТаблицаЗначений».
После создания реквизита выделите его и добавьте колонки: кнопка «Добавить реквизит» при выделенной таблице создаёт именно колонку, а не новый корневой реквизит. Для каждой колонки укажите имя и тип — например, «Номенклатура» типа «СправочникСсылка.Номенклатура», «Количество» типа «Число». Типизация важна: от неё зависят контроль ввода и доступные пользователю действия.
Затем перетащите реквизит-таблицу в дерево элементов. Платформа создаст таблицу со всеми колонками. В свойствах таблицы обратите внимание на «КоманднаяПанель» — по умолчанию у таблицы появляется стандартная панель с кнопками добавления и удаления строк.
Программное добавление таблицы на управляемую форму
Динамическое создание требуется, когда состав колонок зависит от настроек пользователя или от данных. Вся работа выполняется в обработчике ПриСозданииНаСервере в два этапа: сначала добавляются реквизиты через метод ИзменитьРеквизиты(), затем создаются элементы формы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// 1. Добавляем реквизит-таблицу и колонки
ДобавляемыеРеквизиты = Новый Массив;
НоваяТаблица = Новый РеквизитФормы("ДанныеСтрок",
Новый ОписаниеТипов("ТаблицаЗначений"));
ДобавляемыеРеквизиты.Добавить(НоваяТаблица);
КолонкаТовар = Новый РеквизитФормы("Товар",
Новый ОписаниеТипов("СправочникСсылка.Номенклатура"), "ДанныеСтрок", "Товар");
ДобавляемыеРеквизиты.Добавить(КолонкаТовар);
КолонкаКолво = Новый РеквизитФормы("Количество",
Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(15, 3)), "ДанныеСтрок", "Количество");
ДобавляемыеРеквизиты.Добавить(КолонкаКолво);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
// 2. Создаём элемент таблицы и колонки
ЭлементТаблица = Элементы.Добавить("ДанныеСтрок", Тип("ТаблицаФормы"));
ЭлементТаблица.ПутьКДанным = "ДанныеСтрок";
ПолеТовар = Элементы.Добавить("ДанныеСтрокТовар", Тип("ПолеФормы"), ЭлементТаблица);
ПолеТовар.Вид = ВидПоляФормы.ПолеВвода;
ПолеТовар.ПутьКДанным = "ДанныеСтрок.Товар";
ПолеКолво = Элементы.Добавить("ДанныеСтрокКоличество", Тип("ПолеФормы"), ЭлементТаблица);
ПолеКолво.Вид = ВидПоляФормы.ПолеВвода;
ПолеКолво.ПутьКДанным = "ДанныеСтрок.Количество";
КонецПроцедурыКлючевые моменты кода: метод ИзменитьРеквизиты() вызывается один раз и принимает массив объектов РеквизитФормы; у колонок третьим параметром конструктора указывается путь — имя родительской таблицы. После изменения реквизитов элементы добавляются методом Элементы.Добавить() с обязательным указанием ПутьКДанным, иначе таблица останется пустой.
Заполнение данными выполняется обычным обращением к реквизиту как к таблице значений: Строка = ДанныеСтрок.Добавить(); Строка.Товар = .... Если данные готовятся в виде таблицы значений в запросе, удобно использовать ЗначениеВРеквизитФормы(ТаблицаРезультата, "ДанныеСтрок").
Вывод иерархических данных: дерево значений
Если данные имеют вложенность (группы и элементы, этапы и подэтапы), вместо таблицы значений используется реквизит типа «ДеревоЗначений». Порядок действий аналогичен: создаётся реквизит, добавляются колонки, реквизит перетаскивается в элементы формы — платформа создаёт таблицу с отображением иерархии.
Главное отличие — программное заполнение. У дерева строки добавляются в корень через Дерево.ПолучитьЭлементы().Добавить(), а дочерние строки — через тот же метод у родительской строки. При выводе дерева из запроса с итогами используется РеквизитФормыВЗначение и обратное преобразование.
Сравнение вариантов
Подходит, когда данные хранятся в документе или справочнике. Ограничение: состав колонок жёстко задан в метаданных.
Для временных данных, подборов и результатов обработок. Ограничение: данные теряются при закрытии формы.
Для иерархических списков. Ограничение: сложнее заполнение и обход строк.
Когда структура колонок динамическая. Ограничение: больше кода, сложнее сопровождение.
Проверка результата и типичные ошибки
После добавления таблицы сохраните конфигурацию и откройте форму в режиме 1С:Предприятие. Проверьте: таблица видна, колонки подписаны понятными заголовками, строки добавляются и удаляются, при вводе в колонки ссылочного типа открывается форма выбора. Если таблица привязана к объекту — проверьте, что введённые строки сохраняются после записи документа.
Как проверить результат
Таблица видна, колонки соответствуют реквизитам
Таблицы нет — элемент не привязан к реквизиту или скрыт
Строка добавляется, поля доступны для ввода
Ошибка «Поле не найдено» — неверный ПутьКДанным
Строки табличной части объекта сохраняются при записи
Данные пропадают — использован реквизит формы вместо табличной части объекта
Отдельного внимания заслуживает ошибка повторного добавления реквизитов: если обработчик создания таблицы может выполниться дважды (например, при перечтении настроек), перед вызовом ИзменитьРеквизиты() проверяйте, существует ли реквизит, или удаляйте старые реквизиты вторым параметром метода.
Ограничения и практические рекомендации
У реквизитов формы есть ограничения, о которых стоит помнить. Таблица значений в реквизите формы хранится в памяти сервера и передаётся между клиентом и сервером при каждом серверном вызове — при больших объёмах (тысячи строк с десятками колонок) это заметно замедляет работу. Для тяжёлых данных рассмотрите динамический список или порционную загрузку.
Ещё одна рекомендация — давать реквизитам и колонкам осмысленные имена сразу. Переименование реквизита после того, как на него завязаны элементы и программный код, потребует ручной правки всех обращений по строковому имени, и пропущенное место обнаружится только в момент выполнения.
Если таблица нужна только для просмотра без редактирования, установите у элемента таблицы свойство «ТолькоПросмотр» в Истина и скройте командную панель — это убережёт пользователей от случайного изменения данных и упростит интерфейс.
Что важно запомнить
Таблица на форме = реквизит формы плюс элемент с корректным ПутьКДанным. Существующая табличная часть объекта просто перетаскивается в дерево элементов, временные данные оформляются реквизитом «ТаблицаЗначений», динамическая структура создаётся программно через ИзменитьРеквизиты и Элементы.Добавить. После любого способа проверяйте отображение, ввод и сохранение данных.
Частые вопросы
Как добавить табличную часть на форму обработки?
У внешней обработки табличные части создаются в метаданных обработки так же, как у документа: в дереве конфигурации добавьте табличную часть, затем в форме перетащите её из реквизита «Объект» в элементы. Если обработка открывается без записи объекта, удобнее использовать реквизит формы типа «ТаблицаЗначений».
Почему таблица на форме пустая, хотя реквизит заполнен?
Чаще всего не совпадает свойство «ПутьКДанным» у элемента таблицы или у колонок. Путь таблицы должен быть именем реквизита, а путь колонки — имя реквизита плюс через точку имя колонки, например «Товары.Номенклатура». Также проверьте, что заполнение выполняется на сервере до отображения формы.
Как добавить колонку в уже существующую таблицу на форме?
Если это табличная часть объекта — сначала добавьте реквизит в табличную часть в метаданных, затем перетащите новый реквизит из панели реквизитов внутрь элемента таблицы. Если это реквизит формы — добавьте колонку к реквизиту и аналогично перетащите её в таблицу.
Можно ли добавить таблицу на форму без изменения конфигурации?
Да, если структура колонок известна заранее, — через механизм расширений конфигурации, который позволяет изменять формы без снятия конфигурации с поддержки. Полностью программное создание таблицы в расширении также возможно через заимствованную форму и обработчик ПриСозданииНаСервере.
Как вывести в таблицу итог по колонке?
У элемента таблицы включите свойство «Подвал» (Footer), затем у нужной колонки установите «ПутьКДаннымПодвала» на числовой реквизит формы, который заполняйте при изменении строк. Для табличных частей объектов часто используют обработчики ПриИзменении и ПослеУдаления для пересчёта итогового реквизита.
Чем динамический список отличается от таблицы значений на форме?
Динамический список отображает данные непосредственно из базы по запросу и подгружает их порциями, поэтому подходит для больших объёмов. Таблица значений — это данные в памяти формы, которые вы заполняете сами; она удобна для редактируемых временных наборов, но не масштабируется на сотни тысяч строк.