Вложенные запросы
Вложенным называется запрос, который является источником выборки основного запроса. Допускается произвольная вложенность таких запросов.
- Предназначен для предварительной обработке данных, либо для более удобного восприятия.
- Может использоваться в качестве параметра условия В()
- Синтаксис вложенного запроса:
- Прочие сведения о вложенных запросах
- Зачем может потребоваться вложенный запрос в приоритетном порядке:
Синтаксис вложенного запроса:
ВЫБРАТЬ * из (ВЫБРАТЬ 1) КАК ВложенныйЗапрос
ВЫБРАТЬ * ИЗ Справочник.Контрагенты ГДЕ Ссылка В (ВЫБРАТЬсколько с Ссылка ИЗ Справочник.Контрагенты)
ВЫБРАТЬ * ИЗ Справочник.Контрагенты ГДЕ (Ссылка,Наименование) В (ВЫБРАТЬ Ссылка,Наименование ИЗ Справочник.Контрагенты)
- Общее правило — расположение в скобках.
- В качестве источника должен обязательно иметь псевдоним запроса.
- В качестве условия вхождения он должен иметь столько полей сколько значений проверяется (либо будет ошибка «В запросах операции «В» должно выбираться столько полей, сколько операндов имеет левая часть операции»).
В конструкторе вложенный запрос создается на основной вкладке по специальной кнопке:

Иконка у таблицы вложенного запроса отличается от других таблиц:
Прочие сведения о вложенных запросах
Считается, что вложенные запросы менее оптимизированы на скорость, но с появлением платформы 8.3 данный фактор справедлив только для Postgres SQL (возможно особенность конкретной сборки).
В целом, в большинстве случаев, запросы можно переписать на использование временных таблиц, но не для запроса динамического списка управляемого интерфейса (там это запрещено на уровне платформы). Вложенный запрос же использовать в нем допустимо, если он не вызывает дублей ключевых полей (Ссылка).
Если вложенный запрос основной, то основная таблица динамического списка будет пустой, что отключит событийные команды такого списка.
(для примера выше, нельзя будет добавить новый элемент или группу).
Допускается вложенный запрос и при соединениях таблиц.
Например:
ВЫБРАТЬ * ИЗ Справочник.Контрагенты КАК Основная ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ * ИЗ Справочник.Контрагенты ) КАК Вложенный ПО Основная.Ссылка = Вложенный.Ссылка
Примеры выше подобраны в учебных целях: максимально простого синтаксиса, а не для решения какой-либо задачи.
Зачем может потребоваться вложенный запрос в приоритетном порядке:
В случае использования результата агрегатной функции в качестве условия соединения таблиц:
- Для простого отбора можно воспользоваться конструкцией ИМЕЮЩИЕ.
Если же нам необходимо посчитать остаток в рознице + в опте (в торговле) и вывести только, те у которых общий остаток меньше 10, без вложенного запроса невозможно будет обойтись. - Условия в запросах виртуальных таблиц работают лучше и быстрее, если используется В(), вместо обращения через точку:
ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта В(ВЫБРАТЬ ссылка из Справочник.Валюты. ГДЕ Наименование = «Рубль»))
ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта.Наименование = «Рубль»)
Половина денег, которые идут на рекламу, выбрасываются впустую; но как узнать, какая именно половина?
— Уильям Гескет Левер
Полезные сведения о языке запросов 1С 8.х
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для кого-то могут быть полезны.
Итак, начнем. Запрос — это специальный объект в 1С 8.2, который используется для формирования и выполнения запросов к таблицам базы данных в системе. Для выполнения запроса необходимо составить текст запроса, в котором описывается какие таблицы будут использоваться в качестве источников данных запроса, какие нужно выбрать поля, какие применить сортировки и группировки и т.д. Подробнее о запросах можно прочитать в книге «1С 8.2 Руководстве разработчика». Язык запросов 1С 8.2 очень похож синтаксисом на другие SQL языки запросов баз данных, но есть и отличия. Из основных преимуществ встроенного языка запросов стоит отметить разыменование полей, наличие виртуальных таблиц, удобная работа с итогами и нетипизированные поля в запросах. Из недостатков – в качестве выходного поля нельзя использовать запрос, нельзя использовать хранимые процедуры, нельзя преобразовать строку в число.
Приведу сведения и рекомендации по языку запросов по пунктам:
1.Для повышения читабельности запроса и уменьшения количества параметров запроса можно в запросе применять обращение к предопределенным данным конфигурации с помощью литерала ЗНАЧЕНИЕ (ПРЕДСТАВЛЕНИЕЗНАЧЕНИЯ). В качестве представления значений могут использоваться значение перечислений, предопределенные данные справочников, планов видов расчета, планов видов характеристик, планов счетов, пустые ссылки, значения точек маршрута, значения системных перечислений (например, ВидДвиженияНакопления, ВидСчета).
Примеры:
ГДЕ Город = ЗНАЧЕНИЕ(Справочник.Города.Москва)
ГДЕ Город = ЗНАЧЕНИЕ(Справочник.Города.ПустаяСсылка)
ГДЕ ТипТовара = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Услуга)
ГДЕ ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ГДЕ ТочкаМаршрута =
ЗНАЧЕНИЕ(БизнесПроцесс.Согласование.ТочкаМаршрута.Согласие)
Выражение в скобках всегда начинается со слова в единственном числе (Справочник, Перечисление и т.д.), которое соответствует типу предопределенного значения.
2.Автоупорядочивание в запросе может сильно тормозить процесс. Если сортировка не нужна, лучше вообще ее не использовать. Во многих случаях эффективнее записать сортировку через ключевое слово УПОРЯДОЧИТЬ ПО.
3.Нужно следить, чтобы при использовании псевдонимов не появилось неоднозначное поле. Иначе система не поймет к какому объекту надо обращаться.
Пример запроса с неоднозначным полем:
ВЫБРАТЬ
Номенклатура.Ссылка,
ОстаткиТоваровОстатки.КоличествоОстаток
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
ПО ОстаткиТоваровОстатки.Номенклатура = Номенклатура.Ссылка
Нужно исправить псевдоним таблицы, например, так: «Справочник.Номенклатура КАК Номенклатура1», а «Номенклатура.Ссылка» соответственно исправить на «Номенклатура1.Ссылка».
4.Иногда полезно получать представление ссылочных полей с помощью ключевого слова ПРЕДСТАВЛЕНИЕ наряду со ссылкой для того, чтобы не было повторного обращения к базе данных. Это бывает полезно при выводе результата запроса в таблицу.
Пример:
ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕ(Документ.Контрагент) КАК Получатель,
ПРЕДСТАВЛЕНИЕ(Документ.Основание)
ИЗ
Документ.РасходнаяНакладная КАК Документ
5.Использование в запросе ВЫРАЗИТЬ(Поле КАК Тип) позволяет убрать лишние таблицы из соединения с полем составного типа данных. Тем самым ускорить выполнение запроса.
Пример (регистратор — поле с составным типом для физической таблицы регистранакопления ОстаткиТоваров, в запросе выбираются Дата и Номер документов ПоступлениеТоваров, при этом при обращении к реквизитам документа Дата и Номер через Регистратор не происходит множественного соединения таблицы регистра с таблицами документов, являющихся регистраторами для регистра ОстаткиТоваров):
ВЫБРАТЬ РАЗЛИЧНЫЕ [b] ВЫРАЗИТЬ(ОстаткиТоваров.Регистратор КАК Документ.ПоступлениеТоваров).Номер КАК НОМЕРПОСТУПЛЕНИЯ,[/b]
[b]ВЫРАЗИТЬ(ОстаткиТоваров.Регистратор КАК Документ.ПоступлениеТоваров).Дата КАК ДАТАПОСТУПЛЕНИЯ[/b]
[b]ИЗ РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров ГДЕ (ВЫРАЗИТЬ(ОстаткиТоваров.Регистратор КАК Документ.ПоступлениеТоваров) ЕСТЬ НЕ NULL)[/b]
6.Когда в конфигурации 1С есть пользователи, у которых права ограничены на определенные объекты конфигурации, в запросе к таким объектам необходимо использовать ключевое слово РАЗРЕШЕННЫЕ, чтобы запрос выполнился без ошибки (Выбрать Разрешенные . )
7.При объединении таблиц, содержащих вложенные таблицы (например, Документ с табличной частью) бывает полезно ключевое слово ПУСТАЯТАБЛИЦА, когда, например, в одном из документов нет табличной части.
Пример:
ВЫБРАТЬ Ссылка.Номер, ПУСТАЯТАБЛИЦА.(Ном, Тов, Кол) КАК Состав
ИЗ Документ.РасходнаяНакладная
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Ссылка.Номер, Состав.(НомерСтроки, Номенклатура, Количество)
ИЗ Документ.РасходнаяНакладная
8.При работе с соединениями таблиц, содержащих по одной строке, бывает нужно склеить строки таблиц (при этом в обеих таблицах нет такого поля, по которому их можно было соединить). Этого можно добиться, применив конструкцию «ПОЛНОЕ СОЕДИНЕНИЕ Таблица По ИСТИНА». Если в таблицах больше, чем одна строка, то в результате будет количество строк, равное произведению количества строк обеих таблиц. Если в одной таблице О строк, то в результирующей таблице количество строк будет равно количеству строк второй таблицы. Также для соединения таких таблиц можно применять декартово произведение таблиц , при котором в результирующей таблице будут встречаться все комбинации строк из обеих таблиц. Надо помнить, что если в одной из таблиц 0 строк, тогда и декартово произведение будет 0, поэтому полное соединение будет лучше. Вообще вместо полного соединения ПО ИСТИНА можно использовать и любой другой тип соединения, но в таком случае тоже возможна ситуация, когда в результирующей таблице будет 0 строк, даже если в одной из таблиц будет ненулевое количество строк. В случае полного соединения такая ситуация будет только в одном случае, если количество строк в обеих таблицах равно 0. Если знать, что в таблице есть точно хотя бы одна строка, тогда можно использовать и ЛЕВОЕ СОЕДИНЕНИЕ с другой таблицей с условием ПО ИСТИНА.
Пример (правда надуманный, для Полного соединения):
ВЫБРАТЬ
Первые 1
Пол.Ссылка,
К.Контрагент
ИЗ
Перечисление.Пол КАК Пол
ПОЛНОЕ СОЕДИНЕНИЕ (Выбрать Первые 1 Д.Контрагент ИЗ Документ.РеализацияТоваров КАК Д Упорядочить По Д.МоментВремени ) КАК К
ПО (ИСТИНА)
9. Для того чтобы получить уникальные записи по какому-то полю, правильней вместо группировки пользоваться ключевым словом РАЗЛИЧНЫЕ в запросе, потому что такая конструкция намного наглядней и ключевое слово СГРУППИРОВАТЬ ПО имеет более широкое применение и часто используется, если дополнительно надо рассчитать агрегатные функции по группировкам. В некоторых случаях необходимо вывести ограниченное количество строк. Для этого в описании запроса в описании запроса следует указать ключевое слово ПЕРВЫЕ и после него – требуемое количество строк.
Пример для ПЕРВЫЕ:
Выбрать Первые 5
Справочник.Номенклатура.Наименование,
Справочник.Номенклатура.ЗакупочнаяЦена
Упорядочить По
Справочник.Номенклатура.ЗакупочнаяЦена Убыв
Пример для РАЗЛИЧНЫЕ:
Выбрать Различные
Документ.Расходная.Контрагент
10.Агрегатные функции в запросе можно использовать без ключевого слова СГРУППИРОВАТЬ. В таком случае все результаты будут сгруппированы в одну строку.
Пример:
Выбрать
Сумма(Накладная.Сумма) Как Сумма
Из
Документ.РасходнаяНакладная.Состав Как Накладная
11.В запросах в полях выборки можно свободно обращаться к реквизитам полей выборки. Эта возможность называется разыменованием полей выборки. Если источник данных — вложенная таблица (табличная часть документа), то в полях выборки можно обращаться также к полям основной таблицы (например, через поле Ссылка обратиться к полю основной таблицы Контрагент)
Пример:
ВЫБРАТЬ [b] ПоступлениеТоваровИУслугТовары.Номенклатура, ПоступлениеТоваровИУслугТовары.Номенклатура.Код, ПоступлениеТоваровИУслугТовары.Количество КАК Количество, ПоступлениеТоваровИУслугТовары.Ссылка.Контрагент ИЗ Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары ГДЕ ПоступлениеТоваровИУслугТовары.Ссылка = &Ссылка[/b]
Есть одна особенность использования разыменования полей, если в запросе есть группировки. В любых запросах с группировками в списках полей запроса можно свободно обращаться к реквизитам группировочных полей.
Пример:
ВЫБРАТЬ
ПоступлениеТоваровИУслугТовары.Номенклатура,
ПоступлениеТоваровИУслугТовары.Номенклатура.Код,
СУММА(ПоступлениеТоваровИУслугТовары.Количество) КАК Количество,
ПоступлениеТоваровИУслугТовары.Ссылка.Контрагент,
ПоступлениеТоваровИУслугТовары.Ссылка.Дата
ИЗ
Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары
ГДЕ
ПоступлениеТоваровИУслугТовары.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровИУслугТовары.Номенклатура,
ПоступлениеТоваровИУслугТовары.Ссылка
В справке 1С написано, что при наличии группировки, в полях выборки запроса могут участвовать только группировочные поля и агрегатные функции по полям выборки. Есть один исключительный случай, когда агрегатные функции применены к полям вложенной таблицы. В этом случае в списке полей выборки возможны обращения к полям таблицы верхнего уровня, без группировки результатов по этим полям.
Пример:
ВЫБРАТЬ
ПоступлениеТоваровИУслуг.Товары.(СУММА(Количество),Номенклатура),
ПоступлениеТоваровИУслуг.Ссылка,
ПоступлениеТоваровИУслуг.Контрагент
ИЗ
Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровИУслуг.Товары.(Номенклатура)
12. Иногда вместо указания какого-либо поля в группировке полезно в поля выборки запроса включить параметр:
ВЫБРАТЬ ДокТовары.Номенклатура, &Контрагент, &Период, СУММА(ДокТовары.Количество * ДокТовары.К) КАК Количество, СУММА(ДокТовары.Сумма) КАК Сумма ИЗ Документ.Приходная.Товары КАК ДокТовары ГДЕ ДокТовары.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО ДокТовары.Номенклатура
А затем установить параметр в тексте запроса:
Запрос.УстановитьПараметр(«&Контрагент», ВыбКонтрагент);
Запрос.УстановитьПараметр(«&Период», Дата);
13. В универсальных запросах параметры можно использовать в описании источников данных запроса, в условиях ГДЕ, в условиях соединения таблиц и параметрах виртуальных таблиц. Существует два приема для создания универсальных запросов:
А) с помощью механизма конкатенации строк, добавляя в текст запроса переменные;
Пример1:
ТипУпорядочивания = ?(НЕКАЯПЕРЕМЕННАЯ,»»,»УБЫВ»);
Запрос.Текст= «Выбрать . Упорядочить ПО Поле1 » + ТипУпорядочивания + «. «;
Пример2:
Запрос.Текст = «Выбрать Поле1. «;
Если НЕКАЯПЕРЕМЕННАЯ = 1 Тогда
Запрос.Текст = Запрос.Текст + «,Поле2 . «;
КонецЕсли;
Б)использовать параметры в различных частях запроса (например, в секции источников данных запроса), а затем метод встроенного языка — СТРЗАМЕНИТЬ(). При проектировании универсальных запросов полезно обращение к свойству объектов МЕТАДАННЫЕ(), с помощью которого можно определить название таблицы для какой-то ссылки (например, для документа будет примерно так — Ссылка.МЕТАДАННЫЕ().ИМЯ), переданной через параметр в некую универсальную процедуру.
Пример:
Выбрать
ДокТЧ.Номенклатура,
.
ИЗ
&НекийДокТЧ КАК ДокТЧ
А затем установить параметр в тексте запроса
Запрос.Текст = СтрЗаменить(Запрос.Текст, «&НекийДокТЧ», «Документ.»+Ссылка.Метаданные().Имя+».Товары»);
Создание простого запроса на выборку
Если вам нужно выбрать определенные данные из одного или нескольких источников, можно воспользоваться запросом на выборку. Запрос на выборку позволяет получить только необходимые сведения, а также помогает объединять информацию из нескольких источников. В качестве источников данных для запросов на выборку можно использовать таблицы и другие такие же запросы. В этом разделе вкратце рассматриваются запросы на выборку и предлагаются пошаговые инструкции по их созданию с помощью Мастера запросов либо в Конструктор.
Если вы хотите узнать больше о принципах работы запросов на примере базы данных Northwind, ознакомьтесь со статьей Общие сведения о запросах.
В этой статье
- Overview
- Создание запроса SELECT с помощью мастера запросов
- Создание запроса в режиме конструктора
Общие сведения
Когда возникает потребность в каких-то данных, редко бывает необходимо все содержимое одной таблицы. Например, если вам нужна информация из таблицы контактов, как правило, речь идет о конкретной записи или только о номере телефона. Иногда бывает необходимо объединить данные сразу из нескольких таблиц, например совместить информацию о клиентах со сведениями о заказчиках. Для выбора необходимых данных используются запросы на выборку.
Запрос на выборки — это объект базы данных, в который в Режим таблицы. Запрос не хранит данные, а отображает данные, хранимые в таблицах. Запрос может показывать данные из одной или нескольких таблиц, из других запросов или из их сочетания.
Преимущества запросов
Запрос позволяет выполнять перечисленные ниже задачи.
-
Просматривать значения только из полей, которые вас интересуют. При открытии таблицы отображаются все поля. Вы можете сохранить запрос, который выдает лишь некоторые из них.
Примечание: Запрос только возвращает данные, но не сохраняет их. При сохранении запроса вы не сохраняете копию соответствующих данных.
Основные этапы создания запроса на выборку
Вы можете создать запрос на выборку с помощью мастера или конструктора запросов. Некоторые элементы недоступны в мастере, однако их можно добавить позже из конструктора. Хотя это разные способы, основные этапы аналогичны.
- Выберите таблицы или запросы, которые хотите использовать в качестве источников данных.
- Укажите поля из источников данных, которые хотите включить в результаты.
- Также можно задать условия, которые ограничивают набор возвращаемых запросов записей.
Создав запрос на выборку, запустите его, чтобы посмотреть результаты. Чтобы выполнить запрос на выборку, откройте его в режиме таблицы. Сохранив запрос, вы сможете использовать его позже (например, в качестве источника данных для формы, отчета или другого запроса).
Создание запроса на выборку с помощью мастера запросов
Мастер позволяет автоматически создать запрос на выборку. При использовании мастера вы не полностью контролируете все детали процесса, однако таким способом запрос обычно создается быстрее. Кроме того, мастер иногда обнаруживает в запросе простые ошибки и предлагает выбрать другое действие.
Подготовка
Если вы используете поля из источников данных, которые не связаны между собой, мастер запросов предлагает создать между ними отношения. Он откроет окно отношений, однако если вы внесете какие-то изменения, то вам потребуется перезапустить мастер. Таким образом, перед запуском мастера имеет смысл сразу создать все отношения, которые потребуются вашему запросу.
Дополнительную информацию о создании отношений между таблицами можно найти в статье Руководство по связям между таблицами.
Использование мастера запросов
- На вкладке Создание в группе Запросы нажмите кнопку Мастер запросов.

- В диалоговом окне Новый запрос выберите пункт Простой запрос и нажмите кнопку ОК.
- Теперь добавьте поля. Вы можете добавить до 255 полей из 32 таблиц или запросов. Для каждого поля выполните два указанных ниже действия.
- В разделе Таблицы и запросы щелкните таблицу или запрос, содержащие поле.
- В разделе Доступные поля дважды щелкните поле, чтобы добавить его в список Выбранные поля. Если вы хотите добавить в запрос все поля, нажмите кнопку с двумя стрелками вправо (>>).
- Добавив в запрос все необходимые поля, нажмите кнопку Далее.

- Если вы не добавили ни одного числового поля (поля, содержащего числовые данные), перейдите к действию 9. При добавлении числового поля вам потребуется выбрать, что именно вернет запрос: подробности или итоговые данные. Выполните одно из указанных ниже действий.
- Если вы хотите просмотреть отдельные записи, выберите пункт подробный и нажмите кнопку Далее. Перейдите к действию 9.
- Если вам нужны итоговые числовые данные, например средние значения, выберите пункт итоговый и нажмите кнопку Итоги.

- В диалоговом окне Итоги укажите необходимые поля и типы итоговых данных. В списке будут доступны только числовые поля. Для каждого числового поля выберите одну из перечисленных ниже функций.
- Sum — запрос вернет сумму всех значений, указанных в поле.
- Avg — запрос вернет среднее значение поля.
- Min — запрос вернет минимальное значение, указанное в поле.
- Max — запрос вернет максимальное значение, указанное в поле.

- Если вы хотите, чтобы в результатах запроса отобразилось число записей в источнике данных, установите соответствующий флажок Подсчет числа записей в (название источника данных).
- Нажмите ОК, чтобы закрыть диалоговое окно Итоги.
- Если вы не добавили в запрос ни одного поля даты и времени, перейдите к действию 9. Если вы добавили в запрос поля даты и времени, мастер запросов предложит вам выбрать способ группировки значений даты. Предположим, вы добавили в запрос числовое поле («Цена») и поле даты и времени («Время_транзакции»), а затем в диалоговом окне Итоги указали, что хотите отобразить среднее значение по числовому полю «Цена». Поскольку вы добавили поле даты и времени, вы можете подсчитать итоговые величины для каждого уникального значения даты и времени, например для каждого месяца, квартала или года.
Выберите период, который хотите использовать для группировки значений даты и времени, а затем нажмите кнопку Далее.
Примечание: В режиме конструктора для группировки значений по периодам можно использовать выражения, однако в мастере доступны только указанные здесь варианты.
Создание запроса в режиме конструктора
В режиме конструктора можно вручную создать запрос на выборку. В этом режиме вы полнее контролируете процесс создания запроса, однако здесь легче допустить ошибку и необходимо больше времени, чем в мастере.
Создание запроса
- Действие 1. Добавьте источники данных
- Действие 2. Соедините связанные источники данных
- Действие 3. Добавьте выводимые поля
- Действие 4. Укажите условия
- Действие 5. Рассчитайте итоговые значения
- Действие 6. Просмотрите результаты
Действие 1. Добавьте источники данных
При использовании конструктора для добавления источников данных их источники и поля добавляются в отдельных шагах. Однако вы всегда можете добавить дополнительные источники позже.
- На вкладке Создание в группе Другое нажмите кнопку Конструктор запросов.

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

Автоматическое соединение
Если между добавляемыми источниками данных уже заданы отношения, они автоматически добавляются в запрос в качестве соединений. Соединения определяют, как именно следует объединять данные из связанных источников. Access также автоматически создает соединение между двумя таблицами, если они содержат поля с совместимыми типами данных и одно из них — первичный ключ.
Вы можете настроить соединения, добавленные приложением Access. Access выбирает тип создаваемого соединения на основе отношения, которое ему соответствует. Если Access создает соединение, но для него не определено отношение, Access добавляет внутреннее соединение.
Если приложение Access при добавлении источников данных автоматически создало соединения правильных типов, вы можете перейти к действию 3 (добавление выводимых полей).
Повторное использование одного источника данных
В некоторых случаях необходимо соединить две копии одной и той же таблицы или запроса, называемые запросом самосоединение, которые объединяют записи из одной таблицы при совпадении значений в соединитьые поля. Например, допустим, что у вас есть таблица «Сотрудники», в которой в поле «ОтчетЫВ» для записи каждого сотрудника вместо имени отображается его имя руководителя. Вместо этого вы можете самостоятельно отобразить имя руководителя в записях каждого сотрудника.
При добавлении источника данных во второй раз Access присвоит имени второго экземпляра окончание «_1». Например, при повторном добавлении таблицы «Сотрудники» ее второй экземпляр будет называться «Сотрудники_1».
Действие 2. Соедините связанные источники данных
Если у источников данных, которые вы добавляете в запрос, уже есть связи, Access автоматически создает внутреннее присоединение для каждой связи. Если целостность данных, access также отображает «1» над линией связи, чтобы показать, какая таблица находится на стороне «один» отношение «один-ко-многим», и символ бесконечности(∞),чтобы показать, какая таблица находится на стороне «многие».
Если вы добавили в запрос другие запросы и не создали между ними отношения, Access не создает автоматических соединений ни между ними, ни между запросами и таблицами, которые не связаны между собой. Если Access не создает соединения при добавлении источников данных, как правило, их следует создать вручную. Источники данных, которые не соединены с другими источниками, могут привести к проблемам в результатах запроса.
Кроме того, можно сменить тип соединения с внутреннего на внешнее соединение, чтобы запрос включал больше записей.
Добавление соединения

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

- Дважды щелкните соединение, которое требуется изменить. Откроется диалоговое окно Параметры соединения.
- Ознакомьтесь с тремя вариантами в диалоговом окне Параметры соединения.
- Выберите нужный вариант и нажмите кнопку ОК.
После создания соединений можно добавить выводимые поля: они будут содержать данные, которые должны отображаться в результатах.
Действие 3. Добавьте выводимые поля
Вы можете легко добавить поле из любого источника данных, добавленного в действии 1.
-
Для этого перетащите поле из источника в верхней области окна конструктора запросов вниз в строку Поле бланка запроса (в нижней части окна конструктора). При добавлении поля таким образом Access автоматически заполняет строку Таблица в таблице конструктора в соответствии с источником данных поля.
Совет: Чтобы быстро добавить все поля в строку «Поле» бланка запроса, дважды щелкните имя таблицы или запроса в верхней области, чтобы выделить все поля в нем, а затем перетащите их все сразу вниз на бланк.
Использование выражения в качестве выводимого поля
Вы можете использовать выражение в качестве выводимого поля для вычислений или создания результатов запроса с помощью функции. В выражениях могут использоваться данные из любых источников запроса, а также функции, например Format или InStr, константы и арифметические операторы.
- В пустом столбце таблицы запроса щелкните строку Поле правой кнопкой мыши и выберите в контекстном меню пункт Масштаб.
- В поле Масштаб введите или вставьте необходимое выражение. Перед выражением введите имя, которое хотите использовать для результата выражения, а после него — двоеточие. Например, чтобы обозначить результат выражения как «Последнее обновление», введите перед ним фразу Последнее обновление:.
Примечание: С помощью выражений можно выполнять самые разные задачи. Их подробное рассмотрение выходит за рамки этой статьи. Дополнительные сведения о создании выражений см. в статье Создание выражений.
Действие 4. Укажите условия
Этот этап является необязательным.
С помощью условий можно ограничить количество записей, которые возвращает запрос, выбирая только те из них, значения полей в которых отвечают заданным критериям.
Определение условий для выводимого поля
- В таблице конструктора запросов в строке Условие отбора поля, значения в котором вы хотите отфильтровать, введите выражение, которому должны удовлетворять значения в поле для включения в результат. Например, чтобы включить в запрос только записи, в которых в поле «Город» указано «Рязань», введите Рязань в строке Условие отбора под этим полем. Различные примеры выражений условий для запросов можно найти в статье Примеры условий запроса.
- Укажите альтернативные условия в строке или под строкой Условие отбора. Когда указаны альтернативные условия, запись включается в результаты запроса, если значение соответствующего поля удовлетворяет любому из указанных условий.
Условия для нескольких полей
Условия можно задать для нескольких полей. В этом случае для включения записи в результаты должны выполняться все условия в соответствующей строке Условия отбора либо Или.
Настройка условий на основе поля, которое не включается в вывод
Вы можете добавить в запрос поле, но не включать его значения в выводимые результаты. Это позволяет использовать содержимое поля для ограничения результатов, но при этом не отображать его.
- Добавьте поле в таблицу запроса.
- Снимите для него флажок в строке Показывать.
- Задайте условия, как для выводимого поля.
Действие 5. Рассчитайте итоговые значения
Этот этап является необязательным.
Вы также можете вычислить итоговые значения для числовых данных. Например, может потребоваться узнать среднюю цену или общий объем продаж.
Для расчета итоговых значений в запросе используется строка Итого. По умолчанию строка Итого не отображается в режиме конструктора.
- Когда запрос открыт в конструкторе, на вкладке «Конструктор» в группе «Показать или скрыть» нажмите кнопку Итоги. Access отобразит строку Итого на бланке запроса.
- Для каждого необходимого поля в строке Итого выберите нужную функцию. Набор доступных функций зависит от типа данных в поле. Дополнительные сведения о функциях строки «Итого» в запросах см. в статье Суммирование или подсчет значений в таблице с помощью строки «Итого».
Действие 6. Просмотрите результаты
Чтобы увидеть результаты запроса, на вкладке «Конструктор» нажмите кнопку Выполнить. Access отобразит результаты запроса в режиме таблицы.
Чтобы вернуться в режим конструктора и внести в запрос изменения, щелкните Главная > Вид > Конструктор.
Настраивайте поля, выражения или условия и повторно выполняйте запрос, пока он не будет возвращать нужные данные.
Разбор тестирования 1С:Профессионал и PMP
Конструктор запросов — это инструмент разработки, позволяющий выбирать определенные данные для их программной обработки, либо использования в отчетах, либо в ограничениях прав доступа. Конструктор запросов может быть вызван из контекстного меню в нужном месте модуля:
Также конструктор может работать и в режиме Предприятие, в виде обработки Консоль запросов.
Некоторые концептуальные вопросы о конструкторе разобраны тут: https://about1cerp.blogspot.ru/2018/01/blog-post_46.html.
Построение запроса начинается со спецификации источников данных; для этого предназначена закладка Поля. В качестве источников данных могут выступать:
- физические таблицы базы данных
- виртуальные таблицы базы данных
- вложенные запросы
- временные таблица
Вопрос 07.03 экзамена 1С:Профессионал по платформе. Каким из вышеперечисленных способов можно воспользоваться, чтобы в разделе «Поля» конструктора запросов появились код и наименование справочника?
- Сначала заполнить раздел «Таблицы», а потом, выбирая нужные объекты из этого раздела, перенести их в раздел «Поля», используя двойной клик левой клавиши мыши
- Не заполняя раздел «Таблицы», сразу выбирать нужные объекты из таблиц — источников данных раздела «База данных», перенося их в раздел «Поля», используя технологию Drag & Drop. Раздел «Таблицы» заполняется автоматически
- Сначала заполнить раздел «Таблицы», а потом, выбирая нужные объекты из этого раздела, перенести их в раздел «Поля», используя кнопки на форме «>», «>>»
- Верны ответы 1 и 3
- Верны ответы 1, 2 и 3
Правильный ответ пятый, все варианты тут доступны.
Вопрос 07.05 экзамена 1С:Профессионал по платформе. Можно ли при выборе таблицы-источника в раздел «Таблицы» конструктора запросов задавать для нее новое имя (псевдоним)?
- Да, можно
- Да, можно, но только если в качестве источника данных выступает вложенный запрос
- Да, можно, но только если в качестве источника данных выступает виртуальная таблица
- Верны ответы 1 и 2
- Верны ответы 1 и 3
Правильный ответ первый (рис.), причем тип таблицы-источника неважен.
Вопрос 07.06 экзамена 1С:Профессионал по платформе. Вложенный запрос может использоваться:- В качестве таблицы-источника данных
- В качестве операнда операций сравнения «В» или «НЕ В» при задании параметров виртуальной таблицы
- В качестве операнда операций сравнения «В» или «НЕ В» при задании конструкции языка запросов «ГДЕ»
- Верны ответы 1, 2 и 3
Правильный ответ четвертый. Источником данных запрос точно может быть; о групповых операторах вхождения разобрано в статье на ИТС. Выдержка:
Групповой оператор вхожденияОператор вхождения имеет вид:- списка выражений;
- параметра, значением которого является коллекция значений;
- вложенного запроса.
Вложенный запрос должен определять выборку из N колонок.
Групповой оператор вхождения принимает значение «Истина», если запись (, . ) совпадает с одной из записей выборки, определяемой вложенным запросом. Например, пусть левым операндом является список:(1, 2, 3)
Если результатом вложенного запроса является выборка2, 2, 3
то результатом группового оператора вхождения будет «Ложь», а если результатом вложенного запроса является выборка:2, 2, 3
то результатом группового оператора вхождения будет «Истина».
Наряду с оператором вхождения («В») в языке запросов предусмотрен оператор не вхождения («НЕ В»), результатом которого является отрицание оператора «В» с такими же операндами. Все, сказанное про особенности выполнения оператора «В», относится и к оператору «НЕ В».
