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

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

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

        ВЫБРАТЬ
        СебестоимостьТоваров.Стоимость КАК Стоимость,
        Номенклатура.Ссылка КАК Номенклатура,
        ВидыЦен.Ссылка КАК ВидЦены,
        ЦеныНоменклатуры.Цена КАК Цена,
        Себестоимость.СтоимостьОстаток / ВЫБОР
        КОГДА Себестоимость.КоличествоОстаток = 0 ТОГДА 1
        ИНАЧЕ Себестоимость.КоличествоОстаток
        КОНЕЦ КАК Себестоимость,
        ((ЦеныНоменклатуры.Цена — (Себестоимость.СтоимостьОстаток / ВЫБОР
        КОГДА Себестоимость.КоличествоОстаток = 0 ТОГДА 1
        ИНАЧЕ Себестоимость.КоличествоОстаток
        КОНЕЦ)) / ВЫБОР
        КОГДА Себестоимость.КоличествоОстаток = 0 ТОГДА 1
        ИНАЧЕ Себестоимость.КоличествоОстаток
        КОНЕЦ) * 100 КАК ПроцентНадбавки
        ИЗ
        РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров,
        РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
        ПО ЦеныНоменклатуры.Номенклатура = Номенклатура.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЦен КАК ВидыЦен
        ПО ЦеныНоменклатуры.ВидЦены = ВидыЦен.Ссылка

        не однозначное поле Номенклатура.Ссылка

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

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

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

          |ВЫБРАТЬ
          | СебестоимостьТоваров.Стоимость КАК Стоимость,
          | Номенклатура.Ссылка КАК Номенклатура,
          | ВидыЦен.Ссылка КАК ВидЦены,
          | ЦеныНоменклатуры.Цена КАК Цена,
          | Себестоимость.СтоимостьОстаток / ВЫБОР
          | КОГДА Себестоимость.КоличествоОстаток = 0 ТОГДА 1
          | ИНАЧЕ Себестоимость.КоличествоОстаток
          | КОНЕЦ КАК Себестоимость,
          | ((ЦеныНоменклатуры.Цена — (Себестоимость.СтоимостьОстаток / ВЫБОР
          | КОГДА Себестоимость.КоличествоОстаток = 0 ТОГДА 1
          | ИНАЧЕ Себестоимость.КоличествоОстаток
          | КОНЕЦ)) / ВЫБОР
          | КОГДА Себестоимость.КоличествоОстаток = 0 ТОГДА 1
          | ИНАЧЕ Себестоимость.КоличествоОстаток
          | КОНЕЦ) * 100 КАК ПроцентНадбавки
          |ИЗ
          | РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров,
          | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
          | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
          | ПО ЦеныНоменклатуры.Номенклатура = Номенклатура.Ссылка
          | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЦен КАК ВидыЦен
          | ПО ЦеныНоменклатуры.ВидЦены = ВидыЦен.Ссылка

          Проблема в том, что в части FROM у вас:

          — РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров
          — РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
          — Левое соединение с Номенклатурой и ВидамиЦен

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

          Как исправить:

          1. Явно укажите соединения между таблицами, чтобы не было неоднозначности.

          2. Везде, где используете поле «Ссылка», указывайте таблицу, к которой оно относится.

          3. В запросе лучше использовать явные JOIN, а не перечислять таблицы через запятую.

          Пример исправленного запроса с явными соединениями и правильными алиасами:

          |ВЫБРАТЬ
          | СебестоимостьТоваров.Стоимость КАК Стоимость,
          | Номенклатура.Ссылка КАК Номенклатура,
          | ВидыЦен.Ссылка КАК ВидЦены,
          | ЦеныНоменклатуры.Цена КАК Цена,
          | СебестоимостьТоваров.СтоимостьОстаток / ВЫБОР
          | КОГДА СебестоимостьТоваров.КоличествоОстаток = 0 ТОГДА 1
          | ИНАЧЕ СебестоимостьТоваров.КоличествоОстаток
          | КОНЕЦ КАК Себестоимость,
          | ((ЦеныНоменклатуры.Цена — (СебестоимостьТоваров.СтоимостьОстаток / ВЫБОР
          | КОГДА СебестоимостьТоваров.КоличествоОстаток = 0 ТОГДА 1
          | ИНАЧЕ СебестоимостьТоваров.КоличествоОстаток
          | КОНЕЦ)) / ВЫБОР
          | КОГДА СебестоимостьТоваров.КоличествоОстаток = 0 ТОГДА 1
          | ИНАЧЕ СебестоимостьТоваров.КоличествоОстаток
          | КОНЕЦ) * 100 КАК ПроцентНадбавки
          |ИЗ
          | РегистрНакопления.СебестоимостьТоваров.Остатки(&Дата, ) КАК СебестоимостьТоваров
          | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
          | ПО СебестоимостьТоваров.Номенклатура = ЦеныНоменклатуры.Номенклатура
          | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
          | ПО ЦеныНоменклатуры.Номенклатура = Номенклатура.Ссылка
          | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыЦен КАК ВидыЦен
          | ПО ЦеныНоменклатуры.ВидЦены = ВидыЦен.Ссылка
          |ГДЕ
          | ВидыЦен.Ссылка = &ВидЦены
          | И СебестоимостьТоваров.КоличествоОстаток > 0

          Обратите внимание:

          — Используйте Остатки регистра накопления, чтобы получить актуальные остатки и стоимость.

          — Явно соединяйте таблицы по ключам.

          — Везде указывайте алиасы и поля с алиасами.

          Если хотите, могу помочь составить запрос под вашу задачу, укажите, что именно хотите получить и из каких регистров.

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