Конфигурация "Управление производственным предприятием" релиз 1.3 включает в себя механизм настроек пользователей, с помощью которого можно устанавливать параметры автозаполнения форм, настройки в документа по умолчанию и много другое.
Сегодня в статье рассмотрим работы с настройками пользователей в режиме 1С:Предприятие, а также его реализацию в конфигураторе.
Откроем окно настрое пользователя (не важно какого). Увидим примерно следующее:
Продемонстрируем влияние настроек на работу пользователя. Изменим настройку "Запретить открытие нескольких сеансов" в значение ИСТИНА. Затем, не закрывая текущий сеанс, попытаемся войти в программу под той же учетной записью. Система нам выдаст предупреждение и не закроет сеанс:
Если мы вернем настройку в прежнее состояние, то запуск нескольких сеансов станет возможным.
Как Вы могли заметить, список доступным настроек пользователей достаточно обширный. Подробнее о назначении каждой из них Вы можете прочитать во встроеной справке конфигурации "Управление производственным предприятием", за исключением тех случаев, когда настройки были добавлены пользователями/администратором и не являются предопределенными.
Механизм настроек пользователей имеет достаточно простую реализацию. Используются всего два объекта в дереве конфигурации:
План видов характеристик определяет тип значения характеристики, сохраняемой в регистре сведений "НастройкиПользователей". Вот список некоторых доступных типов значений, установленный в типовой конфигурации:
Для элемента "Запретить открытие нескольких сеансов" плана видов характеристик "Настройки пользователей" установлен тип "Булево". При запуске программы производится проверка включения этой опции. Если значение для настройки по текущему пользователю установлено в ИСТИНА, тогда выполняется проверка наличия запущенных сеаносв этим пользователем.
Вот часть кода проверки из модуля обычного приложения события "ПриНачалеРаботыСистемы":
// При начале работы системы // Процедура ПриНачалеРаботыСистемы() /// ............................. // Получаем значение настройки ЗапретитьОткрытиеНесколькихСеансов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ЗапретитьОткрытиеНесколькихСеансов" ); Если ЗапретитьОткрытиеНесколькихСеансов Тогда ТекущийНомерСоединения = НомерСоединенияИнформационнойБазы(); УникальныйИдентификаторПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; // Ищем текущего пользователия ИБ в уже подключенных сеансах МассивСоединений = ПолучитьСоединенияИнформационнойБазы(); Для Каждого ТекСоединение Из МассивСоединений Цикл Если (ТекСоединение.ИмяПриложения = "1CV8") И (НЕ ТекСоединение.НомерСоединения = ТекущийНомерСоединения) И (НЕ ТекСоединение.Пользователь = неопределено) И (ТекСоединение.Пользователь.УникальныйИдентификатор = УникальныйИдентификаторПользователя) Тогда Предупреждение("Пользователем с таким именем уже выполнен вход в систему"); ЗавершитьРаботуСистемы(Ложь); Возврат; КонецЕсли; КонецЦикла; КонецЕсли; // ..................................... КонецПроцедуры
Самый интересный момент - это процедура "ПолучитьЗначениеПоУмолчанию". Первым параметром в нее передается текущий пользователь (ссылка на элемент справочника "Пользователи"), вторым - имя элемента плана видов характеристик "Настройки пользователей", для которого нужно получить значение. Вот так выглядит код обработчика этой функции:
// Функция возвращает значение по умолчанию для передаваемого пользователя и настройки. // // Параметры: // Пользователь - текущий пользователь программы // Настройка - признак, для которого возвращается значение по умолчанию // // Возвращаемое значение: // Значение по умолчанию для настройки. // Функция ПолучитьЗначениеПоУмолчанию(Пользователь, Настройка) Экспорт Если Пользователь = глЗначениеПеременной("глТекущийПользователь") Тогда НастройкаСсылка = ПланыВидовХарактеристик.НастройкиПользователей[Настройка]; КэшНастроекПользователей = глЗначениеПеременной("ЗначенияНастроекПользователей"); ЗначениеНастройки = КэшНастроекПользователей[НастройкаСсылка]; Если ЗначениеНастройки = Неопределено Тогда ЗначениеНастройки = ПолучитьЗначениеПоУмолчаниюПользователя(Пользователь, Настройка); КэшНастроекПользователей[НастройкаСсылка] = ЗначениеНастройки; #Если НЕ Клиент И НЕ ВнешнееСоединение Тогда // На сервере cохраним значение в КЭШе // В других случаях значение получено "по ссылке", сохранять не требуется глЗначениеПеременнойУстановить("ЗначенияНастроекПользователей", КэшНастроекПользователей, Истина); #КонецЕсли КонецЕсли; Возврат ЗначениеНастройки; КонецЕсли; Возврат ПолучитьЗначениеПоУмолчаниюПользователя(Пользователь, Настройка); КонецФункции // ПолучитьЗначениеПоУмолчанию()
Здесь, если получаем настройку для текущего пользователя, то ее значение пытаемся получить из кэша. В остальных случаях непосредственно из регистра сведений "НастройкиПользователей".
Таким же образом выполняется обработка настроек пользователей в других процедурах и функциях конфигурации. Получаем значение настройки и выполняем действия в зависимости от условий.