Имя: Пароль:
1C
 
как вывести структурированно иерархию справочника?
,
0 falselight
 
05.12.16
08:39
Поделитесь идеей если можно.
На снимке. структура родителей подразделения.
Максимальный уровень родителя четвертый.
Выборка отсортирована по подразделениям и их родителям.
В каждой строке есть подразделение. которое входит в свой
уровень группы родителя. В глубоком уровне родительского каталога
может быть 1 сотрудник, в иерархии подразделений.
Далее в который входят другие подразделения, со своей структурой и сотрудниками.
Самых верхних подразделений 5.
Как можно вывести это структурированно, в иерархии в табличный документ.
В теории?


https://cloud.mail.ru/public/51o9/hH2fZqL2W
1 falselight
 
05.12.16
11:34
нет ни у кого идей?
УПП справочник подразделения
там иерархия, как можно её вывести структурой в табличный документ
2 yzimin
 
05.12.16
11:36
Вывести в дерево, обойти дерево, заполнить табдок как надо
3 Лефмихалыч
 
05.12.16
11:36
Упорядочить по Ссылка Иерархия
4 catena
 
05.12.16
11:36
ВЫБРАТЬ
    ПО.Ссылка КАК Ссылка
ИЗ
    Справочник.ПодразделенияОрганизаций КАК ПО

УПОРЯДОЧИТЬ ПО
    Ссылка ИЕРАРХИЯ
5 falselight
 
05.12.16
11:47
(2) Вообще никак не соображу (((
вот это что попало выводит


Запрос       = Новый Запрос;
Запрос.Текст = "
    |ВЫБРАТЬ
    |    РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
    |    СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение КАК Подразделение,
    |    РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
    |    РаботникиОрганизацийСрезПоследних.Период КАК Период
    |ИЗ
    |    РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответствиеПодразделенийИПодразделенийОрганизаций
    |        ПО РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = СоответствиеПодразделенийИПодразделенийОрганизаций.ПодразделениеОрганизации
    |ГДЕ
    |    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Подразделение ИЕРАРХИЯ";
Результат = Запрос.Выполнить();
ЭлементыФормы.ПолеОтчета.НачатьАвтогруппировкуСтрок();
ВыборкаДетали = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока ВыборкаДетали.Следующий() Цикл
    ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    Пока ВыборкаРезультат.Следующий() Цикл
        Если ВыборкаРезультат.Подразделение <> "ПУСТО" Тогда
            ОбластьСтрока.Параметры.Подразделение = ВыборкаРезультат.Подразделение;
            ЭлементыФормы.ПолеОтчета.Вывести(ОбластьСтрока, ВыборкаРезультат.Уровень(),,Истина);
        КонецЕсли;
    КонецЦикла;
    ОбластьДетальныеЗаписи.Параметры.Заполнить(ВыборкаДетали);
    ЭлементыФормы.ПолеОтчета.Вывести(ОбластьДетальныеЗаписи, ВыборкаДетали.Уровень());
КонецЦикла;
ЭлементыФормы.ПолеОтчета.ЗакончитьАвтогруппировкуСтрок();    


(3) пробую у меня не получается ((((
(4) нужен справочник подразделения, не подразделения организации, хотя не имеет значения, алгоритм вывода я хочу сделать и понять как нужно такое делать универсально!!!!
6 catena
 
05.12.16
12:04
(5)Что в вашем понимании "что попало"?
7 Wit77
 
05.12.16
12:15
(6) У ТС "Вообще никак не соображу (((" в каждой поднятой ветке. :) Только время потратите.
8 catena
 
05.12.16
12:18
(7)Мне своим детям объяснять программирование, я изучаю типы мышления)) Оттачиваю навык, так сказать.
9 Wit77
 
05.12.16
12:19
(8) О! Тогда это ваш клиент! :)))
10 falselight
 
05.12.16
14:54
(6) Ну не выводит то что нужно.
Я пока не могу представить как это будет.
Мыслей правильных нет просто (((((
11 catena
 
05.12.16
14:57
(10)Ну, тогда нужно с этого и начинать. Представить, что должно получиться в итоге и сформулировать, чем полученное отличается от представленного.
12 DrShad
 
05.12.16
14:58
тут классический пример собственной иерархии на СКД
13 Ёпрст
 
05.12.16
15:01
(5) ясен пень, группировку нужно выводить ДО вложенного цикла, а не ПОСЛЕ.
14 falselight
 
05.12.16
15:19
(13) там вроде так и есть?
(11) Есть справочник подразделения
там структура подразделений
каталогов и подкаталогов
на верхнем уровне такие то
остальные имеют разный уровень вложенности в них
запросом (5) я выбираю так же сотрудников
(потом нужно будет цеплять разные прочие данные
и возможно производить дополнительные обработки)

Нужно вывести эту структуру каталогов в табличном документе
плюс под каждым своего сотрудника, который к нему относится

Потом вывести тех у кого нет подразделения, включив их
в группу имеющегося подразделения организации


Я уже и так пробовал выбирать


ВЫБРАТЬ
    РаботникиОрганизацийСрезПоследних.Сотрудник                      КАК Сотрудник,
    СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение КАК Подразделение,
    СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение.Родитель КАК РодительПодразделения,
    СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение.Родитель.Родитель КАК РодительРодительПодразделения,
    СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение.Родитель.Родитель.Родитель КАК РодительРодительРодительПодразделения,
    СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение.Родитель.Родитель.Родитель.Родитель КАК РодительРодительРодительРодительПодразделения,
    СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение.Родитель.Родитель.Родитель.Родитель.Родитель КАК РодительРодительРодительРодительРодительПодразделения,
    РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации       КАК ПодразделениеОрганизации,
    РаботникиОрганизацийСрезПоследних.Период                         КАК Период
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответствиеПодразделенийИПодразделенийОрганизаций
        ПО РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = СоответствиеПодразделенийИПодразделенийОрганизаций.ПодразделениеОрганизации
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)



Но я ищу в понимании универсальное решение
которым можно вывести структуру любого справочника
и её детализацию
15 DrShad
 
05.12.16
15:20
(14) см (12)
16 Ёпрст
 
05.12.16
15:41
(14) для тех, кто в танке

    Пока ВыборкаДетали.Следующий() Цикл
        ОбластьДетальныеЗаписи.Параметры.Заполнить(ВыборкаДетали);
        ЭлементыФормы.ПолеОтчета.Вывести(ОбластьДетальныеЗаписи, ВыборкаДетали.Уровень());
        ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
        Пока ВыборкаРезультат.Следующий() Цикл
            ОбластьСтрока.Параметры.Подразделение = ВыборкаРезультат.Подразделение;
            ЭлементыФормы.ПолеОтчета.Вывести(ОбластьСтрока, ВыборкаРезультат.Уровень(),,Истина);
        КонецЦикла;
    КонецЦикла;
17 falselight
 
05.12.16
17:42
(15) к чему это? Я делаю не на СКД
18 aleks_default
 
05.12.16
17:46
(16)там не танк, там броненосец
19 DrShad
 
05.12.16
17:54
(17) ну ты же хочешь универсально?
20 falselight
 
05.12.16
17:57
пока что попробовал вот так

//
Запрос       = Новый Запрос;
Запрос.Текст = "
    |ВЫБРАТЬ
    |    РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
    |    СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение КАК Подразделение,
    |    РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
    |    РаботникиОрганизацийСрезПоследних.Период КАК Период
    |ИЗ
    |    РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответствиеПодразделенийИПодразделенийОрганизаций
    |        ПО РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = СоответствиеПодразделенийИПодразделенийОрганизаций.ПодразделениеОрганизации
    |ГДЕ
    |    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Подразделение ИЕРАРХИЯ УБЫВ";
Результат = Запрос.Выполнить();
ЭлементыФормы.ПолеОтчета.НачатьАвтогруппировкуСтрок();
ВыборкаДетали = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока ВыборкаДетали.Следующий() Цикл
    //ОбластьДетальныеЗаписи.Параметры.Заполнить(ВыборкаДетали);
    ОбластьСтрока.Параметры.Подразделение = ВыборкаДетали.Подразделение;
    ЭлементыФормы.ПолеОтчета.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень(),,ЛОЖЬ);
    ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    Пока ВыборкаРезультат.Следующий() Цикл
        Если ВыборкаРезультат.Подразделение <> "ПУСТО" Тогда
            ОбластьСтрока.Параметры.Подразделение = ВыборкаРезультат.Подразделение;
            ЭлементыФормы.ПолеОтчета.Вывести(ОбластьСтрока, ВыборкаРезультат.Уровень(),,ЛОЖЬ);
        КонецЕсли;
    КонецЦикла;
КонецЦикла;
ЭлементыФормы.ПолеОтчета.ЗакончитьАвтогруппировкуСтрок();    

выводит просто список, одно подразделение сворачивает
в нем несколько дублей других
вот я и говорю, какую то хрень выводит
21 falselight
 
05.12.16
18:00
(16) у вас ОбластьДетальныеЗаписи, ОбластьСтрока
АвтогруппировкаСтрок делает это на одну секцию все
22 falselight
 
06.12.16
12:51
(16) в (20) так же как у вас, но выводит криво (
23 falselight
 
06.12.16
12:51
(22+) криво некуда, черти чт овыводит
24 Ёпрст
 
06.12.16
16:50
Открой для себя наконец, конструктор запроса с обработкой результата. Оно само всё нарисует
25 Vladal
 
06.12.16
17:19
(1) Идей море.
Методичка: http://its.1c.ru/db/metod8dev/content/2659/hdoc
Копипаста: http://pro1c.org.ua/?showtopic=482
26 falselight
 
07.12.16
15:03
(24) Послушал вашего совета. Вот так конструктором, за несколько секунд, интуитивно, ну и потом подправив вывод в свой табличный документ, вывел структуру справочника подразделения.


Процедура КнопкаСформироватьНажатие(Кнопка)
    // Вставить содержимое обработчика.
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Макет = ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Подразделения.Наименование КАК Наименование
        |ИЗ
        |    Справочник.Подразделения КАК Подразделения
        |
        |УПОРЯДОЧИТЬ ПО
        |    Наименование ИЕРАРХИЯ";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    ЭлементыФормы.ПолеОтчета.Очистить();
    ЭлементыФормы.ПолеОтчета.Вывести(ОбластьЗаголовок);
    ЭлементыФормы.ПолеОтчета.Вывести(ОбластьШапкаТаблицы);
    ЭлементыФормы.ПолеОтчета.НачатьАвтогруппировкуСтрок();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        ЭлементыФормы.ПолеОтчета.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
    
    ЭлементыФормы.ПолеОтчета.ЗакончитьАвтогруппировкуСтрок();
    ЭлементыФормы.ПолеОтчета.Вывести(ОбластьПодвалТаблицы);
    ЭлементыФормы.ПолеОтчета.Вывести(ОбластьПодвал);
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

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


Вывод отличается от того что показывает запрос (14)
видимо от того что запрос (14) показывает подразделения с имеющимися сотрудниками, а этот показывает все подразделения.

Итак, могу ли я к этому запросу и выводу прицепить выборку (20)? Что бы помимо подразделений вытащить сотрудников и вывести их в удобной структуре?

Пробую.
27 falselight
 
07.12.16
15:04
(25) а запрос в (26) взял из вашего совета
28 falselight
 
07.12.16
15:13
пока не получается ((((
29 falselight
 
07.12.16
15:15
вот это не выводит вообще ничего (
подскажите как нужно?

Процедура КнопкаСформироватьНажатие(Кнопка)
    // Вставить содержимое обработчика.
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Макет = ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    //Запрос.Текст =
    //    "ВЫБРАТЬ
    //    |    Подразделения.Наименование КАК Наименование
    //    |ИЗ
    //    |    Справочник.Подразделения КАК Подразделения
    //    |
    //    |УПОРЯДОЧИТЬ ПО
    //    |    Наименование ИЕРАРХИЯ";
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    РаботникиОрганизацийСрезПоследних.Сотрудник                      КАК Сотрудник,
        |    СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение КАК Подразделение,
        |    РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации       КАК ПодразделениеОрганизации,
        |    РаботникиОрганизацийСрезПоследних.Период                         КАК Период
        |ИЗ
        |    РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответствиеПодразделенийИПодразделенийОрганизаций
        |        ПО РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = СоответствиеПодразделенийИПодразделенийОрганизаций.ПодразделениеОрганизации
        |ГДЕ
        |    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
        |
        |УПОРЯДОЧИТЬ ПО
        |    Подразделение ИЕРАРХИЯ";    
    РезультатЗапроса = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    ЭлементыФормы.ПолеОтчета.Очистить();
    ЭлементыФормы.ПолеОтчета.Вывести(ОбластьЗаголовок);
    ЭлементыФормы.ПолеОтчета.Вывести(ОбластьШапкаТаблицы);
    ЭлементыФормы.ПолеОтчета.НачатьАвтогруппировкуСтрок();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        ЭлементыФормы.ПолеОтчета.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
    
    ЭлементыФормы.ПолеОтчета.ЗакончитьАвтогруппировкуСтрок();
    ЭлементыФормы.ПолеОтчета.Вывести(ОбластьПодвалТаблицы);
    ЭлементыФормы.ПолеОтчета.Вывести(ОбластьПодвал);
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

КонецПроцедуры
30 falselight
 
07.12.16
15:28
(24) я хотел в иерархию справочника подразделения прикрутить запрос (29), выходит так не получится ((((
Как лучше получить такую выборку и вывести ее всю в табличный документ?
31 falselight
 
07.12.16
15:32
подскажете? ест ьу кого идеи?
32 DrShad
 
07.12.16
15:47
а соответствия подразделений настроены?
33 falselight
 
07.12.16
15:47
(32) в регистре? да там все нормально
34 falselight
 
07.12.16
15:48
я думал 29 выведет такую же структуру в автоупорядочивании
но нет, подразделения выводятся только безо всякой структурвы ((((((
35 DrShad
 
07.12.16
15:52
так это у тебя не основная таблица запроса
36 falselight
 
07.12.16
15:56
(35) в (29) ?
Так там одна всего таблица???
37 Ёпрст
 
07.12.16
16:01
На вот, развлекайся
https://cloud.mail.ru/public/9S24/QZxjDGyxb

сделано конструктором за 5 сек.
38 SleepyHead
 
гуру
07.12.16
17:12
(37) ты что, это ж несолидно :) человек хочет ручками
39 falselight
 
07.12.16
18:21
(37) Интересно чему тут наслаждаться?
Мне нужно вот этот запрос вывести в иерархии.
Это можно сделать?

(38) Там полезного то нет совсем!!!
40 falselight
 
07.12.16
18:23
(39+) Вот этот запрос -> (29) вывести в табличный документ
в иерархии, структура подразделений в иерархии, как в (26)
и под каждым подразделением, сотрудник к нему относящийся.
Это возможно?
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой