1С:Предприятие 8.2 /
Разработчикам /
Язык запросов
Использование отборов в запросах с виртуальными таблицами
Для упрощения написания типовых запросов система предоставляет набор виртуальных таблиц, которые можно рассматривать как параметризованные запросы. Язык запросов позволяет задать отбор двумя способами: в предложении запроса ГДЕ, и параметром виртуальной таблицы. В данном разделе описываются различия их использования .
Рассмотрим два запроса к одному и тому же регистру накопления, выбирающие остаток заданного товара на текущий момент.
Допустим, регистр имеет следующую структуру:
измерение - Товар
ресурс - Количество
1. Запрос с использованием отбора заданного конструкцией языка запросов
ВЫБРАТЬ ОстатокСумма ИЗ РегистрНакопления.Запасы.Остатки() ГДЕ Товар = &Товар
2. Запрос с использованием отбора заданного параметром виртуальной таблицы
ВЫБРАТЬ ОстатокСумма ИЗ РегистрНакопления.Запасы.Остатки(, Товар = &Товар)
Оба запроса дают одинаковый результат. Но при исполнении первого запроса будут посчитаны остатки по всем товарам и только потом отобран единственно нужный остаток. Во втором запросе условие отбора передается непосредственно в виртуальную таблицу и при исполнении запроса виртуальной таблицы будет получен остаток только по одному товару. То есть если ограничение задается средствами языка запросов, то сначала будет получена полная выборка из виртуальной таблицы и только затем на этот результат наложен фильтр. В случае передачи условия запроса в виртуальную таблицу, результирующая выборка сразу будет ограничена заданным условием. Следовательно, нужно максимально большее количество условий отбора передавать в параметрах виртуальных таблиц.
Для некоторых виртуальных таблиц, способ использования отбора влияет не только на производительность, но и на логику исполнения запроса. Рассмотрим виртуальную таблицу регистра сведений СрезПоследних, на примере регистра сведений КурсыВалют, который имеет следующую структуру:
измерение - Валюта
реквизит - Источник
ресурс – Курс
Где реквизит Источник может принимать значения: интернет, печатные издания.
Задача получить последние курсы валют, значения которых получены из печатных изданий.
1. Запрос с использованием отбора заданного конструкцией языка запросов
ВЫБРАТЬ Валюта, Курс ИЗ РегистрСведений.КурсыВалют.СрезПоследних() ГДЕ Источник = &Источник
2.Запрос с использованием отбора заданного параметром виртуальной таблицы
ВЫБРАТЬ Валюта, Курс ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Источник = &Источник)
Хотя данные запросы различаются только способом указания отбора, их результаты, в отличие от случая с запросами по регистру накопления , будут различны. В первом случае в результат не попадут валюты, у которых последний курс установлен не по данным печатных изданий.
Во втором случае будут выбраны последние курсы всех валют, у которых хоть раз курс устанавливался по печатным изданиям. То есть, если в регистр были занесены следующие данные:
Период | Валюта | Курс | Источник |
---|---|---|---|
19.03.2003 | USD | 31.00 | Печатные издания |
19.03.2003 | EUR | 34.00 | Печатные издания |
20.03.2003 | USD | 31.10 | Интернет |
То первый запрос вернет:
Валюта | Курс |
---|---|
EUR | 34.00 |
Второй запрос вернет:
Валюта | Курс |
---|---|
USD | 31.00 |
EUR | 34.00 |
Другие материалы по теме:
при исполнении, измерение, язык, 64, накопления, 36, способ, источник, курс, запасы, буфер обмена, копировать, остаток, регистр., отбор, валюта, обмен, значения, остатки, 00, выбрать, результат, количество, конфигурирование, реквизит, товар, регистр
Материалы из раздела: 1С:Предприятие 8.2 / Разработчикам / Язык запросов
Другие материалы по теме:
Источники данных для расчетов бюджетирования
Общие механизмы товарных документов
Использование параметра Условие при обращении к виртуальной таблице
Связь наборов данных по периодам
Разыменование ссылочных полей составного типа в языке запросов
Мы на Facebook