Почему возникает ошибка Object method not found при использовании длительных операций в веб-клиенте?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов или обработок с длительным выполнением на базе БСП (Библиотеки Стандартных Подсистем) разработчики часто сталкиваются с ситуацией, когда код корректно работает в тонком клиенте, но выдает ошибку при запуске через веб-интерфейс. Рассмотрим, почему это происходит и как устранить данную проблему.

Анализ причин возникновения ошибки

Когда вы используете механизм длительных операций, платформа создает фоновое задание и через ОписаниеОповещения пытается вызвать процедуру завершения или процедуру прогресса. Ошибка Object method not found в данном контексте чаще всего означает, что веб-клиент не может обнаружить метод, указанный в структуре оповещения, в текущем модуле формы.

Основная причина кроется в различии архитектур выполнения кода. В тонком клиенте платформа более гибко обрабатывает вызовы, тогда как веб-клиент жестко привязан к клиентскому контексту исполнения (браузерному JavaScript). Если процедура, указанная в ОписаниеОповещения, помечена директивой &НаСервере, веб-клиент не сможет её вызвать, так как для него эта функция недоступна напрямую.

Разбор решения: перенос в клиентский контекст

Для исправления ситуации необходимо перенести обработчик оповещения в контекст, доступный веб-клиенту. Разберем по шагам, что для этого нужно сделать.

  1. Проверьте директиву компиляции процедуры, которую вы передаете в ОписаниеОповещения.
  2. Если процедура объявлена с директивой &НаСервере, измените её на &НаКлиенте.
  3. Убедитесь, что процедура объявлена как Экспорт.

Рассмотрим пример правильной структуры процедуры обработки прогресса:


&НаКлиенте
Процедура ПрогрессВыполнения(Результат, ДополнительныеПараметры) Экспорт
    // Здесь выполняем клиентскую логику обработки данных фонового задания
    Если Результат.Статус = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
        ОтключитьОбработчикОжидания("ОбработчикОжиданияИндикатор");
    КонецЕсли;
    
    // При необходимости вызываем серверный метод для получения детальных данных
    ПрочитатьПрогрессНаСервере(Результат.ИдентификаторЗадания);
КонецПроцедуры

Почему &НаСервере не подходит для callback-функции

Механизм ВыполнитьОбработкуОповещения ожидает, что функция-обработчик будет найдена в контексте формы на стороне клиента. Поскольку веб-клиент исполняется в браузере, он не имеет прямого доступа к серверному контексту 1С для вызова методов напрямую. Когда платформа пытается выполнить вызов по имени, она обращается к доступным экспортным методам формы на клиенте. Не находя их (так как они живут на сервере), она возвращает ошибку Object method not found.

Рекомендации по отладке и проверке

Чтобы убедиться, что проблема локализована верно, мы рекомендуем выполнить следующие действия:

Во-первых, проанализируйте содержимое ОписаниеОповещения в отладчике. Убедитесь, что имя метода в строке соответствует имени вашей процедуры.

Во-вторых, если отладка в веб-клиенте затруднена, используйте логирование (метод ЗаписатьЛог или просто Сообщить) внутри процедур, чтобы понять, на каком этапе выполнение прерывается. Если управление не попадает в процедуру, это верный признак того, что платформа не может разрешить ссылку на метод из-за неверной директивы компиляции.

В-третьих, проверьте, что сама переменная ДлительнаяОперация содержит корректную структуру оповещения. В механизме ДлительныеОперации БСП важно правильно заполнять параметры, чтобы платформа могла корректно сформировать обратный вызов (callback).

Заключение

Работая с веб-клиентом 1С, всегда помните о строгом разделении контекстов. Клиентские события (оповещения) требуют клиентских обработчиков. Если вам требуется выполнить тяжелую логику на сервере, делайте это внутри клиентского метода через вызов серверного, а не пытайтесь сделать саму точку входа серверной. Этот подход обеспечит стабильную работу вашего кода во всех типах клиентов: от толстого до веб-версии в браузере.

← На главную