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