Уведомления
Очистить все

1С Работа с деревом значений

1 Записи
1 Пользователи
0 Likes
339 Просмотры
161-150x150 Okolokompa Форум
 bga
(@bga)
Eminent Member
Присоединился: 4 года назад
Записи: 11
Создатель темы  

Как заполнить дерево значений (на сервере)?

&НаСервере
Процедура ЗаполнитьДеревоНаСервере()

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ИТОГИ ПО
| Родитель";

ПромДерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЗначениеВРеквизитФормы(ПромДерево, "Дерево");

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

 

Как добавить строку (на клиенте)?

&НаКлиенте
Процедура ДобавитьСтрокуНаКлиенте(Команда)

ИдентификаторСтроки = Элементы.Дерево.ТекущаяСтрока;
ТекущаяСтрока = Дерево.НайтиПоИдентификатору(ИдентификаторСтроки);
НоваяСтрокаДерева = ТекущаяСтрока.ПолучитьЭлементы().Добавить();

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

 

Как удалить текущую строку (на клиенте)?

&НаКлиенте
Процедура УдалитьТекущуюСтрокуНаКлиенте(Команда)

ИдентификаторСтроки = Элементы.Дерево.ТекущаяСтрока;
ТекущаяСтрока = Дерево.НайтиПоИдентификатору(ИдентификаторСтроки);
СтрокаРодитель = ТекущаяСтрока.ПолучитьРодителя();

Если СтрокаРодитель = Неопределено Тогда
Дерево.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
Иначе
СтрокаРодитель.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
КонецЕсли;

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

 

Как очистить дерево значений (на клиенте)?

&НаКлиенте
Процедура ОчиститьДерево(Команда)

Дерево.ПолучитьЭлементы().Очистить();

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

 

Как очистить дерево значений (на сервере)?

&НаСервере
Процедура ОчиститьДерево(Команда)

ДЗ = РеквизитФормыВЗначение("Дерево");
ДЗ.Строки.Очистить();
ЗначениеВРеквизитФормы(ДЗ, "Дерево");

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

 

Как перебрать дерево рекурсивно (на клиенте)?

&НаКлиенте
Процедура ОбойтиДеревоРекурсивно(Команда)

ОбойтиРекурсивноСтрокиДереваНаКлиенте(Дерево.ПолучитьЭлементы());

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

&НаКлиенте
Процедура ОбойтиРекурсивноСтрокиДереваНаКлиенте(Строки)

Для Каждого СтрокаДерева Из Строки Цикл

Сообщить(СтрокаДерева.Номенклатура);

ПодчиненныеСтроки = СтрокаДерева.ПолучитьЭлементы();

Если ПодчиненныеСтроки.Количество() > 0 Тогда
ОбойтиРекурсивноСтрокиДереваНаКлиенте(ПодчиненныеСтроки);
КонецЕсли;

КонецЦикла;

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

 

Как перебрать дерево рекурсивно (на сервере)?

&НаСервере
Процедура ОбойтиДеревоРекурсивноНаСервере()

ДеревоЗначений = РеквизитФормыВЗначение("Дерево");
ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(ДеревоЗначений);

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

&НаСервере
Процедура ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(ДеревоЗначений)

Для Каждого СтрокаДерева Из ДеревоЗначений.Строки Цикл

Сообщить(СтрокаДерева.Номенклатура);

Если СтрокаДерева.Строки.Количество() > 0 Тогда
ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(СтрокаДерева);
КонецЕсли;

КонецЦикла;

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

   
Цитата
Поделиться: