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

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

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

Объектная модель: Процесс, Задача и Точка маршрута

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

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

Точка маршрута — это узел схемы, определяющий, что должно произойти: ожидание, выполнение действия или автоматический переход. Программно мы чаще всего взаимодействуем именно с точками, проверяя их состояние или инициируя переходы между ними.

⚠️ Внимание: Попытка создать задачу без привязки к активному экземпляру бизнес-процесса приведет к ошибке выполнения. Сначала всегда создается процесс, затем — задачи внутри него.

Для наглядности рассмотрим различия в свойствах этих объектов в таблице ниже.

Объект Назначение Владельцы данных
Бизнес-процесс Управление общей схемой и состоянием Автор процесса, ответственный за весь цикл
Задача Конкретное действие для сотрудника Исполнитель задачи, наблюдатели
Точка маршрута Логический узел перехода Системные данные о состоянии узла

Инициализация и запуск процесса программным способом

Создание нового экземпляра начинается с получения объекта метаданных. В коде это делается через глобальный контекст или непосредственное обращение к менеджеру объекта. Рассмотрим классический пример создания процесса"СогласованиеДоговора".

Вам потребуется сформировать новый объект, заполнить его основные реквизиты и, что самое важное, указать начальный узел маршрута. Без указания точки старта процесс зависнет в состоянии"Не начат". Используйте метод Начать для активации логики.

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

НовыйПроцесс.Описание ="Согласование договора с ООО Ромашка";

НовыйПроцесс.НачальнаяТочка = Справочники.ТочкиМаршрута.НайтиПоНаименованию("Старт");

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

НовыйПроцесс.Начать;

Обратите внимание на метод Записать. Он необходим перед вызовом Начать, чтобы сохранить первичные данные в базе. Пропуск этого шага является распространенной ошибкой новичков, приводящей к исключительным ситуациям.

💡

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

После успешного запуска система автоматически создаст задачи в точках, следующих за стартовой, если это предусмотрено схемой. Однако часто требуется ручное управление этим процессом.

📊 Какой способ запуска процессов вы используете чаще?
Через интерфейс пользователя
Только программно
Комбинированный метод
Регламентными заданиями

Создание задач и назначение исполнителей

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

Для создания задачи используется метод СоздатьЗадачу у объекта процесса. Вы должны передать в него ссылку на точку маршрута. Именно в этот момент определяется, кто получит поручение. Можно назначить конкретного пользователя, роль или группу.

  • 👤 Назначение конкретного пользователя из справочника Пользователи.
  • 👥 Назначение на роль, где исполнитель выбирается из списка доступных кандидатов.
  • 🤖 Автоматическое назначение на системного пользователя для фоновых операций.

Важно правильно заполнить реквизит Ответственный. Если он останется пустым, задача может не отобразиться в списке"Мои задачи" у адресата. Также рекомендуется заполнять поле Комментарий для пояснения сути поручения.

⚠️ Внимание: При назначении задачи на роль убедитесь, что у роли есть хотя бы один пользователь с правами на выполнение. Иначе задача повиснет в статусе"Ожидание" бесконечно.

Пример кода демонстрирует назначение задачи на роль"МенеджерПоПродажам" с передачей контекстных данных.

НоваяЗадача = Процесс.СоздатьЗадачу(ТочкаМаршрута);

НоваяЗадача.Наименование ="Проверка условий договора";

НоваяЗадача.Ответственный = Роли.МенеджерПоПродажам;

НоваяЗадача.Комментарий ="Требуется проверка пункта 4.2 на риски";

НоваяЗадача.Записать;

Управление переходами и завершение точек маршрута

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

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

Что происходит при завершении точки без параметров?

Если в схеме настроены условия перехода, а параметры не переданы, система попытается использовать значения по умолчанию или прервет выполнение с ошибкой, если не заданы.

Частая ситуация — необходимость завершить задачу досрочно или перенаправить процесс. В таких случаях используется метод Прервать или принудительное завершение с указанием альтернативной точки. Это требует осторожности, чтобы не нарушить целостность данных.

Рассмотрим сценарий, когда менеджер одобряет документ. Мы завершаем текущую точку и передаем управление на следующий этап —"СогласованиеЮристом".

ПараметрыПерехода = Новый Структура;

ПараметрыПерехода.Вставить("Решение","Одобрено");

ТекущаяЗадача.ТочкаМаршрута.Завершить(ПараметрыПерехода);

После вызова метода Завершить платформа автоматически проанализирует схему и создаст новые задачи в следующих точках, если переход разрешен логикой маршрута.

Мониторинг состояния и обработка исключений

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

Необходимо отслеживать свойство Состояние. Оно может принимать значения:"Действует","Завершен","Отменен". Для поиска зависших процессов удобно использовать отборы по дате создания и отсутствию активности.

  • 🔍 Поиск процессов, находящихся в работе более 3 дней.
  • ⛔ Выявление задач без ответственного исполнителя.
  • 📊 Анализ количества завершенных процессов за период.

Обработка ошибок должна быть предусмотрена на этапе проектирования. Если программный вызов метода завершается ошибкой, используйте конструкцию Попытка...Исключение. Это позволит записать информацию об ошибке в журнал регистрации и уведомить администратора.

💡

Грамотная обработка исключений при завершении точек маршрута предотвращает блокировку всего бизнес-процесса из-за одной некорректной операции.

Не забывайте, что длительные операции с бизнес-процессами могут блокировать таблицы. Оптимизируйте свои запросы и избегайте перебора всех процессов в цикле без необходимых отборов.

Интеграция с другими объектами конфигурации

Бизнес-процессы редко существуют изолированно. Чаще всего они сопровождают движение документов или изменение записей в регистрах. Связь осуществляется через реквизиты типа БизнесПроцесс.Ссылка и Задача.Ссылка в основных объектах.

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

Также возможно использование механизмов подписок на события. Например, при изменении статуса задачи можно автоматически обновлять индикатор выполнения в карточке проекта. Это создает единую информационную среду для пользователя.

⚠️ Внимание: Изменения в конфигурации, затрагивающие типы бизнес-процессов, требуют осторожности при обновлении базы данных. Всегда делайте резервную копию перед обновлением конфигурации с активными процессами.

Интеграция позволяет реализовать сложные сценарии, такие как эскалация задач при просрочке или автоматическое создание документов по итогам согласования.

☑️ Контроль перед внедрением

Выполнено: 0 / 4

Часто задаваемые вопросы (FAQ)

Можно ли изменить маршрут процесса после его запуска?

Да, это возможно, но требует аккуратности. Вы можете программно добавлять новые точки или изменять связи, однако активные задачи могут потребовать переназначения. Лучше проектировать гибкие схемы изначально.

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

Удаление возможно только если процесс не имеет активных задач. Сначала необходимо завершить или отменить все связанные задачи, и только затем удалять сам объект процесса.

Влияет ли большое количество процессов на скорость работы 1С?

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

Можно ли запустить процесс из внешней обработки?

Да, если у внешней обработки есть необходимые права доступа к объектам метаданных бизнес-процессов и задач. Логика создания остается стандартной.

Что делать, если задача не создается в нужной точке?

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