Часто у разработчиков возникает заблуждение, что объект конфигурации Задача может существовать и создаваться исключительно в рамках карты маршрута объекта БизнесПроцесс (например, внутри обработчика ПередСозданиемЗадач). Однако в платформе 1С:Предприятие объект метаданных Задача является полностью самостоятельным прикладным объектом. Выясним причину этого заблуждения, разберем особенности жизненного цикла задач и рассмотрим, как правильно работать с ними программно и интерактивно в отрыве от бизнес-процессов.
Проанализируем структуру объекта Задача. Он имеет стандартные реквизиты, такие как БизнесПроцесс, ТочкаМаршрута, Выполнена, Дата, Номер, а также реквизиты адресации. При создании задачи вне бизнес-процесса реквизиты БизнесПроцесс и ТочкаМаршрута просто остаются пустыми (содержат значение Неопределено или пустую ссылку).
Никакой скрытой автоматики маршрутизации платформа при этом не запускает. Кнопки записи на форме и методы программной записи работают так же, как у обычных документов или справочников. Рассмотрим основные способы работы с задачами.
Если нам необходимо создать задачу из произвольного места конфигурации (например, из документа, внешней обработки или фонового задания), используем менеджер соответствующей задачи и метод СоздатьЗадачу(). Посмотрим на пример:
НоваяЗадача = Задачи.ЗаданиеПользователю.СоздатьЗадачу();
НоваяЗадача.Дата = ТекущаяДатаСеанса();
НоваяЗадача.Наименование = "Проверить остатки на складе";
НоваяЗадача.Исполнитель = ТекущийПользователь;
НоваяЗадача.СрокИсполнения = ТекущаяДатаСеанса() + 86400; // плюс 1 сутки
НоваяЗадача.Записать();
Если требуется открыть пользователю форму для интерактивного ввода новой задачи, используем стандартную функцию ОткрытьФорму():
ОткрытьФорму("Задача.ЗаданиеПользователю.ФормаОбъекта");
Когда требуется отправить одно и то же поручение нескольким сотрудникам без бизнес-процесса, платформа не создает их автоматически. В этом случае мы организуем цикл по списку исполнителей и создаем отдельный экземпляр задачи для каждого пользователя. Разберем по шагам:
Задача через метод СоздатьЗадачу().Записать() для фиксации каждого экземпляра в базе данных.Посмотрим на пример реализации:
Для Каждого Исполнитель Из СписокИсполнителей Цикл
НоваяЗадача = Задачи.ЗаданиеПользователю.СоздатьЗадачу();
НоваяЗадача.Дата = ТекущаяДатаСеанса();
НоваяЗадача.Наименование = "Ознакомиться с приказом руководителя";
НоваяЗадача.Исполнитель = Исполнитель;
НоваяЗадача.Записать();
КонецЦикла;
У объекта Задача есть две ключевые операции изменения состояния, которые важно различать:
Записать(). Сохраняет текущие данные объекта, вызывает обработчики событий ПередЗаписью и ПриЗаписи модуля объекта. Значение реквизита Выполнена при этом регулируется разработчиком вручную.ВыполнитьЗадачу(). Данный метод устанавливает реквизит Выполнена в значение Истина, после чего последовательно вызывает события модуля объекта ПередВыполнением, ПриВыполнении и производит запись. Если задача не связана с бизнес-процессом, продвижения по карте маршрута не происходит, а просто фиксируется факт закрытия задачи.Рассмотрим пример программного выполнения задачи:
ЗадачаОбъект = СсылкаНаЗадачу.ПолучитьОбъект();
Если Не ЗадачаОбъект.Выполнена Тогда
ЗадачаОбъект.ВыполнитьЗадачу();
КонецЕсли;
В модуле объекта задачи доступны специализированные события, с помощью которых можно контролировать логику без использования бизнес-процессов:
Обработчик ПередВыполнением: позволяет проверить, все ли обязательные условия выполнены перед тем, как закрыть задачу. При обнаружении ошибок можно установить параметр Отказ = Истина.
Процедура ПередВыполнением(Отказ)
Если Не ЗначениеЗаполнено(РезультатВыполнения) Тогда
ВызватьИсключение "Не указан результат выполнения задания!";
КонецЕсли;
КонецПроцедуры
Обработчик ПриВыполнении: срабатывает в момент успешного выполнения задачи. Здесь можно реализовать собственную цепочку действий, например, создать следующую зависимую задачу или отправить оповещение автору задания.
Процедура ПриВыполнении(Отказ)
// Собственная логика создания следующего шага
КонецПроцедуры
Рассмотрим плюсы и минусы отказа от использования бизнес-процессов при работе с задачами: