1с8.3.12, УФ, самопис
Имеется некий запрос объект, в модуле которого прописывается код поиска остатка позиций по Регистру накопления.
РезультатСЗ = Запрос.Выполнить().Выгрузить();
РезультатСЗ.Колонки.Добавить("ОстатокСклада", ОбщегоНазначения.ОписаниеТипаЧисло(15,2));
РезультатСЗ.Колонки.Добавить("Проблема", ОбщегоНазначения.ОписаниеТипаСтрока(100));
Для Каждого СТР Из РезультатСЗ Цикл
Если СТР.Параметр = "СТЛ" Тогда
СТР.ОстатокСклада = ОстатокСтел(СТР.Номенклатура, СТР.Модель, СТР.РазмерИзделия, СТР.ПолировкаИзделия, СТР.Склад, СТР.Период);
ИначеЕсли СТР.Параметр = "ОСН" Тогда
СТР.ОстатокСклада = ОстатокНоменклатуры(СТР.Номенклатура, СТР.РазмерИзделия, СТР.ПолировкаИзделия, СТР.Склад, СТР.Период);
ИначеЕсли СТР.Параметр = "ДОП" Тогда
СТР.ОстатокСклада = ОстатокДопов(СТР.Номенклатура, СТР.Склад, СТР.Период);
КонецЕсли;
КонецЦикла;
Где функции "ОстатокСтел/Номенклатуры/Допов" имеет одинаковый смысл поиска из регистра накопления, только с разными параметрами поиска:Таких запросов аж 3-и штуки
Функция ОстатокСтел(Номенклатура, Модель, Размер, Полировка, Склад, Период)
Результат = 0;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвижениеТМЦОстатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ДвижениеТМЦ.Остатки(
| &Дата,
| Номенклатура = &Номенклатура
| И Модель = &Модель
| И Размеры = &Размеры
| И Полировка = &Полировка
| И Склад = &Склад) КАК ДвижениеТМЦОстатки
|ГДЕ
| ДвижениеТМЦОстатки.КоличествоОстаток > 0";
Запрос.УстановитьПараметр("Дата", Период);
Запрос.УстановитьПараметр("Модель", Модель);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Полировка", Полировка);
Запрос.УстановитьПараметр("Размеры", Размер);
Запрос.УстановитьПараметр("Склад", Склад);
.....................
КонецФункции
Запрос работает правильно, но очень медлено, т.к. каждая строка имеет свой параметр поиска "Период" и "Склад"
Можно ли как-то ускорить работу запроса по поиску остатков по каждой строке с разными параметрами поиска?