Получает значение элемента по указанному имени, а также проверяет, имеется ли указанное свойство.
Синтаксис
Свойство(<Ключ>, <НайденноеЗначение>)Полное описание, параметры и ограничения
ДанныеФормыЭлементДерева.Свойство (FormDataTreeItem.Property)
ДанныеФормыЭлементДерева (FormDataTreeItem)
Свойство (Property)
Доступен, начиная с версии 8.2.
Синтаксис:
Свойство(<Ключ>, <НайденноеЗначение>)
Параметры:
<Ключ> (обязательный)
Тип: Строка.
Ключ для поиска свойства.
<НайденноеЗначение> (необязательный)
Тип: Произвольный.
Содержит найденное значение. Если ключа нет в структуре, то возвращается Неопределено.
Возвращаемое значение:
Тип: Булево.
Истина - ключ найден; Ложь в противном случае.
Описание:
Получает значение элемента по указанному имени, а также проверяет, имеется ли указанное свойство.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Показать категории с товарами и найти строку дерева по идентификатору
Полная форма создаётся с нуля. Видим две категории и два товара внутри Канцелярии; проверяем связи родитель/дети и отличие идентификатора от позиции.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В учебной базе создайте новую внешнюю обработку УчебноеДерево с пустой управляемой основной формой. Каждую задачу размещайте в отдельной копии формы.
Не создавайте вручную реквизит Категории и элементы ДеревоКатегорий: код создаёт их программно.
В свойствах формы → События назначьте ПриСозданииНаСервере одноимённой процедуре из кода. Остальные процедуры вставьте полностью на уровне модуля.
Сохраните собственную EPF и откройте в 1С через Файл → Открыть. Данные Книга/Ручка создаются только в памяти формы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Новые = Новый Массив;
Новые.Добавить(Новый РеквизитФормы("Категории", Новый ОписаниеТипов("ДеревоЗначений")));
Новые.Добавить(Новый РеквизитФормы("Название", Новый ОписаниеТипов("Строка"), "Категории"));
Новые.Добавить(Новый РеквизитФормы("Количество", Новый ОписаниеТипов("Число"), "Категории"));
ЭтаФорма.ИзменитьРеквизиты(Новые);
Дерево = Новый ДеревоЗначений;
Дерево.Колонки.Добавить("Название", Новый ОписаниеТипов("Строка"));
Дерево.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Группа = Дерево.Строки.Добавить();
Группа.Название = "Канцелярия";
Книга = Группа.Строки.Добавить();
Книга.Название = "Книга";
Книга.Количество = 3;
Ручка = Группа.Строки.Добавить();
Ручка.Название = "Ручка";
Ручка.Количество = 1;
Резерв = Дерево.Строки.Добавить();
Резерв.Название = "Резерв";
ЭтаФорма.ЗначениеВРеквизитФормы(Дерево, "Категории");
Таблица = Элементы.Добавить("ДеревоКатегорий", Тип("ТаблицаФормы"));
Таблица.ПутьКДанным = "Категории";
Таблица.Отображение = ОтображениеТаблицы.Дерево;
Таблица.Заголовок = "Учебные категории — данные только в памяти";
Таблица.АвтоВводНовойСтроки = Ложь;
Таблица.АвтоВводНезаполненного = Ложь;
Для Каждого ИмяКолонки Из СтрРазделить("Название,Количество", ",") Цикл
Поле = Элементы.Добавить("Категории" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "Категории." + ИмяКолонки;
Поле.Заголовок = ИмяКолонки;
КонецЦикла;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить связи дерева";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Корни = Категории.ПолучитьЭлементы();
Сообщить(Корни.Количество() = 2);
Группа = Корни.Получить(0);
Товары = Группа.ПолучитьЭлементы();
Сообщить(Товары.Количество() = 2);
Книга = Товары.Получить(0);
Идентификатор = Книга.ПолучитьИдентификатор();
Найденная = Категории.НайтиПоИдентификатору(Идентификатор);
Сообщить(Найденная.Название = "Книга");
Сообщить(Найденная.Количество = 3);
Сообщить(Книга.ПолучитьРодителя().Название = "Канцелярия");
Сообщить(Группа.ПолучитьРодителя() = Неопределено);
Сообщить(Книга.ПолучитьЭлементы().Количество() = 0);
ПрочитанноеНазвание = Неопределено;
Сообщить(Книга.Свойство("Название", ПрочитанноеНазвание));
Сообщить(ПрочитанноеНазвание = "Книга");
Сообщить(Не Книга.Свойство("НесуществующаяКолонка"));
Сообщить("Идентификатор строки: " + Строка(Идентификатор));
КонецПроцедуры
Разбор по шагам
При создании формы добавляются дерево и две колонки реквизита. Значение ДеревоЗначений преобразуется в ДанныеФормыДерево.
ТаблицаФормы — визуальное представление, Категории — данные. Отображение Дерево задаёт интерфейс с раскрываемыми узлами.
ПолучитьЭлементы у дерева даёт корневые категории, а у строки — только её непосредственных детей.
ПолучитьРодителя у корневой группы возвращает Неопределено; у Книги возвращает Канцелярию.
НайтиПоИдентификатору находит строку во всём дереве. Число идентификатора не нужно подставлять в Получить как индекс.
Свойство проверяет наличие колонки и может вернуть её значение во второй параметр.
Как проверить результат
Раскройте Канцелярию: Книга 3, Ручка 1; Резерв без детей.
После кнопки все булевы проверки Истина, выводится идентификатор Книги.
У корней две строки, у Канцелярии два ребёнка, у Книги детей нет.
Ожидаемый результат
Новичок видит иерархию формы и умеет получать родителя, детей и строку по её идентификатору.
На что обратить внимание
ДанныеФормыДерево нельзя создавать через Новый: оно появляется из реквизита формы с типом ДеревоЗначений.
Идентификатор действителен для текущих данных формы, не является UUID товара или ключом базы.
Название и Количество — собственные колонки этого урока, не свойства любого дерева.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.