что такое вложенный запрос в 1с

Вложенные запросы в 1С Предприятие 8.3

Зачастую нужно заранее сделать выборку из базы данных по некоему условию. Для этого в 1С 8.3 необходимо использовать вложенные запросы.

Но следует учитывать, что в большинстве случаев вложенные запросы в 1С бесполезны без соединения их результата с другими таблицами. Такое соединение практически в любом случае приведет к сильному замедлению выполнения запроса в целом.

Пример вложенного запроса на языке запросов

Приведу пример вложенного запроса на языке запросов 1С. Допустим, нам нужно сделать выборку суммы некоторого остатка по отдельным клиентам на определенную дату:

ВЫБРАТЬ
НераспОплатыОстатки.Заказчик,
НераспОплатыОстатки.СуммаОст
ИЗ

(ВЫБРАТЬ
Заказчики.Ссылка КАК СсылкаНаСпрЗаказчики
ИЗ
Справочник.Заказчики КАК Заказчики
ГДЕ
Заказчики.Ссылка В(&Заказчики)) КАК ВложЗапрос

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления. НераспОплаты.Остатки КАК НераспОплаты
ПО ВложЗапрос.СсылкаНаСпрЗаказчики = НераспОплатыОстатки.Заказчик

Когда СУБД будет выполнять такой запрос, не исключены неверные действия оптимизатора, так как трудно определиться с планом обработки запроса. Когда СУБД соединяет две таблицы, оптимизатор строит алгоритм на основе вычисления количества записей в этих таблицах.

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

Как лучше?

Именно поэтому фирма 1С крайне не рекомендует использовать вложенные запросы, а вместо них разработала временные таблицы. С использованием временных таблиц наш предыдущий запрос будет выглядеть так:

// Временная таблица
ВЫБРАТЬ
Заказчики.Ссылка КАК Заказчики
ПОМЕСТИТЬ табЗаказчики
ИЗ
Справочник.Заказчики КАК Заказчики
ГДЕ Заказчики.Ссылка В (&Заказчики)
;

// Основной запрос
ВЫБРАТЬ
табКлиенты.Ссылка,
НераспОплатыОстатки.СуммаОст,
ИЗ
табЗаказчики КАК табЗаказчики
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НераспОплаты.Остатки(
,
Заказчик В
(ВЫБРАТЬ
табЗаказчики.Заказчики
ИЗ
табЗаказчики)) КАК НераспОплатыОстатки
ПО табЗаказчики.Заказчики = НераспОплатыОстатки.Заказчики

Смотрите также видео-урок про вложенные запросы:

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

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

Запросы 1С:Предприятие 8. Вложенные запросы

Вложенные запросы – это запросы, вызываемые другим, внешним, запросом. Они всегда заключаются в круглые скобки и им обязательно должен присваиваться псевдоним. Некоторые считают вложенный запрос аналогом временных таблиц, однако эти два инструмента имеют ряд отличий, которые мы рассмотрим в данной статье.

Вложенный запрос видит только себя, он не видит внешний запрос. Это значит, что нельзя, например, установить во вложенном запросе условие по значению поля внешнего запроса.

Большинство представленных запросов не имеют какой-либо ценности и могли бы быть выполнены проще. Они приведены только для иллюстрации механизма вложенных запросов.

Вложенные запросы могут использоваться в конструкции ИЗ:

В том числе в соединениях:

И в условиях запроса со сравнением В или В ИЕРАРХИИ:

При этом количество выбираемых полей вложенного запроса должно соответствовать количеству операндов в левой части выражения В или В ИЕРАРХИИ.

Существует мнение, что вложенные запросы в сложных конструкциях выполняются платформой 1С нерационально, требуют бОльших ресурсов и времени, нежели те же самые запросы, выполненные иначе, без использования вложенных запросов. Однако в ряде случаев, обойтись без вложенных запросов невозможно.

Вместе с тем, обычно эффективнее работает один большой запрос с вложенными, чем последовательность запросов из модуля.

Практически всегда альтернативой вложенному запросу является использование временных таблиц. Этот инструмент имеет ряд преимуществ:

Подведем итог: вложенные запросы лучше всего применять в достаточно простых конструкциях, при этом использовать их стоит только тогда, когда по-другому задачу не решить; в сложных запросах лучше использовать временные таблицы.

Запросы 1С:Предприятие 8. Вложенные запросы : 1 комментарий

При соединении подзапроса с другой таблицей на уровне СУБД всегда будет использоваться способ соединения nested loops, т.к для подзапроса нет статистики. Хорошо это или плохо — зависит от самого запроса и количества выбираемых данных. Именно поэтому при выполнении запроса, содержащего подзапрос, может проявляться замедление.

Источник

Вложенные запросы

Вложенные запросы

Вложенным называется запрос, который является источником выборки основного запроса. Допускается произвольная вложенность таких запросов.

Синтаксис вложенного запроса:

ВЫБРАТЬ * из (ВЫБРАТЬ 1) КАК ВложенныйЗапрос

ВЫБРАТЬ * ИЗ Справочник.Контрагенты ГДЕ Ссылка В (ВЫБРАТЬсколько с Ссылка ИЗ Справочник.Контрагенты)

ВЫБРАТЬ * ИЗ Справочник.Контрагенты ГДЕ (Ссылка,Наименование) В (ВЫБРАТЬ Ссылка,Наименование ИЗ Справочник.Контрагенты)

В конструкторе вложенный запрос создается на основной вкладке по специальной кнопке: что такое вложенный запрос в 1с. Смотреть фото что такое вложенный запрос в 1с. Смотреть картинку что такое вложенный запрос в 1с. Картинка про что такое вложенный запрос в 1с. Фото что такое вложенный запрос в 1с

Иконка у таблицы вложенного запроса отличается от других таблиц:что такое вложенный запрос в 1с. Смотреть фото что такое вложенный запрос в 1с. Смотреть картинку что такое вложенный запрос в 1с. Картинка про что такое вложенный запрос в 1с. Фото что такое вложенный запрос в 1с

Прочие сведения о вложенных запросах

Считается, что вложенные запросы менее оптимизированы на скорость, но с появлением платформы 8.3 данный фактор справедлив только для Postgres SQL (возможно особенность конкретной сборки).

В целом, в большинстве случаев, запросы можно переписать на использование временных таблиц, но не для запроса динамического списка управляемого интерфейса (там это запрещено на уровне платформы). Вложенный запрос же использовать в нем допустимо, если он не вызывает дублей ключевых полей (Ссылка).

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

Допускается вложенный запрос и при соединениях таблиц.

Например:

ВЫБРАТЬ * ИЗ Справочник.Контрагенты КАК Основная ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ * ИЗ Справочник.Контрагенты ) КАК Вложенный ПО Основная.Ссылка = Вложенный.Ссылка

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

Зачем может потребоваться вложенный запрос в приоритетном порядке:

В случае использования результата агрегатной функции в качестве условия соединения таблиц:

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта В(ВЫБРАТЬ ссылка из Справочник.Валюты. ГДЕ Наименование = «Рубль»))

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта.Наименование = «Рубль»)

Ни одно, даже самое верное дело не двигается без рекламы… Обычно думают, что надо рекламировать только дрянь,- хорошая вещь и так пойдет. Это самое неверное мнение. Реклама — это имя вещи… Реклама должна напоминать бесконечно о каждой, даже чудесной вещи… Думайте о рекламе!»

Источник

Вложенные запросы в 1С 8.3. Оператор В

что такое вложенный запрос в 1с. Смотреть фото что такое вложенный запрос в 1с. Смотреть картинку что такое вложенный запрос в 1с. Картинка про что такое вложенный запрос в 1с. Фото что такое вложенный запрос в 1с

Вложенные запросы

Язык запросов 1С поддерживает вложенные запросы. Вложенный запрос — это когда выборка выполняется не из таблицы, а из результата другого запроса, например:

Сначала во вложенном запросе свернули таблицу по цвету, а потом из результата выбрали все поля.

Во вложенном запросе нельзя использовать итоги, потому что итоги рассчитываются сервером 1С, а не СУБД. Также во вложенном запросе нельзя использовать предложение УПОРЯДОЧИТЬ ПО, кроме случаев когда используется ключевое слово ПЕРВЫЕ:

Количество вложенности запросов не ограничено.

Оператор В

Допустим, нам нужно выбрать все камеры хранения, где площадь равна 100 или 200. Для этого можно использовать следующий запрос:

Оператор В позволяет сократить текст запроса и сделать его более понятным для чтения:

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

Также параметром можно передать массив или список значений:

Можно указать вложенный запрос:

Данный запрос выберет те камеры хранения, где площадь равна максимальной среди всех камер.

Можно использовать несколько полей:

Количество полей слева от оператора В и в результате вложенного запроса должно совпадать, иначе будет ошибка «В запросах операции «В» должно выбираться столько полей, сколько операндов имеет левая часть операции.».

Также важна последовательность. В запросе выше поле Спр.Площадь сравнивается с первым полем вложенного запроса, а Спр.Цвет со вторым.

Из вложенного запроса можно обращаться к полям внешнего запроса:

Источник

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

Вложенные запросы

что такое вложенный запрос в 1с. Смотреть фото что такое вложенный запрос в 1с. Смотреть картинку что такое вложенный запрос в 1с. Картинка про что такое вложенный запрос в 1с. Фото что такое вложенный запрос в 1сВложенный запрос относится к специальным объектам в программе 1С. К его функционалу прибегают, если требуется сформировать и выполнить специальные виды запросов к таблицам базы данных (БД) в программе. Для получения результата по запросу сначала необходимо корректное составление текста запроса, который будет аккумулировать актуальную информацию об источниках для получения данных. Это могут быть таблицы, специальные поля, уникальные группировки.

Современный язык запросов для программы 1С

Вложенные запросы пишутся с применением языка, который имеет свои особенности и в тоже время похож на другие специальные языки SQL, к примеру, по своему синтаксису. Главные отличительные черты языка запросов в 1С такие:

Есть и другие отличительные особенности языка запросов в 1С, которые позволяют ему быть эффективным.

Что нужно знать о вложенных запросах и языке запросов?

Профессиональное изучение конструкции языка запроса позволяет не только понять, для чего предназначен язык запросов, но и научится представлять совокупность объектов базы в формате 2-х мерных таблиц, обрабатывать консоль запросов, создавать файлы для хранения списков запросов, познакомиться со специфическими полями таблиц, имеющих ссылочный тип. И всё это будут только начальные знания о системе вложенных запросов в 1С. Важно освоить и групповые операции, относящиеся к языку запросов, изучить, как делать корректную выборку по нескольким источникам данных.

Пример вложенного запроса

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

КонтрагентСумма
ООО «КВАНТ»720
ЗАО «Пилот»840
КонтрагентСумма
ЗАО «Перспектива»120
ООО «КВАНТ»2000
ЗАО «Пилот»3150

что такое вложенный запрос в 1с. Смотреть фото что такое вложенный запрос в 1с. Смотреть картинку что такое вложенный запрос в 1с. Картинка про что такое вложенный запрос в 1с. Фото что такое вложенный запрос в 1с

Сначала определяем все расходы, затем приход по юрлицам. Второй запрос ставим со знаком «-», это позволит корректно свернуть данные.

КонтрагентДолг
Перспектива120
КВАНТ2000
Пилот3150
КВАНТ-720
Пилот-840

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

что такое вложенный запрос в 1с. Смотреть фото что такое вложенный запрос в 1с. Смотреть картинку что такое вложенный запрос в 1с. Картинка про что такое вложенный запрос в 1с. Фото что такое вложенный запрос в 1с

Тогда результатом отчёта будет:

КонтрагентДолг
Перспектива120
КВАНТ1280
Пилот2310

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

что такое вложенный запрос в 1с. Смотреть фото что такое вложенный запрос в 1с. Смотреть картинку что такое вложенный запрос в 1с. Картинка про что такое вложенный запрос в 1с. Фото что такое вложенный запрос в 1с

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

Существуют определённые требования, которых необходимо придерживаться, выполняя объединение двух запросов. Прежде всего, это касается количества полей. Необходимо, чтобы их число было идентичным. К примеру, если бы в таблице данных «Расход» была указана Скидка, а в данных по Приходу такого элемента не было бы, то следует прибегнуть к следующей конструкции:

что такое вложенный запрос в 1с. Смотреть фото что такое вложенный запрос в 1с. Смотреть картинку что такое вложенный запрос в 1с. Картинка про что такое вложенный запрос в 1с. Фото что такое вложенный запрос в 1с

В дальнейшем нужно будет скорректировать величину суммы на скидку и выполнить необходимую группировку.

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

что такое вложенный запрос в 1с. Смотреть фото что такое вложенный запрос в 1с. Смотреть картинку что такое вложенный запрос в 1с. Картинка про что такое вложенный запрос в 1с. Фото что такое вложенный запрос в 1с

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

Источник

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

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