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

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

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

Метод 1. Использование дополнительных реквизитов и параметров выбора

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

Во-первых, добавим дополнительный реквизит Подписант (тип Булево) для справочника Пользователи. После этого в документе, где нам нужно поле подписанта, укажем тип СправочникСсылка.Пользователи. Чтобы ограничить список, в конфигураторе в свойстве реквизита Параметры выбора можно установить фиксированный отбор. Это позволит системе автоматически отсекать ненужных пользователей.

Важно не забывать про актуальность списка. В отбор обязательно нужно добавить условия:

  1. Отбор.ПометкаУдаления(Ложь) — чтобы не видеть удаленные объекты.
  2. Отбор.Недействителен(Ложь) — чтобы исключить уволенных сотрудников.
  3. Отбор.ДополнительныйРеквизит_Подписант(Истина) — наше кастомное условие.

Метод 2. Программная фильтрация через событие НачалоВыбора

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

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


&НаКлиенте
Процедура ПодписантНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    ПараметрыФормы = Новый Структура;
    
    // Формируем отбор: только действующие пользователи с правом подписи
    Отбор = Новый Структура;
    Отбор.Вставить("Недействителен", Ложь);
    Отбор.Вставить("ПометкаУдаления", Ложь);
    
    // Если мы используем доп. реквизит, имя которого знаем в системе
    // Отбор.Вставить("ДополнительныйРеквизит_ПравоПодписи", Истина);
    
    ПараметрыФормы.Вставить("Отбор", Отбор);
    ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
    
    ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент);
    
КонецПроцедуры

Метод 3. Использование профилей и групп доступа

Более гибкий подход, характерный для 1С:Документооборот, — это привязка права подписи к определенной роли или профилю групп доступа. Это позволяет администраторам системы управлять списком подписантов без изменения программного кода, просто добавляя пользователей в нужную группу.

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


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

Метод 4. Регистр сведений Права подписи

Для крупных организаций оптимальным решением станет создание отдельного Регистра сведений (например, ПраваПодписи). Рассмотрим преимущества этого подхода. В регистре можно хранить не только ссылку на пользователя, но и срок действия его полномочий, а также ссылку на доверенность.

Разберем логику работы:

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

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

Метод 5. Интеграция с рабочими группами

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

В событии ПриНачалеИзменения или НачалоВыбора мы можем программно получить состав этой группы и передать его в СписокВыбора элемента формы. Это обеспечит пользователю максимально быстрый выбор из 5-10 человек вместо сотен сотрудников компании.

Метод 6. Учет сертификатов электронной подписи

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

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

Резюме и рекомендации

Подведем итог. Выбор метода зависит от сложности ваших бизнес-процессов:

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

← На главную