Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Меркулова_Пособие_РазработкаУправляемыхПриложен...doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
18 Мб
Скачать
☆

6.2.12. Конструкторы запроса

Для облегчения труда разработчика технологическая платформа содержит два специальных конструктора. Они служит для того, чтобы помочь разработчику составить правильный текст запроса, используя только визуальные средства. Выбирая мышью нужные поля таблиц, разработчик может составить работоспособный запрос, даже не зная синтаксиса языка запросов.

Конструктор запроса (Query Builder)

Конструктор запроса  - это один из инструментов разработки. Он позволяет составить текст запроса на языке запросов исключительно визуальными средствами.

Конструктор запроса можно вызвать, если курсор находится в любом программном модуле. Тогда в главном меню конфигуратора появляется дополнительное подменю «Текст», рис. 6.1..

Рис. 6.1. Вызов конструктора запроса

После выбора конструктора запросов открывается следующая система окон, рис. 6.2.:

Рис. 6.2. Конструктор запроса

С помощью кнопок Далее и Назад можно перемещаться по закладкам конструктора и указывать, какие данные должны присутствовать в результате запроса, как они связаны, сгруппированы, какие итоги следует рассчитать, работать с временными таблицами, редактировать пакет запросов:

Рис. 6.3. Конструктор запроса после выбора таблицы-источника и полей в таблице

Результатом работы конструктора будет являться синтаксически правильный текст запроса. Таким образом, разработчик может составить работоспособный запрос, даже не владея синтаксисом языка запросов - необходимые синтаксические конструкции конструктор сгенерирует автоматически. Готовый текст запроса может быть сразу же вставлен в текст модуля или скопирован в буфер обмена.

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

Конструктор запроса с обработкой результата

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

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

На первом шаге своей работы конструктор предлагает выбрать один из возможных вариантов обработки результата запроса: просто обход результата для его дальнейшей программной обработки или вывод данных в табличный документ или диаграмму.

Рис. 6.4. Конструктор запроса с обработкой результата

Следующие шаги работы конструктора позволяют создать текст запроса к базе данных. Эти возможности аналогичны тем, которые предоставляет конструктор запроса

Результатом работы конструктора запроса с обработкой результата является готовый фрагмент программного кода и, например, макет табличного документа. Разработчик может внести в них, при необходимости, свои изменения.

Пример. Разработать отчет, выводящий список сотрудников, с использованием конструктора запросов с обработкой результата.

Вводим в конфигураторе новый объект-отчет. Создаем форму отчета, заходим в модуль отчета, вызываем конструктор запросов с обработкой результата. Получаем:

Рис. 6.5. Конструктор запроса с обработкой результата. Первый шаг

Переходим на закладку «Таблицы», выбираем нужную таблицу-источник, в выбранной таблице выбираем нужные поля для отчета.

Рис. 6.6. Конструктор запроса с обработкой результата. Второй шаг.

Далее, на закладке «порядок» выбираем порядок сортировки с иерархией для того, чтобы строки справочника выводились в отчет в учетом их вложенности в группы, т.е. в соответствии с иерархией групп и элементов.

Рис. 6.7. Конструктор запроса с обработкой результата. Третий шаг.

Нажимаем ОК. Получаем:

А) Автоматически сформированный макет

Рис. 6.8. Автоматически сформированный конструктором макет.

Б) Фрагмент программного кода в модуле отчета:

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

// Данный фрагмент построен конструктором.

//При повторном использовании конструктора, внесенные вручную

// изменения будут утеряны!!!

Макет = Отчеты.СписокСотрудников_С_КонструктомЗапросаСПечатью.ПолучитьМакет("Макет");

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Сотрудники.Код,

| Сотрудники.Наименование,

| Сотрудники.Пол,

| Сотрудники.Образование,

| Сотрудники.Оклад КАК Оклад,

| Сотрудники.Адрес

|ИЗ

| Справочник.Сотрудники КАК Сотрудники

|

|УПОРЯДОЧИТЬ ПО

| Сотрудники.Ссылка ИЕРАРХИЯ";

Результат = Запрос.Выполнить();

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");

ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");

ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");

ТабДок.Очистить();

ТабДок.Вывести(ОбластьЗаголовок);

ТабДок.Вывести(ОбластьШапкаТаблицы);

ТабДок.НачатьАвтогруппировкуСтрок();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);

ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());

КонецЦикла;

ТабДок.ЗакончитьАвтогруппировкуСтрок();

ТабДок.Вывести(ОбластьПодвалТаблицы);

ТабДок.Вывести(ОбластьПодвал);

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

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

Рис. 6.9. Настройка формы отчета

Далее, корректируем текст программы:

&НаКлиенте

Процедура Печать(Команда)

ТабДок=ПечатьОтчета();

КонецПроцедуры

Функция ПечатьОтчета()

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные вручную

//изменения будут утеряны!!!

Макет = Отчеты.СписокСотрудников_С_КонструктомЗапросаСПечатью.ПолучитьМакет("Макет");

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Сотрудники.Код,

| Сотрудники.Наименование,

| Сотрудники.Пол,

| Сотрудники.Образование,

| Сотрудники.Оклад КАК Оклад,

| Сотрудники.Адрес

|ИЗ

| Справочник.Сотрудники КАК Сотрудники

|

|УПОРЯДОЧИТЬ ПО

| Сотрудники.Ссылка ИЕРАРХИЯ";

Результат = Запрос.Выполнить();

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");

ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");

ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");

ТабДок=Новый ТабличныйДокумент();

ТабДок.Очистить();

ТабДок.Вывести(ОбластьЗаголовок);

ТабДок.Вывести(ОбластьШапкаТаблицы);

ТабДок.НачатьАвтогруппировкуСтрок();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);

ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());

КонецЦикла;

ТабДок.ЗакончитьАвтогруппировкуСтрок();

ТабДок.Вывести(ОбластьПодвалТаблицы);

ТабДок.Вывести(ОбластьПодвал);

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

Возврат ТабДок;

КонецФункции

Результат:

Рис. 6.10. Готовый отчет

Для улучшения внешнего вида отчета, а также для добавления новых возможностей (расшифровки, примечания) необходимо продолжить корректировку как макета, так и модуля отчета.