Довідковий матеріал

Використання відборів у запитах з віртуальними таблицями

Копіювати до буфера обміну

Для спрощення написання типових запитів система надає набір віртуальних таблиць, які можна розглядати як параметризовані запити. Мова запитів дає змогу задати відбір двома способами: у реченні запиту ДЕ та параметром віртуальної таблиці. У цьому розділі описуються відмінності їх використання.

Розглянемо два запити до одного й того самого регістру накопичення, що вибирають залишок заданого товару на поточний момент.
Припустімо, регістр має таку структуру:

вимір - Товар

ресурс - Кількість

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

Записатися телефоном