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