Форум Чистова. Подготовка к экзаменам 1С
О форуме => Конфигурирование => Тема начата: anna_mi от Апрель 26, 2021, 10:32:07 am
-
Добрый день!
Дано: в табличной части документа нужно рассчитать некую базу, для чего нужно выполнить запрос. Например, вычислить оборот товаров по конкретному складу, конкретному поставщику , по двум конкретным номенклатурным группам.
Вопрос: как лучше установить этот отбор - прописать конкретные условия в теле запроса или через УстановитьПараметр?
-
Из постановки задачи не понятно какие данные берутся из документа, а какие известны заранее еще до формирования документа.
-
Из постановки задачи не понятно какие данные берутся из документа, а какие известны заранее еще до формирования документа.
из документа берется только дата, по которой берем период для выборки. Запрос примерно такой:
ВЫБРАТЬ
РН.Номенклатура КАК Номенклатура,
СУММА(РН.Оборот) КАК Оборот
ИЗ
РегистрНакопления.ЭтоМойРегистр.ОстаткиИОбороты(
&ДатаНач,
&ДатаКон,
Регистратор {(&Периодичность)},
,
Склад = &Склад
И (НомГруппа В ИЕРАРХИИ (&НомГруппа1)
ИЛИ НомГруппа В ИЕРАРХИИ (&НомГруппа2))
И Контрагент = &Контрагент) КАК РН
где Склад = Основной, Контрагент = Иванов, НомГруппы = Пищевые добавки и БАДы.
Где лучше установить эти конкретные условия - в условиях ВТ (Контрагент = Справочники.Контрагенты.НайтиПОКОду("01")) или в УстановитьПараметр вне запроса?
-
Понял. В вашем случае метод НайтиПоКоду - это подзапрос к БД, что снизит быстродействие. Не уверен, что этот метод будет работать в запросе.
Лучше использовать УстановитьПараметр и передать туда ссылку, которую можно получить как раз методом НайтиПоКоду, если другого способа получить ссылку нет.
Методически правильно устанавливать максимальное количество отборов в параметрах временных таблиц, тк эта таблица формируется на лету с наложением параметров.
Это приведет к тому, что конечная выборка будет меньше, соответственно и запрос будет работать быстрее.
В общем случае это непреложная истина. Например, при сдаче экзамена на Специалиста по платформе, если вы разметите условие в секции ГДЕ / ИМЕЮЩИЕ / вкладе СВЯЗИ при соединении таблиц, а не в параметрах ВТ, это будет ошибкой (-1 балл). А уж как передать значение отбора - это вопрос третий.
Есть статьи на ИТС посвященные вашему вопросу:
https://its.1c.ru/db/metod8dev/content/5842/hdoc/_top/rls
https://its.1c.ru/db/content/v8std/src/200/200/i8100658.htm
Наслаждайтесь.
-
... в параметрах временных таблиц, ...
Только это называется ВИРТУАЛЬНЫЕ таблицы. Разница существенная.
-
Холодный Тимофей, огромное спасибо! Все по полочкам!
-
... в параметрах временных таблиц, ...
Только это называется ВИРТУАЛЬНЫЕ таблицы. Разница существенная.
Да. Спасибо. Уже исправить не получится. Как говорится, три пишу, а два в уме.