Книга знаний

1С:Предприятие / v8 / Администрирование / Производительность

v8: Ускорение типовой свертки таблиц значений в 1С80

Ускоряет на порядки выполнение свертки таблиц значенийАвтор статьи:
Последняя редакция №1 от 18.05.06
URL: http://kb.mista.ru/article.php?id=228

Ключевые слова: производительность,таблица значений,свертка


Основываясь на коде Волочаева Дмитрия, я написал замену типовой функции по свертке таблицы значений ее сверткой через построитель запроса.

Дело в том что таблица значений - неиндексированная коллекция и типовая свертка по ней работает медленно.

Рекомендуется для ускорения все вызовы ТЗ.Свернуть(А,Б) на ТурбоСвернуть(ТЗ,А,Б) и удивитесь приросту скорости.

Функция ТурбоСвернуть(ТЗ, _СтрокаСвертки, _СтрокаИтогов)
    СтрокаСвертки=СтрЗаменить(_СтрокаСвертки," ","")+",";
    СтрокаИтогов=СтрЗаменить(_СтрокаИтогов," ","")+",";
    ПоляИтогов=Новый Массив;
    ПоляСвертки=Новый Массив;
    
    //(C) Основано на коде Волочаева Дмитрия, переработано Гением 1С
    ПЗ = Новый ПостроительЗапроса(); 
    ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ); 
    Для каждого Колонка Из ПЗ.ИсточникДанных.Колонки Цикл 
        //Колонка.Измерение = Истина; 
        Если Найти(СтрокаИтогов, Колонка.Имя +",")<>0 Тогда 
            ПоляИтогов.Добавить(Колонка.Имя);
            Колонка.Итог = "Сумма("+Колонка.Имя+")"; 
        ИначеЕсли Найти(СтрокаСвертки, Колонка.Имя +",")<>0  Тогда
            ПоляСвертки.Добавить(Колонка.Имя);
        КонецЕсли; 
    КонецЦикла; 
    
    ПЗ.ЗаполнитьНастройки(); 
    ПЗ.Выполнить(); 
    
    Выборка = ПЗ.Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); 
    
    ТЗ1 = Новый ТаблицаЗначений; 
    
    Для Каждого ПолеСвертки ИЗ ПоляСвертки Цикл
        ТЗ1.Колонки.Добавить(ПолеСвертки, ТЗ.Колонки[ПолеСвертки].ТипЗначения); 
    КонецЦикла;
    
    Для Каждого ПолеИтогов ИЗ ПоляИтогов Цикл
        ТЗ1.Колонки.Добавить(ПолеИтогов, Новый ОписаниеТипов("Число")); 
    КонецЦикла;
    
    Пока Выборка.Следующий() Цикл 
        Стр= ТЗ1.Добавить(); 
        ЗаполнитьЗначенияСвойств(Стр, Выборка); 
    КонецЦикла; 
    
    Возврат ТЗ1;
КонецФункции


Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика