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

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

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

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

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

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

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

Что такое задача бизнес-процесса и где она хранится

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

Физически задачи каждого вида хранятся в отдельной таблице. В запросах к ней обращаются по имени вида задачи, например Задача.ЗадачаИсполнителя. У каждой задачи есть стандартные реквизиты: «БизнесПроцесс», «ТочкаМаршрута», «Выполнена», «Дата», «Наименование», а также реквизиты адресации, определённые в конфигурации.

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

Как получить задачу интерактивно через интерфейс

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

В форме списка можно установить отбор по исполнителю, дате, состоянию. Для администратора полезен отбор «Выполнена = Нет» — он показывает все активные задачи системы. Если у пользователя включена ролевая адресация, в его список попадут задачи, адресованные и ему лично, и его роли.

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

Получение задачи запросом: базовый пример

Основной рабочий инструмент — запрос к таблице задач с отбором. Типовой шаблон выглядит так:

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

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

"ВЫБРАТЬ

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

| Задачи.БизнесПроцесс КАК БизнесПроцесс,

| Задачи.Дата КАК Дата

|ИЗ

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

|ГДЕ

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

| И Задачи.Исполнитель = &Исполнитель";

Запрос.УстановитьПараметр("Исполнитель", ТекущийПользователь);

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

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

bsl
Пока Выборка.Следующий() Цикл
	ЗадачаОбъект = Выборка.Задача.ПолучитьОбъект();
	ЗадачаОбъект.ВыполнитьЗадачу();
КонецЦикла;

Имя таблицы в запросе должно точно совпадать с именем вида задачи в конфигураторе. Если конфигурация использует несколько видов задач (например, отдельные для согласования и для исполнения), запрос нужно писать к каждому виду или объединять через ОБЪЕДИНИТЬ ВСЕ.

Отбор по точке маршрута и бизнес-процессу

Когда нужны задачи конкретного этапа, добавляют условие на точку маршрута. Значение точки получают через предопределённый элемент перечисления точек маршрута бизнес-процесса:

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

"ВЫБРАТЬ

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

|ИЗ

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

|ГДЕ

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

| И Задачи.ТочкаМаршрута = &ТочкаМаршрута";

Запрос.УстановитьПараметр("ТочкаМаршрута",

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

Обратная ситуация — найти задачу по известному бизнес-процессу. Это нужно, например, при повторной маршрутизации или проверке, не «зависла» ли заявка. Условие ставится по реквизиту «БизнесПроцесс»:

ГДЕ

| Задачи.БизнесПроцесс = &СсылкаНаПроцесс

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

Получение задач по ролевой адресации

В конфигурациях с ролевой адресацией задача может быть адресована не конкретному пользователю, а роли, подразделению или другому объекту адресации. Тогда отбор только по реквизиту «Исполнитель» пропустит часть задач — они попадают в список пользователя через механизм адресации.

Корректное условие обычно строится как «Исполнитель = текущий пользователь ИЛИ реквизиты адресации соответствуют ролям пользователя, а исполнитель не задан». В типовых конфигурациях для этого есть готовые функции общих модулей (например, получение списка задач текущего пользователя) — используйте их вместо самостоятельного запроса, чтобы не дублировать логику адресации.

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

Как выбрать способ получения задачи

Нужно разово найти или проверить задачуИспользуйте форму списка задач с отбором по исполнителю и статусу
Нужно обработать задачи в коде по пользователюЗапрос к таблице Задача.ИмяЗадачи с отбором по исполнителю и Выполнена = Ложь
Нужны задачи конкретного этапа процессаДобавьте отбор по ТочкаМаршрута через предопределённую точку маршрута
Используется ролевая адресацияПрименяйте штатные функции конфигурации для списка задач пользователя
Известен бизнес-процессОтбирайте по реквизиту БизнесПроцесс и обрабатывайте все найденные строки

Выполнение задачи программно и проверка результата

После получения ссылки задачу выполняют методом ВыполнитьЗадачу() объекта задачи. Перед вызовом убедитесь, что заполнены все реквизиты, которые конфигурация проверяет при выполнении — например, результат согласования или комментарий. Иначе метод либо вызовет исключение, либо процесс уйдёт по непредусмотренной ветке.

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

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

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

Признак Выполнена у задачи
Норма

После ВыполнитьЗадачу() равен Истина

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

Остался Ложь — задача не выполнена, проверяйте обязательные реквизиты

Состояние бизнес-процесса
Норма

Появилась задача на следующей точке маршрута или процесс завершён

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

Новых задач нет и процесс не завершён — процесс остановился

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

Выполненная задача исчезла из активных

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

Задача видна как активная — возможна ошибка адресации

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

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

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

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

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

Итоговые рекомендации

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

Итог

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

Задачу бизнес-процесса получают запросом к таблице Задача.ИмяЗадачи с отбором по исполнителю, точке маршрута и признаку Выполнена = Ложь. Программное выполнение делается методом ВыполнитьЗадачу() после заполнения обязательных реквизитов. При ролевой адресации используйте штатные механизмы конфигурации, а массовые операции тестируйте на копии базы.

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

Как найти все невыполненные задачи конкретного пользователя?

Запросом к таблице вида задачи с условиями «НЕ Выполнена» и «Исполнитель = &Пользователь». Если в конфигурации включена ролевая адресация, дополнительно учитывайте задачи, адресованные ролям пользователя, — проще всего через штатную функцию получения списка задач, если она есть в конфигурации.

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

Проверьте три вещи: точное имя вида задачи в тексте запроса, права текущего пользователя на чтение задач (включая ограничения RLS) и соответствие типа параметра отбора типу реквизита адресации — например, пользователь и физическое лицо могут быть разными типами.

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

Да, отбором по реквизиту «БизнесПроцесс» с условием «НЕ Выполнена». Учтите, что на параллельных ветках маршрута у процесса может быть несколько активных задач, поэтому результат обрабатывайте циклом, а не как единственную строку.

Как программно выполнить задачу?

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

Чем отличается отбор по исполнителю от отбора по роли?

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

Безопасно ли массово выполнять задачи в цикле?

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