Історія розвитку запитів
прості запити
Розглянемо, як змінювався (правильніше сказати, доповнювався) синтаксис запитів на наступному прикладі: Проводиться документ Видаткова, яка містить в табличній частині Товари список реалізованої продукції і її кількість. Для проведення цього документа необхідно контролювати негативні залишки, записані в регістр накопичення залишків ОстаткіТоваров.
На малюнку показана структура конфігурації.
Створимо запит до віртуальної таблиці Залишки регістра накопичення і табличній частині документа. Для обліку можливих повторень рядків в документі, зробимо угруповання записів.
Звичайно, наведений вище запит недостатньо неоптимальна. Оптимізуємо його, використовуючи вкладені запити: згрупуємо табличну частину до з'єднання з таблицею залишків документа, передамо в параметри віртуальної таблиці список одиниць продукції в якості умови для обчислення залишків. В результаті запит буде виглядати наступним чином:
Якщо в запиті потрібно отримати дані із залишків різних регістрів, то значення фільтра і другий вкладений запит буде повторюватися в кожному параметрі віртуальних таблиць, при цьому система при кожному вкладеному запиті буде звертається для отримання даних до інформаційної бази.
тимчасові таблиці
З деякого часу в запитах з'явилася можливість використання тимчасових табліцх, для чого служить об'єкт «Менеджер тимчасових таблиць». По суті справи, менеджер тимчасових таблиць містить опис простору імен тимчасових таблиць і забезпечує їх створення і видалення з бази даних.
Тимчасові таблиці фізично зберігаються в базі, тому слід використовувати їх обережно, тому що дискова підсистема - це сама низькопродуктивною частина техніки, а швидкість створення і видалення таблиць залежить безпосередньо від неї.
Змінимо запит з урахуванням використання тимчасових таблиць. Тимчасові таблиці будуть містити табличну частину документа в сгруппированном вигляді і список продукції для фільтрації віртуальних таблиць:
Застосування тимчасових таблиць в запиті вимагає використання інструкції Помістити для формування нової тимчасової таблиці, при цьому в результат запиту передається не вміст таблиці. а число записів, які були поміщені в тимчасову таблицю.
Крім того можна використовувати інструкцію Знищити - при цьому тимчасова таблиця віддаляється, інакше тимчасові таблиці будуть знищений об'єкт менеджер тимчасових таблиць разом з таблицями.
В основному запиті назви тимчасових таблиць використовувалося як вказівки на джерело даних (їм повинен бути призначений синонім). Використовувати тимчасові таблиці в якості джерела можна неоднакратно, що при правильному їх застосуванні дозволяє скоротити текст запиту і підвищити швидкість (при використанні тимчасової таблиці в різних місцях запиту).
пакетні запити
Пакетні запити значно розширюють функціонал тимчасових таблиць і надають нові можливості при роботі з запитами.
Факімческі, в пакетному запиті може бути описано кілька запитів, як взаємопов'язаних між собою за допомогою тимчасових таблиць, так і незалежних. В результаті з'являється послідовно виконувати всі запити і отримати в результаті масив результатів виконання кожного запиту або результат тільки останнього. Отримання масиву результатів запиту здійснюється за допомогою методу ВиполнітьПакет () об'єкта запит, а щоб отримати результат тільки останнього запиту служить метод ВиполнітьЗапрос ().
Пакетні запити в тексті запиту повинні бути розділені символом «;». Простір імен віртуальних таблиць у окремого пакетного запиту одне. У використанні менеджера тимчасових таблиць немає необхідності, але можливо якщо вам потрібно передати тимчасові таблиці в інший пакетний запит.
Змінимо процедуру з урахуванням пакетних запитів:
Фактично було видалено визначення об'єкта запит і не був використаний менеджер тимчасових таблиць, об'єдналися тексти запитів. У підсумку, текст запиту придбав більш Новомосковскбельний вид.
Після виконання запиту, змінна МассівРезультатов буде містити 3 елементи. Два перших - це кількість вміщених в тимчасові таблиці записів ДокТЧ і СпісокТоваров, в третьому буде знаходитися вибірка з полями Док_Колічество, Номенклатура і Рег_Колічество.
Мінлива РезультатЗапроса містить тільки вибірку.
Таким чином, пакетні запити - дуже зручний інструмент як для написання, так і для читання складних запитів.