Как устранить ошибку «неоднозначное поле Товары» в запросе 1С?

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

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38359
      Фото аватараOdineski
      Участник

        неоднозначное поле товары ошибка ВЫБРАТЬ
        DISTINCT Реализация.Ссылка КАК Ссылка
        ПОМЕСТИТЬ ВТ_Доки
        ИЗ
        Документ.РеализацияТоваровУслуг КАК Реализация
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК Товары
        ПО Товары.Ссылка = Реализация.Ссылка
        ГДЕ
        Реализация.Проведен
        И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
        И Товары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
        ;

        ВЫБРАТЬ
        ВТ_Доки.Ссылка КАК Ссылка
        ИЗ
        ВТ_Доки КАК ВТ_Доки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
        ПО ВТ_Доки.Ссылка = ТоварыНаСкладах.Регистратор
        ГДЕ
        ТоварыНаСкладах.Регистратор ЕСТЬ NULL

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

          Ошибка «неоднозначное поле Товары» возникает из-за того, что в запросе есть поле или таблица с именем «Товары», и 1С не может однозначно определить, к какой таблице относится поле «Номенклатура.ТипНоменклатуры».

          В вашем запросе:

          |ВЫБРАТЬ
          | DISTINCT Реализация.Ссылка КАК Ссылка
          |ПОМЕСТИТЬ ВТ_Доки
          |ИЗ
          | Документ.РеализацияТоваровУслуг КАК Реализация
          | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК Товары
          | ПО Товары.Ссылка = Реализация.Ссылка
          |ГДЕ
          | Реализация.Проведен
          | И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
          | И Товары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)

          Здесь поле «Номенклатура» — это ссылка на справочник, у которого есть реквизит «ТипНоменклатуры». Но 1С требует явно указать, что «Номенклатура» — это поле таблицы «Товары», а «ТипНоменклатуры» — реквизит справочника.

          Чтобы исправить неоднозначность, нужно явно указать путь к полю, например:

          | Товары.Номенклатура.ТипНоменклатуры

          Если ошибка сохраняется, попробуйте использовать псевдоним для поля «Номенклатура» и явно указать путь.

          Пример исправленного запроса:

          |ВЫБРАТЬ
          | DISTINCT Реализация.Ссылка КАК Ссылка
          |ПОМЕСТИТЬ ВТ_Доки
          |ИЗ
          | Документ.РеализацияТоваровУслуг КАК Реализация
          | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК Товары
          | ПО Товары.Ссылка = Реализация.Ссылка
          |ГДЕ
          | Реализация.Проведен
          | И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
          | И Товары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)

          Если ошибка «неоднозначное поле» связана с тем, что в запросе есть несколько таблиц с полем «Товары», то можно переименовать таблицу в JOIN:

          | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
          | ПО РеализацияТовары.Ссылка = Реализация.Ссылка

          И тогда в условии:

          | И РеализацияТовары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)

          Итоговый пример:

          |ВЫБРАТЬ
          | DISTINCT Реализация.Ссылка КАК Ссылка
          |ПОМЕСТИТЬ ВТ_Доки
          |ИЗ
          | Документ.РеализацияТоваровУслуг КАК Реализация
          | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
          | ПО РеализацияТовары.Ссылка = Реализация.Ссылка
          |ГДЕ
          | Реализация.Проведен
          | И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
          | И РеализацияТовары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
          |;
          |
          |ВЫБРАТЬ
          | ВТ_Доки.Ссылка КАК Ссылка
          |ИЗ
          | ВТ_Доки КАК ВТ_Доки
          | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
          | ПО ВТ_Доки.Ссылка = ТоварыНаСкладах.Регистратор
          |ГДЕ
          | ТоварыНаСкладах.Регистратор ЕСТЬ NULL

          Так запрос будет корректно работать без неоднозначности по полю «Товары».

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