К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как программно создать бизнес-процесс в 1С

Как программно создать и запустить бизнес-процесс в 1С: работа с менеджером объекта, заполнение реквизитов, старт процесса, типичные ошибки и примеры кода.

Программное создание бизнес-процесса в 1С — стандартная задача при автоматизации согласований, маршрутов задач и интеграционных сценариев. Вместо того чтобы пользователь вручную заводил процесс через интерфейс, код сам создаёт объект, заполняет его реквизиты, записывает и стартует. Это нужно, когда процесс должен запускаться по событию: при проведении документа, по расписанию регламентного задания или при получении данных из внешней системы.

В основе механизма лежит менеджер конкретного вида бизнес-процесса — БизнесПроцессы.<ИмяПроцесса>. Через него вызывается метод СоздатьБизнесПроцесс(), который возвращает объект, ещё не записанный в базу. Дальше разработчик заполняет реквизиты, записывает объект и при необходимости вызывает метод Старт(), который формирует задачи исполнителям согласно карте маршрута.

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

Когда нужно программное создание процесса

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

Программный запуск также незаменим при тестировании карты маршрута: вместо ручных действий разработчик создаёт процесс из консоли кода или внешней обработки и сразу проверяет, какие задачи сформировались и кому они адресованы.

Маршрут решения

Как выбрать способ запуска

Процесс должен стартовать при записи или проведении документаИспользуйте подписку на событие ПриЗаписи и создавайте процесс в её обработчике
Процессы запускаются периодически по данным базыСоздайте регламентное задание, которое отбирает объекты и стартует процессы
Запуск инициирует внешняя системаОпубликуйте HTTP-сервис и создавайте процесс в его обработчике
Нужен разовый запуск для отладкиИспользуйте консоль кода или внешнюю обработку с кнопкой запуска

Базовый код создания и старта процесса

Минимальный рабочий фрагмент выглядит так:

НовыйПроцесс = БизнесПроцессы.СогласованиеЗаявки.СоздатьБизнесПроцесс();

НовыйПроцесс.Дата = ТекущаяДатаСеанса();

НовыйПроцесс.Автор = Пользователи.ТекущийПользователь();

НовыйПроцесс.Предмет = СсылкаНаДокумент;

НовыйПроцесс.Записать();

НовыйПроцесс.Старт();

Метод СоздатьБизнесПроцесс() возвращает объект типа «БизнесПроцессОбъект». До вызова Записать() в базе ничего нет — все изменения существуют только в памяти. После записи у процесса появляется ссылка, которую можно сохранить в реквизит документа или регистр сведений для дальнейшего отслеживания статуса.

Метод Старт() можно вызвать только у записанного объекта. При старте система выполняет обработчики точек маршрута, вычисляет адресатов и создаёт задачи. Если карта маршрута содержит условия, опирающиеся на реквизиты процесса, все нужные значения должны быть заполнены до старта — иначе процесс пойдёт по неправильной ветке или упадёт с ошибкой.

Заполнение реквизитов и параметров адресации

Состав обязательных реквизитов зависит от конфигурации. Обычно это автор, предмет (документ-основание), инициатор, а также параметры, влияющие на маршрут: сумма, подразделение, вид операции. Если в карте маршрута задачи адресуются через роли и предметы адресации (например, «Руководитель подразделения»), соответствующие реквизиты должны быть заполнены корректно, иначе задача уйдёт не тому исполнителю или не будет создана вовсе.

Табличные части процесса заполняются как у любого объекта:

НоваяСтрока = НовыйПроцесс.Исполнители.Добавить();

НоваяСтрока.Исполнитель = Справочники.Пользователи.НайтиПоНаименованию("Иванов И.И.");

НоваяСтрока.ПорядокСогласования = 1;

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

Типичные ошибки
01
Старт процесса без предварительной записи — метод Старт() вызывает исключение, так как у объекта ещё нет ссылки
02
Незаполненные параметры адресации — задачи создаются без исполнителя или уходят не тому сотруднику
03
Создание процесса в цикле без транзакции — при ошибке в середине часть процессов записана, часть нет, данные рассогласованы
04
Дублирование процессов по одному документу — перед созданием не проверяется, есть ли уже активный процесс по этому предмету

Создание процесса в подписке на событие и транзакции

Самый распространённый сценарий — старт согласования при проведении документа. Создаётся подписка на событие ПриЗаписи документа, в обработчике которой проверяются условия (режим проведения, сумма, вид документа) и при их выполнении создаётся процесс:

Процедура ЗапускСогласованияПриЗаписи(Источник, Отказ) Экспорт

Если Не Источник.Проведен Тогда

Возврат;

КонецЕсли;

Если ПроцессПоДокументуУжеАктивен(Источник.Ссылка) Тогда

Возврат;

КонецЕсли;

Процесс = БизнесПроцессы.СогласованиеЗаявки.СоздатьБизнесПроцесс();

Процесс.Дата = ТекущаяДатаСеанса();

Процесс.Предмет = Источник.Ссылка;

Процесс.Автор = Источник.Ответственный;

Процесс.Записать();

Процесс.Старт();

КонецПроцедуры;

Подписка на событие выполняется внутри транзакции записи документа. Это значит: если старт процесса завершится ошибкой и вы установите Отказ = Истина, откатится и запись документа. Решите заранее, должна ли ошибка процесса блокировать документ, или её достаточно зафиксировать в журнале регистрации и продолжить. Второй вариант безопаснее для пользователей, но требует механизма повторного запуска.

Проверка результата после создания

После старта убедитесь, что процесс действительно работает: у объекта установлено свойство Стартован = Истина и Завершен = Ложь, а в базе появились задачи со ссылкой на этот бизнес-процесс. Проверить можно запросом к задачам:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ Задача.Ссылка, Задача.Исполнитель

|ИЗ Задача.ЗадачаИсполнителя КАК Задача

|ГДЕ Задача.БизнесПроцесс = &Процесс И НЕ Задача.Выполнена";

Запрос.УстановитьПараметр("Процесс", НовыйПроцесс.Ссылка);

В пользовательском интерфейсе результат виден в списке бизнес-процессов (процесс отображается как стартованный) и в списке задач исполнителя. Если задач нет — смотрите журнал регистрации: ошибки адресации и обработчиков точек маршрута фиксируются там.

Контрольные точки

Как проверить результат

Свойство Стартован у объекта процесса
Норма

Равно Истина

Тревожный признак

Ложь — процесс записан, но не запущен, задач не будет

Задачи по процессу в базе
Норма

Есть активные задачи с заполненным исполнителем

Тревожный признак

Задач нет или исполнитель пуст — ошибка адресации

Журнал регистрации
Норма

Нет ошибок в момент старта

Тревожный признак

Ошибки в обработчиках точек маршрута или проверках условий

Ограничения, права и альтернативы

Программное создание требует у пользователя (или под пользователем регламентного задания) прав на добавление бизнес-процессов данного вида и на чтение всех объектов, участвующих в заполнении. Если процесс стартует из регламентного задания, убедитесь, что у служебного пользователя есть права и на создание задач, иначе старт завершится ошибкой доступа.

Если задача сводится к простому уведомлению или одному согласованию без сложной маршрутизации, полноценный бизнес-процесс может быть избыточен — иногда достаточно программного создания задачи напрямую через Задачи.ЗадачаИсполнителя.СоздатьЗадачу(). Но при многошаговых маршрутах, условиях и параллельных ветвлениях именно бизнес-процесс даёт управляемость: карту маршрута видно в конфигураторе, а ход выполнения — на графической схеме.

Сравнение вариантов

Бизнес-процесс со стартом

Подходит для многоэтапных согласований с условиями и маршрутами; требует настройки карты маршрута

Прямое создание задачи

Быстрее для одиночных поручений без маршрута; нет графической схемы и автоматических переходов

Вложенный бизнес-процесс

Когда этап одного процесса сам является сложной процедурой; усложняет отладку и поддержку

Итог

Что важно запомнить

Создание бизнес-процесса — это три шага: СоздатьБизнесПроцесс(), заполнение реквизитов с Записать(), затем Старт(). Проверяйте заполненность адресации до старта, отсутствие дублей по предмету и наличие задач после запуска. Отладку выполняйте на копии базы.

Частые вопросы

Можно ли создать бизнес-процесс, не стартуя его сразу?

Да. Запишите объект методом Записать() без вызова Старт() — процесс сохранится в базе как незапущенный. Стартовать его можно позже: программно, загрузив объект по ссылке и вызвав Старт(), или вручную из формы процесса.

Как избежать дублирования процессов по одному документу?

Перед созданием выполните запрос по бизнес-процессам с отбором по предмету и признаку Завершен = Ложь. Если активный процесс найден — не создавайте новый, а при необходимости зафиксируйте это в журнале. Дополнительно можно хранить ссылку на процесс в реквизите самого документа.

Почему после старта не создались задачи?

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

Можно ли прервать процесс программно?

Да, у объекта бизнес-процесса есть методы для управления жизненным циклом, в типовых конфигурациях — например, прерывание или завершение через специальные процедуры. В собственной конфигурации логика зависит от карты маршрута: обычно процесс завершается при достижении точки завершения, а принудительное прерывание реализуется установкой соответствующего признака и записью объекта.

Как создать процесс из внешней системы?

Опубликуйте в конфигурации HTTP-сервис, в обработчике которого разбираются входящие данные, находится или создаётся предмет и вызывается стандартный код создания и старта процесса. Учтите права пользователя, под которым выполняется сервис, и добавьте защиту от повторных вызовов, чтобы один внешний запрос не порождал несколько процессов.

Нужна ли транзакция при массовом создании процессов?

Для массового запуска оборачивайте создание каждого процесса в отдельную транзакцию или обрабатывайте ошибки по каждому объекту независимо: так сбой одного процесса не отменит уже созданные. Общая транзакция на весь пакет оправдана только если частичный результат недопустим по логике задачи.