HostedRedmine.com has moved to the Planio platform. All logins and passwords remained the same. All users will be able to login and use Redmine just as before. *Read more...*
Bug #951093
open8.3.1-22+ Очень долгая компоновка с отбором по дочернему полю от ссылочной колонки таблицы значений
0%
Description
https://partners.v8.1c.ru/forum/t/2084496/m/2084496
https://bugboard.v8.1c.ru/error/000130677
Конфигурация ПО
8.3.1-22
Проблема
Очень долгая компоновка с отбором по дочернему полю от ссылочной колонки таблицы значений
Воспроизведение
Восстановить базу из выгрузки. Запустить клиентское приложение. Откроется отчет по таблице значений из одной ссылочной колонки с отбором по ее дочернему полю. Нажать в отчете "Сформировать". При этом выполнится код
КоличествоСтрок = 5000; // 20 сек
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("Ссылка");
Для Счетчик = 1 По КоличествоСтрок Цикл
ТаблицаЗначений.Добавить().Ссылка = Справочники.Справочник1.ПолучитьСсылку();
КонецЦикла;
КомпоновщикМакета = НОвый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки);
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет, Новый Структура("ТаблицаЗначений", ТаблицаЗначений));
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
Начало = ТекущаяДата();
Результат = ПроцессорВывода.Вывести(Процессор);
Сообщить("" + (ТекущаяДата() - Начало) + "сек");
И после долгого ожидания будет выведено большое число секунд
20 сек
А ожидалось очень малое число секунд (1).
Эксперименты показали
Основную часть времени процесс 1С грузит процессор и НЕ выполняет запросы к БД, которые по данным техножурнала в сумме занимают 1 сек.
Длительность сильно зависит от числа различных ссылок в колонке
КоличествоСтрок = 2000; // 3 сек
КоличествоСтрок = 3000; // 5 сек
КоличествоСтрок = 4000; // 10 сек
КоличествоСтрок = 5000; // 20 сек
Способ обхода
Добавить ключевое поле в таблицу значений. Поместить подтаблицу из него и всех ссылочных колонок, чьи дочерние поля участвуют в отборе, во временную таблицу запроса. Разбить отбор на части: с обращением к дочерним полям и без них. Выбрать из временной таблицы ключи строк. В отбор компоновки добавить условие по полученным ключам вместо отборов по дочерним полям.
Files
Related issues
Updated by Сергей Старых 4 months ago
- Related to Task #951184: Значительно ускорена фильтрация табличного поля строкой поиска при наличии большого числа строк и разных ссылок added