Оптимизация поиска по подчиненным выборкам в запросе
В одном запросе 1С нельзя использовать несколько подчиненных группировок.
Рассмотрим на примере выгрузки картинок на сайт. Я сделал отдельный запрос по картинкам и хотел организовать поиск по номенклутуре. Но работало медленно:
МассивКартинок = Новый Массив(); //Сбрасываем перед поиском ВыборкаНоменклатураПоКартинкам.Сбросить(); Если ВыборкаНоменклатураПоКартинкам.НайтиСледующий(Новый Структура("Номенклатура", Ссылка)) Тогда ВыборкаКартинки = ВыборкаНоменклатураПоКартинкам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ИндексКартинки = 0; Пока ВыборкаКартинки.Следующий() Цикл СтруктураКартинки = Новый Структура(); ИндексКартинки = ИндексКартинки + 1; СтруктураКартинки.Вставить("img_number", ИндексКартинки); СтруктураКартинки.Вставить("img_guid", XMLСтрока(ВыборкаКартинки.Ссылка)); СтруктураКартинки.Вставить("img_name", XMLСтрока(СокрЛП(ВыборкаКартинки.Наименование))); СтруктураКартинки.Вставить("img_ext", XMLСтрока(СокрЛП(ВыборкаКартинки.Расширение))); СтруктураКартинки.Вставить("img_size", ВыборкаКартинки.Размер); МассивКартинок.Добавить(СтруктураКартинки); КонецЦикла; КонецЕсли; СтруктураТовар.Вставить("images", МассивКартинок);
Замер производительности показывал, что работало медленно на поиске.
Пришлось переписать через формирование соответствия:
СооКартинки = Новый Соответствие(); Пока ВыборкаНоменклатураПоКартинкам.Следующий() Цикл Номенклатура = ВыборкаНоменклатураПоКартинкам.Номенклатура; МассивКартинок = Новый Массив(); ИндексКартинки = 0; ВыборкаКартинки = ВыборкаНоменклатураПоКартинкам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКартинки.Следующий() Цикл СтруктураКартинки = Новый Структура(); ИндексКартинки = ИндексКартинки + 1; СтруктураКартинки.Вставить("img_number", ИндексКартинки); СтруктураКартинки.Вставить("img_guid", XMLСтрока(Номенклатура)); СтруктураКартинки.Вставить("img_name", XMLСтрока(СокрЛП(ВыборкаКартинки.Наименование))); СтруктураКартинки.Вставить("img_ext", XMLСтрока(СокрЛП(ВыборкаКартинки.Расширение))); СтруктураКартинки.Вставить("img_size", ВыборкаКартинки.Размер); МассивКартинок.Добавить(СтруктураКартинки); КонецЦикла; СооКартинки.Вставить(Номенклатура, МассивКартинок); КонецЦикла;
И последующий поиск в соответствии:
МассивКартинок = СооКартинки[Ссылка]; Если МассивКартинок = Неопределено Тогда МассивКартинок = Новый Массив(); КонецЕсли; СтруктураТовар.Вставить("images", МассивКартинок);
Это оптимальное решение задачи?




Это шутка что-ли?
Запрос = Новый Запрос();
Запрос.Текст = »
|ВЫБРАТЬ
| НоменклатураПрисоединенныеФайлы.ВладелецФайла КАК Номенклатура,
| НоменклатураПрисоединенныеФайлы.Размер КАК Размер,
| НоменклатураПрисоединенныеФайлы.Расширение КАК Расширение,
| НоменклатураПрисоединенныеФайлы.Наименование КАК Наименование
|ИЗ
| Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
|ИТОГИ ПО
| Номенклатура
|»;
ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, «Номенклатура»);
Пока ВыборкаНоменклатура.Следующий() Цикл
ВыборкаКартинки = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаКартинки.Следующий() Цикл
КонецЦикла;
КонецЦикла;
не понял вашего вопроса?