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