Настройки пользователей в УПП

03 июля 2013

Общие сведения

Конфигурация "Управление производственным предприятием" релиз 1.3 включает в себя механизм настроек пользователей, с помощью которого можно устанавливать параметры автозаполнения форм, настройки в документа по умолчанию и много другое.  

Сегодня в статье рассмотрим работы с настройками пользователей в режиме 1С:Предприятие, а также его реализацию в конфигураторе.

Режим 1С:Предприятие

Откроем окно настрое пользователя (не важно какого). Увидим примерно следующее:

Продемонстрируем влияние настроек на работу пользователя. Изменим настройку "Запретить открытие нескольких сеансов" в значение ИСТИНА. Затем, не закрывая текущий сеанс, попытаемся войти в программу под той же учетной записью. Система нам выдаст предупреждение и не закроет сеанс: 

Если мы вернем настройку в прежнее состояние, то запуск нескольких сеансов станет возможным.

Как Вы могли заметить, список доступным настроек пользователей достаточно обширный. Подробнее о назначении каждой из них Вы можете прочитать во встроеной справке конфигурации "Управление производственным предприятием", за исключением тех случаев, когда настройки были добавлены пользователями/администратором и не являются предопределенными.

Режим конфигуратора

Механизм настроек пользователей имеет достаточно простую реализацию. Используются всего два объекта в дереве конфигурации: 

  1. План видов характеристик "НастройкиПользователей".
  2. Регистр сведений "НастройкиПользователей".

План видов характеристик определяет тип значения характеристики, сохраняемой в регистре сведений "НастройкиПользователей". Вот список некоторых доступных типов значений, установленный в типовой конфигурации:

Для элемента "Запретить открытие нескольких сеансов" плана видов характеристик "Настройки пользователей" установлен тип "Булево". При запуске программы  производится проверка включения этой опции. Если значение для настройки по текущему пользователю установлено в ИСТИНА, тогда выполняется проверка наличия запущенных сеаносв этим пользователем. 

Вот часть кода проверки из модуля обычного приложения события "ПриНачалеРаботыСистемы":

// При начале работы системы
//
Процедура ПриНачалеРаботыСистемы()

/// .............................

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

// .....................................

КонецПроцедуры	

Самый интересный момент - это процедура "ПолучитьЗначениеПоУмолчанию". Первым параметром в нее передается текущий пользователь (ссылка на элемент справочника "Пользователи"), вторым - имя элемента плана видов характеристик "Настройки пользователей", для которого нужно получить значение. Вот так выглядит код обработчика этой функции:

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

Здесь, если получаем настройку для текущего пользователя, то ее значение пытаемся получить из кэша. В остальных случаях непосредственно из регистра сведений "НастройкиПользователей".

Таким же образом выполняется обработка настроек пользователей в других процедурах и функциях конфигурации. Получаем значение настройки и выполняем действия в зависимости от условий.


comments powered by Disqus