Для чего используется объединение результатов запросов в системе 1С:Предприятие 8?

Применение объединения запросов в 1С8

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

Применение объединения запросов в 1С8

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

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

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

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

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

ОБЪЕДИНИТЬ

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

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

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

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

ВЫБРАТЬ
	Номенклатура,
	Количество КАК КолПриход,
	Сумма 	   КАК СумПриход,
	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

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

ВЫБРАТЬ
Номенклатура,
СУММА(КолПриход) КАК КолПриход,
СУММА(СумПриход) КАК СумПриход,
СУММА(КолРасход) КАК КолРасход,
СУММА(СумРасход) КАК СумРасход
ИЗ
(
ВЫБРАТЬ Номенклатура, Количество КАК КолПриход, Сумма КАК СумПриход, 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. Мы использовали здесь четыре подзапрос.

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


Хочу обратить ваше внимание на бесплатный курс по «Языку запросов 1С» от Сотникова Анатолия. Этот опытный преподаватель наглядно покажет вам, как строить запросы в 1С. Вот некоторые вопросы, которые будут обсуждаться:
  • Что такое запросы?
  • Для чего нужны параметры запроса?
  • Какие есть параметры у виртуальной таблицы?
  • Как писать условия в запросах?
  • Что такое псевдонимы?
  • Как сделать запрос к справочнику?
  • Как работать с результатом запроса во встроенном языке 1С?
  • Далее увидите сами...
Материал подобран весьма великолепный! Поэтому не стоит тратить время на его поиски во всемирной сети! Не теряйте драгоценное время! Все подробности о том, что есть в бесплатных видеоуроках на странице автора.

Вот один из уроков о консоле запросов:


Этот блог читают уже более 3000 человек
- читай и ТЫ!
[dwqa-list-questions]

2 ответы
  1. myr4ik07 says:

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

    ОБЪЕДИНИТЬ

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

    Ответить

Ответить

Want to join the discussion?
Feel free to contribute!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *