====== Медленная выборка из таблиц ======
===== Ситуация =====
Следующий запрос к регистрам вида РегистрСведений.* (например РегистрСведений.ЦеныНоменклатуры.СрезПоследних)
ЗапросЦенХарактеристики.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.ТипЦен В(&ТипЦен)
| И ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры В(&ХарактеристикаНоменклатуры)";
работает ОЧЕНЬ долго.
===== Причина =====
Условия в таком запросе прописываются для //виртуальной// таблицы ''СрезПоследних'', которая не хранится в базе данных а строится в процессе выборки из реальной таблицы (и на это уходит время). Получается, что она сначала строится, а потом из нее выбираются нужные поля, и по этому все работает так медленно.
===== Решение =====
==== Решение через запрос (не очень быстрое) ====
Для виртуальных таблиц параметры нужно задавать не на вкладке "Условия" в конструкторе запроса, а на вкладке "Таблицы и поля". Над перечнем "Таблицы" необходимо нажать кнопку "Параметры виртуальной таблицы", а в появившемся окне задать параметры. В результате получается, что виртуальная таблица сразу строится только из полей, удовлетворяющим условиям. В этом случае запрос приобретает следующий вид:
ЗапросЦенХарактеристики.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних";
==== Решение через Отбор (самое быстрое) ====
Отбор = Новый Структура("ТипЦен, Номенклатура, ХарактеристикаНоменклатуры");
Отбор.ТипЦен = ТипЦен;
Отбор.Номенклатура = Номенклатура;
Отбор.ХарактеристикаНоменклатуры = ХарактеристикаНоменклатуры;
Выборка = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(ТекущаяДата(),Отбор);
{{tag>1С 8.2 РегистрСведений.ЦеныНоменклатуры.СрезПоследних РегистрСведений.ЦеныНоменклатуры.СрезПоследних запрос ускорение}}