Имя: Пароль:
1C
1С v8
Сотрудников из регистра сведений по иерархии
0 dj_serega
 
29.04.14
19:02
Есть регистр сведений у которого два измерения: Сотрудник и Начальник

Данные в регистре хранятся так:

Сотрудник      Начальник

Леонов         Трещинков
Трещинков      Загородко
Щелкин         Загородко
Загородко      ------


В итоге нужно получить дерево:

Загородко
    Трещинков
        Леонов
    Щелкин


Уже пол дня ковыряюсь в этой задаче и никак... с виду интересная, но решения не вижу.

Можно ли как-то построить такое дерево запросом?
1 Wobland
 
29.04.14
19:04
какое такое? да
2 dj_serega
 
29.04.14
19:07
Вот такое:

Уровень 1: Загородко
Уровень 2:     Трещинков
Уровень 3:         Леонов
Уровень 2:     Щелкин
3 Wobland
 
29.04.14
19:08
(2) формализуй задачу, не надо тут частным случаем размахивать
4 Эмбеддер
 
29.04.14
19:13
надо сделать кучу соединений, на нулевом уровне выбрать всех, у кого нет начальников и присоединять последовательно

но в самой такой организации данных есть такой косяк, что во-первых можно зациклить сотрудников, во-вторых можно сделать у каждого не одного начальника
5 Эмбеддер
 
29.04.14
19:14
а вообще надо сделать иерархический справочник вместо такого регистра
6 dj_serega
 
29.04.14
19:14
(3) Загородко есть Начальником начальников.
У него в подчинении есть два сотрудника Трещинков и Щелкин.
У Трещинкова есть подчиненный леонов.

Мне нужно вывести иерархию в виде дерева.
7 dj_serega
 
29.04.14
19:16
(5) Более чем согласен.
Буду добиваться такого. Но сейчас задача стоит в построении отчета. А переписывать много летние механизмы дело не на 4 минут.
8 Wobland
 
29.04.14
19:16
(6) ну я чем смог помог ;)
9 dj_serega
 
29.04.14
19:17
(8) Ну настроение немного поднял :) вот бы еще сил добавилось. А то или косяки с (4) или бредятина бредятиной получается.
10 dj_serega
 
29.04.14
19:19
(4) За идею спасибо. Попробую сейчас.
11 Wobland
 
29.04.14
19:19
(9) аль не дошло? нарисуй себе на бумажке в самом общем случае. лопата - друг солдата, а бумажка - друг программиста ;)
12 echo77
 
29.04.14
19:23
на СКД собственную иерархию делать
13 Эмбеддер
 
29.04.14
20:01
(12) это понятно что своя иерархия, вопрос - как именно
14 dj_serega
 
29.04.14
20:13
(13) Ну с первым уровнем вроде получилось. Пробую "глубже" строить.

Текст запроса ниже:


ВЫБРАТЬ
    ИерархияСотрудниковСрезПоследних.Сотрудник,
    ИерархияСотрудниковСрезПоследних.Начальник,
    ИерархияСотрудниковСрезПоследних.РегиональныйМенеджер,
    ИерархияСотрудниковСрезПоследних.Период
ПОМЕСТИТЬ Работающие
ИЗ
    РегистрСведений.ИерархияСотрудников.СрезПоследних(, ) КАК ИерархияСотрудниковСрезПоследних
ГДЕ
    ИерархияСотрудниковСрезПоследних.Активность
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Работающие.Сотрудник
ПОМЕСТИТЬ Руководители1
ИЗ
    Работающие КАК Работающие
ГДЕ
    Работающие.Начальник = ЗНАЧЕНИЕ(Справочник.СотрудникиОрганизаций.ПустаяСсылка)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Руководители1.Сотрудник КАК Начальник1,
    Работающие.Сотрудник
ИЗ
    Работающие КАК Работающие
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Руководители1 КАК Руководители1
        ПО Работающие.Начальник = Руководители1.Сотрудник
ГДЕ
    Работающие.Начальник В
            (ВЫБРАТЬ
                Руководители1.Сотрудник
            ИЗ
                Руководители1 КАК Руководители1)
ИТОГИ ПО
    Начальник1
15 Эмбеддер
 
29.04.14
20:34
только соединение не внутреннее, а левое
и соединений надо много
ИТОГИ ПО Начальник1, Начальник2...
и в СКД игнорировать NULL
16 dj_serega
 
29.04.14
20:34
(4) Спасибо. Завтра буду детально анализировать. Получилось 4 уровня всего-то :)

Выложу итоговый если будет истина :)
17 dj_serega
 
29.04.14
20:35
(15) Дада... уже исправил.