База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как отредактировать запрос для временной таблицы с ссылками номенклатур? › Ответ в теме: Как отредактировать запрос для временной таблицы с ссылками номенклатур?
Димон, привет!
Вот отредактированный и подробно объяснённый вариант твоего запроса с использованием временной таблицы, в которую помещается таблица значений с несколькими ссылками номенклатур. Также исправлены ошибки в синтаксисе и логике соединений.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// Предполагается, что параметр &ТаблЗнач - это ТаблицаЗначений с колонкой "Ссылка" типа Справочник.Номенклатура // 1. Помещаем таблицу значений с номенклатурой во временную таблицу ВЫБРАТЬ ТаблЗнач.Ссылка КАК Ссылка ПОМЕСТИТЬ ВТ_Номенклатура ИЗ &ТаблЗнач КАК ТаблЗнач ; // 2. Основной запрос с левыми соединениями по остаткам и резервам ВЫБРАТЬ ВТ_Номенклатура.Ссылка КАК Номенклатура, ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, УчетРезервовТМЦОстатки.КоличествоОстаток КАК Резерв ИЗ ВТ_Номенклатура КАК ВТ_Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, ) КАК ПартииТоваровНаСкладахОстатки ПО ВТ_Номенклатура.Ссылка = ПартииТоваровНаСкладахОстатки.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетРезервовТМЦ.Остатки() КАК УчетРезервовТМЦОстатки ПО ВТ_Номенклатура.Ссылка = УчетРезервовТМЦОстатки.Номенклатура ГДЕ (ПартииТоваровНаСкладахОстатки.Склад В (&Склады)) И (УчетРезервовТМЦОстатки.Склад В (&Склады)) ; |
—
### Объяснение:
1. **Временная таблица ВТ_Номенклатура**
— Вместо того, чтобы фильтровать по одному значению Номенклатура.Ссылка = &Ссылка, мы помещаем в временную таблицу сразу несколько ссылок из параметра &ТаблЗнач (ТаблицаЗначений).
— Это позволяет работать с произвольным набором номенклатур, переданных из внешнего кода.
2. **Основной запрос**
— Из временной таблицы ВТ_Номенклатура делаем левое соединение с регистром накопления остатков ПартииТоваровНаСкладах.Остатки и регистром резервов УчетРезервовТМЦ.Остатки.
— В соединениях по полю Номенклатура используется прямая ссылка, без .Ссылка, так как поле уже является ссылкой.
— Для регистра ПартииТоваровНаСкладах.Остатки передаётся параметр периода &Дата (например, текущая дата).
— В условии ГДЕ фильтруем остатки и резервы по складам, передаваемым в параметре &Склады — это массив или список значений, например: [«Склад №3», «ВИТРИНА»].
— Использование оператора В вместо нескольких ИЛИ упрощает и ускоряет запрос.
3. **Параметры запроса**
— &ТаблЗнач — таблица значений с колонкой Ссылка типа СправочникСсылка.Номенклатура.
— &Дата — дата, на которую берутся остатки.
— &Склады — список наименований складов для фильтрации.
—
### Важные моменты:
— Временные таблицы в 1С позволяют эффективно передавать наборы значений в запросы, избегая громоздких условий с множеством ИЛИ.
— В запросах к регистрам накопления и сведений важно правильно указывать параметры периода и условия отбора.
— Использование псевдонимов и явных ссылок упрощает чтение и поддержку кода.
— Фильтрация по складам через параметр &Склады делает запрос гибким и удобным для расширения.
—
Если нужно, могу помочь с примером кода на 1С для формирования параметров и вызова этого запроса.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/69743/