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