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

Полный пример
Для вашего удобства ниже приведён полный код:
&НаСервере
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Создаём реквизит "Товары" как таблицу значений для хранения табличной структуры данных
РеквизитТаблица = Новый РеквизитФормы("Товары", Новый ОписаниеТипов("ТаблицаЗначений"),,"Товары");
// Создаём реквизит "Номенклатура" для хранения ссылок на элементы справочника "Товары"
РеквизитТовар = Новый РеквизитФормы("Номенклатура",Новый ОписаниеТипов("СправочникСсылка.Товары"),"Товары","Товар");
// Создаём реквизит "Количество" для хранения числовых данных (количества товаров)
РеквизитКоличество = Новый РеквизитФормы("Количество",Новый ОписаниеТипов("Число"),"Товары","Кол-во");
// Объединяем все созданные реквизиты в массив для упрощения их передачи в форму
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(РеквизитТаблица);
МассивРеквизитов.Добавить(РеквизитТовар);
МассивРеквизитов.Добавить(РеквизитКоличество);
// Передаём массив реквизитов в метод для обновления состава реквизитов формы
ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);
// Добавляем элемент "Таблица" на форму, связываем его с реквизитом "Товары"
ЭлементТовары = ЭтаФорма.Элементы.Добавить("Товары",Тип("ТаблицаФормы"));
ЭлементТовары.ПутьКДанным = "Товары";
// Добавляем в таблицу колонку "Номенклатура" как поле ввода, связываем с реквизитом "Номенклатура"
ЭлементНоменклатура = ЭтаФорма.Элементы.Добавить("Номенклатура",Тип("ПолеФормы"),ЭлементТовары);
ЭлементНоменклатура.Вид = ВидПоляФормы.ПолеВвода;
ЭлементНоменклатура.ПутьКДанным = "Товары.Номенклатура";
// Добавляем в таблицу колонку "Количество" как поле ввода, связываем с реквизитом "Количество"
ЭлементКоличество = ЭтаФорма.Элементы.Добавить("Количество",Тип("ПолеФормы"),ЭлементТовары);
ЭлементКоличество.Вид = ВидПоляФормы.ПолеВвода;
ЭлементКоличество.ПутьКДанным = "Товары.Количество";
КонецПроцедуры