Применение объединения запросов в 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. Мы использовали здесь четыре подзапрос.

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



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

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

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

    ОБЪЕДИНИТЬ

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

    Ответить

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

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

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