В типовой конфигурации 1С:Документооборот бизнес-процесс Согласование по умолчанию предполагает, что после завершения цикла согласования автор или другие заинтересованные лица должны получить задачу «Ознакомиться с результатом согласования». Однако в рамках автоматизации комплексных процессов часто возникает потребность исключить это лишнее звено, чтобы процесс переходил на следующий этап мгновенно, без ожидания действий пользователя. Рассмотрим подробнее, как это реализовать программно и с помощью настроек системы.
Разберем наиболее радикальный способ, который обсуждался на форуме. Он заключается в редактировании модуля бизнес-процесса Согласование. Если нам необходимо, чтобы задача ознакомления вообще не создавалась, мы можем вмешаться в логику формирования задач на точках маршрута. Для управления созданием задач на точках маршрута можно использовать инструмент отключения задач ознакомления через регистр настроек.
Проанализируем ситуацию: в модуле объекта бизнес-процесса Согласование существуют предопределенные процедуры-обработчики точек маршрута. Чтобы заблокировать создание задачи ознакомления, выполним следующие действия:
ОзнакомитьсяПередСозданиемЗадач.Возврат.Пример кода для внесения изменений:
Процедура ОзнакомитьсяПередСозданиемЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, СтандартнаяОбработка)
// Прерываем создание задачи ознакомления
Возврат;
// Типовой код ниже не будет выполнен
// ...
КонецПроцедуры
Процедура ЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ)
// Если задача ознакомления создается при завершении (для вложенных процессов),
// также прерываем выполнение
Возврат;
КонецПроцедуры
Важный нюанс: использование оператора Возврат может привести к тому, что точка маршрута не будет пройдена корректно, и бизнес-процесс «зависнет» в статусе «Активен» без активных задач. Чтобы этого избежать, убедитесь, что логика перехода к следующей точке в комплексном процессе не завязана на физическое наличие выполненной задачи ознакомления.
Более «чистый» и современный подход, который мы рекомендуем использовать в версиях 2.1 и выше — это механизм Обработчиков бизнес-событий. Вместо того чтобы ломать типовой код процесса, мы позволим системе создать задачу, но тут же программно её выполним.
Разберем по шагам, как настроить такой обработчик:
Старт задачи.Проанализируем пример кода для такого обработчика:
Задача = Событие.Источник;
// Проверяем, что задача принадлежит процессу ознакомления
Если ТипЗнч(Задача.БизнесПроцесс) = Тип("БизнесПроцессСсылка.Ознакомление") Тогда
// Дополнительно можно проверить, что это именно ознакомление по результатам согласования
Если Задача.БизнесПроцесс.ГлавныйБизнесПроцесс Ссылка БизнесПроцессСсылка.Согласование Тогда
ЗадачаОбъект = Задача.ПолучитьОбъект();
// Устанавливаем результат, если это требуется логикой задачи
ЗадачаОбъект.ВыполнитьЗадачу();
КонецЕсли;
КонецЕсли;
Этот метод хорош тем, что сохраняется вся история процесса: задача будет видна в списке выполненных, будет понятно, когда она была создана и завершена, но при этом пользователю не придется делать это вручную.
Прежде чем приступать к написанию кода, давайте посмотрим на штатные возможности 1С:Документооборот 2.1. Часто задачу ознакомления можно отключить простыми настройками в шаблоне бизнес-процесса Согласование.
Выясним, где это находится:
Согласование.Согласовано и Согласовано с замечаниями.Если эти настройки заданы в шаблоне, который используется внутри комплексного процесса, задача ознакомления просто не будет инициирована логикой самого процесса. Это самый безопасный способ, не требующий внесения изменений в конфигурацию.
В редакции 3.0 архитектура процессов претерпела значительные изменения. Здесь мы оперируем не бизнес-процессами, а «Действиями». Рассмотрим, как решить нашу задачу в этой версии.
В «тройке» ознакомление с результатами настраивается непосредственно в карточке действия Согласование. В блоке Участники есть отдельная роль для ознакомления. Чтобы убрать автоматическую задачу, достаточно отредактировать состав участников в правилах обработки документов, удалив оттуда автоматическое добавление автора.
Если же требуется именно программное решение в 3.0, его следует внедрять через расширение в модуле РаботаСЗадачамиСобытия или аналогичных, анализируя тип выполняемого действия (Action).
При реализации автоматического выполнения задач ознакомления следует учитывать несколько критически важных моментов, которые мы выявили в ходе анализа практики внедрений:
ВыполнитьЗадачу()) в момент её же создания, это может привести к конфликту блокировок в базе данных. Проанализируйте возможность использования отложенных обработчиков или фоновых заданий с паузой в 1-2 секунды.Возврат), статус документа может не измениться на Согласован, так как система будет ждать завершения всех веток маршрута. Именно поэтому программное выполнение всегда предпочтительнее блокировки создания.Таким образом, мы рассмотрели несколько вариантов решения: от простого отключения в настройках до гибкого управления через обработчики бизнес-событий. Выбор метода зависит от вашей версии программы и специфики бизнес-логики предприятия. При необходимости можно воспользоваться готовым расширением для отключения задач ознакомления.