При разработке пользовательских интерфейсов в обычных формах 1С часто возникает задача динамического управления элементами формы. Одной из распространенных ситуаций является необходимость программно задать тип данных или источник для элемента ТабличноеПоле. Например, когда требуется вывести структуру отбора из объекта ПостроительОтчета, ПостроительЗапроса или динамически привязать таблицу значений.
Разберем подробно, как правильно связать табличное поле с данными, какие особенности жизненного цикла объектов следует учитывать и как избежать типичных ошибок.
Чтобы элементам формы задать тип и структуру колонок, в обычных формах используется комбинация свойства Значение у элемента табличного поля и метода СоздатьКолонки(). Проанализируем базовый пример кода:
ЭлементыФормы.ТабличноеПоле1.Значение = Построитель.Отбор;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
При присвоении объекту свойства Значение табличное поле автоматически определяет необходимый тип данных (в данном случае Отбор) и перестраивает свою структуру. Вызов метода СоздатьКолонки() принудительно формирует визуальные колонки в соответствии с составом полей источника.
Выясним частую причину, почему после выполнения кода табличное поле остается пустым или вызывает ошибки. Если источник данных (например, ПостроительОтчета) создается внутри локальной процедуры формы, он уничтожается сборщиком мусора сразу после завершения этой процедуры.
Чтобы избежать этой проблемы, разберем по шагам правильный порядок инициализации:
Перем Построитель;
ПриОткрытии) создадим объект, зададим его настройки и привяжем отбор к табличному полю:
Процедура ПриОткрытии()
Построитель = Новый ПостроительОтчета;
Построитель.Текст = "ВЫБРАТЬ Номенклатура, Количество ИЗ Документ.РеализацияТоваровУслуг.Товары {ГДЕ Номенклатура.*}";
Построитель.ЗаполнитьНастройки();
ЭлементыФормы.ТабличноеПолеОтбора.Значение = Построитель.Отбор;
ЭлементыФормы.ТабличноеПолеОтбора.СоздатьКолонки();
КонецПроцедуры
Важно: Метод ЗаполнитьНастройки() обязателен до привязки к форме. Без его вызова коллекция Построитель.Отбор не будет содержать полей, и колонки не сформируются.
Рассмотрим дополнительные способы работы с динамическими источниками данных в табличном поле:
ПостроительОтчета можно применить ПостроительЗапроса. Порядок связывания остается аналогичным:
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначенийИсточник);
ЭлементыФормы.ТабличноеПоле1.Значение = Построитель.Отбор;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
Отбор, доступно свойство НастройкаОтбора. С его помощью можно скрыть ненужные поля от пользователя:
ЭлементыФормы.ТабличноеПоле1.НастройкаОтбора.Добавить("Склад", Ложь);
ЭлементыФормы.ТабличноеПоле1.Значение = КомпоновщикНастроек.Настройки.Отбор;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();