Важной частью любой информационной системы является авторизация пользователей. В 1C:Предприятии 8.3 предусмотрены удобные средства для реализации авторизации с помощью специального справочника "Пользователи". В данной статье мы рассмотрим этапы создания справочника "Пользователи" с реквизитами "Логин", "Пароль", "Роль" и "Уникальный идентификатор". Особенностью будет то, что роль будет связана с перечислением "Роли".
Шаг 1: Создание справочника "Пользователи"
- Запустите 1C:Предприятие 8.3 и откройте нужную информационную базу.
- В меню выберите "Справочники" -> "Справочники" или воспользуйтесь горячей клавишей F8.
- В открывшемся окне нажмите кнопку "Создать" для создания нового справочника.
- Введите название справочника, например, "Пользователи", и нажмите "ОК".
Шаг 2: Создание перечисления "Роли"
- В меню выберите "Справочники" -> "Перечисления" или воспользуйтесь горячей клавишей Ctrl+Shift+E.
- В открывшемся окне нажмите кнопку "Создать" для создания нового перечисления.
- Введите название перечисления, например, "Роли", и нажмите "ОК".
- В списке значений перечисления добавьте нужные роли, например, "Администратор", "Менеджер", "Директор" и т.д.
- Нажмите "ОК", чтобы сохранить созданное перечисление.

Шаг 3: Добавление реквизитов в справочник
- 
	В открывшемся окне справочника "Пользователи" нажмите кнопку "Реквизиты". 
- 
	В списке реквизитов нажмите кнопку "Добавить" для добавления нового реквизита. 
- 
	Добавьте следующие реквизиты и их типы данных: - Логин (Тип: Строка, Длина: 50)
- Пароль (Тип: Строка, Длина: 50)
- Роль (Тип: ПеречислениеСсылка.Роли)
- УникальныйИдентификатор (Тип: УникальныйИдентификатор)
 
- 
	Нажмите "ОК", чтобы сохранить добавленные реквизиты. 
Шаг 4: Добавление формы элемента в событиях формы
- Вернитесь к справочнику "Пользователи" и выберите в меню "Формы" -> "ФормаЭлемента".
- В открывшемся окне формы элемента перейдите на вкладку "События" и найдите событие "Открытие" (или другое событие, которое вам подходит).
- В окне редактора кода вставьте следующий код:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Запрос=Новый Запрос;
    Запрос.Текст= "ВЫБРАТЬ
                  |    Пользователи.Логин КАК Логин,
                  |    Пользователи.УникальныйИдентификатор КАК УникальныйИдентификатор
                  |ИЗ
                  |    Справочник.Пользователи КАК Пользователи
                  |ГДЕ
                  |    Пользователи.Логин = &Логин";     
    
    Запрос.УстановитьПараметр("Логин", Объект.Логин);
    Результат=Запрос.Выполнить().Выбрать();
    Если Результат.Следующий() Тогда    
        //Если одна и та же запись справочника, то условие будет истинно. Если нет пользователей с таким логином, то условие будет истинно.
        Если Результат.Количество()= 0 ИЛИ ТекущийОбъект.УникальныйИдентификатор = Результат.УникальныйИдентификатор Тогда  
            //Нахождение пользователя в списке пользователей информационной базы через уникальный идентификатор
            ПользовательСсылка=ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ТекущийОбъект.УникальныйИдентификатор);
            
            //Если пользователь не найден, то создается новый
            
            //Присмечание: Если значение не найдено
            //то для пользователя с административными правами возвращается значение Неопределено,
            //для других пользователей вызывается исключение
            Если ПользовательСсылка=Неопределено тогда 
                
                НовыйПользователь=ПользователиИнформационнойБазы.СоздатьПользователя();
                НовыйПользователь.Имя = Объект.Логин;  
                НовыйПользователь.Пароль = Объект.Пароль;
                НовыйПользователь.ПолноеИмя = Объект.Наименование;
                Если объект.Роль=Перечисления.Роли.Администратор Тогда
                    НовыйПользователь.Роли.Добавить(Метаданные.Роли.Администратор);      
                ИначеЕсли объект.Роль=Перечисления.Роли.Менеджер Тогда
                    НовыйПользователь.Роли.Добавить(Метаданные.Роли.Менеджер);
                ИначеЕсли объект.Роль=Перечисления.Роли.Мастер Тогда
                    НовыйПользователь.Роли.Добавить(Метаданные.Роли.Мастер);
                ИначеЕсли объект.Роль=Перечисления.Роли.Замерщик Тогда
                    НовыйПользователь.Роли.Добавить(Метаданные.Роли.Замерщик); 
                ИначеЕсли объект.Роль=Перечисления.Роли.Директор Тогда
                    НовыйПользователь.Роли.Добавить(Метаданные.Роли.Директор);
                КонецЕсли;
                НовыйПользователь.ПоказыватьВСпискеВыбора=Ложь;
                
                //Уникальный идентификатор у пользователя ИБ неявно создается после записи.
                НовыйПользователь.Записать();
                ТекущийОбъект.УникальныйИдентификатор=НовыйПользователь.УникальныйИдентификатор;
                Иначе
                ПользовательСсылка.Пароль=Объект.Пароль; 
                ПользовательСсылка.ПолноеИмя=Объект.Наименование;
                ПользовательСсылка.Роли.Очистить();    
                Если объект.Роль=Перечисления.Роли.Администратор Тогда
                    ПользовательСсылка.Роли.Добавить(Метаданные.Роли.Администратор);      
                ИначеЕсли объект.Роль=Перечисления.Роли.Менеджер Тогда
                    ПользовательСсылка.Роли.Добавить(Метаданные.Роли.Менеджер);
                ИначеЕсли объект.Роль=Перечисления.Роли.Мастер Тогда
                    НовыйПользователь.Роли.Добавить(Метаданные.Роли.Мастер);
                ИначеЕсли объект.Роль=Перечисления.Роли.Замерщик Тогда
                    НовыйПользователь.Роли.Добавить(Метаданные.Роли.Замерщик); 
                ИначеЕсли объект.Роль=Перечисления.Роли.Директор Тогда
                    НовыйПользователь.Роли.Добавить(Метаданные.Роли.Директор);
                КонецЕсли;
                ПользовательСсылка.Записать();
            КонецЕсли;
        Иначе
            Сообщ=Новый СообщениеПользователю;
            Сообщ.Текст="Пользователь с таким логином уже существует!";
            Сообщ.Сообщить();
            Отказ=Истина;
        КонецЕсли
    Иначе
        НовыйПользователь=ПользователиИнформационнойБазы.СоздатьПользователя();
        НовыйПользователь.Имя=Объект.Логин;
        НовыйПользователь.Пароль=Объект.Пароль;
        НовыйПользователь.ПолноеИмя=Объект.Наименование; 
        Если объект.Роль=Перечисления.Роли.Администратор Тогда
            НовыйПользователь.Роли.Добавить(Метаданные.Роли.Администратор);      
        ИначеЕсли объект.Роль=Перечисления.Роли.Менеджер Тогда
            НовыйПользователь.Роли.Добавить(Метаданные.Роли.Менеджер);
        ИначеЕсли объект.Роль=Перечисления.Роли.Мастер Тогда
            НовыйПользователь.Роли.Добавить(Метаданные.Роли.Мастер);
        ИначеЕсли объект.Роль=Перечисления.Роли.Замерщик Тогда
            НовыйПользователь.Роли.Добавить(Метаданные.Роли.Замерщик); 
        ИначеЕсли объект.Роль=Перечисления.Роли.Директор Тогда
            НовыйПользователь.Роли.Добавить(Метаданные.Роли.Директор);
        КонецЕсли;
        НовыйПользователь.ПоказыватьВСпискеВыбора=Ложь;
            
        //Уникальный идентификатор пользователя ИБ неявно создается после записи
        НовыйПользователь.Записать();
        ТекущийОбъект.УникальныйИдентификатор=НовыйПользователь.УникальныйИдентификатор;
    КонецЕсли;
        
КонецПроцедуры

- Сохраните изменения.
Шаг 5: Дополнительная настройка и использование
- После создания справочника "Пользователи" вы можете настроить его дополнительные параметры, такие как права доступа к данным, формы элемента и т.д.
- Вы можете использовать данный справочник для реализации авторизации пользователей в вашей информационной системе. Для этого вам понадобится создать соответствующие формы, обработчики событий и дополнительный код для проверки логина и пароля при авторизации.
Это были основные этапы создания справочника "Пользователи" с реквизитами "Логин", "Пароль", "Роль" и "Уникальный идентификатор" в 1C:Предприятие 8. Вы можете дополнить данный функционал своими настройками и логикой в зависимости от требований вашей информационной системы.
Вступайте в нашу телеграмм-группу Инфостарт

