Если в конструкторе запроса при использовании нескольких таблиц очистить закладку связи

Обновлено: 25.04.2024

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

Выберите нужное действие

Уточнение данных в запросе с помощью данных из связанной таблицы

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

Использование мастера запросов для построения запроса на основе главной и связанной таблицы

Убедитесь, что для таблиц задано отношение в окно отношений.

На вкладке Работа с базами данных в группе Показать или скрыть выберите пункт Отношения.

На вкладке Конструктор в группе Связи нажмите кнопку Все связи.

Выберите таблицы, которые нужно связать.

Если таблицы отображаются в окне схемы данных, убедитесь, что отношение между ними уже установлено.

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

Если таблицы не отображаются в окне схемы данных, следует добавить их.

На вкладке Конструктор в группе Показать или скрыть нажмите кнопку Имена таблиц.

Дважды щелкните каждую из таблиц, которые вы хотите отобразить, а затем нажмите кнопку Закрыть.

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

Примечание: Создать отношение между полем с типом Тип данных "Счетчик" и полем, имеющим тип данных Числовой тип данных, можно в том случае, если это поле имеет размер "длинное целое". Это часто бывает так при создании отношение "один-ко-многим".

Откроется диалоговое окно Изменение связей.

Дополнительные сведения о параметрах, используемых при создании отношения, см. в статье Создание, изменение и удаление отношения.

Закройте окно схемы данных.

На вкладке Создание в группе Запросы нажмите кнопку Мастер запросов.

В диалоговом окне Новый запрос выберите пункт Простой запрос и нажмите кнопку ОК.

В поле со списком Таблицы и запросы выберите таблицу, содержащую основные сведения, которые вы хотите включить в запрос.

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

В поле со списком Таблицы и запросы выберите таблицу, содержащую дополнительные сведения, с помощью которых вы хотите уточнить результаты запроса.

Добавьте поля, которые следует использовать для уточнения результатов запроса, в список Выбранные поля и нажмите кнопку Далее.

В группе Выберите подробный или итоговый отчет выберите вариант Подробный или Итоговый.

Если не требуется использовать в запросе какие-либо агрегатные функции (Sum, Avg, Min, Max, Count, StDev или Var), выберите подробный запрос. В противном случае выберите вариант "Сводка". Выбрав параметры, нажмите кнопку Далее.

Пример на основе базы данных "Борей"

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

Примечание: Этот пример подразумевает изменение учебной базы данных "Борей". Рекомендуем сделать ее резервную копию и выполнять инструкции, используя резервную копию.

Построение запроса с помощью мастера запросов

Откройте учебную базу данных "Борей". Закройте форму входа.

На вкладке Создание в группе Запросы нажмите кнопку Мастер запросов.

В диалоговом окне Новый запрос выберите пункт Простой запрос и нажмите кнопку ОК.

В поле со списком Таблицы и запросы выберите пункт Таблица: Заказы.

В списке Доступные поля дважды щелкните пункт ИД_заказа, чтобы переместить это поле в список Выбранные поля. Дважды щелкните пункт Цена доставки, чтобы переместить это поле в список Выбранные поля.

В поле со списком Таблицы и запросы выберите пункт Таблица: Сотрудники.

Так как вы создаете список всех заказов, следует использовать подробный запрос. Если нужно суммировать стоимость доставки заказов, выполненных сотрудником, или применить другую агрегатную функцию, следует использовать итоговый запрос. Выберите вариант Подробный (вывод каждого поля каждой записи) и нажмите кнопку Далее.

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

Объединение данных в двух таблицах с помощью их связей с третьей таблицей

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

Создание запроса на выборку с использованием таблиц, связанных отношением "многие-ко-многим"

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

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

Все три таблицы появятся в рабочей области конструктора запросов, связанные по соответствующим полям.

Дважды щелкните поля, которые вы хотите использовать в запросе. Каждое поле появится в бланк запроса.

В бланке запроса укажите условия для полей в строке Условия отбора. Чтобы поле, по которому задаются условия, не отображалось в результатах запроса, снимите флажок в строке Показать для него.

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

На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

Access выведет результаты запроса в Режим таблицы.

Пример на основе базы данных "Борей"

Примечание: Этот пример подразумевает изменение учебной базы данных "Борей". Рекомендуем сделать ее резервную копию и выполнять инструкции, используя резервную копию.

Предположим, что у вас появилась новая возможность: поставщик из Рио-де-Жанейро нашел ваш веб-сайт и хочет с вами сотрудничать. Однако он работает только в Рио-де-Жанейро и Сан-Паулу. Компания поставляет все интересующие вас категории пищевых продуктов. Являясь довольно крупным предприятием, поставщик хочет, чтобы вы гарантировали достаточно большой рынок сбыта, который обеспечил бы ему годовые продажи объемом не менее 20 000 бразильских реалов (около 9 300 долларов США). Можете ли вы обеспечить требуемый рынок сбыта?

Данные, необходимые для ответа на этот вопрос, находятся в двух местах: в таблице "Клиенты" и в таблице "Сведения о заказе". Эти таблицы связаны друг с другом через таблицу "Заказы". Отношения между этими таблицами уже заданы. В таблице "Заказы" для каждого заказа может быть указан только один клиент, связанный с таблицей "Клиенты" по полю "ИДКлиента". Каждая запись в таблице "Сведения о заказе" связана только с одним заказом в таблице "Заказы" по полю "ИД_заказа". Таким образом, у каждого клиента может быть множество заказов, для каждого из которых есть несколько записей со сведениями.

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

Открытие запроса в Конструкторе

Откройте базу данных "Борей". Закройте форму входа.

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

Дважды щелкните "Клиенты","Заказы"и выберите"Сведения о заказе".

Все три таблицы появятся в рабочей области конструктора запросов.

В таблице "Клиенты" дважды щелкните поле "Город", чтобы добавить его в бланк запроса.

В бланке запроса в строке Условие отбора столбца Город введите In ("Рио-де-Жанейро","Сан Паулу). Это позволяет включить в запрос только записи о заказах клиентов из этих городов.

В таблице "Сведения о заказе" дважды щелкните поля "ДатаИсполнения" и "Цена".

Поля добавляются в бланк запроса.

В столбце бланка запроса ДатаИсполнения выберите строку Поле. Замените [ДатаИсполнения] на Год: Format([ДатаИсполнения],"yyyy"). При этом будет создан псевдоним поля (Год), позволяющий использовать только значение года из даты, указанной в поле "ДатаИсполнения".

В столбце бланка запроса Цена выберите строку Поле. Замените [Цена] на Продажи: [Сведения о заказе].[Цена]*[Количество]-[Сведения о заказе].[Цена]*[Количество]*[Скидка]. При этом будет создан псевдоним поля (Продажи), вычисляющий сумму продаж для каждой записи.

На вкладке Конструктор в группе Тип запроса щелкните элемент Перекрестная таблица.

В бланке запроса появятся две новые строки: Итоги и Перекрестная таблица.

В столбце бланка запроса Город щелкните строку Перекрестная таблица, а затем щелкните Заголовки строк.

Названия городов будут использоваться в качестве заголовков строк (т. е. запрос будет возвращать одну строку для каждого города).

В столбце Год щелкните строку Перекрестная таблица, а затем щелкните Заголовки столбцов.

Значения годов будут использоваться в качестве заголовков столбцов (т. е. запрос будет возвращать один столбец для каждого года).

В столбце Продажи щелкните строку Перекрестная таблица, а затем щелкните элемент Значение.

Значения продаж будут отображаться на пересечениях строк и столбцов (т. е. запрос будет возвращать одно значение продаж для каждого сочетания города и года).

В столбце Продажи щелкните строку Итоги, а затем щелкните элемент Sum.

Запрос будет суммировать все значения столбца.

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

На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

Теперь у вас есть запрос, возвращающий общие годовые продажи по Рио-де-Жанейро и Сан-Паулу.

Просмотр всех записей из двух похожих таблиц

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

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

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

Чтобы просмотреть все записи из двух таблиц с одинаковой структурой, используйте запрос на объединение.

Запросы на объединение невозможно отобразить в Конструкторе. Они создаются с помощью команд SQL, которые нужно вводить на вкладке объекта в режим SQL.

Создание запроса на объединение двух таблиц

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

На вкладке Конструктор в группе Тип запроса нажмите кнопку Объединение.

Запрос переключится из Конструктора в режим SQL. На данном этапе вкладка объекта в режиме SQL будет пуста.

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

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

Если вы хотите указать условие для поля первой таблицы, введите WHERE, имя поля, оператор сравнения (обычно знак равенства =) и условие. Можно добавлять дополнительные условия к концу предложения WHERE, используя ключевое слово AND и такой же синтаксис, как и для первого условия (например, WHERE [Уровень]="100" AND [Часов]>2). После завершения ввода условий нажмите клавишу ВВОД.

Введите слово UNION и нажмите клавишу ВВОД.

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

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

Если вы хотите, добавьте предложение WHERE, как описано в шаге 6.

Введите точку с запятой (;), чтобы обозначить конец запроса.

На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

На данной странице задавайте вопросы по материалам и практическому заданию четвертого модуля курса «Разработка и оптимизация запросов в 1С:Предприятие 8.3».

Практические задания

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

Комментарии / обсуждение (379):

Добрый день!
Конструкция [ ВЫБРАТЬ 1 КАК Поле1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ] дает 3 записи.
Конструкция [ ВЫБРАТЬ 1 КАК Поле1 ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ] дает 2 записи.
НО! Конструкция [ ВЫБРАТЬ 1 КАК Поле1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ] дает только 1 запись.
Исходя из этого, правильно ли думать, что запросы в “движке” объединяются поочередно, и, если слово “ВСЕ” отсутствует, то над промежуточным результатом проводиться операция убора дублей, и именно этим обусловлено то, что в последнем случае не возвращается 2 записи?


(текст комментария доступен только участникам Мастер-группы)

Добрый день. А если при объединении запросов поставить галку “без дублей” на первый запрос (как на скриншоте), это повлияет на что-нибудь?



(текст комментария доступен только участникам Мастер-группы)

Добрый вечер! Тождественны ли понятия “Подзапрос” и “Вложенный запрос”? Если нет, то в чем разница?


(текст комментария доступен только участникам Мастер-группы)

Добрый вечер! Подскажите, можно ли использовать в конструкции [ Поле В ( &Парам1, &Парам2) ] в параметрах массивы или списки значений, то-есть отобрать по значениям из набора массивов, например, или скомбинировать – отобрать по массиву строк и паре строковых значений, т.е. [ Поле В ( &Массив, &Строка1, &Строка2) ]?


(текст комментария доступен только участникам Мастер-группы)

1) к уроку 4.6
При внутреннем соединении двух таблиц где лучше накладывать условие: в ГДЕ или в ПО .
или лучше сначала положить результат отбора с условием в первый пакет запроса, а вторым уже соединять?
Как вы расставите запросы по производительности и почему?

Выбрать
Таблица1.Артикул,
Таблица2.Артикул
ИЗ Таблица1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2
ПО Таблица2.Код = Таблица1.Код
и Таблица1.Наименование ПОДОБНО %Привет%

Выбрать
Таблица1.Артикул,
Таблица2.Артикул
ИЗ Таблица1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2
ПО Таблица2.Код = Таблица1.Код
ГДЕ
Таблица1.Наименование ПОДОБНО %Привет%

Выбрать
Таблица1.Артикул,
Таблица1.Код
ИЗ Таблица1
ГДЕ
Таблица1.Наименование ПОДОБНО %Привет%
;
Выбрать
Таблица1.Артикул,
Таблица2.Артикул
ИЗ Таблица1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2
ПО Таблица2.Код = Таблица1.Код

Конструктор запросов в 1С 8.3 и 8.2 — мощнейший инструмент разработки. Он позволяет составить текст запроса при помощи специальной визуальной среды. Таким образом, чтобы создать запрос 1с не обязательно знать встроенный язык запросов, достаточно ориентироваться в не сложном и интуитивно понятном интерфейсе конструктора.

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

Для того чтобы вызвать конструктор запросов 1с 8 в программном коде необходимо:

  • Создать новый запрос
  • Задать пустую строку текста запроса
  • Поставить курсор мышки между кавычками, нажать правую кнопку мыши. В открывшемся контекстном меню выбрать пункт Конструктор запроса и ответить Да на вопрос о создании нового запроса. Если текст запроса уже записан, то необходимо щелкнуть на любом месте внутри него и вызвать конструктор;

Рассмотрим на небольших примерах с возрастающей сложностью все основные вкладки конструктора запросов. Такой подход позволит начинающему программисту 1с более эффективно изучить конструктор и все его возможности. Для примеров будем использовать конфигурацию Бухгалтерия 3.0.

Урок №1. Конструктор запросов — простейший пример использования.

Задача: написать запрос к справочнику номенклатура, выбрать всю номенклатуру справочника.

Новые вкладки: Таблицы и поля.

Новые механизмы: просмотр и редактирование текста запроса при помощи кнопки «Запрос».

Для начала создания запроса создадим новый запрос и вызовем конструктор (как это делается написано несколькими абзацами выше). После этого откроется окно конструктора на вкладке Таблицы и поля.

Теоретическая часть урока №1

Вкладка Таблицы и поля состоит из трех разделов:

База данных. В данном разделе представлены все таблицы базы данных, которые можно использовать для построения запроса;

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

  • Либо дважды щелкнуть по таблице;
  • Либо воспользоваться кнопками «>» или «>>».

Над разделом Таблицы присутствует ряд кнопок. Про большинство из них будет подробнее рассказано в следующих уроках. А пока дам только краткие пояснения.

  • Создать вложенный запрос (красная линия). Предназначена для создания нового вложенного запроса;
  • Создать описание временной таблицы (желтая линия). Позволяет задать имя временной таблицы, которая расположена вне данного запроса, также можно использовать для передачи в запрос таблицы значений;
  • Изменить текущий элемент (зеленая линия). Позволяет перейти в выделенный вложенный запрос, временную таблицу или описание временной таблицы;
  • Удалить текущий элемент (голубая линия). Удаляет выделенную таблицу из выбранных таблиц;
  • Заменить таблицу (синяя линия). Открывает диалог замены выделенной таблицы. Полезно, если вы неверно выбрали виртуальную таблицу регистра, так как происходит позиционирование на текущей выбранной таблице в списке.
  • Параметры виртуальной таблицы (фиолетовая линия). Открывает параметры виртуальной таблицы регистра.

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

  • Либо дважды щелкнуть по полю;
  • Либо воспользоваться кнопками «>» или «>>»;
  • Также можно добавить новое поле самостоятельно, используя произвольное выражение из полей выбранных таблиц и функций языка запросов.

Над разделом Поля присутствует ряд кнопок. Про создание полей при помощи произвольных выражений будет подробнее рассказано в следующих уроках. А пока дам только краткие пояснения.

  • Добавить (зеленая линия). Предназначена для добавления нового поля при помощи редактора произвольных выражений;
  • Изменить текущий элемент (красная линия). Позволяет изменить выделенное поле при помощи редактора;
  • Удалить текущий (синяя линия). Удаляет выделенное поле из списка.

Практическая часть урока №1

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

Приступим к созданию запроса по номенклатуре:

  • Создадим новый запрос и откроем конструктор методом указанным в начале урока;
  • В разделе База данных, откроем ветку Справочники и найдем там справочник Номенклатура;
  • Выделим его и при помощи кнопки «>» перенесем в раздел Таблицы;
  • В разделе Таблицы раскроем справочник номенклатура при помощи значка «+»;
  • В раскрывшемся списке полей найдем поле Ссылка и перенесем его в раздел Поля при помощи кнопки «>»
  • Запрос по номенклатуре готов, нажимаем кнопку «ОК» в нижней части окна конструктора.

В итоге у нас получится запрос со следующим текстом:

В конструкторе также можно посмотреть текст запроса, который готов у вас на данном этапе написания. Для этого в нижней части окна есть специальная кнопка Запрос. После ее нажатия откроется окно просмотра / редактирования текста запроса. Для того чтобы вручную изменить запрос необходимо:

Язык запросов предоставляет широкие возможности по построчному соединению нескольких таблиц. Соединение может быть безусловным и по ключу, то есть по заданному условию связи.
В случае безусловного соединения, в конструкторе запросов достаточно определить выбираемые таблицы, не указывая, по каким полям они будут связаны (то есть не заполняя закладку Связи):

В этом случае система вернет все возможные комбинации запрошенных таблиц - каждый элемент против каждого:

На практике чаще встречаются задачи соединения по определенному полю двух таблиц. Например, ниже запрос, в котором нужно выбрать тех контрагентов, по которым в один день была и продажа, и покупка. Для этого таблицы документов РТУ и ПТУ соединим по полям Контрагент и Дата:

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

Вопрос 07.09 экзамена 1С:Профессионал по платформе. При соединении таблиц-источников данных в конструкторе запросов можно:

  1. Назначить соединение без указания условия связи
  2. Назначить соединение с указанием условия связи, причем это условие может быть только одно
  3. Назначить соединение с указанием условия связи, причем это условие может быть только простое
  4. Назначить необходимое количество соединений с указанием необходимого количества условий связи, причем эти условия могут быть как простые, так и произвольные

Вопрос 07.10 экзамена 1С:Профессионал по платформе. На закладке "Связи" конструктора запросов можно определить:

  1. Соединение таблиц-источников данных и связи между ними
  2. Объединение таблиц-источников данных и связи между ними
  3. Связи между полями таблицы, получаемой в результате выполнения запроса
  4. Связи между полями таблицы-источника данных и таблицы, получаемой в результате выполнения запроса

Вопрос 07.11 экзамена 1С:Профессионал по платформе. Создание соединения таблиц-источников данных в конструкторе запросов допускает:

  1. Соединение только двух таблиц-источников данных
  2. Соединение необходимого количества таблиц-источников данных
  3. Соединение только двух таблиц-источников данных, причем флажок "Все" обязательно должен быть проставлен хотя бы у одной из таблиц
  4. Соединение необходимого количества таблиц-источников данных, причем флажок "Все" обязательно должен быть проставлен хотя бы у одной из таблиц

Вопрос 07.12 экзамена 1С:Профессионал по платформе. Флажок "Все", устанавливаемый у таблицы, выбранной на закладке "Связи" конструктора запросов означает:

  1. Что в результат запроса надо включить все доступные поля этой таблицы
  2. Что в результат запроса надо включить все записи этой таблицы
  3. Что в результат запроса надо включить все поля и все записи этой таблицы
  4. Что результат запроса будет сформирован с учетом всех условий, заданных для соединения таблиц-источников

Правильный ответ второй - флажок определяет внешнее соединение по данной таблице (если установлен, то по данной таблице будет внешнее соединение).

Конструктор запроса 1С - это один из инструментов разработки, который позволяет:

  1. составить текст запроса на языке запросов исключительно визуальными средствами;
  2. отредактировать текст имеющегося запроса.

Программный код обычный конструктор не создает.

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

  1. сформировать текст нового запроса;
  2. сформировать программный код, содержащий создание объекта встроенного языка "Запрос", текста запроса, получение и обработку результата выполнения запроса (фрагмент программного кода, который исполняет запрос и выводит его результаты в табличный документ или диаграмму - отсюда );
  3. отредактировать текст имеющегося запроса.

Конструктор запросов может использоваться:

  • разработчиком - в конфигураторе (необходимо знание языка запросов);
  • пользователем - в режиме 1С:Предприятие (как обработка "Консоль запросов").

Использование в режиме 1С:Предприятие позволяет квалифицированным пользователям самостоятельно получать выборки данных, для которых нет типовых отчетов.

Вызов конструктора текста запроса 1С:

  1. контекстным меню (правой кнопкой мыши) в нужном месте программного кода;
  2. с помощью команды "Конструктор запроса. " меню "Текст".


Вызов конструктора запроса 1С


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

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

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

Текст запроса может содержать описание предопределенных данных конфигурации:

  1. значения системных перечислений (из определенного перечня);
  2. предопределенных данных (справочники, перечисления, планы видов характеристик, планов счетов, планов видов расчета);
  3. пустые ссылки;
  4. значения точек маршрута бизнес процессов.

Вкладки конструктора запроса 1С


На этой вкладке указывается источник данных и поля, которые необходимо выводить в отчет (по сути описываются конструкции ВЫБРАТЬ … ИЗ).

В качестве источников данных могут служить:

  • физическая таблица базы данных;
  • виртуальная таблица регистров; ;
  • вложенные запросы и т.д.

В контекстном меню виртуальных таблиц можно задать параметры этих таблиц.

На закладке "Таблицы и поля" конструктора запросов задают:

  1. источники данных запросов, в качестве которых могут выступать реальные и виртуальные таблицы;
  2. набор полей из таблиц - источников данных запроса;
  3. поля в виде произвольного выражения.

Закладка "Связи" становится доступна сразу после добавления двух таблиц.

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

Язык запросов предоставляет широкие возможности по построчному соединению нескольких таблиц.

Соединение таблиц может быть:

  • безусловным ;
  • условным (или по ключу ), то есть по заданному условию связи:
    1. полным - все записи обеих таблиц; для тех, которым не нашлось соответствия, запрос возвращает NULL;
    2. левым/правым - все записи из соответственно левой/правой таблицы (из противоположной только те, которым есть соответствие), для не найденных запрос возвращает NULL. Примечание : консоль запросов всегда преобразует правое соединение в левое, меняя таблицы местами (в случае, если запрос написать вручную, и потом открыть конструктором);
    3. внутренним - только совпадающие записи обеих таблиц.

В случае безусловного соединения, в конструкторе запросов достаточно определить выбираемые таблицы, не указывая, по каким полям они будут связаны (то есть не заполняя закладку Связи).

На практике чаще встречаются задачи соединения по определенному полю двух таблиц.

В конструкторе запросов тип условного соединения регулируется флажком "Все" - где он стоит, из той таблицы и выбираются все записи.

Флажок "Все", устанавливаемый у таблицы, выбранной на закладке "Связи" конструктора запросов означает что в результат запроса надо включить все записи этой таблицы.

Флажок

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

Вкладка

На данной вкладке система позволяет группировать и суммировать нужные поля результата таблицы. Описывается использование конструкций СГРУППИРОВАТЬ ПО, СУММА, МИНИМУМ, СРЕДНЕЕ, МАКСИМУМ, КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗЛИЧНЫХ.

При описании группировки в тексте запроса все поля должны делиться:

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

Вложенные таблицы не попадают ни в группируемые, ни в агрегируемые поля.

Количество записей в результате запроса можно узнать с помощью агрегатной функции КОЛИЧЕСТВО(*).

Вкладка

Отвечает за все условия, накладываемые на получаемые данные, т.е. за всё, что идёт в тексте запроса после конструкции ГДЕ.

Вкладка

Вкладка "Дополнительно" включает важные параметры.

Группировка "Выборка записей":

  • Первые — параметр, возвращающий в запрос только N записей (оператор ПЕРВЫЕ ); позволяет вывести в отчет первые N записей, которые будут отобраны с учетом правил упорядочивания, настроенных в конструкторе запросов;
  • Без повторяющихся — обеспечивает уникальность полученных записей (оператор РАЗЛИЧНЫЕ) и позволяет исключить из результирующей таблицы запроса одинаковые строки (данная операция распространяется только на детальные записи );
  • Разрешенные — позволяет выбирать только те записи, которые позволяет выбрать система с учетом настройки RLS (конструкция РАЗРЕШЕННЫЕ).

Группировка "Тип запроса":

  • определяет тип запроса:
    1. Выборка данных;
    2. Создание временной таблицы;
    3. Уничтожение временной таблицы.

Флаг "Блокировать получаемые данные для последующего изменения":

  1. позволяет включить возможность установки блокировки данных, которая обеспечивает сохранность данных от момента их чтения до изменения (актуально только для "Автоматического режима блокировок", конструкция ДЛЯ ИЗМЕНЕНИЯ); позволяет заблокировать данные указанных таблиц-источников на чтение (в рамках транзакции).
  2. в режиме автоматических транзакционных блокировок) происходят блокировки:
    • в варианте файл-сервер - на уровне таблиц базы данных;
    • в варианте клиент-сервер - на уровне записей таблиц базы данных.
  3. Если список "Таблицы для изменения" - пуст, то будут блокироваться данные всех таблиц, задействованных в запросе, иначе - только таблиц, указанных в списке.

Вкладка

Конструктор запросов 1с позволяет создавать объединения запросов. При их помощи можно последовательно выводить в результат данные, полученные из нескольких запросов, не используя при этом связи. Единственной условие для объединения — одинаковый набор полей в каждом отдельном запросе.

На этой закладке устанавливается возможность объединения разных таблиц и псевдонимы (конструкция КАК).

В левой части указываются таблицы, если установить флаги напротив таблицы, будут использоваться конструкции ОБЪЕДИНИТЬ, иначе — ОБЪЕДИНИТЬ ВСЕ (отличия двух способов тут ).

В правой части указываются соответствия полей в разных таблицах, если соответствие не указано, запрос будет возвращать NULL.

Особенности использования закладки "Объединения/Псевдонимы" конструктора запросов:

  1. На закладке "Объединения/Псевдонимы" конструктора запросов можно:
    • Задать список запросов (в результирующую выборку попадут записи всех указанных запросов).
    • Задать имена полей результирующей таблицы.
  2. При создании запросов, участвующих в объединении , с помощью конструктора запросов, он сам добавит в каждый запрос необходимое количество недостающих полей со значением NULL. Настроить соответствие добавленных конструктором полей и полей результата запроса можно на закладке "Объединения/Псевдонимы".
  3. Настройки, сделанные в разделе "Объединения/Псевдонимы" конструктора запросов, отразятся на информации, отображаемой в других разделах конструктора, следующим образом:
    • Если заданы псевдонимы полей результирующей таблицы, то новые названия появляются на закладке "Порядок" в списке полей.
    • При объединении запросов на ряде закладок (в том числе "Таблицы и поля") появляется возможность переключения между объединяемыми запросами.
  4. При объединении двух запросов на закладке "Объединения/Псевдонимы" конструктора запросов условие связи между запросами задать нельзя: в случае объединения связь всегда безусловна.

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

  1. на закладке "Порядок";
  2. на закладке "Объединения/Псевдонимы".

Таблица, полученная в результате запроса, может быть отсортирована по алфавиту по нужному полю:

  1. по полю, присутствующему в запросе;
  2. по любому полю таблицы-источника (кроме случаев объединенных запросов).

Помимо указания порядка для конкретного поля, можно воспользоваться опцией "Автоупорядочивание", которая отсортирует список по основному представлению объекта.

Вкладка

Указывается порядок сортировки значений (УПОРЯДОЧИТЬ ПО) — по убыванию (УБЫВ) или возрастанию (ВОЗР).

Флаг "Автоупорядочивание" (в запросе — АВТОУПОРЯДОЧИВАНИЕ):

  • если установлен, то система будет сортировать данные (по умолчанию система 1С 8.3 выводит данные в «хаотичном» порядке).

Если на закладке "Порядок" конструктора запросов не заданы настройки, то установка флага "Автозаполнение" обусловит следующее:

  1. записи в результирующей таблице запроса будут упорядочены по полям сортировки по умолчанию для таблиц-источников данных;
  2. если заданы настройки на станицах "Группировка" или "Итоги", то порядок записей в результирующей таблице запроса будет определяться этими настройками.

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

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

В ней указывается:

  1. Поле, по которому группируем, и тип его итогов:
    • Элементы - итоги только по конечным элементам;
    • Элементы и иерархия - итоги по папкам и по конечным элементам;
    • Только иерахия - итоги только по папкам.
  2. Флаг "Общие итоги" - суммирование всех полученных запросом строк;
  3. Итоговое поле - по которому собственно и считаем итоги.

Таким образом, при использовании секции "ИТОГИ . ПО" количество записей в результате запроса увеличится (по сравнению с их количеством без секции "ИТОГИ . ПО").

Результатом запроса с итогами будет дерево значений:

Вкладка

На этой вкладке можно создавать новые пакеты запросов, а также использовать её для навигации.

В тексте запроса пакеты разделяются символом «;» (точка с запятой).

Особенности использования конструктора запросов 1С

  1. При сохранении текста запроса, открытого повторно с помощью конструктора запроса, без внесения в этот текст изменений, из первоначального текста будут удалены только комментарии.
  2. Для создания в конструкторе запросов вложенного запроса необходимо:
    1. открыть закладку "Таблицы и поля";
    2. в командной панели над деревом "Таблицы" нажать кнопку "Добавить" или выбрать одноименный пункт контекстного меню.

    Создание вложенного запроса 1С

    1. открыть закладку "Таблицы и поля";
    2. в командной панели над деревом " Поля " нажать кнопку "Добавить" или выбрать одноименный пункт контекстного меню.

    Укажем в конструкторе одно суммируемое поле:По остальным полям будет произведена группировка в тексте запроса:

    При использовании в качестве источника данных для запроса внешнего источника (данные которого передаются через параметр) в качестве такого источника может использоваться:

    Читайте также: