В практике сопровождения 1С:Бухгалтерия 3.0 нередко возникают ситуации, которые можно назвать «призрачными ошибками». Одна из самых распространенных — сообщение о том, что Метод объекта не обнаружен, при условии, что в конфигураторе этот метод присутствует, код синтаксически верен, и у большинства пользователей документ проводится без проблем. Особенно часто это проявляется в модуле ОбщийМодуль.РезервыПоОплатеТруда при работе с документом Отражение зарплаты в бухучете.
Рассмотрим ситуацию подробнее: при выполнении обработчика ОбработкаПроверкиЗаполнения система выдает критическую ошибку на строке, где вызывается функция ЕстьНастройкиРезерваОтпусков. Самое загадочное здесь то, что ошибка привязана не к пользователю 1С, а к конкретному рабочему месту или сессии RDP. Проанализируем причины этого поведения и разберем по шагам, как привести систему в рабочее состояние.
Выясним причину, почему ошибка проявляется избирательно. Когда пользователь запускает 1С, платформа кэширует структуру конфигурации (метаданные) на локальном диске для ускорения работы. В среде терминального сервера (RDP) этот кэш хранится в профиле пользователя Windows. Если в момент обновления конфигурации или при сбое сессии файлы кэша были повреждены, платформа может «запомнить» старую версию модуля, где метода еще не существовало, или некорректно прочитать индекс методов.
Разберем, как правильно очистить кэш в терминальной сессии:
1cv8.exe продолжают удерживать файлы кэша, и их удаление будет невозможным или бесполезным.%AppData%\1C\1cv8\%LocalAppData%\1C\1cv8\Метод объекта не обнаружен.Проанализируем ситуацию с технической стороны взаимодействия клиента и сервера. Иногда на терминальном сервере установлено несколько версий платформы 1С. Если ярлык на конкретном компьютере (или настройки в файле v8i) принудительно запускает более старую версию клиента (например, через параметр /V8Version), а серверная часть работает на новой, возникает конфликт интерпретации кода.
Выполним проверку версии платформы:
Метод ЕстьНастройкиРезерваОтпусков относится к подсистеме расчета зарплаты. Если в вашей базе установлены расширения, они могут перекрывать общий модуль РезервыПоОплатеТруда. Рассмотрим пример, когда расширение было обновлено некорректно. Платформа может обращаться к методу через контекст расширения, и если в расширении метод не определен или имеет другую сигнатуру, возникнет ошибка.
Посмотрим на пример того, как вызывается этот метод в коде документа ОтражениеЗарплатыВБухучете:
Если Не РезервОтпусков.ЕстьНастройкиРезерваОтпусков(ЭтотОбъект.Организация, ЭтотОбъект.ПериодРегистрации) Тогда
// Логика обработки отсутствия настроек
КонецЕсли;
Если ошибка сохраняется после чистки кэша, попробуйте временно отключить все расширения в режиме «Предприятие» (через «Администрирование — Обслуживание — Расширения») и проверить проведение документа. Если ошибка исчезла — проблему нужно искать в коде расширения.
Если чистка кэша 1С не помогает, а под одной и той же учетной записью 1С на разных компьютерах (в разных RDP-сессиях) поведение отличается, значит, проблема кроется в повреждении самого профиля пользователя Windows на сервере. Это «тяжелый» случай, когда повреждаются реестровые ветки или права доступа к папкам AppData.
Как это исправляется:
Выясним, какие еще инструменты могут помочь в диагностике:
/ClearCache. Это заставит систему принудительно игнорировать часть кэшированных данных при запуске.Резюмируем: при возникновении ошибки Метод объекта не обнаружен, который на самом деле существует, основным вектором решения должна быть борьба с «залипшим» кэшем метаданных. Последовательная очистка папок Local и Roaming в профиле Windows и проверка корректности завершения терминальных сессий решают проблему в 95% случаев.