Объединение таблиц запроса 1С

union
Функциональные особенности конструкций для языка запросов в 1С

Результатом выполнения объединения запросов будет слияние двух результатов вместе. То есть данные будут получены по обоим запросам, но соединены в одно. К примеру, по следующим данным

01

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

02

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

03_2

И далее:

04_2

Теперь результатом запроса будут следующие данные:

Контрагент Долг
Мебель + 200
Квант 1000
Траст 300

 

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

Если задача – объединить два запроса, то при этом у них должно совпадать количество по показателю «Поле». К примеру, если в таблице Расход есть информация о скидке, которая не предусмотрена в таблице данных Приход, то это поле в данные таблицы Приход необходимо добавить в форме констант. В дальнейшем скидку нужно будет вычесть, а результаты вычислений сгруппировать. Не стоит пренебрегать порядком расположения полей, потому что объединение информации происходит именно в той порядковой очередности, в которой поля указаны для секций ВЫБРАТЬ в каждом из запросов.

 

Различия в конструкциях

Неправильное применение конструкций «ОБЪЕДИНИТЬ» и «ОБЪЕДИНИТЬ ВСЕ» языка запросов приводит к негативным последствиям. К примеру, если выполнить запрос в следующем виде:

05

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

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

Стоит понимать, что операция объединения и операция соединения совершенно различны. Для соединения требуется ключ, в то время как для объединения наличие или отсутствие ключа роли не играет. Произвольный показатель по количеству полей при выполнении запроса соединения допустим, а вот при конструкции объединения не только должно совпасть количество полей, но и их последовательность. То есть сам процесс выполнения конструкции объединения подразумевает работу по 2-м запросам, а уже результат работы объединяется в единый формат.