Как автоматически назначить исполнителя в 1С:Документооборот на основании предыдущего этапа?

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

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

В этой статье мы подробно разберем, как реализовать этот механизм, используя программные возможности системы и справочник Алгоритмы автоподстановки. Мы рассмотрим логику поиска исполнителя через визы согласования и через задачи бизнес-процесса.

Понимание механики автоподстановки

Прежде всего, проанализируем, где именно в системе происходит магия выбора исполнителя. В настройках действия (этапа обработки) в колонке "Исполнители" можно указывать не только конкретных пользователей или роли, но и объекты справочника АлгоритмыАвтоподстановки.

Когда система доходит до формирования задачи на определенном этапе, она запускает программный код, написанный в выбранном алгоритме. Этот код должен вернуть результат — конкретную ссылку на пользователя (или массив ссылок), который и станет исполнителем задачи. Главным входным параметром для такого скрипта всегда является переменная Источник, которая представляет собой сам документ (предмет процесса).

Способ 1: Получение исполнителя через визы согласования

Если нам нужно найти того, кто согласовал документ на предыдущем этапе, самым логичным путем будет обращение к данным согласования. Рассмотрим ситуацию: у нас есть действие "Согласование с ПЭО", и нам нужно передать этого же сотрудника в действие "Задание в ПЭО".

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


// Инициализируем запрос к данным виз
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	ВизыСогласования.Исполнитель КАК Исполнитель
    |ИЗ
    |	Справочник.ВизыСогласования КАК ВизыСогласования
    |ГДЕ
    |	ВизыСогласования.Владелец = &Источник
    |	И ВизыСогласования.РезультатСогласования = ЗНАЧЕНИЕ(Перечисление.РезультатыСогласования.Согласовано)
    |	И ВизыСогласования.Удалена = ЛОЖЬ
    |	И ВизыСогласования.РольИсполнителя.Наименование ПОДОБНО %ИмяРоли%";

Запрос.УстановитьПараметр("Источник", Источник);
Запрос.УстановитьПараметр("ИмяРоли", "Экономист");

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда
    Результат = Выборка.Исполнитель;
КонецЕсли;

Важный нюанс: если документ проходил несколько итераций (кругов) согласования, в справочнике ВизыСогласования может накопиться много записей. В таком случае стоит добавить условие по дате или номеру итерации, чтобы получить именно последнюю актуальную визу. Также обратите внимание на использование общей функции РаботаСВизамиСогласования.ПолучитьАктивныеВизыДокумента(Источник), которая может упростить получение коллекции объектов без прямого запроса.

Способ 2: Поиск через фактически выполненную задачу

Иногда использование виз может быть не совсем точным, особенно если в процессе участвуют роли и используется механизм "Взять в работу". Более надежный способ выяснить, кто именно работал с документом — найти завершенную задачу конкретного бизнес-процесса.

Разберем по шагам, как это работает:

  1. Система создает задачу для роли "Экономист".
  2. Один из сотрудников нажимает кнопку "Взять в работу". В этот момент поле Исполнитель в задаче меняется с Роли на конкретного Пользователя.
  3. После выполнения задачи (нажатия "Согласовано") задача закрывается, сохраняя информацию о том, кто ее завершил.

Для реализации этого метода в скрипте автоподстановки мы можем использовать следующий подход:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |	ЗадачиИсполнителя.Исполнитель КАК ФактическийИсполнитель
    |ИЗ
    |	Задача.ЗадачаИсполнителя КАК ЗадачиИсполнителя
    |ГДЕ
    |	ЗадачиИсполнителя.Предметы.Предмет = &Источник
    |	И ЗадачиИсполнителя.Выполнена = ИСТИНА
    |	И ЗадачиИсполнителя.Наименование ПОДОБНО ""%Согласование с ПЭО%""
    |УПОРЯДОЧИТЬ ПО
    |	ЗадачиИсполнителя.ДатаЗавершения УБЫВ";

Запрос.УстановитьПараметр("Источник", Источник);
РезультатЗапроса = Запрос.Выполнить();

Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    Результат = Выборка.ФактическийИсполнитель;
КонецЕсли;

Этот метод считается более "чистым", так как он опирается на историю выполнения задач, а не на состояние справочников, которые могут меняться вручную.

Особенности реализации в версии 1С:Документооборот 3.0

В редакции 3.0 архитектура процессов существенно изменилась. Теперь мы работаем не с отдельными бизнес-процессами, а с единым процессом обработки, разделенным на действия. Выясним причину, по которой старые запросы могут не сработать: данные об участниках теперь хранятся в других таблицах.

Для версии 3.0 рекомендуется использовать программный интерфейс (API) системы. Например, можно обратиться к модулю РаботаСДействиямиОбъект или анализировать регистр сведений ИсполнителиЗадач. В скрипте автоподстановки для 3.0 мы можем получить исполнителя конкретного действия, обратившись к коллекции Действия текущего процесса обработки документа.

Как внедрить готовое решение?

Проанализируем последовательность действий администратора или разработчика для настройки этой автоматизации:

  1. Откройте справочник Алгоритмы автоподстановки (в разделе "Настройка и администрирование" или через "Все функции").
  2. Создайте новый элемент с понятным названием, например: "Исполнитель, согласовавший от ПЭО".
  3. В поле кода вставьте один из разобранных выше примеров (через задачи или через визы). Важно: убедитесь, что переменной Результат присваивается значение.
  4. Перейдите в Правила обработки документов и выберите нужный вид документа.
  5. В действии, где нужно назначить того же сотрудника (например, "Задание в ПЭО"), в колонке "Исполнители" нажмите кнопку выбора.
  6. В открывшемся окне перейдите на закладку "Автоподстановки" и выберите ваш созданный алгоритм.
  7. Сохраните настройки и проверьте работу на тестовом документе.

Таким образом, мы исключаем человеческий фактор и необходимость ручного выбора сотрудника на каждом этапе. Система сама "вспомнит", кто работал с документом ранее, и направит задачу по адресу.

← На главную