Объединить результаты запросов. Объединить результаты запросов Как объединить запросы в один 1с

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

Для объединения используется предложение ОБЪЕДИНИТЬ . На самом деле происходит объединение результатов запросов, то есть каждый запрос собирает данные независимо друг от друга, а затем эти результаты объединяются в один. И только над последним запросом выполняются остальные операции, например, упорядочивание и расчет итогов.

При объединении запросов происходит "вертикальное склеивание" результатов, то есть сначала идут строки результата первого запроса, затем второго.

Перейдём к практике:
Код 1C v 8.х ВЫБРАТЬ
Номенклатура,
Количество,
Сумма
ИЗ
Документ.Приходная.Товары

ОБЪЕДИНИТЬ

ВЫБРАТЬ
Номенклатура,
Количество,
Сумма
ИЗ
Документ.Приходная.Товары

Результат этого запроса следующий:
Номенклатура Количество Сумма
Бумага А4 25 14 500
Стикеры 500л 8 4 880
Файл прозрачный 5 4 100
Набор офисный 8 8 840

В итоге мы получим две таблицы, которые будут соединены друг с другом. Трудно увидеть, где кончается документ Приходная и начинается документ Расходная. Но мы сделаем кое-что, чтобы понять это:
Код 1C v 8.х
ВЫБРАТЬ
Номенклатура,
Количество КАК КолПриход,
Сумма КАК СумПриход,
0 КАК КолРасход,
0 КАК СумРасход
ИЗ
Документ.Приходная.Товары

ОБЪЕДИНИТЬ

ВЫБРАТЬ
Номенклатура,
0 КАК КолПриход,
0 КАК СумПриход,
Количество КАК КолРасход,
Сумма КАК СумРасход
ИЗ
Документ.Расходная.Товары

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

Бумага А4 25 14 500
Стикеры 500л 8 4 880
Файл прозрачный 5 4 100
Набор офисный 8 8 840
Набор офисный 1 1 105
Файл прозрачный 1 820
Стикеры 500л 1 610

Теперь нам нужно из результат запроса убрать дублирующиеся элементы. У нас два запроса и если мы будем сворачивать, каждый отдельно, чтобы исключить дублирующиеся элементы, то у нас ничего не получится. Поэтому мы приведём запрос к следующему виду:
Код 1C v 8.х
ВЫБРАТЬ
Номенклатура,
СУММА(КолПриход) КАК КолПриход,
СУММА(СумПриход) КАК СумПриход,
СУММА(КолРасход) КАК КолРасход,
СУММА(СумРасход) КАК СумРасход
ИЗ

(ВЫБРАТЬ
Номенклатура,
Количество КАК КолПриход,
Сумма КАК СумПриход,
0 КАК КолРасход,
0 КАК СумРасход
ИЗ
Документ.Приходная.Товары

ОБЪЕДИНИТЬ

ВЫБРАТЬ
Номенклатура,
0 КАК КолПриход,
0 КАК СумПриход,
Количество КАК КолРасход,
Сумма КАК СумРасход
ИЗ
Документ.Расходная.Товары) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО Номенклатура

Итак, мы видим, что весь наш запрос заключён в скобки и назван как ВложенныйЗапрос. Это сделано для того, чтобы мы смогли сгруппировать записи из обоих подзапросов и исключить дублирующиеся элементы. Такая конструкция называется вложенным запросом. Результат этого запроса следующий:
Номенклатура КолПриход СумПриход КолРасход СумРасход
Бумага А4 25 14 500
Стикеры 500л 8 4 880 1 610
Набор офисный 5 4 100 1 1 105
Файл прозрачный 8 8 840 1 820

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

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

Информация взята с сайта

; Вложенные запросы (в разработке).

Поступление товаров и услуг и Возврат товаров поставщику за указанный период.

Новые вкладки: Объединения/Псевдонимы.

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

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

В конструкторе перейдем на вкладку Объединения/Псевдонимы . Она предназначена для создания объединений запросов и для задания псевдонимов для полей запроса. Псевдонимы полей нужны, если вас не устраивают стандартные имена полей базы данных. Если поле запроса состоит только из поля таблицы базы данных, то псевдоним для него не обязателен. Если же при создании поля вы использовали функции языка запросов, то псевдоним для такого поля обязателен. Для таких полей конструктор запросов создает стандартные псевдонимы Поле1…ПолеN , эти псевдонимы можно заменить на те, которые удобны для вас.

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

  • Запросы (красная рамка). В данном разделе расположена таблица, в которой показаны все объединенные запросы, при помощи меню расположенного над данным разделом можно добавлять новые, копировать существующие и удалять выделенные, а также менять их местами. При добавлении или копировании запроса, конструктор переходит на вкладку Таблицы и поля , где можно задать таблицы базы данных и нужные поля для нового запроса. Переключаться между запросами можно при помощи вкладок, которые будут появляться с правой стороны конструктора, по мере добавления новых запросов 1с;

  • В таблице Запросы две колонки:
    • Имя . Задается автоматически в формате Запрос 1 … Запрос N ;
    • Без дубликатов . Устанавливается в случае, если необходимо исключить повторяющиеся строки при объединении с предыдущим запросом. Стоит отметить, что данный флаг будет действовать только на объединение запроса в котором он установлен с предыдущим запросом.

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

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

Разберем решение задачи, приведенной в начале урока. Напомню условия:

Задача: выбрать запросом все проведенные документы Поступление товаров и услуг и Возврат товаров поставщику за указанный период.

  1. Создадим новый запрос;
  2. Запустим конструктор запросов;
  3. Выберем таблицу ПоступлениеТоваровУслуг из ветки Документы ;
  4. Из таблицы ПоступлениеТоваровУслуг выберем поле Ссылка;
  5. Перейдем на вкладку Условия ;
  6. В разделе Поля , раскроем ветку ПоступлениеТоваровУслуг при помощи кнопки «+»;
  7. Найдем реквизит Дата и перетащим его в раздел условия, выберем оператор сравнения Между и укажем параметры начала и окончания периода, например НачалоПериода и ОкончаниеПериода ;
  8. Перейдем на вкладку Объединения / Псевдонимы .
  9. Добавим новый запрос, флаг Без дубликатов поднимать не нужно, так как мы используем разные типы документов;

  10. Конструктор запросов 1с автоматически перейдет на вкладку Таблицы и поля . В правой части окна будет видно, что активен второй запрос объединения;


  11. Повторим пункты 1 — 7, для таблицы ВозвратТоваровПоставщику ;
  12. Снова перейдем на вкладку Объединения / Псевдонимы . В таблице псевдонимов видно, что поля Ссылка обоих таблиц стоят в одной строке, а значит ссылки на оба документа будут находится в результате запроса в одной колонке;
  13. Сменим имя колонки с Ссылка на Документ (зададим псевдоним поля). Для этого дважды щелкнем левой кнопкой мыши по имени поля. После чего можно задать свое имя, впишем туда Документ ;

  14. Запрос готов, нажимаем кнопку «ОК» в нижней части окна конструктора.

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

Доброго времени суток, уважаемые читатели блога сайт. Сегодня мы детально обсудим объединение запросов в 1С . Вы можете также скачать для типовой конфигурации Управление торговым предприятием для Казахстана, редакция 1.0.

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

Для объединения используется предложение ОБЪЕДИНИТЬ / UNION . На самом деле происходит объединение результатов запросов , то есть каждый запрос собирает данные независимо друг от друга, а затем эти результаты объединяются в один. И только над последним запросом выполняются остальные операции, например, упорядочивание и расчет итогов.

В отличие от при объединении запросов происходит «вертикальное склеивание» результатов, то есть сначала идут строки результата первого запроса, затем второго.

Перейдём к практике:

ВЫБРАТЬ Номенклатура, Количество, СуммаОБЪЕДИНИТЬ ВЫБРАТЬ Номенклатура, Количество, Сумма ИЗ Документ.Расходная.Товары

Результат этого запроса следующий:

В итоге мы получим две таблицы, которые будут соединены друг с другом. Трудно увидеть, где кончается документ Приходная и начинается документ Расходная. Но мы кое-что сделаем, чтобы разобраться:

ВЫБРАТЬ Номенклатура, Количество КАК КолПриход , Сумма КАК СумПриход , 0 КАК КолРасход , 0 КАК СумРасход ИЗ Документ.Приходная.Товары ОБЪЕДИНИТЬ КолПриход , 0 КАК СумПриход , Количество КАК КолРасход , Сумма КАК СумРасход ИЗ Документ.Расходная.Товары

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

Номенклатура КолПриход СумПриход КолРасход СумРасход
Бумага А4 25 14 500
Стикеры 500л 8 4 880
Файл прозрачный 5 4 100
Набор офисный 8 8 840
Набор офисный 1 1 105
Файл прозрачный 1 820
Стикеры 500л 1 610

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

ВЫБРАТЬ
Номенклатура,
СУММА(КолПриход) КАК КолПриход,
СУММА(СумПриход) КАК СумПриход,
СУММА(КолРасход) КАК КолРасход,
СУММА(СумРасход) КАК СумРасход
ИЗ
(
ВЫБРАТЬ Номенклатура, Количество КАК КолПриход , Сумма КАК СумПриход , 0 КАК КолРасход , 0 КАК СумРасход ИЗ Документ.Приходная.Товары ОБЪЕДИНИТЬ ВЫБРАТЬ Номенклатура, 0 КАК КолПриход , 0 КАК СумПриход , Количество КАК КолРасход , Сумма КАК СумРасход ИЗ Документ.Расходная.Товары) КАК ВложенныйЗапрос
СГРУППИРОВАТЬ ПО Номенклатура

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

Номенклатура КолПриход СумПриход КолРасход СумРасход
Бумага А4 25 14 500
Стикеры 500л 8 4 880 1 610
Набор офисный 5 4 100 1 1 105
Файл прозрачный 8 8 840 1 820

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

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


Top