Використання відборів у запитах з віртуальними таблицями
Копіювати до буфера обміну
Для спрощення написання типових запитів система надає набір віртуальних таблиць, які можна розглядати як параметризовані запити. Мова запитів дає змогу задати відбір двома способами: у реченні запиту ДЕ та параметром віртуальної таблиці. У цьому розділі описуються відмінності їх використання.
Розглянемо два запити до одного й того самого регістру накопичення, що вибирають залишок заданого товару на поточний момент.
Припустімо, регістр має таку структуру:
вимір - Товар
ресурс - Кількість
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 |