0
kumena
15.11.14
✎
10:12
|
Мини конфигурация с примером, 2 справочника подразделения с иерархией элементов и сотрудники, сотрудники имеют реквизит подразделение.
Необходимо выстроить иерархию в дереве по подразделениям и сотрудникам.
Пока получилось выстроить деревом только подразделения, с таким кодом.
&НаКлиенте
Процедура Заполнить(Команда)
// Вставить содержимое обработчика.
ЗаполнитьДеревоНаСервере();
КонецПроцедуры
Процедура ЗаполнитьДеревоНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"Выбрать
|
| Ссылка КАК ПодразделениеСотрудник
|
|Из Справочник.ПодразделенияОрганизаций
|
|Упорядочить по ПодразделениеСотрудник Иерархия
|
|";
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат;
КонецЕсли;
ДеревоИерархии = РеквизитФормыВЗначение("Дерево");
//Вариант 1.
//ДеревоИерархии = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
//Вариант 1=======.
//Вариант 2.
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Если Выборка.Количество() > 0 Тогда
ДобавитьСтрокиВДерево(Выборка, Неопределено, ДеревоИерархии);
КонецЕсли;
//Вариант 2=======.
ЗначениеВДанныеФормы(ДеревоИерархии, Дерево);
КонецПроцедуры
Процедура ДобавитьСтрокиВДерево(Выборка, СтрокаРодитель, ДеревоИерархии)
Пока Выборка.Следующий() Цикл
Если СтрокаРодитель = Неопределено Тогда
НоваяСтрока = ДеревоИерархии.Строки.Добавить();
Иначе
НоваяСтрока = СтрокаРодитель.Строки.Добавить();
КонецЕсли;
НоваяСтрока.ПодразделениеСотрудник = Выборка.ПодразделениеСотрудник;
ПодчиненнаяВыборка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Если ПодчиненнаяВыборка.Количество() > 0 Тогда
ДобавитьСтрокиВДерево(ПодчиненнаяВыборка, НоваяСтрока, ДеревоИерархии);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
т.е. получается так
а нужно так
задача - нужно дописать выборку сотрудников. кому интересно - вот тут демоконфигурация примера на 8.2
|
|