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