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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как в 1С 8.3 отправить задачу пользователю и после неё выполнить другую?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #34155
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        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 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С