Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 дек 2021, 09:18

Оптимизация запроса

Автор anna_m, 26 апр 2021, 11:39

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

anna_m

Добрый день!

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

LexaK

вот самая главная оптимизация
вот это
ЦитироватьДано: в табличной части документа...
надо заменить на РегистрНакопления
в зависимости от вида регистра, там у вас уже будут рассчитаны Остатки, Обороты и т.д.
ответ Понравился? (в смысле пригодился?)

anna_m

Цитата: LexaK от 26 апр 2021, 12:20
вот самая главная оптимизация
вот это
ЦитироватьДано: в табличной части документа...
надо заменить на РегистрНакопления
в зависимости от вида регистра, там у вас уже будут рассчитаны Остатки, Обороты и т.д.

Все это выбирается из РН.ОстаткиИОбороты. Условия заданы в параметрах виртуальной таблицы. В связи с этим и возникает вопрос, насколько это оптимально и методически верно

LexaK

использовать регистры и их итоги,
Это методологически верно и (при правильных настройках) достаточно оптимально.

как-то незаметно ускользает ваша проблема, в чем вопрос-то?
ответ Понравился? (в смысле пригодился?)

anna_m

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

Это мой обезличенный запрос. В нем большое количество конкретных условий (контрагент Иванов, склад Основной, номгруппы "Пищевые добавки" и "БАДы"). Мой вопрос - как методически правильно устанавливать такой отбор, когда много условий:
- прописать в параметрах ВТ, как у меня, и через УстановитьПараметр присваивать что-то вроде "Справочники.Контрагенты.НайтиПоКоду("01")"
- прописать в параметрах ВТ, где принудительно прописать Контрагент = Справочники.Контрагенты.НайтиПоКоду("01") и не использовать УстановитьПараметр для этих полей.
      

LexaK

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

//сначала собираете данные по предопределенным кодам/условиям
выбрать
спрСклад.Ссылка как Склад,
спрКонтр.Ссылка как Контрагент
поместить Таб
из
(Выбрать 1) выб
левое соединение Справочник.Склады спрСклад
по спрСклад.Код = "00001"

левое соединение Справочник.контрагенты спрКонтр
по спрКонтр.Наименование = "ИП Иванов"
;


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


здесь надо искать золотую середину между универсальностью, читабельностью (понимание и поддержание) и оптимальностью

ответ Понравился? (в смысле пригодился?)

anna_m

Цитата: LexaK от 26 апр 2021, 15:22
зависит от вашей бизнес логики
в основном используют параметры когда через них можно запросить данные по разным складам контрагентам группам и т.д.
иногда интересуют данные только по определенным настройкам параметрам
вот например такой вариант (и еще великое множество вариантов может быть)

здесь надо искать золотую середину между универсальностью, читабельностью (понимание и поддержание) и оптимальностью



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

Теги: Запрос 

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск