База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в 1С 8.3 отправить задачу пользователю и после неё выполнить другую? › RE: Как в 1С 8.3 отправить задачу пользователю и после неё выполнить другую?
Для реализации сценария в 1С 8.3, когда нужно отправить задачу пользователю на определённое время, а после её выполнения автоматически создать и выполнить другую задачу, можно использовать механизм фоновых заданий и объектов «Задачи» (если используется подсистема задач) или регламентные задания с программным управлением.
### Общий алгоритм решения:
1. **Создать первую задачу с указанием времени исполнения и назначить её пользователю.**
2. **Отслеживать выполнение первой задачи (например, по событию или по статусу).**
3. **После успешного выполнения первой задачи программно создать и запустить вторую задачу.**
—
### Пример реализации на встроенном языке 1С (упрощённый):
#### 1. Создание и отправка первой задачи пользователю на определённое время
|
1 2 3 4 5 6 7 8 9 10 11 |
Процедура СоздатьЗадачуПользователю(Пользователь, ВремяВыполнения) НоваяЗадача = Задачи.Задача.СоздатьЗадачу(); НоваяЗадача.Дата = ВремяВыполнения; // Время, когда задача должна быть выполнена НоваяЗадача.Ответственный = Пользователь; НоваяЗадача.Наименование = "Первая задача"; НоваяЗадача.Описание = "Выполнить первую задачу"; НоваяЗадача.Статус = Задачи.СтатусыЗадач.Выполняется; НоваяЗадача.Записать(); КонецПроцедуры |
#### 2. Отслеживание выполнения задачи и создание второй задачи
Отслеживание можно реализовать несколькими способами:
— Через обработчик событий изменения статуса задачи (если используется подсистема задач).
— Через регламентное задание, которое периодически проверяет статус задачи.
— Через фоновые задания с программной логикой.
Пример проверки и создания второй задачи:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Процедура ПроверитьИСоздатьВторуюЗадачу() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ Задачи.Ссылка КАК Задача ИЗ Задачи.Задача КАК Задачи ГДЕ Задачи.Наименование = &ИмяПервойЗадачи И Задачи.Статус = &СтатусВыполнена"; Запрос.УстановитьПараметр("ИмяПервойЗадачи", "Первая задача"); Запрос.УстановитьПараметр("СтатусВыполнена", Задачи.СтатусыЗадач.Выполнена); Результат = Запрос.Выполнить(); Если Результат.Пустой() = Ложь Тогда // Создаем вторую задачу НоваяЗадача = Задачи.Задача.СоздатьЗадачу(); НоваяЗадача.Дата = ТекущаяДата(); НоваяЗадача.Ответственный = Пользователь; // Можно указать нужного пользователя НоваяЗадача.Наименование = "Вторая задача"; НоваяЗадача.Описание = "Выполнить вторую задачу после первой"; НоваяЗадача.Статус = Задачи.СтатусыЗадач.Выполняется; НоваяЗадача.Записать(); КонецЕсли; КонецПроцедуры |
—
### Вариант с регламентными заданиями и фоновыми заданиями
Если задачи — это не объекты подсистемы задач, а обработка, которую нужно выполнить в определённое время, то можно:
— Создать регламентное задание, которое запустит первую обработку в нужное время.
— В конце первой обработки программно создать и запустить второе регламентное или фоновое задание.
Пример создания фонового задания:
|
1 2 3 4 |
// Создание фонового задания для выполнения процедуры ФоновоеЗадание = МенеджерФоновыхЗаданий.СоздатьЗадание("ИмяОбщегоМодуля", "ИмяПроцедуры", Параметры); ФоновоеЗадание.ДатаВыполнения = ВремяВыполнения; ФоновоеЗадание.Запустить(); |
В конце выполнения первой процедуры можно программно создать и запустить второе фоновое задание.
—
### Рекомендации
— Для задач с участием пользователей лучше использовать подсистему «Задачи» с назначением ответственных.
— Для автоматических обработок — регламентные и фоновые задания.
— Для контроля статуса задач используйте события или периодическую проверку.
— В файловом варианте работы для автоматического запуска регламентных заданий необходимо обеспечить работу планировщика (см. метод ВыполнитьОбработкуЗаданий()).
—
### Итог
— Создайте первую задачу с нужным временем и ответственным.
— Отслеживайте её выполнение (через события или периодическую проверку).
— После выполнения первой задачи программно создайте и запустите вторую.
—
Рекомендую посмотреть здесь:
https://helpf.pro/faq8/view/867.html
https://infostart.ru/1c/articles/341698/
https://helpf.pro/faq8/view/81.html