Структура запросов и методика их использования
Использование запросов позволяет легко строить простые отчеты и облегчает построение сложных отчетов. При построении сложных отчетов использование запросов может существенно снизить трафик сети, т.к. однажды выбранная лри исполнении запроса информация, хранящаяся во временном наборе данных на локальном компьютере, может многократно использоваться.
Запросы можно использовать не только для построения отчетов, но и для реализации других процедур конфигурации, требующих получения из БД некой сводной информации. Например, реализация алгоритма списания стоимости товара по методам FIFO или LIFO.
Работа с запросами предполагает следующий порядок:
- при помощи функции СоздатьОбъект создается объект типа "Запрос" и ссылка на него присваивается какой-либо переменной. Далее обращение к запросу производится посредством этой ссылки.
- после создания переменной типа "Запрос" следует обращение к методу Выполнить, которому в качестве параметра передается текст запроса, написанный на специальном языке запросов (см. главу "Язык запросов"). Метод Выполнить анализирует текст запроса, выполняет в соответствии с ним выборку данных и формирует временный выходной набор данных (выборку).
- после этого организуется циклическая обработка сформированного временного набора данных (выборки) с целью получения требуемого отчета.
В данном разделе мы рассмотрим структуру создаваемого запросом временного набора данных и работу методов запросов по выборке информации из этого временного набора.
Дальнейшее описание проведем на простом примере: необходимо получить отчет о количестве товаров, хранящихся на складах. Текст процедуры, выполняющей эту операцию приведен ниже.
Пример:
НашЗапрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |СКЛАД = Регистр.ТоварныйЗапас.Склад; |ТОВАР = Регистр.ТоварныйЗапас.Товар; |КОЛИЧЕСТВО = Регистр.ТоварныйЗапас.Количество; |Группировка ТОВАР Упорядочить По ТОВАР.Код; |Группировка СКЛАД Упорядочить По СКЛАД.Код; |Функция КОЛ = КонОст(КОЛИЧЕСТВО); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если НашЗапрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;