При работе в типовых конфигурациях, таких как 1С:Бухгалтерия предприятия 3.0 или 1С:ERP, пользователи и разработчики могут столкнуться с досадной ошибкой при попытке изменения адреса или телефона в справочниках (например, в справочнике «Основные средства» или «Контрагенты»). Ошибка сопровождается сообщением: Метод объекта не обнаружен (Подключаемый_ОбновитьКонтактнуюИнформацию). Примечательно, что при отладке код может казаться рабочим, но выполнение прерывается именно в момент передачи управления обратно в форму.
В этой статье мы подробно разберем, почему возникает эта проблема, как она связана с архитектурой Библиотеки стандартных подсистем (БСП) и какие шаги нужно предпринять для её окончательного устранения.
Проанализируем ситуацию: вызов происходит из общего модуля УправлениеКонтактнойИнформациейКлиент. В коде этого модуля есть строка, которая пытается вызвать процедуру непосредственно в модуле той формы, из которой было открыто окно редактирования адреса:
Форма.Подключаемый_ОбновитьКонтактнуюИнформацию(Результат);
Проблема заключается в том, что платформа 1С не видит эту процедуру в контексте объекта Форма. Это может происходить по трем основным причинам: процедура отсутствует в модуле формы, процедура не помечена как экспортная, либо настройки режима совместимости конфигурации блокируют видимость методов модуля формы для внешних вызовов.
Как показывает практика и обсуждение на форумах, наиболее частой причиной является изменение требований платформы к видимости методов. В современных версиях 1С:Предприятия 8.3, если вызов метода осуществляется динамически или из другого программного контекста (например, из общего модуля через обращение к свойству Форма), процедура в модуле формы обязательно должна иметь ключевое слово Экспорт.
Выясним, как это исправить. Вам необходимо найти форму справочника, в которой возникает ошибка (например, Справочник.ОсновныеСредства.Форма.ФормаЭлемента), перейти в её модуль и найти там процедуру Подключаемый_ОбновитьКонтактнуюИнформацию. Она должна выглядеть следующим образом:
&НаКлиенте
Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат) Экспорт
// Здесь располагается логика обработки измененного адреса
// ...
КонецПроцедуры
Если слова Экспорт нет, добавьте его, сохраните конфигурацию и проверьте работу. Это решение актуально, если конфигурация была частично обновлена или в неё вносились ручные правки.
Проанализируем влияние системных настроек. В сообщении №9 автор темы указывает, что проблема крылась в отключенном режиме совместимости или его установке на низкое значение (например, 8.3.12).
Рассмотрим подробнее: начиная с версии платформы 8.3.15, механизмы вызова процедур и функций претерпели изменения. Если ваша конфигурация рассчитана на работу с новыми механизмами БСП, но режим совместимости в свойствах конфигурации стоит устаревший, это может приводить к конфликтам в модели видимости объектов.
Важно: Не рекомендуется менять режим совместимости только ради одной ошибки, так как это может повлечь за собой отказ других подсистем. В данном случае правильнее будет адаптировать код под текущие правила платформы, добавив Экспорт к соответствующим методам, как описано в первом решении.
Если вы используете расширения конфигурации, ситуация усложняется. Рассмотрим случай, когда форма справочника заимствована в расширение. Если основной код БСП пытается вызвать метод Подключаемый_ОбновитьКонтактнуюИнформацию, он ищет его в контексте формы расширения.
Посмотрим, что нужно проверить в расширении:
Экспорт в модуле расширения.&После или &Вместо, если вы модифицируете стандартное поведение подсистемы контактной информации.Иногда ошибка «Метод объекта не обнаружен» является ложной и возникает из-за того, что платформа использует старые версии скомпилированных модулей. Разберем шаги по очистке кэша:
Для клиента:
/ClearCache.
Для сервера (в клиент-серверном варианте):
Бывают случаи, когда необходимо перезапустить службу сервера 1С:Предприятия или очистить папку snccntxt в каталоге данных сервера. Это заставит систему заново инициализировать структуру метаданных и «увидеть» существующие методы в модулях форм.
Если ни один из вышеперечисленных способов не помог, проанализируем ситуацию с помощью инструментов разработчика. Включите в конфигураторе режим «Остановка по ошибке».
Когда выполнение программы прервется на строке Форма.Подключаемый_ОбновитьКонтактнуюИнформацию(Результат), выполните следующие действия:
Форма, нажмите правую кнопку мыши и выберите «Вычислить выражение».Форма.Подключаемый_ОбновитьКонтактнуюИнформацию(Неопределено). Если система вернет ошибку, значит, метод действительно недоступен для внешнего вызова (проверьте Экспорт еще раз).Помните, что подсистема контактной информации в БСП активно использует динамическое создание элементов формы. Если при открытии формы процедура инициализации КИ (Контактной Информации) отработала со сбоем, связка между полями ввода и обработчиками событий может быть нарушена, что и приведет к ошибке при попытке сохранения данных.