Сортировка ДанныеФормыДеревоЗначений с изменением направления

tech_log 10 2

Сортировка дерева значений с изменением направления

Инфостарт Александр Цегельников

&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьДанныеФормыДерево(КоллекцияСортировки, КолонкаСортировки, ВключатьПодчиненные = Ложь, ПоВозрастанию = Истина)
    
    КоллекцияСтрок = КоллекцияСортировки.ПолучитьЭлементы();
    
    СортироватьДанныеФормыКоллекция(КоллекцияСтрок, КолонкаСортировки, ПоВозрастанию);
    
    Если ВключатьПодчиненные Тогда
        
        Для Каждого ТекущаяСтрока Из КоллекцияСтрок Цикл
            
            СортироватьДанныеФормыДерево(ТекущаяСтрока, КолонкаСортировки, ВключатьПодчиненные, ПоВозрастанию);
            
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьДанныеФормыКоллекция(КоллекцияСтрок, КолонкаСортировки, ПоВозрастанию = Истина)
    
    ПараметрыЗначений     = Новый Соответствие;
    СортированныеЗначения = Новый СписокЗначений;
    
    Для Каждого ТекущаяСтрока Из КоллекцияСтрок Цикл
        
        ТекущееЗначение = ТекущаяСтрока[КолонкаСортировки];
        
        ПараметрыЗначения = ПараметрыЗначений.Получить(ТекущееЗначение);
        
        Если ПараметрыЗначения = Неопределено Тогда
            
            ПараметрыЗначения = Новый Массив;
            ПараметрыЗначений.Вставить(ТекущееЗначение, ПараметрыЗначения);
            СортированныеЗначения.Добавить(ТекущееЗначение);
            
        КонецЕсли;
        
        ПараметрыЗначения.Добавить(ТекущаяСтрока);
        
    КонецЦикла;
    
    СортированныеЗначения.СортироватьПоЗначению(?(ПоВозрастанию, НаправлениеСортировки.Возр, НаправлениеСортировки.Убыв));
    НовыйИндекс = 0;
    
    Для Каждого ТекущееЗначение Из СортированныеЗначения Цикл
        
        МассивСтрок = ПараметрыЗначений.Получить(ТекущееЗначение.Значение);
        
        Для Каждого ТекущаяСтрока Из МассивСтрок Цикл
            
            ТекущийИндекс = КоллекцияСтрок.Индекс(ТекущаяСтрока);
            ШагСдвига     = НовыйИндекс - ТекущийИндекс;
            
            Если НЕ ШагСдвига = 0 Тогда
                
                КоллекцияСтрок.Сдвинуть(ТекущийИндекс, ШагСдвига);
                
            КонецЕсли;
            
            НовыйИндекс = НовыйИндекс + 1;
            
        КонецЦикла;
        
    КонецЦикла;
    
КонецПроцедуры
0

См. также

Вывод данных СКД в таблицу значений (дерево)

НайтиСтрокуВДанныхФормыДерево (БСП)

ИнтерактивноеИзменениеВыгрузки_СформироватьДеревоЗначений (БСП)

ДеревоПодсистемИспользованиеПриИзменении (БСП)

ДеревоПодсистемВажностьПриИзменении (БСП)

ДеревоЗначений вывод на управляемую форму

Интерактивный отбор дерева значений

Создание схемы компоновки данных программно

ЗаполнитьКоллекциюЭлементовДереваДанныхФормы (БСП)

Модератору