|
Уровни подразделений | ☑ | ||
---|---|---|---|---|
0
guitar_player
11.01.12
✎
07:34
|
Как можно побыстрее составить таблицу с уровнями подразделений (ссылка, уровень). Такая хрень работает долго:
ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.Текст = "ВЫБРАТЬ | ПодразделенияОрганизаций.Ссылка КАК Подразделение, | 0 КАК Уровень |ИЗ | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций |{ГДЕ | ПодразделенияОрганизаций.Владелец.* КАК Организация, | ПодразделенияОрганизаций.Ссылка.* КАК Подразделение}"; // Установка отборов Если ОтборОрганизация Тогда ДобавитьОтбор(ПостроительЗапроса, "Организация"); КонецЕсли; Если ОтборПодразделение Тогда ДобавитьОтбор(ПостроительЗапроса, "Подразделение"); КонецЕсли; Запрос = ПостроительЗапроса.ПолучитьЗапрос(); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Возврат Новый ТабличныйДокумент; КонецЕсли; ТаблицаПодразделений = Результат.Выгрузить(); ВсегоЗаписей = ТаблицаПодразделений.Количество(); Для Счетчик = 0 По ВсегоЗаписей - 1 Цикл Строка = ТаблицаПодразделений[Счетчик]; Строка.Уровень = Строка.Подразделение.Уровень(); Если Счетчик % 10 Тогда Состояние("Построение таблицы уровней подразделений... [" + Счетчик + " из " + ВсегоЗаписей +"]"); КонецЕсли; КонецЦикла; Колонка используется для сортировки подразделения внутри иерархии, не спрашивайте зачем это нужно. Кто нибудь может подсказать? |
|||
1
asyr83
11.01.12
✎
07:56
|
я для себя в запросе анализировал родителя (для этого четко определил количество уровней иерархии). ну а интересно было бы увидеть вариант с рекурсией...
|
|||
2
Defender aka LINN
11.01.12
✎
08:06
|
СКД
|
|||
3
Рэйв
11.01.12
✎
08:07
|
(0)Упорядочивание по иерархии
Для справочников можно назначать упорядочивание по иерархии справочника. Пример: Выбрать Справочник.Контрагенты.Наименование, Справочник.Контрагенты.Полноенаименование Упорядочить По Справочник.Контрагенты.Наименование Иерархия |
|||
4
guitar_player
11.01.12
✎
08:18
|
(3) и потом уровень брать уже из выборки или как?
|
|||
5
Рэйв
11.01.12
✎
08:23
|
(4)Можно и в выборке
|
|||
6
golden-pack
11.01.12
✎
08:24
|
(4) сделать запрос, потом посмотреть какие Системные поля
|
|||
7
golden-pack
11.01.12
✎
08:24
|
(5) ?
|
|||
8
Рэйв
11.01.12
✎
08:30
|
(6)Потом смотреть .Уровень()
у ссылке если оно тебе еще надо будет. |
|||
9
guitar_player
11.01.12
✎
08:32
|
(6) не понял тебя.
(8) да, спасибо большое. Работает на порядок быстрее (т.е. для 2000 элементов теперь работает не заметно, а раньше занимало больше времени чем вывод самого отчета) |
|||
10
guitar_player
11.01.12
✎
08:40
|
вот пример кода, если что:
ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.Текст = "ВЫБРАТЬ | ПодразделенияОрганизаций.Ссылка КАК Подразделение |ИЗ | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций |{ГДЕ | ПодразделенияОрганизаций.Владелец.* КАК Организация, | ПодразделенияОрганизаций.Ссылка.* КАК Подразделение} | |УПОРЯДОЧИТЬ ПО | ПодразделенияОрганизаций.Ссылка ИЕРАРХИЯ"; // Установка отборов Если ОтборОрганизация Тогда ДобавитьОтбор(ПостроительЗапроса, "Организация"); КонецЕсли; Если ОтборПодразделение Тогда ДобавитьОтбор(ПостроительЗапроса, "Подразделение"); КонецЕсли; Запрос = ПостроительЗапроса.ПолучитьЗапрос(); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Возврат Новый ТабличныйДокумент; КонецЕсли; ТаблицаПодразделений = Новый ТаблицаЗначений; ТаблицаПодразделений.Колонки.Добавить("Подразделение", Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций")); ТаблицаПодразделений.Колонки.Добавить("Уровень", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2, 0, ДопустимыйЗнак.Неотрицательный))); Счетчик = 0; Выборка = Результат.Выбрать(); ВсегоЗаписей = Выборка.Количество(); Пока Выборка.Следующий() Цикл Строка = ТаблицаПодразделений.Добавить(); Строка.Подразделение = Выборка.Подразделение; Строка.Уровень = Выборка.Уровень(); Если Счетчик % 10 Тогда Состояние("Построение таблицы уровней подразделений... [" + Счетчик + " из " + ВсегоЗаписей +"]"); КонецЕсли; Счетчик = Счетчик + 1; КонецЦикла; |
|||
11
Рэйв
11.01.12
✎
08:42
|
(10)Выборка.Уровень()- это уровень выборки в запросе. Боюсь оно слабо относится к уровню ссылок справочника.
Наверное тебе надо Выборка.Подразделение.Уровень() |
|||
12
golden-pack
11.01.12
✎
08:45
|
(10) ололо
|
|||
13
guitar_player
11.01.12
✎
08:56
|
(11) Выборка.Подразделение.Уровень(). Так было в самом начале (см. 0), но оно торморзило.
В случае иерархического упорядочивания, уровень в выборке дает аналогичный результат Выборка.Подразделение.Уровень() только работает на порядок быстрее. Сейчас еще раз это проверю. Я думал, что ты именно это предлагал. (12) ваши варианты? |
|||
14
golden-pack
11.01.12
✎
08:58
|
(13) простой запрос. скд. группировка по иерархии. Системные поля - Уровень
|
|||
15
guitar_player
11.01.12
✎
09:32
|
(14) вот такой вариант как раз дает не правильный результат
|
|||
16
golden-pack
11.01.12
✎
10:42
|
(15) да ну . не ври!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |