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