Статьи 1С программиста

заметки и другая полезная информация по 1С

Как создать таблицу значений на форме программно

798
09 января 2025

Как создать таблицу значений на форме программно

Создание реквизита для таблицы 1

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

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

Реквизит Товары задаёт структуру для хранения данных в виде таблицы значений.

Создание реквизитов для колонок

Для каждой колонки таблицы необходимо создать отдельный реквизит. Например, реквизит для хранения ссылок на товары и числовых значений:

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

Эти реквизиты используются для связи с данными внутри таблицы значений.

Объединение реквизитов и обновление формы

После создания реквизитов их удобно объединить в массив, чтобы массово передать в форму для обновления её состава:

МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(РеквизитТаблица);
МассивРеквизитов.Добавить(РеквизитТовар);
МассивРеквизитов.Добавить(РеквизитКоличество);

ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);

Добавление элемента "Таблица" на форму

Далее необходимо создать визуальный элемент таблицы, связанный с реквизитом Товары:

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

Добавление колонок в таблицу

Для каждой колонки добавляются соответствующие поля формы. Пример для колонок Номенклатура и Количество:

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

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

Итог

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

Полный пример

Для вашего удобства ниже приведён полный код:

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

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

	// Создаём реквизит "Номенклатура" для хранения ссылок на элементы справочника "Товары"
	РеквизитТовар = Новый РеквизитФормы("Номенклатура",Новый ОписаниеТипов("СправочникСсылка.Товары"),"Товары","Товар");

	// Создаём реквизит "Количество" для хранения числовых данных (количества товаров)
	РеквизитКоличество = Новый РеквизитФормы("Количество",Новый ОписаниеТипов("Число"),"Товары","Кол-во");

	// Объединяем все созданные реквизиты в массив для упрощения их передачи в форму
	МассивРеквизитов = Новый Массив;
	МассивРеквизитов.Добавить(РеквизитТаблица);
	МассивРеквизитов.Добавить(РеквизитТовар);
	МассивРеквизитов.Добавить(РеквизитКоличество);

	// Передаём массив реквизитов в метод для обновления состава реквизитов формы
	ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);

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

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

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

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

798
09 января 2025