← Назад к вопросам
Добавление элементов на управляемую форму программно
2.0 Middle🔥 181 комментариев
#Формы и интерфейс
Условие
Напишите код для программного добавления элементов на управляемую форму в типовой конфигурации.
Требования:
- Добавить новое поле ввода на форму документа
- Связать его с реквизитом формы
- Настроить обработчик события изменения
- Всё должно работать без снятия с поддержки
Пример структуры
// В модуле формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Добавление реквизита
// Добавление элемента формы
// Настройка связи и событий
КонецПроцедуры
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение: Добавление элементов на управляемую форму программно
// В модуле формы документа
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Добавляем реквизит формы
ДобавитьРеквизитФормы();
// Добавляем элемент на форму
ДобавитьЭлементНаФорму();
КонецПроцедуры
&НаСервере
Процедура ДобавитьРеквизитФормы()
// Получаем структуру новых реквизитов
МассивНовыхРеквизитов = Новый Массив;
ОписаниеРеквизита = Новый ОписаниеРеквизита;
ОписаниеРеквизита.Имя = "ДополнительноеПоле";
ОписаниеРеквизита.Тип = Новый ОписаниеТипов("Строка", , , 255);
ОписаниеРеквизита.ОсновнойРеквизит = Ложь;
ОписаниеРеквизита.ИспользованиеАтрибутов = ИспользованиеАтрибутов.Невозможно;
МассивНовыхРеквизитов.Добавить(ОписаниеРеквизита);
// Добавляем реквизиты в форму
ДобавитьРеквизиты(МассивНовыхРеквизитов);
КонецПроцедуры
&НаСервере
Процедура ДобавитьЭлементНаФорму()
// Получаем контейнер формы
КонтейнерЭлементов = Элементы;
// Получаем группу, в которую добавим элемент
РодительскаяГруппа = КонтейнерЭлементов.ОсновнаяГруппа;
// Создаём новое поле ввода
НовыйЭлемент = КонтейнерЭлементов.Добавить();
НовыйЭлемент.Вид = ВидОсновногоЭлемента.ПолеВвода;
НовыйЭлемент.Имя = "ДополнительноеПолеВвода";
НовыйЭлемент.Тип = ТипОсновногоЭлемента.ОсновнойЭлемент;
НовыйЭлемент.РодительскогоГруппы = РодительскаяГруппа;
// Связываем с реквизитом
НовыйЭлемент.ПутьДанных = "ДополнительноеПоле";
// Настраиваем свойства элемента
НовыйЭлемент.ПоказыватьСтроку = Истина;
НовыйЭлемент.Заголовок = "Дополнительное поле";
НовыйЭлемент.РазмерПолучетки = "По ширине формы";
НовыйЭлемент.МаксимальнаяШирина = 60;
// Добавляем обработчик события "ПриИзменении"
ОписаниеОбработчика = Новый ОписаниеОбработчика;
ОписаниеОбработчика.Функция = "ДополнительноеПолеПриИзменении";
ОписаниеОбработчика.МодульОбработчика = "МодульФормы";
НовыйЭлемент.ОбработчикиСобытий.Вставить("ПриИзменении", ОписаниеОбработчика);
КонецПроцедуры
// Обработчик события изменения
&НаКлиенте
Процедура ДополнительноеПолеПриИзменении(Элемент)
Сообщить("Значение дополнительного поля изменено на: " + ДополнительноеПоле);
КонецПроцедуры
Расширенный вариант с группой
&НаСервере
Процедура ДобавитьЭлементНаФормуРасширенный()
КонтейнерЭлементов = Элементы;
// Сначала добавляем группу (контейнер для элемента)
НоваяГруппа = КонтейнерЭлементов.Добавить();
НоваяГруппа.Вид = ВидОсновногоЭлемента.ГруппаОбычная;
НоваяГруппа.Имя = "ДополнительнаяГруппа";
НоваяГруппа.Заголовок = "Дополнительная информация";
НоваяГруппа.РодительскогоГруппы = КонтейнерЭлементов.ОсновнаяГруппа;
// Добавляем два поля в группу
Для Индекс = 1 По 2 Цикл
НовыйЭлемент = КонтейнерЭлементов.Добавить();
НовыйЭлемент.Вид = ВидОсновногоЭлемента.ПолеВвода;
НовыйЭлемент.Имя = "ПолеДополнительное" + Индекс;
НовыйЭлемент.РодительскогоГруппы = НоваяГруппа;
НовыйЭлемент.ПутьДанных = "ДополнительноеПоле" + Индекс;
НовыйЭлемент.Заголовок = "Поле " + Индекс;
КонецЦикла;
КонецПроцедуры
Удаление элемента с формы
&НаСервере
Процедура УдалитьЭлементСФормы()
КонтейнерЭлементов = Элементы;
// Проверяем, существует ли элемент
Если КонтейнерЭлементов.Найти("ДополнительноеПолеВвода") <> Неопределено Тогда
КонтейнерЭлементов.УдалитьЭлемент(КонтейнерЭлементов.ДополнительноеПолеВвода);
КонецЕсли;
// Удаляем реквизит
УдалитьРеквизиты(Новый Массив("ДополнительноеПоле"));
КонецПроцедуры
Ключевые компоненты
Этапы добавления:
- Добавить реквизит формы через
ДобавитьРеквизиты() - Создать элемент контейнера
Элементы.Добавить() - Связать элемент с реквизитом через
ПутьДанных - Добавить обработчик события
Особенности:
- Процедура должна быть
&НаСервере - Элемент добавляется в контейнер элементов
- Обработчик связывается через
ОбработчикиСобытий - Всё автоматически сохраняется в конфигурацию
Преимущества программного добавления:
- Условное добавление элементов
- Динамическое управление интерфейсом
- Нет необходимости снимать форму с поддержки