Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут!

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

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

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

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

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

ВЫБРАТЬ

НераспОплатыОстатки.Заказчик,

Получите 267 видеоуроков по 1С бесплатно:

НераспОплатыОстатки.СуммаОст

ИЗ

(ВЫБРАТЬ

Заказчики.Ссылка КАК СсылкаНаСпрЗаказчики

ИЗ

Справочник.Заказчики КАК Заказчики

ГДЕ

Заказчики.Ссылка В(&Заказчики)) КАК ВложЗапрос

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

ПО ВложЗапрос.СсылкаНаСпрЗаказчики = НераспОплатыОстатки.Заказчик

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

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

Как лучше?

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

// Временная таблица

ВЫБРАТЬ

Заказчики.Ссылка КАК Заказчики

ПОМЕСТИТЬ табЗаказчики

ИЗ

Справочник.Заказчики КАК Заказчики

ГДЕ Заказчики.Ссылка В (&Заказчики)

;

 

// Основной запрос

ВЫБРАТЬ

табКлиенты.Ссылка,

НераспОплатыОстатки.СуммаОст,

ИЗ

табЗаказчики КАК табЗаказчики

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НераспОплаты.Остатки(

,

Заказчик В

(ВЫБРАТЬ

табЗаказчики.Заказчики

ИЗ

табЗаказчики)) КАК НераспОплатыОстатки

ПО табЗаказчики.Заказчики = НераспОплатыОстатки.Заказчики

 

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

P.S. Наша компания предоставляет услуги по настройке, доработке и комплексному внедрению 1С. Закажите бесплатный расчет стоимости вашей задачи на странице Услуги 1С или по телефону +7 (499) 350 29 00.

Остались вопросы?

Задайте ВОПРОС на нашем форуме 1С! ››

СПРОСИТЕ в комментариях!

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

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


*