1С Ошибка: Метод объекта не обнаружен (Method not found) — Причины и фикс
- Ошибка выполнения программного кода:
{ОбщийМодуль.Имя.Модуль(Строка)}: Метод объекта не обнаружен (ИмяМетода). - Сбой возникает при вызове процедур или функций через точку от переменной объекта.
- Ошибка часто проявляется при обновлении типовых конфигураций или вызове серверных методов из контекста клиента.
1. Проверка директивы Экспорт (Export) в объявлении метода
Метод объекта не может быть вызван снаружи модуля, если он не объявлен как Экспорт:
// НЕВЕРНО:
Процедура РассчитатьСкидку()
// код
КонецПроцедуры
// ВЕРНО:
Процедура РассчитатьСкидку() Экспорт
// код
КонецПроцедуры2. Проверка контекста компиляции модулей (&НаСервере / &НаКлиенте)
Если метод объявлен в модуле формы с директивой &НаСервере, его нельзя вызвать напрямую из клиентского кода без серверного контекста:
&НаКлиенте
Процедура КомандаВыполнить(Команда)
// Ошибка: прямой вызов серверной процедуры без перехода контекста
// ВыполнитьНаСервере();
ВыполнитьНаСервере(); // Процедура должна быть объявлена с директивой &НаСервере
КонецПроцедуры
&НаСервере
Процедура ВыполнитьНаСервере()
// Корректный контекст
КонецПроцедуры3. Проверка реального типа переменной перед вызовом
Ошибка возникает, если переменная содержит Неопределено или ссылку вместо самого объекта:
// Ошибка: у ссылки нет методов модуля объекта (например, Записать() или Рассчитать())
// СсылкаНаДокумент.Рассчитать();
// ВЕРНО: получение объекта
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
Если ДокументОбъект <> Неопределено Тогда
ДокументОбъект.Рассчитать();
КонецЕсли;4. Проверка прав доступа и флагов Общих Модулей
Откройте свойства Общего Модуля в Конфигураторе и проверьте галочки: Клиент (управляемое приложение), Сервер, Внешнее соединение.
Частые вопросы (FAQ)
Почему метод есть в модуле менеджера, но возникает 'Метод объекта не обнаружен'?
Методы Модуля Менеджера вызываются через менеджер объекта (Справочники.Номенклатура.ИмяМетода()), а методы Модуля Объекта — через конкретный экземпляр (ОбъектНоменклатура.ИмяМетода()). Не путайте эти контексты.
Как проверить наличие метода у объекта динамически?
В типовых конфигурациях используйте функцию ОбщегоНазначения.ЕстьРеквизитИлиСвойствоОбъекта() или блок Попытка...Исключение.
Почему ошибка возникает при вызове веб-сервиса или фонового задания?
В фоновом задании недоступен клиентский контекст. Все общие модули, вызываемые из фоновых заданий, должны иметь флаг 'Сервер' в свойствах.
Что означает директива &НаКлиентеНаСервереБезКонтекста?
Она позволяет компилировать процедуру как на клиенте, так и на сервере, но запрещает обращаться к реквизитам формы (контексту) напрямую.