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