Записки программиста 1с

Дерево значений 1с

Дерево значений 1с относится к универсальным коллекциям значений. Отличие от Таблицы значений в том, что строки Дерева Значений могут быть подчинены друг другу.

ДеревоЗначений — это программный объект встроенного языка, позволяющий строить произвольные иерархические наборы данных в памяти компьютера, отображать их в табличном и\или древовидном виде, а также программно и интерактивно манипулировать ими (добавлять, редактировать, удалять и сортировать строки).

Как и таблица значений, дерево состоит из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали. Однако, в отличие от таблицы значений, строки дерева значений могут иметь подчиненные строки любой глубины вложенности.

Строки и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.

Свойства Дерева Значений 1с

Свойство Колонки Дерева значений

Содержит коллекцию колонок дерева значений.

Свойство Строки Дерева значений

Содержит коллекцию корневых строк дерева значений.

Методы Дерева Значений 1с

метод Скопировать() Дерева значений

Создает новый объект копированием текущего (копируются все колонки и строки).

метод ВыбратьСтроку() Дерева значений

Открывает диалог для интерактивного выбора строки дерева значений.

Дерево значений серверный тип данных, поэтому доступ к нему получаем на стороне сервера.

Пример кода:

&НаКлиенте
Процедура Дерево(Команда)
ДеревоНаСервере();
Конецпроцедуры

&НаСервере
Процедура ДеревоНаСервере()
ДеревоЗнач=Новый ДеревоЗначений;
ДеревоЗнач.Колонки.Добавить("Склад");
ДеревоЗнач.Колонки.Добавить("Ячейка");
ДеревоЗнач.Колонки.Добавить("Количество");

Строка=ДеревоЗнач.Строки.Добавить();
Строка.Склад="Оптовый";
Строка.Ячейка="10";
Строка.Количество=150;

КонецПроцедуры

Добавим несколько вложенных значений:

СтрокаН=Строка.Строки.Добавить();
СтрокаН.Ячейка="15";

СтрокаН=Строка.Строки.Добавить();
СтрокаН.Ячейка="25";

Создаем реквизит Дерево тип ДеревоЗначений. Для Реквизита указываются колонки:

  • Склад;
  • Ячейка;
  • Количество.
Дерево значений 1с
создание реквизита Дерево значений 1с

Далее перетаскиваем Реквизит на форму.

В Завершении в модуль процедуры на Сервере добавляем код. Этот код выполняется аналогично выгрузке Таблицей Значений:

ЗначениеВДанныеФормы(ДеревоЗнач,объект.Дерево);

В результате получим следующее Дерево значений:

Дерево значений 1с
Результат заполнения Дерева значений

Полный код работы с Деревом значений 1с:

Дерево значений 1с
Код работы с Деревом значений 1с

Обработка дерева значений 1с

Обработка дерева значений в 1с производиться при помощи рекурсивной процедуры, т.е. процедуры вызывающей саму себя. Процесс обработки дерева значений может состоять из трех шагов:

Во-первых команда на клиенте:

&НаКлиенте
Процедура Команда2(Команда)
	Команда2НаСервере();
КонецПроцедуры

Во-вторых процедура на Сервере получающая Дерево значений:

&НаСервере
Процедура Команда2НаСервере()
ДеревоЗнач=новый ДеревоЗначений;	

ДеревоЗнач=ДанныеФормыВЗначение(объект.Дерево,Тип("ДеревоЗначений"));

Строки=ДеревоЗнач.строки;
ОбработатьДерево(Строки);
КонецПроцедуры

В третьих рекурсивная процедура обрабатывающая строки Дерева Значений:

&НаСервере 
Процедура ОбработатьДерево(Строки)
	Для каждого Строка из Строки цикл
	Сообщить(Строка(Строка.Склад)+":"+Строка(Строка.Ячейка)+":"
+Строка(Строка.Количество));
	ОбработатьДерево(Строка.Строки);
	конеццикла;
конецпроцедуры

Полный код обработки Дерева значений:

Код обработки Дерева Значений 1с
Код обработки Дерева Значений 1с

Результат работы кода:

Результат обработки Дерева значений 1с
Результат обработки Дерева значений 1с

Ссылка на обработку с кодом: Обработка Дерево Значений.

Один ответ на “Дерево значений 1с

Добавить комментарий

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