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