Несмотря на то, что стандартный механизм хранения настроек в большинстве случаев вполне устраивает, хотелось бы доработать конфигурацию так, чтобы все пользователи прикладного решения могли пользоваться вариантами отчетов и пользовательскими настройками, созданными в режиме 1С:Предприятие.
Предположим, что пользователь, обладающий административными правами, является достаточно квалифицированным и может создавать различные варианты и настройки отчетов. Предоставим ему возможность копировать эти настройки другим рядовым пользователям.
Создадим общую команду КопироватьНастройкиОтчетов и укажем группу Сервис в панели действий приложения, в которой она будет отображаться (рис. 3.216).
Рис. 3.216. Свойства команды для копирования настроек
В диалоге Командный интерфейс рабочего стола предоставим доступ к этой команде только пользователю с ролью Администратор (рис. 3.217).
Рис. 3.217. Видимость команды по ролям
В модуле команды напишем следующий код (листинг 3.49).
Листинг 3.49. Обработчик команды для копирования настроек
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
СкопироватьНастройкиОтчетов();
КонецПроцедуры
Процедура СкопироватьНастройкиОтчетов()
СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
СписокОтчетов = Метаданные.Отчеты;
Для Каждого Пользователь Из СписокПользователей Цикл
ТекущийПользователь = Пользователь.Имя;
Если ТекущийПользователь <> ИмяПользователя() Тогда
Сообщить("Копирование настроек для пользователя: " + ТекущийПользователь);
Для Каждого Отчет Из СписокОтчетов Цикл
ИмяОтчета = "Отчет." + Отчет.Имя;
СписокВариантовОтчета = ХранилищеВариантовОтчетов.
ПолучитьСписок(ИмяОтчета);
Для Каждого Вариант Из СписокВариантовОтчета Цикл
КлючВарианта = Вариант.Значение;
Сообщить("Вариант отчета: " + Вариант.Представление);
ОписаниеВарианта = ХранилищеВариантовОтчетов.
ПолучитьОписание(ИмяОтчета, КлючВарианта);
// Сообщить(ОписаниеВарианта.Представление);
ВариантОтчета = ХранилищеВариантовОтчетов.
Загрузить(ИмяОтчета, КлючВарианта);
ХранилищеВариантовОтчетов.Сохранить(ИмяОтчета, КлючВарианта,
ВариантОтчета, ОписаниеВарианта, ТекущийПользователь);
КонецЦикла;
КлючВариантаОтчета = ИмяОтчета + "/"+ КлючВарианта;
СписокНастроекВарианта = ХранилищеПользовательскихНастроекОтчетов.
ПолучитьСписок(КлючВариантаОтчета);
Для Каждого Настройка Из СписокНастроекВарианта Цикл
КлючНастройкиВарианта = Настройка.Значение;
Сообщить("Пользовательская настройка:" + Настройка.Представление);
ОписаниеНастройкиВарианта =
ХранилищеПользовательскихНастроекОтчетов.
ПолучитьОписание(КлючВариантаОтчета,
КлючНастройкиВарианта);
// Сообщить(ОписаниеНастройкиВарианта.Представление);
НастройкаВариантаОтчета =
ХранилищеПользовательскихНастроекОтчетов.
Загрузить(КлючВариантаОтчета, КлючНастройкиВарианта);
ХранилищеПользовательскихНастроекОтчетов.
Сохранить(КлючВариантаОтчета, КлючНастройкиВарианта,
НастройкаВариантаОтчета, ОписаниеНастройкиВарианта,
ТекущийПользователь);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
В процедуре СкопироватьНастройкиОтчетов() сначала определяется список пользователей информационной базы и список отчетов в коллекции метаданных. Затем для каждого пользователя, кроме текущего (т. е. администратора), обходится список отчетов.
В цикле для каждого отчета получается список вариантов отчета, сохраненных в стандартном хранилище (ХранилищеВариантовОтчетов.ПолучитьСписок()). Доступ к менеджеру стандартного хранилища настроек получается при помощи метода глобального контекста ХранилищеВариантовОтчетов или ХранилищеПользовательскихНастроекОтчетов.
Затем для каждого варианта отчета, используя методы менеджера стандартного хранилища настроек ПолучитьОписание(), Загрузить(), Сохранить(), получаются описание варианта, собственно сам вариант отчета, и полученные данные сохраняются для каждого пользователя.
Далее для каждого варианта отчета получается список пользовательских настроек варианта отчета (ХранилищеПользовательскихНастроекОтчетов.ПолучитьСписок()).
Затем для каждой пользовательской настройки варианта отчета, используя методы менеджера стандартного хранилища настроек ПолучитьОписание(), Загрузить(), Сохранить(), получаются описание пользовательской настройки, собственно сама пользовательская настройка, и полученные данные сохраняются для каждого пользователя.
В качестве ключа объекта для вариантов отчета используется полное имя отчета, например, строка Отчет.ОстаткиНоменклатуры. В качестве ключа объекта для пользовательских настроек вариантов отчета используется полное имя отчета плюс через флеш (/) ключ варианта отчета.
В результате выполнения команды Копировать настройки отчетов, инициируемой администратором, все варианты отчетов и пользовательские настройки, созданные им в режиме 1С:Предприятие, будут скопированы другим пользователям прикладного решения.