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

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

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

Стандартный механизм делегирования и его ограничения

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

Система предоставляет нам предопределенные Области делегирования прав, такие как "документы и файлы", "ежедневные отчеты", "мероприятия", "обсуждения", "контроль", "почта", "проекты", "процессы и задачи". Нам важно понимать, что эти области нельзя изменять или добавлять новые в режиме "Предприятия" без доработки конфигурации.

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

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

  1. Полномочия не делегируются. Совокупность ролей с правами доступа не передается. Если у замещающего сотрудника изначально отсутствуют необходимые полномочия для доступа к определенным типам объектов, он не получит эти права даже после делегирования.
  2. Передается результат расчета прав. Система передает не сами настройки прав пользователя, а конечный результат расчета его прав. Это означает, что если у делегирующего пользователя не было прав на какие-либо объекты, то делегат также их не получит.
  3. Роли напрямую не передаются. Если делегирующий имел неограниченную роль, предоставляющую права на объект, то делегат не получит эти права, так как система не передает роли в процессе делегирования.

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

Подходы к реализации частичного делегирования процессов и задач

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

1. Доработка механизма делегирования с использованием нового реквизита

Один из подходов предполагает добавление нового реквизита, который будет служить "разрезом" для делегирования. Мы можем добавить такой реквизит, например, в объекты ЗадачаОбъект или БизнесПроцессОбъект, а также в какой-либо регистр сведений, который будет хранить правила частичного делегирования. Разберем по шагам, как это может выглядеть:

  1. Добавление реквизита: Мы можем добавить новый реквизит, например, "ВидДелегирования" или "ГруппаЗадач", в справочник ВидыБизнесПроцессов или непосредственно в объекты задач.
  2. Настройка правил: Создаем отдельный регистр сведений (или расширяем существующий), где будем хранить, какие "ВидыДелегирования" или "ГруппыЗадач" разрешено делегировать конкретному заместителю.
  3. Переработка логики делегирования: Нам потребуется модифицировать модули, отвечающие за расчет прав доступа и отображение задач. В этих модулях мы будем анализировать наш новый реквизит и сверять его с правилами частичного делегирования.

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


// Пример концептуального кода в модуле, отвечающем за фильтрацию задач
Функция ПолучитьДоступныеЗадачиДляПользователя(Пользователь)
    Задачи = Новый СписокЗначений();
    // Получаем все задачи, которые потенциально видны пользователю
    ВсеЗадачи = ОбщиеФункции.ПолучитьЗадачиПоПользователю(Пользователь);

    Для Каждого Задача Из ВсеЗадачи Цикл
        Если ЭтоДелегированныйПользователь(Пользователь) Тогда
            // Если пользователь - заместитель, проверяем частичное делегирование
            Если РазрешеноЧастичноеДелегирование(Пользователь, Задача) Тогда
                Задачи.Добавить(Задача);
            КонецЕсли;
        Иначе
            // Обычный пользователь видит все свои задачи
            Задачи.Добавить(Задача);
        КонецЕсли;
    КонецЦикла;

    Возврат Задачи;
КонецФункции

Функция РазрешеноЧастичноеДелегирование(Делегат, Задача)
    // Здесь будет логика проверки нашего нового реквизита
    // Например, если у задачи есть реквизит "ГруппаДелегирования"
    // и эта группа разрешена для данного Делегата в нашем спец. регистре
    Возврат Истина; // Или Ложь в зависимости от проверки
КонецФункции

Этот подход требует глубокого понимания структуры бизнес-процессов и задач в 1С:Документообороте.

2. Перехват отправки задач и контроль полномочий

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

  1. Специальная таблица полномочий: Мы создаем в расширении конфигурации специальную таблицу (например, регистр сведений), где указываем, какие типы задач или задачи по каким предметам может выполнять замещающий сотрудник.
  2. Перехват события создания задачи: Нам необходимо найти место в коде конфигурации, где происходит создание задачи (например, в обработчике события ПриЗаписи или ПередЗаписью объекта ЗадачаОбъект, либо в модуле БизнесПроцессыИЗадачи).
  3. Проверка и отмена создания: В этом месте мы проверяем, если задача создается для пользователя-делегата, и при этом она не соответствует его разрешенным полномочиям в нашей спец. таблице, то мы отменяем создание задачи для этого пользователя или перенаправляем ее другому исполнителю.

Пример концептуального перехвата:


// В обработчике события ПередЗаписью для объекта ЗадачаОбъект
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ЭтотОбъект.Исполнитель.Делегирован Тогда // Предположим, что мы можем определить, что это делегат
        // Получаем информацию о делегировании
        ИнформацияОДелегировании = ПолучитьИнформациюОДелегировании(ЭтотОбъект.Исполнитель);

        // Проверяем, разрешена ли эта задача для частичного делегирования
        Если НЕ РазрешенаКонкретнаяЗадачаДляДелегата(ЭтотОбъект, ИнформацияОДелегировании) Тогда
            // Задача не разрешена для частичного делегирования
            Отказ = Истина; // Отменяем запись задачи для этого исполнителя
            // Также можно выдать сообщение пользователю или переназначить задачу
            Сообщить("Задача '" + ЭтотОбъект.Предмет + "' не может быть делегирована данному сотруднику.");
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Функция РазрешенаКонкретнаяЗадачаДляДелегата(Задача, ИнформацияОДелегировании)
    // Здесь мы реализуем логику проверки по нашей спец. таблице
    // Например, проверяем вид задачи, предмет задачи, или бизнес-процесс
    // к которому относится задача, сравнивая с разрешенными в ИнформацияОДелегировании
    Возврат Истина; // Или Ложь
КонецФункции

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

3. Вмешательство в права доступа и видимость

Еще один путь — это вмешательство в права доступа в определенных модулях, чтобы запретить видимость и работу с "лишними" задачами. Мы не даем создать задачу, а делаем так, чтобы пользователь просто не видел те задачи, которые ему не предназначены для частичного делегирования.

  1. Ограничение чтения: Мы можем вмешаться в модули, которые формируют списки задач для пользователей (например, формы списка задач, рабочие столы). Здесь мы можем добавить дополнительные условия фильтрации, которые будут "отнимать" права чтения у делегата на определенные задачи.
  2. Модификация запросов: Нам потребуется изменить запросы, которые выбирают задачи из базы данных. Добавим условия ГДЕ, основываясь на наших правилах частичного делегирования.

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

4. Создание новых областей делегирования

Как было упомянуто на форуме, мы можем добавить новые области делегирования. Эта идея подразумевает расширение самого механизма областей делегирования в конфигурации. Мы выясним, что это более глобальная доработка:

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

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

Альтернативный способ: Механизм подзадач

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

  1. Основной исполнитель получает задачу.
  2. Он создает одну или несколько подзадач для своих подчиненных, детализируя, что именно им нужно сделать.
  3. Подчиненные выполняют свои подзадачи.
  4. Основной исполнитель, после выполнения подзадач, завершает свою основную задачу.

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

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

← К списку