При разработке собственных бизнес-процессов в конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП) (таких как «1С:Управление торговлей 11», «1С:ERP Управление предприятием», «1С:Комплексная автоматизация» и др.), разработчики часто сталкиваются с неприятной ошибкой при попытке пользователя открыть задачу. Сам бизнес-процесс при этом может стартовать и работать абсолютно корректно, но стоит попытаться интерактивно открыть задачу, как система аварийно завершает работу с сообщением:
Ошибка при выполнении обработчика - 'ОбработкаПолученияФормы' по причине: Метод объекта не обнаружен (ФормаВыполненияЗадачи)
В этой статье мы подробно разберем, почему возникает данная ошибка, как устроен механизм централизованного управления формами задач в БСП, и пошагово реализуем необходимый программный код, чтобы решить эту проблему раз и навсегда.
Проанализируем технологический стек ошибки. Из текста исключения видно, что вызов передается из модуля менеджера задачи исполнителя в общий модуль подсистемы бизнес-процессов:
{ОбщийМодуль.БизнесПроцессыИЗадачиВызовСервера.Модуль(33)}: ПараметрыФормы = БизнесПроцессы[ТипБизнесПроцесса.Имя].ФормаВыполненияЗадачи(ЗадачаСсылка...
{Задача.ЗадачаИсполнителя.МодульМенеджера(53)}: ПараметрыФормы = БизнесПроцессыИЗадачиВызовСервера.ФормаВыполненияЗадачи(Параметры.Ключ);
Дело в том, что в БСП процесс открытия форм задач полностью унифицирован и централизован. Когда пользователь дважды кликает по задаче в списке, стандартная задача ЗадачаИсполнителя перехватывает это действие в событии получения формы. Она пытается динамически определить, какую именно форму нужно показать пользователю.
Для этого система обращается к модулю менеджера конкретного бизнес-процесса, к которому привязана текущая задача. БСП ожидает найти в модуле менеджера вашего бизнес-процесса экспортную функцию с именем ФормаВыполненияЗадачи. Если этой функции там нет, либо она объявлена без ключевого слова Экспорт, система закономерно вызывает исключение «Метод объекта не обнаружен».
Ошибку можно спровоцировать тремя основными действиями:
Чтобы исправить ошибку, откроем конфигуратор, найдем наш разрабатываемый бизнес-процесс и перейдем в его модуль менеджера. Нам необходимо добавить экспортную функцию ФормаВыполненияЗадачи, которая будет возвращать структуру с именем открываемой формы и параметрами этой формы.
Рассмотрим стандартный шаблон этой функции, который рекомендуется использовать в проектах на базе БСП:
#Область ПрограммныйИнтерфейс
// Получить структуру с описанием формы выполнения задачи.
//
// Параметры:
// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - ссылка на задачу.
// ТочкаМаршрутаСсылка - ТочкаМаршрутаСсылка - точка маршрута, на которой находится задача.
//
// Возвращаемое значение:
// Структура - структура с ключами:
// * ИмяФормы - Строка - полное имя формы.
// * ПараметрыФормы - Структура - параметры, которые будут переданы в форму при её открытии.
//
Функция ФормаВыполненияЗадачи(ЗадачаСсылка, ТочкаМаршрутаСсылка) Экспорт
Результат = Новый Структура;
// Вариант 1: Если для абсолютно всех задач этого БП используется одна стандартная форма задачи
Результат.Вставить("ИмяФормы", "Задача.ЗадачаИсполнителя.Форма.ФормаЗадачи");
Результат.Вставить("ПараметрыФормы", Новый Структура("Ключ", ЗадачаСсылка));
// Вариант 2: Если для разных шагов (точек маршрута) бизнес-процесса требуются разные формы
// Нам потребуется выполнить проверку точки маршрута:
//
// Если ТочкаМаршрутаСсылка = БизнесПроцессы.ИмяВашегоБизнесПроцесса.ТочкиМаршрута.Согласование Руководителем Тогда
// Результат.Вставить("ИмяФормы", "БизнесПроцесс.ИмяВашегоБизнесПроцесса.Форма.ФормаСогласования");
// Результат.Вставить("ПараметрыФормы", Новый Структура("Ключ", ЗадачаСсылка));
// КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
Обратите внимание на ключевое слово Экспорт в объявлении функции. Без него общий модуль БСП не сможет «дотянуться» до этого метода, и ошибка повторится вновь.
Если вы просто добавите одну функцию ФормаВыполненияЗадачи, в дальнейшем вы рискуете столкнуться с аналогичными ошибками при попытке перенаправить задачу другому исполнителю или при групповом выполнении задач из списков. БСП требует комплексной поддержки интерфейса взаимодействия со стороны бизнес-процесса.
Проверим, зарегистрирован ли ваш бизнес-процесс в подсистеме БСП. Откроем общий модуль БизнесПроцессыИЗадачиПереопределяемый и найдем в нем процедуру ПриОпределенииБизнесПроцессов. Здесь регистрируются все процессы, работающие с задачами:
Процедура ПриОпределенииБизнесПроцессов(ПодключенныеБизнесПроцессы) Экспорт
// Здесь регистрируются бизнес-процессы конфигурации
ПодключенныеБизнесПроцессы.Вставить(Метаданные.БизнесПроцессы.ИмяВашегоБизнесПроцесса.Имя, Истина);
КонецПроцедуры
Если ваш бизнес-процесс добавлен в этот список (или вы планируете его туда добавить для полноценной интеграции), вам обязательно нужно разместить в модуле менеджера вашего бизнес-процесса еще два метода.
Метод 1: ОбработкаВыполненияПоУмолчанию. Этот метод вызывается системой, когда задача выполняется программно или групповым методом из интерфейса списка задач без интерактивного открытия самой формы.
// Выполняет задачу по умолчанию, без открытия интерактивной формы выполнения задачи.
//
// Параметры:
// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - выполняемая задача.
// БизнесПроцессСсылка - БизнесПроцессСсылка - бизнес-процесс задачи.
// ТочкаМаршрутаСсылка - ТочкаМаршрутаСсылка - точка маршрута задачи.
//
Процедура ОбработкаВыполненияПоУмолчанию(ЗадачаСсылка, БизнесПроцессСсылка, ТочкаМаршрутаСсылка) Экспорт
// Здесь описывается логика автоматического прохождения шага.
// Например, установка реквизитов выполнения по умолчанию и запись задачи.
КонецПроцедуры
Метод 2: ПриПеренаправленииЗадачи. Данная процедура вызывается системой БСП в тот момент, когда текущий исполнитель перенаправляет задачу своему коллеге.
// Вызывается перед перенаправлением задачи.
//
// Параметры:
// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - перенаправляемая задача.
// НовыеИсполнители - Массив - массив структур, описывающих новых исполнителей задачи.
// УдерживатьЗадачу - Булево - признак необходимости удержания задачи текущим исполнителем.
//
Процедура ПриПеренаправленииЗадачи(ЗадачаСсылка, НовыеИсполнители, УдерживатьЗадачу) Экспорт
// Здесь может быть описана кастомная логика ведения истории перенаправлений
// или отправка уведомлений новым участникам бизнес-процесса.
КонецПроцедуры
Разберем по шагам алгоритм наших действий при возникновении подобных ошибок:
ФормаВыполненияЗадачи.ОбработкаВыполненияПоУмолчанию и ПриПеренаправленииЗадачи.