Как передать данные из задачи в условия маршрутизации комплексного процесса?

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

В процессе автоматизации документооборота часто возникает необходимость изменить логику движения процесса в зависимости от данных, которые исполнитель ввел на одном из промежуточных этапов. Например, если при проверке документа сотрудник указал, что требуется дополнительное согласование с юристом, процесс должен автоматически направить задачу в соответствующий отдел. Разберем подробно, как реализовать такую логику в 1С:Документооборот (версии 2.1 и 3.0).

Анализ механизмов трансляции реквизитов

Для начала проанализируем, как система работает с данными «из коробки». Важно понимать разницу между объектами ЗадачаИсполнителя, БизнесПроцесс и Предмет (карточка документа). В стандартном функционале реализована автоматическая трансляция дополнительных реквизитов только в одну сторону: из предмета в задачу. Это происходит в момент генерации задачи по шаблону. Если в карточке документа заполнен доп. реквизит, и такой же реквизит настроен для задачи, значение будет скопировано.

Однако обратная трансляция (из задачи в предмет или в сам процесс) автоматически не работает. Если исполнитель заполнит реквизит в своей задаче, эти данные останутся внутри этой задачи и не «всплывут» на уровень процесса или документа без дополнительных настроек. Рассмотрим основные способы решения этой проблемы.

Способ 1. Использование дополнительных реквизитов процесса (Рекомендуемый)

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

  1. Перейдем в настройки дополнительных реквизитов и добавим нужный реквизит (например, ТребуетсяВыезд с типом Булево) к объекту Комплексный процесс.
  2. В шаблоне комплексного процесса на конкретном этапе (действии) настроим видимость этого реквизита. В настройках задачи можно указать, что исполнитель должен видеть и иметь возможность редактировать реквизиты родительского процесса.
  3. В условиях маршрутизации (перехода к следующему шагу) создадим условие, где объектом проверки будет выступать Комплексный процесс.

Поскольку реквизит принадлежит самому процессу, он доступен на любом этапе маршрута. Это избавляет от необходимости писать скрипты для поиска «предыдущей задачи» и чтения её данных.

Способ 2. Использование вспомогательных предметов

Проанализируем ситуацию, когда результатом этапа является не просто выбор «Да/Нет», а какой-либо объект или документ. В 1С:Документооборот существует понятие «Предметы процесса».

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

Способ 3. Реализация через скрипты (для версии 2.1)

Если бизнес-логика требует сложной обработки и стандартных условий недостаточно, воспользуемся программным кодом. В версии 2.1 это реализуется через Скрипты в процессах. Выясним, как передать значение из выполненной задачи в основной предмет документа.

В шаблоне действия (например, «Исполнение») на вкладке «Дополнительно» можно прописать скрипт при завершении. Рассмотрим пример кода:


// Скрипт при завершении задачи
// Получаем основной предмет процесса
Предмет = БизнесПроцесс.ОсновнойПредмет.Предмет;

// Находим нужное свойство (доп. реквизит) у предмета
СвойствоДляЗаписи = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("СтатусПослеПроверки");

// Получаем значение из задачи (текущий объект задачи доступен как ЗадачаОбъект)
ЗначениеИзЗадачи = "";
Для Каждого Стр Из ЗадачаОбъект.ДополнительныеРеквизиты Цикл
    Если Стр.Свойство = СвойствоДляЗаписи Тогда
        ЗначениеИзЗадачи = Стр.Значение;
        Прервать;
    КонецЕсли;
КонецЦикла;

// Записываем значение в карточку документа
Если ЗначениеЗаполнено(ЗначениеИзЗадачи) Тогда
    ОбъектПредмета = Предмет.ПолучитьОбъект();
    СтрокаРеквизита = ОбъектПредмета.ДополнительныеРеквизиты.Найти(СвойствоДляЗаписи, "Свойство");
    Если СтрокаРеквизита = Неопределено Тогда
        СтрокаРеквизита = ОбъектПредмета.ДополнительныеРеквизиты.Добавить();
        СтрокаРеквизита.Свойство = СвойствоДляЗаписи;
    КонецЕсли;
    СтрокаРеквизита.Значение = ЗначениеИзЗадачи;
    ОбъектПредмета.Записать();
КонецЕсли;

Этот метод позволяет транслировать данные «снизу вверх» — из частной задачи в общую карточку документа, после чего любое стандартное условие маршрутизации сможет прочитать этот реквизит из предмета.

Способ 4. «Результаты обработки» в версии 3.0

В современной версии 1С:Документооборот 3.0 подход к ветвлению процессов кардинально изменился. Разберем механизм «Результатов выполнения действий». Теперь не обязательно создавать дополнительные реквизиты, если целью является просто выбор направления маршрута.

В настройках действия (Согласование, Утверждение, Исполнение) можно задать произвольные варианты результата. Например:

Эти результаты исполнитель выбирает кнопками в самой задаче. В схеме комплексного процесса (обработке документа) переходы настраиваются напрямую от этих результатов. Система «видит» выбор пользователя без использования доп. реквизитов и вспомогательных объектов.

Когда стоит использовать доп. реквизиты именно в задачах?

Несмотря на наличие более удобных способов для маршрутизации, доп. реквизиты задач (ЗадачаИсполнителя) остаются полезными в следующих сценариях:

  1. Заполнение чек-листов: Когда исполнителю нужно подтвердить выполнение ряда технических условий, которые не важны для истории документа, но важны для контроля качества работы.
  2. Специфические данные этапа: Например, «Номер транспортной накладной» или «Дата визита курьера», которые нужны только следующему исполнителю в цепочке и не должны загромождать карточку основного документа.

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

← На главную