Как получить значение элемента формы в 1С, управляемые формы

В этой статье рассмотрим связь элементов формы и реквизитов, и разберем, как получить значение реквизита, отображаемое в элементе формы.

Элементы, реквизиты формы и реквизиты объекта.

Начать стоит с того, что в формах в управляемом приложении 1С четко разделяются сами данные и их отображение. Реквизиты – это то, где данные хранятся, а элементы – то, как эти данные отображаются.

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

Сами элементы значений не содержат, и если где-то пишут, что можно получить значение элемента формы в 1С – это мягко говоря, лукавство.

Реквизиты, в свою очередь, делятся на реквизиты формы и реквизиты объектов. Реквизиты объектов хранятся либо в базе данных в самих объектах (например, в элементах справочника, в документах, и т.п.), либо хранятся в метаданных (например, реквизиты обработок или отчетов). Реквизиты объектов нельзя программно создать или удалить.
А реквизиты формы не хранятся нигде, и существуют в памяти лишь до тех пор, пока в памяти существует сама форма. Можно программно создавать новые реквизиты формы и удалять программно созданные реквизиты. Но если реквизиты были добавлены в конфигураторе на уровне метаданных, то программно их удалить будет нельзя. 

Различия между реквизитами формы и реквизитами объектов

Рассмотрим пример. Пусть у нас есть внешняя обработка с двумя формами – основной и дополнительной. В обработке мы добавили один реквизит в саму обработку (это теперь будет реквизит объекта в нашей терминологии), и добавили еще пару реквизитов на основную форму этой обработки.

Реквизиты и элементы

Реквизит объекта (выделен зеленым) будет доступен во всех формах этого объекта, тогда как реквизит формы (выделен синим) существует только в пределах этой формы.
Пример с реквизитом “Номенклатура” разберем отдельно. Сам реквизит Номенклатура – это реквизит формы. Но на форму мы помимо него вывели в качестве элементов реквизиты “ЕдиницаИзмерения” и уже для единицы измерения – “Наименование”. Это тоже будут реквизиты объекта – т.к. они хранятся в базе данных.
Связь элемента формы и реквизита через свойство “ПутьКДанным” обозначена красным цветом.

Как получить значение реквизита?

В коде достаточно просто обратиться к реквизиту по имени:

ЗначениеРеквизитаФормы = РеквизитФормы;
ЗначениеРеквизитаФормы2 = Номенклатура;

Если сам реквизит содержит в себе другие реквизиты, мы можем обращаться к ним через точку, причем уровень вложенности реквизитов ничем не ограничен. Например:

ЗначениеРеквизитаОбъекта = Объект.РеквизитОбъекта;
ЗначениеРеквизитаЧерезТочку = Номенклатура.ЕдиницаИзмерения.Наименование;

Для получения значения реквизита вовсе необязательно, чтобы этот реквизит был выведен в качестве элемента. Например, какие-нибудь служебные реквизиты формы могут быть не видны пользователю, но использоваться в коде.

Как из элемента формы добраться до значения реквизита?

Но чаще всего нам нужно узнать, с каким реквизитом связан тот или иной элемент на форме, и получить его значение. Элементы связываются с реквизитами через свойство “ПутьКДанным”. Поэтому, когда нам нужно узнать, что за значение отображает элемент на форме, мы можем обратиться по пути к данным к реквизиту.
Как правило, нам достаточно посмотреть в свойство “ПутьКДанным” и в коде использовать его уже без кавычек. Но можно вычислить выражение и динамически (например, такое может понадобиться, если сами элементы формы созданы динамически, и мы заранее не знаем какой у них путь к данным). Для этого можно использовать функцию Вычислить.

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

Сообщить(Номенклатура.ЕдиницаИзмерения.Наименование);
Сообщить(Вычислить(Элементы.НоменклатураЕдиницаИзмеренияНаименование.ПутьКДанным));

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

девятнадцать − 2 =

К НАЧАЛУ