В процессе автоматизации документооборота часто возникает задача ограничить выбор сотрудников в поле Подписант. По умолчанию стандартный выбор из справочника Пользователи предлагает полный список сотрудников, что неудобно и может привести к ошибкам. В данной статье мы разберем несколько профессиональных способов реализации этой задачи в конфигурации 1С:Документооборот 2.1, начиная от простейших настроек метаданных и заканчивая программным управлением списками выбора.
Рассмотрим ситуацию, когда мы хотим минимизировать вмешательство в программный код. Мы можем добавить пользователям специальную пометку (флаг), которая будет определять их право подписи. Проанализируем, как настроить фильтрацию в этом случае.
Во-первых, добавим дополнительный реквизит Подписант (тип Булево) для справочника Пользователи. После этого в документе, где нам нужно поле подписанта, укажем тип СправочникСсылка.Пользователи. Чтобы ограничить список, в конфигураторе в свойстве реквизита Параметры выбора можно установить фиксированный отбор. Это позволит системе автоматически отсекать ненужных пользователей.
Важно не забывать про актуальность списка. В отбор обязательно нужно добавить условия:
Отбор.ПометкаУдаления(Ложь) — чтобы не видеть удаленные объекты.Отбор.Недействителен(Ложь) — чтобы исключить уволенных сотрудников.Отбор.ДополнительныйРеквизит_Подписант(Истина) — наше кастомное условие.Если статических фильтров недостаточно, разберем программный способ. Это необходимо, когда список подписантов должен меняться динамически в зависимости от контекста (например, от организации или вида документа). Выясним, как перехватить выбор пользователя в форме документа.
Для этого в модуле формы документа нам потребуется создать обработчик события ПриНачалеВыбора для нашего реквизита. Рассмотрим пример кода, который подменяет стандартную форму выбора формой с заранее подготовленным списком или установленным программным отбором:
&НаКлиенте
Процедура ПодписантНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
// Формируем отбор: только действующие пользователи с правом подписи
Отбор = Новый Структура;
Отбор.Вставить("Недействителен", Ложь);
Отбор.Вставить("ПометкаУдаления", Ложь);
// Если мы используем доп. реквизит, имя которого знаем в системе
// Отбор.Вставить("ДополнительныйРеквизит_ПравоПодписи", Истина);
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры
Более гибкий подход, характерный для 1С:Документооборот, — это привязка права подписи к определенной роли или профилю групп доступа. Это позволяет администраторам системы управлять списком подписантов без изменения программного кода, просто добавляя пользователей в нужную группу.
Проанализируем пример функции, которая проверяет наличие пользователя в определенном профиле доступа. Этот код можно использовать для проверки прав при записи документа или для построения списка выбора.
&НаСервере
Функция ПроверитьВхождениеВПрофиль(Пользователь, НаименованиеПрофиля) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ГруппыДоступаПользователи.Пользователь
|ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
| ПО ГруппыДоступаПользователи.Ссылка = ГруппыДоступа.Ссылка
|ГДЕ
| ГруппыДоступа.Профиль.Наименование = &НаименованиеПрофиля
| И ГруппыДоступаПользователи.Пользователь = &Пользователь";
Запрос.УстановитьПараметр("НаименованиеПрофиля", НаименованиеПрофиля);
Запрос.УстановитьПараметр("Пользователь", Пользователь);
РезультатЗапроса = Запрос.Выполнить();
Возврат НЕ РезультатЗапроса.Пустой();
КонецФункции
Для крупных организаций оптимальным решением станет создание отдельного Регистра сведений (например, ПраваПодписи). Рассмотрим преимущества этого подхода. В регистре можно хранить не только ссылку на пользователя, но и срок действия его полномочий, а также ссылку на доверенность.
Разберем логику работы:
Пользователь и Организация.Разрешено (Булево) или ДатаОкончания.Такой метод позволяет легко реализовать отчетность: кто имел право подписи в определенный период времени, что крайне важно для юридической чистоты документооборота.
Посмотрим на встроенный механизм Рабочих групп в 1С:ДО. Мы можем создать рабочую группу с названием Подписанты. Преимущество в том, что в эту группу можно включать не только отдельных пользователей, но и целые подразделения или другие группы пользователей.
В событии ПриНачалеИзменения или НачалоВыбора мы можем программно получить состав этой группы и передать его в СписокВыбора элемента формы. Это обеспечит пользователю максимально быстрый выбор из 5-10 человек вместо сотен сотрудников компании.
Если в вашей базе используется квалифицированная электронная подпись (КЭП), логично ограничить выбор подписанта теми сотрудниками, у которых есть действующий сертификат. Проанализируем, как это реализовать.
В системе 1С:ДО существует регистр СертификатыПользователей. При открытии списка выбора мы можем наложить фильтр, который оставит только тех пользователей, чьи сертификаты загружены в систему и не просрочены. Это исключит ситуацию, когда документ подготовлен для конкретного директора, а он технически не может его подписать из-за отсутствия ключа ЭП в системе.
Подведем итог. Выбор метода зависит от сложности ваших бизнес-процессов:
Параметры выбора в конфигураторе.Роли исполнителей или Группы доступа.Регистр сведений с привязкой к доверенностям и сертификатам ЭП.При любом способе реализации всегда учитывайте проверку на Недействителен и ПометкаУдаления, чтобы список подписантов всегда оставался актуальным и не содержал уволенных сотрудников.