В процессе разработки или доработки конфигураций на базе 1С:Комплексная автоматизация 2 (или Управление торговлей 11) программисты нередко сталкиваются с ошибкой "Метод объекта не обнаружен" при попытке вызвать экспортную процедуру из модуля документа. Рассмотрим, почему это происходит и как правильно решить данную проблему, не прибегая к лишним обходным путям.
Многие ошибочно полагают, что проблема кроется в обновлении платформы 1С до версии 8.3.10 или выше. Однако, как показывает практика, причина почти всегда заключается в изменении исходного кода типовой конфигурации. При обновлении релиза конфигурации разработчики фирмы «1С» часто исправляют опечатки в именах процедур.
Самая распространенная причина — это использование латиницы вместо кириллицы в названиях методов. Например, если в коде процедуры указано название ЗаполнитьУсловияПродажПоCоглашению, где буква C является английской, то после обновления конфигурации, где эта опечатка была исправлена на русскую букву С, вызов метода по старой «латинской» ссылке приведет к ошибке платформы.
Чтобы восстановить работоспособность вашего кода, давайте рассмотрим два основных подхода: проверку корректности кода и использование модуля менеджера.
Прежде чем менять архитектуру вызова, выполните следующие действия:
Часто после выполнения этой простой операции ошибка исчезает, так как платформа наконец-то находит метод с тем именем, которое действительно прописано в конфигураторе.
Если вы хотите следовать лучшим практикам 1С, вызов методов объекта лучше производить через модуль менеджера. Это более надежный подход при работе с внешними обработками. Если стандартная процедура не доступна напрямую, вы можете создать обертку в менеджере.
Разберем пример создания обертки в модуле менеджера Документ.АктВыполненныхРабот:
// В модуле менеджера документа добавляем экспортную процедуру
Процедура Квант_ЗаполнитьУсловияПродажПоСоглашению(Объект) Экспорт
Объект.ЗаполнитьУсловияПродажПоСоглашению();
КонецПроцедуры
Затем в вашем модуле обработки вместо прямого вызова Акт.ЗаполнитьУсловияПродажПоCоглашению() используйте вызов через менеджер:
// В модуле обработки вызываем метод через менеджер документа
Документы.АктВыполненныхРабот.Квант_ЗаполнитьУсловияПродажПоСоглашению(Акт);
Когда вы пишете код заново в модуле менеджера, вы используете автодополнение платформы, что автоматически исключает вероятность опечатки в буквах (латиница против кириллицы). Платформа 1С строго относится к именованию идентификаторов, поэтому даже одна неверная буква делает метод «невидимым» для системы.
Важное примечание: при работе с методами объекта убедитесь, что переменная Акт действительно содержит созданный объект документа. Вызов экспортных методов модуля объекта возможен только в том случае, если переменная инициализирована методом СоздатьДокумент() или получена через ПолучитьОбъект().
В данной ситуации платформенные ошибки встречаются крайне редко. Если у вас возникла ошибка "Метод объекта не обнаружен" после обновления конфигурации, первым делом:
Экспорт.Используя эти методы, вы сможете быстро диагностировать проблему и вернуть работоспособность вашим обработкам без необходимости отката платформы или внесения излишних изменений в типовой код.