База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в 1С 8.3 отправить задачу пользователю и после неё выполнить другую? › RE: Как в 1С 8.3 отправить задачу пользователю и после неё выполнить другую?
Для реализации сценария в 1С 8.3, когда нужно отправить задачу пользователю на определённое время, а после её выполнения автоматически создать и выполнить другую задачу, можно использовать механизм фоновых заданий и объектов «Задачи» (если используется подсистема задач) или регламентные задания с программным управлением.
### Общий алгоритм решения:
1. **Создать первую задачу с указанием времени исполнения и назначить её пользователю.**
2. **Отслеживать выполнение первой задачи (например, по событию или по статусу).**
3. **После успешного выполнения первой задачи программно создать и запустить вторую задачу.**
—
### Пример реализации на встроенном языке 1С (упрощённый):
#### 1. Создание и отправка первой задачи пользователю на определённое время
Процедура СоздатьЗадачуПользователю(Пользователь, ВремяВыполнения)
НоваяЗадача = Задачи.Задача.СоздатьЗадачу();
НоваяЗадача.Дата = ВремяВыполнения; // Время, когда задача должна быть выполнена
НоваяЗадача.Ответственный = Пользователь;
НоваяЗадача.Наименование = "Первая задача";
НоваяЗадача.Описание = "Выполнить первую задачу";
НоваяЗадача.Статус = Задачи.СтатусыЗадач.Выполняется;
НоваяЗадача.Записать();
КонецПроцедуры
#### 2. Отслеживание выполнения задачи и создание второй задачи
Отслеживание можно реализовать несколькими способами:
— Через обработчик событий изменения статуса задачи (если используется подсистема задач).
— Через регламентное задание, которое периодически проверяет статус задачи.
— Через фоновые задания с программной логикой.
Пример проверки и создания второй задачи:
Процедура ПроверитьИСоздатьВторуюЗадачу()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Задачи.Ссылка КАК Задача
ИЗ
Задачи.Задача КАК Задачи
ГДЕ
Задачи.Наименование = &ИмяПервойЗадачи
И Задачи.Статус = &СтатусВыполнена";
Запрос.УстановитьПараметр("ИмяПервойЗадачи", "Первая задача");
Запрос.УстановитьПараметр("СтатусВыполнена", Задачи.СтатусыЗадач.Выполнена);
Результат = Запрос.Выполнить();
Если Результат.Пустой() = Ложь Тогда
// Создаем вторую задачу
НоваяЗадача = Задачи.Задача.СоздатьЗадачу();
НоваяЗадача.Дата = ТекущаяДата();
НоваяЗадача.Ответственный = Пользователь; // Можно указать нужного пользователя
НоваяЗадача.Наименование = "Вторая задача";
НоваяЗадача.Описание = "Выполнить вторую задачу после первой";
НоваяЗадача.Статус = Задачи.СтатусыЗадач.Выполняется;
НоваяЗадача.Записать();
КонецЕсли;
КонецПроцедуры
—
### Вариант с регламентными заданиями и фоновыми заданиями
Если задачи — это не объекты подсистемы задач, а обработка, которую нужно выполнить в определённое время, то можно:
— Создать регламентное задание, которое запустит первую обработку в нужное время.
— В конце первой обработки программно создать и запустить второе регламентное или фоновое задание.
Пример создания фонового задания:
// Создание фонового задания для выполнения процедуры
ФоновоеЗадание = МенеджерФоновыхЗаданий.СоздатьЗадание("ИмяОбщегоМодуля", "ИмяПроцедуры", Параметры);
ФоновоеЗадание.ДатаВыполнения = ВремяВыполнения;
ФоновоеЗадание.Запустить();
В конце выполнения первой процедуры можно программно создать и запустить второе фоновое задание.
—
### Рекомендации
— Для задач с участием пользователей лучше использовать подсистему «Задачи» с назначением ответственных.
— Для автоматических обработок — регламентные и фоновые задания.
— Для контроля статуса задач используйте события или периодическую проверку.
— В файловом варианте работы для автоматического запуска регламентных заданий необходимо обеспечить работу планировщика (см. метод `ВыполнитьОбработкуЗаданий()`).
—
### Итог
— Создайте первую задачу с нужным временем и ответственным.
— Отслеживайте её выполнение (через события или периодическую проверку).
— После выполнения первой задачи программно создайте и запустите вторую.
—
Рекомендую посмотреть здесь:
https://helpf.pro/faq8/view/867.html
https://infostart.ru/1c/articles/341698/
https://helpf.pro/faq8/view/81.html