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

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

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

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

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

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

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

Как платформа хранит состояние процесса

Бизнес-процесс в 1С — это объект, у которого есть карта маршрута (набор точек и переходов), стартовая и конечная точки, а также связанные задачи. Когда процесс доходит до точки действия, платформа создаёт задачу и заполняет у неё реквизит ТочкаМаршрута. Пока задача не выполнена, точка считается активной.

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

Способ 1. Запрос к задачам процесса

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

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

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

"ВЫБРАТЬ

| Задачи.Ссылка КАК Задача,

| Задачи.ТочкаМаршрута КАК ТочкаМаршрута

|ИЗ

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

|ГДЕ

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

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

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

Результат = Запрос.Выполнить().Выгрузить();

Если выборка пустая, а процесс не завершён — значит, процесс стоит на точке без задачи (обработка, условие, ожидание вложенного процесса). Это нормальная ситуация, а не ошибка выборки. Для таких случаев нужен анализ вложенных объектов или служебных данных конфигурации.

bsl
Функция ТекущиеТочкиПроцесса(БизнесПроцессСсылка) Экспорт
	Запрос = Новый Запрос("ВЫБРАТЬ Задачи.ТочкаМаршрута ИЗ Задача.ЗадачаИсполнителя КАК Задачи ГДЕ Задачи.БизнесПроцесс = &БП И НЕ Задачи.Выполнена");
	Запрос.УстановитьПараметр("БП", БизнесПроцессСсылка);
	Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ТочкаМаршрута");
КонецФункции

Способ 2. Проверка стадии процесса через старт и завершение

Прежде чем искать активную точку, определите, жив ли процесс вообще. У объекта бизнес-процесса есть признаки Стартован и Завершен. Незапущенный процесс не имеет текущей точки — любые выборки вернут пустоту, и это нужно обрабатывать отдельно, чтобы не выдавать пользователю вводящие в заблуждение сообщения.

Если НЕ БизнесПроцессОбъект.Стартован Тогда

// процесс ещё не запущен — текущей точки нет

ИначеЕсли БизнесПроцессОбъект.Завершен Тогда

// процесс завершён — текущей точки нет

Иначе

// ищем активные точки через задачи

КонецЕсли;

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

Способ 3. Анализ карты маршрута и вложенных процессов

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

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

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

Как выбрать действие

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

Способ 4. Данные типовых конфигураций

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

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

Проверка результата и контрольные точки

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

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

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

Процесс с одной невыполненной задачей
Норма

Возвращается одна точка, совпадающая с точкой задачи в форме

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

Пустой результат или точка другой задачи

Параллельное разделение маршрута
Норма

Возвращаются все активные точки

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

Возвращается только одна точка — остальные потеряны

Завершённый процесс
Норма

Пустой результат без ошибок

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

Исключение или возврат последней выполненной точки как текущей

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

Типичные ошибки и ограничения

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

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

FAQ

Можно ли получить текущую точку без запроса, напрямую из объекта?

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

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

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

Процесс активен, но задач нет. Что это значит?

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

Как получить текущую точку в запросе для отчёта?

Соедините таблицу бизнес-процессов с таблицей задач по полю БизнесПроцесс с условием НЕ Выполнена и выведите ТочкаМаршрута. Учтите, что у одного процесса может быть несколько строк результата.

Отличается ли механика в управляемых и обычных формах?

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

Итог

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

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