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