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