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

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

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

Архитектура объекта метаданных Задача

Проанализируем структуру объекта Задача. Он имеет стандартные реквизиты, такие как БизнесПроцесс, ТочкаМаршрута, Выполнена, Дата, Номер, а также реквизиты адресации. При создании задачи вне бизнес-процесса реквизиты БизнесПроцесс и ТочкаМаршрута просто остаются пустыми (содержат значение Неопределено или пустую ссылку).

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

Программное создание задачи

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


НоваяЗадача = Задачи.ЗаданиеПользователю.СоздатьЗадачу();
НоваяЗадача.Дата = ТекущаяДатаСеанса();
НоваяЗадача.Наименование = "Проверить остатки на складе";
НоваяЗадача.Исполнитель = ТекущийПользователь;
НоваяЗадача.СрокИсполнения = ТекущаяДатаСеанса() + 86400; // плюс 1 сутки
НоваяЗадача.Записать();

Если требуется открыть пользователю форму для интерактивного ввода новой задачи, используем стандартную функцию ОткрытьФорму():

ОткрытьФорму("Задача.ЗаданиеПользователю.ФормаОбъекта");

Создание задач для нескольких исполнителей

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

  1. Формируем список или массив исполнителей, которым должно поступить задание.
  2. В цикле создаем отдельный объект Задача через метод СоздатьЗадачу().
  3. Заполняем реквизит исполнителя, описание задачи и сроки.
  4. Вызываем метод Записать() для фиксации каждого экземпляра в базе данных.

Посмотрим на пример реализации:


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

Запись и выполнение задачи: в чем разница

У объекта Задача есть две ключевые операции изменения состояния, которые важно различать:

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

Рассмотрим пример программного выполнения задачи:


ЗадачаОбъект = СсылкаНаЗадачу.ПолучитьОбъект();
Если Не ЗадачаОбъект.Выполнена Тогда
    ЗадачаОбъект.ВыполнитьЗадачу();
КонецЕсли;

События модуля объекта задачи

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

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


Процедура ПередВыполнением(Отказ)
    Если Не ЗначениеЗаполнено(РезультатВыполнения) Тогда
        ВызватьИсключение "Не указан результат выполнения задания!";
    КонецЕсли;
КонецПроцедуры

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


Процедура ПриВыполнении(Отказ)
    // Собственная логика создания следующего шага
КонецПроцедуры

Преимущества и ограничения работы без бизнес-процессов

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

  1. Преимущества: простота реализации, отсутствие необходимости проектировать и поддерживать сложные карты маршрутов, высокая гибкость при создании произвольных поручений и напоминаний.
  2. Ограничения: теряется платформенный контроль параллельных и условных ветвлений (разделение и слияние веток «И / ИЛИ»), а также автоматическое продвижение по точкам маршрута. Всю связку создания последующих задач после закрытия предыдущих разработчику необходимо программировать самостоятельно.
← На главную