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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Возможность создания автономных задач в платформе 1С

Проанализируем архитектуру объектов платформы. Объект конфигурации Задача является самостоятельным объектом метаданных. Стандартные реквизиты БизнесПроцесс и ТочкаМаршрута на уровне платформы не являются строго обязательными для заполнения. В них может храниться пустая ссылка.

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

Вариант 1. Программное создание автономной задачи без бизнес-процесса

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

Посмотрим на пример создания автономной задачи:


НоваяЗадача = Задачи.ЗадачаИсполнителя.СоздатьЗадачу();
НоваяЗадача.Дата = ТекущаяДатаСеанса();
НоваяЗадача.Наименование = "Ознакомиться с новым распоряжением по отделу";
НоваяЗадача.Исполнитель = ВыбПользователь;
НоваяЗадача.Описание = "Необходимо ознакомиться с документом и принять к сведению.";

// В типовых конфигурациях (на базе БСП) могут требоваться дополнительные реквизиты:
// НоваяЗадача.Автор = Пользователи.ТекущийПользователь();
// НоваяЗадача.СрокИсполнения = ТекущаяДатаСеанса() + 86400; // +1 день
// НоваяЗадача.СостояниеБизнесПроцесса = Перечисления.СостоянияБизнесПроцессов.Активен;

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

Разберем типичные ошибки при программном создании задачи:

  1. Не вызывайте метод АктивироватьИнтерактивно(): данный метод предназначен исключительно для клиентского сценария взаимодействия пользователя с картой маршрута бизнес-процесса. При серверном создании задачи его вызов приведет к ошибке.
  2. Проверяйте обязательные реквизиты: в прикладных конфигурациях в модуле объекта задачи или в подписках на события ПередЗаписью могут быть установлены проверки на заполнение реквизитов (например, Автор, Важность, СрокИсполнения или реквизиты адресации). Если задача не записывается, необходимо проверить модуль объекта на наличие таких условий.
  3. Завершение задачи: при выполнении автономной задачи вызов метода ЗадачаОбъект.ВыполнитьЗадачу() просто переведет флаг Выполнена в значение Истина и зафиксирует дату выполнения, не пытаясь продвинуть несуществующий бизнес-процесс дальше.

Вариант 2. Автоматическое формирование задачи через запуск бизнес-процесса

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

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


БП = БизнесПроцессы.Ознакомление.СоздатьБизнесПроцесс();
БП.Дата = ТекущаяДатаСеанса();
БП.Автор = Пользователи.ТекущийПользователь();
БП.Наименование = "Ознакомление с приказом №12";
БП.Записать();

// При вызове метода Старт() бизнес-процесс сам создаст задачи на активных точках маршрута
БП.Старт();

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

Альтернативные способы уведомления пользователей

Если задача ставится исключительно ради оповещения пользователя без строгого контроля исполнения в списке задач, проанализируем более легковесные альтернативы:

  1. Система взаимодействия (Обсуждения): позволяет отправить контекстное сообщение конкретному пользователю или группе с возможностью прикрепления ссылки на документ или справочник.
  2. Подсистема «Напоминания пользователя»: программная запись события в регистр сведений напоминаний вызовет стандартное всплывающее окно в интерфейсе конкретного исполнителя в указанное время.
  3. Метод ПоказатьОповещениеПользователя(): подходит для оперативного вывода всплывающего окна в правом нижнем углу экрана текущего активного сеанса.
← На главную