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