Решение задач 1С:Предприятие 8 на примерах

«Неоднозначное поле» в запросе 1С: причины и решение

Ошибки 1СОшибки в кодеОпубликовано

В запросе участвуют несколько таблиц с полем одного и того же имени, а в тексте оно указано без имени таблицы. Платформа не может понять, какое именно поле имеется в виду.

Текст ошибки

Неоднозначное поле "ИмяПоля"

Причины

Как выглядит ошибка

{(9, 5)}: Неоднозначное поле "Ссылка"
ГДЕ
    <<?>>Ссылка = &Документ

Числа в фигурных скобках — номер строки и колонки в тексте запроса. Знаки <<?>> показывают место, где платформа споткнулась.

Решение: всегда указывайте псевдоним таблицы

Неправильно:

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

Правильно:

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

Правило простое: как только в запросе больше одной таблицы, каждое поле пишите с псевдонимом. Это защищает запрос и от будущих изменений: если в одну из таблиц добавят реквизит с тем же именем, запрос продолжит работать.

Как быстро исправить большой запрос

  1. Откройте запрос в конструкторе запросов. Конструктор при сохранении сам подставляет псевдонимы таблиц к полям, которые выбраны через интерфейс.
  2. Проверьте секции ГДЕ, СГРУППИРОВАТЬ ПО, УПОРЯДОЧИТЬ ПО и ИТОГИ: туда псевдонимы часто забывают дописать вручную.
  3. Если запрос собирается из строк в коде, выведите итоговый текст в отладчике и проверьте его целиком, например в консоли запросов.

Похожая ситуация в пакетных запросах

При соединении временной таблицы с обычной поля временной таблицы тоже нужно указывать через её псевдоним. Имена полей временной таблицы задаются псевдонимами КАК в запросе, который её создаёт.

Соединение таблицы с самой собой

Если одна и та же таблица участвует в запросе дважды, например для сравнения текущей и предыдущей записи, обязательно дайте ей два разных псевдонима и указывайте их у каждого поля. Без этого даже поля, которые выглядят однозначно, приведут к ошибке, потому что одинаково называются в обеих копиях таблицы.

Частые вопросы

Почему раньше запрос работал, а теперь нет?

Скорее всего, в запрос добавили ещё одну таблицу или в одну из таблиц добавили реквизит с таким же именем. Поле без псевдонима сразу стало неоднозначным.

Нужно ли указывать псевдоним, если таблица в запросе одна?

Не обязательно, но полезно: при добавлении соединения запрос не придётся переписывать.

Соединения в запросах 1С: левое, внутреннее, полное и ОБЪЕДИНИТЬ ВСЕ

Запросы

Виды соединений языка запросов 1С с наглядным результатом, соединение с виртуальными и временными таблицами, отличие ОБЪЕДИНИТЬ от ОБЪЕДИНИТЬ ВСЕ и приёмы, которые защищают от размножения строк и медленных запросов.

Запросы в 1С: как написать запрос, передать параметры и обработать результат

Запросы

Пошаговый разбор работы с запросами в 1С: текст и параметры, обход результата и выгрузка в таблицу значений, пакетные запросы с временными таблицами и отладка в консоли запросов.

Ссылка в запросе 1С: разыменование, ВЫРАЗИТЬ, пустая ссылка и GUID

Запросы

Практический разбор ссылок в языке запросов 1С: разыменование и его цена, ВЫРАЗИТЬ и ТИПЗНАЧЕНИЯ для составных типов, пустая ссылка и NULL, представление и уникальный идентификатор.

Похожие ошибки