Медленная выборка из таблиц

Следующий запрос к регистрам вида РегистрСведений.* (например РегистрСведений.ЦеныНоменклатуры.СрезПоследних)

ЗапросЦенХарактеристики.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
|	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ИЗ
|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
|ГДЕ
|	ЦеныНоменклатурыСрезПоследних.ТипЦен В(&ТипЦен)
|	И ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры В(&ХарактеристикаНоменклатуры)";

работает ОЧЕНЬ долго.

Условия в таком запросе прописываются для виртуальной таблицы СрезПоследних, которая не хранится в базе данных а строится в процессе выборки из реальной таблицы (и на это уходит время). Получается, что она сначала строится, а потом из нее выбираются нужные поля, и по этому все работает так медленно.

Для виртуальных таблиц параметры нужно задавать не на вкладке «Условия» в конструкторе запроса, а на вкладке «Таблицы и поля». Над перечнем «Таблицы» необходимо нажать кнопку «Параметры виртуальной таблицы», а в появившемся окне задать параметры. В результате получается, что виртуальная таблица сразу строится только из полей, удовлетворяющим условиям. В этом случае запрос приобретает следующий вид:

ЗапросЦенХарактеристики.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
|	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ИЗ
|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних";
Отбор = Новый Структура("ТипЦен, Номенклатура, ХарактеристикаНоменклатуры");
Отбор.ТипЦен = ТипЦен;
Отбор.Номенклатура = Номенклатура;
Отбор.ХарактеристикаНоменклатуры = ХарактеристикаНоменклатуры;
Выборка = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(ТекущаяДата(),Отбор);
  • software/1c/select-from.txt
  • Последнее изменение: 2017/05/09 18:34
  • 127.0.0.1