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

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

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35298
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        отредактируй и объясни запрос, во временную таблицу я хочу поместить таблицу значений, в которой находиться несколько ссылок номенклатур.
        ВЫБРАТЬ
        Номенклатура.Ссылка КАК Ссылка,
        Номенклатура.Наименование КАК Наименование
        ПОМЕСТИТЬ ВТ_Номенклатура
        ИЗ
        Справочник.Номенклатура КАК Номенклатура
        ГДЕ
        Номенклатура.Ссылка = &Ссылка
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
        ВТ_Номенклатура.Ссылка КАК Ссылка,
        ВТ_Номенклатура.Наименование КАК Наименование,
        ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
        УчетРезервовТМЦОстатки.КоличествоОстаток КАК Резерв
        ИЗ
        ВТ_Номенклатура КАК ВТ_Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетРезервовТМЦ.Остатки КАК УчетРезервовТМЦОстатки
        ПО ВТ_Номенклатура.Ссылка.Ссылка = УчетРезервовТМЦОстатки.Номенклатура.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, ) КАК ПартииТоваровНаСкладахОстатки
        ПО ВТ_Номенклатура.Ссылка.Ссылка = ПартииТоваровНаСкладахОстатки.Номенклатура.Ссылка
        ГДЕ
        (ПартииТоваровНаСкладахОстатки.Склад.Наименование = «Склад №3»
        ИЛИ ПартииТоваровНаСкладахОстатки.Склад.Наименование = «ВИТРИНА»)
        И (УчетРезервовТМЦОстатки.Склад.Наименование = «Склад №3»
        ИЛИ УчетРезервовТМЦОстатки.Склад.Наименование = «ВИТРИНА»)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С