Лабораторная работа 7. Объект-Запрос

7.1. Создание запроса "вручную"
    7.1.1. Написание текста запроса и его выполнение
    7.1.2. Выборка данных из результата запроса
7.2. Что мы узнали

В предыдущей главе мы использовали набор записей для того, чтобы распечатать содержимое регистра сведений, при этом мы считывали в ОП всю таблицу ИБ за одну операцию чтения.

Объект Запрос встроенного языка системы предоставляет еще более эффективный механизм обработки данных.

Синтаксис языка запросов достаточно подробно описан в документации, поэтому в этой главе мы остановимся более подробно на методике его применения для формирования отчетов.

В этой главе мы рассмотрим основы применения объекта и написание текста запроса на примере п.3 постановки задачи. Для этого мы напишем полный аналог процедуры ПечатьКурсаУЕ(…) из модуля формы списка регистра сведений "Курсы".

 

7.1. Создание запроса "вручную"

7.1.1. Написание текста запроса и его выполнение
7.1.2. Выборка данных из результата запроса

Забегая вперед скажем, что в системе имеется необходимый набор конструкторов, которые облегчают процесс создания объектов и процедур на в строенном языке программы, сущетвует также и Конструктор запросов. Но для лучшего понимания работы Конструктора запросов (который мы рассмотрим в последующих главах) один из отчетов мы сделаем полностью "вручную" - практически без применения конструкторов.

Сначала выполните подготовительные действия самостоятельно.

Упражнение №7.1.

В форме списка регистра сведений "Курсы" выделите мышью кнопку на нижней панели инструментов и заполните ее свойства следующими значениями:

Свойство

Значение

Имя:

ПечатьЧерезЗапрос

Тип:

Действие

Действие:

ПечатьЧерезЗапрос

Текст:

Печать через запрос

Подсказка:

Печать через запрос

Пояснение:

Печать через запрос

Отображение:

Надпись

После этих действий форма примет вид изображенный на рисунке 7.1.


Рис. 7.1. Результат выполнения Упражнения №7.1.

 

 

7.1.1. Написание текста запроса и его выполнение

Методически, работа с объектом типа Запрос строится следующим образом:

// Создаем объект запрос
Запрос = Новый Запрос();
Запрос.Текст = "Здесь мы запишем текст запроса";
// Если текст запроса содержит некоторые параметры, то перед
// его выполнением необходимо им присвоить конкретные значения:

Запрос.УстановитьПараметр("Параметр1",ЗначениеПараметра1);
……………………………………………………………
Запрос.УстановитьПараметр("ПараметрN",ЗначениеПараметраN);
Результат = Запрос.Выполнить();
// Обработка результата

Текст запроса всегда начинается с ключевого слова ВЫБРАТЬ языка запросов, за которым через запятую следует указать: из каких полей каких таблиц запрос должен сделать выборку.

Так, в нашем случае нам нужны свойства Период и Курс регистра сведений Курсы. Поэтому мы можем записать следующий текст:

Запрос.Текст =
"ВЫБРАТЬ
|РегистрСведений.Курсы.Период, РегистрСведений.Курсы.Курс"
;

Если мы сейчас выполним запрос, то объект построит следующую таблицу, содержащую результат запроса:

Период

Курс

28.12.2000

28,1600

01.01.2002

27,9500

01.01.2003

31,7844

09.01.2003

31,8846

31.01.2003

31,8222

02.03.2003

31,5729

01.04.2003

31,3801

01.05.2003

31,1021

31.05.2003

30,7090

30.06.2003

30,3483

30.07.2003

30,2450

18.08.2003

30,3532

Для удобства написания текста запроса можно таблице, из которой объект будет выбирать записи, дать краткое название – псевдоним, применив ключевое слово КАК:

Запрос.Текст =
" ВЫБРАТЬ Курсы.Период, Курсы.Курс
|ИЗ РегистрСведений.Курсы КАК Курсы"
;

Сейчас в выборку попадают все записи, что есть в регистре (за все возможные периоды). Для того чтобы записи удовлетворяли какому-либо условию, можно в тексте запроса после ключевого слова ВЫБРАТЬ применить ключевое слово ГДЕ, после которого написать условие отбора записей.

В учебных целях мы ограничим выборку датой регистрации объединения:

Запрос.Текст =
"ВЫБРАТЬ Курсы.Период, Курсы.Курс
|ИЗ РегистрСведений.Курсы КАК Курсы
|ГДЕ Курсы.Период >= &Период"
;

Обратим внимание на знак & перед именем параметра запроса.

Чтобы запрос работал правильно, необходимо этому параметру присвоить значение перед выполнением запроса, поэтому полный текст будет выглядеть следующим образом:

// Создаем объект запрос
Запрос = Новый Запрос();
// Формируем текст запроса
Запрос.Текст =
"ВЫБРАТЬ Курсы.Период, Курсы.Курс
|ИЗ РегистрСведений.Курсы КАК Курсы
|ГДЕ Курсы.Период >= &Период"
;
// Устанавливаем значение параметра
Запрос.УстановитьПараметр("Период",
Константы.ДатаРегистрации.Получить());
// И выполняем запрос
Результат = Запрос.Выполнить();

Последнее, что нам осталось сделать - это указать порядок, в котором записи будут располагаться в таблице, содержащей результат запроса:

Запрос.Текст =
"ВЫБРАТЬ Курсы.Период, Курсы.Курс
|ИЗ РегистрСведений.Курсы КАК Курсы
|ГДЕ Курсы.Период >= &Период
|УПОРЯДОЧИТЬ ПО Период УБЫВ"
;

 

 

7.1.2. Выборка данных из результата запроса

Метод .Выбрать() возвращает объект типа РезультатЗапроса, который среди прочих имеет метод открывающий выборку результатов:

Выборка=Результат.Выбрать();
Пока
Выборка.Следующий() Цикл
    ...=
Выборка.Период;
    ...=
Выборка.Курс;
    ....................
КонецЦикла;

Именами свойств записи, которую мы выбрали по методу .Следующий() будут те псевдонимы выбранных полей, которые мы указали в тексте запроса.

Упражнение №7.2.

Внесите соответствующие изменения в текст процедуры ПечатьЧерезЗапрос(Кнопка) и проверьте ее работоспособность.

 

 

7.2. Что мы узнали

В этой главе мы рассмотрели основы работы с объектом "Запрос".

Для выполнения запроса необходимо составить его текст на специальном языке запросов.

Более подробно работу с объектом и язык запросов мы рассмотрим в последующих главах.