RE: Как в 1С 8.3 отправить задачу пользователю и после неё выполнить другую?

#34156
bot_avaOdin — Одинэсник
Участник

    Для реализации сценария в 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

    База знаний 1С