|
Запрос с иерархией | ☑ | ||
---|---|---|---|---|
0
Весенняя Мелисса
01.03.16
✎
15:22
|
Есть РС в котором есть Измерение Подразделение..... и на каждое подразделение назначен свой режим работы. Действуют эти режимы иерархическим образом, т.е. если у нас подразделение нижнего уровня, то для этого подразделения действует режим работы первого верхнего уровня вышестоящего, для которго заполнено значение. Например, в РС Подразделение 2 - 8:00-18:00, Подразделение 3 - 9:00-19:00. Иерархия Подразделение 1 (не является родителем, детальная запись) - подразделение 2 (=Подразделение1.Родитель), подразделение 3 (=Подразделение2.Родитель или Подразделение 1.Родитель.Родитель). Не могу написать запрос
|
|||
1
Весенняя Мелисса
01.03.16
✎
15:23
|
Написала ВЫБРАТЬ
АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник КАК ПодразделениеСотрудник, ПодразделенияОрганизаций.Ссылка КАК Ссылка, АП_РежимРаботыПоСменамСрезПоследних.ВремяНачалоРаботы КАК ВремяНачалоРаботы, АП_РежимРаботыПоСменамСрезПоследних.ВремяОкончанияРаботы КАК ВремяОкончанияРаботы ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АП_РежимРаботыПоСменам.СрезПоследних(&КонецПериода, ПодразделениеСотрудник ССЫЛКА Справочник.ПодразделенияОрганизаций) КАК АП_РежимРаботыПоСменамСрезПоследних ПО (ВЫБОР КОГДА ПодразделенияОрганизаций.Ссылка = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ИНАЧЕ ВЫБОР КОГДА ПодразделенияОрганизаций.Ссылка.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ИНАЧЕ ВЫБОР КОГДА ПодразделенияОрганизаций.Ссылка.Родитель.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка.Родитель.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник КОНЕЦ КОНЕЦ КОНЕЦ) ГДЕ ПодразделенияОрганизаций.Ссылка = &Ссылка Но этот запрос возвращает мне два подразделения - Подразделение2 и подразделение3, когда должно возвращать только подразделение2. В настоящей задаче естественно соединять нужно не со справочником подразделения, а с другой таблицей. |
|||
2
Весенняя Мелисса
01.03.16
✎
15:24
|
Еще был вариант условия
ВЫБОР КОГДА ПодразделенияОрганизаций.Ссылка = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник КОГДА ПодразделенияОрганизаций.Ссылка.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник КОГДА ПодразделенияОрганизаций.Ссылка.Родитель.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка.Родитель.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник КОНЕЦ Но этот вариант тоже возвращал два подразделения |
|||
3
Лефмихалыч
01.03.16
✎
15:36
|
выбрать для всех имеющихся подразделений
отсортировать по иерархии взять первые 1 из того, что получилось |
|||
4
НЕА123
01.03.16
✎
15:37
|
ПО (ВЫБОР
КОГДА ПодразделенияОрганизаций.Ссылка = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ИНАЧЕ ВЫБОР КОГДА ПодразделенияОрганизаций.Ссылка.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник И ПодразделенияОрганизаций.Ссылка <> АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ИНАЧЕ ВЫБОР КОГДА ПодразделенияОрганизаций.Ссылка.Родитель.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка.Родитель.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник И ПодразделенияОрганизаций.Ссылка <> АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник И ПодразделенияОрганизаций.Ссылка.Родитель <> АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник КОНЕЦ КОНЕЦ КОНЕЦ) |
|||
6
Весенняя Мелисса
01.03.16
✎
15:56
|
(4)
ВЫБРАТЬ АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник КАК ПодразделениеСотрудник, ПодразделенияОрганизаций.Ссылка КАК Ссылка, АП_РежимРаботыПоСменамСрезПоследних.ВремяНачалоРаботы КАК ВремяНачалоРаботы, АП_РежимРаботыПоСменамСрезПоследних.ВремяОкончанияРаботы КАК ВремяОкончанияРаботы ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АП_РежимРаботыПоСменам.СрезПоследних(&КонецПериода, ) КАК АП_РежимРаботыПоСменамСрезПоследних ПО (ВЫБОР КОГДА ПодразделенияОрганизаций.Ссылка = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ИНАЧЕ ВЫБОР КОГДА ПодразделенияОрганизаций.Ссылка.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник И ПодразделенияОрганизаций.Ссылка <> АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ИНАЧЕ ВЫБОР КОГДА ПодразделенияОрганизаций.Ссылка.Родитель.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ТОГДА ПодразделенияОрганизаций.Ссылка.Родитель.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник И ПодразделенияОрганизаций.Ссылка <> АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник И ПодразделенияОрганизаций.Ссылка.Родитель <> АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник КОНЕЦ КОНЕЦ КОНЕЦ) ГДЕ ПодразделенияОрганизаций.Ссылка = &Ссылка УПОРЯДОЧИТЬ ПО Ссылка ИЕРАРХИЯ Возвращает все равно 2 значения из РС Подразделение 2 8-18 Подразделение 3 9-19 для подразделения 1. (3) Выбрать первые 1 вернет мне только 1 запись |
|||
7
Лефмихалыч
01.03.16
✎
16:16
|
(6) тогда выбрать максимум, а потом из максимума выбрать по равенству.
Короче - это срез последних, только не дата является критерием |
|||
8
PuhUfa
01.03.16
✎
16:21
|
Справочник.ПодразделенияОрганизаций
подразделение 3 - подразделение 2 -- подразделение 1 Я правильно понял иерархию справочника? |
|||
9
Весенняя Мелисса
01.03.16
✎
16:22
|
(8) да, все верно
|
|||
10
PuhUfa
01.03.16
✎
16:25
|
(9) Зачем тогда такое сложное соединение? Почему не просто:
ВЫБРАТЬ АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник КАК ПодразделениеСотрудник, ПодразделенияОрганизаций.Ссылка КАК Ссылка, АП_РежимРаботыПоСменамСрезПоследних.ВремяНачалоРаботы КАК ВремяНачалоРаботы, АП_РежимРаботыПоСменамСрезПоследних.ВремяОкончанияРаботы КАК ВремяОкончанияРаботы ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АП_РежимРаботыПоСменам.СрезПоследних(&КонецПериода, ) КАК АП_РежимРаботыПоСменамСрезПоследних ПО ПодразделенияОрганизаций.Ссылка.Родитель = АП_РежимРаботыПоСменамСрезПоследних.ПодразделениеСотрудник ГДЕ ПодразделенияОрганизаций.Ссылка = &Ссылка |
|||
11
Весенняя Мелисса
01.03.16
✎
16:29
|
(10) ну потому что в регистре сведений не обязательно есть записи по нужным подразделениям, могут быть и для подразделений более высшего уровня, которые должны действовать на нижестоящие. Наверное придется, как в (7) написано, просто это два раза соединять данные. Самое интересное, что раньше я подобные запросы писала оч. часто (в др. месте работала) , а сейчас не могу вспомнить (я про иерархию, и про ее действие на нижестоящие)
|
|||
12
Весенняя Мелисса
01.03.16
✎
16:35
|
(10)а, потому что не известно какое значение в РС будет указано, оно может быть указано и для Подразделения 3 с.... по.. тогда подразделение 3, так и для подразделения 2 и для подразделения 3, тогда нужно будет только значение с подразделением 2
|
|||
13
PuhUfa
01.03.16
✎
17:11
|
Как вариант.
Перед запросом, функцией собирать в СЗ Подразделение и его Родителей и запрос формировать уже непосредственно по РС с фильтром из этого СЗ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |