1С Ошибка: Поле не найдено (Field not found in query) — Причины и решение
- Исключительная ситуация
{(X, Y)}: Поле не найдено "ИмяПоля"при выполнении запроса или формировании отчета. - Ошибка при попытке обращения через точку к реквизиту составного ссылочного типа (Composite Type).
- Сбой динамических списков на управляемых формах после обновления метаданных конфигурации.
- Ошибка в вычисляемых полях СКД при обращении к несуществующим ресурсам.
1. Разбор типичных причин ошибки
- Опечатка в тексте запроса или псевдониме: поле в секции
ГДЕилиСГРУППИРОВАТЬссылается на псевдоним из секцииВЫБРАТЬ(псевдонимы нельзя использовать в условиях ГДЕ). - Разыменование составного типа: обращение через точку к реквизиту поля, которое может содержать несколько различных ссылочных типов.
- Удаление реквизита: обращение к реквизиту метаданных, который был удален или переименован разработчиком в конфигурации.
2. Корректная работа с составными типами через ВЫРАЗИТЬ
Если поле ДокументОснование имеет составной тип, обращение через точку вызовет ошибку. Используйте явное приведение типов:
// НЕПРАВИЛЬНО: Заказ.Контрагент (вызовет ошибку, если тип составной)
// ПРАВИЛЬНО:
ВЫБРАТЬ
ВЫРАЗИТЬ(Реализация.Сделка КАК Документ.ЗаказКлиента).Менеджер КАК ОтветственныйМенеджер,
ВЫРАЗИТЬ(Реализация.Сделка КАК Документ.ЗаказКлиента).Контрагент КАК Клиент
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Сделка ССЫЛКА Документ.ЗаказКлиента3. Исправление порядка использования псевдонимов
// НЕПРАВИЛЬНО: Псевдоним 'СуммаДокумента' используется в секции ГДЕ
ВЫБРАТЬ
Товары.Количество * Товары.Цена КАК СуммаДокумента
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
СуммаДокумента > 1000 // ОШИБКА: Поле не найдено!
// ПРАВИЛЬНО: Использование исходного выражения в условии
ГДЕ
(Товары.Количество * Товары.Цена) > 1000 Частые вопросы (FAQ)
Почему в условиях ГДЕ нельзя использовать псевдонимы полей из ВЫБРАТЬ?
Согласно стандартам языка SQL и платформы 1С, секция ГДЕ (WHERE) логически вычисляется СУБД ДО формирования проекции выходных колонок ВЫБРАТЬ (SELECT), поэтому на этапе фильтрации псевдонимы еще не существуют.
Почему ошибка 'Поле не найдено' возникает в Динамическом Списке формы?
Пользователь мог настроить пользовательскую группировку или отбор по полю, которое разработчик удалил из запроса динамического списка в обновлении. Сбросьте настройки формы: Еще -> Установить стандартные настройки.
Что означает конструкция ВЫРАЗИТЬ(... КАК ...) в запросе?
Она сообщает транслятору 1С точный тип данных объекта, позволяя платформе сформировать корректный INNER/LEFT JOIN в SQL к конкретной таблице вместо неэффективного сканирования всех возможных таблиц составного типа.
Как найти точное место ошибки в длинном запросе на 500 строк?
Координаты {(X, Y)} в тексте ошибки указывают точный номер строки (X) и номер символа в строке (Y), где парсер 1С споткнулся о неизвестный идентификатор.