Как программно создать задачу пользователю в 1С:Документооборот

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

В процессе разработки в среде 1С:Документооборот часто возникает необходимость автоматизировать постановку задач. Например, когда в системе регистрируется определенное событие (запись в регистр сведений, создание документа или изменение статуса отчета), нам нужно оперативно оповестить ответственного сотрудника и поставить ему задачу на контроль или исполнение. Рассмотрим, как реализовать это правильно, учитывая архитектуру системы. Если данные для постановки задачи должны поступать из сторонних конфигураций, можно настроить автоматический регулярный обмен данными между базами 1С по расписанию.

Метод 1. Программное создание «голой» задачи

Начнем с самого простого, но не самого правильного с точки зрения методологии 1С:ДО способа — создания задачи напрямую через объект Задачи. Этот метод подходит, если вам нужно максимально быстро создать запись в списке задач пользователя без запуска сложных цепочек согласования.

Проанализируем пример кода, который можно разместить, например, в обработчике записи регистра сведений:


НоваяЗадача = Задачи.УниверсальнаяЗадача.СоздатьЗадачу();
// Если задача должна быть привязана к какому-то БП (необязательно, но желательно)
НоваяЗадача.Дата = ТекущаяДата();
НоваяЗадача.Наименование = "Проверить отчет: " + СсылкаНаОтчет.Наименование;
НоваяЗадача.Исполнитель = СсылкаНаПользователя; // Иванов Иван Иванович
НоваяЗадача.СрокВыполненияЗадачи = ТекущаяДата() + 86400; // + 1 день
НоваяЗадача.Описание = "Необходимо сдать отчет в установленный срок.";
НоваяЗадача.Важность = Перечисления.ВариантыВажностиЗадачи.Высокая;
НоваяЗадача.Записать();

В данном примере мы используем объект Задачи.УниверсальнаяЗадача. Мы устанавливаем ключевые реквизиты: Исполнитель, Наименование и СрокВыполненияЗадачи. После вызова метода Записать() задача появится у пользователя в списке Задачи мне.

Метод 2. Использование бизнес-процессов (Рекомендуемый подход)

Важно понимать, что в 1С:Документооборот задача — это лишь вершина айсберга. Большинство стандартных отчетов, механизмов уведомлений и иерархий контроля строятся на базе Бизнес-процессов. Создание задачи без бизнес-процесса может привести к тому, что она не попадет в мониторинг процессов или не отправит письмо на электронную почту исполнителю. Для ознакомления с архитектурой создания БП можно изучить пример программного управления бизнес-процессом в 1С:ДО.

Рассмотрим, как программно запустить легкий бизнес-процесс Ознакомление или Исполнение. Это гарантирует, что задача будет «правильной» с точки зрения логики системы.

Разберем алгоритм действий:

  1. Создаем объект бизнес-процесса.
  2. Заполняем основные реквизиты (автор, важность, содержание).
  3. Добавляем исполнителей в табличную часть.
  4. Записываем и стартуем процесс.

БП = БизнесПроцессы.Исполнение.СоздатьБизнесПроцесс();
БП.Дата = ТекущаяДата();
БП.Автор = ПараметрыСеанса.ТекущийПользователь;
БП.Наименование = "Ознакомьтесь с отчетом";
БП.Содержание = "Вам назначен отчет. Пожалуйста, проверьте данные.";

// Добавляем исполнителя
НоваяСтрока = БП.Исполнители.Добавить();
НоваяСтрока.Исполнитель = ОтветственныйИзРегистра;
НоваяСтрока.СрокИсполнения = ТекущаяДата() + 3600 * 4; // на выполнение 4 часа

БП.Записать();
БП.Старт();

Использование метода Старт() автоматически сформирует необходимые задачи всем участникам, указанным в табличной части Исполнители, и инициирует отправку уведомлений.

Метод 3. Создание напоминаний для пользователя

Иногда создание полноценной задачи избыточно, и достаточно просто вывести всплывающее окно-напоминание. Для этого в 1С:ДО используется регистр сведений НапоминанияПользователя. Выясним, как программно добавить запись в этот регистр.

Посмотрим на пример формирования напоминания:


МенеджерЗаписи = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Пользователь = ОтветственныйПользователь;
МенеджерЗаписи.ВремяСобытия = ТекущаяДата() + 600; // Через 10 минут
МенеджерЗаписи.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
МенеджерЗаписи.Источник = СсылкаНаОбъект; // Например, ссылка на отчет
МенеджерЗаписи.Описание = "Напоминание: пора проверить отчет!";
МенеджерЗаписи.Записать();

Важный нюанс: при прямой записи в регистр нужно следить за уникальностью ключа записи. В типовых конфигурациях лучше использовать функции общего модуля НапоминанияПользователяКлиентСервер, чтобы система корректно обработала часовые пояса и параметры отображения.

Связывание предметов с задачей

Чтобы пользователь мог из карточки задачи сразу открыть нужный отчет, нам нужно программно заполнить таблицу Предметы. В 1С:Документооборот это ключевой механизм навигации. Если мы просто создадим задачу, пользователь не поймет, к какому документу она относится.

Рассмотрим, как добавить предмет в бизнес-процесс:


// Предположим, БП уже создан
НовыйПредмет = БП.Предметы.Добавить();
НовыйПредмет.Предмет = СсылкаНаНашОтчет;
НовыйПредмет.РольПредмета = Перечисления.РолиПредметовБизнесПроцессов.Основной;
НовыйПредмет.ИмяПредмета = "ОсновнойОбъект";
БП.Записать();

Теперь в карточке задачи у исполнителя будет отображаться ссылка на отчет, по которой он сможет перейти одним кликом.

Продвинутые приемы и рекомендации

Для создания отказоустойчивого кода при программной постановке задач следует учитывать еще несколько аспектов. Для регулярной проверки работоспособности системы после внесения изменений используют программу для автоматического обновления и тестирования баз 1С в тихом режиме:

  1. Ролевая адресация: Старайтесь не привязывать задачу к конкретному Иванову. Используйте роли, например, «Ответственный за экологическую отчетность». Если Иванов уйдет в отпуск, система сама перенаправит задачу его заместителю.
  2. Привилегированный режим: Если программный код запускается от имени рядового пользователя (например, при нажатии кнопки «Отправить»), у него может не хватить прав на создание задач другим сотрудникам. Используйте УстановитьПривилегированныйРежим(Истина) перед созданием и записью задачи.
  3. Проверка дублей: Перед созданием задачи проверьте, не была ли она уже создана ранее для этого объекта. Можно хранить ссылку на созданную задачу в том же регистре сведений, откуда вы берете данные об ответственных.
  4. Особенности версии 3.0: Если вы работаете в 1С:Документооборот 3.0, рекомендуется использовать механизм Действий. Вместо прямого создания БП, вызывайте программную инициацию действия через общие модули, такие как РаботаСБизнесПроцессами. Это позволит использовать все преднастроенные правила обработки документов, заложенные в интерфейсе.

Резюмируя, наиболее надежным способом является запуск типового бизнес-процесса с заполнением таблицы предметов. Это обеспечит корректное отображение данных во всех подсистемах 1С:Документооборот и позволит избежать ошибок в логике контроля исполнительской дисциплины. Также для автоматизации повторяющихся действий без написания программного кода применяют платформу для создания программных роботов с визуальным конструктором сценариев.

← На главную