Имя: Пароль:
1C
1С v8
1c 8 ЗУП 3.0.25.113 - Сортировка Дерева значений (4 уровня)
0 Kleo
 
15.06.16
07:19
Здравствуйте!

Помогите, пожалуйста, разобраться с сортировкой в Дереве значений с 4-мя уровнями. Сортировка "живет своей жизнью" и непонятно по какому принципу происходит сортировка.

Приведу текст:

    ДанныеОтчета.Колонки.Добавить("ГруппаСотрудника");
            
            Для каждого СтрокаМесяца Из ДанныеОтчета.Строки Цикл
                Для Каждого СтрокаОрганизации Из СтрокаМесяца.Строки Цикл
                    
                    Для Каждого СтрокаГоловногоСотрудника Из СтрокаОрганизации.Строки Цикл
                        СтрокаГоловногоСотрудника.ГруппаСотрудника = ПолучитьГруппуСотрудника(СтрокаГоловногоСотрудника.Сотрудник);
                        Для Каждого СтрокаСотрудника Из СтрокаГоловногоСотрудника.Строки Цикл
                            СтрокаСотрудника.ГруппаСотрудника = ПолучитьГруппуСотрудника(СтрокаСотрудника.Сотрудник);
                        КонецЦикла;
                    КонецЦикла;
                    //СтрокаСотрудника.Строки.Сортировать("ГруппаСотрудника",Истина);
                КонецЦикла;
            КонецЦикла;
            ДанныеОтчета.Строки.Сортировать("ГруппаСотрудника", Истина);


ДанныеОтчета - дерево значений.

Мне нужно в возрастающем режиме отсортировать все по колонке ГруппаСотрудников, но она сортирует как-то частями, а мне надо по всему списку сотрудников.

Помогите, пожалуйста, разобраться с сортировкой дерева значений.
1 catena
 
15.06.16
07:58
Внутри каждой СтрокаОрганизации должна сортировать правильно
2 Kleo
 
15.06.16
08:00
(1) не совсем поняла. можете изменить мой пример?
а мне нужно по всему дереву сортировать по колонке ГруппаСотрудников ...
3 catena
 
15.06.16
08:04
(2)Сквозную сортировку хотите? Тогда программе нужно объяснить чем одно неопределено в родительских строках приоритетнее другого. Если у вас в одной ветке элеметы 1 и 3, а в другой 2, в каком порядке их нужно расставить?
4 Kleo
 
15.06.16
08:05
сделала вот так:

ДанныеОтчета.Колонки.Добавить("ГруппаСотрудника");
            
            Для каждого СтрокаМесяца Из ДанныеОтчета.Строки Цикл
                Для Каждого СтрокаОрганизации Из СтрокаМесяца.Строки Цикл
                    
                    Для Каждого СтрокаГоловногоСотрудника Из СтрокаОрганизации.Строки Цикл
                        СтрокаГоловногоСотрудника.ГруппаСотрудника = ПолучитьГруппуСотрудника(СтрокаГоловногоСотрудника.Сотрудник);
                        Для Каждого СтрокаСотрудника Из СтрокаГоловногоСотрудника.Строки Цикл
                            СтрокаСотрудника.ГруппаСотрудника = ПолучитьГруппуСотрудника(СтрокаСотрудника.Сотрудник);
                        КонецЦикла;
                    КонецЦикла;
                    СтрокаСотрудника.Строки.Сортировать("ГруппаСотрудника",Истина);
                КонецЦикла;
            КонецЦикла;
            //ДанныеОтчета.Строки.Сортировать("ГруппаСотрудника", Истина);


по другому сортирует, но не по порядку по группе сотрудников
5 Kleo
 
15.06.16
08:06
(3) да, нужно сквозную, по всему дереву значений!
6 Kleo
 
15.06.16
08:07
(3) я поняла вас. т.е. хотите сказать, что она будет сортировать в пределах своего уровня и все. т.е. невозможно сделать сортировку по всему дереву?
7 catena
 
15.06.16
08:07
(5)Еще раз.
Филиал1
    Группа1
    Группа3
Филиал2
    Группа2

Нарисуйте в данном случае, как вы видите результат.
8 Kleo
 
15.06.16
08:25
Организация  - одна
9 Kleo
 
15.06.16
08:27
филиалов нет. не совсем понимаю. есть организация, у нее есть сотрудники, у них я нашла группу. дальше хочу отсортировать все по группе
10 Kleo
 
15.06.16
08:27
хорошо. а как можно получить из дерева значений таблицу значений. это возможно?
11 Kleo
 
15.06.16
08:57
Получается так:

Организация1
  головнойСотрудник1
      Сотрудник1 Группа1
  головнойСотрудник2
      Сотрудник2 Группа2
  головнойСотрудник3
      Сотрудник3 Группа1
  головнойСотрудник4
      Сотрудник4 Группа2

мне надо отсортировать по группе, чтобы сотрудники отсортировались по группам в пределах ГоловнойСотрудник. это невозможно? хотя ГоловнойСотрудник в пределах своего уровня содержит только одного Сотрудника
12 catena
 
15.06.16
09:20
(10)Переписать построчно.
(11)
"надо отсортировать по группе, чтобы сотрудники отсортировались по группам в пределах ГоловнойСотрудник"
"ГоловнойСотрудник в пределах своего уровня содержит только одного Сотрудника"
И как это должно выглядеть? Сортировка одного элемента?
13 Kleo
 
15.06.16
09:33
КоллекцияСтрокДереваЗначений (ValueTreeRowCollection)
Сортировать (Sort)
Синтаксис:

Сортировать(<СтрокаСортировки>, <ВключатьПодчиненные>, <ОбъектСравнения>)
Параметры:

<СтрокаСортировки> (обязательный)

Тип: Строка.
Список имен колонок, разделенных запятыми, по которым производится сортировка таблицы. После каждого имени колонки через пробел может быть указано направление упорядочивания. Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. По умолчанию сортировка таблица производится по возрастанию. Порядок указания имен колонок таблицы определяет порядок сортировки. Это означает, что сначала таблица сортируется по колонке, указанной первой. Затем группы строк с одинаковым значением в этой колонке сортируются по колонке, которая указана второй, и так далее.
<ВключатьПодчиненные> (необязательный)

Тип: Булево.
Определяет, будут ли отсортированы коллекции подчиненных строк (если таковые имеются). Истина - коллекции будут отсортированы.
Значение по умолчанию: Ложь.

А для чего тогда <ВключатьПодчиненные> Истина или Ложь?
14 Kleo
 
15.06.16
09:35
<ВключатьПодчиненные> - Определяет, будут ли отсортированы коллекции подчиненных строк (если таковые имеются). Истина - коллекции будут отсортированы.

Это тогда для чего???

Все-таки он сортирует, но не непонятно в пределах чего...

А как можно посмотреть в режиме отладчика все дерево значений. например, как ТаблицаЗначений.Выбратьстроку() и рассчитать и выходит вся ТЗ в окне в режиме отладки. как также можно посмотреть все дерево значений?
15 catena
 
15.06.16
09:35
(13)Для того, чтобы сортировать подчиненные в пределах иерархии. Сортировка не будет перекидывать элементы из одной группы в другую.
16 Kleo
 
15.06.16
11:42
Хорошо. я убрала из головного сотрудника цикл по сотрудникам и вывод информации делаю только по головному сотруднику.

Для каждого СтрокаМесяца Из ДанныеОтчета.Строки Цикл
                Для Каждого СтрокаОрганизации Из СтрокаМесяца.Строки Цикл
                    
                    Для Каждого СтрокаГоловногоСотрудника Из СтрокаОрганизации.Строки Цикл
                        СтрокаГоловногоСотрудника.ГруппаСотрудника = ПолучитьГруппуСотрудника(СтрокаГоловногоСотрудника.ГоловнойСотрудник);
                        //Для Каждого СтрокаСотрудника Из СтрокаГоловногоСотрудника.Строки Цикл
                        //    СтрокаСотрудника.ГруппаСотрудника = ПолучитьГруппуСотрудника(СтрокаСотрудника.Сотрудник);
                        //КонецЦикла;
                        //СтрокаГоловногоСотрудника.Строки.Сортировать("ГруппаСотрудника");
                    КонецЦикла;
                    СтрокаГоловногоСотрудника.Строки.Сортировать("ГруппаСотрудника");
                КонецЦикла;
            КонецЦикла;


все равно ничего не сортирует.

т.е. 3 уровня, месяц, организация, головной сотрудник. и в пределах головного сотрудника у меня сортировка по группе сотрудника (группа не пустая). ничего не сортирует. как же все-таки работает сортировка в дереве  - ЗАГАДКА!
17 catena
 
15.06.16
13:00
(16)Не верю. Показывайте, как "не сортирует".
Ошибка? Это не ошибка, это системная функция.