Ошибка «Поле объекта не обнаружено»
Ошибка «Поле объекта не обнаружено (Имя)» значит: код обратился к полю, которого у этого значения нет. В скобках — имя поля, а в начале сообщения — модуль и номер строки, где это случилось. Откройте эту строку.
Причины по порядку
Проверяйте по очереди, начиная с самой частой причины.
Опечатка или другое имя
Самая частая причина.
Товар.НаименованииевместоТовар.Наименование, или реквизит в конфигурации называетсяЦенаПродажи, а в коде —Цена. Сверьте имя с деревом конфигурации: в нём важно Имя, а не синоним, который видит пользователь.Имя в коде не совпадало с деревом — исправьте его, и ошибка пропадёт.
Поля нет в запросе
Выборка из запроса содержит только поля, перечисленные в
ВЫБРАТЬ, под теми именами, что указаны послеКАК:1С Запрос.Текст = "ВЫБРАТЬ | Товары.Наименование КАК Товар |ИЗ | Справочник.Товары КАК Товары"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Наименование); // ошибка: поле называется Товар КонецЦикла;Исправление —
Выборка.Товарили добавить поле в запрос.После
Выборка.стоит имя, которого нет послеКАК, — поправьте имя или запрос, и ошибка пропадёт.Реквизит ссылки на клиенте
В управляемом приложении на клиенте нельзя прочитать реквизит по ссылке:
Ссылка.Ценав процедуре&НаКлиентедаст эту ошибку. Данные базы доступны только на сервере. Получите значение серверной функцией:1С &НаСервереБезКонтекста Функция ЦенаТовара(Товар) Возврат Товар.Цена; КонецФункции &НаКлиенте Процедура ПоказатьЦену(Команда) Сообщить(ЦенаТовара(Объект.Товар)); КонецПроцедурыЗдесь
Объект.Товар— реквизит формы, ссылка на товар; цену по ней читает сервер.Строка с ошибкой — в процедуре с
&НаКлиенте: перенесите чтение реквизита в серверную функцию, и ошибка пропадёт.Нет ключа в структуре
У структуры обращение к отсутствующему ключу тоже даёт «Поле объекта не обнаружено». Проверяйте ключ методом
Свойство:1С Если Параметры.Свойство("Склад") Тогда Склад = Параметры.Склад; КонецЕсли;Значение слева от точки — структура (например,
Параметры): с проверкой черезСвойствоошибка пропадёт.Код написан для другой конфигурации
Внешняя обработка или отчёт, сделанные для одной конфигурации, в другой могут обращаться к реквизитам, которых в ней нет. То же бывает после обновления: поставщик переименовал или удалил реквизит, а доработка обращается к старому имени. Решение — поправить код под текущую конфигурацию или взять версию обработки для неё.
Похожие ошибки
- «Метод объекта не обнаружен (Имя)» — то же, но для метода: опечатка, метод недоступен на клиенте или у этого типа его нет.
- «Переменная не определена (Имя)» — имя в коде не объявлено: опечатка или переменная используется раньше, чем ей присвоено значение. Эту ошибку конфигуратор показывает ещё при сохранении модуля.
Как найти причину быстрее
Поставьте точку останова на строку из сообщения (клавиша F9 в конфигураторе), запустите отладку (F5) и, когда выполнение остановится, посмотрите, что лежит в переменной: какого она типа и какие у неё поля. Часто оказывается, что там вовсе не то значение, которое ожидалось, — например, Неопределено вместо ссылки.