1с язык запросов объединение

Конструктор запросов 1С — обучение на примерах

Урок 4. Объединение запросов 1с при помощи конструктора

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

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

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

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

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

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

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

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

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

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

Также прочтите статьи о языке запросов 1с 8:

Источник

1с язык запросов объединение

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: объединение

Автор уроков и преподаватель школы: Владимир Милькин

Объединение в запросах

В языке запросов имеется возможность объединять несколько запросов. При этом записи, полученные с помощью каждого из объединяемых запросов, будут собраны в один результат запроса.

Читайте также:  Виды контроля английский язык фгос

Как всегда начнём с примера.

Пусть требуется написать запрос, который возвращает все названия цветов и вкусов в одной таблице.

Цвета мы умеем выбирать так:

А вот, чтобы объединить эти два результата в один как раз и потребуется операция объединения:

Обратите внимание на то, что операция объединения вовсе не гарантирует, что элементы будут идти в каком-то определённом порядке. В общем случае они могут следовать друг за другом как угодно, поэтому если важен порядок необходимо как и всегда указывать его явно (через секцию УПОРЯДОЧИТЬ).

Требования к запросам, участвующим в объединении

Несмотря на то, что поле первого запроса имеет тип СТРОКА, а второго ЧИСЛО, нам удалось объединить их в одну таблицу. Но тип результатирующего поля стал составным и нам придётся учитывать это в дальнейшем. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Кстати, вы заметили, что поле итоговой таблицы (после объединения) называется Наименование, а не Калорийность? Эта такое правило : поля итоговой таблицы всегда имеют названия совпадающие с именами описанными в первом из объединяемых запросов.

Объединение более двух запросов

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

Напишем объединение трёх запросов:

Повторяющиеся строки

Давайте объединим один и тот же запрос сам с собой:

Обратите внимание на то, что мы объединили две одинаковые таблицы цветов, а в результате каждый цвет встречается ровно один раз.

Всё потому, что по умолчанию при объединении запросов полностью одинаковые строки в результате запроса, заменяются одной. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Если требуется, чтобы были оставлены в том числе одинаковые строки (дубли), необходимо указать ключевое слово ВСЕ:

Упорядочивание при объединении

Пытаться отдельно упорядочивать результаты запросов, участвующих в объединении не имеет смысла. Поэтому при попытке написать:

Упорядочивать можно только результат объединения :

Читайте также:  Все числа английского языка

Обратите внимание на то, что секция УПОРЯДОЧИТЬ ПО в данном случае относится не к последнему запросу, а уже к результату объединения запросов.

Подведение итогов при объединении

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

Подводить итоги можно только по результату объединения :

Обратите внимание на то, что секция ИТОГИ ПО в данном случае относится не к последнему запросу, а уже к результату объединения запросов.

Рабочий пример

Давайте решим такую задачу. Требуется вывести для каждого элемента справочника Еда закупленное и проданное количество за весь период.

Поступление еды у нас в базе происходит документом ПоступлениеЕды. У документа есть табличная часть Еда, с реквизитами Номенклатура и Количество.

Сначала выберем все строки табличной части Еда из всех поступлений:

Теперь сгруппируем этот результат по еде с суммированием количества:

Аналогичным образом получим продажу еды из документов ПродажаЕды:

Осталось объединить эти два запроса:

Обратите внимание на то, как мы дополнили оба запроса ещё одним полем СУММА(0). Мы вынуждены были сделать это, так как оба запроса содержат по два поля, а объединение запросов должно содержать три поля. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Если бы мы не сделали этого, а написали просто:

то получили бы совсем другой результат:

Сравните этот и предыдущий запрос и их результаты.

Источник

Обучение программированию на 1С

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

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

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

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

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

Читайте также:  Виды подлежащего в русском языке

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

Контрагент Долг
Мебель + 200
Квант 1000
Траст 300
Сложности при объединении запросов

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

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

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

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

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

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

Источник

Поделиться с друзьями
Расскажем обо всем понемногу