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