Ответ в теме: Как отредактировать запрос для временной таблицы с ссылками номенклатур?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как отредактировать запрос для временной таблицы с ссылками номенклатур? Ответ в теме: Как отредактировать запрос для временной таблицы с ссылками номенклатур?

#35299
bot_avaOdin — Одинэсник
Участник

    Димон, привет!

    Вот отредактированный и подробно объяснённый вариант твоего запроса с использованием временной таблицы, в которую помещается таблица значений с несколькими ссылками номенклатур. Также исправлены ошибки в синтаксисе и логике соединений.

    // Предполагается, что параметр &ТаблЗнач - это ТаблицаЗначений с колонкой "Ссылка" типа Справочник.Номенклатура
    
    // 1. Помещаем таблицу значений с номенклатурой во временную таблицу
    ВЫБРАТЬ
        ТаблЗнач.Ссылка КАК Ссылка
    ПОМЕСТИТЬ ВТ_Номенклатура
    ИЗ
        &ТаблЗнач КАК ТаблЗнач
    ;
    
    // 2. Основной запрос с левыми соединениями по остаткам и резервам
    ВЫБРАТЬ
        ВТ_Номенклатура.Ссылка КАК Номенклатура,
        ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
        УчетРезервовТМЦОстатки.КоличествоОстаток КАК Резерв
    ИЗ
        ВТ_Номенклатура КАК ВТ_Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, ) КАК ПартииТоваровНаСкладахОстатки
            ПО ВТ_Номенклатура.Ссылка = ПартииТоваровНаСкладахОстатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетРезервовТМЦ.Остатки() КАК УчетРезервовТМЦОстатки
            ПО ВТ_Номенклатура.Ссылка = УчетРезервовТМЦОстатки.Номенклатура
    ГДЕ
        (ПартииТоваровНаСкладахОстатки.Склад В (&Склады))
        И (УчетРезервовТМЦОстатки.Склад В (&Склады))
    ;
    

    ### Объяснение:

    1. **Временная таблица `ВТ_Номенклатура`**

    — Вместо того, чтобы фильтровать по одному значению `Номенклатура.Ссылка = &Ссылка`, мы помещаем в временную таблицу сразу несколько ссылок из параметра `&ТаблЗнач` (ТаблицаЗначений).
    — Это позволяет работать с произвольным набором номенклатур, переданных из внешнего кода.

    2. **Основной запрос**

    — Из временной таблицы `ВТ_Номенклатура` делаем левое соединение с регистром накопления остатков `ПартииТоваровНаСкладах.Остатки` и регистром резервов `УчетРезервовТМЦ.Остатки`.
    — В соединениях по полю `Номенклатура` используется прямая ссылка, без `.Ссылка`, так как поле уже является ссылкой.
    — Для регистра `ПартииТоваровНаСкладах.Остатки` передаётся параметр периода `&Дата` (например, текущая дата).
    — В условии `ГДЕ` фильтруем остатки и резервы по складам, передаваемым в параметре `&Склады` — это массив или список значений, например: `[«Склад №3», «ВИТРИНА»]`.
    — Использование оператора `В` вместо нескольких `ИЛИ` упрощает и ускоряет запрос.

    3. **Параметры запроса**

    — `&ТаблЗнач` — таблица значений с колонкой `Ссылка` типа `СправочникСсылка.Номенклатура`.
    — `&Дата` — дата, на которую берутся остатки.
    — `&Склады` — список наименований складов для фильтрации.

    ### Важные моменты:

    — Временные таблицы в 1С позволяют эффективно передавать наборы значений в запросы, избегая громоздких условий с множеством `ИЛИ`.
    — В запросах к регистрам накопления и сведений важно правильно указывать параметры периода и условия отбора.
    — Использование псевдонимов и явных ссылок упрощает чтение и поддержку кода.
    — Фильтрация по складам через параметр `&Склады` делает запрос гибким и удобным для расширения.

    Если нужно, могу помочь с примером кода на 1С для формирования параметров и вызова этого запроса.

    Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/69743/

    База знаний 1С