«Неоднозначное поле» в запросе 1С: причины и решение
В запросе участвуют несколько таблиц с полем одного и того же имени, а в тексте оно указано без имени таблицы. Платформа не может понять, какое именно поле имеется в виду.
Текст ошибки
Причины
- Поле в секциях ВЫБРАТЬ, ГДЕ или УПОРЯДОЧИТЬ указано без псевдонима таблицы при соединении
- Одинаковые поля Ссылка, Дата, Организация есть сразу в нескольких таблицах запроса
- Таблица добавлена в запрос позже, и старые условия стали неоднозначными
- Текст запроса собран из кусков в коде и потерял псевдонимы
Как выглядит ошибка
{(9, 5)}: Неоднозначное поле "Ссылка"
ГДЕ
<<?>>Ссылка = &Документ
Числа в фигурных скобках — номер строки и колонки в тексте запроса. Знаки <<?>> показывают место, где платформа споткнулась.
Решение: всегда указывайте псевдоним таблицы
Неправильно:
ВЫБРАТЬ
Ссылка,
Контрагент.Наименование
ИЗ
Документ.РеализацияТоваров КАК Реализация
ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплату КАК Счет
ПО Реализация.Сделка = Счет.Ссылка
ГДЕ
Дата МЕЖДУ &Начало И &Конец
Правильно:
ВЫБРАТЬ
Реализация.Ссылка КАК Ссылка,
Реализация.Контрагент.Наименование КАК Контрагент
ИЗ
Документ.РеализацияТоваров КАК Реализация
ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплату КАК Счет
ПО Реализация.Сделка = Счет.Ссылка
ГДЕ
Реализация.Дата МЕЖДУ &Начало И &Конец
Правило простое: как только в запросе больше одной таблицы, каждое поле пишите с псевдонимом. Это защищает запрос и от будущих изменений: если в одну из таблиц добавят реквизит с тем же именем, запрос продолжит работать.
Как быстро исправить большой запрос
- Откройте запрос в конструкторе запросов. Конструктор при сохранении сам подставляет псевдонимы таблиц к полям, которые выбраны через интерфейс.
- Проверьте секции ГДЕ, СГРУППИРОВАТЬ ПО, УПОРЯДОЧИТЬ ПО и ИТОГИ: туда псевдонимы часто забывают дописать вручную.
- Если запрос собирается из строк в коде, выведите итоговый текст в отладчике и проверьте его целиком, например в консоли запросов.
Похожая ситуация в пакетных запросах
При соединении временной таблицы с обычной поля временной таблицы тоже нужно указывать через её псевдоним. Имена полей временной таблицы задаются псевдонимами КАК в запросе, который её создаёт.
Соединение таблицы с самой собой
Если одна и та же таблица участвует в запросе дважды, например для сравнения текущей и предыдущей записи, обязательно дайте ей два разных псевдонима и указывайте их у каждого поля. Без этого даже поля, которые выглядят однозначно, приведут к ошибке, потому что одинаково называются в обеих копиях таблицы.
Частые вопросы
Почему раньше запрос работал, а теперь нет?
Скорее всего, в запрос добавили ещё одну таблицу или в одну из таблиц добавили реквизит с таким же именем. Поле без псевдонима сразу стало неоднозначным.
Нужно ли указывать псевдоним, если таблица в запросе одна?
Не обязательно, но полезно: при добавлении соединения запрос не придётся переписывать.