Объединить все в запросе 1с
Цитата из справки 1С:
"По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной. Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое слово ВСЕ."
Конструкция ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ объединяет два результата запроса в один.
Пример запроса для вывода всех документов Приход и Расход:
Код 1C v 8.х
Конструкция ОБЪЕДИНИТЬ - соединяет два результата и группирует повторяющие строки,
А конструкция ОБЪЕДИНИТЬ ВСЕ - НЕ группирует автоматически строки результата.
Подробнее:
Порядок следования определяется порядком в списке полей в предложении ВЫБРАТЬ.
Количество полей можно изменить добавлением пустого фиктивного поля:
Код 1C v 8.х
До некоторой степени, операции объединения и соединения прямо противоположны: при соединении у источников обязательно должен быть ключ (при объединении наличие ключа абсолютно не имеет значения), при соединении количество полей может быть произвольным (при объединении количество нолей должно совпадать и поля должны следовать в одном и то же порядке), при соединении природа данных в источниках может быть различна (при объединении связываются однотипные данные).
Смысл механизма
При объединении, фактически, выполняются два запроса, а потом их результаты объединяются в один общий. Конструкция ОБЪЕДИНИТЬ ВСЕ оставит в итоговом запросе только неповторяющиеся записи (то есть, результат её действия аналогичен использованию фразы РАЗЛИЧНЫЕ после выполнения объединения).
Назначение псевдонимов, упорядочивание и расчёт итогов выполняются после объединения и действуют на результирующую таблицу.
Похожие FAQ
Еще в этой же категории
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Оператор ВЫРАЗИТЬ, аналог методов Лев, Прав, СокрЛП в Запросе? 11
Использовать конструкцию « ВЫРАЗИТЬ »: Запрос.Текст = " … |ГДЕ | (ВЫРАЗИТЬ(ЕдиницыХранения.Владелец.Наименование КАК СТРОКА(4))) Груз" ; Запрос.УстановитьПараметр(" Груз" ," Тонн" ); С целью приведения строк неограниченной длины к строкам Посмотреть все в категории Запросы
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: объединение
Автор уроков и преподаватель школы: Владимир Милькин
Объединение в запросах
В языке запросов имеется возможность объединять несколько запросов. При этом записи, полученные с помощью каждого из объединяемых запросов, будут собраны в один результат запроса.
Как всегда начнём с примера.
Пусть требуется написать запрос, который возвращает все названия цветов и вкусов в одной таблице.
Цвета мы умеем выбирать так:
А вот, чтобы объединить эти два результата в один как раз и потребуется операция объединения:
Обратите внимание на то, что операция объединения вовсе не гарантирует, что элементы будут идти в каком-то определённом порядке. В общем случае они могут следовать друг за другом как угодно, поэтому если важен порядок необходимо как и всегда указывать его явно (через секцию УПОРЯДОЧИТЬ).
Требования к запросам, участвующим в объединении
У объединяемых запросов должно быть одинаковое количество полей . Иначе мы получим такую ошибку:
В объединяемых запросах соответствующие друг другу (по порядку) поля должны иметь одинаковый тип . Но это требование, в отличие от предыдущего, не является обязательным. Если соответствующие друг другу поля имеют разный тип, то поле результата будет иметь СОСТАВНОЙ тип, который разбирался нами на одном из прошлых уроков:
Несмотря на то, что поле первого запроса имеет тип СТРОКА, а второго ЧИСЛО, нам удалось объединить их в одну таблицу. Но тип результатирующего поля стал составным и нам придётся учитывать это в дальнейшем. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Кстати, вы заметили, что поле итоговой таблицы (после объединения) называется Наименование, а не Калорийность? Эта такое правило : поля итоговой таблицы всегда имеют названия совпадающие с именами описанными в первом из объединяемых запросов.
Объединение более двух запросов
При объединении каждый запрос собирает данные независимо, а уже затем результаты объединяются в один. Количество объединяемых запросов не ограничено.
Напишем объединение трёх запросов:
Повторяющиеся строки
Давайте объединим один и тот же запрос сам с собой:
Обратите внимание на то, что мы объединили две одинаковые таблицы цветов, а в результате каждый цвет встречается ровно один раз.
Всё потому, что по умолчанию при объединении запросов полностью одинаковые строки в результате запроса, заменяются одной. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Если требуется, чтобы были оставлены в том числе одинаковые строки (дубли), необходимо указать ключевое слово ВСЕ:
Упорядочивание при объединении
Пытаться отдельно упорядочивать результаты запросов, участвующих в объединении не имеет смысла. Поэтому при попытке написать:
Упорядочивать можно только результат объединения :
Обратите внимание на то, что секция УПОРЯДОЧИТЬ ПО в данном случае относится не к последнему запросу, а уже к результату объединения запросов.
Подведение итогов при объединении
Пытаться отдельно подводить итоги по запросам, участвующим в объединении, также не имеет смысла. Поэтому при попытке написать:
Подводить итоги можно только по результату объединения :
Обратите внимание на то, что секция ИТОГИ ПО в данном случае относится не к последнему запросу, а уже к результату объединения запросов.
Рабочий пример
Давайте решим такую задачу. Требуется вывести для каждого элемента справочника Еда закупленное и проданное количество за весь период.
Поступление еды у нас в базе происходит документом ПоступлениеЕды. У документа есть табличная часть Еда, с реквизитами Номенклатура и Количество.
Сначала выберем все строки табличной части Еда из всех поступлений:
Теперь сгруппируем этот результат по еде с суммированием количества:
Аналогичным образом получим продажу еды из документов ПродажаЕды:
Осталось объединить эти два запроса:
Обратите внимание на то, как мы дополнили оба запроса ещё одним полем СУММА(0). Мы вынуждены были сделать это, так как оба запроса содержат по два поля, а объединение запросов должно содержать три поля. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Если бы мы не сделали этого, а написали просто:
Цитата из справки 1С:
"По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной. Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое слово ВСЕ."
Конструкция ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ объединяет два результата запроса в один.
Пример запроса для вывода всех документов Приход и Расход:
Код 1C v 8.х
Конструкция ОБЪЕДИНИТЬ - соединяет два результата и группирует повторяющие строки,
А конструкция ОБЪЕДИНИТЬ ВСЕ - НЕ группирует автоматически строки результата.
Подробнее:
Порядок следования определяется порядком в списке полей в предложении ВЫБРАТЬ.
Количество полей можно изменить добавлением пустого фиктивного поля:
Код 1C v 8.х
До некоторой степени, операции объединения и соединения прямо противоположны: при соединении у источников обязательно должен быть ключ (при объединении наличие ключа абсолютно не имеет значения), при соединении количество полей может быть произвольным (при объединении количество нолей должно совпадать и поля должны следовать в одном и то же порядке), при соединении природа данных в источниках может быть различна (при объединении связываются однотипные данные).
Смысл механизма
При объединении, фактически, выполняются два запроса, а потом их результаты объединяются в один общий. Конструкция ОБЪЕДИНИТЬ ВСЕ оставит в итоговом запросе только неповторяющиеся записи (то есть, результат её действия аналогичен использованию фразы РАЗЛИЧНЫЕ после выполнения объединения).
Назначение псевдонимов, упорядочивание и расчёт итогов выполняются после объединения и действуют на результирующую таблицу.
Похожие FAQ
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Цитата из справки 1С:
"По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной. Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое слово ВСЕ."
Конструкция ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ объединяет два результата запроса в один.
Пример запроса для вывода всех документов Приход и Расход:
Код 1C v 8.х
Конструкция ОБЪЕДИНИТЬ - соединяет два результата и группирует повторяющие строки,
А конструкция ОБЪЕДИНИТЬ ВСЕ - НЕ группирует автоматически строки результата.
Подробнее:
Порядок следования определяется порядком в списке полей в предложении ВЫБРАТЬ.
Количество полей можно изменить добавлением пустого фиктивного поля:
Код 1C v 8.х
До некоторой степени, операции объединения и соединения прямо противоположны: при соединении у источников обязательно должен быть ключ (при объединении наличие ключа абсолютно не имеет значения), при соединении количество полей может быть произвольным (при объединении количество нолей должно совпадать и поля должны следовать в одном и то же порядке), при соединении природа данных в источниках может быть различна (при объединении связываются однотипные данные).
Смысл механизма
При объединении, фактически, выполняются два запроса, а потом их результаты объединяются в один общий. Конструкция ОБЪЕДИНИТЬ ВСЕ оставит в итоговом запросе только неповторяющиеся записи (то есть, результат её действия аналогичен использованию фразы РАЗЛИЧНЫЕ после выполнения объединения).
Назначение псевдонимов, упорядочивание и расчёт итогов выполняются после объединения и действуют на результирующую таблицу.
Похожие FAQ
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Для лучшего понимания дополнил примерами запроса который можно посмотреть в консоли запросов. Чтобы не отвлекали данные в примере использую 3 значения это цифры, они же явлются полями по которым таблицы соединяются.
Число 1 есть только в первой таблице, 2 - в обоих, 3 - только во второй таблице Сразу отмечу, что правое соединение это зеркальное отображение левого соединения, поэтому его не публиковал.
Под заголовками "Код запроса" располагается листинг, который можно скопировать в консоль запросов и посмотреть. В первых двух пакетах запроса создаются таблицы, а в третьем(последнем) уже они соединяются.
В результатах соединений можно увидеть Null, если Вы не знаете что это такое прочтите статью Здесь.
Внутренее соединение
При таком соединении мы получаем только данные которые есть и в таблице 1 и в таблице 2 (одновременно в 2-х таблицах)
Код запроса
Результат внутреннего соединения
Левое соединение
При левом соединении мы получаем только левую таблицу
Код запроса
Результат левого соединения
Левое соединение без пересечений с правой таблицей(уникальные значения левой таблицы)
При левом соединении исключающее пересечения с правой таблицей получаем значения находящиеся только в левой таблице(уникальные значения).
Код запроса
Результат левого соединения без пересечений с правой таблицей
Полное соединение
При таком соединении мы получаем все данные, которые есть в обоих таблицах
Код запроса
Результат полного соединения
Теперь если Вам понадобится получить данные из двух таблиц соединением, то достаточно представить таблицы как окружности и определить данные из каких секторов окружностей нужна и сразу станет ясно какое соединение использовать.
Читайте также: