Изучение конструктора запросов и языка запросов

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

Щелкнем правой кнопкой мыши по свободному пространству в поле ввода текста запроса в обработке Консоль запросов. В появившемся контекстном меню выберем пункт Конструктор запроса. Появится соответствующее окно, рис. 7.6.

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

Конструктором запроса можно пользоваться и в режиме конфигурирования, причем, там он, преимущественно, и используется при составлении запросов.

Окно конструктора запроса имеет несколько вкладок. Вкладка Таблицы и поля служит для указания таблиц (реальных и виртуальных), из которых будут отбираться данные, и конкретных полей этих таблиц, которые и попадут в результаты запроса.

Вкладка Таблицы и поля имеет три области. Область, озаглавленная как База данных показывает нам набор таблиц, которые имеются в системе. Можно заметить, что эта область напоминает дерево конфигурации. Группы можно разворачивать, тогда мы получаем доступ к конкретным таблицам. Как видите, здесь представлена база данных конфигурации, над которой мы все это время работаем. Развернем несколько группировок, рис. 7.7.

Рис. 7.7. Набор таблиц базы данных

Среди таблиц есть реальные и виртуальные. Например, реальные таблицы - это таблицы справочников (ФизическиеЛица, Номенклатура), документов (ПоступлениеМатериалов), регистров накопления (ОстаткиМатериалов). Виртуальные таблицы в данный момент имеют отношение к регистру накопления ОстаткиМатериалов. В частности, виртуальная таблица ОстаткиМатериалов.Обороты предназначена для получения информации об оборотах по регистру. Таблица ОстаткиМатериалов.Остатки - для получения данных об остатках, таблица ОстаткиМатериалов.ОстаткиИОбороты, как следует из ее названия, предназначена для получения и информации об остатках и информации об оборотах.

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

Зададимся следующей целью: нужно сконструировать запрос, который выводит список фамилий сотрудников, работающих в организации.

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

Если вспомнить устройство справочника Сотрудники, то окажется, что один из его реквизитов имеет тип СправочникСсылка.ФизическиеЛица, именно из этого реквизита можно "вытащить" фамилию сотрудника. Развернем группировку ФизическоеЛицо, найдем среди появившихся полей поле Фамилия и перенесем его в рабочую область Поля, рис. 7.8.

Рис. 7.8. Выбор таблиц и полей

Собственно говоря, запрос, который выполняет вышеописанную задачу, готов. Для того, чтобы просмотреть текст полученного запроса, не выходя из конструктора запроса, можно нажать на кнопку Запрос, которая расположена в левом нижнем углу формы конструктора. Нажмем на эту кнопку, рис. 7.9.

Рис. 7.9. Предварительный просмотр текста запроса

Запрос, который отображается в этом окне, можно отредактировать, нажав на кнопку командной панели Редактировать запрос, его можно выполнить и посмотреть на результаты выполнения запроса, нажав на кнопку Выполнить запрос. Команда выполнения запроса доступна лишь при вызове конструктора запроса в режиме 1С:Предприятие.

Закроем окно предварительного просмотра запроса и нажмем на кнопку ОК в окне Конструктор запроса.

Как вы уже могли понять, в поле ТекстЗапроса попадет следующий текст:

ВЫБРАТЬ

Сотрудники.ФизическоеЛицо.Фамилия

ИЗ

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

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

Ключевое слово ИЗ позволяет задавать источники данных для запроса. В нашем случае мы видим здесь следующий текст:

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

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

Вернемся к пояснениям области ВЫБРАТЬ. Здесь имеется следующая команда:

Сотрудники.ФизическоеЛицо.Фамилия

Этой командой мы обращаемся к таблице ФизическоеЛицо, которая хранится в таблице Сотрудники (напомним, что это - псевдоним) и выбираем из нее фамилию сотрудника. Полям, которые попадают в выборку данных, создаваемую запросом, так же можно назначать псевдонимы с помощью ключевого слова КАК.

Если попытаться выразить текст рассматриваемого запроса на естественном языке, то получится следующее. Нужно выбрать из таблицы Справочник.Сотрудники (которую в запросе будем называть просто Сотрудники) фамилию сотрудника, которая хранится в таблице ФизическоеЛицо, соответствующей конкретному сотруднику.

Теперь нажмем на кнопку Выполнить в форме обработки Консоль запросов. Вот, что у нас получилось, рис. 7.10.

Рис. 7.10. Результат выполнения запроса

Продолжим знакомство с запросами. Решим несколько задач, направленных на получение данных из нашей базы. Будем писать запросы вручную. К Конструктору запросов мы еще вернемся, сейчас наша задача - сконцентрировать внимание на текстах запросов, понять их сущность.

Получим из справочника ЕдиницыИзмерения коды и наименования единиц измерения. В результатах запроса поле Код должно иметь наименование " Код ", поле " Наименование " - " Название ". Справочник ЕдиницыИзмерения нужно представить в запросе как ТабЕдИзм.

Написание запроса удобно начинать с группы ИЗ. Напишем следующий шаблон:

ВЫБРАТЬ

ИЗ

Справочник.ЕдиницыИзмерения как ТабЕдИзм

После того, как источник данных определен, определяем поля для выбора:

ВЫБРАТЬ

ТабЕдИзм.Код,

ТабЕдИзм.Наименование КАК Название

ИЗ

Справочник.ЕдиницыИзмерения как ТабЕдИзм

Исполним запрос, рис. 7.11.

Рис. 7.11. Результат выполнения запроса

Усложним задачу. Результат предыдущего запроса нужно упорядочить по полю Название.

Для этого в запросе нужно использовать конструкцию УПОРЯДОЧИТЬ ПО. Теперь наш запрос будет выглядеть так:

ВЫБРАТЬ

ТабЕдИзм.Код,

ТабЕдИзм.Наименование КАК Название

ИЗ

Справочник.ЕдиницыИзмерения как ТабЕдИзм

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

Название

На рис. 7.12 вы можете видеть результат выполнения запроса

Рис. 7.12. Результат выполнения запроса

При составлении запроса можно задавать выбор не всех результатов, полученных из базы, а лишь тех, которые удовлетворяют какому-либо условию. Наиболее простое проявление этого утверждения - выбор некоторого количества первых элементов результата. Реализуется это с использованием слова ПЕРВЫЕ с указанием количества отбираемых элементов. Обратите внимание на то, что элементы выбираются с учетом их упорядочивания, заданного в запросе.

Выберем первые 2 элемента из результатов, модифицировав предыдущий запрос:

ВЫБРАТЬ ПЕРВЫЕ 2

ТабЕдИзм.Код,

ТабЕдИзм.Наименование КАК Название

ИЗ

Справочник.ЕдиницыИзмерения как ТабЕдИзм

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

Название

Выполним запрос (рис. 7.13).

Рис. 7.13. Результат выполнения запроса

Для того чтобы в выборку попали лишь различные элементы, можно воспользоваться ключевым словом РАЗЛИЧНЫЕ после слова ВЫБРАТЬ.

Выше мы делали выборки из неиерархического справочника ЕдиницыИзмерения. Попробуем теперь поработать с иерархическим справочником. Выберем все элементы из справочника Номенклатура. Для выбора всех полей можно воспользоваться командой "*", рис. 7.14.

ВЫБРАТЬ

*

ИЗ

Справочник.Номенклатура

Рис. 7.14. Результат выполнения запроса

Как видите, в результат запроса попали не только элементы справочника (Одеколон, Стрижка и т.д.), но и группы (Парфюмерия, Парикмахерские услуги). Для того, чтобы при работе с иерархическим справочником ограничить выбор всеми элементами, исключая группы, в текст запроса нужно ввести условие отбора. Обратите внимание на поле ЭтоГруппа, его можно увидеть на рис. 7.14. Это поле у обычных элементов справочника принимает значение ложь, у групп - истина.

Для отбора элементов можно использовать ключевое слово ГДЕ. Оно позволяет задавать условия отбора. Напишем запрос, который отбирает наименования элементов справочника Номенклатура, исключая наименования групп (рис. 7.15).

ВЫБРАТЬ

ТабНоменклатура.Наименование

ИЗ

Справочник.Номенклатура КАК ТабНоменклатура

ГДЕ

НЕ ТабНоменклатура.ЭтоГруппа

Рис. 7.15. Результат выполнения запроса

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

Нам нужно отобрать среди документов поступления материалов лишь те, сумма которых превышает 2000 рублей, и вывести в результаты запроса даты, номера документов, ФИО материально-ответственного лица, принявшего материалы, а так же сумму документа, упорядочив выводимые строки по сумме документа.

Откроем Конструктор запроса и на вкладке Таблицы и поля отберем в область Таблицы таблицу документов ПоступлениеМатериалов, в область Поля перенесем следующие поля, рис. 7.16:

· ПоступлениеМатериалов.Дата

· ПоступлениеМатериалов.Номер

· ПоступлениеМатериалов.ОтветственныйСотрудник

· ПоступлениеМатериалов.СтоимостьМатериалов

Рис. 7.16. Конструктор запроса, вкладка Таблицы и поля

Теперь нам нужно задать условие отбора. Для этого перейдем на вкладку Условия. Здесь нам нужно перенести поле СтоимостьМатериалов из области Поля в область задания условий. После этого (рис. 7.17) нужно выбрать условие выбором их списка (мы выбрали условие "больше") и заменить выражение СтоимостьМатериалов на число 2000.

Рис. 7.17. Конструктор запроса, вкладка Таблицы и поля

Здесь нас подстерегает одна особенность конструктора запросов. Дело в том, что и выражение СтоимостьМатериалов, и число 2000 он будет воспринимать как имя переменной, которая должна быть передана в запрос до его исполнения. Нам же нужно, чтобы 2000 было воспринято именно как число, а не как имя переменной. Для того, чтобы это сделать, установим галочку в поле Произвольное. Это приведет к тому, что поле Условие превратится в одну строку, в которой будет написано следующее:

ПоступлениеМатериалов.СтоимостьМатериалов > &2000

Символ & нам не нужен - он, как раз, и даст понять системе, что 2000 - это переменная. Поэтому мы удалим его вручную, и, в итоге, получим следующий вид вкладки Условие, рис. 7.18.

Рис. 7.18. Конструктор запроса, вкладка Условия

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

Рис. 7.19. Конструктор запроса, вкладка Порядок

Работа с Конструктором запроса завершена. Нажмем на кнопку ОК, текст запроса попадет в поле обработки Консоль запросов, нажмем на кнопку Выполнить и убедимся в том, что запрос выполнен правильно, рис. 7.20.

Рис. 7.20. Текст запроса и результат выполнения запроса

Вот, какой текст сгенерировал Конструктор запроса:

ВЫБРАТЬ

ПоступлениеМатериалов.Дата,

ПоступлениеМатериалов.Номер,

ПоступлениеМатериалов.ОтветственныйСотрудник,

ПоступлениеМатериалов.СтоимостьМатериалов КАК СтоимостьМатериалов

ИЗ

Документ.ПоступлениеМатериалов КАК ПоступлениеМатериалов

ГДЕ

ПоступлениеМатериалов.СтоимостьМатериалов > 2000

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

СтоимостьМатериалов

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

Существуют следующие виды соединения таблиц:

1. Левое внешнее соединение;

2. Правое внешнее соединение;

3. Полное внешнее соединение;

4. Внутреннее соединение;

Рассмотрим эти виды соединения таблиц на примере.

В нашей конфигурации есть два взаимосвязанных справочника. А именно, речь идет о справочниках Номенклатура и ЕдиницыИзмерения. Элементам справочника Номенклатура могут быть назначены единицы измерения, взятые из справочника ЕдиницыИзмерения. Причем, в справочнике Номенклатура могут существовать элементы, которым не назначена ни одна единица измерения, а в справочнике ЕдиницыИзмерения могут присутствовать элементы, которые не назначены элементам справочника Номенклатура. В таблице 7.1 представлена таблица справочника Номенклатура - наименования номенклатурных позиций и соответствующие им единицы измерения.

Таблица 7.1. Таблица справочника Номенклатура
Номенклатура Единица измерения Группа
Бальзам для волос   ложь
Духи Штука ложь
Завивка Час ложь
Лак для волос Упаковка ложь
Одеколон Упаковка ложь
Парикмахерские услуги   истина
Парфюмерия   истина
Стрижка Час ложь
Уход за волосами   истина

Как видите, Бальзам для волос не имеет установленной единицы измерения, остальным элементам единицы измерения назначены. Группам, естественно, единицы измерения так же не назначены.

В таблице 7.2 вы можете видеть состав справочника ЕдиницыИзмерения.

Таблица 7.2. Таблица справочника ЕдиницыИзмерения
Единица измерения
Килограмм
Метр
Упаковка
Час
Штука

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: