Обучающие статьи. BAS Сложные запросы. Итоги нескольких таблиц
На прошлом уроке мы рассматривали просты запросы в BAS, сегодня мы продолжим эту тему и перейдем к изучению уже сложных запросов в BAS и итогам по нескольким таблицам.
Условно сложные запросы можно разделить на три категории.
Первая категория - запрос тип "объединение"
Этот тип запроса соединяет две разные таблицы в один общий результат.
Давайте создадим новый запрос. Цель запроса получить товары из заказа покупателя и их цену, и сравнить с ценой из документа «Установка цен номенклатуры». Данный документ будет делать движения по регистру сведений «Цены номенклатуры». Цель такого запроса, проверить, не продаем ли мы по заниженным или завышенным ценам.
Создадим первый запрос в табличной части Товары, документа заказ покупателя и возьмем от туда поля «Номенклатура» и «Цена». Перейдем на закладку «Объединения» и добавим еще один запрос, теперь к регистру сведений «Цены номенклатуры» и возьмем от туда поля «Номенклатура» и «Цена». Так у нас получиться три колонки «Номенклатура», «Цена заказа» и «Цена установки цен».
Если вы объединим сейчас две таблицы, то у нас получится только две колонки. Цены собрались воедино. Давайте добавим технические поля в каждый из запросов, просто ноли. Используя кнопку добавить на закладке «таблицы и поля» в третьей колонке.
Вернемся в закладку «Объединения» и укажем, что техническое поле «0» из таблицы заказа ,равно полю цена из таблицы регистра сведений и, наоборот, для цены регистра укажем техническое поле «0» из заказа покупателя. Переключатся между запросами можно при помощи закладок справа. Назовем колонки «Цена заказа» и «Цена установки»
В результате мы можем сравнить данные и получить некоторую аналитику.
Вторая категория - "вложенный" запрос
Такой запрос пригодится, если вы собрались выбрать все из одной таблицы и лишь некоторые данные из другой.
Например, мы хотим получить несколько контрагентов и их контактные данные.
Создадим запрос, в конструкторе используем кнопку для создания вложенного запроса
В открывшемся окне нового конструктора сделаем запрос к справочнику контрагенты
Нам будет достаточно только ссылки. Ссылка содержит в себе все данные элемента.
Нажмем «ОК» и попадаем обратно в первый конструктор запроса. Тут у нас появляется уже элемент – «Вложенный запрос» из него можно явно выбрать поля, только те, которые мы выбрали в предыдущем запросе. Добавим таблицу регистра сведений «Контактная информация» и выберем из нее поле «Представление» и «Вид», а из вложенного запроса поле «Ссылка».
Если закончить конструировать сейчас, то наши две таблицы будут никак не связаны. Будут выбраны все записи из первой таблицы и второй. Давайте установим связь.
Сделать это можно на закладке «Связи», которая появляется, если у нас есть две и более таблицы в одном запросе. В первой таблице укажем вложенный запрос, во второй контактную информацию. А в условиях связи укажем, что поле вложенного запроса «Ссылка» равна полю контактной информации «Объект». И самое важное, нужно указать какая таблица будет приоритетней. Укажем Вложенный запрос.
Что такое приоритеты или вид соединения?
Если нам нужно из нескольких таблиц собрать одну, то нужно как-то их объединить-соединить. Соединения бывают:
- «Левое» – если использовать это соединение, то в результате мы получим все записи из левой таблицы и записи из правой удовлетворяющие условию связи. Т.е., если смотреть на наш пример- выше будут выбраны все контрагенты и контакты для каждого из них.
- «Правое» – по сути это тоже что и левое соединение, только таблицы при этом меняются местами.
- «Внутреннее» – из таблиц будут выбраны только те поля, которые соответствуют условию связи. Т.е., из нашего примера будет выбраны только те контрагенты, у которых вообще есть контактная информация.
- «Полное» – из таблиц будут выбраны все поля. Т.е. из нашего примера будет выбрана вся контактная информация, неважно привязана она к контрагенту или вообще относится к организации.
Третья категория - "пакетный" запрос
Пакетный запрос это несколько запросов, описанных как один большой запрос. Эти запросы выполняются последовательно один за другим. Результат любого из этих запросов можно поместить во временную таблицу и обратиться к ней из другого запроса.
Однозначный плюс этой категории запросов – результаты такого запроса помещаются во временную таблицу, они могут использоваться несколько раз. При этом не нужно несколько раз выполнять один и тот же вложенный запрос, а выбирать данные из готовой таблицы.
К минусам можно отнести затраты ресурсов на создание временных таблиц и их уничтожение.
Давайте возьмем наш пример с контрагентами и контактной информацией и сделаем его пакетным запросом. Создадим новый запрос. Теперь не будем делать «вложенный», а сразу обратимся к таблице контрагентов и выберем поле «Ссылка». Далее перейдем на закладку «Дополнительно» и укажем, что мы хотим поместить результат во временную таблицу, а так же зададим ее имя. Назовем ее «Контрагенты».
Далее переходим на закладку «Пакет запросов» и добавляем еще один запрос. Теперь уже к Контактной информации. Выбираем поля «Объект», «Вид», «Представление» и тоже помещаем во временную таблицу и назовем ее «КонтактнаяИнформация».
Теперь, когда у нас есть два запроса, каждый из которых вернул промежуточный результат, т.е. Контрагенты выбрали всех контрагентов, Контактная информация все контакты мы сделаем соединение результатов. Добавляем еще один запрос на закладке «Пакет запросов».
Обратите внимание на первую колонку закладки «Таблицы и поля», в самом низу, появились наши временные таблицы.
Давайте выберем из них данные. Из контрагентов нам нужна ссылка, а из контактной информации поля «Вид» и «Представление». У вас наверняка появился вопрос «А зачем нужно выбирать поле «Объект» во временном запросе контактная информация?». Ответ прост: для того чтобы у нас была возможность сделать связь между этими двумя таблицами.
Все, наш пакетный запрос готов.
Итоги в запросе.
Итоги нужны, например, для суммирования поля «сумма документа». Давайте попробуем на примере. Сделаем запрос к документам Реализация товаров и услуг, выберем поля «Ссылка» и «Сумма Документа», зайдем на закладку «Итоги» укажем, что итоги у нас будут по полю «Сумма Документа» и установим галочку «Общие итоги».
И получаем такой результат запроса
Первая запись пустая, но содержит в себе сумму всех сумм документов.
Группировка.
На закладке итоги так же можно сгруппировать результат. Давайте добавим в наш запрос поле «Контрагент» и добавим его в групповое поле на закладке итоги.
Результат запроса будет таким
Первая строка общие итоги по контрагенту, далее документы и их суммы.
Так же, наша компания проводит обучение по курсам:
Обучение проводится в вечернее время, что позволит вам не отрываться от работы или обучения, практикующим программистом нашей компании.
Если у вас остались вопросы, Вы всегда можете обратиться к нашим аналитикам по телефонам:
(093) 090-70-20
(095) 090-70-20
(068) 090-70-20
Свяжитесь с нами
Если вы хотите получить больше информации, заполните эту форму. Мы свяжемся с вами в ближайшее время.