В процессе разработки на платформе 1С:Предприятие 8 часто возникает ситуация, когда код, успешно работающий в режиме Тонкого клиента, выдает ошибку Метод объекта не обнаружен при запуске в режиме Толстого клиента. Давайте разберемся, почему так происходит и как привести конфигурацию в соответствие с требованиями архитектуры системы.
Основная причина ошибки заключается в том, что платформа 1С строго разграничивает области видимости кода. Общие модули имеют набор свойств, которые определяют, в каких именно режимах (на клиенте, на сервере, в толстом или тонком клиенте) будут доступны методы, экспортируемые этим модулем.
Когда вы вызываете функцию из формы, 1С проверяет настройки модуля:
Вызов сервера.Толстый клиент, необходимо явно указать, что модуль поддерживает этот режим, иначе платформа «не увидит» методы модуля при компиляции кода.Первым делом проанализируем свойства модуля, в котором описана ваша функция. Выполним следующие действия:
Общий модуль в дереве объектов.Толстый клиент. Если она снята, методы внутри этого модуля будут недоступны для вызова в этом режиме работы.Если ваша функция, например РольДоступнаНаСервере(Роль), предназначена для проверки прав на сервере, но вызывается из модуля формы (на клиенте), одного флага Сервер недостаточно. Вам необходимо активировать флаг Вызов сервера.
Этот флаг разрешает платформе 1С организовать безопасный вызов серверной процедуры с клиента. Без этого флага попытка обращения к серверному методу приведет к ошибке, так как механизм клиент-серверного взаимодействия не будет настроен для данного модуля.
// Пример функции в общем модуле
// Убедитесь, что в свойствах модуля стоят галочки:
// Сервер, Вызов сервера, Толстый клиент (если требуется)
Функция РольДоступнаНаСервере(Роль) Экспорт
Возврат РольДоступна(Роль);
КонецФункции
Часто программисты используют директивы препроцессора, такие как #Если ТонкийКлиент или #Если ТолстыйКлиент. Важно помнить:
#Если ТонкийКлиент, будет полностью исключен из компиляции при запуске в толстом клиенте.Метод объекта не обнаружен, так как метода физически не существует в скомпилированном коде.Проверьте, нет ли в вашем модуле условий, которые ограничивают видимость функции только для тонкого клиента. Если функция должна работать везде, уберите директивы или продублируйте логику для обоих режимов.
Для стабильной работы кода при переключении между режимами запуска:
Общего модуля. Если модуль используется во всех режимах, лучше активировать флаги Клиент, Сервер, Вызов сервера, Толстый клиент и Внешнее соединение.Сервис -> Параметры -> Модули -> Проверка) убедитесь, что выбраны нужные режимы проверки (управляемое/обычное приложение).Обычное приложение или Управляемое приложение, чтобы увидеть, не подсвечивает ли конфигуратор ошибки доступа для выбранного режима.Следуя этим шагам, вы сможете устранить несовместимость методов и обеспечить корректную работу вашей конфигурации как в современных управляемых формах, так и в толстом клиенте.