Как исправить ошибку «Метод объекта не обнаружен (ФормаВыполненияЗадачи)» при открытии задачи бизнес-процесса в 1С?

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

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

Ошибка при выполнении обработчика - 'ОбработкаПолученияФормы' по причине: Метод объекта не обнаружен (ФормаВыполненияЗадачи)

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

Выясняем причину возникновения ошибки

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

{ОбщийМодуль.БизнесПроцессыИЗадачиВызовСервера.Модуль(33)}: ПараметрыФормы = БизнесПроцессы[ТипБизнесПроцесса.Имя].ФормаВыполненияЗадачи(ЗадачаСсылка...
{Задача.ЗадачаИсполнителя.МодульМенеджера(53)}: ПараметрыФормы = БизнесПроцессыИЗадачиВызовСервера.ФормаВыполненияЗадачи(Параметры.Ключ);

Дело в том, что в БСП процесс открытия форм задач полностью унифицирован и централизован. Когда пользователь дважды кликает по задаче в списке, стандартная задача ЗадачаИсполнителя перехватывает это действие в событии получения формы. Она пытается динамически определить, какую именно форму нужно показать пользователю.

Для этого система обращается к модулю менеджера конкретного бизнес-процесса, к которому привязана текущая задача. БСП ожидает найти в модуле менеджера вашего бизнес-процесса экспортную функцию с именем ФормаВыполненияЗадачи. Если этой функции там нет, либо она объявлена без ключевого слова Экспорт, система закономерно вызывает исключение «Метод объекта не обнаружен».

Ошибку можно спровоцировать тремя основными действиями:

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

Шаг 1. Реализуем функцию ФормаВыполненияЗадачи в модуле менеджера БП

Чтобы исправить ошибку, откроем конфигуратор, найдем наш разрабатываемый бизнес-процесс и перейдем в его модуль менеджера. Нам необходимо добавить экспортную функцию ФормаВыполненияЗадачи, которая будет возвращать структуру с именем открываемой формы и параметрами этой формы.

Рассмотрим стандартный шаблон этой функции, который рекомендуется использовать в проектах на базе БСП:


#Область ПрограммныйИнтерфейс

// Получить структуру с описанием формы выполнения задачи.
//
// Параметры:
//  ЗадачаСсылка        - ЗадачаСсылка.ЗадачаИсполнителя - ссылка на задачу.
//  ТочкаМаршрутаСсылка - ТочкаМаршрутаСсылка - точка маршрута, на которой находится задача.
//
// Возвращаемое значение:
//  Структура - структура с ключами:
//     * ИмяФормы       - Строка - полное имя формы.
//     * ПараметрыФормы - Структура - параметры, которые будут переданы в форму при её открытии.
//
Функция ФормаВыполненияЗадачи(ЗадачаСсылка, ТочкаМаршрутаСсылка) Экспорт
    
    Результат = Новый Структура;
    
    // Вариант 1: Если для абсолютно всех задач этого БП используется одна стандартная форма задачи
    Результат.Вставить("ИмяФормы", "Задача.ЗадачаИсполнителя.Форма.ФормаЗадачи");
    Результат.Вставить("ПараметрыФормы", Новый Структура("Ключ", ЗадачаСсылка));
    
    // Вариант 2: Если для разных шагов (точек маршрута) бизнес-процесса требуются разные формы
    // Нам потребуется выполнить проверку точки маршрута:
    //
    // Если ТочкаМаршрутаСсылка = БизнесПроцессы.ИмяВашегоБизнесПроцесса.ТочкиМаршрута.Согласование Руководителем Тогда
    //     Результат.Вставить("ИмяФормы", "БизнесПроцесс.ИмяВашегоБизнесПроцесса.Форма.ФормаСогласования");
    //     Результат.Вставить("ПараметрыФормы", Новый Структура("Ключ", ЗадачаСсылка));
    // КонецЕсли;
    
    Возврат Результат;
    
КонецФункции

#КонецОбласти

Обратите внимание на ключевое слово Экспорт в объявлении функции. Без него общий модуль БСП не сможет «дотянуться» до этого метода, и ошибка повторится вновь.

Шаг 2. Интеграция с подсистемой задач БСП (Обязательные сопутствующие методы)

Если вы просто добавите одну функцию ФормаВыполненияЗадачи, в дальнейшем вы рискуете столкнуться с аналогичными ошибками при попытке перенаправить задачу другому исполнителю или при групповом выполнении задач из списков. БСП требует комплексной поддержки интерфейса взаимодействия со стороны бизнес-процесса.

Проверим, зарегистрирован ли ваш бизнес-процесс в подсистеме БСП. Откроем общий модуль БизнесПроцессыИЗадачиПереопределяемый и найдем в нем процедуру ПриОпределенииБизнесПроцессов. Здесь регистрируются все процессы, работающие с задачами:


Процедура ПриОпределенииБизнесПроцессов(ПодключенныеБизнесПроцессы) Экспорт
    
    // Здесь регистрируются бизнес-процессы конфигурации
    ПодключенныеБизнесПроцессы.Вставить(Метаданные.БизнесПроцессы.ИмяВашегоБизнесПроцесса.Имя, Истина);
    
КонецПроцедуры

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

Метод 1: ОбработкаВыполненияПоУмолчанию. Этот метод вызывается системой, когда задача выполняется программно или групповым методом из интерфейса списка задач без интерактивного открытия самой формы.


// Выполняет задачу по умолчанию, без открытия интерактивной формы выполнения задачи.
//
// Параметры:
//  ЗадачаСсылка        - ЗадачаСсылка.ЗадачаИсполнителя - выполняемая задача.
//  БизнесПроцессСсылка - БизнесПроцессСсылка - бизнес-процесс задачи.
//  ТочкаМаршрутаСсылка - ТочкаМаршрутаСсылка - точка маршрута задачи.
//
Процедура ОбработкаВыполненияПоУмолчанию(ЗадачаСсылка, БизнесПроцессСсылка, ТочкаМаршрутаСсылка) Экспорт
	
	// Здесь описывается логика автоматического прохождения шага.
	// Например, установка реквизитов выполнения по умолчанию и запись задачи.
	
КонецПроцедуры

Метод 2: ПриПеренаправленииЗадачи. Данная процедура вызывается системой БСП в тот момент, когда текущий исполнитель перенаправляет задачу своему коллеге.


// Вызывается перед перенаправлением задачи.
//
// Параметры:
//  ЗадачаСсылка     - ЗадачаСсылка.ЗадачаИсполнителя - перенаправляемая задача.
//  НовыеИсполнители - Массив - массив структур, описывающих новых исполнителей задачи.
//  УдерживатьЗадачу - Булево - признак необходимости удержания задачи текущим исполнителем.
//
Процедура ПриПеренаправленииЗадачи(ЗадачаСсылка, НовыеИсполнители, УдерживатьЗадачу) Экспорт
	
	// Здесь может быть описана кастомная логика ведения истории перенаправлений
	// или отправка уведомлений новым участникам бизнес-процесса.
	
КонецПроцедуры

Подведем итоги

Разберем по шагам алгоритм наших действий при возникновении подобных ошибок:

  1. Не пугайтесь страшного текста ошибки. Первым делом определите, какой именно бизнес-процесс ее вызывает.
  2. Перейдите в модуль менеджера этого бизнес-процесса и убедитесь, что в нем присутствует экспортная функция ФормаВыполненияЗадачи.
  3. Реализуйте возвращаемую структуру, указав в ней имя формы (стандартной формы задачи или вашей специализированной формы шага процесса).
  4. Для бесперебойной работы подсистемы задач БСП добавьте процедуры-пустышки (или наполните их реальной логикой) ОбработкаВыполненияПоУмолчанию и ПриПеренаправленииЗадачи.
  5. Запустите конфигурацию в режиме «1С:Предприятие» и проверьте интерактивное открытие задачи. Теперь форма откроется без каких-либо ошибок!
← На главную