Почему возникает ошибка «Метод задания не найден» в регламентном задании 1С и как её исправить?

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

При настройке и разработке регламентных заданий в платформе 1С:Предприятие разработчики нередко сталкиваются с ситуацией, когда задание завершается аварийно, а в журнале регистрации фиксируется запись вида: «Метод задания не найден: ИмяМодуля:ИмяПроцедуры()». При этом сама экспортная процедура существует в конфигурации, синтаксический контроль проходит успешно, а флаги общего модуля выставлены.

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

Причина 1. Некорректное заполнение поля «Имя метода» в свойствах регламентного задания

Самая распространенная причина ошибки — синтаксическая неточность при заполнении реквизита Имя метода в ветке метаданных РегламентныеЗадания. В этом поле должно указываться имя общего модуля и имя экспортной процедуры через точку без дополнительных символов и без круглых скобок на конце.

Проанализируем типичные ошибки ввода:

  1. Наличие скобок в свойстве: если в свойстве указать ДополнительноКТиповойСервер.ЗагрузитьКурсыВалютРегламентнымЗаданием(), платформа воспримет круглые скобки как часть имени процедуры. При попытке перехода по кнопке с лупой среда разработки предложит создать новую процедуру вида ЗагрузитьКурсыВалютРегламентнымЗаданием() ().
  2. Использование двоеточия: обратите внимание, что в журнале регистрации платформа разделяет имя модуля и метода двоеточием для служебного протоколирования. Однако в конфигураторе в поле Имя метода разделителем всегда выступает только точка.

Правильный формат строки в метаданных: ИмяОбщегоМодуля.ИмяЭкспортнойПроцедуры.

Причина 2. Ограничения и некорректные свойства общего модуля

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

  1. Флаг «Сервер»: в свойствах общего модуля обязательно должен быть установлен признак Сервер. Если модуль доступен только на клиенте или во внешнем соединении, фоновый процесс сервера его не увидит.
  2. Флаг «Глобальный»: для фоновых заданий модуль не должен быть глобальным. Платформа обращается к методу по полному пути через точку. Если включен флаг Глобальный, пространство имен модуля становится общим, и вызов в формате Модуль.Метод приводит к исключению.
  3. Экспортность процедуры: процедура должна иметь ключевое слово Экспорт и не должна быть функцией.
  4. Параметры процедуры: процедура-обработчик регламентного задания должна быть процедурой без обязательных параметров, либо все параметры должны иметь значения по умолчанию.

Причина 3. Директивы препроцессора и отсечение контекста

Даже если у модуля установлены серверные флаги, тело процедуры или весь модуль могут быть ошибочно ограничены условиями компиляции.

Проверим код на наличие следующих инструкций препроцессора:


#Если Клиент Тогда
    // Данный код не скомпилируется на сервере регламентных заданий
    Процедура ЗагрузитьКурсыВалютРегламентнымЗаданием() Экспорт
        // Логика
    КонецПроцедуры
#КонецЕсли

Для корректной работы процедуры регламентного задания она должна компилироваться на сервере без клиентских ограничений (например, без директив #Если ТолстыйКлиентОбычноеПриложение или #Если Клиент).

Причина 4. Рассинхронизация метаданных с таблицей регламентных заданий в базе данных

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

Разберем, как актуализировать задание в базе:

  1. Откроем в режиме «1С:Предприятие» стандартную обработку «Консоль регламентных заданий» или форму «Регламентные и фоновые задания» (в типовых конфигурациях).
  2. Найдем проблемное задание и проверим фактическое значение поля метода.
  3. Если поле содержит старое значение, перезапишем задание вручную или обновим его программно.

Причина 5. Кэширование рабочих процессов кластера серверов 1С

В клиент-серверном варианте работы кластер серверов (процессы rphost) активно кэширует скомпилированные модули и метаданные. При динамическом обновлении конфигурации (так называемом «демоническом обновлении») рабочий процесс, обслуживающий фоновые задания, может продолжать использовать старую версию модуля, где новая процедура еще отсутствует.

Для устранения проблемы кэширования выполним следующие действия:

  1. Произведем полное обновление конфигурации базы данных в монопольном режиме.
  2. Очистим серверный кэш конфигурации на сервере 1С.
  3. Перезапустим службу сервера 1С:Предприятия (1C:Enterprise Server Agent) либо перезапустим рабочие процессы через утилиту администрирования кластера.

Диагностика и проверка доступности метода

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


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

Этот способ позволяет сразу перехватить реальное исключение времени выполнения и убедиться, что процедура корректно компилируется и доступна серверному контексту.

← На главную