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

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

Как получить точки бизнес-процесса в 1С

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

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

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

Что такое точки маршрута и где они хранятся

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

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

Просмотр точек в конфигураторе

Самый простой способ увидеть все точки — открыть конфигуратор, найти нужный объект в ветке «Бизнес-процессы» дерева конфигурации и перейти на закладку «Карта маршрута». Здесь визуально отображаются все точки и переходы между ними, а в палитре свойств каждой точки видны её имя, вид и связанные реквизиты адресации.

Имена точек из карты маршрута — это те самые идентификаторы, которые используются в коде. Если точку переименовали, весь программный код, ссылающийся на старое имя, перестанет работать. Поэтому перед изменением карты маршрута стоит выполнить поиск по имени точки по всей конфигурации через «Правка → Глобальная замена» или «Поиск ссылок в объектах метаданных».

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

Получение точек через встроенный язык

Программно коллекция точек маршрута доступна через свойство ТочкиМаршрута. Для объекта бизнес-процесса оно возвращает коллекцию всех точек карты, определённой в метаданных. Обход коллекции выглядит так:

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

Для Каждого Точка Из БП.ТочкиМаршрута Цикл

Сообщить(Точка.Имя + " — " + Точка.Вид);

КонецЦикла;

Тот же список можно получить через менеджер бизнес-процесса без создания объекта:

Точки = БизнесПроцессы.СогласованиеЗаявки.ТочкиМаршрута;

Для Каждого Точка Из Точки Цикл

// работа с точкой

КонецЦикла;

Каждый элемент коллекции — объект типа «ТочкаМаршрутаБизнесПроцесса». У него доступны свойства Имя и Вид (перечисление ВидТочкиМаршрутаБизнесПроцесса: Старт, Завершение, Действие, Условие, Разделение, Слияние, Обработка, ВложенныйБизнесПроцесс). Обращение к конкретной точке по имени выполняется через индекс: БизнесПроцессы.СогласованиеЗаявки.ТочкиМаршрута.ПроверкаРуководителем.

bsl
ТочкаСтарт = БизнесПроцессы.СогласованиеЗаявки.ТочкиМаршрута.Старт;

Получение точки конкретной задачи и текущих точек процесса

Когда процесс запущен, часто нужно узнать не весь список точек, а точку, на которой сформирована конкретная задача. Для этого у объекта задачи есть свойство ТочкаМаршрута:

ЗадачаОбъект = ЗадачаСсылка.ПолучитьОбъект();

ТекущаяТочка = ЗадачаОбъект.ТочкаМаршрута;

Сообщить("Задача стоит на точке: " + ТекущаяТочка.Имя);

Обратная задача — найти все активные задачи процесса, то есть фактически определить, на каких точках он сейчас стоит. Это делается запросом к задачам по ссылке на бизнес-процесс с отбором невыполненных:

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

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

"ВЫБРАТЬ Задача.ТочкаМаршрута КАК Точка

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

|ГДЕ Задача.БизнесПроцесс = &БизнесПроцесс

| И НЕ Задача.Выполнена";

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

Также у бизнес-процесса есть свойство ВедущаяЗадача — оно указывает на задачу, из которой процесс был стартован (типично для процессов, запускаемых из других задач). Через неё можно получить точку маршрута родительского процесса и организовать возврат результата.

Порядок действий для получения текущих точек процесса
  1. 1
    Откройте карту маршрута в конфигураторе и запишите имена нужных точек
  2. 2
    Получите ссылку на экземпляр бизнес-процесса
  3. 3
    Выполните запрос к таблице задач с отбором по бизнес-процессу и признаку НЕ Выполнена
  4. 4
    Прочитайте поле ТочкаМаршрута каждой найденной задачи
  5. 5
    Сопоставьте полученные имена точек с картой маршрута

Старт процесса с конкретной точки

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

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

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

БП.Записать();

ТочкаСтарта = БизнесПроцессы.СогласованиеЗаявки.ТочкиМаршрута.ПроверкаРуководителем;

БП.Старт(ТочкаСтарта);

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

Ограничения и частые ошибки

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

Вторая ошибка — попытка получить «текущую точку» процесса через его объект. У бизнес-процесса нет свойства «текущая точка»: положение процесса определяется только через активные задачи и служебные данные движка. Если задач несколько (параллельные ветки), то и активных точек несколько.

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

Типичные ошибки
01
Обращение к точке по несуществующему имени — ошибка выполнения; проверяйте имена по карте маршрута
02
Поиск «текущей точки» в объекте процесса — её там нет, используйте запрос к невыполненным задачам
03
Переименование точки без поиска ссылок в коде — перестают работать обработчики и программный старт
04
Старт со средней точки без заполнения реквизитов — задачи создаются без исполнителей

Проверка результата

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

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

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

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

Список точек из кода
Норма

Совпадает с картой маршрута в конфигураторе по именам и количеству

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

Есть лишние или отсутствующие имена — проверьте, к какому виду БП обращается код

Активные точки процесса
Норма

Каждая невыполненная задача показывает осмысленную точку маршрута

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

Задачи есть, а процесс завершён, или точек нет при стартованном процессе

Программный старт с точки
Норма

Созданы задачи именно для точек, следующих за указанной

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

Ошибка при старте или задачи с пустым исполнителем

FAQ

Можно ли получить точки маршрута без создания объекта бизнес-процесса?

Да. Обратитесь к менеджеру: БизнесПроцессы.ИмяПроцесса.ТочкиМаршрута — коллекция точек доступна без создания экземпляра, так как она описана в метаданных.

Как узнать вид точки: действие это или условие?

У элемента коллекции точек есть свойство Вид, которое принимает значения перечисления ВидТочкиМаршрутаБизнесПроцесса: Старт, Действие, Условие, Разделение, Слияние, Обработка, ВложенныйБизнесПроцесс, Завершение.

Почему обращение к точке по имени выдаёт ошибку?

Чаще всего точка с таким именем отсутствует в карте маршрута — её переименовали или удалили. Откройте карту маршрута в конфигураторе и сверьте точное имя, включая регистр и отсутствие пробелов.

Как получить все точки, на которых сейчас стоит процесс?

У объекта процесса такого свойства нет. Выполните запрос к таблице задач с отбором по ссылке на бизнес-процесс и условием «НЕ Выполнена» — поле ТочкаМаршрута каждой задачи даст активную точку.

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

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

Что будет с запущенными процессами, если изменить карту маршрута?

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

Итог

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

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