Автор Тема: Оптимизация запроса  (Прочитано 445 раз)

0 Пользователей и 1 Гость просматривают эту тему.

anna_mi

  • Новичок
  • *
  • Сообщений: 3
  • ФИО: Анна М
Оптимизация запроса
« : Апрель 26, 2021, 10:32:07 am »
Добрый день!

Дано: в табличной части документа нужно рассчитать некую базу, для чего нужно выполнить запрос. Например, вычислить оборот товаров по конкретному складу, конкретному поставщику , по двум конкретным  номенклатурным группам.
Вопрос: как лучше установить этот отбор - прописать конкретные условия в теле запроса или через УстановитьПараметр?

Холодный Тимофей

  • Пользователь
  • **
  • Сообщений: 22
  • ФИО: Тимофей Александрович Холодный
Re: Оптимизация запроса
« Ответ #1 : Апрель 26, 2021, 02:53:27 pm »
Из постановки задачи не понятно какие данные берутся из документа, а какие известны заранее еще до формирования документа.
 


anna_mi

  • Новичок
  • *
  • Сообщений: 3
  • ФИО: Анна М
Re: Оптимизация запроса
« Ответ #2 : Апрель 26, 2021, 03:14:01 pm »
Из постановки задачи не понятно какие данные берутся из документа, а какие известны заранее еще до формирования документа.

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

ВЫБРАТЬ
   РН.Номенклатура КАК Номенклатура,
   СУММА(РН.Оборот) КАК Оборот
   
ИЗ
   РегистрНакопления.ЭтоМойРегистр.ОстаткиИОбороты(
         &ДатаНач,
         &ДатаКон,
         Регистратор {(&Периодичность)},
         ,
         Склад = &Склад
            И (НомГруппа В ИЕРАРХИИ (&НомГруппа1)
               ИЛИ НомГруппа В ИЕРАРХИИ (&НомГруппа2))
            И Контрагент = &Контрагент) КАК РН


где Склад = Основной, Контрагент = Иванов, НомГруппы = Пищевые добавки и БАДы.

Где лучше установить эти конкретные условия - в условиях ВТ (Контрагент = Справочники.Контрагенты.НайтиПОКОду("01")) или в УстановитьПараметр вне запроса?

Холодный Тимофей

  • Пользователь
  • **
  • Сообщений: 22
  • ФИО: Тимофей Александрович Холодный
Re: Оптимизация запроса
« Ответ #3 : Апрель 27, 2021, 11:46:32 am »
Понял. В вашем случае метод НайтиПоКоду - это подзапрос к БД, что снизит быстродействие. Не уверен, что этот метод будет работать в запросе.
Лучше использовать УстановитьПараметр и передать туда ссылку, которую можно получить как раз методом НайтиПоКоду, если другого способа получить ссылку нет.
Методически правильно устанавливать максимальное количество отборов в параметрах временных таблиц, тк эта таблица формируется на лету с наложением параметров.
Это приведет к тому, что конечная выборка будет меньше, соответственно и запрос будет работать быстрее.
В общем случае это непреложная истина. Например, при сдаче экзамена на Специалиста по платформе, если вы разметите условие в секции ГДЕ / ИМЕЮЩИЕ / вкладе СВЯЗИ при соединении таблиц, а не в параметрах ВТ, это будет ошибкой (-1 балл). А уж как передать значение отбора - это вопрос третий.
Есть статьи на ИТС посвященные вашему вопросу:
https://its.1c.ru/db/metod8dev/content/5842/hdoc/_top/rls
https://its.1c.ru/db/content/v8std/src/200/200/i8100658.htm
Наслаждайтесь.
« Последнее редактирование: Апрель 27, 2021, 11:54:33 am от Холодный Тимофей »

Sadr

  • Пользователь
  • **
  • Сообщений: 55
  • Спец: Платформа, БП, УТ, ЗУП
  • ФИО: АС
Re: Оптимизация запроса
« Ответ #4 : Апрель 27, 2021, 12:57:48 pm »
... в параметрах временных таблиц, ...

Только это называется ВИРТУАЛЬНЫЕ таблицы. Разница существенная.

anna_mi

  • Новичок
  • *
  • Сообщений: 3
  • ФИО: Анна М
Re: Оптимизация запроса
« Ответ #5 : Апрель 27, 2021, 02:30:25 pm »
Холодный Тимофей, огромное спасибо! Все по полочкам!

Холодный Тимофей

  • Пользователь
  • **
  • Сообщений: 22
  • ФИО: Тимофей Александрович Холодный
Re: Оптимизация запроса
« Ответ #6 : Апрель 27, 2021, 03:27:34 pm »
... в параметрах временных таблиц, ...

Только это называется ВИРТУАЛЬНЫЕ таблицы. Разница существенная.
Да. Спасибо. Уже исправить не получится. Как говорится, три пишу, а два в уме.